From 1bc4c1a8acc87d39d85f392695fc10133e12b2fb Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Sun, 17 Apr 2016 14:49:00 +0100 Subject: [PATCH] Screw godep --- cmd/strelaypoolsrv/Godeps/Godeps.json | 95 - cmd/strelaypoolsrv/Godeps/Readme | 5 - .../Godeps/_workspace/.gitignore | 2 - .../github.com/bkaradzic/go-lz4/.gitignore | 1 - .../github.com/bkaradzic/go-lz4/.travis.yml | 9 - .../src/github.com/bkaradzic/go-lz4/LICENSE | 24 - .../src/github.com/bkaradzic/go-lz4/README.md | 71 - .../src/github.com/bkaradzic/go-lz4/fuzz.go | 23 - .../bkaradzic/go-lz4/fuzzer/main.go | 74 - .../bkaradzic/go-lz4/lz4-example/main.go | 94 - .../src/github.com/bkaradzic/go-lz4/reader.go | 199 - .../src/github.com/bkaradzic/go-lz4/writer.go | 190 - .../src/github.com/calmh/du/LICENSE | 24 - .../src/github.com/calmh/du/README.md | 14 - .../src/github.com/calmh/du/cmd/du/main.go | 21 - .../src/github.com/calmh/du/diskusage.go | 8 - .../github.com/calmh/du/diskusage_posix.go | 24 - .../calmh/du/diskusage_unsupported.go | 13 - .../github.com/calmh/du/diskusage_windows.go | 27 - .../src/github.com/calmh/luhn/LICENSE | 19 - .../src/github.com/calmh/luhn/luhn.go | 70 - .../src/github.com/calmh/xdr/.gitignore | 1 - .../src/github.com/calmh/xdr/.travis.yml | 19 - .../src/github.com/calmh/xdr/LICENSE | 19 - .../src/github.com/calmh/xdr/README.md | 12 - .../src/github.com/calmh/xdr/circle.yml | 3 - .../github.com/calmh/xdr/cmd/genxdr/main.go | 530 -- .../src/github.com/calmh/xdr/debug.go | 16 - .../src/github.com/calmh/xdr/doc.go | 5 - .../src/github.com/calmh/xdr/generate.sh | 4 - .../src/github.com/calmh/xdr/pad_ipdr.go | 10 - .../src/github.com/calmh/xdr/pad_xdr.go | 14 - .../src/github.com/calmh/xdr/reader.go | 171 - .../src/github.com/calmh/xdr/reader_ipdr.go | 49 - .../src/github.com/calmh/xdr/reader_xdr.go | 15 - .../src/github.com/calmh/xdr/writer.go | 146 - .../src/github.com/calmh/xdr/writer_ipdr.go | 41 - .../src/github.com/calmh/xdr/writer_xdr.go | 14 - .../github.com/golang/groupcache/lru/lru.go | 121 - .../src/github.com/juju/ratelimit/LICENSE | 191 - .../src/github.com/juju/ratelimit/README.md | 117 - .../github.com/juju/ratelimit/ratelimit.go | 221 - .../src/github.com/juju/ratelimit/reader.go | 51 - .../oschwald/geoip2-golang/.gitmodules | 3 - .../oschwald/geoip2-golang/.travis.yml | 20 - .../github.com/oschwald/geoip2-golang/LICENSE | 13 - .../oschwald/geoip2-golang/README.md | 90 - .../oschwald/geoip2-golang/reader.go | 202 - .../oschwald/maxminddb-golang/.gitmodules | 3 - .../oschwald/maxminddb-golang/.travis.yml | 23 - .../oschwald/maxminddb-golang/LICENSE | 13 - .../oschwald/maxminddb-golang/README.md | 37 - .../oschwald/maxminddb-golang/appveyor.yml | 19 - .../oschwald/maxminddb-golang/decoder.go | 530 -- .../oschwald/maxminddb-golang/errors.go | 17 - .../maxminddb-golang/key_appengine.go | 7 - .../oschwald/maxminddb-golang/key_other.go | 28 - .../oschwald/maxminddb-golang/mmap_unix.go | 17 - .../oschwald/maxminddb-golang/mmap_windows.go | 83 - .../oschwald/maxminddb-golang/reader.go | 221 - .../maxminddb-golang/reader_appengine.go | 26 - .../oschwald/maxminddb-golang/reader_other.go | 56 - .../oschwald/maxminddb-golang/traverse.go | 108 - .../oschwald/maxminddb-golang/verifier.go | 185 - .../syncthing/lib/dialer/internal.go | 140 - .../syncthing/syncthing/lib/dialer/public.go | 48 - .../syncthing/syncthing/lib/logger/LICENSE | 19 - .../syncthing/syncthing/lib/logger/logger.go | 385 - .../syncthing/syncthing/lib/osutil/atomic.go | 104 - .../syncthing/lib/osutil/filenames_darwin.go | 17 - .../syncthing/lib/osutil/filenames_unix.go | 19 - .../syncthing/lib/osutil/filenames_windows.go | 21 - .../syncthing/lib/osutil/glob_unix.go | 17 - .../syncthing/lib/osutil/glob_windows.go | 93 - .../syncthing/lib/osutil/hidden_unix.go | 19 - .../syncthing/lib/osutil/hidden_windows.go | 52 - .../syncthing/lib/osutil/lan_unix.go | 30 - .../syncthing/lib/osutil/lan_windows.go | 83 - .../syncthing/lib/osutil/lstat_broken.go | 29 - .../syncthing/lib/osutil/lstat_ok.go | 15 - .../syncthing/lib/osutil/mkdirall.go | 17 - .../syncthing/lib/osutil/mkdirall_windows.go | 65 - .../syncthing/syncthing/lib/osutil/osutil.go | 243 - .../syncthing/syncthing/lib/osutil/ping.go | 39 - .../syncthing/lib/osutil/replacingwriter.go | 48 - .../syncthing/lib/osutil/rlimit_unix.go | 47 - .../syncthing/lib/osutil/rlimit_windows.go | 17 - .../syncthing/syncthing/lib/protocol/AUTHORS | 4 - .../syncthing/lib/protocol/CONTRIBUTING.md | 76 - .../syncthing/syncthing/lib/protocol/LICENSE | 19 - .../syncthing/lib/protocol/README.md | 13 - .../syncthing/lib/protocol/compression.go | 53 - .../syncthing/lib/protocol/counting.go | 62 - .../syncthing/syncthing/lib/protocol/debug.go | 22 - .../syncthing/lib/protocol/deviceid.go | 163 - .../syncthing/syncthing/lib/protocol/doc.go | 4 - .../syncthing/lib/protocol/errors.go | 51 - .../syncthing/syncthing/lib/protocol/fuzz.go | 70 - .../syncthing/lib/protocol/header.go | 43 - .../syncthing/lib/protocol/message.go | 172 - .../syncthing/lib/protocol/message_xdr.go | 1193 --- .../lib/protocol/nativemodel_darwin.go | 40 - .../lib/protocol/nativemodel_unix.go | 31 - .../lib/protocol/nativemodel_windows.go | 63 - .../syncthing/lib/protocol/protocol.go | 765 -- .../syncthing/lib/protocol/vector.go | 115 - .../syncthing/lib/protocol/vector_compare.go | 89 - .../syncthing/lib/protocol/vector_xdr.go | 43 - .../syncthing/lib/protocol/wireformat.go | 60 - .../syncthing/lib/relay/client/client.go | 41 - .../syncthing/lib/relay/client/debug.go | 18 - .../syncthing/lib/relay/client/dynamic.go | 222 - .../syncthing/lib/relay/client/methods.go | 146 - .../syncthing/lib/relay/client/static.go | 298 - .../syncthing/lib/relay/protocol/packets.go | 68 - .../lib/relay/protocol/packets_xdr.go | 568 -- .../syncthing/lib/relay/protocol/protocol.go | 121 - .../syncthing/syncthing/lib/sync/debug.go | 35 - .../syncthing/syncthing/lib/sync/sync.go | 141 - .../syncthing/lib/tlsutil/tlsutil.go | 180 - .../src/golang.org/x/net/proxy/direct.go | 18 - .../src/golang.org/x/net/proxy/per_host.go | 140 - .../src/golang.org/x/net/proxy/proxy.go | 94 - .../src/golang.org/x/net/proxy/socks5.go | 210 - .../golang.org/x/text/transform/transform.go | 616 -- .../x/text/unicode/norm/composition.go | 514 -- .../x/text/unicode/norm/forminfo.go | 256 - .../golang.org/x/text/unicode/norm/input.go | 105 - .../golang.org/x/text/unicode/norm/iter.go | 450 - .../x/text/unicode/norm/maketables.go | 978 --- .../x/text/unicode/norm/normalize.go | 527 -- .../x/text/unicode/norm/readwriter.go | 126 - .../golang.org/x/text/unicode/norm/tables.go | 7587 ----------------- .../x/text/unicode/norm/transform.go | 88 - .../golang.org/x/text/unicode/norm/trie.go | 54 - .../golang.org/x/text/unicode/norm/triegen.go | 117 - 136 files changed, 22914 deletions(-) delete mode 100644 cmd/strelaypoolsrv/Godeps/Godeps.json delete mode 100644 cmd/strelaypoolsrv/Godeps/Readme delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/.gitignore delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go delete mode 100644 cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go diff --git a/cmd/strelaypoolsrv/Godeps/Godeps.json b/cmd/strelaypoolsrv/Godeps/Godeps.json deleted file mode 100644 index e7bc322d..00000000 --- a/cmd/strelaypoolsrv/Godeps/Godeps.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "ImportPath": "github.com/syncthing/relaypoolsrv", - "GoVersion": "go1.5.1", - "Packages": [ - "." - ], - "Deps": [ - { - "ImportPath": "github.com/bkaradzic/go-lz4", - "Rev": "74ddf82598bc4745b965729e9c6a463bedd33049" - }, - { - "ImportPath": "github.com/calmh/du", - "Rev": "3c0690cca16228b97741327b1b6781397afbdb24" - }, - { - "ImportPath": "github.com/calmh/luhn", - "Rev": "0c8388ff95fa92d4094011e5a04fc99dea3d1632" - }, - { - "ImportPath": "github.com/calmh/xdr", - "Rev": "9eb3e1a622d9364deb39c831f7e5f164393d7e37" - }, - { - "ImportPath": "github.com/golang/groupcache/lru", - "Rev": "604ed5785183e59ae2789449d89e73f3a2a77987" - }, - { - "ImportPath": "github.com/juju/ratelimit", - "Rev": "772f5c38e468398c4511514f4f6aa9a4185bc0a0" - }, - { - "ImportPath": "github.com/oschwald/geoip2-golang", - "Comment": "v0.1.0-28-gfe8132a", - "Rev": "fe8132a35233b371398441ab4c5655ae1244564a" - }, - { - "ImportPath": "github.com/oschwald/maxminddb-golang", - "Comment": "v0.2.0-41-gbfd1341", - "Rev": "bfd134128faa57c37ef41fff5fb1a9ca94450a9b" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/dialer", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/logger", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/osutil", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/protocol", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/relay/client", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/relay/protocol", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/sync", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "github.com/syncthing/syncthing/lib/tlsutil", - "Comment": "v0.12.6-6-g38e9b92", - "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677" - }, - { - "ImportPath": "golang.org/x/net/proxy", - "Rev": "042ba42fa6633b34205efc66ba5719cd3afd8d38" - }, - { - "ImportPath": "golang.org/x/text/transform", - "Rev": "5eb8d4684c4796dd36c74f6452f2c0fa6c79597e" - }, - { - "ImportPath": "golang.org/x/text/unicode/norm", - "Rev": "5eb8d4684c4796dd36c74f6452f2c0fa6c79597e" - } - ] -} diff --git a/cmd/strelaypoolsrv/Godeps/Readme b/cmd/strelaypoolsrv/Godeps/Readme deleted file mode 100644 index 4cdaa53d..00000000 --- a/cmd/strelaypoolsrv/Godeps/Readme +++ /dev/null @@ -1,5 +0,0 @@ -This directory tree is generated automatically by godep. - -Please do not edit. - -See https://github.com/tools/godep for more information. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/.gitignore b/cmd/strelaypoolsrv/Godeps/_workspace/.gitignore deleted file mode 100644 index f037d684..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/pkg -/bin diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore deleted file mode 100644 index be64db61..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/lz4-example/lz4-example diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml deleted file mode 100644 index d5870798..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go - -go: - - 1.1 - - 1.2 - - 1.3 - - 1.4 - - 1.5 - - tip diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE deleted file mode 100644 index 0545977b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2011-2012 Branimir Karadzic. All rights reserved. -Copyright 2013 Damian Gryski. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. 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. - -THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md deleted file mode 100644 index ef3fe1e1..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md +++ /dev/null @@ -1,71 +0,0 @@ -go-lz4 -====== - -go-lz4 is port of LZ4 lossless compression algorithm to Go. The original C code -is located at: - -https://github.com/Cyan4973/lz4 - -Status ------- -[![Build Status](https://secure.travis-ci.org/bkaradzic/go-lz4.png)](http://travis-ci.org/bkaradzic/go-lz4) -[![GoDoc](https://godoc.org/github.com/bkaradzic/go-lz4?status.png)](https://godoc.org/github.com/bkaradzic/go-lz4) - -Usage ------ - - go get github.com/bkaradzic/go-lz4 - - import "github.com/bkaradzic/go-lz4" - -The package name is `lz4` - -Notes ------ - -* go-lz4 saves a uint32 with the original uncompressed length at the beginning - of the encoded buffer. They may get in the way of interoperability with - other implementations. - -Contributors ------------- - -Damian Gryski ([@dgryski](https://github.com/dgryski)) -Dustin Sallings ([@dustin](https://github.com/dustin)) - -Contact -------- - -[@bkaradzic](https://twitter.com/bkaradzic) -http://www.stuckingeometry.com - -Project page -https://github.com/bkaradzic/go-lz4 - -License -------- - -Copyright 2011-2012 Branimir Karadzic. All rights reserved. -Copyright 2013 Damian Gryski. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - 2. 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. - -THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go deleted file mode 100644 index e4989de9..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go +++ /dev/null @@ -1,23 +0,0 @@ -// +build gofuzz - -package lz4 - -import "encoding/binary" - -func Fuzz(data []byte) int { - - if len(data) < 4 { - return 0 - } - - ln := binary.LittleEndian.Uint32(data) - if ln > (1 << 21) { - return 0 - } - - if _, err := Decode(nil, data); err != nil { - return 0 - } - - return 1 -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go deleted file mode 100644 index 6c8ee575..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go +++ /dev/null @@ -1,74 +0,0 @@ -package main - -import ( - "math/rand" - - "github.com/bkaradzic/go-lz4" - - // lz4's API matches snappy's, so we can easily see how it performs - // lz4 "code.google.com/p/snappy-go/snappy" -) - -var input = ` -ADVENTURE I. A SCANDAL IN BOHEMIA - -I. - -To Sherlock Holmes she is always THE woman. I have seldom heard -him mention her under any other name. In his eyes she eclipses -and predominates the whole of her sex. It was not that he felt -any emotion akin to love for Irene Adler. All emotions, and that -one particularly, were abhorrent to his cold, precise but -admirably balanced mind. He was, I take it, the most perfect -reasoning and observing machine that the world has seen, but as a -lover he would have placed himself in a false position. He never -spoke of the softer passions, save with a gibe and a sneer. They -were admirable things for the observer--excellent for drawing the -veil from men's motives and actions. But for the trained reasoner -to admit such intrusions into his own delicate and finely -adjusted temperament was to introduce a distracting factor which -might throw a doubt upon all his mental results. Grit in a -sensitive instrument, or a crack in one of his own high-power -lenses, would not be more disturbing than a strong emotion in a -nature such as his. And yet there was but one woman to him, and -that woman was the late Irene Adler, of dubious and questionable -memory. - -I had seen little of Holmes lately. My marriage had drifted us -away from each other. My own complete happiness, and the -home-centred interests which rise up around the man who first -finds himself master of his own establishment, were sufficient to -absorb all my attention, while Holmes, who loathed every form of -society with his whole Bohemian soul, remained in our lodgings in -Baker Street, buried among his old books, and alternating from -week to week between cocaine and ambition, the drowsiness of the -drug, and the fierce energy of his own keen nature. He was still, -as ever, deeply attracted by the study of crime, and occupied his -immense faculties and extraordinary powers of observation in -following out those clues, and clearing up those mysteries which -had been abandoned as hopeless by the official police. From time -to time I heard some vague account of his doings: of his summons -to Odessa in the case of the Trepoff murder, of his clearing up -of the singular tragedy of the Atkinson brothers at Trincomalee, -and finally of the mission which he had accomplished so -delicately and successfully for the reigning family of Holland. -Beyond these signs of his activity, however, which I merely -shared with all the readers of the daily press, I knew little of -my former friend and companion. -` - -func main() { - - compressed, _ := lz4.Encode(nil, []byte(input)) - - modified := make([]byte, len(compressed)) - - for { - copy(modified, compressed) - for i := 0; i < 100; i++ { - modified[rand.Intn(len(compressed)-4)+4] = byte(rand.Intn(256)) - } - lz4.Decode(nil, modified) - } - -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go deleted file mode 100644 index ae457c86..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2011 Branimir Karadzic. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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/ioutil" - "log" - "os" - "runtime/pprof" - - lz4 "github.com/bkaradzic/go-lz4" -) - -var ( - decompress = flag.Bool("d", false, "decompress") -) - -func main() { - - var optCPUProfile = flag.String("cpuprofile", "", "profile") - flag.Parse() - - if *optCPUProfile != "" { - f, err := os.Create(*optCPUProfile) - if err != nil { - log.Fatal(err) - } - pprof.StartCPUProfile(f) - defer pprof.StopCPUProfile() - } - - args := flag.Args() - - var data []byte - - if len(args) < 2 { - fmt.Print("Usage: lz4 [-d] \n") - os.Exit(1) - } - - input, err := os.OpenFile(args[0], os.O_RDONLY, 0644) - if err != nil { - fmt.Printf("Failed to open input file %s\n", args[0]) - os.Exit(1) - } - defer input.Close() - - if *decompress { - data, _ = ioutil.ReadAll(input) - data, err = lz4.Decode(nil, data) - if err != nil { - fmt.Println("Failed to decode:", err) - return - } - } else { - data, _ = ioutil.ReadAll(input) - data, err = lz4.Encode(nil, data) - if err != nil { - fmt.Println("Failed to encode:", err) - return - } - } - - err = ioutil.WriteFile(args[1], data, 0644) - if err != nil { - fmt.Printf("Failed to open output file %s\n", args[1]) - os.Exit(1) - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go deleted file mode 100644 index a2b6535f..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2011-2012 Branimir Karadzic. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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 lz4 - -import ( - "encoding/binary" - "errors" - "io" -) - -var ( - // ErrCorrupt indicates the input was corrupt - ErrCorrupt = errors.New("corrupt input") -) - -const ( - mlBits = 4 - mlMask = (1 << mlBits) - 1 - runBits = 8 - mlBits - runMask = (1 << runBits) - 1 -) - -type decoder struct { - src []byte - dst []byte - spos uint32 - dpos uint32 - ref uint32 -} - -func (d *decoder) readByte() (uint8, error) { - if int(d.spos) == len(d.src) { - return 0, io.EOF - } - b := d.src[d.spos] - d.spos++ - return b, nil -} - -func (d *decoder) getLen() (uint32, error) { - - length := uint32(0) - ln, err := d.readByte() - if err != nil { - return 0, ErrCorrupt - } - for ln == 255 { - length += 255 - ln, err = d.readByte() - if err != nil { - return 0, ErrCorrupt - } - } - length += uint32(ln) - - return length, nil -} - -func (d *decoder) cp(length, decr uint32) { - - if int(d.ref+length) < int(d.dpos) { - copy(d.dst[d.dpos:], d.dst[d.ref:d.ref+length]) - } else { - for ii := uint32(0); ii < length; ii++ { - d.dst[d.dpos+ii] = d.dst[d.ref+ii] - } - } - d.dpos += length - d.ref += length - decr -} - -func (d *decoder) finish(err error) error { - if err == io.EOF { - return nil - } - - return err -} - -// Decode returns the decoded form of src. The returned slice may be a -// subslice of dst if it was large enough to hold the entire decoded block. -func Decode(dst, src []byte) ([]byte, error) { - - if len(src) < 4 { - return nil, ErrCorrupt - } - - uncompressedLen := binary.LittleEndian.Uint32(src) - - if uncompressedLen == 0 { - return nil, nil - } - - if uncompressedLen > MaxInputSize { - return nil, ErrTooLarge - } - - if dst == nil || len(dst) < int(uncompressedLen) { - dst = make([]byte, uncompressedLen) - } - - d := decoder{src: src, dst: dst[:uncompressedLen], spos: 4} - - decr := []uint32{0, 3, 2, 3} - - for { - code, err := d.readByte() - if err != nil { - return d.dst, d.finish(err) - } - - length := uint32(code >> mlBits) - if length == runMask { - ln, err := d.getLen() - if err != nil { - return nil, ErrCorrupt - } - length += ln - } - - if int(d.spos+length) > len(d.src) || int(d.dpos+length) > len(d.dst) { - return nil, ErrCorrupt - } - - for ii := uint32(0); ii < length; ii++ { - d.dst[d.dpos+ii] = d.src[d.spos+ii] - } - - d.spos += length - d.dpos += length - - if int(d.spos) == len(d.src) { - return d.dst, nil - } - - if int(d.spos+2) >= len(d.src) { - return nil, ErrCorrupt - } - - back := uint32(d.src[d.spos]) | uint32(d.src[d.spos+1])<<8 - - if back > d.dpos { - return nil, ErrCorrupt - } - - d.spos += 2 - d.ref = d.dpos - back - - length = uint32(code & mlMask) - if length == mlMask { - ln, err := d.getLen() - if err != nil { - return nil, ErrCorrupt - } - length += ln - } - - literal := d.dpos - d.ref - - if literal < 4 { - if int(d.dpos+4) > len(d.dst) { - return nil, ErrCorrupt - } - - d.cp(4, decr[literal]) - } else { - length += 4 - } - - if d.dpos+length > uncompressedLen { - return nil, ErrCorrupt - } - - d.cp(length, 0) - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go deleted file mode 100644 index 2bf84da5..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright 2011-2012 Branimir Karadzic. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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 lz4 - -import ( - "encoding/binary" - "errors" -) - -const ( - minMatch = 4 - hashLog = 17 - hashTableSize = 1 << hashLog - hashShift = (minMatch * 8) - hashLog - incompressible uint32 = 128 - uninitHash = 0x88888888 - - // MaxInputSize is the largest buffer than can be compressed in a single block - MaxInputSize = 0x7E000000 -) - -var ( - // ErrTooLarge indicates the input buffer was too large - ErrTooLarge = errors.New("input too large") -) - -type encoder struct { - src []byte - dst []byte - hashTable []uint32 - pos uint32 - anchor uint32 - dpos uint32 -} - -// CompressBound returns the maximum length of a lz4 block, given it's uncompressed length -func CompressBound(isize int) int { - if isize > MaxInputSize { - return 0 - } - return isize + ((isize) / 255) + 16 + 4 -} - -func (e *encoder) writeLiterals(length, mlLen, pos uint32) { - - ln := length - - var code byte - if ln > runMask-1 { - code = runMask - } else { - code = byte(ln) - } - - if mlLen > mlMask-1 { - e.dst[e.dpos] = (code << mlBits) + byte(mlMask) - } else { - e.dst[e.dpos] = (code << mlBits) + byte(mlLen) - } - e.dpos++ - - if code == runMask { - ln -= runMask - for ; ln > 254; ln -= 255 { - e.dst[e.dpos] = 255 - e.dpos++ - } - - e.dst[e.dpos] = byte(ln) - e.dpos++ - } - - for ii := uint32(0); ii < length; ii++ { - e.dst[e.dpos+ii] = e.src[pos+ii] - } - - e.dpos += length -} - -// Encode returns the encoded form of src. The returned array may be a -// sub-slice of dst if it was large enough to hold the entire output. -func Encode(dst, src []byte) ([]byte, error) { - - if len(src) >= MaxInputSize { - return nil, ErrTooLarge - } - - if n := CompressBound(len(src)); len(dst) < n { - dst = make([]byte, n) - } - - e := encoder{src: src, dst: dst, hashTable: make([]uint32, hashTableSize)} - - binary.LittleEndian.PutUint32(dst, uint32(len(src))) - e.dpos = 4 - - var ( - step uint32 = 1 - limit = incompressible - ) - - for { - if int(e.pos)+12 >= len(e.src) { - e.writeLiterals(uint32(len(e.src))-e.anchor, 0, e.anchor) - return e.dst[:e.dpos], nil - } - - sequence := uint32(e.src[e.pos+3])<<24 | uint32(e.src[e.pos+2])<<16 | uint32(e.src[e.pos+1])<<8 | uint32(e.src[e.pos+0]) - - hash := (sequence * 2654435761) >> hashShift - ref := e.hashTable[hash] + uninitHash - e.hashTable[hash] = e.pos - uninitHash - - if ((e.pos-ref)>>16) != 0 || uint32(e.src[ref+3])<<24|uint32(e.src[ref+2])<<16|uint32(e.src[ref+1])<<8|uint32(e.src[ref+0]) != sequence { - if e.pos-e.anchor > limit { - limit <<= 1 - step += 1 + (step >> 2) - } - e.pos += step - continue - } - - if step > 1 { - e.hashTable[hash] = ref - uninitHash - e.pos -= step - 1 - step = 1 - continue - } - limit = incompressible - - ln := e.pos - e.anchor - back := e.pos - ref - - anchor := e.anchor - - e.pos += minMatch - ref += minMatch - e.anchor = e.pos - - for int(e.pos) < len(e.src)-5 && e.src[e.pos] == e.src[ref] { - e.pos++ - ref++ - } - - mlLen := e.pos - e.anchor - - e.writeLiterals(ln, mlLen, anchor) - e.dst[e.dpos] = uint8(back) - e.dst[e.dpos+1] = uint8(back >> 8) - e.dpos += 2 - - if mlLen > mlMask-1 { - mlLen -= mlMask - for mlLen > 254 { - mlLen -= 255 - - e.dst[e.dpos] = 255 - e.dpos++ - } - - e.dst[e.dpos] = byte(mlLen) - e.dpos++ - } - - e.anchor = e.pos - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE deleted file mode 100644 index cf1ab25d..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -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 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. - -For more information, please refer to diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md deleted file mode 100644 index 0cb5e5d7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md +++ /dev/null @@ -1,14 +0,0 @@ -du -== - -Get total and available disk space on a given volume. - -Documentation -------------- - -http://godoc.org/github.com/calmh/du - -License -------- - -Public Domain diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go deleted file mode 100644 index 3b8b5446..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "fmt" - "log" - "os" - - "github.com/calmh/du" -) - -var KB = int64(1024) - -func main() { - usage, err := du.Get(os.Args[1]) - if err != nil { - log.Fatal(err) - } - fmt.Println("Free:", usage.FreeBytes/(KB*KB), "MiB") - fmt.Println("Available:", usage.AvailBytes/(KB*KB), "MiB") - fmt.Println("Size:", usage.TotalBytes/(KB*KB), "MiB") -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go deleted file mode 100644 index f6bb975c..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go +++ /dev/null @@ -1,8 +0,0 @@ -package du - -// Usage holds information about total and available storage on a volume. -type Usage struct { - TotalBytes int64 // Size of volume - FreeBytes int64 // Unused size - AvailBytes int64 // Available to a non-privileged user -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go deleted file mode 100644 index 6502bdb6..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go +++ /dev/null @@ -1,24 +0,0 @@ -// +build !windows,!netbsd,!openbsd,!solaris - -package du - -import ( - "path/filepath" - "syscall" -) - -// Get returns the Usage of a given path, or an error if usage data is -// unavailable. -func Get(path string) (Usage, error) { - var stat syscall.Statfs_t - err := syscall.Statfs(filepath.Clean(path), &stat) - if err != nil { - return Usage{}, err - } - u := Usage{ - FreeBytes: int64(stat.Bfree) * int64(stat.Bsize), - TotalBytes: int64(stat.Blocks) * int64(stat.Bsize), - AvailBytes: int64(stat.Bavail) * int64(stat.Bsize), - } - return u, nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go deleted file mode 100644 index 044e7748..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go +++ /dev/null @@ -1,13 +0,0 @@ -// +build netbsd openbsd solaris - -package du - -import "errors" - -var ErrUnsupported = errors.New("unsupported platform") - -// Get returns the Usage of a given path, or an error if usage data is -// unavailable. -func Get(path string) (Usage, error) { - return Usage{}, ErrUnsupported -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go deleted file mode 100644 index 6ed5e52e..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go +++ /dev/null @@ -1,27 +0,0 @@ -package du - -import ( - "syscall" - "unsafe" -) - -// Get returns the Usage of a given path, or an error if usage data is -// unavailable. -func Get(path string) (Usage, error) { - h := syscall.MustLoadDLL("kernel32.dll") - c := h.MustFindProc("GetDiskFreeSpaceExW") - - var u Usage - - ret, _, err := c.Call( - uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))), - uintptr(unsafe.Pointer(&u.FreeBytes)), - uintptr(unsafe.Pointer(&u.TotalBytes)), - uintptr(unsafe.Pointer(&u.AvailBytes))) - - if ret == 0 { - return u, err - } - - return u, nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE deleted file mode 100644 index 0e07d0e1..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2014 Jakob Borg - -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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go deleted file mode 100644 index 8bcb0cd1..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2014 Jakob Borg - -// Package luhn generates and validates Luhn mod N check digits. -package luhn - -import ( - "fmt" - "strings" -) - -// An alphabet is a string of N characters, representing the digits of a given -// base N. -type Alphabet string - -var ( - Base32 Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" -) - -// Generate returns a check digit for the string s, which should be composed -// of characters from the Alphabet a. -func (a Alphabet) Generate(s string) (rune, error) { - if err := a.check(); err != nil { - return 0, err - } - - factor := 1 - sum := 0 - n := len(a) - - for i := range s { - codepoint := strings.IndexByte(string(a), s[i]) - if codepoint == -1 { - return 0, fmt.Errorf("Digit %q not valid in alphabet %q", s[i], a) - } - addend := factor * codepoint - if factor == 2 { - factor = 1 - } else { - factor = 2 - } - addend = (addend / n) + (addend % n) - sum += addend - } - remainder := sum % n - checkCodepoint := (n - remainder) % n - return rune(a[checkCodepoint]), nil -} - -// Validate returns true if the last character of the string s is correct, for -// a string s composed of characters in the alphabet a. -func (a Alphabet) Validate(s string) bool { - t := s[:len(s)-1] - c, err := a.Generate(t) - if err != nil { - return false - } - return rune(s[len(s)-1]) == c -} - -// check returns an error if the given alphabet does not consist of unique characters -func (a Alphabet) check() error { - cm := make(map[byte]bool, len(a)) - for i := range a { - if cm[a[i]] { - return fmt.Errorf("Digit %q non-unique in alphabet %q", a[i], a) - } - cm[a[i]] = true - } - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore deleted file mode 100644 index 2d830686..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore +++ /dev/null @@ -1 +0,0 @@ -coverage.out diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml deleted file mode 100644 index 0fccc9e3..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: go -go: -- tip - -install: -- export PATH=$PATH:$HOME/gopath/bin -- go get golang.org/x/tools/cover -- go get github.com/mattn/goveralls - -script: -- ./generate.sh -- go test -coverprofile=coverage.out - -after_success: -- goveralls -coverprofile=coverage.out -service=travis-ci -package=calmh/xdr -repotoken="$COVERALLS_TOKEN" - -env: - global: - secure: SmgnrGfp2zLrA44ChRMpjPeujubt9veZ8Fx/OseMWECmacyV5N/TuDhzIbwo6QwV4xB0sBacoPzvxQbJRVjNKsPiSu72UbcQmQ7flN4Tf7nW09tSh1iW8NgrpBCq/3UYLoBu2iPBEBKm93IK0aGNAKs6oEkB0fU27iTVBwiTXOY= diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE deleted file mode 100644 index 8fdf7b0a..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2014 Jakob Borg. - -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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md deleted file mode 100644 index f4ebae78..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md +++ /dev/null @@ -1,12 +0,0 @@ -xdr -=== - -[![Build Status](https://img.shields.io/circleci/project/calmh/xdr.svg?style=flat-square)](https://circleci.com/gh/calmh/xdr) -[![Coverage Status](https://img.shields.io/coveralls/calmh/xdr.svg?style=flat)](https://coveralls.io/r/calmh/xdr?branch=master) -[![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat)](http://godoc.org/github.com/calmh/xdr) -[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://opensource.org/licenses/MIT) - -This is an XDR encoding/decoding library. It uses code generation and -not reflection. It supports the IPDR bastardized XDR format when built -with `-tags ipdr`. - diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml deleted file mode 100644 index f61e26df..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml +++ /dev/null @@ -1,3 +0,0 @@ -dependencies: - post: - - ./generate.sh diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go deleted file mode 100644 index dbca9b7e..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -package main - -import ( - "bytes" - "flag" - "fmt" - "go/ast" - "go/format" - "go/parser" - "go/token" - "io" - "log" - "os" - "regexp" - "strconv" - "strings" - "text/template" -) - -type fieldInfo struct { - Name string - IsBasic bool // handled by one the native Read/WriteUint64 etc functions - IsSlice bool // field is a slice of FieldType - FieldType string // original type of field, i.e. "int" - Encoder string // the encoder name, i.e. "Uint64" for Read/WriteUint64 - Convert string // what to convert to when encoding, i.e. "uint64" - Max int // max size for slices and strings - Submax int // max size for strings inside slices -} - -type structInfo struct { - Name string - Fields []fieldInfo -} - -var headerTpl = template.Must(template.New("header").Parse(`// ************************************************************ -// This file is automatically generated by genxdr. Do not edit. -// ************************************************************ - -package {{.Package}} - -import ( - "bytes" - "io" - - "github.com/calmh/xdr" -) -`)) - -var encodeTpl = template.Must(template.New("encoder").Parse(` -func (o {{.TypeName}}) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -}//+n - -func (o {{.TypeName}}) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -}//+n - -func (o {{.TypeName}}) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -}//+n - -func (o {{.TypeName}}) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -}//+n - -func (o {{.TypeName}}) EncodeXDRInto(xw *xdr.Writer) (int, error) { - {{range $fieldInfo := .Fields}} - {{if not $fieldInfo.IsSlice}} - {{if ne $fieldInfo.Convert ""}} - xw.Write{{$fieldInfo.Encoder}}({{$fieldInfo.Convert}}(o.{{$fieldInfo.Name}})) - {{else if $fieldInfo.IsBasic}} - {{if ge $fieldInfo.Max 1}} - if l := len(o.{{$fieldInfo.Name}}); l > {{$fieldInfo.Max}} { - return xw.Tot(), xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", l, {{$fieldInfo.Max}}) - } - {{end}} - xw.Write{{$fieldInfo.Encoder}}(o.{{$fieldInfo.Name}}) - {{else}} - _, err := o.{{$fieldInfo.Name}}.EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - {{end}} - {{else}} - {{if ge $fieldInfo.Max 1}} - if l := len(o.{{$fieldInfo.Name}}); l > {{$fieldInfo.Max}} { - return xw.Tot(), xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", l, {{$fieldInfo.Max}}) - } - {{end}} - xw.WriteUint32(uint32(len(o.{{$fieldInfo.Name}}))) - for i := range o.{{$fieldInfo.Name}} { - {{if ne $fieldInfo.Convert ""}} - xw.Write{{$fieldInfo.Encoder}}({{$fieldInfo.Convert}}(o.{{$fieldInfo.Name}}[i])) - {{else if $fieldInfo.IsBasic}} - xw.Write{{$fieldInfo.Encoder}}(o.{{$fieldInfo.Name}}[i]) - {{else}} - _, err := o.{{$fieldInfo.Name}}[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - {{end}} - } - {{end}} - {{end}} - return xw.Tot(), xw.Error() -}//+n - -func (o *{{.TypeName}}) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -}//+n - -func (o *{{.TypeName}}) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -}//+n - -func (o *{{.TypeName}}) DecodeXDRFrom(xr *xdr.Reader) error { - {{range $fieldInfo := .Fields}} - {{if not $fieldInfo.IsSlice}} - {{if ne $fieldInfo.Convert ""}} - o.{{$fieldInfo.Name}} = {{$fieldInfo.FieldType}}(xr.Read{{$fieldInfo.Encoder}}()) - {{else if $fieldInfo.IsBasic}} - {{if ge $fieldInfo.Max 1}} - o.{{$fieldInfo.Name}} = xr.Read{{$fieldInfo.Encoder}}Max({{$fieldInfo.Max}}) - {{else}} - o.{{$fieldInfo.Name}} = xr.Read{{$fieldInfo.Encoder}}() - {{end}} - {{else}} - (&o.{{$fieldInfo.Name}}).DecodeXDRFrom(xr) - {{end}} - {{else}} - _{{$fieldInfo.Name}}Size := int(xr.ReadUint32()) - if _{{$fieldInfo.Name}}Size < 0 { - return xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", _{{$fieldInfo.Name}}Size, {{$fieldInfo.Max}}) - } - {{if ge $fieldInfo.Max 1}} - if _{{$fieldInfo.Name}}Size > {{$fieldInfo.Max}} { - return xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", _{{$fieldInfo.Name}}Size, {{$fieldInfo.Max}}) - } - {{end}} - o.{{$fieldInfo.Name}} = make([]{{$fieldInfo.FieldType}}, _{{$fieldInfo.Name}}Size) - for i := range o.{{$fieldInfo.Name}} { - {{if ne $fieldInfo.Convert ""}} - o.{{$fieldInfo.Name}}[i] = {{$fieldInfo.FieldType}}(xr.Read{{$fieldInfo.Encoder}}()) - {{else if $fieldInfo.IsBasic}} - {{if ge $fieldInfo.Submax 1}} - o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}Max({{$fieldInfo.Submax}}) - {{else}} - o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}() - {{end}} - {{else}} - (&o.{{$fieldInfo.Name}}[i]).DecodeXDRFrom(xr) - {{end}} - } - {{end}} - {{end}} - return xr.Error() -}`)) - -var emptyTypeTpl = template.Must(template.New("encoder").Parse(` -func (o {{.TypeName}}) EncodeXDR(w io.Writer) (int, error) { - return 0, nil -}//+n - -func (o {{.TypeName}}) MarshalXDR() ([]byte, error) { - return nil, nil -}//+n - -func (o {{.TypeName}}) MustMarshalXDR() []byte { - return nil -}//+n - -func (o {{.TypeName}}) AppendXDR(bs []byte) ([]byte, error) { - return bs, nil -}//+n - -func (o {{.TypeName}}) EncodeXDRInto(xw *xdr.Writer) (int, error) { - return xw.Tot(), xw.Error() -}//+n - -func (o *{{.TypeName}}) DecodeXDR(r io.Reader) error { - return nil -}//+n - -func (o *{{.TypeName}}) UnmarshalXDR(bs []byte) error { - return nil -}//+n - -func (o *{{.TypeName}}) DecodeXDRFrom(xr *xdr.Reader) error { - return xr.Error() -}`)) - -var maxRe = regexp.MustCompile(`(?:\Wmax:)(\d+)(?:\s*,\s*(\d+))?`) - -type typeSet struct { - Type string - Encoder string -} - -var xdrEncoders = map[string]typeSet{ - "int8": typeSet{"uint8", "Uint8"}, - "uint8": typeSet{"", "Uint8"}, - "int16": typeSet{"uint16", "Uint16"}, - "uint16": typeSet{"", "Uint16"}, - "int32": typeSet{"uint32", "Uint32"}, - "uint32": typeSet{"", "Uint32"}, - "int64": typeSet{"uint64", "Uint64"}, - "uint64": typeSet{"", "Uint64"}, - "int": typeSet{"uint64", "Uint64"}, - "string": typeSet{"", "String"}, - "[]byte": typeSet{"", "Bytes"}, - "bool": typeSet{"", "Bool"}, -} - -func handleStruct(t *ast.StructType) []fieldInfo { - var fs []fieldInfo - - for _, sf := range t.Fields.List { - if len(sf.Names) == 0 { - // We don't handle anonymous fields - continue - } - - fn := sf.Names[0].Name - var max1, max2 int - if sf.Comment != nil { - c := sf.Comment.List[0].Text - m := maxRe.FindStringSubmatch(c) - if len(m) >= 2 { - max1, _ = strconv.Atoi(m[1]) - } - if len(m) >= 3 { - max2, _ = strconv.Atoi(m[2]) - } - if strings.Contains(c, "noencode") { - continue - } - } - - var f fieldInfo - switch ft := sf.Type.(type) { - case *ast.Ident: - tn := ft.Name - if enc, ok := xdrEncoders[tn]; ok { - f = fieldInfo{ - Name: fn, - IsBasic: true, - FieldType: tn, - Encoder: enc.Encoder, - Convert: enc.Type, - Max: max1, - Submax: max2, - } - } else { - f = fieldInfo{ - Name: fn, - IsBasic: false, - FieldType: tn, - Max: max1, - Submax: max2, - } - } - - case *ast.ArrayType: - if ft.Len != nil { - // We don't handle arrays - continue - } - - tn := ft.Elt.(*ast.Ident).Name - if enc, ok := xdrEncoders["[]"+tn]; ok { - f = fieldInfo{ - Name: fn, - IsBasic: true, - FieldType: tn, - Encoder: enc.Encoder, - Convert: enc.Type, - Max: max1, - Submax: max2, - } - } else if enc, ok := xdrEncoders[tn]; ok { - f = fieldInfo{ - Name: fn, - IsBasic: true, - IsSlice: true, - FieldType: tn, - Encoder: enc.Encoder, - Convert: enc.Type, - Max: max1, - Submax: max2, - } - } else { - f = fieldInfo{ - Name: fn, - IsSlice: true, - FieldType: tn, - Max: max1, - Submax: max2, - } - } - - case *ast.SelectorExpr: - f = fieldInfo{ - Name: fn, - FieldType: ft.Sel.Name, - Max: max1, - Submax: max2, - } - } - - fs = append(fs, f) - } - - return fs -} - -func generateCode(output io.Writer, s structInfo) { - name := s.Name - fs := s.Fields - - var buf bytes.Buffer - var err error - if len(fs) == 0 { - // This is an empty type. We can create a quite simple codec for it. - err = emptyTypeTpl.Execute(&buf, map[string]interface{}{"TypeName": name}) - } else { - // Generate with the default template. - err = encodeTpl.Execute(&buf, map[string]interface{}{"TypeName": name, "Fields": fs}) - } - if err != nil { - panic(err) - } - - bs := regexp.MustCompile(`(\s*\n)+`).ReplaceAll(buf.Bytes(), []byte("\n")) - bs = bytes.Replace(bs, []byte("//+n"), []byte("\n"), -1) - - bs, err = format.Source(bs) - if err != nil { - panic(err) - } - fmt.Fprintln(output, string(bs)) -} - -func uncamelize(s string) string { - return regexp.MustCompile("[a-z][A-Z]").ReplaceAllStringFunc(s, func(camel string) string { - return camel[:1] + " " + camel[1:] - }) -} - -func generateDiagram(output io.Writer, s structInfo) { - sn := s.Name - fs := s.Fields - - fmt.Fprintln(output, sn+" Structure:") - - if len(fs) == 0 { - fmt.Fprintln(output, "(contains no fields)") - fmt.Fprintln(output) - fmt.Fprintln(output) - return - } - - fmt.Fprintln(output) - fmt.Fprintln(output, " 0 1 2 3") - fmt.Fprintln(output, " 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1") - line := "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" - fmt.Fprintln(output, line) - - for _, f := range fs { - tn := f.FieldType - name := uncamelize(f.Name) - - if f.IsSlice { - fmt.Fprintf(output, "| %s |\n", center("Number of "+name, 61)) - fmt.Fprintln(output, line) - } - switch tn { - case "bool": - fmt.Fprintf(output, "| %s |V|\n", center(name+" (V=0 or 1)", 59)) - fmt.Fprintln(output, line) - case "int16", "uint16": - fmt.Fprintf(output, "| %s | %s |\n", center("0x0000", 29), center(name, 29)) - fmt.Fprintln(output, line) - case "int32", "uint32": - fmt.Fprintf(output, "| %s |\n", center(name, 61)) - fmt.Fprintln(output, line) - case "int64", "uint64": - fmt.Fprintf(output, "| %-61s |\n", "") - fmt.Fprintf(output, "+ %s +\n", center(name+" (64 bits)", 61)) - fmt.Fprintf(output, "| %-61s |\n", "") - fmt.Fprintln(output, line) - case "string", "byte": // XXX We assume slice of byte! - fmt.Fprintf(output, "| %s |\n", center("Length of "+name, 61)) - fmt.Fprintln(output, line) - fmt.Fprintf(output, "/ %61s /\n", "") - fmt.Fprintf(output, "\\ %s \\\n", center(name+" (variable length)", 61)) - fmt.Fprintf(output, "/ %61s /\n", "") - fmt.Fprintln(output, line) - default: - if f.IsSlice { - tn = "Zero or more " + tn + " Structures" - fmt.Fprintf(output, "/ %s /\n", center("", 61)) - fmt.Fprintf(output, "\\ %s \\\n", center(tn, 61)) - fmt.Fprintf(output, "/ %s /\n", center("", 61)) - } else { - tn = tn + " Structure" - fmt.Fprintf(output, "/ %s /\n", center("", 61)) - fmt.Fprintf(output, "\\ %s \\\n", center(tn, 61)) - fmt.Fprintf(output, "/ %s /\n", center("", 61)) - } - fmt.Fprintln(output, line) - } - } - fmt.Fprintln(output) - fmt.Fprintln(output) -} - -func generateXdr(output io.Writer, s structInfo) { - sn := s.Name - fs := s.Fields - - fmt.Fprintf(output, "struct %s {\n", sn) - - for _, f := range fs { - tn := f.FieldType - fn := f.Name - suf := "" - l := "" - if f.Max > 0 { - l = strconv.Itoa(f.Max) - } - if f.IsSlice { - suf = "<" + l + ">" - } - - switch tn { - case "int16", "int32": - fmt.Fprintf(output, "\tint %s%s;\n", fn, suf) - case "uint16", "uint32": - fmt.Fprintf(output, "\tunsigned int %s%s;\n", fn, suf) - case "int64": - fmt.Fprintf(output, "\thyper %s%s;\n", fn, suf) - case "uint64": - fmt.Fprintf(output, "\tunsigned hyper %s%s;\n", fn, suf) - case "string": - fmt.Fprintf(output, "\tstring %s<%s>;\n", fn, l) - case "byte": - fmt.Fprintf(output, "\topaque %s<%s>;\n", fn, l) - default: - fmt.Fprintf(output, "\t%s %s%s;\n", tn, fn, suf) - } - } - fmt.Fprintln(output, "}") - fmt.Fprintln(output) -} - -func center(s string, w int) string { - w -= len(s) - l := w / 2 - r := l - if l+r < w { - r++ - } - return strings.Repeat(" ", l) + s + strings.Repeat(" ", r) -} - -func inspector(structs *[]structInfo) func(ast.Node) bool { - return func(n ast.Node) bool { - switch n := n.(type) { - case *ast.TypeSpec: - switch t := n.Type.(type) { - case *ast.StructType: - name := n.Name.Name - fs := handleStruct(t) - *structs = append(*structs, structInfo{name, fs}) - } - return false - default: - return true - } - } -} - -func main() { - outputFile := flag.String("o", "", "Output file, blank for stdout") - flag.Parse() - fname := flag.Arg(0) - - fset := token.NewFileSet() - f, err := parser.ParseFile(fset, fname, nil, parser.ParseComments) - if err != nil { - log.Fatal(err) - } - - var structs []structInfo - i := inspector(&structs) - ast.Inspect(f, i) - - var output io.Writer = os.Stdout - if *outputFile != "" { - fd, err := os.Create(*outputFile) - if err != nil { - log.Fatal(err) - } - output = fd - } - - headerTpl.Execute(output, map[string]string{"Package": f.Name.Name}) - for _, s := range structs { - fmt.Fprintf(output, "\n/*\n\n") - generateDiagram(output, s) - generateXdr(output, s) - fmt.Fprintf(output, "*/\n") - generateCode(output, s) - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go deleted file mode 100644 index be3f092b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -package xdr - -import ( - "log" - "os" -) - -var ( - debug = len(os.Getenv("XDRTRACE")) > 0 - dl = log.New(os.Stdout, "xdr: ", log.Lshortfile|log.Ltime|log.Lmicroseconds) -) - -const maxDebugBytes = 32 diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go deleted file mode 100644 index 41b59bc1..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -// Package xdr implements an XDR (RFC 4506) encoder/decoder. -package xdr diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh deleted file mode 100644 index 2f348226..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -go run cmd/genxdr/main.go -- bench_test.go > bench_xdr_test.go -go run cmd/genxdr/main.go -- encdec_test.go > encdec_xdr_test.go diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go deleted file mode 100644 index 813a9b61..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -// +build ipdr - -package xdr - -func pad(l int) int { - return 0 -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go deleted file mode 100644 index b1cac864..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -// +build !ipdr - -package xdr - -func pad(l int) int { - d := l % 4 - if d == 0 { - return 0 - } - return 4 - d -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go deleted file mode 100644 index feb3cd31..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). -// All rights reserved. Use of this source code is governed by an MIT-style -// license that can be found in the LICENSE file. - -package xdr - -import ( - "fmt" - "io" - "reflect" - "unsafe" -) - -type Reader struct { - r io.Reader - err error - b [8]byte -} - -func NewReader(r io.Reader) *Reader { - return &Reader{ - r: r, - } -} - -func (r *Reader) ReadRaw(bs []byte) (int, error) { - if r.err != nil { - return 0, r.err - } - - var n int - n, r.err = io.ReadFull(r.r, bs) - return n, r.err -} - -func (r *Reader) ReadString() string { - return r.ReadStringMax(0) -} - -func (r *Reader) ReadStringMax(max int) string { - buf := r.ReadBytesMaxInto(max, nil) - bh := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) - sh := reflect.StringHeader{ - Data: bh.Data, - Len: bh.Len, - } - return *((*string)(unsafe.Pointer(&sh))) -} - -func (r *Reader) ReadBytes() []byte { - return r.ReadBytesInto(nil) -} - -func (r *Reader) ReadBytesMax(max int) []byte { - return r.ReadBytesMaxInto(max, nil) -} - -func (r *Reader) ReadBytesInto(dst []byte) []byte { - return r.ReadBytesMaxInto(0, dst) -} - -func (r *Reader) ReadBytesMaxInto(max int, dst []byte) []byte { - if r.err != nil { - return nil - } - - l := int(r.ReadUint32()) - if r.err != nil { - return nil - } - if l < 0 || max > 0 && l > max { - // l may be negative on 32 bit builds - r.err = ElementSizeExceeded("bytes field", l, max) - return nil - } - - if fullLen := l + pad(l); fullLen > len(dst) { - dst = make([]byte, fullLen) - } else { - dst = dst[:fullLen] - } - - var n int - n, r.err = io.ReadFull(r.r, dst) - if r.err != nil { - if debug { - dl.Printf("rd bytes (%d): %v", len(dst), r.err) - } - return nil - } - - if debug { - if n > maxDebugBytes { - dl.Printf("rd bytes (%d): %x...", len(dst), dst[:maxDebugBytes]) - } else { - dl.Printf("rd bytes (%d): %x", len(dst), dst) - } - } - return dst[:l] -} - -func (r *Reader) ReadBool() bool { - return r.ReadUint8() != 0 -} - -func (r *Reader) ReadUint32() uint32 { - if r.err != nil { - return 0 - } - - _, r.err = io.ReadFull(r.r, r.b[:4]) - if r.err != nil { - if debug { - dl.Printf("rd uint32: %v", r.err) - } - return 0 - } - - v := uint32(r.b[3]) | uint32(r.b[2])<<8 | uint32(r.b[1])<<16 | uint32(r.b[0])<<24 - - if debug { - dl.Printf("rd uint32=%d (0x%08x)", v, v) - } - return v -} - -func (r *Reader) ReadUint64() uint64 { - if r.err != nil { - return 0 - } - - _, r.err = io.ReadFull(r.r, r.b[:8]) - if r.err != nil { - if debug { - dl.Printf("rd uint64: %v", r.err) - } - return 0 - } - - v := uint64(r.b[7]) | uint64(r.b[6])<<8 | uint64(r.b[5])<<16 | uint64(r.b[4])<<24 | - uint64(r.b[3])<<32 | uint64(r.b[2])<<40 | uint64(r.b[1])<<48 | uint64(r.b[0])<<56 - - if debug { - dl.Printf("rd uint64=%d (0x%016x)", v, v) - } - return v -} - -type XDRError struct { - op string - err error -} - -func (e XDRError) Error() string { - return "xdr " + e.op + ": " + e.err.Error() -} - -func (e XDRError) IsEOF() bool { - return e.err == io.EOF -} - -func (r *Reader) Error() error { - if r.err == nil { - return nil - } - return XDRError{"read", r.err} -} - -func ElementSizeExceeded(field string, size, limit int) error { - return fmt.Errorf("%s exceeds size limit; %d > %d", field, size, limit) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go deleted file mode 100644 index 28e0b56a..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). -// All rights reserved. Use of this source code is governed by an MIT-style -// license that can be found in the LICENSE file. - -// +build ipdr - -package xdr - -import "io" - -func (r *Reader) ReadUint8() uint8 { - if r.err != nil { - return 0 - } - - _, r.err = io.ReadFull(r.r, r.b[:1]) - if r.err != nil { - if debug { - dl.Printf("rd uint8: %v", r.err) - } - return 0 - } - - if debug { - dl.Printf("rd uint8=%d (0x%02x)", r.b[0], r.b[0]) - } - return r.b[0] -} - -func (r *Reader) ReadUint16() uint16 { - if r.err != nil { - return 0 - } - - _, r.err = io.ReadFull(r.r, r.b[:2]) - if r.err != nil { - if debug { - dl.Printf("rd uint16: %v", r.err) - } - return 0 - } - - v := uint16(r.b[1]) | uint16(r.b[0])<<8 - - if debug { - dl.Printf("rd uint16=%d (0x%04x)", v, v) - } - return v -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go deleted file mode 100644 index 4ac629a0..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). -// All rights reserved. Use of this source code is governed by an MIT-style -// license that can be found in the LICENSE file. - -// +build !ipdr - -package xdr - -func (r *Reader) ReadUint8() uint8 { - return uint8(r.ReadUint32()) -} - -func (r *Reader) ReadUint16() uint16 { - return uint16(r.ReadUint32()) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go deleted file mode 100644 index d1ec47bc..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -package xdr - -import ( - "io" - "reflect" - "unsafe" -) - -var padBytes = []byte{0, 0, 0} - -type Writer struct { - w io.Writer - tot int - err error - b [8]byte -} - -type AppendWriter []byte - -func (w *AppendWriter) Write(bs []byte) (int, error) { - *w = append(*w, bs...) - return len(bs), nil -} - -func NewWriter(w io.Writer) *Writer { - return &Writer{ - w: w, - } -} - -func (w *Writer) WriteRaw(bs []byte) (int, error) { - if w.err != nil { - return 0, w.err - } - - var n int - n, w.err = w.w.Write(bs) - return n, w.err -} - -func (w *Writer) WriteString(s string) (int, error) { - sh := *((*reflect.StringHeader)(unsafe.Pointer(&s))) - bh := reflect.SliceHeader{ - Data: sh.Data, - Len: sh.Len, - Cap: sh.Len, - } - return w.WriteBytes(*(*[]byte)(unsafe.Pointer(&bh))) -} - -func (w *Writer) WriteBytes(bs []byte) (int, error) { - if w.err != nil { - return 0, w.err - } - - w.WriteUint32(uint32(len(bs))) - if w.err != nil { - return 0, w.err - } - - if debug { - if len(bs) > maxDebugBytes { - dl.Printf("wr bytes (%d): %x...", len(bs), bs[:maxDebugBytes]) - } else { - dl.Printf("wr bytes (%d): %x", len(bs), bs) - } - } - - var l, n int - n, w.err = w.w.Write(bs) - l += n - - if p := pad(len(bs)); w.err == nil && p > 0 { - n, w.err = w.w.Write(padBytes[:p]) - l += n - } - - w.tot += l - return l, w.err -} - -func (w *Writer) WriteBool(v bool) (int, error) { - if v { - return w.WriteUint8(1) - } else { - return w.WriteUint8(0) - } -} - -func (w *Writer) WriteUint32(v uint32) (int, error) { - if w.err != nil { - return 0, w.err - } - - if debug { - dl.Printf("wr uint32=%d", v) - } - - w.b[0] = byte(v >> 24) - w.b[1] = byte(v >> 16) - w.b[2] = byte(v >> 8) - w.b[3] = byte(v) - - var l int - l, w.err = w.w.Write(w.b[:4]) - w.tot += l - return l, w.err -} - -func (w *Writer) WriteUint64(v uint64) (int, error) { - if w.err != nil { - return 0, w.err - } - - if debug { - dl.Printf("wr uint64=%d", v) - } - - w.b[0] = byte(v >> 56) - w.b[1] = byte(v >> 48) - w.b[2] = byte(v >> 40) - w.b[3] = byte(v >> 32) - w.b[4] = byte(v >> 24) - w.b[5] = byte(v >> 16) - w.b[6] = byte(v >> 8) - w.b[7] = byte(v) - - var l int - l, w.err = w.w.Write(w.b[:8]) - w.tot += l - return l, w.err -} - -func (w *Writer) Tot() int { - return w.tot -} - -func (w *Writer) Error() error { - if w.err == nil { - return nil - } - return XDRError{"write", w.err} -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go deleted file mode 100644 index df803ae3..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -// +build ipdr - -package xdr - -func (w *Writer) WriteUint8(v uint8) (int, error) { - if w.err != nil { - return 0, w.err - } - - if debug { - dl.Printf("wr uint8=%d", v) - } - - w.b[0] = byte(v) - - var l int - l, w.err = w.w.Write(w.b[:1]) - w.tot += l - return l, w.err -} - -func (w *Writer) WriteUint16(v uint16) (int, error) { - if w.err != nil { - return 0, w.err - } - - if debug { - dl.Printf("wr uint8=%d", v) - } - - w.b[0] = byte(v >> 8) - w.b[1] = byte(v) - - var l int - l, w.err = w.w.Write(w.b[:2]) - w.tot += l - return l, w.err -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go deleted file mode 100644 index 190fd549..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -// +build !ipdr - -package xdr - -func (w *Writer) WriteUint8(v uint8) (int, error) { - return w.WriteUint32(uint32(v)) -} - -func (w *Writer) WriteUint16(v uint16) (int, error) { - return w.WriteUint32(uint32(v)) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go deleted file mode 100644 index cdfe2991..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go +++ /dev/null @@ -1,121 +0,0 @@ -/* -Copyright 2013 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. -*/ - -// Package lru implements an LRU cache. -package lru - -import "container/list" - -// Cache is an LRU cache. It is not safe for concurrent access. -type Cache struct { - // MaxEntries is the maximum number of cache entries before - // an item is evicted. Zero means no limit. - MaxEntries int - - // OnEvicted optionally specificies a callback function to be - // executed when an entry is purged from the cache. - OnEvicted func(key Key, value interface{}) - - ll *list.List - cache map[interface{}]*list.Element -} - -// A Key may be any value that is comparable. See http://golang.org/ref/spec#Comparison_operators -type Key interface{} - -type entry struct { - key Key - value interface{} -} - -// New creates a new Cache. -// If maxEntries is zero, the cache has no limit and it's assumed -// that eviction is done by the caller. -func New(maxEntries int) *Cache { - return &Cache{ - MaxEntries: maxEntries, - ll: list.New(), - cache: make(map[interface{}]*list.Element), - } -} - -// Add adds a value to the cache. -func (c *Cache) Add(key Key, value interface{}) { - if c.cache == nil { - c.cache = make(map[interface{}]*list.Element) - c.ll = list.New() - } - if ee, ok := c.cache[key]; ok { - c.ll.MoveToFront(ee) - ee.Value.(*entry).value = value - return - } - ele := c.ll.PushFront(&entry{key, value}) - c.cache[key] = ele - if c.MaxEntries != 0 && c.ll.Len() > c.MaxEntries { - c.RemoveOldest() - } -} - -// Get looks up a key's value from the cache. -func (c *Cache) Get(key Key) (value interface{}, ok bool) { - if c.cache == nil { - return - } - if ele, hit := c.cache[key]; hit { - c.ll.MoveToFront(ele) - return ele.Value.(*entry).value, true - } - return -} - -// Remove removes the provided key from the cache. -func (c *Cache) Remove(key Key) { - if c.cache == nil { - return - } - if ele, hit := c.cache[key]; hit { - c.removeElement(ele) - } -} - -// RemoveOldest removes the oldest item from the cache. -func (c *Cache) RemoveOldest() { - if c.cache == nil { - return - } - ele := c.ll.Back() - if ele != nil { - c.removeElement(ele) - } -} - -func (c *Cache) removeElement(e *list.Element) { - c.ll.Remove(e) - kv := e.Value.(*entry) - delete(c.cache, kv.key) - if c.OnEvicted != nil { - c.OnEvicted(kv.key, kv.value) - } -} - -// Len returns the number of items in the cache. -func (c *Cache) Len() int { - if c.cache == nil { - return 0 - } - return c.ll.Len() -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE deleted file mode 100644 index ade9307b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -All files in this repository are licensed as follows. If you contribute -to this repository, it is assumed that you license your contribution -under the same license unless you state otherwise. - -All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file. - -This software is licensed under the LGPLv3, included below. - -As a special exception to the GNU Lesser General Public License version 3 -("LGPL3"), the copyright holders of this Library give you permission to -convey to a third party a Combined Work that links statically or dynamically -to this Library without providing any Minimal Corresponding Source or -Minimal Application Code as set out in 4d or providing the installation -information set out in section 4e, provided that you comply with the other -provisions of LGPL3 and provided that you meet, for the Application the -terms and conditions of the license(s) which apply to the Application. - -Except as stated in this special exception, the provisions of LGPL3 will -continue to comply in full to this Library. If you modify this Library, you -may apply this exception to your version of this Library, but you are not -obliged to do so. If you do not wish to do so, delete this exception -statement from your version. This exception does not (and cannot) modify any -license terms which apply to the Application, with which you must still -comply. - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md deleted file mode 100644 index a0fdfe2b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md +++ /dev/null @@ -1,117 +0,0 @@ -# ratelimit --- - import "github.com/juju/ratelimit" - -The ratelimit package provides an efficient token bucket implementation. See -http://en.wikipedia.org/wiki/Token_bucket. - -## Usage - -#### func Reader - -```go -func Reader(r io.Reader, bucket *Bucket) io.Reader -``` -Reader returns a reader that is rate limited by the given token bucket. Each -token in the bucket represents one byte. - -#### func Writer - -```go -func Writer(w io.Writer, bucket *Bucket) io.Writer -``` -Writer returns a writer that is rate limited by the given token bucket. Each -token in the bucket represents one byte. - -#### type Bucket - -```go -type Bucket struct { -} -``` - -Bucket represents a token bucket that fills at a predetermined rate. Methods on -Bucket may be called concurrently. - -#### func NewBucket - -```go -func NewBucket(fillInterval time.Duration, capacity int64) *Bucket -``` -NewBucket returns a new token bucket that fills at the rate of one token every -fillInterval, up to the given maximum capacity. Both arguments must be positive. -The bucket is initially full. - -#### func NewBucketWithQuantum - -```go -func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket -``` -NewBucketWithQuantum is similar to NewBucket, but allows the specification of -the quantum size - quantum tokens are added every fillInterval. - -#### func NewBucketWithRate - -```go -func NewBucketWithRate(rate float64, capacity int64) *Bucket -``` -NewBucketWithRate returns a token bucket that fills the bucket at the rate of -rate tokens per second up to the given maximum capacity. Because of limited -clock resolution, at high rates, the actual rate may be up to 1% different from -the specified rate. - -#### func (*Bucket) Rate - -```go -func (tb *Bucket) Rate() float64 -``` -Rate returns the fill rate of the bucket, in tokens per second. - -#### func (*Bucket) Take - -```go -func (tb *Bucket) Take(count int64) time.Duration -``` -Take takes count tokens from the bucket without blocking. It returns the time -that the caller should wait until the tokens are actually available. - -Note that if the request is irrevocable - there is no way to return tokens to -the bucket once this method commits us to taking them. - -#### func (*Bucket) TakeAvailable - -```go -func (tb *Bucket) TakeAvailable(count int64) int64 -``` -TakeAvailable takes up to count immediately available tokens from the bucket. It -returns the number of tokens removed, or zero if there are no available tokens. -It does not block. - -#### func (*Bucket) TakeMaxDuration - -```go -func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) -``` -TakeMaxDuration is like Take, except that it will only take tokens from the -bucket if the wait time for the tokens is no greater than maxWait. - -If it would take longer than maxWait for the tokens to become available, it does -nothing and reports false, otherwise it returns the time that the caller should -wait until the tokens are actually available, and reports true. - -#### func (*Bucket) Wait - -```go -func (tb *Bucket) Wait(count int64) -``` -Wait takes count tokens from the bucket, waiting until they are available. - -#### func (*Bucket) WaitMaxDuration - -```go -func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool -``` -WaitMaxDuration is like Wait except that it will only take tokens from the -bucket if it needs to wait for no greater than maxWait. It reports whether any -tokens have been removed from the bucket If no tokens have been removed, it -returns immediately. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go deleted file mode 100644 index a36ffc74..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3 with static-linking exception. -// See LICENCE file for details. - -// The ratelimit package provides an efficient token bucket implementation -// that can be used to limit the rate of arbitrary things. -// See http://en.wikipedia.org/wiki/Token_bucket. -package ratelimit - -import ( - "strconv" - "sync" - "time" - "math" -) - -// Bucket represents a token bucket that fills at a predetermined rate. -// Methods on Bucket may be called concurrently. -type Bucket struct { - startTime time.Time - capacity int64 - quantum int64 - fillInterval time.Duration - - // The mutex guards the fields following it. - mu sync.Mutex - - // avail holds the number of available tokens - // in the bucket, as of availTick ticks from startTime. - // It will be negative when there are consumers - // waiting for tokens. - avail int64 - availTick int64 -} - -// NewBucket returns a new token bucket that fills at the -// rate of one token every fillInterval, up to the given -// maximum capacity. Both arguments must be -// positive. The bucket is initially full. -func NewBucket(fillInterval time.Duration, capacity int64) *Bucket { - return NewBucketWithQuantum(fillInterval, capacity, 1) -} - -// rateMargin specifes the allowed variance of actual -// rate from specified rate. 1% seems reasonable. -const rateMargin = 0.01 - -// NewBucketWithRate returns a token bucket that fills the bucket -// at the rate of rate tokens per second up to the given -// maximum capacity. Because of limited clock resolution, -// at high rates, the actual rate may be up to 1% different from the -// specified rate. -func NewBucketWithRate(rate float64, capacity int64) *Bucket { - for quantum := int64(1); quantum < 1<<50; quantum = nextQuantum(quantum) { - fillInterval := time.Duration(1e9 * float64(quantum) / rate) - if fillInterval <= 0 { - continue - } - tb := NewBucketWithQuantum(fillInterval, capacity, quantum) - if diff := math.Abs(tb.Rate() - rate); diff/rate <= rateMargin { - return tb - } - } - panic("cannot find suitable quantum for " + strconv.FormatFloat(rate, 'g', -1, 64)) -} - -// nextQuantum returns the next quantum to try after q. -// We grow the quantum exponentially, but slowly, so we -// get a good fit in the lower numbers. -func nextQuantum(q int64) int64 { - q1 := q * 11 / 10 - if q1 == q { - q1++ - } - return q1 -} - -// NewBucketWithQuantum is similar to NewBucket, but allows -// the specification of the quantum size - quantum tokens -// are added every fillInterval. -func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket { - if fillInterval <= 0 { - panic("token bucket fill interval is not > 0") - } - if capacity <= 0 { - panic("token bucket capacity is not > 0") - } - if quantum <= 0 { - panic("token bucket quantum is not > 0") - } - return &Bucket{ - startTime: time.Now(), - capacity: capacity, - quantum: quantum, - avail: capacity, - fillInterval: fillInterval, - } -} - -// Wait takes count tokens from the bucket, waiting until they are -// available. -func (tb *Bucket) Wait(count int64) { - if d := tb.Take(count); d > 0 { - time.Sleep(d) - } -} - -// WaitMaxDuration is like Wait except that it will -// only take tokens from the bucket if it needs to wait -// for no greater than maxWait. It reports whether -// any tokens have been removed from the bucket -// If no tokens have been removed, it returns immediately. -func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool { - d, ok := tb.TakeMaxDuration(count, maxWait) - if d > 0 { - time.Sleep(d) - } - return ok -} - -const infinityDuration time.Duration = 0x7fffffffffffffff - -// Take takes count tokens from the bucket without blocking. It returns -// the time that the caller should wait until the tokens are actually -// available. -// -// Note that if the request is irrevocable - there is no way to return -// tokens to the bucket once this method commits us to taking them. -func (tb *Bucket) Take(count int64) time.Duration { - d, _ := tb.take(time.Now(), count, infinityDuration) - return d -} - -// TakeMaxDuration is like Take, except that -// it will only take tokens from the bucket if the wait -// time for the tokens is no greater than maxWait. -// -// If it would take longer than maxWait for the tokens -// to become available, it does nothing and reports false, -// otherwise it returns the time that the caller should -// wait until the tokens are actually available, and reports -// true. -func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) { - return tb.take(time.Now(), count, maxWait) -} - -// TakeAvailable takes up to count immediately available tokens from the -// bucket. It returns the number of tokens removed, or zero if there are -// no available tokens. It does not block. -func (tb *Bucket) TakeAvailable(count int64) int64 { - return tb.takeAvailable(time.Now(), count) -} - -// takeAvailable is the internal version of TakeAvailable - it takes the -// current time as an argument to enable easy testing. -func (tb *Bucket) takeAvailable(now time.Time, count int64) int64 { - if count <= 0 { - return 0 - } - tb.mu.Lock() - defer tb.mu.Unlock() - - tb.adjust(now) - if tb.avail <= 0 { - return 0 - } - if count > tb.avail { - count = tb.avail - } - tb.avail -= count - return count -} - -// Rate returns the fill rate of the bucket, in tokens per second. -func (tb *Bucket) Rate() float64 { - return 1e9 * float64(tb.quantum) / float64(tb.fillInterval) -} - -// take is the internal version of Take - it takes the current time as -// an argument to enable easy testing. -func (tb *Bucket) take(now time.Time, count int64, maxWait time.Duration) (time.Duration, bool) { - if count <= 0 { - return 0, true - } - tb.mu.Lock() - defer tb.mu.Unlock() - - currentTick := tb.adjust(now) - avail := tb.avail - count - if avail >= 0 { - tb.avail = avail - return 0, true - } - // Round up the missing tokens to the nearest multiple - // of quantum - the tokens won't be available until - // that tick. - endTick := currentTick + (-avail+tb.quantum-1)/tb.quantum - endTime := tb.startTime.Add(time.Duration(endTick) * tb.fillInterval) - waitTime := endTime.Sub(now) - if waitTime > maxWait { - return 0, false - } - tb.avail = avail - return waitTime, true -} - -// adjust adjusts the current bucket capacity based on the current time. -// It returns the current tick. -func (tb *Bucket) adjust(now time.Time) (currentTick int64) { - currentTick = int64(now.Sub(tb.startTime) / tb.fillInterval) - - if tb.avail >= tb.capacity { - return - } - tb.avail += (currentTick - tb.availTick) * tb.quantum - if tb.avail > tb.capacity { - tb.avail = tb.capacity - } - tb.availTick = currentTick - return -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go deleted file mode 100644 index 6403bf78..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 Canonical Ltd. -// Licensed under the LGPLv3 with static-linking exception. -// See LICENCE file for details. - -package ratelimit - -import "io" - -type reader struct { - r io.Reader - bucket *Bucket -} - -// Reader returns a reader that is rate limited by -// the given token bucket. Each token in the bucket -// represents one byte. -func Reader(r io.Reader, bucket *Bucket) io.Reader { - return &reader{ - r: r, - bucket: bucket, - } -} - -func (r *reader) Read(buf []byte) (int, error) { - n, err := r.r.Read(buf) - if n <= 0 { - return n, err - } - r.bucket.Wait(int64(n)) - return n, err -} - -type writer struct { - w io.Writer - bucket *Bucket -} - -// Writer returns a reader that is rate limited by -// the given token bucket. Each token in the bucket -// represents one byte. -func Writer(w io.Writer, bucket *Bucket) io.Writer { - return &writer{ - w: w, - bucket: bucket, - } -} - -func (w *writer) Write(buf []byte) (int, error) { - w.bucket.Wait(int64(len(buf))) - return w.w.Write(buf) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules deleted file mode 100644 index 51779cbf..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "test-data"] - path = test-data - url = git://github.com/maxmind/MaxMind-DB.git diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml deleted file mode 100644 index d2f25674..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -language: go - -go: - - 1.2 - - 1.3 - - 1.4 - - 1.5 - - 1.6 - - tip - -before_install: - - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go get -v github.com/golang/lint/golint; fi" - -script: - - go test -race -cpu 1,4 -v - - go test -race -v -tags appengine - - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go vet ./...; fi" - - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then golint .; fi" - -sudo: false diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE deleted file mode 100644 index ba53dd18..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Gregory J. Oschwald - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md deleted file mode 100644 index 7a3c22a0..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# GeoIP2 Reader for Go # - -[![Build Status](https://travis-ci.org/oschwald/geoip2-golang.png?branch=master)](https://travis-ci.org/oschwald/geoip2-golang) -[![GoDoc](https://godoc.org/github.com/oschwald/geoip2-golang?status.png)](https://godoc.org/github.com/oschwald/geoip2-golang) - -This library reads MaxMind [GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/) -and [GeoIP2](http://www.maxmind.com/en/geolocation_landing) databases. - -This library is built using -[the Go maxminddb reader](https://github.com/oschwald/maxminddb-golang). -All data for the database record is decoded using this library. If you only -need several fields, you may get superior performance by using maxminddb's -`Lookup` directly with a result struct that only contains the required fields. -(See [example_test.go](https://github.com/oschwald/maxminddb-golang/blob/master/example_test.go) -in the maxminddb repository for an example of this.) - -## Installation ## - -``` -go get github.com/oschwald/geoip2-golang -``` - -## Usage ## - -[See GoDoc](http://godoc.org/github.com/oschwald/geoip2-golang) for -documentation and examples. - -## Example ## - -```go -package main - -import ( - "fmt" - "github.com/oschwald/geoip2-golang" - "log" - "net" -) - -func main() { - db, err := geoip2.Open("GeoIP2-City.mmdb") - if err != nil { - log.Fatal(err) - } - defer db.Close() - // If you are using strings that may be invalid, check that ip is not nil - ip := net.ParseIP("81.2.69.142") - record, err := db.City(ip) - if err != nil { - log.Fatal(err) - } - fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["pt-BR"]) - fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"]) - fmt.Printf("Russian country name: %v\n", record.Country.Names["ru"]) - fmt.Printf("ISO country code: %v\n", record.Country.IsoCode) - fmt.Printf("Time zone: %v\n", record.Location.TimeZone) - fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude) - // Output: - // Portuguese (BR) city name: Londres - // English subdivision name: England - // Russian country name: Великобритания - // ISO country code: GB - // Time zone: Europe/London - // Coordinates: 51.5142, -0.0931 -} -``` - -## Testing ## - -Make sure you checked out test data submodule: - -``` -git submodule init -git submodule update -``` - -Execute test suite: - -``` -go test -``` - -## Contributing ## - -Contributions welcome! Please fork the repository and open a pull request -with your changes. - -## License ## - -This is free software, licensed under the ISC license. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go deleted file mode 100644 index 45d642be..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go +++ /dev/null @@ -1,202 +0,0 @@ -// Package geoip2 provides a wrapper around the maxminddb package for -// easy use with the MaxMind GeoIP2 and GeoLite2 databases. The records for -// the IP address is returned from this package as well-formed structures -// that match the internal layout of data from MaxMind. -package geoip2 - -import ( - "net" - - "github.com/oschwald/maxminddb-golang" -) - -// The City structure corresponds to the data in the GeoIP2/GeoLite2 City -// databases. -type City struct { - City struct { - GeoNameID uint `maxminddb:"geoname_id"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"city"` - Continent struct { - Code string `maxminddb:"code"` - GeoNameID uint `maxminddb:"geoname_id"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"continent"` - Country struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"country"` - Location struct { - Latitude float64 `maxminddb:"latitude"` - Longitude float64 `maxminddb:"longitude"` - MetroCode uint `maxminddb:"metro_code"` - TimeZone string `maxminddb:"time_zone"` - } `maxminddb:"location"` - Postal struct { - Code string `maxminddb:"code"` - } `maxminddb:"postal"` - RegisteredCountry struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"registered_country"` - RepresentedCountry struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - Type string `maxminddb:"type"` - } `maxminddb:"represented_country"` - Subdivisions []struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"subdivisions"` - Traits struct { - IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"` - IsSatelliteProvider bool `maxminddb:"is_satellite_provider"` - } `maxminddb:"traits"` -} - -// The Country structure corresponds to the data in the GeoIP2/GeoLite2 -// Country databases. -type Country struct { - Continent struct { - Code string `maxminddb:"code"` - GeoNameID uint `maxminddb:"geoname_id"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"continent"` - Country struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"country"` - RegisteredCountry struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - } `maxminddb:"registered_country"` - RepresentedCountry struct { - GeoNameID uint `maxminddb:"geoname_id"` - IsoCode string `maxminddb:"iso_code"` - Names map[string]string `maxminddb:"names"` - Type string `maxminddb:"type"` - } `maxminddb:"represented_country"` - Traits struct { - IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"` - IsSatelliteProvider bool `maxminddb:"is_satellite_provider"` - } `maxminddb:"traits"` -} - -// The AnonymousIP structure corresponds to the data in the GeoIP2 -// Anonymous IP database. -type AnonymousIP struct { - IsAnonymous bool `maxminddb:"is_anonymous"` - IsAnonymousVPN bool `maxminddb:"is_anonymous_vpn"` - IsHostingProvider bool `maxminddb:"is_hosting_provider"` - IsPublicProxy bool `maxminddb:"is_public_proxy"` - IsTorExitNode bool `maxminddb:"is_tor_exit_node"` -} - -// The ConnectionType structure corresponds to the data in the GeoIP2 -// Connection-Type database. -type ConnectionType struct { - ConnectionType string `maxminddb:"connection_type"` -} - -// The Domain structure corresponds to the data in the GeoIP2 Domain database. -type Domain struct { - Domain string `maxminddb:"domain"` -} - -// The ISP structure corresponds to the data in the GeoIP2 ISP database. -type ISP struct { - AutonomousSystemNumber uint `maxminddb:"autonomous_system_number"` - AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"` - ISP string `maxminddb:"isp"` - Organization string `maxminddb:"organization"` -} - -// Reader holds the maxminddb.Reader structure. It should be created -// using the Open function. -type Reader struct { - mmdbReader *maxminddb.Reader -} - -// Open takes a string path to a file and returns a Reader structure or an -// error. The database file is opened using a memory map. Use the Close method -// on the Reader object to return the resources to the system. -func Open(file string) (*Reader, error) { - reader, err := maxminddb.Open(file) - return &Reader{mmdbReader: reader}, err -} - -// FromBytes takes a byte slice corresponding to a GeoIP2/GeoLite2 database -// file and returns a Reader structure or an error. -func FromBytes(bytes []byte) (*Reader, error) { - reader, err := maxminddb.FromBytes(bytes) - return &Reader{mmdbReader: reader}, err -} - -// City takes an IP address as a net.IP struct and returns a City struct -// and/or an error. Although this can be used with other databases, this -// method generally should be used with the GeoIP2 or GeoLite2 City databases. -func (r *Reader) City(ipAddress net.IP) (*City, error) { - var city City - err := r.mmdbReader.Lookup(ipAddress, &city) - return &city, err -} - -// Country takes an IP address as a net.IP struct and returns a Country struct -// and/or an error. Although this can be used with other databases, this -// method generally should be used with the GeoIP2 or GeoLite2 Country -// databases. -func (r *Reader) Country(ipAddress net.IP) (*Country, error) { - var country Country - err := r.mmdbReader.Lookup(ipAddress, &country) - return &country, err -} - -// AnonymousIP takes an IP address as a net.IP struct and returns a -// AnonymousIP struct and/or an error. -func (r *Reader) AnonymousIP(ipAddress net.IP) (*AnonymousIP, error) { - var anonIP AnonymousIP - err := r.mmdbReader.Lookup(ipAddress, &anonIP) - return &anonIP, err -} - -// ConnectionType takes an IP address as a net.IP struct and returns a -// ConnectionType struct and/or an error -func (r *Reader) ConnectionType(ipAddress net.IP) (*ConnectionType, error) { - var val ConnectionType - err := r.mmdbReader.Lookup(ipAddress, &val) - return &val, err -} - -// Domain takes an IP address as a net.IP struct and returns a -// Domain struct and/or an error -func (r *Reader) Domain(ipAddress net.IP) (*Domain, error) { - var val Domain - err := r.mmdbReader.Lookup(ipAddress, &val) - return &val, err -} - -// ISP takes an IP address as a net.IP struct and returns a ISP struct and/or -// an error -func (r *Reader) ISP(ipAddress net.IP) (*ISP, error) { - var val ISP - err := r.mmdbReader.Lookup(ipAddress, &val) - return &val, err -} - -// Metadata takes no arguments and returns a struct containing metadata about -// the MaxMind database in use by the Reader. -func (r *Reader) Metadata() maxminddb.Metadata { - return r.mmdbReader.Metadata -} - -// Close unmaps the database file from virtual memory and returns the -// resources to the system. -func (r *Reader) Close() error { - return r.mmdbReader.Close() -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules deleted file mode 100644 index 51779cbf..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "test-data"] - path = test-data - url = git://github.com/maxmind/MaxMind-DB.git diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml deleted file mode 100644 index e01d99a2..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -language: go - -go: - - 1.2 - - 1.3 - - 1.4 - - 1.5 - - 1.6 - - tip - -before_install: - - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go get -v github.com/golang/lint/golint; fi" - -install: - - go get gopkg.in/check.v1 - -script: - - go test -race -cpu 1,4 -v - - go test -race -v -tags appengine - - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go vet ./...; fi" - - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then golint .; fi" - -sudo: false diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE deleted file mode 100644 index ba53dd18..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Gregory J. Oschwald - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md deleted file mode 100644 index d83a2760..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# MaxMind DB Reader for Go # - -[![Build Status](https://travis-ci.org/oschwald/maxminddb-golang.png?branch=master)](https://travis-ci.org/oschwald/maxminddb-golang) -[![Windows Build Status](https://ci.appveyor.com/api/projects/status/4j2f9oep8nnfrmov/branch/master?svg=true)](https://ci.appveyor.com/project/oschwald/maxminddb-golang/branch/master) -[![GoDoc](https://godoc.org/github.com/oschwald/maxminddb-golang?status.png)](https://godoc.org/github.com/oschwald/maxminddb-golang) - - -This is a Go reader for the MaxMind DB format. This can be used to read -[GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/) and -[GeoIP2](http://www.maxmind.com/en/geolocation_landing) databases. - -This is not an official MaxMind API. - -## Installation ## - -``` -go get github.com/oschwald/maxminddb-golang -``` - -## Usage ## - -[See GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) for -documentation and examples. - -## Examples ## - -See [GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) or -`example_test.go` for examples. - -## Contributing ## - -Contributions welcome! Please fork the repository and open a pull request -with your changes. - -## License ## - -This is free software, licensed under the ISC License. diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml deleted file mode 100644 index e2bb9dd2..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: "{build}" - -os: Windows Server 2012 R2 - -clone_folder: c:\gopath\src\github.com\oschwald\maxminddb-golang - -environment: - GOPATH: c:\gopath - -install: - - echo %PATH% - - echo %GOPATH% - - git submodule update --init --recursive - - go version - - go env - - go get -v -t ./... - -build_script: - - go test -v ./... diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go deleted file mode 100644 index 1782a36e..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go +++ /dev/null @@ -1,530 +0,0 @@ -package maxminddb - -import ( - "encoding/binary" - "fmt" - "math" - "math/big" - "reflect" - "sync" -) - -type decoder struct { - buffer []byte -} - -type dataType int - -const ( - _Extended dataType = iota - _Pointer - _String - _Float64 - _Bytes - _Uint16 - _Uint32 - _Map - _Int32 - _Uint64 - _Uint128 - _Slice - _Container - _Marker - _Bool - _Float32 -) - -func (d *decoder) decode(offset uint, result reflect.Value) (uint, error) { - typeNum, size, newOffset := d.decodeCtrlData(offset) - return d.decodeFromType(typeNum, size, newOffset, result) -} - -func (d *decoder) decodeCtrlData(offset uint) (dataType, uint, uint) { - newOffset := offset + 1 - ctrlByte := d.buffer[offset] - - typeNum := dataType(ctrlByte >> 5) - if typeNum == _Extended { - typeNum = dataType(d.buffer[newOffset] + 7) - newOffset++ - } - - var size uint - size, newOffset = d.sizeFromCtrlByte(ctrlByte, newOffset, typeNum) - return typeNum, size, newOffset -} - -func (d *decoder) sizeFromCtrlByte(ctrlByte byte, offset uint, typeNum dataType) (uint, uint) { - size := uint(ctrlByte & 0x1f) - if typeNum == _Extended { - return size, offset - } - - var bytesToRead uint - if size > 28 { - bytesToRead = size - 28 - } - - newOffset := offset + bytesToRead - sizeBytes := d.buffer[offset:newOffset] - - switch { - case size == 29: - size = 29 + uint(sizeBytes[0]) - case size == 30: - size = 285 + uint(uintFromBytes(0, sizeBytes)) - case size > 30: - size = uint(uintFromBytes(0, sizeBytes)) + 65821 - } - return size, newOffset -} - -func (d *decoder) decodeFromType(dtype dataType, size uint, offset uint, result reflect.Value) (uint, error) { - if result.Kind() == reflect.Ptr { - result = reflect.Indirect(result) - } - - switch dtype { - case _Bool: - return d.unmarshalBool(size, offset, result) - case _Bytes: - return d.unmarshalBytes(size, offset, result) - case _Float32: - return d.unmarshalFloat32(size, offset, result) - case _Float64: - return d.unmarshalFloat64(size, offset, result) - case _Int32: - return d.unmarshalInt32(size, offset, result) - case _Map: - return d.unmarshalMap(size, offset, result) - case _Pointer: - return d.unmarshalPointer(size, offset, result) - case _Slice: - return d.unmarshalSlice(size, offset, result) - case _String: - return d.unmarshalString(size, offset, result) - case _Uint16: - return d.unmarshalUint(size, offset, result, 16) - case _Uint32: - return d.unmarshalUint(size, offset, result, 32) - case _Uint64: - return d.unmarshalUint(size, offset, result, 64) - case _Uint128: - return d.unmarshalUint128(size, offset, result) - default: - return 0, newInvalidDatabaseError("unknown type: %d", dtype) - } -} - -func (d *decoder) unmarshalBool(size uint, offset uint, result reflect.Value) (uint, error) { - if size > 1 { - return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (bool size of %v)", size) - } - value, newOffset, err := d.decodeBool(size, offset) - if err != nil { - return 0, err - } - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Bool: - result.SetBool(value) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalBytes(size uint, offset uint, result reflect.Value) (uint, error) { - - value, newOffset, err := d.decodeBytes(size, offset) - if err != nil { - return 0, err - } - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Slice: - result.SetBytes(value) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalFloat32(size uint, offset uint, result reflect.Value) (uint, error) { - if size != 4 { - return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float32 size of %v)", size) - } - value, newOffset, err := d.decodeFloat32(size, offset) - if err != nil { - return 0, err - } - - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Float32, reflect.Float64: - result.SetFloat(float64(value)) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalFloat64(size uint, offset uint, result reflect.Value) (uint, error) { - - if size != 8 { - return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float 64 size of %v)", size) - } - value, newOffset, err := d.decodeFloat64(size, offset) - if err != nil { - return 0, err - } - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Float32, reflect.Float64: - result.SetFloat(value) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalInt32(size uint, offset uint, result reflect.Value) (uint, error) { - if size > 4 { - return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (int32 size of %v)", size) - } - value, newOffset, err := d.decodeInt(size, offset) - if err != nil { - return 0, err - } - - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - result.SetInt(int64(value)) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalMap(size uint, offset uint, result reflect.Value) (uint, error) { - switch result.Kind() { - default: - return 0, fmt.Errorf("trying to unmarshal a map into %v", result.Type()) - case reflect.Struct: - return d.decodeStruct(size, offset, result) - case reflect.Map: - return d.decodeMap(size, offset, result) - case reflect.Interface: - rv := reflect.ValueOf(make(map[string]interface{}, size)) - newOffset, err := d.decodeMap(size, offset, rv) - result.Set(rv) - return newOffset, err - } -} - -func (d *decoder) unmarshalPointer(size uint, offset uint, result reflect.Value) (uint, error) { - pointer, newOffset := d.decodePointer(size, offset) - _, err := d.decode(pointer, result) - return newOffset, err -} - -func (d *decoder) unmarshalSlice(size uint, offset uint, result reflect.Value) (uint, error) { - - switch result.Kind() { - default: - return 0, fmt.Errorf("trying to unmarshal an array into %v", result.Type()) - case reflect.Slice: - return d.decodeSlice(size, offset, result) - case reflect.Interface: - a := []interface{}{} - rv := reflect.ValueOf(&a).Elem() - newOffset, err := d.decodeSlice(size, offset, rv) - result.Set(rv) - return newOffset, err - } -} - -func (d *decoder) unmarshalString(size uint, offset uint, result reflect.Value) (uint, error) { - - value, newOffset, err := d.decodeString(size, offset) - - if err != nil { - return 0, err - } - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.String: - result.SetString(value) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalUint(size uint, offset uint, result reflect.Value, uintType uint) (uint, error) { - if size > uintType/8 { - return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint%v size of %v)", uintType, size) - } - - value, newOffset, err := d.decodeUint(size, offset) - if err != nil { - return 0, err - } - - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - result.SetUint(value) - return newOffset, nil - case reflect.Interface: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) unmarshalUint128(size uint, offset uint, result reflect.Value) (uint, error) { - if size > 16 { - return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint128 size of %v)", size) - } - value, newOffset, err := d.decodeUint128(size, offset) - if err != nil { - return 0, err - } - - // XXX - this should allow *big.Int rather than just bigInt - // Currently this is reported as invalid - switch result.Kind() { - default: - return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type()) - case reflect.Struct: - result.Set(reflect.ValueOf(*value)) - return newOffset, nil - case reflect.Interface, reflect.Ptr: - result.Set(reflect.ValueOf(value)) - return newOffset, nil - } -} - -func (d *decoder) decodeBool(size uint, offset uint) (bool, uint, error) { - return size != 0, offset, nil -} - -func (d *decoder) decodeBytes(size uint, offset uint) ([]byte, uint, error) { - newOffset := offset + size - bytes := make([]byte, size) - copy(bytes, d.buffer[offset:newOffset]) - return bytes, newOffset, nil -} - -func (d *decoder) decodeFloat64(size uint, offset uint) (float64, uint, error) { - newOffset := offset + size - bits := binary.BigEndian.Uint64(d.buffer[offset:newOffset]) - return math.Float64frombits(bits), newOffset, nil -} - -func (d *decoder) decodeFloat32(size uint, offset uint) (float32, uint, error) { - newOffset := offset + size - bits := binary.BigEndian.Uint32(d.buffer[offset:newOffset]) - return math.Float32frombits(bits), newOffset, nil -} - -func (d *decoder) decodeInt(size uint, offset uint) (int, uint, error) { - newOffset := offset + size - var val int32 - for _, b := range d.buffer[offset:newOffset] { - val = (val << 8) | int32(b) - } - return int(val), newOffset, nil -} - -func (d *decoder) decodeMap(size uint, offset uint, result reflect.Value) (uint, error) { - if result.IsNil() { - result.Set(reflect.MakeMap(result.Type())) - } - - for i := uint(0); i < size; i++ { - var key string - var err error - key, offset, err = d.decodeKeyString(offset) - - if err != nil { - return 0, err - } - - value := reflect.New(result.Type().Elem()) - offset, err = d.decode(offset, value) - if err != nil { - return 0, err - } - result.SetMapIndex(reflect.ValueOf(key), value.Elem()) - } - return offset, nil -} - -func (d *decoder) decodePointer(size uint, offset uint) (uint, uint) { - pointerSize := ((size >> 3) & 0x3) + 1 - newOffset := offset + pointerSize - pointerBytes := d.buffer[offset:newOffset] - var prefix uint64 - if pointerSize == 4 { - prefix = 0 - } else { - prefix = uint64(size & 0x7) - } - unpacked := uint(uintFromBytes(prefix, pointerBytes)) - - var pointerValueOffset uint - switch pointerSize { - case 1: - pointerValueOffset = 0 - case 2: - pointerValueOffset = 2048 - case 3: - pointerValueOffset = 526336 - case 4: - pointerValueOffset = 0 - } - - pointer := unpacked + pointerValueOffset - - return pointer, newOffset -} - -func (d *decoder) decodeSlice(size uint, offset uint, result reflect.Value) (uint, error) { - result.Set(reflect.MakeSlice(result.Type(), int(size), int(size))) - for i := 0; i < int(size); i++ { - var err error - offset, err = d.decode(offset, result.Index(i)) - if err != nil { - return 0, err - } - } - return offset, nil -} - -func (d *decoder) decodeString(size uint, offset uint) (string, uint, error) { - newOffset := offset + size - return string(d.buffer[offset:newOffset]), newOffset, nil -} - -var ( - fieldMap = map[reflect.Type]map[string]int{} - fieldMapMu sync.RWMutex -) - -func (d *decoder) decodeStruct(size uint, offset uint, result reflect.Value) (uint, error) { - resultType := result.Type() - - fieldMapMu.RLock() - fields, ok := fieldMap[resultType] - fieldMapMu.RUnlock() - if !ok { - numFields := resultType.NumField() - fields = make(map[string]int, numFields) - for i := 0; i < numFields; i++ { - fieldType := resultType.Field(i) - - fieldName := fieldType.Name - if tag := fieldType.Tag.Get("maxminddb"); tag != "" { - fieldName = tag - } - fields[fieldName] = i - } - fieldMapMu.Lock() - fieldMap[resultType] = fields - fieldMapMu.Unlock() - } - - for i := uint(0); i < size; i++ { - var ( - err error - key string - ) - key, offset, err = d.decodeStructKey(offset) - if err != nil { - return 0, err - } - i, ok := fields[key] - if !ok { - offset = d.nextValueOffset(offset, 1) - continue - } - offset, err = d.decode(offset, result.Field(i)) - if err != nil { - return 0, err - } - } - return offset, nil -} - -func (d *decoder) decodeUint(size uint, offset uint) (uint64, uint, error) { - newOffset := offset + size - val := uintFromBytes(0, d.buffer[offset:newOffset]) - - return val, newOffset, nil -} - -func (d *decoder) decodeUint128(size uint, offset uint) (*big.Int, uint, error) { - newOffset := offset + size - val := new(big.Int) - val.SetBytes(d.buffer[offset:newOffset]) - - return val, newOffset, nil -} - -func uintFromBytes(prefix uint64, uintBytes []byte) uint64 { - val := prefix - for _, b := range uintBytes { - val = (val << 8) | uint64(b) - } - return val -} - -func (d *decoder) decodeKeyString(offset uint) (string, uint, error) { - typeNum, size, newOffset := d.decodeCtrlData(offset) - if typeNum == _Pointer { - pointer, ptrOffset := d.decodePointer(size, newOffset) - key, _, err := d.decodeKeyString(pointer) - return key, ptrOffset, err - } - if typeNum != _String { - return "", 0, newInvalidDatabaseError("unexpected type when decoding string: %v", typeNum) - } - return d.decodeString(size, newOffset) -} - -// This function is used to skip ahead to the next value without decoding -// the one at the offset passed in. The size bits have different meanings for -// different data types -func (d *decoder) nextValueOffset(offset uint, numberToSkip uint) uint { - if numberToSkip == 0 { - return offset - } - typeNum, size, offset := d.decodeCtrlData(offset) - switch typeNum { - case _Pointer: - _, offset = d.decodePointer(size, offset) - case _Map: - numberToSkip += 2 * size - case _Slice: - numberToSkip += size - case _Bool: - default: - offset += size - } - return d.nextValueOffset(offset, numberToSkip-1) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go deleted file mode 100644 index 2a2acf99..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go +++ /dev/null @@ -1,17 +0,0 @@ -package maxminddb - -import "fmt" - -// InvalidDatabaseError is returned when the database contains invalid data -// and cannot be parsed. -type InvalidDatabaseError struct { - message string -} - -func newInvalidDatabaseError(format string, args ...interface{}) InvalidDatabaseError { - return InvalidDatabaseError{fmt.Sprintf(format, args...)} -} - -func (e InvalidDatabaseError) Error() string { - return e.message -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go deleted file mode 100644 index c7dc6ef0..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build appengine - -package maxminddb - -func (d *decoder) decodeStructKey(offset uint) (string, uint, error) { - return d.decodeKeyString(offset) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go deleted file mode 100644 index 577e6f80..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go +++ /dev/null @@ -1,28 +0,0 @@ -// +build !appengine - -package maxminddb - -import ( - "reflect" - "unsafe" -) - -// decodeStructKey returns a string which points into the database. Don't keep -// it around. -func (d *decoder) decodeStructKey(offset uint) (string, uint, error) { - typeNum, size, newOffset := d.decodeCtrlData(offset) - switch typeNum { - case _Pointer: - pointer, ptrOffset := d.decodePointer(size, newOffset) - s, _, err := d.decodeStructKey(pointer) - return s, ptrOffset, err - case _String: - var s string - val := (*reflect.StringHeader)(unsafe.Pointer(&s)) - val.Data = uintptr(unsafe.Pointer(&d.buffer[newOffset])) - val.Len = int(size) - return s, newOffset + size, nil - default: - return "", 0, newInvalidDatabaseError("unexpected type when decoding struct key: %v", typeNum) - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go deleted file mode 100644 index 99f98cab..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go +++ /dev/null @@ -1,17 +0,0 @@ -// +build !windows,!appengine - -package maxminddb - -import ( - "syscall" - - "golang.org/x/sys/unix" -) - -func mmap(fd int, length int) (data []byte, err error) { - return unix.Mmap(fd, 0, length, syscall.PROT_READ, syscall.MAP_SHARED) -} - -func munmap(b []byte) (err error) { - return unix.Munmap(b) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go deleted file mode 100644 index 083f096c..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go +++ /dev/null @@ -1,83 +0,0 @@ -package maxminddb - -// Windows support largely borrowed from mmap-go. -// -// Copyright 2011 Evan Shaw. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -import ( - "errors" - "os" - "reflect" - "sync" - "unsafe" - - "golang.org/x/sys/windows" -) - -type memoryMap []byte - -// Windows -var handleLock sync.Mutex -var handleMap = map[uintptr]windows.Handle{} - -func mmap(fd int, length int) (data []byte, err error) { - h, errno := windows.CreateFileMapping(windows.Handle(fd), nil, - uint32(windows.PAGE_READONLY), 0, uint32(length), nil) - if h == 0 { - return nil, os.NewSyscallError("CreateFileMapping", errno) - } - - addr, errno := windows.MapViewOfFile(h, uint32(windows.FILE_MAP_READ), 0, - 0, uintptr(length)) - if addr == 0 { - return nil, os.NewSyscallError("MapViewOfFile", errno) - } - handleLock.Lock() - handleMap[addr] = h - handleLock.Unlock() - - m := memoryMap{} - dh := m.header() - dh.Data = addr - dh.Len = length - dh.Cap = dh.Len - - return m, nil -} - -func (m *memoryMap) header() *reflect.SliceHeader { - return (*reflect.SliceHeader)(unsafe.Pointer(m)) -} - -func flush(addr, len uintptr) error { - errno := windows.FlushViewOfFile(addr, len) - return os.NewSyscallError("FlushViewOfFile", errno) -} - -func munmap(b []byte) (err error) { - m := memoryMap(b) - dh := m.header() - - addr := dh.Data - length := uintptr(dh.Len) - - flush(addr, length) - err = windows.UnmapViewOfFile(addr) - if err != nil { - return err - } - - handleLock.Lock() - defer handleLock.Unlock() - handle, ok := handleMap[addr] - if !ok { - // should be impossible; we would've errored above - return errors.New("unknown base address") - } - delete(handleMap, addr) - - e := windows.CloseHandle(windows.Handle(handle)) - return os.NewSyscallError("CloseHandle", e) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go deleted file mode 100644 index a65abde1..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go +++ /dev/null @@ -1,221 +0,0 @@ -package maxminddb - -import ( - "bytes" - "errors" - "fmt" - "net" - "reflect" -) - -const dataSectionSeparatorSize = 16 - -var metadataStartMarker = []byte("\xAB\xCD\xEFMaxMind.com") - -// Reader holds the data corresponding to the MaxMind DB file. Its only public -// field is Metadata, which contains the metadata from the MaxMind DB file. -type Reader struct { - hasMappedFile bool - buffer []byte - decoder decoder - Metadata Metadata - ipv4Start uint -} - -// Metadata holds the metadata decoded from the MaxMind DB file. In particular -// in has the format version, the build time as Unix epoch time, the database -// type and description, the IP version supported, and a slice of the natural -// languages included. -type Metadata struct { - BinaryFormatMajorVersion uint `maxminddb:"binary_format_major_version"` - BinaryFormatMinorVersion uint `maxminddb:"binary_format_minor_version"` - BuildEpoch uint `maxminddb:"build_epoch"` - DatabaseType string `maxminddb:"database_type"` - Description map[string]string `maxminddb:"description"` - IPVersion uint `maxminddb:"ip_version"` - Languages []string `maxminddb:"languages"` - NodeCount uint `maxminddb:"node_count"` - RecordSize uint `maxminddb:"record_size"` -} - -// FromBytes takes a byte slice corresponding to a MaxMind DB file and returns -// a Reader structure or an error. -func FromBytes(buffer []byte) (*Reader, error) { - metadataStart := bytes.LastIndex(buffer, metadataStartMarker) - - if metadataStart == -1 { - return nil, newInvalidDatabaseError("error opening database: invalid MaxMind DB file") - } - - metadataStart += len(metadataStartMarker) - metadataDecoder := decoder{buffer[metadataStart:]} - - var metadata Metadata - - rvMetdata := reflect.ValueOf(&metadata) - _, err := metadataDecoder.decode(0, rvMetdata) - if err != nil { - return nil, err - } - - searchTreeSize := metadata.NodeCount * metadata.RecordSize / 4 - dataSectionStart := searchTreeSize + dataSectionSeparatorSize - dataSectionEnd := uint(metadataStart - len(metadataStartMarker)) - if dataSectionStart > dataSectionEnd { - return nil, newInvalidDatabaseError("the MaxMind DB contains invalid metadata") - } - d := decoder{ - buffer[searchTreeSize+dataSectionSeparatorSize : metadataStart-len(metadataStartMarker)], - } - - reader := &Reader{ - buffer: buffer, - decoder: d, - Metadata: metadata, - ipv4Start: 0, - } - - reader.ipv4Start, err = reader.startNode() - - return reader, err -} - -func (r *Reader) startNode() (uint, error) { - if r.Metadata.IPVersion != 6 { - return 0, nil - } - - nodeCount := r.Metadata.NodeCount - - node := uint(0) - var err error - for i := 0; i < 96 && node < nodeCount; i++ { - node, err = r.readNode(node, 0) - if err != nil { - return 0, err - } - } - return node, err -} - -// Lookup takes an IP address as a net.IP structure and a pointer to the -// result value to decode into. The result value pointed to must be a data -// value that corresponds to a record in the database. This may include a -// struct representation of the data, a map capable of holding the data or an -// empty interface{} value. -// -// If result is a pointer to a struct, the struct need not include a field -// for every value that may be in the database. If a field is not present in -// the structure, the decoder will not decode that field, reducing the time -// required to decode the record. -// -// Currently the decoder expect most data types to correspond exactly (e.g., -// a uint64 database type must be decoded into a uint64 Go type). In the -// future, this may be made more flexible. -func (r *Reader) Lookup(ipAddress net.IP, result interface{}) error { - if ipAddress == nil { - return errors.New("ipAddress passed to Lookup cannot be nil") - } - - ipV4Address := ipAddress.To4() - if ipV4Address != nil { - ipAddress = ipV4Address - } - if len(ipAddress) == 16 && r.Metadata.IPVersion == 4 { - return fmt.Errorf("error looking up '%s': you attempted to look up an IPv6 address in an IPv4-only database", ipAddress.String()) - } - - pointer, err := r.findAddressInTree(ipAddress) - - if pointer == 0 { - return err - } - - return r.retrieveData(pointer, result) -} - -func (r *Reader) findAddressInTree(ipAddress net.IP) (uint, error) { - - bitCount := uint(len(ipAddress) * 8) - - var node uint - if bitCount == 32 { - node = r.ipv4Start - } - - nodeCount := r.Metadata.NodeCount - - for i := uint(0); i < bitCount && node < nodeCount; i++ { - bit := uint(1) & (uint(ipAddress[i>>3]) >> (7 - (i % 8))) - - var err error - node, err = r.readNode(node, bit) - if err != nil { - return 0, err - } - } - if node == nodeCount { - // Record is empty - return 0, nil - } else if node > nodeCount { - return node, nil - } - - return 0, newInvalidDatabaseError("invalid node in search tree") -} - -func (r *Reader) readNode(nodeNumber uint, index uint) (uint, error) { - RecordSize := r.Metadata.RecordSize - - baseOffset := nodeNumber * RecordSize / 4 - - var nodeBytes []byte - var prefix uint64 - switch RecordSize { - case 24: - offset := baseOffset + index*3 - nodeBytes = r.buffer[offset : offset+3] - case 28: - prefix = uint64(r.buffer[baseOffset+3]) - if index != 0 { - prefix &= 0x0F - } else { - prefix = (0xF0 & prefix) >> 4 - } - offset := baseOffset + index*4 - nodeBytes = r.buffer[offset : offset+3] - case 32: - offset := baseOffset + index*4 - nodeBytes = r.buffer[offset : offset+4] - default: - return 0, newInvalidDatabaseError("unknown record size: %d", RecordSize) - } - return uint(uintFromBytes(prefix, nodeBytes)), nil -} - -func (r *Reader) retrieveData(pointer uint, result interface{}) error { - rv := reflect.ValueOf(result) - if rv.Kind() != reflect.Ptr || rv.IsNil() { - return errors.New("result param must be a pointer") - } - - offset, err := r.resolveDataPointer(pointer) - if err != nil { - return err - } - - _, err = r.decoder.decode(offset, rv) - return err -} - -func (r *Reader) resolveDataPointer(pointer uint) (uint, error) { - nodeCount := r.Metadata.NodeCount - - resolved := pointer - nodeCount - dataSectionSeparatorSize - - if resolved > uint(len(r.buffer)) { - return 0, newInvalidDatabaseError("the MaxMind DB file's search tree is corrupt") - } - - return resolved, nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go deleted file mode 100644 index 631e1953..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go +++ /dev/null @@ -1,26 +0,0 @@ -// +build appengine - -package maxminddb - -import "io/ioutil" - -// Open takes a string path to a MaxMind DB file and returns a Reader -// structure or an error. The database file is opened using a memory map, -// except on Google App Engine where mmap is not supported; there the database -// is loaded into memory. Use the Close method on the Reader object to return -// the resources to the system. -func Open(file string) (*Reader, error) { - bytes, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - - return FromBytes(bytes) -} - -// Close unmaps the database file from virtual memory and returns the -// resources to the system. If called on a Reader opened using FromBytes -// or Open on Google App Engine, this method does nothing. -func (r *Reader) Close() error { - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go deleted file mode 100644 index 0ef5df3a..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go +++ /dev/null @@ -1,56 +0,0 @@ -// +build !appengine - -package maxminddb - -import "os" - -// Open takes a string path to a MaxMind DB file and returns a Reader -// structure or an error. The database file is opened using a memory map, -// except on Google App Engine where mmap is not supported; there the database -// is loaded into memory. Use the Close method on the Reader object to return -// the resources to the system. -func Open(file string) (*Reader, error) { - mapFile, err := os.Open(file) - if err != nil { - return nil, err - } - defer func() { - if rerr := mapFile.Close(); rerr != nil { - err = rerr - } - }() - - stats, err := mapFile.Stat() - if err != nil { - return nil, err - } - - fileSize := int(stats.Size()) - mmap, err := mmap(int(mapFile.Fd()), fileSize) - if err != nil { - return nil, err - } - - reader, err := FromBytes(mmap) - if err != nil { - if err2 := munmap(mmap); err2 != nil { - // failing to unmap the file is probably the more severe error - return nil, err2 - } - return nil, err - } - - reader.hasMappedFile = true - return reader, err -} - -// Close unmaps the database file from virtual memory and returns the -// resources to the system. If called on a Reader opened using FromBytes -// or Open on Google App Engine, this method does nothing. -func (r *Reader) Close() (err error) { - if r.hasMappedFile { - err = munmap(r.buffer) - r.hasMappedFile = false - } - return err -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go deleted file mode 100644 index e794d998..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go +++ /dev/null @@ -1,108 +0,0 @@ -package maxminddb - -import "net" - -// Internal structure used to keep track of nodes we still need to visit. -type netNode struct { - ip net.IP - bit uint - pointer uint -} - -// Networks represents a set of subnets that we are iterating over. -type Networks struct { - reader *Reader - nodes []netNode // Nodes we still have to visit. - lastNode netNode - err error -} - -// Networks returns an iterator that can be used to traverse all networks in -// the database. -// -// Please note that a MaxMind DB may map IPv4 networks into several locations -// in in an IPv6 database. This iterator will iterate over all of these -// locations separately. -func (r *Reader) Networks() *Networks { - s := 4 - if r.Metadata.IPVersion == 6 { - s = 16 - } - return &Networks{ - reader: r, - nodes: []netNode{ - netNode{ - ip: make(net.IP, s), - }, - }, - } -} - -// Next prepares the next network for reading with the Network method. It -// returns true if there is another network to be processed and false if there -// are no more networks or if there is an error. -func (n *Networks) Next() bool { - for len(n.nodes) > 0 { - node := n.nodes[len(n.nodes)-1] - n.nodes = n.nodes[:len(n.nodes)-1] - - for { - if node.pointer < n.reader.Metadata.NodeCount { - ipRight := make(net.IP, len(node.ip)) - copy(ipRight, node.ip) - if len(ipRight) <= int(node.bit>>3) { - n.err = newInvalidDatabaseError( - "invalid search tree at %v/%v", ipRight, node.bit) - return false - } - ipRight[node.bit>>3] |= 1 << uint(7-(node.bit%8)) - - rightPointer, err := n.reader.readNode(node.pointer, 1) - if err != nil { - n.err = err - return false - } - - node.bit++ - n.nodes = append(n.nodes, netNode{ - pointer: rightPointer, - ip: ipRight, - bit: node.bit, - }) - - node.pointer, err = n.reader.readNode(node.pointer, 0) - if err != nil { - n.err = err - return false - } - - } else if node.pointer > n.reader.Metadata.NodeCount { - n.lastNode = node - return true - } else { - break - } - } - } - - return false -} - -// Network returns the current network or an error if there is a problem -// decoding the data for the network. It takes a pointer to a result value to -// decode the network's data into. -func (n *Networks) Network(result interface{}) (*net.IPNet, error) { - if err := n.reader.retrieveData(n.lastNode.pointer, result); err != nil { - return nil, err - } - - return &net.IPNet{ - IP: n.lastNode.ip, - Mask: net.CIDRMask(int(n.lastNode.bit), len(n.lastNode.ip)*8), - }, nil -} - -// Err returns an error, if any, that was encountered during iteration. -func (n *Networks) Err() error { - return n.err -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go deleted file mode 100644 index 8c109c45..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go +++ /dev/null @@ -1,185 +0,0 @@ -package maxminddb - -import "reflect" - -type verifier struct { - reader *Reader -} - -// Verify checks that the database is valid. It validates the search tree, -// the data section, and the metadata section. This verifier is stricter than -// the specification and may return errors on databases that are readable. -func (r *Reader) Verify() error { - v := verifier{r} - if err := v.verifyMetadata(); err != nil { - return err - } - - return v.verifyDatabase() -} - -func (v *verifier) verifyMetadata() error { - metadata := v.reader.Metadata - - if metadata.BinaryFormatMajorVersion != 2 { - return testError( - "binary_format_major_version", - 2, - metadata.BinaryFormatMajorVersion, - ) - } - - if metadata.BinaryFormatMinorVersion != 0 { - return testError( - "binary_format_minor_version", - 0, - metadata.BinaryFormatMinorVersion, - ) - } - - if metadata.DatabaseType == "" { - return testError( - "database_type", - "non-empty string", - metadata.DatabaseType, - ) - } - - if len(metadata.Description) == 0 { - return testError( - "description", - "non-empty slice", - metadata.Description, - ) - } - - if metadata.IPVersion != 4 && metadata.IPVersion != 6 { - return testError( - "ip_version", - "4 or 6", - metadata.IPVersion, - ) - } - - if metadata.RecordSize != 24 && - metadata.RecordSize != 28 && - metadata.RecordSize != 32 { - return testError( - "record_size", - "24, 28, or 32", - metadata.RecordSize, - ) - } - - if metadata.NodeCount == 0 { - return testError( - "node_count", - "positive integer", - metadata.NodeCount, - ) - } - return nil -} - -func (v *verifier) verifyDatabase() error { - offsets, err := v.verifySearchTree() - if err != nil { - return err - } - - if err := v.verifyDataSectionSeparator(); err != nil { - return err - } - - return v.verifyDataSection(offsets) -} - -func (v *verifier) verifySearchTree() (map[uint]bool, error) { - offsets := make(map[uint]bool) - - it := v.reader.Networks() - for it.Next() { - offset, err := v.reader.resolveDataPointer(it.lastNode.pointer) - if err != nil { - return nil, err - } - offsets[offset] = true - } - if err := it.Err(); err != nil { - return nil, err - } - return offsets, nil -} - -func (v *verifier) verifyDataSectionSeparator() error { - separatorStart := v.reader.Metadata.NodeCount * v.reader.Metadata.RecordSize / 4 - - separator := v.reader.buffer[separatorStart : separatorStart+dataSectionSeparatorSize] - - for _, b := range separator { - if b != 0 { - return newInvalidDatabaseError("unexpected byte in data separator: %v", separator) - } - } - return nil -} - -func (v *verifier) verifyDataSection(offsets map[uint]bool) error { - pointerCount := len(offsets) - - decoder := v.reader.decoder - - var offset uint - bufferLen := uint(len(decoder.buffer)) - for offset < bufferLen { - var data interface{} - rv := reflect.ValueOf(&data) - newOffset, err := decoder.decode(offset, rv) - if err != nil { - return newInvalidDatabaseError("received decoding error (%v) at offset of %v", err, offset) - } - if newOffset <= offset { - return newInvalidDatabaseError("data section offset unexpectedly went from %v to %v", offset, newOffset) - } - - pointer := offset - - if _, ok := offsets[pointer]; ok { - delete(offsets, pointer) - } else { - return newInvalidDatabaseError("found data (%v) at %v that the search tree does not point to", data, pointer) - } - - offset = newOffset - } - - if offset != bufferLen { - return newInvalidDatabaseError( - "unexpected data at the end of the data section (last offset: %v, end: %v)", - offset, - bufferLen, - ) - } - - if len(offsets) != 0 { - return newInvalidDatabaseError( - "found %v pointers (of %v) in the search tree that we did not see in the data section", - len(offsets), - pointerCount, - ) - } - return nil -} - -func testError( - field string, - expected interface{}, - actual interface{}, -) error { - return newInvalidDatabaseError( - "%v - Expected: %v Actual: %v", - field, - expected, - actual, - ) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go deleted file mode 100644 index 3948b0e8..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package dialer - -import ( - "net" - "net/http" - "net/url" - "os" - "strings" - "time" - - "golang.org/x/net/proxy" - - "github.com/syncthing/syncthing/lib/logger" - "github.com/syncthing/syncthing/lib/osutil" -) - -var ( - l = logger.DefaultLogger.NewFacility("dialer", "Dialing connections") - proxyDialer = getDialer(proxy.Direct) - usingProxy = proxyDialer != proxy.Direct -) - -type dialFunc func(network, addr string) (net.Conn, error) - -func init() { - l.SetDebug("dialer", strings.Contains(os.Getenv("STTRACE"), "dialer") || os.Getenv("STTRACE") == "all") - if usingProxy { - http.DefaultTransport = &http.Transport{ - Dial: Dial, - Proxy: http.ProxyFromEnvironment, - TLSHandshakeTimeout: 10 * time.Second, - } - - // Defer this, so that logging gets setup. - go func() { - time.Sleep(500 * time.Millisecond) - l.Infoln("Proxy settings detected") - }() - } else { - go func() { - time.Sleep(500 * time.Millisecond) - l.Debugln("Dialer logging disabled, as no proxy was detected") - }() - } -} - -func dialWithFallback(proxyDialFunc dialFunc, fallbackDialFunc dialFunc, network, addr string) (net.Conn, error) { - conn, err := proxyDialFunc(network, addr) - if err == nil { - l.Debugf("Dialing %s address %s via proxy - success, %s -> %s", network, addr, conn.LocalAddr(), conn.RemoteAddr()) - if tcpconn, ok := conn.(*net.TCPConn); ok { - osutil.SetTCPOptions(tcpconn) - } - return dialerConn{ - conn, newDialerAddr(network, addr), - }, nil - } - l.Debugf("Dialing %s address %s via proxy - error %s", network, addr, err) - - conn, err = fallbackDialFunc(network, addr) - if err == nil { - l.Debugf("Dialing %s address %s via fallback - success, %s -> %s", network, addr, conn.LocalAddr(), conn.RemoteAddr()) - if tcpconn, ok := conn.(*net.TCPConn); ok { - osutil.SetTCPOptions(tcpconn) - } - } else { - l.Debugf("Dialing %s address %s via fallback - error %s", network, addr, err) - } - return conn, err -} - -// This is a rip off of proxy.FromEnvironment with a custom forward dialer -func getDialer(forward proxy.Dialer) proxy.Dialer { - allProxy := os.Getenv("all_proxy") - if len(allProxy) == 0 { - return forward - } - - proxyURL, err := url.Parse(allProxy) - if err != nil { - return forward - } - prxy, err := proxy.FromURL(proxyURL, forward) - if err != nil { - return forward - } - - noProxy := os.Getenv("no_proxy") - if len(noProxy) == 0 { - return prxy - } - - perHost := proxy.NewPerHost(prxy, forward) - perHost.AddFromString(noProxy) - return perHost -} - -type timeoutDirectDialer struct { - timeout time.Duration -} - -func (d *timeoutDirectDialer) Dial(network, addr string) (net.Conn, error) { - return net.DialTimeout(network, addr, d.timeout) -} - -type dialerConn struct { - net.Conn - addr net.Addr -} - -func (c dialerConn) RemoteAddr() net.Addr { - return c.addr -} - -func newDialerAddr(network, addr string) net.Addr { - netaddr, err := net.ResolveIPAddr(network, addr) - if err == nil { - return netaddr - } - return fallbackAddr{network, addr} -} - -type fallbackAddr struct { - network string - addr string -} - -func (a fallbackAddr) Network() string { - return a.network -} - -func (a fallbackAddr) String() string { - return a.addr -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go deleted file mode 100644 index 4bf17c5b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package dialer - -import ( - "net" - "time" -) - -// Dial tries dialing via proxy if a proxy is configured, and falls back to -// a direct connection if no proxy is defined, or connecting via proxy fails. -func Dial(network, addr string) (net.Conn, error) { - if usingProxy { - return dialWithFallback(proxyDialer.Dial, net.Dial, network, addr) - } - return net.Dial(network, addr) -} - -// DialTimeout tries dialing via proxy with a timeout if a proxy is configured, -// and falls back to a direct connection if no proxy is defined, or connecting -// via proxy fails. The timeout can potentially be applied twice, once trying -// to connect via the proxy connection, and second time trying to connect -// directly. -func DialTimeout(network, addr string, timeout time.Duration) (net.Conn, error) { - if usingProxy { - // Because the proxy package is poorly structured, we have to - // construct a struct that matches proxy.Dialer but has a timeout - // and reconstrcut the proxy dialer using that, in order to be able to - // set a timeout. - dd := &timeoutDirectDialer{ - timeout: timeout, - } - // Check if the dialer we are getting is not timeoutDirectDialer we just - // created. It could happen that usingProxy is true, but getDialer - // returns timeoutDirectDialer due to env vars changing. - if timeoutProxyDialer := getDialer(dd); timeoutProxyDialer != dd { - directDialFunc := func(inetwork, iaddr string) (net.Conn, error) { - return net.DialTimeout(inetwork, iaddr, timeout) - } - return dialWithFallback(timeoutProxyDialer.Dial, directDialFunc, network, addr) - } - } - return net.DialTimeout(network, addr, timeout) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE deleted file mode 100644 index fa5b4e20..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2013 Jakob Borg - -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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go deleted file mode 100644 index 5b59a598..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go +++ /dev/null @@ -1,385 +0,0 @@ -// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code -// is governed by an MIT-style license that can be found in the LICENSE file. - -// Package logger implements a standardized logger with callback functionality -package logger - -import ( - "fmt" - "io/ioutil" - "log" - "os" - "strings" - "sync" - "time" -) - -// This package uses stdlib sync as it may be used to debug syncthing/lib/sync -// and that would cause an implosion of the universe. - -type LogLevel int - -const ( - LevelDebug LogLevel = iota - LevelVerbose - LevelInfo - LevelOK - LevelWarn - LevelFatal - NumLevels -) - -// A MessageHandler is called with the log level and message text. -type MessageHandler func(l LogLevel, msg string) - -type Logger interface { - AddHandler(level LogLevel, h MessageHandler) - SetFlags(flag int) - SetPrefix(prefix string) - Debugln(vals ...interface{}) - Debugf(format string, vals ...interface{}) - Verboseln(vals ...interface{}) - Verbosef(format string, vals ...interface{}) - Infoln(vals ...interface{}) - Infof(format string, vals ...interface{}) - Okln(vals ...interface{}) - Okf(format string, vals ...interface{}) - Warnln(vals ...interface{}) - Warnf(format string, vals ...interface{}) - Fatalln(vals ...interface{}) - Fatalf(format string, vals ...interface{}) - ShouldDebug(facility string) bool - SetDebug(facility string, enabled bool) - Facilities() map[string]string - FacilityDebugging() []string - NewFacility(facility, description string) Logger -} - -type logger struct { - logger *log.Logger - handlers [NumLevels][]MessageHandler - facilities map[string]string // facility name => description - debug map[string]bool // facility name => debugging enabled - mut sync.Mutex -} - -// DefaultLogger logs to standard output with a time prefix. -var DefaultLogger = New() - -func New() Logger { - if os.Getenv("LOGGER_DISCARD") != "" { - // Hack to completely disable logging, for example when running benchmarks. - return &logger{ - logger: log.New(ioutil.Discard, "", 0), - } - } - - return &logger{ - logger: log.New(os.Stdout, "", log.Ltime), - } -} - -// AddHandler registers a new MessageHandler to receive messages with the -// specified log level or above. -func (l *logger) AddHandler(level LogLevel, h MessageHandler) { - l.mut.Lock() - defer l.mut.Unlock() - l.handlers[level] = append(l.handlers[level], h) -} - -// See log.SetFlags -func (l *logger) SetFlags(flag int) { - l.logger.SetFlags(flag) -} - -// See log.SetPrefix -func (l *logger) SetPrefix(prefix string) { - l.logger.SetPrefix(prefix) -} - -func (l *logger) callHandlers(level LogLevel, s string) { - for ll := LevelDebug; ll <= level; ll++ { - for _, h := range l.handlers[ll] { - h(level, strings.TrimSpace(s)) - } - } -} - -// Debugln logs a line with a DEBUG prefix. -func (l *logger) Debugln(vals ...interface{}) { - l.debugln(3, vals) -} -func (l *logger) debugln(level int, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintln(vals...) - l.logger.Output(level, "DEBUG: "+s) - l.callHandlers(LevelDebug, s) -} - -// Debugf logs a formatted line with a DEBUG prefix. -func (l *logger) Debugf(format string, vals ...interface{}) { - l.debugf(3, format, vals...) -} -func (l *logger) debugf(level int, format string, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintf(format, vals...) - l.logger.Output(level, "DEBUG: "+s) - l.callHandlers(LevelDebug, s) -} - -// Infoln logs a line with a VERBOSE prefix. -func (l *logger) Verboseln(vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintln(vals...) - l.logger.Output(2, "VERBOSE: "+s) - l.callHandlers(LevelVerbose, s) -} - -// Infof logs a formatted line with a VERBOSE prefix. -func (l *logger) Verbosef(format string, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintf(format, vals...) - l.logger.Output(2, "VERBOSE: "+s) - l.callHandlers(LevelVerbose, s) -} - -// Infoln logs a line with an INFO prefix. -func (l *logger) Infoln(vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintln(vals...) - l.logger.Output(2, "INFO: "+s) - l.callHandlers(LevelInfo, s) -} - -// Infof logs a formatted line with an INFO prefix. -func (l *logger) Infof(format string, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintf(format, vals...) - l.logger.Output(2, "INFO: "+s) - l.callHandlers(LevelInfo, s) -} - -// Okln logs a line with an OK prefix. -func (l *logger) Okln(vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintln(vals...) - l.logger.Output(2, "OK: "+s) - l.callHandlers(LevelOK, s) -} - -// Okf logs a formatted line with an OK prefix. -func (l *logger) Okf(format string, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintf(format, vals...) - l.logger.Output(2, "OK: "+s) - l.callHandlers(LevelOK, s) -} - -// Warnln logs a formatted line with a WARNING prefix. -func (l *logger) Warnln(vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintln(vals...) - l.logger.Output(2, "WARNING: "+s) - l.callHandlers(LevelWarn, s) -} - -// Warnf logs a formatted line with a WARNING prefix. -func (l *logger) Warnf(format string, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintf(format, vals...) - l.logger.Output(2, "WARNING: "+s) - l.callHandlers(LevelWarn, s) -} - -// Fatalln logs a line with a FATAL prefix and exits the process with exit -// code 1. -func (l *logger) Fatalln(vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintln(vals...) - l.logger.Output(2, "FATAL: "+s) - l.callHandlers(LevelFatal, s) - os.Exit(1) -} - -// Fatalf logs a formatted line with a FATAL prefix and exits the process with -// exit code 1. -func (l *logger) Fatalf(format string, vals ...interface{}) { - l.mut.Lock() - defer l.mut.Unlock() - s := fmt.Sprintf(format, vals...) - l.logger.Output(2, "FATAL: "+s) - l.callHandlers(LevelFatal, s) - os.Exit(1) -} - -// ShouldDebug returns true if the given facility has debugging enabled. -func (l *logger) ShouldDebug(facility string) bool { - l.mut.Lock() - res := l.debug[facility] - l.mut.Unlock() - return res -} - -// SetDebug enabled or disables debugging for the given facility name. -func (l *logger) SetDebug(facility string, enabled bool) { - l.mut.Lock() - l.debug[facility] = enabled - l.mut.Unlock() -} - -// FacilityDebugging returns the set of facilities that have debugging -// enabled. -func (l *logger) FacilityDebugging() []string { - var enabled []string - l.mut.Lock() - for facility, isEnabled := range l.debug { - if isEnabled { - enabled = append(enabled, facility) - } - } - l.mut.Unlock() - return enabled -} - -// Facilities returns the currently known set of facilities and their -// descriptions. -func (l *logger) Facilities() map[string]string { - l.mut.Lock() - res := make(map[string]string, len(l.facilities)) - for facility, descr := range l.facilities { - res[facility] = descr - } - l.mut.Unlock() - return res -} - -// NewFacility returns a new logger bound to the named facility. -func (l *logger) NewFacility(facility, description string) Logger { - l.mut.Lock() - if l.facilities == nil { - l.facilities = make(map[string]string) - } - if description != "" { - l.facilities[facility] = description - } - - if l.debug == nil { - l.debug = make(map[string]bool) - } - l.debug[facility] = false - l.mut.Unlock() - - return &facilityLogger{ - logger: l, - facility: facility, - } -} - -// A facilityLogger is a regular logger but bound to a facility name. The -// Debugln and Debugf methods are no-ops unless debugging has been enabled for -// this facility on the parent logger. -type facilityLogger struct { - *logger - facility string -} - -// Debugln logs a line with a DEBUG prefix. -func (l *facilityLogger) Debugln(vals ...interface{}) { - if !l.ShouldDebug(l.facility) { - return - } - l.logger.debugln(3, vals...) -} - -// Debugf logs a formatted line with a DEBUG prefix. -func (l *facilityLogger) Debugf(format string, vals ...interface{}) { - if !l.ShouldDebug(l.facility) { - return - } - l.logger.debugf(3, format, vals...) -} - -// A Recorder keeps a size limited record of log events. -type Recorder struct { - lines []Line - initial int - mut sync.Mutex -} - -// A Line represents a single log entry. -type Line struct { - When time.Time `json:"when"` - Message string `json:"message"` -} - -func NewRecorder(l Logger, level LogLevel, size, initial int) *Recorder { - r := &Recorder{ - lines: make([]Line, 0, size), - initial: initial, - } - l.AddHandler(level, r.append) - return r -} - -func (r *Recorder) Since(t time.Time) []Line { - r.mut.Lock() - defer r.mut.Unlock() - - res := r.lines - for i := 0; i < len(res) && res[i].When.Before(t); i++ { - // nothing, just incrementing i - } - if len(res) == 0 { - return nil - } - - // We must copy the result as r.lines can be mutated as soon as the lock - // is released. - cp := make([]Line, len(res)) - copy(cp, res) - return cp -} - -func (r *Recorder) Clear() { - r.mut.Lock() - r.lines = r.lines[:0] - r.mut.Unlock() -} - -func (r *Recorder) append(l LogLevel, msg string) { - line := Line{ - When: time.Now(), - Message: msg, - } - - r.mut.Lock() - defer r.mut.Unlock() - - if len(r.lines) == cap(r.lines) { - if r.initial > 0 { - // Shift all lines one step to the left, keeping the "initial" first intact. - copy(r.lines[r.initial+1:], r.lines[r.initial+2:]) - } else { - copy(r.lines, r.lines[1:]) - } - // Add the new one at the end - r.lines[len(r.lines)-1] = line - return - } - - r.lines = append(r.lines, line) - if len(r.lines) == r.initial { - r.lines = append(r.lines, Line{time.Now(), "..."}) - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go deleted file mode 100644 index 736d2f86..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package osutil - -import ( - "errors" - "io/ioutil" - "os" - "path/filepath" - "runtime" -) - -var ( - ErrClosed = errors.New("write to closed writer") - TempPrefix = ".syncthing.tmp." -) - -// An AtomicWriter is an *os.File that writes to a temporary file in the same -// directory as the final path. On successfull Close the file is renamed to -// it's final path. Any error on Write or during Close is accumulated and -// returned on Close, so a lazy user can ignore errors until Close. -type AtomicWriter struct { - path string - next *os.File - err error -} - -// CreateAtomic is like os.Create with a FileMode, except a temporary file -// name is used instead of the given name. -func CreateAtomic(path string, mode os.FileMode) (*AtomicWriter, error) { - fd, err := ioutil.TempFile(filepath.Dir(path), TempPrefix) - if err != nil { - return nil, err - } - - // chmod fails on Android so don't even try - if runtime.GOOS != "android" { - if err := os.Chmod(fd.Name(), mode); err != nil { - fd.Close() - os.Remove(fd.Name()) - return nil, err - } - } - - w := &AtomicWriter{ - path: path, - next: fd, - } - - return w, nil -} - -// Write is like io.Writer, but is a no-op on an already failed AtomicWriter. -func (w *AtomicWriter) Write(bs []byte) (int, error) { - if w.err != nil { - return 0, w.err - } - n, err := w.next.Write(bs) - if err != nil { - w.err = err - w.next.Close() - } - return n, err -} - -// Close closes the temporary file and renames it to the final path. It is -// invalid to call Write() or Close() after Close(). -func (w *AtomicWriter) Close() error { - if w.err != nil { - return w.err - } - - // Try to not leave temp file around, but ignore error. - defer os.Remove(w.next.Name()) - - if err := w.next.Close(); err != nil { - w.err = err - return err - } - - // Remove the destination file, on Windows only. If it fails, and not due - // to the file not existing, we won't be able to complete the rename - // either. Return this error because it may be more informative. On non- - // Windows we want the atomic rename behavior so we don't attempt remove. - if runtime.GOOS == "windows" { - if err := os.Remove(w.path); err != nil && !os.IsNotExist(err) { - return err - } - } - - if err := os.Rename(w.next.Name(), w.path); err != nil { - w.err = err - return err - } - - // Set w.err to return appropriately for any future operations. - w.err = ErrClosed - - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go deleted file mode 100644 index 10fa17f1..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package osutil - -import "golang.org/x/text/unicode/norm" - -func NormalizedFilename(s string) string { - return norm.NFC.String(s) -} - -func NativeFilename(s string) string { - return norm.NFD.String(s) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go deleted file mode 100644 index 2fbbaa26..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows,!darwin - -package osutil - -import "golang.org/x/text/unicode/norm" - -func NormalizedFilename(s string) string { - return norm.NFC.String(s) -} - -func NativeFilename(s string) string { - return s -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go deleted file mode 100644 index 6bb9e333..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package osutil - -import ( - "path/filepath" - - "golang.org/x/text/unicode/norm" -) - -func NormalizedFilename(s string) string { - return norm.NFC.String(filepath.ToSlash(s)) -} - -func NativeFilename(s string) string { - return filepath.FromSlash(s) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go deleted file mode 100644 index 7270a269..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows - -package osutil - -import ( - "path/filepath" -) - -func Glob(pattern string) (matches []string, err error) { - return filepath.Glob(pattern) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go deleted file mode 100644 index afb017c7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build windows - -package osutil - -import ( - "os" - "path/filepath" - "sort" - "strings" -) - -// Glob implements filepath.Glob, but works with Windows long path prefixes. -// Deals with https://github.com/golang/go/issues/10577 -func Glob(pattern string) (matches []string, err error) { - if !hasMeta(pattern) { - if _, err = os.Lstat(pattern); err != nil { - return nil, nil - } - return []string{pattern}, nil - } - - dir, file := filepath.Split(pattern) - switch dir { - case "": - dir = "." - case string(filepath.Separator): - // nothing - default: - dir = dir[0 : len(dir)-1] // chop off trailing separator - } - - if !hasMeta(dir) { - return glob(dir, file, nil) - } - - var m []string - m, err = Glob(dir) - if err != nil { - return - } - for _, d := range m { - matches, err = glob(d, file, matches) - if err != nil { - return - } - } - return -} - -func hasMeta(path string) bool { - // Strip off Windows long path prefix if it exists. - if strings.HasPrefix(path, "\\\\?\\") { - path = path[4:] - } - // TODO(niemeyer): Should other magic characters be added here? - return strings.IndexAny(path, "*?[") >= 0 -} - -func glob(dir, pattern string, matches []string) (m []string, e error) { - m = matches - fi, err := os.Stat(dir) - if err != nil { - return - } - if !fi.IsDir() { - return - } - d, err := os.Open(dir) - if err != nil { - return - } - defer d.Close() - - names, _ := d.Readdirnames(-1) - sort.Strings(names) - - for _, n := range names { - matched, err := filepath.Match(pattern, n) - if err != nil { - return m, err - } - if matched { - m = append(m, filepath.Join(dir, n)) - } - } - return -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go deleted file mode 100644 index b0d7ee47..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows - -package osutil - -func HideFile(path string) error { - return nil -} - -func ShowFile(path string) error { - return nil -} - -func HideConsole() {} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go deleted file mode 100644 index 45ce48b8..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build windows - -package osutil - -import "syscall" - -func HideFile(path string) error { - p, err := syscall.UTF16PtrFromString(path) - if err != nil { - return err - } - - attrs, err := syscall.GetFileAttributes(p) - if err != nil { - return err - } - - attrs |= syscall.FILE_ATTRIBUTE_HIDDEN - return syscall.SetFileAttributes(p, attrs) -} - -func ShowFile(path string) error { - p, err := syscall.UTF16PtrFromString(path) - if err != nil { - return err - } - - attrs, err := syscall.GetFileAttributes(p) - if err != nil { - return err - } - - attrs &^= syscall.FILE_ATTRIBUTE_HIDDEN - return syscall.SetFileAttributes(p, attrs) -} - -func HideConsole() { - getConsoleWindow := syscall.NewLazyDLL("kernel32.dll").NewProc("GetConsoleWindow") - showWindow := syscall.NewLazyDLL("user32.dll").NewProc("ShowWindow") - if getConsoleWindow.Find() == nil && showWindow.Find() == nil { - hwnd, _, _ := getConsoleWindow.Call() - if hwnd != 0 { - showWindow.Call(hwnd, 0) - } - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go deleted file mode 100644 index 0f9881ea..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows - -package osutil - -import ( - "net" -) - -func GetLans() ([]*net.IPNet, error) { - addrs, err := net.InterfaceAddrs() - if err != nil { - return nil, err - } - - nets := make([]*net.IPNet, 0, len(addrs)) - - for _, addr := range addrs { - net, ok := addr.(*net.IPNet) - if ok { - nets = append(nets, net) - } - } - return nets, nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go deleted file mode 100644 index e02c46b9..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build windows - -package osutil - -import ( - "net" - "os" - "strings" - "syscall" - "unsafe" -) - -// Modified version of: -// http://stackoverflow.com/questions/23529663/how-to-get-all-addresses-and-masks-from-local-interfaces-in-go -// v4 only! - -func getAdapterList() (*syscall.IpAdapterInfo, error) { - b := make([]byte, 10240) - l := uint32(len(b)) - a := (*syscall.IpAdapterInfo)(unsafe.Pointer(&b[0])) - // TODO(mikio): GetAdaptersInfo returns IP_ADAPTER_INFO that - // contains IPv4 address list only. We should use another API - // for fetching IPv6 stuff from the kernel. - err := syscall.GetAdaptersInfo(a, &l) - if err == syscall.ERROR_BUFFER_OVERFLOW { - b = make([]byte, l) - a = (*syscall.IpAdapterInfo)(unsafe.Pointer(&b[0])) - err = syscall.GetAdaptersInfo(a, &l) - } - if err != nil { - return nil, os.NewSyscallError("GetAdaptersInfo", err) - } - return a, nil -} - -func GetLans() ([]*net.IPNet, error) { - ifaces, err := net.Interfaces() - if err != nil { - return nil, err - } - - nets := make([]*net.IPNet, 0, len(ifaces)) - - aList, err := getAdapterList() - if err != nil { - return nil, err - } - - for _, ifi := range ifaces { - for ai := aList; ai != nil; ai = ai.Next { - index := ai.Index - - if ifi.Index == int(index) { - ipl := &ai.IpAddressList - for ; ipl != nil; ipl = ipl.Next { - ipStr := strings.Trim(string(ipl.IpAddress.String[:]), "\x00") - maskStr := strings.Trim(string(ipl.IpMask.String[:]), "\x00") - ip := net.ParseIP(ipStr) - maskip := net.ParseIP(maskStr) - if ip.IsUnspecified() || maskip.IsUnspecified() { - continue - } - nets = append(nets, &net.IPNet{ - IP: ip, - Mask: net.IPv4Mask( - maskip[net.IPv6len-net.IPv4len], - maskip[net.IPv6len-net.IPv4len+1], - maskip[net.IPv6len-net.IPv4len+2], - maskip[net.IPv6len-net.IPv4len+3], - ), - }) - } - } - } - } - return nets, err -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go deleted file mode 100644 index 11a20b1c..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build linux android - -package osutil - -import ( - "os" - "syscall" - "time" -) - -// Lstat is like os.Lstat, except lobotomized for Android. See -// https://forum.syncthing.net/t/2395 -func Lstat(name string) (fi os.FileInfo, err error) { - for i := 0; i < 10; i++ { // We have to draw the line somewhere - fi, err = os.Lstat(name) - if err, ok := err.(*os.PathError); ok && err.Err == syscall.EINTR { - time.Sleep(time.Duration(i+1) * time.Millisecond) - continue - } - return - } - return -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go deleted file mode 100644 index 770e18f5..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !linux,!android - -package osutil - -import "os" - -func Lstat(name string) (fi os.FileInfo, err error) { - return os.Lstat(name) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go deleted file mode 100644 index cba93d05..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows - -package osutil - -import ( - "os" -) - -func MkdirAll(path string, perm os.FileMode) error { - return os.MkdirAll(path, perm) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go deleted file mode 100644 index 76263277..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go +++ /dev/null @@ -1,65 +0,0 @@ -// 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. - -// Modified by Zillode to fix https://github.com/syncthing/syncthing/issues/1822 -// Sync with https://github.com/golang/go/blob/master/src/os/path.go -// See https://github.com/golang/go/issues/10900 - -package osutil - -import ( - "os" - "path/filepath" - "syscall" -) - -// MkdirAll creates a directory named path, along with any necessary parents, -// and returns nil, or else returns an error. -// The permission bits perm are used for all directories that MkdirAll creates. -// If path is already a directory, MkdirAll does nothing and returns nil. -func MkdirAll(path string, perm os.FileMode) error { - // Fast path: if we can tell whether path is a directory or file, stop with success or error. - dir, err := os.Stat(path) - if err == nil { - if dir.IsDir() { - return nil - } - return &os.PathError{"mkdir", path, syscall.ENOTDIR} - } - - // Slow path: make sure parent exists and then call Mkdir for path. - i := len(path) - for i > 0 && os.IsPathSeparator(path[i-1]) { // Skip trailing path separator. - i-- - } - - j := i - for j > 0 && !os.IsPathSeparator(path[j-1]) { // Scan backward over element. - j-- - } - - if j > 1 { - // Create parent - parent := path[0 : j-1] - if parent != filepath.VolumeName(parent) { - err = MkdirAll(parent, perm) - if err != nil { - return err - } - } - } - - // Parent now exists; invoke Mkdir and use its result. - err = os.Mkdir(path, perm) - if err != nil { - // Handle arguments like "foo/." by - // double-checking that directory doesn't exist. - dir, err1 := os.Lstat(path) - if err1 == nil && dir.IsDir() { - return nil - } - return err - } - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go deleted file mode 100644 index f4e15885..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// Package osutil implements utilities for native OS support. -package osutil - -import ( - "errors" - "fmt" - "io" - "net" - "os" - "path/filepath" - "runtime" - "strings" - "time" - - "github.com/calmh/du" - "github.com/syncthing/syncthing/lib/sync" -) - -var ErrNoHome = errors.New("No home directory found - set $HOME (or the platform equivalent).") - -// Try to keep this entire operation atomic-like. We shouldn't be doing this -// often enough that there is any contention on this lock. -var renameLock = sync.NewMutex() - -// TryRename renames a file, leaving source file intact in case of failure. -// Tries hard to succeed on various systems by temporarily tweaking directory -// permissions and removing the destination file when necessary. -func TryRename(from, to string) error { - renameLock.Lock() - defer renameLock.Unlock() - - return withPreparedTarget(from, to, func() error { - return os.Rename(from, to) - }) -} - -// Rename moves a temporary file to it's final place. -// Will make sure to delete the from file if the operation fails, so use only -// for situations like committing a temp file to it's final location. -// Tries hard to succeed on various systems by temporarily tweaking directory -// permissions and removing the destination file when necessary. -func Rename(from, to string) error { - // Don't leave a dangling temp file in case of rename error - if !(runtime.GOOS == "windows" && strings.EqualFold(from, to)) { - defer os.Remove(from) - } - return TryRename(from, to) -} - -// Copy copies the file content from source to destination. -// Tries hard to succeed on various systems by temporarily tweaking directory -// permissions and removing the destination file when necessary. -func Copy(from, to string) (err error) { - return withPreparedTarget(from, to, func() error { - return copyFileContents(from, to) - }) -} - -// InWritableDir calls fn(path), while making sure that the directory -// containing `path` is writable for the duration of the call. -func InWritableDir(fn func(string) error, path string) error { - dir := filepath.Dir(path) - info, err := os.Stat(dir) - if err != nil { - return err - } - if !info.IsDir() { - return errors.New("Not a directory: " + path) - } - if info.Mode()&0200 == 0 { - // A non-writeable directory (for this user; we assume that's the - // relevant part). Temporarily change the mode so we can delete the - // file or directory inside it. - err = os.Chmod(dir, 0755) - if err == nil { - defer func() { - err = os.Chmod(dir, info.Mode()) - if err != nil { - // We managed to change the permission bits like a - // millisecond ago, so it'd be bizarre if we couldn't - // change it back. - panic(err) - } - }() - } - } - - return fn(path) -} - -// Remove removes the given path. On Windows, removes the read-only attribute -// from the target prior to deletion. -func Remove(path string) error { - if runtime.GOOS == "windows" { - info, err := os.Stat(path) - if err != nil { - return err - } - if info.Mode()&0200 == 0 { - os.Chmod(path, 0700) - } - } - return os.Remove(path) -} - -func ExpandTilde(path string) (string, error) { - if path == "~" { - return getHomeDir() - } - - path = filepath.FromSlash(path) - if !strings.HasPrefix(path, fmt.Sprintf("~%c", os.PathSeparator)) { - return path, nil - } - - home, err := getHomeDir() - if err != nil { - return "", err - } - return filepath.Join(home, path[2:]), nil -} - -func getHomeDir() (string, error) { - var home string - - switch runtime.GOOS { - case "windows": - home = filepath.Join(os.Getenv("HomeDrive"), os.Getenv("HomePath")) - if home == "" { - home = os.Getenv("UserProfile") - } - default: - home = os.Getenv("HOME") - } - - if home == "" { - return "", ErrNoHome - } - - return home, nil -} - -// Tries hard to succeed on various systems by temporarily tweaking directory -// permissions and removing the destination file when necessary. -func withPreparedTarget(from, to string, f func() error) error { - // Make sure the destination directory is writeable - toDir := filepath.Dir(to) - if info, err := os.Stat(toDir); err == nil && info.IsDir() && info.Mode()&0200 == 0 { - os.Chmod(toDir, 0755) - defer os.Chmod(toDir, info.Mode()) - } - - // On Windows, make sure the destination file is writeable (or we can't delete it) - if runtime.GOOS == "windows" { - os.Chmod(to, 0666) - if !strings.EqualFold(from, to) { - err := os.Remove(to) - if err != nil && !os.IsNotExist(err) { - return err - } - } - } - return f() -} - -// copyFileContents copies the contents of the file named src to the file named -// by dst. The file will be created if it does not already exist. If the -// destination file exists, all it's contents will be replaced by the contents -// of the source file. -func copyFileContents(src, dst string) (err error) { - in, err := os.Open(src) - if err != nil { - return - } - defer in.Close() - out, err := os.Create(dst) - if err != nil { - return - } - defer func() { - cerr := out.Close() - if err == nil { - err = cerr - } - }() - if _, err = io.Copy(out, in); err != nil { - return - } - err = out.Sync() - return -} - -var execExts map[string]bool - -func init() { - // PATHEXT contains a list of executable file extensions, on Windows - pathext := filepath.SplitList(os.Getenv("PATHEXT")) - // We want the extensions in execExts to be lower case - execExts = make(map[string]bool, len(pathext)) - for _, ext := range pathext { - execExts[strings.ToLower(ext)] = true - } -} - -// IsWindowsExecutable returns true if the given path has an extension that is -// in the list of executable extensions. -func IsWindowsExecutable(path string) bool { - return execExts[strings.ToLower(filepath.Ext(path))] -} - -func DiskFreeBytes(path string) (free int64, err error) { - u, err := du.Get(path) - return u.FreeBytes, err -} - -func DiskFreePercentage(path string) (freePct float64, err error) { - u, err := du.Get(path) - return (float64(u.FreeBytes) / float64(u.TotalBytes)) * 100, err -} - -// SetTCPOptions sets syncthings default TCP options on a TCP connection -func SetTCPOptions(conn *net.TCPConn) error { - var err error - if err = conn.SetLinger(0); err != nil { - return err - } - if err = conn.SetNoDelay(false); err != nil { - return err - } - if err = conn.SetKeepAlivePeriod(60 * time.Second); err != nil { - return err - } - if err = conn.SetKeepAlive(true); err != nil { - return err - } - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go deleted file mode 100644 index 743da5f7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package osutil - -import ( - "net" - "net/url" - "time" -) - -// TCPPing returns the duration required to establish a TCP connection -// to the given host. ICMP packets require root priviledges, hence why we use -// tcp. -func TCPPing(address string) (time.Duration, error) { - dialer := net.Dialer{ - Deadline: time.Now().Add(time.Second), - } - start := time.Now() - conn, err := dialer.Dial("tcp", address) - if conn != nil { - conn.Close() - } - return time.Since(start), err -} - -// GetLatencyForURL parses the given URL, tries opening a TCP connection to it -// and returns the time it took to establish the connection. -func GetLatencyForURL(addr string) (time.Duration, error) { - uri, err := url.Parse(addr) - if err != nil { - return 0, err - } - - return TCPPing(uri.Host) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go deleted file mode 100644 index af47b140..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package osutil - -import ( - "bytes" - "io" -) - -type ReplacingWriter struct { - Writer io.Writer - From byte - To []byte -} - -func (w ReplacingWriter) Write(bs []byte) (int, error) { - var n, written int - var err error - - newlineIdx := bytes.IndexByte(bs, w.From) - for newlineIdx >= 0 { - n, err = w.Writer.Write(bs[:newlineIdx]) - written += n - if err != nil { - break - } - if len(w.To) > 0 { - n, err := w.Writer.Write(w.To) - if n == len(w.To) { - written++ - } - if err != nil { - break - } - } - bs = bs[newlineIdx+1:] - newlineIdx = bytes.IndexByte(bs, w.From) - } - - n, err = w.Writer.Write(bs) - written += n - - return written, err -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go deleted file mode 100644 index 85147a8c..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build !windows - -package osutil - -import "syscall" - -// MaximizeOpenFileLimit tries to set the resoure limit RLIMIT_NOFILE (number -// of open file descriptors) to the max (hard limit), if the current (soft -// limit) is below the max. Returns the new (though possibly unchanged) limit, -// or an error if it was could not be changed. -func MaximizeOpenFileLimit() (int, error) { - // Get the current limit on number of open files. - var lim syscall.Rlimit - if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &lim); err != nil { - return 0, err - } - - // If we're already at max, there's no need to try to raise the limit. - if lim.Cur >= lim.Max { - return int(lim.Cur), nil - } - - // Try to increase the limit to the max. - oldLimit := lim.Cur - lim.Cur = lim.Max - if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &lim); err != nil { - return int(oldLimit), err - } - - // If the set succeeded, perform a new get to see what happened. We might - // have gotten a value lower than the one in lim.Max, if lim.Max was - // something that indiciated "unlimited" (i.e. intmax). - if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &lim); err != nil { - // We don't really know the correct value here since Getrlimit - // mysteriously failed after working once... Shouldn't ever happen, I - // think. - return 0, err - } - - return int(lim.Cur), nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go deleted file mode 100644 index df1c78c5..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -// +build windows - -package osutil - -import ( - "errors" -) - -func MaximizeOpenFileLimit() (int, error) { - return 0, errors.New("not relevant on Windows") -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS deleted file mode 100644 index d84404ee..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -# This is the official list of Protocol Authors for copyright purposes. - -Audrius Butkevicius -Jakob Borg diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md deleted file mode 100644 index 67e6a9c7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md +++ /dev/null @@ -1,76 +0,0 @@ -## Reporting Bugs - -Please file bugs in the [Github Issue -Tracker](https://github.com/syncthing/protocol/issues). - -## Contributing Code - -Every contribution is welcome. Following the points below will make this -a smoother process. - -Individuals making significant and valuable contributions are given -commit-access to the project. If you make a significant contribution and -are not considered for commit-access, please contact any of the -Syncthing core team members. - -All nontrivial contributions should go through the pull request -mechanism for internal review. Determining what is "nontrivial" is left -at the discretion of the contributor. - -### Authorship - -All code authors are listed in the AUTHORS file. Commits must be made -with the same name and email as listed in the AUTHORS file. To -accomplish this, ensure that your git configuration is set correctly -prior to making your first commit; - - $ git config --global user.name "Jane Doe" - $ git config --global user.email janedoe@example.com - -You must be reachable on the given email address. If you do not wish to -use your real name for whatever reason, using a nickname or pseudonym is -perfectly acceptable. - -## Coding Style - -- Follow the conventions laid out in [Effective Go](https://golang.org/doc/effective_go.html) - as much as makes sense. - -- All text files use Unix line endings. - -- Each commit should be `go fmt` clean. - -- The commit message subject should be a single short sentence - describing the change, starting with a capital letter. - -- Commits that resolve an existing issue must include the issue number - as `(fixes #123)` at the end of the commit message subject. - -- Imports are grouped per `goimports` standard; that is, standard - library first, then third party libraries after a blank line. - -- A contribution solving a single issue or introducing a single new - feature should probably be a single commit based on the current - `master` branch. You may be asked to "rebase" or "squash" your pull - request to make sure this is the case, especially if there have been - amendments during review. - -## Licensing - -All contributions are made under the same MIT license as the rest of the -project, except documentation, user interface text and translation -strings which are licensed under the Creative Commons Attribution 4.0 -International License. You retain the copyright to code you have -written. - -When accepting your first contribution, the maintainer of the project -will ensure that you are added to the AUTHORS file. You are welcome to -add yourself as a separate commit in your first pull request. - -## Tests - -Yes please! - -## License - -MIT diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE deleted file mode 100644 index 6f6960a7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2014-2015 The Protocol Authors - -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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md deleted file mode 100644 index bcba44b4..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md +++ /dev/null @@ -1,13 +0,0 @@ -The BEPv1 Protocol -================== - -[![Latest Build](http://img.shields.io/jenkins/s/http/build.syncthing.net/protocol.svg?style=flat-square)](http://build.syncthing.net/job/protocol/lastBuild/) -[![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat-square)](http://godoc.org/github.com/syncthing/protocol) -[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](http://opensource.org/licenses/MIT) - -This is the protocol implementation used by Syncthing. - -License -======= - -MIT diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go deleted file mode 100644 index 9e17213b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2015 The Protocol Authors. - -package protocol - -import "fmt" - -type Compression int - -const ( - CompressMetadata Compression = iota // zero value is the default, default should be "metadata" - CompressNever - CompressAlways - - compressionThreshold = 128 // don't bother compressing messages smaller than this many bytes -) - -var compressionMarshal = map[Compression]string{ - CompressNever: "never", - CompressMetadata: "metadata", - CompressAlways: "always", -} - -var compressionUnmarshal = map[string]Compression{ - // Legacy - "false": CompressNever, - "true": CompressMetadata, - - // Current - "never": CompressNever, - "metadata": CompressMetadata, - "always": CompressAlways, -} - -func (c Compression) String() string { - s, ok := compressionMarshal[c] - if !ok { - return fmt.Sprintf("unknown:%d", c) - } - return s -} - -func (c Compression) GoString() string { - return fmt.Sprintf("%q", c.String()) -} - -func (c Compression) MarshalText() ([]byte, error) { - return []byte(compressionMarshal[c]), nil -} - -func (c *Compression) UnmarshalText(bs []byte) error { - *c = compressionUnmarshal[string(bs)] - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go deleted file mode 100644 index d441ed31..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import ( - "io" - "sync/atomic" - "time" -) - -type countingReader struct { - io.Reader - tot int64 // bytes - last int64 // unix nanos -} - -var ( - totalIncoming int64 - totalOutgoing int64 -) - -func (c *countingReader) Read(bs []byte) (int, error) { - n, err := c.Reader.Read(bs) - atomic.AddInt64(&c.tot, int64(n)) - atomic.AddInt64(&totalIncoming, int64(n)) - atomic.StoreInt64(&c.last, time.Now().UnixNano()) - return n, err -} - -func (c *countingReader) Tot() int64 { - return atomic.LoadInt64(&c.tot) -} - -func (c *countingReader) Last() time.Time { - return time.Unix(0, atomic.LoadInt64(&c.last)) -} - -type countingWriter struct { - io.Writer - tot int64 // bytes - last int64 // unix nanos -} - -func (c *countingWriter) Write(bs []byte) (int, error) { - n, err := c.Writer.Write(bs) - atomic.AddInt64(&c.tot, int64(n)) - atomic.AddInt64(&totalOutgoing, int64(n)) - atomic.StoreInt64(&c.last, time.Now().UnixNano()) - return n, err -} - -func (c *countingWriter) Tot() int64 { - return atomic.LoadInt64(&c.tot) -} - -func (c *countingWriter) Last() time.Time { - return time.Unix(0, atomic.LoadInt64(&c.last)) -} - -func TotalInOut() (int64, int64) { - return atomic.LoadInt64(&totalIncoming), atomic.LoadInt64(&totalOutgoing) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go deleted file mode 100644 index 717445f7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import ( - "os" - "strings" - - "github.com/syncthing/syncthing/lib/logger" -) - -var ( - l = logger.DefaultLogger.NewFacility("protocol", "The BEP protocol") -) - -func init() { - l.SetDebug("protocol", strings.Contains(os.Getenv("STTRACE"), "protocol") || os.Getenv("STTRACE") == "all") -} - -func shouldDebug() bool { - return l.ShouldDebug("protocol") -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go deleted file mode 100644 index 2e0334a6..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import ( - "bytes" - "crypto/sha256" - "encoding/base32" - "encoding/binary" - "errors" - "fmt" - "regexp" - "strings" - - "github.com/calmh/luhn" -) - -type DeviceID [32]byte - -var LocalDeviceID = DeviceID{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} - -// NewDeviceID generates a new device ID from the raw bytes of a certificate -func NewDeviceID(rawCert []byte) DeviceID { - var n DeviceID - hf := sha256.New() - hf.Write(rawCert) - hf.Sum(n[:0]) - return n -} - -func DeviceIDFromString(s string) (DeviceID, error) { - var n DeviceID - err := n.UnmarshalText([]byte(s)) - return n, err -} - -func DeviceIDFromBytes(bs []byte) DeviceID { - var n DeviceID - if len(bs) != len(n) { - panic("incorrect length of byte slice representing device ID") - } - copy(n[:], bs) - return n -} - -// String returns the canonical string representation of the device ID -func (n DeviceID) String() string { - id := base32.StdEncoding.EncodeToString(n[:]) - id = strings.Trim(id, "=") - id, err := luhnify(id) - if err != nil { - // Should never happen - panic(err) - } - id = chunkify(id) - return id -} - -func (n DeviceID) GoString() string { - return n.String() -} - -func (n DeviceID) Compare(other DeviceID) int { - return bytes.Compare(n[:], other[:]) -} - -func (n DeviceID) Equals(other DeviceID) bool { - return bytes.Compare(n[:], other[:]) == 0 -} - -// Short returns an integer representing bits 0-63 of the device ID. -func (n DeviceID) Short() uint64 { - return binary.BigEndian.Uint64(n[:]) -} - -func (n *DeviceID) MarshalText() ([]byte, error) { - return []byte(n.String()), nil -} - -func (n *DeviceID) UnmarshalText(bs []byte) error { - id := string(bs) - id = strings.Trim(id, "=") - id = strings.ToUpper(id) - id = untypeoify(id) - id = unchunkify(id) - - var err error - switch len(id) { - case 56: - // New style, with check digits - id, err = unluhnify(id) - if err != nil { - return err - } - fallthrough - case 52: - // Old style, no check digits - dec, err := base32.StdEncoding.DecodeString(id + "====") - if err != nil { - return err - } - copy(n[:], dec) - return nil - default: - return errors.New("device ID invalid: incorrect length") - } -} - -func luhnify(s string) (string, error) { - if len(s) != 52 { - panic("unsupported string length") - } - - res := make([]string, 0, 4) - for i := 0; i < 4; i++ { - p := s[i*13 : (i+1)*13] - l, err := luhn.Base32.Generate(p) - if err != nil { - return "", err - } - res = append(res, fmt.Sprintf("%s%c", p, l)) - } - return res[0] + res[1] + res[2] + res[3], nil -} - -func unluhnify(s string) (string, error) { - if len(s) != 56 { - return "", fmt.Errorf("unsupported string length %d", len(s)) - } - - res := make([]string, 0, 4) - for i := 0; i < 4; i++ { - p := s[i*14 : (i+1)*14-1] - l, err := luhn.Base32.Generate(p) - if err != nil { - return "", err - } - if g := fmt.Sprintf("%s%c", p, l); g != s[i*14:(i+1)*14] { - return "", errors.New("check digit incorrect") - } - res = append(res, p) - } - return res[0] + res[1] + res[2] + res[3], nil -} - -func chunkify(s string) string { - s = regexp.MustCompile("(.{7})").ReplaceAllString(s, "$1-") - s = strings.Trim(s, "-") - return s -} - -func unchunkify(s string) string { - s = strings.Replace(s, "-", "", -1) - s = strings.Replace(s, " ", "", -1) - return s -} - -func untypeoify(s string) string { - s = strings.Replace(s, "0", "O", -1) - s = strings.Replace(s, "1", "I", -1) - s = strings.Replace(s, "8", "B", -1) - return s -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go deleted file mode 100644 index 2c6ea8ef..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -// Package protocol implements the Block Exchange Protocol. -package protocol diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go deleted file mode 100644 index 62df8acc..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import ( - "errors" -) - -const ( - ecNoError int32 = iota - ecGeneric - ecNoSuchFile - ecInvalid -) - -var ( - ErrNoError error - ErrGeneric = errors.New("generic error") - ErrNoSuchFile = errors.New("no such file") - ErrInvalid = errors.New("file is invalid") -) - -var lookupError = map[int32]error{ - ecNoError: ErrNoError, - ecGeneric: ErrGeneric, - ecNoSuchFile: ErrNoSuchFile, - ecInvalid: ErrInvalid, -} - -var lookupCode = map[error]int32{ - ErrNoError: ecNoError, - ErrGeneric: ecGeneric, - ErrNoSuchFile: ecNoSuchFile, - ErrInvalid: ecInvalid, -} - -func codeToError(errcode int32) error { - err, ok := lookupError[errcode] - if !ok { - return ErrGeneric - } - return err -} - -func errorToCode(err error) int32 { - code, ok := lookupCode[err] - if !ok { - return ecGeneric - } - return code -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go deleted file mode 100644 index 9b82abe7..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2015 The Protocol Authors. - -// +build gofuzz - -package protocol - -import ( - "bytes" - "encoding/binary" - "encoding/hex" - "fmt" - "reflect" - "sync" -) - -func Fuzz(data []byte) int { - // Regenerate the length, or we'll most commonly exit quickly due to an - // unexpected eof which is unintestering. - if len(data) > 8 { - binary.BigEndian.PutUint32(data[4:], uint32(len(data))-8) - } - - // Setup a rawConnection we'll use to parse the message. - c := rawConnection{ - cr: &countingReader{Reader: bytes.NewReader(data)}, - closed: make(chan struct{}), - pool: sync.Pool{ - New: func() interface{} { - return make([]byte, BlockSize) - }, - }, - } - - // Attempt to parse the message. - hdr, msg, err := c.readMessage() - if err != nil { - return 0 - } - - // If parsing worked, attempt to encode it again. - newBs, err := msg.AppendXDR(nil) - if err != nil { - panic("not encodable") - } - - // Create an appriate header for the re-encoding. - newMsg := make([]byte, 8) - binary.BigEndian.PutUint32(newMsg, encodeHeader(hdr)) - binary.BigEndian.PutUint32(newMsg[4:], uint32(len(newBs))) - newMsg = append(newMsg, newBs...) - - // Use the rawConnection to parse the re-encoding. - c.cr = &countingReader{Reader: bytes.NewReader(newMsg)} - hdr2, msg2, err := c.readMessage() - if err != nil { - fmt.Println("Initial:\n" + hex.Dump(data)) - fmt.Println("New:\n" + hex.Dump(newMsg)) - panic("not parseable after re-encode: " + err.Error()) - } - - // Make sure the data is the same as it was before. - if hdr != hdr2 { - panic("headers differ") - } - if !reflect.DeepEqual(msg, msg2) { - panic("contents differ") - } - - return 1 -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go deleted file mode 100644 index 846ee48c..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import "github.com/calmh/xdr" - -type header struct { - version int - msgID int - msgType int - compression bool -} - -func (h header) encodeXDR(xw *xdr.Writer) (int, error) { - u := encodeHeader(h) - return xw.WriteUint32(u) -} - -func (h *header) decodeXDR(xr *xdr.Reader) error { - u := xr.ReadUint32() - *h = decodeHeader(u) - return xr.Error() -} - -func encodeHeader(h header) uint32 { - var isComp uint32 - if h.compression { - isComp = 1 << 0 // the zeroth bit is the compression bit - } - return uint32(h.version&0xf)<<28 + - uint32(h.msgID&0xfff)<<16 + - uint32(h.msgType&0xff)<<8 + - isComp -} - -func decodeHeader(u uint32) header { - return header{ - version: int(u>>28) & 0xf, - msgID: int(u>>16) & 0xfff, - msgType: int(u>>8) & 0xff, - compression: u&1 == 1, - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go deleted file mode 100644 index f6ef33f6..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -//go:generate -command genxdr go run ../../Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go -//go:generate genxdr -o message_xdr.go message.go - -package protocol - -import ( - "bytes" - "crypto/sha256" - "fmt" -) - -var sha256OfEmptyBlock = sha256.Sum256(make([]byte, BlockSize)) - -type IndexMessage struct { - Folder string // max:256 - Files []FileInfo // max:1000000 - Flags uint32 - Options []Option // max:64 -} - -type FileInfo struct { - Name string // max:8192 - Flags uint32 - Modified int64 - Version Vector - LocalVersion int64 - CachedSize int64 // noencode (cache only) - Blocks []BlockInfo // max:1000000 -} - -func (f FileInfo) String() string { - return fmt.Sprintf("File{Name:%q, Flags:0%o, Modified:%d, Version:%v, Size:%d, Blocks:%v}", - f.Name, f.Flags, f.Modified, f.Version, f.Size(), f.Blocks) -} - -func (f FileInfo) Size() (bytes int64) { - if f.IsDeleted() || f.IsDirectory() { - return 128 - } - if f.CachedSize > 0 { - return f.CachedSize - } - for _, b := range f.Blocks { - bytes += int64(b.Size) - } - f.CachedSize = bytes - return -} - -func (f FileInfo) IsDeleted() bool { - return f.Flags&FlagDeleted != 0 -} - -func (f FileInfo) IsInvalid() bool { - return f.Flags&FlagInvalid != 0 -} - -func (f FileInfo) IsDirectory() bool { - return f.Flags&FlagDirectory != 0 -} - -func (f FileInfo) IsSymlink() bool { - return f.Flags&FlagSymlink != 0 -} - -func (f FileInfo) HasPermissionBits() bool { - return f.Flags&FlagNoPermBits == 0 -} - -// WinsConflict returns true if "f" is the one to choose when it is in -// conflict with "other". -func (f FileInfo) WinsConflict(other FileInfo) bool { - // If a modification is in conflict with a delete, we pick the - // modification. - if !f.IsDeleted() && other.IsDeleted() { - return true - } - if f.IsDeleted() && !other.IsDeleted() { - return false - } - - // The one with the newer modification time wins. - if f.Modified > other.Modified { - return true - } - if f.Modified < other.Modified { - return false - } - - // The modification times were equal. Use the device ID in the version - // vector as tie breaker. - return f.Version.Compare(other.Version) == ConcurrentGreater -} - -type BlockInfo struct { - Offset int64 // noencode (cache only) - Size int32 - Hash []byte // max:64 -} - -func (b BlockInfo) String() string { - return fmt.Sprintf("Block{%d/%d/%x}", b.Offset, b.Size, b.Hash) -} - -// IsEmpty returns true if the block is a full block of zeroes. -func (b BlockInfo) IsEmpty() bool { - return b.Size == BlockSize && bytes.Equal(b.Hash, sha256OfEmptyBlock[:]) -} - -type RequestMessage struct { - Folder string // max:256 - Name string // max:8192 - Offset int64 - Size int32 - Hash []byte // max:64 - Flags uint32 - Options []Option // max:64 -} - -type ResponseMessage struct { - Data []byte - Code int32 -} - -type ClusterConfigMessage struct { - DeviceName string // max:64 - ClientName string // max:64 - ClientVersion string // max:64 - Folders []Folder // max:1000000 - Options []Option // max:64 -} - -func (o *ClusterConfigMessage) GetOption(key string) string { - for _, option := range o.Options { - if option.Key == key { - return option.Value - } - } - return "" -} - -type Folder struct { - ID string // max:256 - Devices []Device // max:1000000 - Flags uint32 - Options []Option // max:64 -} - -type Device struct { - ID []byte // max:32 - Name string // max:64 - Addresses []string // max:64,2083 - Compression uint32 - CertName string // max:64 - MaxLocalVersion int64 - Flags uint32 - Options []Option // max:64 -} - -type Option struct { - Key string // max:64 - Value string // max:1024 -} - -type CloseMessage struct { - Reason string // max:1024 - Code int32 -} - -type EmptyMessage struct{} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go deleted file mode 100644 index e2ea7ca6..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go +++ /dev/null @@ -1,1193 +0,0 @@ -// ************************************************************ -// This file is automatically generated by genxdr. Do not edit. -// ************************************************************ - -package protocol - -import ( - "bytes" - "io" - - "github.com/calmh/xdr" -) - -/* - -IndexMessage Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Folder | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Folder (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Files | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more FileInfo Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Flags | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Options | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Option Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct IndexMessage { - string Folder<256>; - FileInfo Files<1000000>; - unsigned int Flags; - Option Options<64>; -} - -*/ - -func (o IndexMessage) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o IndexMessage) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o IndexMessage) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o IndexMessage) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o IndexMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.Folder); l > 256 { - return xw.Tot(), xdr.ElementSizeExceeded("Folder", l, 256) - } - xw.WriteString(o.Folder) - if l := len(o.Files); l > 1000000 { - return xw.Tot(), xdr.ElementSizeExceeded("Files", l, 1000000) - } - xw.WriteUint32(uint32(len(o.Files))) - for i := range o.Files { - _, err := o.Files[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - xw.WriteUint32(o.Flags) - if l := len(o.Options); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64) - } - xw.WriteUint32(uint32(len(o.Options))) - for i := range o.Options { - _, err := o.Options[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - return xw.Tot(), xw.Error() -} - -func (o *IndexMessage) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *IndexMessage) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *IndexMessage) DecodeXDRFrom(xr *xdr.Reader) error { - o.Folder = xr.ReadStringMax(256) - _FilesSize := int(xr.ReadUint32()) - if _FilesSize < 0 { - return xdr.ElementSizeExceeded("Files", _FilesSize, 1000000) - } - if _FilesSize > 1000000 { - return xdr.ElementSizeExceeded("Files", _FilesSize, 1000000) - } - o.Files = make([]FileInfo, _FilesSize) - for i := range o.Files { - (&o.Files[i]).DecodeXDRFrom(xr) - } - o.Flags = xr.ReadUint32() - _OptionsSize := int(xr.ReadUint32()) - if _OptionsSize < 0 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - if _OptionsSize > 64 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - o.Options = make([]Option, _OptionsSize) - for i := range o.Options { - (&o.Options[i]).DecodeXDRFrom(xr) - } - return xr.Error() -} - -/* - -FileInfo Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Name | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Name (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Flags | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| | -+ Modified (64 bits) + -| | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Vector Structure \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| | -+ Local Version (64 bits) + -| | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Blocks | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more BlockInfo Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct FileInfo { - string Name<8192>; - unsigned int Flags; - hyper Modified; - Vector Version; - hyper LocalVersion; - BlockInfo Blocks<1000000>; -} - -*/ - -func (o FileInfo) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o FileInfo) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o FileInfo) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o FileInfo) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o FileInfo) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.Name); l > 8192 { - return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 8192) - } - xw.WriteString(o.Name) - xw.WriteUint32(o.Flags) - xw.WriteUint64(uint64(o.Modified)) - _, err := o.Version.EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - xw.WriteUint64(uint64(o.LocalVersion)) - if l := len(o.Blocks); l > 1000000 { - return xw.Tot(), xdr.ElementSizeExceeded("Blocks", l, 1000000) - } - xw.WriteUint32(uint32(len(o.Blocks))) - for i := range o.Blocks { - _, err := o.Blocks[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - return xw.Tot(), xw.Error() -} - -func (o *FileInfo) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *FileInfo) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *FileInfo) DecodeXDRFrom(xr *xdr.Reader) error { - o.Name = xr.ReadStringMax(8192) - o.Flags = xr.ReadUint32() - o.Modified = int64(xr.ReadUint64()) - (&o.Version).DecodeXDRFrom(xr) - o.LocalVersion = int64(xr.ReadUint64()) - _BlocksSize := int(xr.ReadUint32()) - if _BlocksSize < 0 { - return xdr.ElementSizeExceeded("Blocks", _BlocksSize, 1000000) - } - if _BlocksSize > 1000000 { - return xdr.ElementSizeExceeded("Blocks", _BlocksSize, 1000000) - } - o.Blocks = make([]BlockInfo, _BlocksSize) - for i := range o.Blocks { - (&o.Blocks[i]).DecodeXDRFrom(xr) - } - return xr.Error() -} - -/* - -BlockInfo Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Size | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Hash | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Hash (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct BlockInfo { - int Size; - opaque Hash<64>; -} - -*/ - -func (o BlockInfo) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o BlockInfo) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o BlockInfo) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o BlockInfo) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o BlockInfo) EncodeXDRInto(xw *xdr.Writer) (int, error) { - xw.WriteUint32(uint32(o.Size)) - if l := len(o.Hash); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Hash", l, 64) - } - xw.WriteBytes(o.Hash) - return xw.Tot(), xw.Error() -} - -func (o *BlockInfo) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *BlockInfo) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *BlockInfo) DecodeXDRFrom(xr *xdr.Reader) error { - o.Size = int32(xr.ReadUint32()) - o.Hash = xr.ReadBytesMax(64) - return xr.Error() -} - -/* - -RequestMessage Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Folder | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Folder (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Name | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Name (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| | -+ Offset (64 bits) + -| | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Size | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Hash | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Hash (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Flags | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Options | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Option Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct RequestMessage { - string Folder<256>; - string Name<8192>; - hyper Offset; - int Size; - opaque Hash<64>; - unsigned int Flags; - Option Options<64>; -} - -*/ - -func (o RequestMessage) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o RequestMessage) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o RequestMessage) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o RequestMessage) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o RequestMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.Folder); l > 256 { - return xw.Tot(), xdr.ElementSizeExceeded("Folder", l, 256) - } - xw.WriteString(o.Folder) - if l := len(o.Name); l > 8192 { - return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 8192) - } - xw.WriteString(o.Name) - xw.WriteUint64(uint64(o.Offset)) - xw.WriteUint32(uint32(o.Size)) - if l := len(o.Hash); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Hash", l, 64) - } - xw.WriteBytes(o.Hash) - xw.WriteUint32(o.Flags) - if l := len(o.Options); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64) - } - xw.WriteUint32(uint32(len(o.Options))) - for i := range o.Options { - _, err := o.Options[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - return xw.Tot(), xw.Error() -} - -func (o *RequestMessage) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *RequestMessage) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *RequestMessage) DecodeXDRFrom(xr *xdr.Reader) error { - o.Folder = xr.ReadStringMax(256) - o.Name = xr.ReadStringMax(8192) - o.Offset = int64(xr.ReadUint64()) - o.Size = int32(xr.ReadUint32()) - o.Hash = xr.ReadBytesMax(64) - o.Flags = xr.ReadUint32() - _OptionsSize := int(xr.ReadUint32()) - if _OptionsSize < 0 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - if _OptionsSize > 64 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - o.Options = make([]Option, _OptionsSize) - for i := range o.Options { - (&o.Options[i]).DecodeXDRFrom(xr) - } - return xr.Error() -} - -/* - -ResponseMessage Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Data | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Data (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Code | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct ResponseMessage { - opaque Data<>; - int Code; -} - -*/ - -func (o ResponseMessage) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o ResponseMessage) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o ResponseMessage) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o ResponseMessage) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o ResponseMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { - xw.WriteBytes(o.Data) - xw.WriteUint32(uint32(o.Code)) - return xw.Tot(), xw.Error() -} - -func (o *ResponseMessage) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *ResponseMessage) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *ResponseMessage) DecodeXDRFrom(xr *xdr.Reader) error { - o.Data = xr.ReadBytes() - o.Code = int32(xr.ReadUint32()) - return xr.Error() -} - -/* - -ClusterConfigMessage Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Device Name | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Device Name (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Client Name | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Client Name (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Client Version | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Client Version (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Folders | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Folder Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Options | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Option Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct ClusterConfigMessage { - string DeviceName<64>; - string ClientName<64>; - string ClientVersion<64>; - Folder Folders<1000000>; - Option Options<64>; -} - -*/ - -func (o ClusterConfigMessage) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o ClusterConfigMessage) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o ClusterConfigMessage) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o ClusterConfigMessage) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o ClusterConfigMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.DeviceName); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("DeviceName", l, 64) - } - xw.WriteString(o.DeviceName) - if l := len(o.ClientName); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("ClientName", l, 64) - } - xw.WriteString(o.ClientName) - if l := len(o.ClientVersion); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("ClientVersion", l, 64) - } - xw.WriteString(o.ClientVersion) - if l := len(o.Folders); l > 1000000 { - return xw.Tot(), xdr.ElementSizeExceeded("Folders", l, 1000000) - } - xw.WriteUint32(uint32(len(o.Folders))) - for i := range o.Folders { - _, err := o.Folders[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - if l := len(o.Options); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64) - } - xw.WriteUint32(uint32(len(o.Options))) - for i := range o.Options { - _, err := o.Options[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - return xw.Tot(), xw.Error() -} - -func (o *ClusterConfigMessage) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *ClusterConfigMessage) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *ClusterConfigMessage) DecodeXDRFrom(xr *xdr.Reader) error { - o.DeviceName = xr.ReadStringMax(64) - o.ClientName = xr.ReadStringMax(64) - o.ClientVersion = xr.ReadStringMax(64) - _FoldersSize := int(xr.ReadUint32()) - if _FoldersSize < 0 { - return xdr.ElementSizeExceeded("Folders", _FoldersSize, 1000000) - } - if _FoldersSize > 1000000 { - return xdr.ElementSizeExceeded("Folders", _FoldersSize, 1000000) - } - o.Folders = make([]Folder, _FoldersSize) - for i := range o.Folders { - (&o.Folders[i]).DecodeXDRFrom(xr) - } - _OptionsSize := int(xr.ReadUint32()) - if _OptionsSize < 0 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - if _OptionsSize > 64 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - o.Options = make([]Option, _OptionsSize) - for i := range o.Options { - (&o.Options[i]).DecodeXDRFrom(xr) - } - return xr.Error() -} - -/* - -Folder Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of ID | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ ID (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Devices | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Device Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Flags | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Options | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Option Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct Folder { - string ID<256>; - Device Devices<1000000>; - unsigned int Flags; - Option Options<64>; -} - -*/ - -func (o Folder) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o Folder) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o Folder) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o Folder) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o Folder) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.ID); l > 256 { - return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 256) - } - xw.WriteString(o.ID) - if l := len(o.Devices); l > 1000000 { - return xw.Tot(), xdr.ElementSizeExceeded("Devices", l, 1000000) - } - xw.WriteUint32(uint32(len(o.Devices))) - for i := range o.Devices { - _, err := o.Devices[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - xw.WriteUint32(o.Flags) - if l := len(o.Options); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64) - } - xw.WriteUint32(uint32(len(o.Options))) - for i := range o.Options { - _, err := o.Options[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - return xw.Tot(), xw.Error() -} - -func (o *Folder) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *Folder) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *Folder) DecodeXDRFrom(xr *xdr.Reader) error { - o.ID = xr.ReadStringMax(256) - _DevicesSize := int(xr.ReadUint32()) - if _DevicesSize < 0 { - return xdr.ElementSizeExceeded("Devices", _DevicesSize, 1000000) - } - if _DevicesSize > 1000000 { - return xdr.ElementSizeExceeded("Devices", _DevicesSize, 1000000) - } - o.Devices = make([]Device, _DevicesSize) - for i := range o.Devices { - (&o.Devices[i]).DecodeXDRFrom(xr) - } - o.Flags = xr.ReadUint32() - _OptionsSize := int(xr.ReadUint32()) - if _OptionsSize < 0 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - if _OptionsSize > 64 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - o.Options = make([]Option, _OptionsSize) - for i := range o.Options { - (&o.Options[i]).DecodeXDRFrom(xr) - } - return xr.Error() -} - -/* - -Device Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of ID | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ ID (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Name | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Name (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Addresses | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Addresses | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Addresses (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Compression | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Cert Name | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Cert Name (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| | -+ Max Local Version (64 bits) + -| | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Flags | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Number of Options | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Zero or more Option Structures \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct Device { - opaque ID<32>; - string Name<64>; - string Addresses<64>; - unsigned int Compression; - string CertName<64>; - hyper MaxLocalVersion; - unsigned int Flags; - Option Options<64>; -} - -*/ - -func (o Device) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o Device) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o Device) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o Device) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o Device) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.ID); l > 32 { - return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 32) - } - xw.WriteBytes(o.ID) - if l := len(o.Name); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 64) - } - xw.WriteString(o.Name) - if l := len(o.Addresses); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Addresses", l, 64) - } - xw.WriteUint32(uint32(len(o.Addresses))) - for i := range o.Addresses { - xw.WriteString(o.Addresses[i]) - } - xw.WriteUint32(o.Compression) - if l := len(o.CertName); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("CertName", l, 64) - } - xw.WriteString(o.CertName) - xw.WriteUint64(uint64(o.MaxLocalVersion)) - xw.WriteUint32(o.Flags) - if l := len(o.Options); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64) - } - xw.WriteUint32(uint32(len(o.Options))) - for i := range o.Options { - _, err := o.Options[i].EncodeXDRInto(xw) - if err != nil { - return xw.Tot(), err - } - } - return xw.Tot(), xw.Error() -} - -func (o *Device) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *Device) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *Device) DecodeXDRFrom(xr *xdr.Reader) error { - o.ID = xr.ReadBytesMax(32) - o.Name = xr.ReadStringMax(64) - _AddressesSize := int(xr.ReadUint32()) - if _AddressesSize < 0 { - return xdr.ElementSizeExceeded("Addresses", _AddressesSize, 64) - } - if _AddressesSize > 64 { - return xdr.ElementSizeExceeded("Addresses", _AddressesSize, 64) - } - o.Addresses = make([]string, _AddressesSize) - for i := range o.Addresses { - o.Addresses[i] = xr.ReadStringMax(2083) - } - o.Compression = xr.ReadUint32() - o.CertName = xr.ReadStringMax(64) - o.MaxLocalVersion = int64(xr.ReadUint64()) - o.Flags = xr.ReadUint32() - _OptionsSize := int(xr.ReadUint32()) - if _OptionsSize < 0 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - if _OptionsSize > 64 { - return xdr.ElementSizeExceeded("Options", _OptionsSize, 64) - } - o.Options = make([]Option, _OptionsSize) - for i := range o.Options { - (&o.Options[i]).DecodeXDRFrom(xr) - } - return xr.Error() -} - -/* - -Option Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Key | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Key (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Value | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Value (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct Option { - string Key<64>; - string Value<1024>; -} - -*/ - -func (o Option) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o Option) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o Option) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o Option) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o Option) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.Key); l > 64 { - return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 64) - } - xw.WriteString(o.Key) - if l := len(o.Value); l > 1024 { - return xw.Tot(), xdr.ElementSizeExceeded("Value", l, 1024) - } - xw.WriteString(o.Value) - return xw.Tot(), xw.Error() -} - -func (o *Option) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *Option) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *Option) DecodeXDRFrom(xr *xdr.Reader) error { - o.Key = xr.ReadStringMax(64) - o.Value = xr.ReadStringMax(1024) - return xr.Error() -} - -/* - -CloseMessage Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Reason | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Reason (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Code | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct CloseMessage { - string Reason<1024>; - int Code; -} - -*/ - -func (o CloseMessage) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o CloseMessage) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o CloseMessage) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o CloseMessage) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o CloseMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.Reason); l > 1024 { - return xw.Tot(), xdr.ElementSizeExceeded("Reason", l, 1024) - } - xw.WriteString(o.Reason) - xw.WriteUint32(uint32(o.Code)) - return xw.Tot(), xw.Error() -} - -func (o *CloseMessage) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *CloseMessage) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *CloseMessage) DecodeXDRFrom(xr *xdr.Reader) error { - o.Reason = xr.ReadStringMax(1024) - o.Code = int32(xr.ReadUint32()) - return xr.Error() -} - -/* - -EmptyMessage Structure: -(contains no fields) - - -struct EmptyMessage { -} - -*/ - -func (o EmptyMessage) EncodeXDR(w io.Writer) (int, error) { - return 0, nil -} - -func (o EmptyMessage) MarshalXDR() ([]byte, error) { - return nil, nil -} - -func (o EmptyMessage) MustMarshalXDR() []byte { - return nil -} - -func (o EmptyMessage) AppendXDR(bs []byte) ([]byte, error) { - return bs, nil -} - -func (o EmptyMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) { - return xw.Tot(), xw.Error() -} - -func (o *EmptyMessage) DecodeXDR(r io.Reader) error { - return nil -} - -func (o *EmptyMessage) UnmarshalXDR(bs []byte) error { - return nil -} - -func (o *EmptyMessage) DecodeXDRFrom(xr *xdr.Reader) error { - return xr.Error() -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go deleted file mode 100644 index eb755a6e..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -// +build darwin - -package protocol - -// Darwin uses NFD normalization - -import "golang.org/x/text/unicode/norm" - -type nativeModel struct { - next Model -} - -func (m nativeModel) Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) { - for i := range files { - files[i].Name = norm.NFD.String(files[i].Name) - } - m.next.Index(deviceID, folder, files, flags, options) -} - -func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) { - for i := range files { - files[i].Name = norm.NFD.String(files[i].Name) - } - m.next.IndexUpdate(deviceID, folder, files, flags, options) -} - -func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error { - name = norm.NFD.String(name) - return m.next.Request(deviceID, folder, name, offset, hash, flags, options, buf) -} - -func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) { - m.next.ClusterConfig(deviceID, config) -} - -func (m nativeModel) Close(deviceID DeviceID, err error) { - m.next.Close(deviceID, err) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go deleted file mode 100644 index 0611865e..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -// +build !windows,!darwin - -package protocol - -// Normal Unixes uses NFC and slashes, which is the wire format. - -type nativeModel struct { - next Model -} - -func (m nativeModel) Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) { - m.next.Index(deviceID, folder, files, flags, options) -} - -func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) { - m.next.IndexUpdate(deviceID, folder, files, flags, options) -} - -func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error { - return m.next.Request(deviceID, folder, name, offset, hash, flags, options, buf) -} - -func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) { - m.next.ClusterConfig(deviceID, config) -} - -func (m nativeModel) Close(deviceID DeviceID, err error) { - m.next.Close(deviceID, err) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go deleted file mode 100644 index 36a1d274..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -// +build windows - -package protocol - -// Windows uses backslashes as file separator and disallows a bunch of -// characters in the filename - -import ( - "path/filepath" - "strings" -) - -var disallowedCharacters = string([]rune{ - '<', '>', ':', '"', '|', '?', '*', - 0, 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, -}) - -type nativeModel struct { - next Model -} - -func (m nativeModel) Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) { - fixupFiles(folder, files) - m.next.Index(deviceID, folder, files, flags, options) -} - -func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) { - fixupFiles(folder, files) - m.next.IndexUpdate(deviceID, folder, files, flags, options) -} - -func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error { - name = filepath.FromSlash(name) - return m.next.Request(deviceID, folder, name, offset, hash, flags, options, buf) -} - -func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) { - m.next.ClusterConfig(deviceID, config) -} - -func (m nativeModel) Close(deviceID DeviceID, err error) { - m.next.Close(deviceID, err) -} - -func fixupFiles(folder string, files []FileInfo) { - for i, f := range files { - if strings.ContainsAny(f.Name, disallowedCharacters) { - if f.IsDeleted() { - // Don't complain if the file is marked as deleted, since it - // can't possibly exist here anyway. - continue - } - files[i].Flags |= FlagInvalid - l.Warnf("File name %q (folder %q) contains invalid characters; marked as invalid.", f.Name, folder) - } - files[i].Name = filepath.FromSlash(files[i].Name) - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go deleted file mode 100644 index 1b89ee09..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go +++ /dev/null @@ -1,765 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import ( - "encoding/binary" - "encoding/hex" - "errors" - "fmt" - "io" - "sync" - "time" - - lz4 "github.com/bkaradzic/go-lz4" -) - -const ( - // BlockSize is the standard ata block size (128 KiB) - BlockSize = 128 << 10 - - // MaxMessageLen is the largest message size allowed on the wire. (64 MiB) - MaxMessageLen = 64 << 20 -) - -const ( - messageTypeClusterConfig = 0 - messageTypeIndex = 1 - messageTypeRequest = 2 - messageTypeResponse = 3 - messageTypePing = 4 - messageTypeIndexUpdate = 6 - messageTypeClose = 7 -) - -const ( - stateInitial = iota - stateReady -) - -// FileInfo flags -const ( - FlagDeleted uint32 = 1 << 12 - FlagInvalid = 1 << 13 - FlagDirectory = 1 << 14 - FlagNoPermBits = 1 << 15 - FlagSymlink = 1 << 16 - FlagSymlinkMissingTarget = 1 << 17 - - FlagsAll = (1 << 18) - 1 - - SymlinkTypeMask = FlagDirectory | FlagSymlinkMissingTarget -) - -// IndexMessage message flags (for IndexUpdate) -const ( - FlagIndexTemporary uint32 = 1 << iota -) - -// Request message flags -const ( - FlagRequestTemporary uint32 = 1 << iota -) - -// ClusterConfigMessage.Folders flags -const ( - FlagFolderReadOnly uint32 = 1 << 0 - FlagFolderIgnorePerms = 1 << 1 - FlagFolderIgnoreDelete = 1 << 2 -) - -// ClusterConfigMessage.Folders.Devices flags -const ( - FlagShareTrusted uint32 = 1 << 0 - FlagShareReadOnly = 1 << 1 - FlagIntroducer = 1 << 2 - FlagShareBits = 0x000000ff -) - -var ( - ErrClosed = errors.New("connection closed") - ErrTimeout = errors.New("read timeout") -) - -// Specific variants of empty messages... -type pingMessage struct{ EmptyMessage } - -type Model interface { - // An index was received from the peer device - Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) - // An index update was received from the peer device - IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) - // A request was made by the peer device - Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error - // A cluster configuration message was received - ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) - // The peer device closed the connection - Close(deviceID DeviceID, err error) -} - -type Connection interface { - Start() - ID() DeviceID - Name() string - Index(folder string, files []FileInfo, flags uint32, options []Option) error - IndexUpdate(folder string, files []FileInfo, flags uint32, options []Option) error - Request(folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) - ClusterConfig(config ClusterConfigMessage) - Statistics() Statistics -} - -type rawConnection struct { - id DeviceID - name string - receiver Model - - cr *countingReader - cw *countingWriter - - awaiting [4096]chan asyncResult - awaitingMut sync.Mutex - - idxMut sync.Mutex // ensures serialization of Index calls - - nextID chan int - outbox chan hdrMsg - closed chan struct{} - once sync.Once - pool sync.Pool - compression Compression - - rdbuf0 []byte // used & reused by readMessage - rdbuf1 []byte // used & reused by readMessage -} - -type asyncResult struct { - val []byte - err error -} - -type hdrMsg struct { - hdr header - msg encodable - done chan struct{} -} - -type encodable interface { - AppendXDR([]byte) ([]byte, error) -} - -type isEofer interface { - IsEOF() bool -} - -const ( - // PingSendInterval is how often we make sure to send a message, by - // triggering pings if necessary. - PingSendInterval = 90 * time.Second - // ReceiveTimeout is the longest we'll wait for a message from the other - // side before closing the connection. - ReceiveTimeout = 300 * time.Second -) - -func NewConnection(deviceID DeviceID, reader io.Reader, writer io.Writer, receiver Model, name string, compress Compression) Connection { - cr := &countingReader{Reader: reader} - cw := &countingWriter{Writer: writer} - - c := rawConnection{ - id: deviceID, - name: name, - receiver: nativeModel{receiver}, - cr: cr, - cw: cw, - outbox: make(chan hdrMsg), - nextID: make(chan int), - closed: make(chan struct{}), - pool: sync.Pool{ - New: func() interface{} { - return make([]byte, BlockSize) - }, - }, - compression: compress, - } - - return wireFormatConnection{&c} -} - -// Start creates the goroutines for sending and receiving of messages. It must -// be called exactly once after creating a connection. -func (c *rawConnection) Start() { - go c.readerLoop() - go c.writerLoop() - go c.pingSender() - go c.pingReceiver() - go c.idGenerator() -} - -func (c *rawConnection) ID() DeviceID { - return c.id -} - -func (c *rawConnection) Name() string { - return c.name -} - -// Index writes the list of file information to the connected peer device -func (c *rawConnection) Index(folder string, idx []FileInfo, flags uint32, options []Option) error { - select { - case <-c.closed: - return ErrClosed - default: - } - c.idxMut.Lock() - c.send(-1, messageTypeIndex, IndexMessage{ - Folder: folder, - Files: idx, - Flags: flags, - Options: options, - }, nil) - c.idxMut.Unlock() - return nil -} - -// IndexUpdate writes the list of file information to the connected peer device as an update -func (c *rawConnection) IndexUpdate(folder string, idx []FileInfo, flags uint32, options []Option) error { - select { - case <-c.closed: - return ErrClosed - default: - } - c.idxMut.Lock() - c.send(-1, messageTypeIndexUpdate, IndexMessage{ - Folder: folder, - Files: idx, - Flags: flags, - Options: options, - }, nil) - c.idxMut.Unlock() - return nil -} - -// Request returns the bytes for the specified block after fetching them from the connected peer. -func (c *rawConnection) Request(folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) { - var id int - select { - case id = <-c.nextID: - case <-c.closed: - return nil, ErrClosed - } - - c.awaitingMut.Lock() - if ch := c.awaiting[id]; ch != nil { - panic("id taken") - } - rc := make(chan asyncResult, 1) - c.awaiting[id] = rc - c.awaitingMut.Unlock() - - ok := c.send(id, messageTypeRequest, RequestMessage{ - Folder: folder, - Name: name, - Offset: offset, - Size: int32(size), - Hash: hash, - Flags: flags, - Options: options, - }, nil) - if !ok { - return nil, ErrClosed - } - - res, ok := <-rc - if !ok { - return nil, ErrClosed - } - return res.val, res.err -} - -// ClusterConfig send the cluster configuration message to the peer and returns any error -func (c *rawConnection) ClusterConfig(config ClusterConfigMessage) { - c.send(-1, messageTypeClusterConfig, config, nil) -} - -func (c *rawConnection) ping() bool { - var id int - select { - case id = <-c.nextID: - case <-c.closed: - return false - } - - return c.send(id, messageTypePing, nil, nil) -} - -func (c *rawConnection) readerLoop() (err error) { - defer func() { - c.close(err) - }() - - state := stateInitial - for { - select { - case <-c.closed: - return ErrClosed - default: - } - - hdr, msg, err := c.readMessage() - if err != nil { - return err - } - - switch msg := msg.(type) { - case ClusterConfigMessage: - if state != stateInitial { - return fmt.Errorf("protocol error: cluster config message in state %d", state) - } - go c.receiver.ClusterConfig(c.id, msg) - state = stateReady - - case IndexMessage: - switch hdr.msgType { - case messageTypeIndex: - if state != stateReady { - return fmt.Errorf("protocol error: index message in state %d", state) - } - c.handleIndex(msg) - state = stateReady - - case messageTypeIndexUpdate: - if state != stateReady { - return fmt.Errorf("protocol error: index update message in state %d", state) - } - c.handleIndexUpdate(msg) - state = stateReady - } - - case RequestMessage: - if state != stateReady { - return fmt.Errorf("protocol error: request message in state %d", state) - } - // Requests are handled asynchronously - go c.handleRequest(hdr.msgID, msg) - - case ResponseMessage: - if state != stateReady { - return fmt.Errorf("protocol error: response message in state %d", state) - } - c.handleResponse(hdr.msgID, msg) - - case pingMessage: - if state != stateReady { - return fmt.Errorf("protocol error: ping message in state %d", state) - } - // Nothing - - case CloseMessage: - return errors.New(msg.Reason) - - default: - return fmt.Errorf("protocol error: %s: unknown message type %#x", c.id, hdr.msgType) - } - } -} - -func (c *rawConnection) readMessage() (hdr header, msg encodable, err error) { - if cap(c.rdbuf0) < 8 { - c.rdbuf0 = make([]byte, 8) - } else { - c.rdbuf0 = c.rdbuf0[:8] - } - _, err = io.ReadFull(c.cr, c.rdbuf0) - if err != nil { - return - } - - hdr = decodeHeader(binary.BigEndian.Uint32(c.rdbuf0[0:4])) - msglen := int(binary.BigEndian.Uint32(c.rdbuf0[4:8])) - - l.Debugf("read header %v (msglen=%d)", hdr, msglen) - - if msglen > MaxMessageLen { - err = fmt.Errorf("message length %d exceeds maximum %d", msglen, MaxMessageLen) - return - } - - if hdr.version != 0 { - err = fmt.Errorf("unknown protocol version 0x%x", hdr.version) - return - } - - if cap(c.rdbuf0) < msglen { - c.rdbuf0 = make([]byte, msglen) - } else { - c.rdbuf0 = c.rdbuf0[:msglen] - } - _, err = io.ReadFull(c.cr, c.rdbuf0) - if err != nil { - return - } - - l.Debugf("read %d bytes", len(c.rdbuf0)) - - msgBuf := c.rdbuf0 - if hdr.compression && msglen > 0 { - c.rdbuf1 = c.rdbuf1[:cap(c.rdbuf1)] - c.rdbuf1, err = lz4.Decode(c.rdbuf1, c.rdbuf0) - if err != nil { - return - } - msgBuf = c.rdbuf1 - l.Debugf("decompressed to %d bytes", len(msgBuf)) - } - - if shouldDebug() { - if len(msgBuf) > 1024 { - l.Debugf("message data:\n%s", hex.Dump(msgBuf[:1024])) - } else { - l.Debugf("message data:\n%s", hex.Dump(msgBuf)) - } - } - - // We check each returned error for the XDRError.IsEOF() method. - // IsEOF()==true here means that the message contained fewer fields than - // expected. It does not signify an EOF on the socket, because we've - // successfully read a size value and that many bytes already. New fields - // we expected but the other peer didn't send should be interpreted as - // zero/nil, and if that's not valid we'll verify it somewhere else. - - switch hdr.msgType { - case messageTypeIndex, messageTypeIndexUpdate: - var idx IndexMessage - err = idx.UnmarshalXDR(msgBuf) - if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() { - err = nil - } - msg = idx - - case messageTypeRequest: - var req RequestMessage - err = req.UnmarshalXDR(msgBuf) - if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() { - err = nil - } - msg = req - - case messageTypeResponse: - var resp ResponseMessage - err = resp.UnmarshalXDR(msgBuf) - if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() { - err = nil - } - msg = resp - - case messageTypePing: - msg = pingMessage{} - - case messageTypeClusterConfig: - var cc ClusterConfigMessage - err = cc.UnmarshalXDR(msgBuf) - if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() { - err = nil - } - msg = cc - - case messageTypeClose: - var cm CloseMessage - err = cm.UnmarshalXDR(msgBuf) - if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() { - err = nil - } - msg = cm - - default: - err = fmt.Errorf("protocol error: %s: unknown message type %#x", c.id, hdr.msgType) - } - - return -} - -func (c *rawConnection) handleIndex(im IndexMessage) { - l.Debugf("Index(%v, %v, %d file, flags %x, opts: %s)", c.id, im.Folder, len(im.Files), im.Flags, im.Options) - c.receiver.Index(c.id, im.Folder, filterIndexMessageFiles(im.Files), im.Flags, im.Options) -} - -func (c *rawConnection) handleIndexUpdate(im IndexMessage) { - l.Debugf("queueing IndexUpdate(%v, %v, %d files, flags %x, opts: %s)", c.id, im.Folder, len(im.Files), im.Flags, im.Options) - c.receiver.IndexUpdate(c.id, im.Folder, filterIndexMessageFiles(im.Files), im.Flags, im.Options) -} - -func filterIndexMessageFiles(fs []FileInfo) []FileInfo { - var out []FileInfo - for i, f := range fs { - switch f.Name { - case "", ".", "..", "/": // A few obviously invalid filenames - l.Infof("Dropping invalid filename %q from incoming index", f.Name) - if out == nil { - // Most incoming updates won't contain anything invalid, so we - // delay the allocation and copy to output slice until we - // really need to do it, then copy all the so var valid files - // to it. - out = make([]FileInfo, i, len(fs)-1) - copy(out, fs) - } - default: - if out != nil { - out = append(out, f) - } - } - } - if out != nil { - return out - } - return fs -} - -func (c *rawConnection) handleRequest(msgID int, req RequestMessage) { - size := int(req.Size) - usePool := size <= BlockSize - - var buf []byte - var done chan struct{} - - if usePool { - buf = c.pool.Get().([]byte)[:size] - done = make(chan struct{}) - } else { - buf = make([]byte, size) - } - - err := c.receiver.Request(c.id, req.Folder, req.Name, int64(req.Offset), req.Hash, req.Flags, req.Options, buf) - if err != nil { - c.send(msgID, messageTypeResponse, ResponseMessage{ - Data: nil, - Code: errorToCode(err), - }, done) - } else { - c.send(msgID, messageTypeResponse, ResponseMessage{ - Data: buf, - Code: errorToCode(err), - }, done) - } - - if usePool { - <-done - c.pool.Put(buf) - } -} - -func (c *rawConnection) handleResponse(msgID int, resp ResponseMessage) { - c.awaitingMut.Lock() - if rc := c.awaiting[msgID]; rc != nil { - c.awaiting[msgID] = nil - rc <- asyncResult{resp.Data, codeToError(resp.Code)} - close(rc) - } - c.awaitingMut.Unlock() -} - -func (c *rawConnection) handlePong(msgID int) { - c.awaitingMut.Lock() - if rc := c.awaiting[msgID]; rc != nil { - c.awaiting[msgID] = nil - rc <- asyncResult{} - close(rc) - } - c.awaitingMut.Unlock() -} - -func (c *rawConnection) send(msgID int, msgType int, msg encodable, done chan struct{}) bool { - if msgID < 0 { - select { - case id := <-c.nextID: - msgID = id - case <-c.closed: - return false - } - } - - hdr := header{ - version: 0, - msgID: msgID, - msgType: msgType, - } - - select { - case c.outbox <- hdrMsg{hdr, msg, done}: - return true - case <-c.closed: - return false - } -} - -func (c *rawConnection) writerLoop() { - var msgBuf = make([]byte, 8) // buffer for wire format message, kept and reused - var uncBuf []byte // buffer for uncompressed message, kept and reused - for { - var tempBuf []byte - var err error - - select { - case hm := <-c.outbox: - if hm.msg != nil { - // Uncompressed message in uncBuf - uncBuf, err = hm.msg.AppendXDR(uncBuf[:0]) - if hm.done != nil { - close(hm.done) - } - if err != nil { - c.close(err) - return - } - - compress := false - switch c.compression { - case CompressAlways: - compress = true - case CompressMetadata: - compress = hm.hdr.msgType != messageTypeResponse - } - - if compress && len(uncBuf) >= compressionThreshold { - // Use compression for large messages - hm.hdr.compression = true - - // Make sure we have enough space for the compressed message plus header in msgBug - msgBuf = msgBuf[:cap(msgBuf)] - if maxLen := lz4.CompressBound(len(uncBuf)) + 8; maxLen > len(msgBuf) { - msgBuf = make([]byte, maxLen) - } - - // Compressed is written to msgBuf, we keep tb for the length only - tempBuf, err = lz4.Encode(msgBuf[8:], uncBuf) - binary.BigEndian.PutUint32(msgBuf[4:8], uint32(len(tempBuf))) - msgBuf = msgBuf[0 : len(tempBuf)+8] - - l.Debugf("write compressed message; %v (len=%d)", hm.hdr, len(tempBuf)) - } else { - // No point in compressing very short messages - hm.hdr.compression = false - - msgBuf = msgBuf[:cap(msgBuf)] - if l := len(uncBuf) + 8; l > len(msgBuf) { - msgBuf = make([]byte, l) - } - - binary.BigEndian.PutUint32(msgBuf[4:8], uint32(len(uncBuf))) - msgBuf = msgBuf[0 : len(uncBuf)+8] - copy(msgBuf[8:], uncBuf) - - l.Debugf("write uncompressed message; %v (len=%d)", hm.hdr, len(uncBuf)) - } - } else { - l.Debugf("write empty message; %v", hm.hdr) - binary.BigEndian.PutUint32(msgBuf[4:8], 0) - msgBuf = msgBuf[:8] - } - - binary.BigEndian.PutUint32(msgBuf[0:4], encodeHeader(hm.hdr)) - - if err == nil { - var n int - n, err = c.cw.Write(msgBuf) - l.Debugf("wrote %d bytes on the wire", n) - } - if err != nil { - c.close(err) - return - } - case <-c.closed: - return - } - } -} - -func (c *rawConnection) close(err error) { - c.once.Do(func() { - close(c.closed) - - c.awaitingMut.Lock() - for i, ch := range c.awaiting { - if ch != nil { - close(ch) - c.awaiting[i] = nil - } - } - c.awaitingMut.Unlock() - - go c.receiver.Close(c.id, err) - }) -} - -func (c *rawConnection) idGenerator() { - nextID := 0 - for { - nextID = (nextID + 1) & 0xfff - select { - case c.nextID <- nextID: - case <-c.closed: - return - } - } -} - -// The pingSender makes sure that we've sent a message within the last -// PingSendInterval. If we already have something sent in the last -// PingSendInterval/2, we do nothing. Otherwise we send a ping message. This -// results in an effecting ping interval of somewhere between -// PingSendInterval/2 and PingSendInterval. -func (c *rawConnection) pingSender() { - ticker := time.Tick(PingSendInterval / 2) - - for { - select { - case <-ticker: - d := time.Since(c.cw.Last()) - if d < PingSendInterval/2 { - l.Debugln(c.id, "ping skipped after wr", d) - continue - } - - l.Debugln(c.id, "ping -> after", d) - c.ping() - - case <-c.closed: - return - } - } -} - -// The pingReciever checks that we've received a message (any message will do, -// but we expect pings in the absence of other messages) within the last -// ReceiveTimeout. If not, we close the connection with an ErrTimeout. -func (c *rawConnection) pingReceiver() { - ticker := time.Tick(ReceiveTimeout / 2) - - for { - select { - case <-ticker: - d := time.Since(c.cr.Last()) - if d > ReceiveTimeout { - l.Debugln(c.id, "ping timeout", d) - c.close(ErrTimeout) - } - - l.Debugln(c.id, "last read within", d) - - case <-c.closed: - return - } - } -} - -type Statistics struct { - At time.Time - InBytesTotal int64 - OutBytesTotal int64 -} - -func (c *rawConnection) Statistics() Statistics { - return Statistics{ - At: time.Now(), - InBytesTotal: c.cr.Tot(), - OutBytesTotal: c.cw.Tot(), - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go deleted file mode 100644 index 6c17ac64..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (C) 2015 The Protocol Authors. - -package protocol - -// The Vector type represents a version vector. The zero value is a usable -// version vector. The vector has slice semantics and some operations on it -// are "append-like" in that they may return the same vector modified, or v -// new allocated Vector with the modified contents. -type Vector []Counter - -// Counter represents a single counter in the version vector. -type Counter struct { - ID uint64 - Value uint64 -} - -// Update returns a Vector with the index for the specific ID incremented by -// one. If it is possible, the vector v is updated and returned. If it is not, -// a copy will be created, updated and returned. -func (v Vector) Update(ID uint64) Vector { - for i := range v { - if v[i].ID == ID { - // Update an existing index - v[i].Value++ - return v - } else if v[i].ID > ID { - // Insert a new index - nv := make(Vector, len(v)+1) - copy(nv, v[:i]) - nv[i].ID = ID - nv[i].Value = 1 - copy(nv[i+1:], v[i:]) - return nv - } - } - // Append a new index - return append(v, Counter{ID, 1}) -} - -// Merge returns the vector containing the maximum indexes from v and b. If it -// is possible, the vector v is updated and returned. If it is not, a copy -// will be created, updated and returned. -func (v Vector) Merge(b Vector) Vector { - var vi, bi int - for bi < len(b) { - if vi == len(v) { - // We've reach the end of v, all that remains are appends - return append(v, b[bi:]...) - } - - if v[vi].ID > b[bi].ID { - // The index from b should be inserted here - n := make(Vector, len(v)+1) - copy(n, v[:vi]) - n[vi] = b[bi] - copy(n[vi+1:], v[vi:]) - v = n - } - - if v[vi].ID == b[bi].ID { - if val := b[bi].Value; val > v[vi].Value { - v[vi].Value = val - } - } - - if bi < len(b) && v[vi].ID == b[bi].ID { - bi++ - } - vi++ - } - - return v -} - -// Copy returns an identical vector that is not shared with v. -func (v Vector) Copy() Vector { - nv := make(Vector, len(v)) - copy(nv, v) - return nv -} - -// Equal returns true when the two vectors are equivalent. -func (v Vector) Equal(b Vector) bool { - return v.Compare(b) == Equal -} - -// LesserEqual returns true when the two vectors are equivalent or v is Lesser -// than b. -func (v Vector) LesserEqual(b Vector) bool { - comp := v.Compare(b) - return comp == Lesser || comp == Equal -} - -// GreaterEqual returns true when the two vectors are equivalent or v is Greater -// than b. -func (v Vector) GreaterEqual(b Vector) bool { - comp := v.Compare(b) - return comp == Greater || comp == Equal -} - -// Concurrent returns true when the two vectors are concrurrent. -func (v Vector) Concurrent(b Vector) bool { - comp := v.Compare(b) - return comp == ConcurrentGreater || comp == ConcurrentLesser -} - -// Counter returns the current value of the given counter ID. -func (v Vector) Counter(id uint64) uint64 { - for _, c := range v { - if c.ID == id { - return c.Value - } - } - return 0 -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go deleted file mode 100644 index 9735ec9d..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (C) 2015 The Protocol Authors. - -package protocol - -// Ordering represents the relationship between two Vectors. -type Ordering int - -const ( - Equal Ordering = iota - Greater - Lesser - ConcurrentLesser - ConcurrentGreater -) - -// There's really no such thing as "concurrent lesser" and "concurrent -// greater" in version vectors, just "concurrent". But it's useful to be able -// to get a strict ordering between versions for stable sorts and so on, so we -// return both variants. The convenience method Concurrent() can be used to -// check for either case. - -// Compare returns the Ordering that describes a's relation to b. -func (a Vector) Compare(b Vector) Ordering { - var ai, bi int // index into a and b - var av, bv Counter // value at current index - - result := Equal - - for ai < len(a) || bi < len(b) { - var aMissing, bMissing bool - - if ai < len(a) { - av = a[ai] - } else { - av = Counter{} - aMissing = true - } - - if bi < len(b) { - bv = b[bi] - } else { - bv = Counter{} - bMissing = true - } - - switch { - case av.ID == bv.ID: - // We have a counter value for each side - if av.Value > bv.Value { - if result == Lesser { - return ConcurrentLesser - } - result = Greater - } else if av.Value < bv.Value { - if result == Greater { - return ConcurrentGreater - } - result = Lesser - } - - case !aMissing && av.ID < bv.ID || bMissing: - // Value is missing on the b side - if av.Value > 0 { - if result == Lesser { - return ConcurrentLesser - } - result = Greater - } - - case !bMissing && bv.ID < av.ID || aMissing: - // Value is missing on the a side - if bv.Value > 0 { - if result == Greater { - return ConcurrentGreater - } - result = Lesser - } - } - - if ai < len(a) && (av.ID <= bv.ID || bMissing) { - ai++ - } - if bi < len(b) && (bv.ID <= av.ID || aMissing) { - bi++ - } - } - - return result -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go deleted file mode 100644 index 01efa7e4..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2015 The Protocol Authors. - -package protocol - -import "github.com/calmh/xdr" - -// This stuff is hacked up manually because genxdr doesn't support 'type -// Vector []Counter' declarations and it was tricky when I tried to add it... - -type xdrWriter interface { - WriteUint32(uint32) (int, error) - WriteUint64(uint64) (int, error) -} -type xdrReader interface { - ReadUint32() uint32 - ReadUint64() uint64 -} - -// EncodeXDRInto encodes the vector as an XDR object into the given XDR -// encoder. -func (v Vector) EncodeXDRInto(w xdrWriter) (int, error) { - w.WriteUint32(uint32(len(v))) - for i := range v { - w.WriteUint64(v[i].ID) - w.WriteUint64(v[i].Value) - } - return 4 + 16*len(v), nil -} - -// DecodeXDRFrom decodes the XDR objects from the given reader into itself. -func (v *Vector) DecodeXDRFrom(r xdrReader) error { - l := int(r.ReadUint32()) - if l > 1e6 { - return xdr.ElementSizeExceeded("number of counters", l, 1e6) - } - n := make(Vector, l) - for i := range n { - n[i].ID = r.ReadUint64() - n[i].Value = r.ReadUint64() - } - *v = n - return nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go deleted file mode 100644 index 66b02ed6..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2014 The Protocol Authors. - -package protocol - -import ( - "path/filepath" - - "golang.org/x/text/unicode/norm" -) - -type wireFormatConnection struct { - next Connection -} - -func (c wireFormatConnection) Start() { - c.next.Start() -} - -func (c wireFormatConnection) ID() DeviceID { - return c.next.ID() -} - -func (c wireFormatConnection) Name() string { - return c.next.Name() -} - -func (c wireFormatConnection) Index(folder string, fs []FileInfo, flags uint32, options []Option) error { - var myFs = make([]FileInfo, len(fs)) - copy(myFs, fs) - - for i := range fs { - myFs[i].Name = norm.NFC.String(filepath.ToSlash(myFs[i].Name)) - } - - return c.next.Index(folder, myFs, flags, options) -} - -func (c wireFormatConnection) IndexUpdate(folder string, fs []FileInfo, flags uint32, options []Option) error { - var myFs = make([]FileInfo, len(fs)) - copy(myFs, fs) - - for i := range fs { - myFs[i].Name = norm.NFC.String(filepath.ToSlash(myFs[i].Name)) - } - - return c.next.IndexUpdate(folder, myFs, flags, options) -} - -func (c wireFormatConnection) Request(folder, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) { - name = norm.NFC.String(filepath.ToSlash(name)) - return c.next.Request(folder, name, offset, size, hash, flags, options) -} - -func (c wireFormatConnection) ClusterConfig(config ClusterConfigMessage) { - c.next.ClusterConfig(config) -} - -func (c wireFormatConnection) Statistics() Statistics { - return c.next.Statistics() -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go deleted file mode 100644 index 992218ed..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -package client - -import ( - "crypto/tls" - "fmt" - "net/url" - "time" - - "github.com/syncthing/syncthing/lib/relay/protocol" -) - -type relayClientFactory func(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient - -var ( - supportedSchemes = map[string]relayClientFactory{ - "relay": newStaticClient, - "dynamic+http": newDynamicClient, - "dynamic+https": newDynamicClient, - } -) - -type RelayClient interface { - Serve() - Stop() - StatusOK() bool - Latency() time.Duration - String() string - Invitations() chan protocol.SessionInvitation - URI() *url.URL -} - -func NewClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) (RelayClient, error) { - factory, ok := supportedSchemes[uri.Scheme] - if !ok { - return nil, fmt.Errorf("Unsupported scheme: %s", uri.Scheme) - } - - return factory(uri, certs, invitations, timeout), nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go deleted file mode 100644 index 814810ba..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -package client - -import ( - "os" - "strings" - - "github.com/syncthing/syncthing/lib/logger" -) - -var ( - l = logger.DefaultLogger.NewFacility("relay", "") -) - -func init() { - l.SetDebug("relay", strings.Contains(os.Getenv("STTRACE"), "relay") || os.Getenv("STTRACE") == "all") -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go deleted file mode 100644 index 13017793..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -package client - -import ( - "crypto/tls" - "encoding/json" - "fmt" - "math/rand" - "net/http" - "net/url" - "sort" - "time" - - "github.com/syncthing/syncthing/lib/osutil" - "github.com/syncthing/syncthing/lib/relay/protocol" - "github.com/syncthing/syncthing/lib/sync" -) - -type dynamicClient struct { - pooladdr *url.URL - certs []tls.Certificate - invitations chan protocol.SessionInvitation - closeInvitationsOnFinish bool - timeout time.Duration - - mut sync.RWMutex - client RelayClient - stop chan struct{} -} - -func newDynamicClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient { - closeInvitationsOnFinish := false - if invitations == nil { - closeInvitationsOnFinish = true - invitations = make(chan protocol.SessionInvitation) - } - return &dynamicClient{ - pooladdr: uri, - certs: certs, - invitations: invitations, - closeInvitationsOnFinish: closeInvitationsOnFinish, - timeout: timeout, - - mut: sync.NewRWMutex(), - } -} - -func (c *dynamicClient) Serve() { - c.mut.Lock() - c.stop = make(chan struct{}) - c.mut.Unlock() - - uri := *c.pooladdr - - // Trim off the `dynamic+` prefix - uri.Scheme = uri.Scheme[8:] - - l.Debugln(c, "looking up dynamic relays") - - data, err := http.Get(uri.String()) - if err != nil { - l.Debugln(c, "failed to lookup dynamic relays", err) - return - } - - var ann dynamicAnnouncement - err = json.NewDecoder(data.Body).Decode(&ann) - data.Body.Close() - if err != nil { - l.Debugln(c, "failed to lookup dynamic relays", err) - return - } - - defer c.cleanup() - - var addrs []string - for _, relayAnn := range ann.Relays { - ruri, err := url.Parse(relayAnn.URL) - if err != nil { - l.Debugln(c, "failed to parse dynamic relay address", relayAnn.URL, err) - continue - } - l.Debugln(c, "found", ruri) - addrs = append(addrs, ruri.String()) - } - - for _, addr := range relayAddressesOrder(addrs) { - select { - case <-c.stop: - l.Debugln(c, "stopping") - return - default: - ruri, err := url.Parse(addr) - if err != nil { - l.Debugln(c, "skipping relay", addr, err) - continue - } - client, err := NewClient(ruri, c.certs, c.invitations, c.timeout) - if err != nil { - continue - } - c.mut.Lock() - c.client = client - c.mut.Unlock() - - c.client.Serve() - - c.mut.Lock() - c.client = nil - c.mut.Unlock() - } - } - l.Debugln(c, "could not find a connectable relay") -} - -func (c *dynamicClient) Stop() { - c.mut.RLock() - defer c.mut.RUnlock() - close(c.stop) - if c.client == nil { - return - } - c.client.Stop() -} - -func (c *dynamicClient) StatusOK() bool { - c.mut.RLock() - defer c.mut.RUnlock() - if c.client == nil { - return false - } - return c.client.StatusOK() -} - -func (c *dynamicClient) Latency() time.Duration { - c.mut.RLock() - defer c.mut.RUnlock() - if c.client == nil { - return time.Hour - } - return c.client.Latency() -} - -func (c *dynamicClient) String() string { - return fmt.Sprintf("DynamicClient:%p:%s@%s", c, c.URI(), c.pooladdr) -} - -func (c *dynamicClient) URI() *url.URL { - c.mut.RLock() - defer c.mut.RUnlock() - if c.client == nil { - return c.pooladdr - } - return c.client.URI() -} - -func (c *dynamicClient) Invitations() chan protocol.SessionInvitation { - c.mut.RLock() - inv := c.invitations - c.mut.RUnlock() - return inv -} - -func (c *dynamicClient) cleanup() { - c.mut.Lock() - if c.closeInvitationsOnFinish { - close(c.invitations) - c.invitations = make(chan protocol.SessionInvitation) - } - c.mut.Unlock() -} - -// This is the announcement recieved from the relay server; -// {"relays": [{"url": "relay://10.20.30.40:5060"}, ...]} -type dynamicAnnouncement struct { - Relays []struct { - URL string - } -} - -// relayAddressesOrder checks the latency to each relay, rounds latency down to -// the closest 50ms, and puts them in buckets of 50ms latency ranges. Then -// shuffles each bucket, and returns all addresses starting with the ones from -// the lowest latency bucket, ending with the highest latency buceket. -func relayAddressesOrder(input []string) []string { - buckets := make(map[int][]string) - - for _, relay := range input { - latency, err := osutil.GetLatencyForURL(relay) - if err != nil { - latency = time.Hour - } - - id := int(latency/time.Millisecond) / 50 - - buckets[id] = append(buckets[id], relay) - } - - var ids []int - for id, bucket := range buckets { - shuffle(bucket) - ids = append(ids, id) - } - - sort.Ints(ids) - - addresses := make([]string, len(input)) - - for _, id := range ids { - addresses = append(addresses, buckets[id]...) - } - - return addresses -} - -func shuffle(slice []string) { - for i := len(slice) - 1; i > 0; i-- { - j := rand.Intn(i + 1) - slice[i], slice[j] = slice[j], slice[i] - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go deleted file mode 100644 index 3376e1d2..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -package client - -import ( - "crypto/tls" - "fmt" - "net" - "net/url" - "strconv" - "strings" - "time" - - "github.com/syncthing/syncthing/lib/dialer" - syncthingprotocol "github.com/syncthing/syncthing/lib/protocol" - "github.com/syncthing/syncthing/lib/relay/protocol" -) - -func GetInvitationFromRelay(uri *url.URL, id syncthingprotocol.DeviceID, certs []tls.Certificate, timeout time.Duration) (protocol.SessionInvitation, error) { - if uri.Scheme != "relay" { - return protocol.SessionInvitation{}, fmt.Errorf("Unsupported relay scheme: %v", uri.Scheme) - } - - rconn, err := dialer.DialTimeout("tcp", uri.Host, timeout) - if err != nil { - return protocol.SessionInvitation{}, err - } - - conn := tls.Client(rconn, configForCerts(certs)) - conn.SetDeadline(time.Now().Add(timeout)) - - if err := performHandshakeAndValidation(conn, uri); err != nil { - return protocol.SessionInvitation{}, err - } - - defer conn.Close() - - request := protocol.ConnectRequest{ - ID: id[:], - } - - if err := protocol.WriteMessage(conn, request); err != nil { - return protocol.SessionInvitation{}, err - } - - message, err := protocol.ReadMessage(conn) - if err != nil { - return protocol.SessionInvitation{}, err - } - - switch msg := message.(type) { - case protocol.Response: - return protocol.SessionInvitation{}, fmt.Errorf("Incorrect response code %d: %s", msg.Code, msg.Message) - case protocol.SessionInvitation: - l.Debugln("Received invitation", msg, "via", conn.LocalAddr()) - ip := net.IP(msg.Address) - if len(ip) == 0 || ip.IsUnspecified() { - msg.Address = conn.RemoteAddr().(*net.TCPAddr).IP[:] - } - return msg, nil - default: - return protocol.SessionInvitation{}, fmt.Errorf("protocol error: unexpected message %v", msg) - } -} - -func JoinSession(invitation protocol.SessionInvitation) (net.Conn, error) { - addr := net.JoinHostPort(net.IP(invitation.Address).String(), strconv.Itoa(int(invitation.Port))) - - conn, err := dialer.Dial("tcp", addr) - if err != nil { - return nil, err - } - - request := protocol.JoinSessionRequest{ - Key: invitation.Key, - } - - conn.SetDeadline(time.Now().Add(10 * time.Second)) - err = protocol.WriteMessage(conn, request) - if err != nil { - return nil, err - } - - message, err := protocol.ReadMessage(conn) - if err != nil { - return nil, err - } - - conn.SetDeadline(time.Time{}) - - switch msg := message.(type) { - case protocol.Response: - if msg.Code != 0 { - return nil, fmt.Errorf("Incorrect response code %d: %s", msg.Code, msg.Message) - } - return conn, nil - default: - return nil, fmt.Errorf("protocol error: expecting response got %v", msg) - } -} - -func TestRelay(uri *url.URL, certs []tls.Certificate, sleep, timeout time.Duration, times int) bool { - id := syncthingprotocol.NewDeviceID(certs[0].Certificate[0]) - invs := make(chan protocol.SessionInvitation, 1) - c, err := NewClient(uri, certs, invs, timeout) - if err != nil { - close(invs) - return false - } - go c.Serve() - defer func() { - c.Stop() - close(invs) - }() - - for i := 0; i < times; i++ { - _, err := GetInvitationFromRelay(uri, id, certs, timeout) - if err == nil { - return true - } - if !strings.Contains(err.Error(), "Incorrect response code") { - return false - } - time.Sleep(sleep) - } - return false -} - -func configForCerts(certs []tls.Certificate) *tls.Config { - return &tls.Config{ - Certificates: certs, - NextProtos: []string{protocol.ProtocolName}, - ClientAuth: tls.RequestClientCert, - SessionTicketsDisabled: true, - InsecureSkipVerify: true, - MinVersion: tls.VersionTLS12, - CipherSuites: []uint16{ - tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - }, - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go deleted file mode 100644 index f929530f..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go +++ /dev/null @@ -1,298 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -package client - -import ( - "crypto/tls" - "fmt" - "net" - "net/url" - "time" - - "github.com/syncthing/syncthing/lib/dialer" - syncthingprotocol "github.com/syncthing/syncthing/lib/protocol" - "github.com/syncthing/syncthing/lib/relay/protocol" - "github.com/syncthing/syncthing/lib/sync" -) - -type staticClient struct { - uri *url.URL - invitations chan protocol.SessionInvitation - - closeInvitationsOnFinish bool - - config *tls.Config - - messageTimeout time.Duration - connectTimeout time.Duration - - stop chan struct{} - stopped chan struct{} - - conn *tls.Conn - - mut sync.RWMutex - connected bool - latency time.Duration -} - -func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient { - closeInvitationsOnFinish := false - if invitations == nil { - closeInvitationsOnFinish = true - invitations = make(chan protocol.SessionInvitation) - } - - return &staticClient{ - uri: uri, - invitations: invitations, - - closeInvitationsOnFinish: closeInvitationsOnFinish, - - config: configForCerts(certs), - - messageTimeout: time.Minute * 2, - connectTimeout: timeout, - - stop: make(chan struct{}), - stopped: make(chan struct{}), - - mut: sync.NewRWMutex(), - connected: false, - } -} - -func (c *staticClient) Serve() { - c.stop = make(chan struct{}) - c.stopped = make(chan struct{}) - defer close(c.stopped) - - if err := c.connect(); err != nil { - l.Debugln("Relay connect:", err) - return - } - - l.Debugln(c, "connected", c.conn.RemoteAddr()) - - if err := c.join(); err != nil { - c.conn.Close() - l.Infoln("Relay join:", err) - return - } - - if err := c.conn.SetDeadline(time.Time{}); err != nil { - c.conn.Close() - l.Infoln("Relay set deadline:", err) - return - } - - l.Debugln(c, "joined", c.conn.RemoteAddr(), "via", c.conn.LocalAddr()) - - defer c.cleanup() - c.mut.Lock() - c.connected = true - c.mut.Unlock() - - messages := make(chan interface{}) - errors := make(chan error, 1) - - go messageReader(c.conn, messages, errors) - - timeout := time.NewTimer(c.messageTimeout) - - for { - select { - case message := <-messages: - timeout.Reset(c.messageTimeout) - l.Debugf("%s received message %T", c, message) - - switch msg := message.(type) { - case protocol.Ping: - if err := protocol.WriteMessage(c.conn, protocol.Pong{}); err != nil { - l.Infoln("Relay write:", err) - return - - } - l.Debugln(c, "sent pong") - - case protocol.SessionInvitation: - ip := net.IP(msg.Address) - if len(ip) == 0 || ip.IsUnspecified() { - msg.Address = c.conn.RemoteAddr().(*net.TCPAddr).IP[:] - } - c.invitations <- msg - - case protocol.RelayFull: - l.Infoln("Disconnected from relay due to it becoming full.") - return - - default: - l.Infoln("Relay: protocol error: unexpected message %v", msg) - return - } - - case <-c.stop: - l.Debugln(c, "stopping") - return - - case err := <-errors: - l.Infoln("Relay received:", err) - return - - case <-timeout.C: - l.Debugln(c, "timed out") - return - } - } -} - -func (c *staticClient) Stop() { - if c.stop == nil { - return - } - - close(c.stop) - <-c.stopped -} - -func (c *staticClient) StatusOK() bool { - c.mut.RLock() - con := c.connected - c.mut.RUnlock() - return con -} - -func (c *staticClient) Latency() time.Duration { - c.mut.RLock() - lat := c.latency - c.mut.RUnlock() - return lat -} - -func (c *staticClient) String() string { - return fmt.Sprintf("StaticClient:%p@%s", c, c.URI()) -} - -func (c *staticClient) URI() *url.URL { - return c.uri -} - -func (c *staticClient) Invitations() chan protocol.SessionInvitation { - c.mut.RLock() - inv := c.invitations - c.mut.RUnlock() - return inv -} - -func (c *staticClient) connect() error { - if c.uri.Scheme != "relay" { - return fmt.Errorf("Unsupported relay schema: %v", c.uri.Scheme) - } - - t0 := time.Now() - tcpConn, err := dialer.DialTimeout("tcp", c.uri.Host, c.connectTimeout) - if err != nil { - return err - } - - c.mut.Lock() - c.latency = time.Since(t0) - c.mut.Unlock() - - conn := tls.Client(tcpConn, c.config) - - if err := conn.SetDeadline(time.Now().Add(c.connectTimeout)); err != nil { - conn.Close() - return err - } - - if err := performHandshakeAndValidation(conn, c.uri); err != nil { - conn.Close() - return err - } - - c.conn = conn - return nil -} - -func (c *staticClient) cleanup() { - l.Debugln(c, "cleaning up") - c.mut.Lock() - if c.closeInvitationsOnFinish { - close(c.invitations) - c.invitations = make(chan protocol.SessionInvitation) - } - c.connected = false - c.mut.Unlock() - - c.conn.Close() -} - -func (c *staticClient) join() error { - if err := protocol.WriteMessage(c.conn, protocol.JoinRelayRequest{}); err != nil { - return err - } - - message, err := protocol.ReadMessage(c.conn) - if err != nil { - return err - } - - switch msg := message.(type) { - case protocol.Response: - if msg.Code != 0 { - return fmt.Errorf("Incorrect response code %d: %s", msg.Code, msg.Message) - } - - case protocol.RelayFull: - return fmt.Errorf("relay full") - - default: - return fmt.Errorf("protocol error: expecting response got %v", msg) - } - - return nil -} - -func performHandshakeAndValidation(conn *tls.Conn, uri *url.URL) error { - if err := conn.Handshake(); err != nil { - return err - } - - cs := conn.ConnectionState() - if !cs.NegotiatedProtocolIsMutual || cs.NegotiatedProtocol != protocol.ProtocolName { - return fmt.Errorf("protocol negotiation error") - } - - q := uri.Query() - relayIDs := q.Get("id") - if relayIDs != "" { - relayID, err := syncthingprotocol.DeviceIDFromString(relayIDs) - if err != nil { - return fmt.Errorf("relay address contains invalid verification id: %s", err) - } - - certs := cs.PeerCertificates - if cl := len(certs); cl != 1 { - return fmt.Errorf("unexpected certificate count: %d", cl) - } - - remoteID := syncthingprotocol.NewDeviceID(certs[0].Raw) - if remoteID != relayID { - return fmt.Errorf("relay id does not match. Expected %v got %v", relayID, remoteID) - } - } - - return nil -} - -func messageReader(conn net.Conn, messages chan<- interface{}, errors chan<- error) { - for { - msg, err := protocol.ReadMessage(conn) - if err != nil { - errors <- err - return - } - messages <- msg - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go deleted file mode 100644 index fca3598a..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -//go:generate -command genxdr go run ../../../Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go -//go:generate genxdr -o packets_xdr.go packets.go - -package protocol - -import ( - "fmt" - "net" - - syncthingprotocol "github.com/syncthing/syncthing/lib/protocol" -) - -const ( - messageTypePing int32 = iota - messageTypePong - messageTypeJoinRelayRequest - messageTypeJoinSessionRequest - messageTypeResponse - messageTypeConnectRequest - messageTypeSessionInvitation - messageTypeRelayFull -) - -type header struct { - magic uint32 - messageType int32 - messageLength int32 -} - -type Ping struct{} -type Pong struct{} -type JoinRelayRequest struct{} -type RelayFull struct{} - -type JoinSessionRequest struct { - Key []byte // max:32 -} - -type Response struct { - Code int32 - Message string -} - -type ConnectRequest struct { - ID []byte // max:32 -} - -type SessionInvitation struct { - From []byte // max:32 - Key []byte // max:32 - Address []byte // max:32 - Port uint16 - ServerSocket bool -} - -func (i SessionInvitation) String() string { - return fmt.Sprintf("%s@%s", syncthingprotocol.DeviceIDFromBytes(i.From), i.AddressString()) -} - -func (i SessionInvitation) GoString() string { - return i.String() -} - -func (i SessionInvitation) AddressString() string { - return fmt.Sprintf("%s:%d", net.IP(i.Address), i.Port) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go deleted file mode 100644 index 9eef6c0f..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go +++ /dev/null @@ -1,568 +0,0 @@ -// ************************************************************ -// This file is automatically generated by genxdr. Do not edit. -// ************************************************************ - -package protocol - -import ( - "bytes" - "io" - - "github.com/calmh/xdr" -) - -/* - -header Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| magic | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| message Type | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| message Length | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct header { - unsigned int magic; - int messageType; - int messageLength; -} - -*/ - -func (o header) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o header) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o header) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o header) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o header) EncodeXDRInto(xw *xdr.Writer) (int, error) { - xw.WriteUint32(o.magic) - xw.WriteUint32(uint32(o.messageType)) - xw.WriteUint32(uint32(o.messageLength)) - return xw.Tot(), xw.Error() -} - -func (o *header) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *header) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *header) DecodeXDRFrom(xr *xdr.Reader) error { - o.magic = xr.ReadUint32() - o.messageType = int32(xr.ReadUint32()) - o.messageLength = int32(xr.ReadUint32()) - return xr.Error() -} - -/* - -Ping Structure: -(contains no fields) - - -struct Ping { -} - -*/ - -func (o Ping) EncodeXDR(w io.Writer) (int, error) { - return 0, nil -} - -func (o Ping) MarshalXDR() ([]byte, error) { - return nil, nil -} - -func (o Ping) MustMarshalXDR() []byte { - return nil -} - -func (o Ping) AppendXDR(bs []byte) ([]byte, error) { - return bs, nil -} - -func (o Ping) EncodeXDRInto(xw *xdr.Writer) (int, error) { - return xw.Tot(), xw.Error() -} - -func (o *Ping) DecodeXDR(r io.Reader) error { - return nil -} - -func (o *Ping) UnmarshalXDR(bs []byte) error { - return nil -} - -func (o *Ping) DecodeXDRFrom(xr *xdr.Reader) error { - return xr.Error() -} - -/* - -Pong Structure: -(contains no fields) - - -struct Pong { -} - -*/ - -func (o Pong) EncodeXDR(w io.Writer) (int, error) { - return 0, nil -} - -func (o Pong) MarshalXDR() ([]byte, error) { - return nil, nil -} - -func (o Pong) MustMarshalXDR() []byte { - return nil -} - -func (o Pong) AppendXDR(bs []byte) ([]byte, error) { - return bs, nil -} - -func (o Pong) EncodeXDRInto(xw *xdr.Writer) (int, error) { - return xw.Tot(), xw.Error() -} - -func (o *Pong) DecodeXDR(r io.Reader) error { - return nil -} - -func (o *Pong) UnmarshalXDR(bs []byte) error { - return nil -} - -func (o *Pong) DecodeXDRFrom(xr *xdr.Reader) error { - return xr.Error() -} - -/* - -JoinRelayRequest Structure: -(contains no fields) - - -struct JoinRelayRequest { -} - -*/ - -func (o JoinRelayRequest) EncodeXDR(w io.Writer) (int, error) { - return 0, nil -} - -func (o JoinRelayRequest) MarshalXDR() ([]byte, error) { - return nil, nil -} - -func (o JoinRelayRequest) MustMarshalXDR() []byte { - return nil -} - -func (o JoinRelayRequest) AppendXDR(bs []byte) ([]byte, error) { - return bs, nil -} - -func (o JoinRelayRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) { - return xw.Tot(), xw.Error() -} - -func (o *JoinRelayRequest) DecodeXDR(r io.Reader) error { - return nil -} - -func (o *JoinRelayRequest) UnmarshalXDR(bs []byte) error { - return nil -} - -func (o *JoinRelayRequest) DecodeXDRFrom(xr *xdr.Reader) error { - return xr.Error() -} - -/* - -RelayFull Structure: -(contains no fields) - - -struct RelayFull { -} - -*/ - -func (o RelayFull) EncodeXDR(w io.Writer) (int, error) { - return 0, nil -} - -func (o RelayFull) MarshalXDR() ([]byte, error) { - return nil, nil -} - -func (o RelayFull) MustMarshalXDR() []byte { - return nil -} - -func (o RelayFull) AppendXDR(bs []byte) ([]byte, error) { - return bs, nil -} - -func (o RelayFull) EncodeXDRInto(xw *xdr.Writer) (int, error) { - return xw.Tot(), xw.Error() -} - -func (o *RelayFull) DecodeXDR(r io.Reader) error { - return nil -} - -func (o *RelayFull) UnmarshalXDR(bs []byte) error { - return nil -} - -func (o *RelayFull) DecodeXDRFrom(xr *xdr.Reader) error { - return xr.Error() -} - -/* - -JoinSessionRequest Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Key | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Key (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct JoinSessionRequest { - opaque Key<32>; -} - -*/ - -func (o JoinSessionRequest) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o JoinSessionRequest) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o JoinSessionRequest) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o JoinSessionRequest) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o JoinSessionRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.Key); l > 32 { - return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 32) - } - xw.WriteBytes(o.Key) - return xw.Tot(), xw.Error() -} - -func (o *JoinSessionRequest) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *JoinSessionRequest) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *JoinSessionRequest) DecodeXDRFrom(xr *xdr.Reader) error { - o.Key = xr.ReadBytesMax(32) - return xr.Error() -} - -/* - -Response Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Code | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Message | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Message (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct Response { - int Code; - string Message<>; -} - -*/ - -func (o Response) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o Response) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o Response) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o Response) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o Response) EncodeXDRInto(xw *xdr.Writer) (int, error) { - xw.WriteUint32(uint32(o.Code)) - xw.WriteString(o.Message) - return xw.Tot(), xw.Error() -} - -func (o *Response) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *Response) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *Response) DecodeXDRFrom(xr *xdr.Reader) error { - o.Code = int32(xr.ReadUint32()) - o.Message = xr.ReadString() - return xr.Error() -} - -/* - -ConnectRequest Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of ID | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ ID (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct ConnectRequest { - opaque ID<32>; -} - -*/ - -func (o ConnectRequest) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o ConnectRequest) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o ConnectRequest) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o ConnectRequest) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o ConnectRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.ID); l > 32 { - return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 32) - } - xw.WriteBytes(o.ID) - return xw.Tot(), xw.Error() -} - -func (o *ConnectRequest) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *ConnectRequest) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *ConnectRequest) DecodeXDRFrom(xr *xdr.Reader) error { - o.ID = xr.ReadBytesMax(32) - return xr.Error() -} - -/* - -SessionInvitation Structure: - - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of From | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ From (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Key | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Key (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Length of Address | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -/ / -\ Address (variable length) \ -/ / -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| 0x0000 | Port | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| Server Socket (V=0 or 1) |V| -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - -struct SessionInvitation { - opaque From<32>; - opaque Key<32>; - opaque Address<32>; - unsigned int Port; - bool ServerSocket; -} - -*/ - -func (o SessionInvitation) EncodeXDR(w io.Writer) (int, error) { - var xw = xdr.NewWriter(w) - return o.EncodeXDRInto(xw) -} - -func (o SessionInvitation) MarshalXDR() ([]byte, error) { - return o.AppendXDR(make([]byte, 0, 128)) -} - -func (o SessionInvitation) MustMarshalXDR() []byte { - bs, err := o.MarshalXDR() - if err != nil { - panic(err) - } - return bs -} - -func (o SessionInvitation) AppendXDR(bs []byte) ([]byte, error) { - var aw = xdr.AppendWriter(bs) - var xw = xdr.NewWriter(&aw) - _, err := o.EncodeXDRInto(xw) - return []byte(aw), err -} - -func (o SessionInvitation) EncodeXDRInto(xw *xdr.Writer) (int, error) { - if l := len(o.From); l > 32 { - return xw.Tot(), xdr.ElementSizeExceeded("From", l, 32) - } - xw.WriteBytes(o.From) - if l := len(o.Key); l > 32 { - return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 32) - } - xw.WriteBytes(o.Key) - if l := len(o.Address); l > 32 { - return xw.Tot(), xdr.ElementSizeExceeded("Address", l, 32) - } - xw.WriteBytes(o.Address) - xw.WriteUint16(o.Port) - xw.WriteBool(o.ServerSocket) - return xw.Tot(), xw.Error() -} - -func (o *SessionInvitation) DecodeXDR(r io.Reader) error { - xr := xdr.NewReader(r) - return o.DecodeXDRFrom(xr) -} - -func (o *SessionInvitation) UnmarshalXDR(bs []byte) error { - var br = bytes.NewReader(bs) - var xr = xdr.NewReader(br) - return o.DecodeXDRFrom(xr) -} - -func (o *SessionInvitation) DecodeXDRFrom(xr *xdr.Reader) error { - o.From = xr.ReadBytesMax(32) - o.Key = xr.ReadBytesMax(32) - o.Address = xr.ReadBytesMax(32) - o.Port = xr.ReadUint16() - o.ServerSocket = xr.ReadBool() - return xr.Error() -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go deleted file mode 100644 index dad76d94..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file). - -package protocol - -import ( - "fmt" - "io" -) - -const ( - magic = 0x9E79BC40 - ProtocolName = "bep-relay" -) - -var ( - ResponseSuccess = Response{0, "success"} - ResponseNotFound = Response{1, "not found"} - ResponseAlreadyConnected = Response{2, "already connected"} - ResponseInternalError = Response{99, "internal error"} - ResponseUnexpectedMessage = Response{100, "unexpected message"} -) - -func WriteMessage(w io.Writer, message interface{}) error { - header := header{ - magic: magic, - } - - var payload []byte - var err error - - switch msg := message.(type) { - case Ping: - payload, err = msg.MarshalXDR() - header.messageType = messageTypePing - case Pong: - payload, err = msg.MarshalXDR() - header.messageType = messageTypePong - case JoinRelayRequest: - payload, err = msg.MarshalXDR() - header.messageType = messageTypeJoinRelayRequest - case JoinSessionRequest: - payload, err = msg.MarshalXDR() - header.messageType = messageTypeJoinSessionRequest - case Response: - payload, err = msg.MarshalXDR() - header.messageType = messageTypeResponse - case ConnectRequest: - payload, err = msg.MarshalXDR() - header.messageType = messageTypeConnectRequest - case SessionInvitation: - payload, err = msg.MarshalXDR() - header.messageType = messageTypeSessionInvitation - case RelayFull: - payload, err = msg.MarshalXDR() - header.messageType = messageTypeRelayFull - default: - err = fmt.Errorf("Unknown message type") - } - - if err != nil { - return err - } - - header.messageLength = int32(len(payload)) - - headerpayload, err := header.MarshalXDR() - if err != nil { - return err - } - - _, err = w.Write(append(headerpayload, payload...)) - return err -} - -func ReadMessage(r io.Reader) (interface{}, error) { - var header header - if err := header.DecodeXDR(r); err != nil { - return nil, err - } - - if header.magic != magic { - return nil, fmt.Errorf("magic mismatch") - } - - switch header.messageType { - case messageTypePing: - var msg Ping - err := msg.DecodeXDR(r) - return msg, err - case messageTypePong: - var msg Pong - err := msg.DecodeXDR(r) - return msg, err - case messageTypeJoinRelayRequest: - var msg JoinRelayRequest - err := msg.DecodeXDR(r) - return msg, err - case messageTypeJoinSessionRequest: - var msg JoinSessionRequest - err := msg.DecodeXDR(r) - return msg, err - case messageTypeResponse: - var msg Response - err := msg.DecodeXDR(r) - return msg, err - case messageTypeConnectRequest: - var msg ConnectRequest - err := msg.DecodeXDR(r) - return msg, err - case messageTypeSessionInvitation: - var msg SessionInvitation - err := msg.DecodeXDR(r) - return msg, err - case messageTypeRelayFull: - var msg RelayFull - err := msg.DecodeXDR(r) - return msg, err - } - - return nil, fmt.Errorf("Unknown message type") -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go deleted file mode 100644 index 678a717e..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package sync - -import ( - "os" - "strconv" - "strings" - "time" - - "github.com/syncthing/syncthing/lib/logger" -) - -var ( - threshold = time.Duration(100 * time.Millisecond) - l = logger.DefaultLogger.NewFacility("sync", "Mutexes") - - // We make an exception in this package and have an actual "if debug { ... - // }" variable, as it may be rather performance critical and does - // nonstandard things (from a debug logging PoV). - debug = strings.Contains(os.Getenv("STTRACE"), "sync") || os.Getenv("STTRACE") == "all" -) - -func init() { - l.SetDebug("sync", strings.Contains(os.Getenv("STTRACE"), "sync") || os.Getenv("STTRACE") == "all") - - if n, err := strconv.Atoi(os.Getenv("STLOCKTHRESHOLD")); err == nil { - threshold = time.Duration(n) * time.Millisecond - } - l.Debugf("Enabling lock logging at %v threshold", threshold) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go deleted file mode 100644 index aeb0e30f..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (C) 2015 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package sync - -import ( - "fmt" - "path/filepath" - "runtime" - "strings" - "sync" - "sync/atomic" - "time" -) - -type Mutex interface { - Lock() - Unlock() -} - -type RWMutex interface { - Mutex - RLock() - RUnlock() -} - -type WaitGroup interface { - Add(int) - Done() - Wait() -} - -func NewMutex() Mutex { - if debug { - return &loggedMutex{} - } - return &sync.Mutex{} -} - -func NewRWMutex() RWMutex { - if debug { - return &loggedRWMutex{ - unlockers: make([]string, 0), - } - } - return &sync.RWMutex{} -} - -func NewWaitGroup() WaitGroup { - if debug { - return &loggedWaitGroup{} - } - return &sync.WaitGroup{} -} - -type loggedMutex struct { - sync.Mutex - start time.Time - lockedAt string -} - -func (m *loggedMutex) Lock() { - m.Mutex.Lock() - m.start = time.Now() - m.lockedAt = getCaller() -} - -func (m *loggedMutex) Unlock() { - duration := time.Now().Sub(m.start) - if duration >= threshold { - l.Debugf("Mutex held for %v. Locked at %s unlocked at %s", duration, m.lockedAt, getCaller()) - } - m.Mutex.Unlock() -} - -type loggedRWMutex struct { - sync.RWMutex - start time.Time - lockedAt string - - logUnlockers uint32 - - unlockers []string - unlockersMut sync.Mutex -} - -func (m *loggedRWMutex) Lock() { - start := time.Now() - - atomic.StoreUint32(&m.logUnlockers, 1) - m.RWMutex.Lock() - m.logUnlockers = 0 - - m.start = time.Now() - duration := m.start.Sub(start) - - m.lockedAt = getCaller() - if duration > threshold { - l.Debugf("RWMutex took %v to lock. Locked at %s. RUnlockers while locking: %s", duration, m.lockedAt, strings.Join(m.unlockers, ", ")) - } - m.unlockers = m.unlockers[0:] -} - -func (m *loggedRWMutex) Unlock() { - duration := time.Now().Sub(m.start) - if duration >= threshold { - l.Debugf("RWMutex held for %v. Locked at %s: unlocked at %s", duration, m.lockedAt, getCaller()) - } - m.RWMutex.Unlock() -} - -func (m *loggedRWMutex) RUnlock() { - if atomic.LoadUint32(&m.logUnlockers) == 1 { - m.unlockersMut.Lock() - m.unlockers = append(m.unlockers, getCaller()) - m.unlockersMut.Unlock() - } - m.RWMutex.RUnlock() -} - -type loggedWaitGroup struct { - sync.WaitGroup -} - -func (wg *loggedWaitGroup) Wait() { - start := time.Now() - wg.WaitGroup.Wait() - duration := time.Now().Sub(start) - if duration >= threshold { - l.Debugf("WaitGroup took %v at %s", duration, getCaller()) - } -} - -func getCaller() string { - _, file, line, _ := runtime.Caller(2) - file = filepath.Join(filepath.Base(filepath.Dir(file)), filepath.Base(file)) - return fmt.Sprintf("%s:%d", file, line) -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go deleted file mode 100644 index 298b8356..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (C) 2014 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at http://mozilla.org/MPL/2.0/. - -package tlsutil - -import ( - "bufio" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "crypto/rsa" - "crypto/tls" - "crypto/x509" - "crypto/x509/pkix" - "encoding/pem" - "fmt" - "io" - "math/big" - mr "math/rand" - "net" - "os" - "time" -) - -var ( - ErrIdentificationFailed = fmt.Errorf("failed to identify socket type") -) - -// NewCertificate generates and returns a new TLS certificate. If tlsRSABits -// is greater than zero we generate an RSA certificate with the specified -// number of bits. Otherwise we create a 384 bit ECDSA certificate. -func NewCertificate(certFile, keyFile, tlsDefaultCommonName string, tlsRSABits int) (tls.Certificate, error) { - var priv interface{} - var err error - if tlsRSABits > 0 { - priv, err = rsa.GenerateKey(rand.Reader, tlsRSABits) - } else { - priv, err = ecdsa.GenerateKey(elliptic.P384(), rand.Reader) - } - if err != nil { - return tls.Certificate{}, fmt.Errorf("generate key: %s", err) - } - - notBefore := time.Now() - notAfter := time.Date(2049, 12, 31, 23, 59, 59, 0, time.UTC) - - template := x509.Certificate{ - SerialNumber: new(big.Int).SetInt64(mr.Int63()), - Subject: pkix.Name{ - CommonName: tlsDefaultCommonName, - }, - NotBefore: notBefore, - NotAfter: notAfter, - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, - BasicConstraintsValid: true, - } - - derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv) - if err != nil { - return tls.Certificate{}, fmt.Errorf("create cert: %s", err) - } - - certOut, err := os.Create(certFile) - if err != nil { - return tls.Certificate{}, fmt.Errorf("save cert: %s", err) - } - err = pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) - if err != nil { - return tls.Certificate{}, fmt.Errorf("save cert: %s", err) - } - err = certOut.Close() - if err != nil { - return tls.Certificate{}, fmt.Errorf("save cert: %s", err) - } - - keyOut, err := os.OpenFile(keyFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) - if err != nil { - return tls.Certificate{}, fmt.Errorf("save key: %s", err) - } - - block, err := pemBlockForKey(priv) - if err != nil { - return tls.Certificate{}, fmt.Errorf("save key: %s", err) - } - - err = pem.Encode(keyOut, block) - if err != nil { - return tls.Certificate{}, fmt.Errorf("save key: %s", err) - } - err = keyOut.Close() - if err != nil { - return tls.Certificate{}, fmt.Errorf("save key: %s", err) - } - - return tls.LoadX509KeyPair(certFile, keyFile) -} - -type DowngradingListener struct { - net.Listener - TLSConfig *tls.Config -} - -func (l *DowngradingListener) Accept() (net.Conn, error) { - conn, isTLS, err := l.AcceptNoWrapTLS() - - // We failed to identify the socket type, pretend that everything is fine, - // and pass it to the underlying handler, and let them deal with it. - if err == ErrIdentificationFailed { - return conn, nil - } - - if err != nil { - return conn, err - } - - if isTLS { - return tls.Server(conn, l.TLSConfig), nil - } - return conn, nil -} - -func (l *DowngradingListener) AcceptNoWrapTLS() (net.Conn, bool, error) { - conn, err := l.Listener.Accept() - if err != nil { - return nil, false, err - } - - br := bufio.NewReader(conn) - conn.SetReadDeadline(time.Now().Add(1 * time.Second)) - bs, err := br.Peek(1) - conn.SetReadDeadline(time.Time{}) - if err != nil { - // We hit a read error here, but the Accept() call succeeded so we must not return an error. - // We return the connection as is with a special error which handles this - // special case in Accept(). - return conn, false, ErrIdentificationFailed - } - - return &UnionedConnection{br, conn}, bs[0] == 0x16, nil -} - -type UnionedConnection struct { - io.Reader - net.Conn -} - -func (c *UnionedConnection) Read(b []byte) (n int, err error) { - return c.Reader.Read(b) -} - -func publicKey(priv interface{}) interface{} { - switch k := priv.(type) { - case *rsa.PrivateKey: - return &k.PublicKey - case *ecdsa.PrivateKey: - return &k.PublicKey - default: - return nil - } -} - -func pemBlockForKey(priv interface{}) (*pem.Block, error) { - switch k := priv.(type) { - case *rsa.PrivateKey: - return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)}, nil - case *ecdsa.PrivateKey: - b, err := x509.MarshalECPrivateKey(k) - if err != nil { - return nil, err - } - return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}, nil - default: - return nil, fmt.Errorf("unknown key type") - } -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go deleted file mode 100644 index 4c5ad88b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go +++ /dev/null @@ -1,18 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go deleted file mode 100644 index f540b196..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go +++ /dev/null @@ -1,140 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go deleted file mode 100644 index 8ccb0c5f..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go +++ /dev/null @@ -1,94 +0,0 @@ -// 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 ( - "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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go deleted file mode 100644 index 9b962823..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go +++ /dev/null @@ -1,210 +0,0 @@ -// 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 - } - closeConn := &conn - defer func() { - if closeConn != nil { - (*closeConn).Close() - } - }() - - host, portStr, err := net.SplitHostPort(addr) - if err != nil { - return nil, err - } - - port, err := strconv.Atoi(portStr) - if err != nil { - return nil, errors.New("proxy: failed to parse port number: " + portStr) - } - if port < 1 || port > 0xffff { - return nil, 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 nil, 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 nil, errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error()) - } - if buf[0] != 5 { - return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0]))) - } - if buf[1] == 0xff { - return nil, 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 nil, 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 nil, errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) - } - - if buf[1] != 0 { - return nil, 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 nil, 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 nil, 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 nil, 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 nil, 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 nil, errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error()) - } - bytesToDiscard = int(buf[0]) - default: - return nil, 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 nil, 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 nil, errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error()) - } - - closeConn = nil - return conn, nil -} diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go deleted file mode 100644 index 157ee789..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go +++ /dev/null @@ -1,616 +0,0 @@ -// 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 ( - "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") - - // 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() -} - -// 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 && 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 - } - } else { - n += nSrc - } - switch { - case err == ErrShortDst && (nDst > 0 || nSrc > 0): - case err == ErrShortSrc && 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 - return n, nil - case err == nil && w.n > 0: - return n, errInconsistentByteCount - default: - return n, err - } - } -} - -// Close implements the io.Closer interface. -func (w *Writer) Close() error { - for src := w.src[:w.n]; len(src) > 0; { - nDst, nSrc, err := w.t.Transform(w.dst, src, true) - if nDst == 0 { - return err - } - if _, werr := w.w.Write(w.dst[:nDst]); werr != nil { - return werr - } - if err != ErrShortDst { - return err - } - src = src[nSrc:] - } - return nil -} - -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 -} - -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 Transformer that copies src to dst. - Nop Transformer = 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 - } -} - -// 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 -} - -// RemoveFunc returns a Transformer that removes from the input all runes r for -// which f(r) is true. Illegal bytes in the input are replaced by RuneError. -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 <= 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) { - if s == "" { - return "", 0, nil - } - - t.Reset() - - // 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] - - // Avoid allocation if the transformed string is identical to the original. - // After this loop, pDst will point to the furthest point in s for which it - // could be detected that t gives equal results, src[:nSrc] will - // indicated the last processed chunk of s for which the output is not equal - // and dst[:nDst] will be the transform of this chunk. - var nDst, nSrc int - pDst := 0 // Used as index in both src and dst in this loop. - for { - n := copy(src, s[pDst:]) - nDst, nSrc, err = t.Transform(dst, src[:n], pDst+n == len(s)) - - // Note 1: we will not enter the loop with pDst == len(s) and we will - // not end the loop with it either. So if nSrc is 0, this means there is - // some kind of error from which we cannot recover given the current - // buffer sizes. We will give up in this case. - // Note 2: it is not entirely correct to simply do a bytes.Equal as - // a Transformer may buffer internally. It will work in most cases, - // though, and no harm is done if it doesn't work. - // TODO: let transformers implement an optional Spanner interface, akin - // to norm's QuickSpan. This would even allow us to avoid any allocation. - if nSrc == 0 || !bytes.Equal(dst[:nDst], src[:nSrc]) { - break - } - - if pDst += nDst; pDst == len(s) { - return s, pDst, nil - } - } - - // Move the bytes seen so far to dst. - pSrc := pDst + nSrc - if pDst+nDst <= initialBufSize { - copy(dst[pDst:], dst[:nDst]) - } else { - b := make([]byte, len(s)+nDst-nSrc) - copy(b[pDst:], dst[:nDst]) - dst = b - } - copy(dst, s[:pDst]) - pDst += nDst - - if err != nil && err != ErrShortDst && err != ErrShortSrc { - return string(dst[:pDst]), pSrc, err - } - - // Complete the string with the remainder. - for { - n := copy(src, s[pSrc:]) - nDst, nSrc, err = t.Transform(dst[pDst:], src[:n], pSrc+n == len(s)) - pDst += nDst - pSrc += nSrc - - switch err { - case nil: - if pSrc == len(s) { - return string(dst[:pDst]), pSrc, nil - } - case ErrShortDst: - // Do not grow as long as we can make progress. This may avoid - // excessive allocations. - if nDst == 0 { - dst = grow(dst, pDst) - } - case ErrShortSrc: - if nSrc == 0 { - src = grow(src, 0) - } - default: - 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) { - t.Reset() - dst := make([]byte, len(b)) - pDst, pSrc := 0, 0 - for { - nDst, nSrc, err := t.Transform(dst[pDst:], b[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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go deleted file mode 100644 index d17b278a..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go +++ /dev/null @@ -1,514 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go deleted file mode 100644 index 15a67c65..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go +++ /dev/null @@ -1,256 +0,0 @@ -// 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_QD 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: -//
* [ []] -// 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 - -func init() { - formTable = make([]*formInfo, 4) - - for i := range formTable { - f := &formInfo{} - formTable[i] = f - f.form = Form(i) - if Form(i) == NFKD || Form(i) == NFKC { - f.compatibility = true - f.info = lookupInfoNFKC - } else { - f.info = lookupInfoNFC - } - f.nextMain = nextDecomposed - if Form(i) == NFC || Form(i) == NFKC { - f.nextMain = nextComposed - f.composing = true - } - } -} - -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go deleted file mode 100644 index 045d4ccc..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go +++ /dev/null @@ -1,105 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go deleted file mode 100644 index 0a42a72d..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go +++ /dev/null @@ -1,450 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go deleted file mode 100644 index 07bdff6b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go +++ /dev/null @@ -1,978 +0,0 @@ -// 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() - if *test { - testDerived() - printTestdata() - } else { - 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;;Lo;0;L;;;;;N;;;;; -// 4DB5;;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 - 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 { - 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; 3099;;;;N;;;;; - // U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;;;; - // U+3133 HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; - // U+318E HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; - // U+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; - // U+FFDC HALFWIDTH HANGUL LETTER I;Lo;0;L; 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go deleted file mode 100644 index bcf8450d..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go +++ /dev/null @@ -1,527 +0,0 @@ -// 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. - -//go:generate go run maketables.go triegen.go -//go:generate go run maketables.go triegen.go -test - -// Package norm contains types and functions for normalizing Unicode strings. -package norm - -import "unicode/utf8" - -// 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 -} - -// 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 b[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. - // TODO: consider adding NextBoundary - 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)) -} - -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go deleted file mode 100644 index 4fa0e04b..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go +++ /dev/null @@ -1,126 +0,0 @@ -// 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 - } - } - } - panic("should not reach here") -} - -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go deleted file mode 100644 index 22508818..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go +++ /dev/null @@ -1,7587 +0,0 @@ -// This file was generated by go generate; DO NOT EDIT - -package norm - -const ( - // Version is the Unicode edition from which the tables are derived. - Version = "8.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 = 0x1869 - firstCCC = 0x2C9A - endMulti = 0x2F5C - firstLeadingCCC = 0x4A40 - firstCCCZeroExcept = 0x4A56 - firstStarterWithNLead = 0x4A7D - lastDecomp = 0x4A7F - maxDecomp = 0x8000 -) - -// decomps: 19071 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, 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, 0xE9, 0x8D, 0x8A, 0x43, - // Bytes 1480 - 14bf - 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, 0xE9, 0x9A, 0xA3, 0x43, - // Bytes 14c0 - 14ff - 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, 0xE9, 0x9D, 0x9E, 0x43, - // Bytes 1500 - 153f - 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, 0xE9, 0xA2, 0xA8, 0x43, - // Bytes 1540 - 157f - 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, 0xE9, 0xAA, 0xA8, 0x43, - // Bytes 1580 - 15bf - 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, 0xE9, 0xB7, 0xBA, 0x43, - // Bytes 15c0 - 15ff - 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, 0xE9, 0xBC, 0x8E, 0x43, - // Bytes 1600 - 163f - 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, 0xEA, 0xAC, 0xB7, 0x43, - // Bytes 1640 - 167f - 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, 0xA1, 0x9B, 0xAA, 0x44, - // Bytes 1680 - 16bf - 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, 0xF0, 0xA2, 0xAF, 0xB1, - // Bytes 16c0 - 16ff - 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, 0x44, 0xF0, 0xA3, 0xB2, - // Bytes 1700 - 173f - 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, 0x92, 0x44, 0xF0, 0xA4, - // Bytes 1740 - 177f - 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, 0xA5, 0xBC, 0x44, 0xF0, - // Bytes 1780 - 17bf - 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, 0xA6, 0x96, 0xA8, 0x44, - // Bytes 17c0 - 17ff - 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, 0xF0, 0xA7, 0xA5, 0xA6, - // Bytes 1800 - 183f - 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, 0x44, 0xF0, 0xA9, 0x92, - // Bytes 1840 - 187f - 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, 0x31, 0x2E, 0x42, 0x31, - // Bytes 1880 - 18bf - 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, 0x38, 0x42, 0x32, 0x39, - // Bytes 18c0 - 18ff - 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, 0x42, 0x34, 0x36, 0x42, - // Bytes 1900 - 193f - 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, 0x44, 0x4A, 0x42, 0x44, - // Bytes 1940 - 197f - 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, 0x44, 0x42, 0x4D, 0x56, - // Bytes 1980 - 19bf - 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, 0x42, 0x63, 0x6D, 0x42, - // Bytes 19c0 - 19ff - 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, 0x6B, 0x6C, 0x42, 0x6B, - // Bytes 1a00 - 1a3f - 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, 0x6A, 0x42, 0x6E, 0x6D, - // Bytes 1a40 - 1a7f - 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, 0x43, 0x28, 0x37, 0x29, - // Bytes 1a80 - 1abf - 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, 0x43, 0x28, 0x4E, 0x29, - // Bytes 1ac0 - 1aff - 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, 0x43, 0x28, 0x64, 0x29, - // Bytes 1b00 - 1b3f - 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, 0x43, 0x28, 0x74, 0x29, - // Bytes 1b40 - 1b7f - 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, 0x43, 0x31, 0x38, 0x2E, - // Bytes 1b80 - 1bbf - 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, 0x43, 0x50, 0x50, 0x56, - // Bytes 1bc0 - 1bff - 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, 0x43, 0x64, 0x6D, 0x33, - // Bytes 1c00 - 1c3f - 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, 0x43, 0x6D, 0x6D, 0x33, - // Bytes 1c40 - 1c7f - 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, 0x44, 0x28, 0x31, 0x30, - // Bytes 1c80 - 1cbf - 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, 0x84, 0x44, 0x31, 0xE6, - // Bytes 1cc0 - 1cff - 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, 0x97, 0xA5, 0x44, 0x35, - // Bytes 1d00 - 1d3f - 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, 0xE6, 0x9C, 0x88, 0x44, - // Bytes 1d40 - 1d7f - 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, 0xD7, 0x90, 0xD7, 0x9C, - // Bytes 1d80 - 1dbf - 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, 0x44, 0xD8, 0xAA, 0xD8, - // Bytes 1dc0 - 1dff - 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, 0x85, 0x44, 0xD8, 0xAB, - // Bytes 1e00 - 1e3f - 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, 0xD8, 0xAC, 0x44, 0xD8, - // Bytes 1e40 - 1e7f - 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, 0xB4, 0xD8, 0xAC, 0x44, - // Bytes 1e80 - 1ebf - 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, 0xD8, 0xB5, 0xD9, 0x8A, - // Bytes 1ec0 - 1eff - 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, 0x44, 0xD8, 0xB9, 0xD8, - // Bytes 1f00 - 1f3f - 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, 0x89, 0x44, 0xD9, 0x81, - // Bytes 1f40 - 1f7f - 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, 0xD9, 0x8A, 0x44, 0xD9, - // Bytes 1f80 - 1fbf - 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, 0x85, 0xD9, 0x85, 0x44, - // Bytes 1fc0 - 1fff - 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, 0xD9, 0x87, 0xD8, 0xAC, - // Bytes 2000 - 203f - 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, 0x44, 0xD9, 0x8A, 0xD9, - // Bytes 2040 - 207f - 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, 0xE1, 0x84, 0x8B, 0x29, - // Bytes 2080 - 20bf - 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, 0x45, 0x28, 0xE4, 0xBA, - // Bytes 20c0 - 20ff - 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, 0x8D, 0x29, 0x45, 0x28, - // Bytes 2100 - 213f - 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, 0xE7, 0x81, 0xAB, 0x29, - // Bytes 2140 - 217f - 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, 0x45, 0x30, 0xE2, 0x81, - // Bytes 2180 - 21bf - 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, 0x97, 0xA5, 0x45, 0x31, - // Bytes 21c0 - 21ff - 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, 0x38, 0xE7, 0x82, 0xB9, - // Bytes 2200 - 223f - 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, 0x45, 0x32, 0x30, 0xE6, - // Bytes 2240 - 227f - 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, 0x97, 0xA5, 0x45, 0x32, - // Bytes 2280 - 22bf - 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, 0xE2, 0x81, 0x84, 0x38, - // Bytes 22c0 - 22ff - 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, 0x95, 0x73, 0x32, 0x46, - // Bytes 2300 - 233f - 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, 0xD9, 0x89, 0x46, 0xD8, - // Bytes 2340 - 237f - 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, 0xAD, 0x46, 0xD8, 0xAC, - // Bytes 2380 - 23bf - 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, 0x46, 0xD8, 0xB3, 0xD8, - // Bytes 23c0 - 23ff - 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, 0xD8, 0xB5, 0xD8, 0xAD, - // Bytes 2400 - 243f - 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, 0xB7, 0xD9, 0x85, 0xD9, - // Bytes 2440 - 247f - 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, 0xD8, 0xAE, 0xD9, 0x85, - // Bytes 2480 - 24bf - 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, 0xAC, 0xD9, 0x85, 0x46, - // Bytes 24c0 - 24ff - 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, 0xD8, 0xAE, 0x46, 0xD9, - // Bytes 2500 - 253f - 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, 0x8A, 0x46, 0xD9, 0x86, - // Bytes 2540 - 257f - 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, 0x46, 0xD9, 0x87, 0xD9, - // Bytes 2580 - 25bf - 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, 0xD9, 0x8A, 0xD9, 0x94, - // Bytes 25c0 - 25ff - 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, 0x8A, 0xD9, 0x94, 0xDB, - // Bytes 2600 - 263f - 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, 0x80, 0xE0, 0xBE, 0xB5, - // Bytes 2640 - 267f - 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, 0xE0, 0xBE, 0xB7, 0x46, - // Bytes 2680 - 26bf - 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, 0x83, 0xAD, 0x46, 0xE3, - // Bytes 26c0 - 26ff - 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, 0xA3, 0x46, 0xE5, 0xB9, - // Bytes 2700 - 273f - 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, 0x29, 0x48, 0x28, 0xE1, - // Bytes 2740 - 277f - 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, 0x48, 0x28, 0xE1, 0x84, - // Bytes 2780 - 27bf - 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, 0xD8, 0xA7, 0xD9, 0x84, - // Bytes 27c0 - 27ff - 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, 0x80, 0xB2, 0xE2, 0x80, - // Bytes 2800 - 283f - 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, 0x9D, 0xE3, 0x80, 0x95, - // Bytes 2840 - 287f - 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, 0x49, 0xE3, 0x82, 0xA2, - // Bytes 2880 - 28bf - 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, 0xE3, 0x83, 0xBC, 0xE3, - // Bytes 28c0 - 28ff - 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, 0x83, 0x88, 0x49, 0xE3, - // Bytes 2900 - 293f - 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, 0x83, 0x9B, 0xE3, 0x83, - // Bytes 2940 - 297f - 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, 0xA2, 0xE3, 0x83, 0xB3, - // Bytes 2980 - 29bf - 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, 0x83, 0xBC, 0x4C, 0xE3, - // Bytes 29c0 - 29ff - 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, 0xE3, 0x83, 0xBC, 0x4C, - // Bytes 2a00 - 2a3f - 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, 0xBC, 0xE3, 0x82, 0xB9, - // Bytes 2a40 - 2a7f - 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, 0x83, 0x8B, 0xE3, 0x83, - // Bytes 2a80 - 2abf - 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, 0xE3, 0x83, 0x88, 0xE3, - // Bytes 2ac0 - 2aff - 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, 0x84, 0x20, 0xD8, 0xAC, - // Bytes 2b00 - 2b3f - 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, 0xE3, 0x83, 0xB3, 0xE3, - // Bytes 2b40 - 2b7f - 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, 0xE3, 0x83, 0xB3, 0xE3, - // Bytes 2b80 - 2bbf - 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, 0x82, 0xAD, 0xE3, 0x82, - // Bytes 2bc0 - 2bff - 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, 0xA9, 0xE3, 0x83, 0xA0, - // Bytes 2c00 - 2c3f - 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, 0xE3, 0x83, 0xAB, 0x52, - // Bytes 2c40 - 2c7f - 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, 0x84, 0xD9, 0x89, 0x20, - // Bytes 2c80 - 2cbf - 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, 0xAD, 0x87, 0xE0, 0xAD, - // Bytes 2cc0 - 2cff - 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, 0xB5, 0x86, 0xE0, 0xB4, - // Bytes 2d00 - 2d3f - 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, 0xAC, 0x8B, 0xE1, 0xAC, - // Bytes 2d40 - 2d7f - 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, 0x91, 0x84, 0xB1, 0xF0, - // Bytes 2d80 - 2dbf - 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, 0x91, 0x92, 0xBD, 0x01, - // Bytes 2dc0 - 2dff - 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, 0x46, 0xD9, 0x84, 0xD8, - // Bytes 2e00 - 2e3f - 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, 0x46, 0xE1, 0x84, 0x87, - // Bytes 2e40 - 2e7f - 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, 0x46, 0xE1, 0x84, 0x91, - // Bytes 2e80 - 2ebf - 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, 0x9B, 0xE3, 0x82, 0x9A, - // Bytes 2ec0 - 2eff - 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, 0x82, 0xAF, 0xE3, 0x82, - // Bytes 2f00 - 2f3f - 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, 0xE3, 0x82, 0xA1, 0xE3, - // Bytes 2f40 - 2f7f - 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, 0xCC, 0x84, 0xC9, 0x03, - // Bytes 2f80 - 2fbf - 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, 0x43, 0xCC, 0x8C, 0xC9, - // Bytes 2fc0 - 2fff - 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, 0x03, 0x45, 0xCC, 0x89, - // Bytes 3000 - 303f - 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, 0xC9, 0x03, 0x47, 0xCC, - // Bytes 3040 - 307f - 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, 0x83, 0xC9, 0x03, 0x49, - // Bytes 3080 - 30bf - 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, 0xCC, 0x8C, 0xC9, 0x03, - // Bytes 30c0 - 30ff - 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, 0x4E, 0xCC, 0x81, 0xC9, - // Bytes 3100 - 313f - 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, 0x03, 0x4F, 0xCC, 0x8C, - // Bytes 3140 - 317f - 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, 0xC9, 0x03, 0x53, 0xCC, - // Bytes 3180 - 31bf - 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, 0x82, 0xC9, 0x03, 0x55, - // Bytes 31c0 - 31ff - 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, 0xCC, 0x83, 0xC9, 0x03, - // Bytes 3200 - 323f - 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, 0x59, 0xCC, 0x83, 0xC9, - // Bytes 3240 - 327f - 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, 0x03, 0x61, 0xCC, 0x81, - // Bytes 3280 - 32bf - 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, 0xC9, 0x03, 0x63, 0xCC, - // Bytes 32c0 - 32ff - 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, 0x86, 0xC9, 0x03, 0x65, - // Bytes 3300 - 333f - 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, 0xCC, 0x84, 0xC9, 0x03, - // Bytes 3340 - 337f - 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, 0x69, 0xCC, 0x80, 0xC9, - // Bytes 3380 - 33bf - 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, 0x03, 0x6A, 0xCC, 0x82, - // Bytes 33c0 - 33ff - 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, 0xC9, 0x03, 0x6D, 0xCC, - // Bytes 3400 - 343f - 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, 0x81, 0xC9, 0x03, 0x6F, - // Bytes 3440 - 347f - 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, 0xCC, 0x91, 0xC9, 0x03, - // Bytes 3480 - 34bf - 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, 0x74, 0xCC, 0xAD, 0xB5, - // Bytes 34c0 - 34ff - 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, 0x03, 0x75, 0xCC, 0xA4, - // Bytes 3500 - 353f - 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, 0xB5, 0x03, 0x78, 0xCC, - // Bytes 3540 - 357f - 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, 0x81, 0xC9, 0x03, 0x7A, - // Bytes 3580 - 35bf - 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, 0xC3, 0xA6, 0xCC, 0x81, - // Bytes 35c0 - 35ff - 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, 0xD9, 0x04, 0xCE, 0x95, - // Bytes 3600 - 363f - 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, 0xCC, 0x80, 0xC9, 0x04, - // Bytes 3640 - 367f - 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, 0xCE, 0xB1, 0xCC, 0x84, - // Bytes 3680 - 36bf - 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, 0xC9, 0x04, 0xCE, 0xBF, - // Bytes 36c0 - 36ff - 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, 0xCC, 0x81, 0xC9, 0x04, - // Bytes 3700 - 373f - 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, 0xD0, 0x97, 0xCC, 0x88, - // Bytes 3740 - 377f - 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, 0xC9, 0x04, 0xD0, 0xA7, - // Bytes 3780 - 37bf - 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, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 37c0 - 37ff - 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, 0xD1, 0x83, 0xCC, 0x8B, - // Bytes 3800 - 383f - 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, 0xC9, 0x04, 0xD8, 0xA7, - // Bytes 3840 - 387f - 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, 0x41, 0xCC, 0x82, 0xCC, - // Bytes 3880 - 38bf - 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, 0xCC, 0xA3, 0xCC, 0x82, - // Bytes 38c0 - 38ff - 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, 0xA3, 0xCC, 0x82, 0xCA, - // Bytes 3900 - 393f - 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, 0xCC, 0x84, 0xCA, 0x05, - // Bytes 3940 - 397f - 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, 0x89, 0xCA, 0x05, 0x4F, - // Bytes 3980 - 39bf - 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, 0xCA, 0x05, 0x55, 0xCC, - // Bytes 39c0 - 39ff - 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, 0x05, 0x61, 0xCC, 0x82, - // Bytes 3a00 - 3a3f - 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, 0x61, 0xCC, 0x88, 0xCC, - // Bytes 3a40 - 3a7f - 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, 0xCC, 0x84, 0xCC, 0x80, - // Bytes 3a80 - 3abf - 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, 0x82, 0xCC, 0x89, 0xCA, - // Bytes 3ac0 - 3aff - 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, 0xCC, 0x81, 0xCA, 0x05, - // Bytes 3b00 - 3b3f - 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, 0x87, 0xCA, 0x05, 0x75, - // Bytes 3b40 - 3b7f - 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, 0xCA, 0x05, 0x75, 0xCC, - // Bytes 3b80 - 3bbf - 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, 0x05, 0xE2, 0x86, 0x92, - // Bytes 3bc0 - 3bff - 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, 0xE2, 0x88, 0xA5, 0xCC, - // Bytes 3c00 - 3c3f - 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, 0x89, 0xB2, 0xCC, 0xB8, - // Bytes 3c40 - 3c7f - 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, 0x83, 0xCC, 0xB8, 0x05, - // Bytes 3c80 - 3cbf - 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, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3cc0 - 3cff - 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, 0x06, 0xCE, 0x95, 0xCC, - // Bytes 3d00 - 3d3f - 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, 0x06, 0xCE, 0x99, 0xCC, - // Bytes 3d40 - 3d7f - 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, 0x06, 0xCE, 0xA9, 0xCC, - // Bytes 3d80 - 3dbf - 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, 0x06, 0xCE, 0xB5, 0xCC, - // Bytes 3dc0 - 3dff - 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, 0x06, 0xCE, 0xB9, 0xCC, - // Bytes 3e00 - 3e3f - 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, 0x06, 0xCE, 0xB9, 0xCC, - // Bytes 3e40 - 3e7f - 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, 0x06, 0xCF, 0x85, 0xCC, - // Bytes 3e80 - 3ebf - 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, 0x06, 0xCF, 0x89, 0xCC, - // Bytes 3ec0 - 3eff - 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, 0x06, 0xE3, 0x81, 0x86, - // Bytes 3f00 - 3f3f - 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, 0x06, 0xE3, 0x81, 0x99, - // Bytes 3f40 - 3f7f - 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, 0x06, 0xE3, 0x81, 0xAF, - // Bytes 3f80 - 3fbf - 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, 0x06, 0xE3, 0x81, 0xBB, - // Bytes 3fc0 - 3fff - 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, 0x06, 0xE3, 0x82, 0xB3, - // Bytes 4000 - 403f - 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, 0x06, 0xE3, 0x83, 0x84, - // Bytes 4040 - 407f - 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, 0x06, 0xE3, 0x83, 0x95, - // Bytes 4080 - 40bf - 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, 0x06, 0xE3, 0x83, 0xB2, - // Bytes 40c0 - 40ff - 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, 0x85, 0xDB, 0x08, 0xCE, - // Bytes 4100 - 413f - 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, 0x97, 0xCC, 0x94, 0xCD, - // Bytes 4140 - 417f - 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, 0x82, 0xCD, 0x85, 0xDB, - // Bytes 4180 - 41bf - 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, 0x08, 0xCE, 0xB7, 0xCC, - // Bytes 41c0 - 41ff - 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, 0x93, 0xCC, 0x80, 0xCD, - // Bytes 4200 - 423f - 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, 0xBA, 0x09, 0x08, 0xF0, - // Bytes 4240 - 427f - 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, 0x8A, 0xC9, 0x43, 0x20, - // Bytes 4280 - 42bf - 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, 0xD9, 0x8F, 0x69, 0x43, - // Bytes 42c0 - 42ff - 0x20, 0xD9, 0x90, 0x6D, 0x43, 0x20, 0xD9, 0x91, - 0x71, 0x43, 0x20, 0xD9, 0x92, 0x75, 0x43, 0x41, - 0xCC, 0x8A, 0xC9, 0x43, 0x73, 0xCC, 0x87, 0xC9, - 0x43, 0xE1, 0x85, 0xA1, 0x01, 0x43, 0xE1, 0x85, - 0xA2, 0x01, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x43, - 0xE1, 0x85, 0xA4, 0x01, 0x43, 0xE1, 0x85, 0xA5, - 0x01, 0x43, 0xE1, 0x85, 0xA6, 0x01, 0x43, 0xE1, - 0x85, 0xA7, 0x01, 0x43, 0xE1, 0x85, 0xA8, 0x01, - // Bytes 4300 - 433f - 0x43, 0xE1, 0x85, 0xA9, 0x01, 0x43, 0xE1, 0x85, - 0xAA, 0x01, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x43, - 0xE1, 0x85, 0xAC, 0x01, 0x43, 0xE1, 0x85, 0xAD, - 0x01, 0x43, 0xE1, 0x85, 0xAE, 0x01, 0x43, 0xE1, - 0x85, 0xAF, 0x01, 0x43, 0xE1, 0x85, 0xB0, 0x01, - 0x43, 0xE1, 0x85, 0xB1, 0x01, 0x43, 0xE1, 0x85, - 0xB2, 0x01, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x43, - 0xE1, 0x85, 0xB4, 0x01, 0x43, 0xE1, 0x85, 0xB5, - // Bytes 4340 - 437f - 0x01, 0x43, 0xE1, 0x86, 0xAA, 0x01, 0x43, 0xE1, - 0x86, 0xAC, 0x01, 0x43, 0xE1, 0x86, 0xAD, 0x01, - 0x43, 0xE1, 0x86, 0xB0, 0x01, 0x43, 0xE1, 0x86, - 0xB1, 0x01, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x43, - 0xE1, 0x86, 0xB3, 0x01, 0x43, 0xE1, 0x86, 0xB4, - 0x01, 0x43, 0xE1, 0x86, 0xB5, 0x01, 0x44, 0x20, - 0xE3, 0x82, 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, - 0x9A, 0x0D, 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, - // Bytes 4380 - 43bf - 0x44, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0x95, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, - 0x81, 0xC9, 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, - // Bytes 43c0 - 43ff - 0x81, 0xC9, 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, - 0x44, 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, - 0x85, 0xCC, 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, - // Bytes 4400 - 443f - 0x93, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, - 0x44, 0xD7, 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, - // Bytes 4440 - 447f - 0x44, 0xD7, 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0x9E, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, - 0xBC, 0x41, 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, - // Bytes 4480 - 44bf - 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, - 0x44, 0xD7, 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, - 0xAA, 0xD6, 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, - // Bytes 44c0 - 44ff - 0x80, 0xD9, 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, - 0x8E, 0x65, 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, - 0x44, 0xD9, 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, - // Bytes 4500 - 453f - 0x44, 0xDB, 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, - 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, - 0x88, 0xCC, 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, - // Bytes 4540 - 457f - 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, - 0x8C, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, - 0xD9, 0x91, 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, - // Bytes 4580 - 45bf - 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, - 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, - 0xA9, 0xD6, 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, - // Bytes 45c0 - 45ff - 0xA4, 0x97, 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, - 0xA4, 0x9C, 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, - 0xA4, 0xA1, 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, - // Bytes 4600 - 463f - 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, - 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, - 0xA8, 0x97, 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, - // Bytes 4640 - 467f - 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, - 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, - 0xBE, 0xB3, 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, - // Bytes 4680 - 46bf - 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, - 0xBE, 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, - 0x9E, 0x49, 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, - // Bytes 46c0 - 46ff - 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 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, - // Bytes 4700 - 473f - 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, - 0xBA, 0xF0, 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, - // Bytes 4740 - 477f - 0x82, 0xC9, 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, - 0x45, 0xCC, 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, - 0xA5, 0x83, 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, - // Bytes 4780 - 47bf - 0xCC, 0xA8, 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, - 0x83, 0x53, 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, - 0x8C, 0xC9, 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, - // Bytes 47c0 - 47ff - 0x61, 0xCC, 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, - 0xB5, 0x83, 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, - 0xCC, 0x82, 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, - // Bytes 4800 - 483f - 0x83, 0x6F, 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, - 0x9B, 0xAD, 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, - 0x6F, 0xCC, 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, - // Bytes 4840 - 487f - 0x93, 0xC9, 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, - 0x95, 0xCC, 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, - // Bytes 4880 - 48bf - 0xA9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, - 0x84, 0xCE, 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, - // Bytes 48c0 - 48ff - 0x84, 0xCE, 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, - 0xB7, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, - 0x82, 0xC9, 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, - // Bytes 4900 - 493f - 0x94, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, - 0x84, 0xCF, 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, - 0x89, 0xCC, 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, - // Bytes 4940 - 497f - 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x86, 0xCE, 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, - // Bytes 4980 - 49bf - 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x86, 0xCE, 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, - // Bytes 49c0 - 49ff - 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x86, 0xCE, 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, - // Bytes 4a00 - 4a3f - 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x86, 0xCF, 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, - // Bytes 4a40 - 4a7f - 0x42, 0xCC, 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, - 0xC9, 0x32, 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x44, - 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, 0x43, 0xE3, - 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, 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 < 0xC0: - 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 < 0xC0: - 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: 10270 bytes (10.03 KiB). Checksum: d7e415c88f2e510a. -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: 0x2f6b, 0xc1: 0x2f70, 0xc2: 0x471a, 0xc3: 0x2f75, 0xc4: 0x4729, 0xc5: 0x472e, - 0xc6: 0xa000, 0xc7: 0x4738, 0xc8: 0x2fde, 0xc9: 0x2fe3, 0xca: 0x473d, 0xcb: 0x2ff7, - 0xcc: 0x306a, 0xcd: 0x306f, 0xce: 0x3074, 0xcf: 0x4751, 0xd1: 0x3100, - 0xd2: 0x3123, 0xd3: 0x3128, 0xd4: 0x475b, 0xd5: 0x4760, 0xd6: 0x476f, - 0xd8: 0xa000, 0xd9: 0x31af, 0xda: 0x31b4, 0xdb: 0x31b9, 0xdc: 0x47a1, 0xdd: 0x3231, - 0xe0: 0x3277, 0xe1: 0x327c, 0xe2: 0x47ab, 0xe3: 0x3281, - 0xe4: 0x47ba, 0xe5: 0x47bf, 0xe6: 0xa000, 0xe7: 0x47c9, 0xe8: 0x32ea, 0xe9: 0x32ef, - 0xea: 0x47ce, 0xeb: 0x3303, 0xec: 0x337b, 0xed: 0x3380, 0xee: 0x3385, 0xef: 0x47e2, - 0xf1: 0x3411, 0xf2: 0x3434, 0xf3: 0x3439, 0xf4: 0x47ec, 0xf5: 0x47f1, - 0xf6: 0x4800, 0xf8: 0xa000, 0xf9: 0x34c5, 0xfa: 0x34ca, 0xfb: 0x34cf, - 0xfc: 0x4832, 0xfd: 0x354c, 0xff: 0x3565, - // Block 0x4, offset 0x100 - 0x100: 0x2f7a, 0x101: 0x3286, 0x102: 0x471f, 0x103: 0x47b0, 0x104: 0x2f98, 0x105: 0x32a4, - 0x106: 0x2fac, 0x107: 0x32b8, 0x108: 0x2fb1, 0x109: 0x32bd, 0x10a: 0x2fb6, 0x10b: 0x32c2, - 0x10c: 0x2fbb, 0x10d: 0x32c7, 0x10e: 0x2fc5, 0x10f: 0x32d1, - 0x112: 0x4742, 0x113: 0x47d3, 0x114: 0x2fed, 0x115: 0x32f9, 0x116: 0x2ff2, 0x117: 0x32fe, - 0x118: 0x3010, 0x119: 0x331c, 0x11a: 0x3001, 0x11b: 0x330d, 0x11c: 0x3029, 0x11d: 0x3335, - 0x11e: 0x3033, 0x11f: 0x333f, 0x120: 0x3038, 0x121: 0x3344, 0x122: 0x3042, 0x123: 0x334e, - 0x124: 0x3047, 0x125: 0x3353, 0x128: 0x3079, 0x129: 0x338a, - 0x12a: 0x307e, 0x12b: 0x338f, 0x12c: 0x3083, 0x12d: 0x3394, 0x12e: 0x30a6, 0x12f: 0x33b2, - 0x130: 0x3088, 0x134: 0x30b0, 0x135: 0x33bc, - 0x136: 0x30c4, 0x137: 0x33d5, 0x139: 0x30ce, 0x13a: 0x33df, 0x13b: 0x30d8, - 0x13c: 0x33e9, 0x13d: 0x30d3, 0x13e: 0x33e4, - // Block 0x5, offset 0x140 - 0x143: 0x30fb, 0x144: 0x340c, 0x145: 0x3114, - 0x146: 0x3425, 0x147: 0x310a, 0x148: 0x341b, - 0x14c: 0x4765, 0x14d: 0x47f6, 0x14e: 0x312d, 0x14f: 0x343e, 0x150: 0x3137, 0x151: 0x3448, - 0x154: 0x3155, 0x155: 0x3466, 0x156: 0x316e, 0x157: 0x347f, - 0x158: 0x315f, 0x159: 0x3470, 0x15a: 0x4788, 0x15b: 0x4819, 0x15c: 0x3178, 0x15d: 0x3489, - 0x15e: 0x3187, 0x15f: 0x3498, 0x160: 0x478d, 0x161: 0x481e, 0x162: 0x31a0, 0x163: 0x34b6, - 0x164: 0x3191, 0x165: 0x34a7, 0x168: 0x4797, 0x169: 0x4828, - 0x16a: 0x479c, 0x16b: 0x482d, 0x16c: 0x31be, 0x16d: 0x34d4, 0x16e: 0x31c8, 0x16f: 0x34de, - 0x170: 0x31cd, 0x171: 0x34e3, 0x172: 0x31eb, 0x173: 0x3501, 0x174: 0x320e, 0x175: 0x3524, - 0x176: 0x3236, 0x177: 0x3551, 0x178: 0x324a, 0x179: 0x3259, 0x17a: 0x3579, 0x17b: 0x3263, - 0x17c: 0x3583, 0x17d: 0x3268, 0x17e: 0x3588, 0x17f: 0xa000, - // Block 0x6, offset 0x180 - 0x184: 0x8100, 0x185: 0x8100, - 0x186: 0x8100, - 0x18d: 0x2f84, 0x18e: 0x3290, 0x18f: 0x3092, 0x190: 0x339e, 0x191: 0x313c, - 0x192: 0x344d, 0x193: 0x31d2, 0x194: 0x34e8, 0x195: 0x39cb, 0x196: 0x3b5a, 0x197: 0x39c4, - 0x198: 0x3b53, 0x199: 0x39d2, 0x19a: 0x3b61, 0x19b: 0x39bd, 0x19c: 0x3b4c, - 0x19e: 0x38ac, 0x19f: 0x3a3b, 0x1a0: 0x38a5, 0x1a1: 0x3a34, 0x1a2: 0x35af, 0x1a3: 0x35c1, - 0x1a6: 0x303d, 0x1a7: 0x3349, 0x1a8: 0x30ba, 0x1a9: 0x33cb, - 0x1aa: 0x477e, 0x1ab: 0x480f, 0x1ac: 0x398c, 0x1ad: 0x3b1b, 0x1ae: 0x35d3, 0x1af: 0x35d9, - 0x1b0: 0x33c1, 0x1b4: 0x3024, 0x1b5: 0x3330, - 0x1b8: 0x30f6, 0x1b9: 0x3407, 0x1ba: 0x38b3, 0x1bb: 0x3a42, - 0x1bc: 0x35a9, 0x1bd: 0x35bb, 0x1be: 0x35b5, 0x1bf: 0x35c7, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f89, 0x1c1: 0x3295, 0x1c2: 0x2f8e, 0x1c3: 0x329a, 0x1c4: 0x3006, 0x1c5: 0x3312, - 0x1c6: 0x300b, 0x1c7: 0x3317, 0x1c8: 0x3097, 0x1c9: 0x33a3, 0x1ca: 0x309c, 0x1cb: 0x33a8, - 0x1cc: 0x3141, 0x1cd: 0x3452, 0x1ce: 0x3146, 0x1cf: 0x3457, 0x1d0: 0x3164, 0x1d1: 0x3475, - 0x1d2: 0x3169, 0x1d3: 0x347a, 0x1d4: 0x31d7, 0x1d5: 0x34ed, 0x1d6: 0x31dc, 0x1d7: 0x34f2, - 0x1d8: 0x3182, 0x1d9: 0x3493, 0x1da: 0x319b, 0x1db: 0x34b1, - 0x1de: 0x3056, 0x1df: 0x3362, - 0x1e6: 0x4724, 0x1e7: 0x47b5, 0x1e8: 0x474c, 0x1e9: 0x47dd, - 0x1ea: 0x395b, 0x1eb: 0x3aea, 0x1ec: 0x3938, 0x1ed: 0x3ac7, 0x1ee: 0x476a, 0x1ef: 0x47fb, - 0x1f0: 0x3954, 0x1f1: 0x3ae3, 0x1f2: 0x3240, 0x1f3: 0x355b, - // 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: 0x4a40, 0x241: 0x4a45, 0x242: 0x9932, 0x243: 0x4a4a, 0x244: 0x4a4f, 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: 0x359d, - 0x286: 0x35e5, 0x287: 0x00ce, 0x288: 0x3603, 0x289: 0x360f, 0x28a: 0x3621, - 0x28c: 0x363f, 0x28e: 0x3651, 0x28f: 0x366f, 0x290: 0x3e04, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3633, 0x2ab: 0x3663, 0x2ac: 0x4890, 0x2ad: 0x3693, 0x2ae: 0x48ba, 0x2af: 0x36a5, - 0x2b0: 0x3e6c, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x371d, 0x2c1: 0x3729, 0x2c3: 0x3717, - 0x2c6: 0xa000, 0x2c7: 0x3705, - 0x2cc: 0x3759, 0x2cd: 0x3741, 0x2ce: 0x376b, 0x2d0: 0xa000, - 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x374d, 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: 0x37d1, 0x2fa: 0xa000, - 0x2fe: 0xa000, - // Block 0xc, offset 0x300 - 0x301: 0x372f, 0x302: 0x37b3, - 0x310: 0x370b, 0x311: 0x378f, - 0x312: 0x3711, 0x313: 0x3795, 0x316: 0x3723, 0x317: 0x37a7, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3825, 0x31b: 0x382b, 0x31c: 0x3735, 0x31d: 0x37b9, - 0x31e: 0x373b, 0x31f: 0x37bf, 0x322: 0x3747, 0x323: 0x37cb, - 0x324: 0x3753, 0x325: 0x37d7, 0x326: 0x375f, 0x327: 0x37e3, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3831, 0x32b: 0x3837, 0x32c: 0x3789, 0x32d: 0x380d, 0x32e: 0x3765, 0x32f: 0x37e9, - 0x330: 0x3771, 0x331: 0x37f5, 0x332: 0x3777, 0x333: 0x37fb, 0x334: 0x377d, 0x335: 0x3801, - 0x338: 0x3783, 0x339: 0x3807, - // 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: 0x2d22, 0x3c7: 0xa000, 0x3c8: 0x2d2a, 0x3c9: 0xa000, 0x3ca: 0x2d32, 0x3cb: 0xa000, - 0x3cc: 0x2d3a, 0x3cd: 0xa000, 0x3ce: 0x2d42, 0x3d1: 0xa000, - 0x3d2: 0x2d4a, - 0x3f4: 0x8102, 0x3f5: 0x9900, - 0x3fa: 0xa000, 0x3fb: 0x2d52, - 0x3fc: 0xa000, 0x3fd: 0x2d5a, 0x3fe: 0xa000, 0x3ff: 0xa000, - // Block 0x10, offset 0x400 - 0x400: 0x2f93, 0x401: 0x329f, 0x402: 0x2f9d, 0x403: 0x32a9, 0x404: 0x2fa2, 0x405: 0x32ae, - 0x406: 0x2fa7, 0x407: 0x32b3, 0x408: 0x38c8, 0x409: 0x3a57, 0x40a: 0x2fc0, 0x40b: 0x32cc, - 0x40c: 0x2fca, 0x40d: 0x32d6, 0x40e: 0x2fd9, 0x40f: 0x32e5, 0x410: 0x2fcf, 0x411: 0x32db, - 0x412: 0x2fd4, 0x413: 0x32e0, 0x414: 0x38eb, 0x415: 0x3a7a, 0x416: 0x38f2, 0x417: 0x3a81, - 0x418: 0x3015, 0x419: 0x3321, 0x41a: 0x301a, 0x41b: 0x3326, 0x41c: 0x3900, 0x41d: 0x3a8f, - 0x41e: 0x301f, 0x41f: 0x332b, 0x420: 0x302e, 0x421: 0x333a, 0x422: 0x304c, 0x423: 0x3358, - 0x424: 0x305b, 0x425: 0x3367, 0x426: 0x3051, 0x427: 0x335d, 0x428: 0x3060, 0x429: 0x336c, - 0x42a: 0x3065, 0x42b: 0x3371, 0x42c: 0x30ab, 0x42d: 0x33b7, 0x42e: 0x3907, 0x42f: 0x3a96, - 0x430: 0x30b5, 0x431: 0x33c6, 0x432: 0x30bf, 0x433: 0x33d0, 0x434: 0x30c9, 0x435: 0x33da, - 0x436: 0x4756, 0x437: 0x47e7, 0x438: 0x390e, 0x439: 0x3a9d, 0x43a: 0x30e2, 0x43b: 0x33f3, - 0x43c: 0x30dd, 0x43d: 0x33ee, 0x43e: 0x30e7, 0x43f: 0x33f8, - // Block 0x11, offset 0x440 - 0x440: 0x30ec, 0x441: 0x33fd, 0x442: 0x30f1, 0x443: 0x3402, 0x444: 0x3105, 0x445: 0x3416, - 0x446: 0x310f, 0x447: 0x3420, 0x448: 0x311e, 0x449: 0x342f, 0x44a: 0x3119, 0x44b: 0x342a, - 0x44c: 0x3931, 0x44d: 0x3ac0, 0x44e: 0x393f, 0x44f: 0x3ace, 0x450: 0x3946, 0x451: 0x3ad5, - 0x452: 0x394d, 0x453: 0x3adc, 0x454: 0x314b, 0x455: 0x345c, 0x456: 0x3150, 0x457: 0x3461, - 0x458: 0x315a, 0x459: 0x346b, 0x45a: 0x4783, 0x45b: 0x4814, 0x45c: 0x3993, 0x45d: 0x3b22, - 0x45e: 0x3173, 0x45f: 0x3484, 0x460: 0x317d, 0x461: 0x348e, 0x462: 0x4792, 0x463: 0x4823, - 0x464: 0x399a, 0x465: 0x3b29, 0x466: 0x39a1, 0x467: 0x3b30, 0x468: 0x39a8, 0x469: 0x3b37, - 0x46a: 0x318c, 0x46b: 0x349d, 0x46c: 0x3196, 0x46d: 0x34ac, 0x46e: 0x31aa, 0x46f: 0x34c0, - 0x470: 0x31a5, 0x471: 0x34bb, 0x472: 0x31e6, 0x473: 0x34fc, 0x474: 0x31f5, 0x475: 0x350b, - 0x476: 0x31f0, 0x477: 0x3506, 0x478: 0x39af, 0x479: 0x3b3e, 0x47a: 0x39b6, 0x47b: 0x3b45, - 0x47c: 0x31fa, 0x47d: 0x3510, 0x47e: 0x31ff, 0x47f: 0x3515, - // Block 0x12, offset 0x480 - 0x480: 0x3204, 0x481: 0x351a, 0x482: 0x3209, 0x483: 0x351f, 0x484: 0x3218, 0x485: 0x352e, - 0x486: 0x3213, 0x487: 0x3529, 0x488: 0x321d, 0x489: 0x3538, 0x48a: 0x3222, 0x48b: 0x353d, - 0x48c: 0x3227, 0x48d: 0x3542, 0x48e: 0x3245, 0x48f: 0x3560, 0x490: 0x325e, 0x491: 0x357e, - 0x492: 0x326d, 0x493: 0x358d, 0x494: 0x3272, 0x495: 0x3592, 0x496: 0x3376, 0x497: 0x34a2, - 0x498: 0x3533, 0x499: 0x356f, 0x49b: 0x35cd, - 0x4a0: 0x4733, 0x4a1: 0x47c4, 0x4a2: 0x2f7f, 0x4a3: 0x328b, - 0x4a4: 0x3874, 0x4a5: 0x3a03, 0x4a6: 0x386d, 0x4a7: 0x39fc, 0x4a8: 0x3882, 0x4a9: 0x3a11, - 0x4aa: 0x387b, 0x4ab: 0x3a0a, 0x4ac: 0x38ba, 0x4ad: 0x3a49, 0x4ae: 0x3890, 0x4af: 0x3a1f, - 0x4b0: 0x3889, 0x4b1: 0x3a18, 0x4b2: 0x389e, 0x4b3: 0x3a2d, 0x4b4: 0x3897, 0x4b5: 0x3a26, - 0x4b6: 0x38c1, 0x4b7: 0x3a50, 0x4b8: 0x4747, 0x4b9: 0x47d8, 0x4ba: 0x2ffc, 0x4bb: 0x3308, - 0x4bc: 0x2fe8, 0x4bd: 0x32f4, 0x4be: 0x38d6, 0x4bf: 0x3a65, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x38cf, 0x4c1: 0x3a5e, 0x4c2: 0x38e4, 0x4c3: 0x3a73, 0x4c4: 0x38dd, 0x4c5: 0x3a6c, - 0x4c6: 0x38f9, 0x4c7: 0x3a88, 0x4c8: 0x308d, 0x4c9: 0x3399, 0x4ca: 0x30a1, 0x4cb: 0x33ad, - 0x4cc: 0x4779, 0x4cd: 0x480a, 0x4ce: 0x3132, 0x4cf: 0x3443, 0x4d0: 0x391c, 0x4d1: 0x3aab, - 0x4d2: 0x3915, 0x4d3: 0x3aa4, 0x4d4: 0x392a, 0x4d5: 0x3ab9, 0x4d6: 0x3923, 0x4d7: 0x3ab2, - 0x4d8: 0x3985, 0x4d9: 0x3b14, 0x4da: 0x3969, 0x4db: 0x3af8, 0x4dc: 0x3962, 0x4dd: 0x3af1, - 0x4de: 0x3977, 0x4df: 0x3b06, 0x4e0: 0x3970, 0x4e1: 0x3aff, 0x4e2: 0x397e, 0x4e3: 0x3b0d, - 0x4e4: 0x31e1, 0x4e5: 0x34f7, 0x4e6: 0x31c3, 0x4e7: 0x34d9, 0x4e8: 0x39e0, 0x4e9: 0x3b6f, - 0x4ea: 0x39d9, 0x4eb: 0x3b68, 0x4ec: 0x39ee, 0x4ed: 0x3b7d, 0x4ee: 0x39e7, 0x4ef: 0x3b76, - 0x4f0: 0x39f5, 0x4f1: 0x3b84, 0x4f2: 0x322c, 0x4f3: 0x3547, 0x4f4: 0x3254, 0x4f5: 0x3574, - 0x4f6: 0x324f, 0x4f7: 0x356a, 0x4f8: 0x323b, 0x4f9: 0x3556, - // Block 0x14, offset 0x500 - 0x500: 0x4896, 0x501: 0x489c, 0x502: 0x49b0, 0x503: 0x49c8, 0x504: 0x49b8, 0x505: 0x49d0, - 0x506: 0x49c0, 0x507: 0x49d8, 0x508: 0x483c, 0x509: 0x4842, 0x50a: 0x4920, 0x50b: 0x4938, - 0x50c: 0x4928, 0x50d: 0x4940, 0x50e: 0x4930, 0x50f: 0x4948, 0x510: 0x48a8, 0x511: 0x48ae, - 0x512: 0x3db4, 0x513: 0x3dc4, 0x514: 0x3dbc, 0x515: 0x3dcc, - 0x518: 0x4848, 0x519: 0x484e, 0x51a: 0x3ce4, 0x51b: 0x3cf4, 0x51c: 0x3cec, 0x51d: 0x3cfc, - 0x520: 0x48c0, 0x521: 0x48c6, 0x522: 0x49e0, 0x523: 0x49f8, - 0x524: 0x49e8, 0x525: 0x4a00, 0x526: 0x49f0, 0x527: 0x4a08, 0x528: 0x4854, 0x529: 0x485a, - 0x52a: 0x4950, 0x52b: 0x4968, 0x52c: 0x4958, 0x52d: 0x4970, 0x52e: 0x4960, 0x52f: 0x4978, - 0x530: 0x48d8, 0x531: 0x48de, 0x532: 0x3e14, 0x533: 0x3e2c, 0x534: 0x3e1c, 0x535: 0x3e34, - 0x536: 0x3e24, 0x537: 0x3e3c, 0x538: 0x4860, 0x539: 0x4866, 0x53a: 0x3d14, 0x53b: 0x3d2c, - 0x53c: 0x3d1c, 0x53d: 0x3d34, 0x53e: 0x3d24, 0x53f: 0x3d3c, - // Block 0x15, offset 0x540 - 0x540: 0x48e4, 0x541: 0x48ea, 0x542: 0x3e44, 0x543: 0x3e54, 0x544: 0x3e4c, 0x545: 0x3e5c, - 0x548: 0x486c, 0x549: 0x4872, 0x54a: 0x3d44, 0x54b: 0x3d54, - 0x54c: 0x3d4c, 0x54d: 0x3d5c, 0x550: 0x48f6, 0x551: 0x48fc, - 0x552: 0x3e7c, 0x553: 0x3e94, 0x554: 0x3e84, 0x555: 0x3e9c, 0x556: 0x3e8c, 0x557: 0x3ea4, - 0x559: 0x4878, 0x55b: 0x3d64, 0x55d: 0x3d6c, - 0x55f: 0x3d74, 0x560: 0x490e, 0x561: 0x4914, 0x562: 0x4a10, 0x563: 0x4a28, - 0x564: 0x4a18, 0x565: 0x4a30, 0x566: 0x4a20, 0x567: 0x4a38, 0x568: 0x487e, 0x569: 0x4884, - 0x56a: 0x4980, 0x56b: 0x4998, 0x56c: 0x4988, 0x56d: 0x49a0, 0x56e: 0x4990, 0x56f: 0x49a8, - 0x570: 0x488a, 0x571: 0x43b0, 0x572: 0x368d, 0x573: 0x43b6, 0x574: 0x48b4, 0x575: 0x43bc, - 0x576: 0x369f, 0x577: 0x43c2, 0x578: 0x36bd, 0x579: 0x43c8, 0x57a: 0x36d5, 0x57b: 0x43ce, - 0x57c: 0x4902, 0x57d: 0x43d4, - // Block 0x16, offset 0x580 - 0x580: 0x3d9c, 0x581: 0x3da4, 0x582: 0x4180, 0x583: 0x419e, 0x584: 0x418a, 0x585: 0x41a8, - 0x586: 0x4194, 0x587: 0x41b2, 0x588: 0x3cd4, 0x589: 0x3cdc, 0x58a: 0x40cc, 0x58b: 0x40ea, - 0x58c: 0x40d6, 0x58d: 0x40f4, 0x58e: 0x40e0, 0x58f: 0x40fe, 0x590: 0x3de4, 0x591: 0x3dec, - 0x592: 0x41bc, 0x593: 0x41da, 0x594: 0x41c6, 0x595: 0x41e4, 0x596: 0x41d0, 0x597: 0x41ee, - 0x598: 0x3d04, 0x599: 0x3d0c, 0x59a: 0x4108, 0x59b: 0x4126, 0x59c: 0x4112, 0x59d: 0x4130, - 0x59e: 0x411c, 0x59f: 0x413a, 0x5a0: 0x3ebc, 0x5a1: 0x3ec4, 0x5a2: 0x41f8, 0x5a3: 0x4216, - 0x5a4: 0x4202, 0x5a5: 0x4220, 0x5a6: 0x420c, 0x5a7: 0x422a, 0x5a8: 0x3d7c, 0x5a9: 0x3d84, - 0x5aa: 0x4144, 0x5ab: 0x4162, 0x5ac: 0x414e, 0x5ad: 0x416c, 0x5ae: 0x4158, 0x5af: 0x4176, - 0x5b0: 0x3681, 0x5b1: 0x367b, 0x5b2: 0x3d8c, 0x5b3: 0x3687, 0x5b4: 0x3d94, - 0x5b6: 0x48a2, 0x5b7: 0x3dac, 0x5b8: 0x35f1, 0x5b9: 0x35eb, 0x5ba: 0x35df, 0x5bb: 0x4380, - 0x5bc: 0x35f7, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x8100, 0x5c1: 0x35a3, 0x5c2: 0x3dd4, 0x5c3: 0x3699, 0x5c4: 0x3ddc, - 0x5c6: 0x48cc, 0x5c7: 0x3df4, 0x5c8: 0x35fd, 0x5c9: 0x4386, 0x5ca: 0x3609, 0x5cb: 0x438c, - 0x5cc: 0x3615, 0x5cd: 0x3b8b, 0x5ce: 0x3b92, 0x5cf: 0x3b99, 0x5d0: 0x36b1, 0x5d1: 0x36ab, - 0x5d2: 0x3dfc, 0x5d3: 0x4576, 0x5d6: 0x36b7, 0x5d7: 0x3e0c, - 0x5d8: 0x362d, 0x5d9: 0x3627, 0x5da: 0x361b, 0x5db: 0x4392, 0x5dd: 0x3ba0, - 0x5de: 0x3ba7, 0x5df: 0x3bae, 0x5e0: 0x36e7, 0x5e1: 0x36e1, 0x5e2: 0x3e64, 0x5e3: 0x457e, - 0x5e4: 0x36c9, 0x5e5: 0x36cf, 0x5e6: 0x36ed, 0x5e7: 0x3e74, 0x5e8: 0x365d, 0x5e9: 0x3657, - 0x5ea: 0x364b, 0x5eb: 0x439e, 0x5ec: 0x3645, 0x5ed: 0x3597, 0x5ee: 0x437a, 0x5ef: 0x0081, - 0x5f2: 0x3eac, 0x5f3: 0x36f3, 0x5f4: 0x3eb4, - 0x5f6: 0x491a, 0x5f7: 0x3ecc, 0x5f8: 0x3639, 0x5f9: 0x4398, 0x5fa: 0x3669, 0x5fb: 0x43aa, - 0x5fc: 0x3675, 0x5fd: 0x4252, 0x5fe: 0xa100, - // Block 0x18, offset 0x600 - 0x601: 0x3c02, 0x603: 0xa000, 0x604: 0x3c09, 0x605: 0xa000, - 0x607: 0x3c10, 0x608: 0xa000, 0x609: 0x3c17, - 0x60d: 0xa000, - 0x620: 0x2f61, 0x621: 0xa000, 0x622: 0x3c25, - 0x624: 0xa000, 0x625: 0xa000, - 0x62d: 0x3c1e, 0x62e: 0x2f5c, 0x62f: 0x2f66, - 0x630: 0x3c2c, 0x631: 0x3c33, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3a, 0x635: 0x3c41, - 0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c48, 0x639: 0x3c4f, 0x63a: 0xa000, 0x63b: 0xa000, - 0x63c: 0xa000, 0x63d: 0xa000, - // Block 0x19, offset 0x640 - 0x640: 0x3c56, 0x641: 0x3c5d, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c72, 0x645: 0x3c79, - 0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c80, 0x649: 0x3c87, - 0x651: 0xa000, - 0x652: 0xa000, - 0x662: 0xa000, - 0x668: 0xa000, 0x669: 0xa000, - 0x66b: 0xa000, 0x66c: 0x3c9c, 0x66d: 0x3ca3, 0x66e: 0x3caa, 0x66f: 0x3cb1, - 0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000, - // Block 0x1a, offset 0x680 - 0x686: 0xa000, 0x68b: 0xa000, - 0x68c: 0x3f04, 0x68d: 0xa000, 0x68e: 0x3f0c, 0x68f: 0xa000, 0x690: 0x3f14, 0x691: 0xa000, - 0x692: 0x3f1c, 0x693: 0xa000, 0x694: 0x3f24, 0x695: 0xa000, 0x696: 0x3f2c, 0x697: 0xa000, - 0x698: 0x3f34, 0x699: 0xa000, 0x69a: 0x3f3c, 0x69b: 0xa000, 0x69c: 0x3f44, 0x69d: 0xa000, - 0x69e: 0x3f4c, 0x69f: 0xa000, 0x6a0: 0x3f54, 0x6a1: 0xa000, 0x6a2: 0x3f5c, - 0x6a4: 0xa000, 0x6a5: 0x3f64, 0x6a6: 0xa000, 0x6a7: 0x3f6c, 0x6a8: 0xa000, 0x6a9: 0x3f74, - 0x6af: 0xa000, - 0x6b0: 0x3f7c, 0x6b1: 0x3f84, 0x6b2: 0xa000, 0x6b3: 0x3f8c, 0x6b4: 0x3f94, 0x6b5: 0xa000, - 0x6b6: 0x3f9c, 0x6b7: 0x3fa4, 0x6b8: 0xa000, 0x6b9: 0x3fac, 0x6ba: 0x3fb4, 0x6bb: 0xa000, - 0x6bc: 0x3fbc, 0x6bd: 0x3fc4, - // Block 0x1b, offset 0x6c0 - 0x6d4: 0x3efc, - 0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000, - 0x6de: 0x3fcc, - 0x6e6: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3fdc, 0x6ed: 0xa000, 0x6ee: 0x3fe4, 0x6ef: 0xa000, - 0x6f0: 0x3fec, 0x6f1: 0xa000, 0x6f2: 0x3ff4, 0x6f3: 0xa000, 0x6f4: 0x3ffc, 0x6f5: 0xa000, - 0x6f6: 0x4004, 0x6f7: 0xa000, 0x6f8: 0x400c, 0x6f9: 0xa000, 0x6fa: 0x4014, 0x6fb: 0xa000, - 0x6fc: 0x401c, 0x6fd: 0xa000, 0x6fe: 0x4024, 0x6ff: 0xa000, - // Block 0x1c, offset 0x700 - 0x700: 0x402c, 0x701: 0xa000, 0x702: 0x4034, 0x704: 0xa000, 0x705: 0x403c, - 0x706: 0xa000, 0x707: 0x4044, 0x708: 0xa000, 0x709: 0x404c, - 0x70f: 0xa000, 0x710: 0x4054, 0x711: 0x405c, - 0x712: 0xa000, 0x713: 0x4064, 0x714: 0x406c, 0x715: 0xa000, 0x716: 0x4074, 0x717: 0x407c, - 0x718: 0xa000, 0x719: 0x4084, 0x71a: 0x408c, 0x71b: 0xa000, 0x71c: 0x4094, 0x71d: 0x409c, - 0x72f: 0xa000, - 0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd4, - 0x737: 0x40a4, 0x738: 0x40ac, 0x739: 0x40b4, 0x73a: 0x40bc, - 0x73d: 0xa000, 0x73e: 0x40c4, - // Block 0x1d, offset 0x740 - 0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb, - 0x746: 0x08df, 0x747: 0x1627, 0x748: 0x1627, 0x749: 0x0a0b, 0x74a: 0x145b, 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: 0x1443, 0x75a: 0x156f, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87, - 0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15bf, 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: 0x14eb, 0x779: 0x159f, 0x77a: 0x15bb, 0x77b: 0x102b, - 0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x1477, - // Block 0x1e, offset 0x780 - 0x780: 0x15c7, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b, - 0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e3, 0x78a: 0x09c3, 0x78b: 0x0a8f, - 0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a3, - 0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127, - 0x798: 0x125b, 0x799: 0x14ab, 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: 0x1457, 0x7bf: 0x085b, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f, - 0x7c6: 0x1493, 0x7c7: 0x1577, 0x7c8: 0x15cb, 0x7c9: 0x15e3, 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: 0x147b, 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: 0x145f, 0x7f2: 0x14df, 0x7f3: 0x14ef, 0x7f4: 0x152b, 0x7f5: 0x0753, - 0x7f6: 0x107f, 0x7f7: 0x144b, 0x7f8: 0x14c7, 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: 0x161f, 0x805: 0x0ce3, - 0x806: 0x149f, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47, - 0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x1537, 0x811: 0x07af, - 0x812: 0x0c03, 0x813: 0x14af, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df, - 0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14b7, 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: 0x1453, - 0x82a: 0x14d3, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b, - 0x830: 0x1287, 0x831: 0x14bb, 0x832: 0x15a7, 0x833: 0x15cf, 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: 0x14a7, 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: 0x14f7, 0x85d: 0x10eb, - 0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353, - 0x865: 0x1407, 0x866: 0x1433, - 0x86a: 0x154b, 0x86b: 0x154f, 0x86c: 0x1553, 0x86d: 0x15b7, 0x86e: 0x142b, 0x86f: 0x14c3, - 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: 0x14d7, 0x8a9: 0x151b, - 0x8aa: 0x1533, 0x8ab: 0x0b9b, 0x8ac: 0x171a, 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: 0x1447, 0x905: 0x1467, - 0x906: 0x14b3, 0x907: 0x14d7, 0x908: 0x14f7, 0x909: 0x150b, 0x90a: 0x151b, 0x90b: 0x1527, - 0x90c: 0x1533, 0x90d: 0x1587, 0x90e: 0x1627, 0x90f: 0x16b1, 0x910: 0x16ac, 0x911: 0x16de, - 0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1760, 0x916: 0x178d, 0x917: 0x1805, - 0x918: 0x1613, 0x919: 0x1623, - // Block 0x25, offset 0x940 - 0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1643, 0x944: 0x0747, 0x945: 0x0757, - 0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773, - 0x94c: 0x05b3, 0x94d: 0x1657, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3, - 0x952: 0x1648, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1652, 0x957: 0x07cf, - 0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x182d, 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: 0x1666, 0x975: 0x0e93, - 0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166b, 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: 0x1670, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef, - 0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1675, 0x9a1: 0x167a, 0x9a2: 0x0a1f, 0x9a3: 0x0a23, - 0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37, - 0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x167f, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63, - 0x9b0: 0x0a6b, 0x9b1: 0x1684, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f, - 0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x168e, - 0x9bc: 0x0aaf, 0x9bd: 0x1693, 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: 0x1698, 0x9ca: 0x05db, 0x9cb: 0x0b0f, - 0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x185f, 0x9d0: 0x0b37, 0x9d1: 0x16a2, - 0x9d2: 0x16a2, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c5, - 0x9d8: 0x1797, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83, - 0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3, - 0x9e4: 0x16a7, 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: 0x16b6, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b, - 0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bb, 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: 0x16c0, 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: 0x16d9, - 0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e3, - 0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b, - 0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16e8, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f, - 0xa30: 0x16ed, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7, - 0xa36: 0x0dbb, 0xa37: 0x16f2, 0xa38: 0x1689, 0xa39: 0x16f7, 0xa3a: 0x0ddb, 0xa3b: 0x16fc, - 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: 0x1701, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53, - 0xa4c: 0x0e4f, 0xa4d: 0x1706, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170b, 0xa51: 0x1710, - 0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b, - 0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x164d, 0xa5c: 0x0eb3, 0xa5d: 0x1715, - 0xa5e: 0x0ebf, 0xa5f: 0x171f, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1724, - 0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x1729, 0xa67: 0x172e, 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: 0x1733, - 0xa76: 0x0fa3, 0xa77: 0x1738, 0xa78: 0x0faf, 0xa79: 0x169d, 0xa7a: 0x0fbf, 0xa7b: 0x173d, - 0xa7c: 0x1742, 0xa7d: 0x1747, 0xa7e: 0x0627, 0xa7f: 0x062b, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0ff7, 0xa81: 0x1751, 0xa82: 0x174c, 0xa83: 0x1756, 0xa84: 0x175b, 0xa85: 0x0fff, - 0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637, - 0xa8c: 0x063b, 0xa8d: 0x1765, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f, - 0xa92: 0x176a, 0xa93: 0x105b, 0xa94: 0x176f, 0xa95: 0x1774, 0xa96: 0x107b, 0xa97: 0x1093, - 0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x1779, 0xa9d: 0x177e, - 0xa9e: 0x177e, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1783, 0xaa2: 0x10cf, 0xaa3: 0x10d3, - 0xaa4: 0x064b, 0xaa5: 0x1788, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7, - 0xaaa: 0x1107, 0xaab: 0x1792, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133, - 0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x179c, 0xab3: 0x17a1, 0xab4: 0x065b, 0xab5: 0x17a6, - 0xab6: 0x115b, 0xab7: 0x17ab, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b0, - 0xabc: 0x17b5, 0xabd: 0x118f, 0xabe: 0x17ba, 0xabf: 0x1197, - // Block 0x2b, offset 0xac0 - 0xac0: 0x16ca, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7, - 0xac6: 0x0a33, 0xac7: 0x17bf, 0xac8: 0x17c4, 0xac9: 0x16cf, 0xaca: 0x16d4, 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: 0x17c9, - 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: 0x17ce, 0xae5: 0x17d8, 0xae6: 0x17d3, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273, - 0xaea: 0x127b, 0xaeb: 0x17ec, 0xaec: 0x127f, 0xaed: 0x17dd, 0xaee: 0x0673, 0xaef: 0x0677, - 0xaf0: 0x17e2, 0xaf1: 0x17e7, 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: 0x17f1, - 0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17f6, - 0xb0c: 0x17fb, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b, - 0xb12: 0x137b, 0xb13: 0x1800, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7, - 0xb18: 0x180a, 0xb19: 0x165c, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1661, - 0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x180f, 0xb21: 0x1814, 0xb22: 0x1423, 0xb23: 0x142f, - 0xb24: 0x1437, 0xb25: 0x1819, 0xb26: 0x143b, 0xb27: 0x1463, 0xb28: 0x146f, 0xb29: 0x1473, - 0xb2a: 0x146b, 0xb2b: 0x147f, 0xb2c: 0x1483, 0xb2d: 0x181e, 0xb2e: 0x148f, 0xb2f: 0x0693, - 0xb30: 0x1497, 0xb31: 0x1823, 0xb32: 0x0697, 0xb33: 0x14cf, 0xb34: 0x0ac3, 0xb35: 0x14e7, - 0xb36: 0x1828, 0xb37: 0x1832, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x150f, 0xb3b: 0x1837, - 0xb3c: 0x06a3, 0xb3d: 0x183c, 0xb3e: 0x1527, 0xb3f: 0x1527, - // Block 0x2d, offset 0xb40 - 0xb40: 0x152f, 0xb41: 0x1841, 0xb42: 0x1547, 0xb43: 0x06a7, 0xb44: 0x1557, 0xb45: 0x1563, - 0xb46: 0x156b, 0xb47: 0x1573, 0xb48: 0x06ab, 0xb49: 0x1846, 0xb4a: 0x1587, 0xb4b: 0x15a3, - 0xb4c: 0x15af, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b3, 0xb50: 0x184b, 0xb51: 0x06b7, - 0xb52: 0x1850, 0xb53: 0x1855, 0xb54: 0x185a, 0xb55: 0x15d7, 0xb56: 0x06bb, 0xb57: 0x15eb, - 0xb58: 0x15f3, 0xb59: 0x15f7, 0xb5a: 0x15ff, 0xb5b: 0x1607, 0xb5c: 0x160f, 0xb5d: 0x1864, -} - -// 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, - 0x392: 0xa8, 0x393: 0xa9, 0x396: 0xaa, 0x397: 0xab, - 0x398: 0x73, 0x39a: 0xac, 0x39c: 0xad, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xae, 0x3ec: 0xaf, - // Block 0x10, offset 0x400 - 0x432: 0xb0, - // Block 0x11, offset 0x440 - 0x445: 0xb1, 0x446: 0xb2, 0x447: 0xb3, - 0x449: 0xb4, - // Block 0x12, offset 0x480 - 0x4a3: 0xb5, - // Block 0x13, offset 0x4c0 - 0x4c8: 0xb6, - // 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: 139 entries, 278 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x79, 0x81, 0x88, 0x8b, 0x92, 0x96, 0x9a, 0x9c, 0x9e, 0xa7, 0xab, 0xb2, 0xb7, 0xba, 0xc4, 0xc6, 0xcd, 0xd5, 0xd8, 0xda, 0xdc, 0xde, 0xe3, 0xf4, 0x100, 0x102, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x117, 0x11a, 0x11c, 0x11f, 0x122, 0x126, 0x12b, 0x134, 0x136, 0x139, 0x13b, 0x146, 0x155, 0x159, 0x167, 0x16a, 0x170, 0x176, 0x181, 0x185, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x195, 0x199, 0x19b, 0x19d, 0x1a5, 0x1a9, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b5, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1c3, 0x1c6, 0x1c8, 0x1cf, 0x1d5, 0x1db, 0x1e3, 0x1e9, 0x1ef, 0x1f5, 0x1f9, 0x207, 0x210, 0x213, 0x216, 0x218, 0x21b, 0x21d, 0x221, 0x226, 0x228, 0x22a, 0x22f, 0x235, 0x237, 0x239, 0x23b, 0x241, 0x244, 0x247, 0x24f, 0x256, 0x259, 0x25c, 0x25e, 0x266, 0x26d, 0x270, 0x276, 0x278, 0x27b, 0x27d, 0x27f, 0x281, 0x283, 0x290, 0x29a, 0x29c, 0x29e, 0x2a0} - -// nfcSparseValues: 674 entries, 2696 bytes -var nfcSparseValues = [674]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: 0x4774, lo: 0xa0, hi: 0xa1}, - {value: 0x47a6, 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: 0x48d2, lo: 0x8a, hi: 0x8a}, - {value: 0x48f0, lo: 0x8b, hi: 0x8b}, - {value: 0x36c3, lo: 0x8c, hi: 0x8c}, - {value: 0x36db, lo: 0x8d, hi: 0x8d}, - {value: 0x4908, lo: 0x8e, hi: 0x8e}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x36f9, 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: 0x37a1, lo: 0x90, hi: 0x90}, - {value: 0x37ad, lo: 0x91, hi: 0x91}, - {value: 0x379b, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3813, lo: 0x97, hi: 0x97}, - {value: 0x37dd, lo: 0x9c, hi: 0x9c}, - {value: 0x37c5, lo: 0x9d, hi: 0x9d}, - {value: 0x37ef, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x3819, lo: 0xb6, hi: 0xb6}, - {value: 0x381f, 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: 0x383d, lo: 0xa2, hi: 0xa2}, - {value: 0x3843, lo: 0xa3, hi: 0xa3}, - {value: 0x384f, lo: 0xa4, hi: 0xa4}, - {value: 0x3849, lo: 0xa5, hi: 0xa5}, - {value: 0x3855, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x9, offset 0x3a - {value: 0x0000, lo: 0x0e}, - {value: 0x3867, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385b, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3861, 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: 0x0f}, - {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 0x79 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed4, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3edc, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee4, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x11, offset 0x81 - {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: 0x45ae, lo: 0x98, hi: 0x9f}, - // Block 0x12, offset 0x88 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x8b - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9a, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x45ee, lo: 0x9c, hi: 0x9d}, - {value: 0x45fe, lo: 0x9f, hi: 0x9f}, - // Block 0x14, offset 0x92 - {value: 0x0000, lo: 0x03}, - {value: 0x4626, lo: 0xb3, hi: 0xb3}, - {value: 0x462e, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x96 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4606, lo: 0x99, hi: 0x9b}, - {value: 0x461e, lo: 0x9e, hi: 0x9e}, - // Block 0x16, offset 0x9a - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x17, offset 0x9c - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x18, offset 0x9e - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb2, lo: 0x88, hi: 0x88}, - {value: 0x2caa, lo: 0x8b, hi: 0x8b}, - {value: 0x2cba, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x4636, lo: 0x9c, hi: 0x9c}, - {value: 0x463e, lo: 0x9d, hi: 0x9d}, - // Block 0x19, offset 0xa7 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc2, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1a, offset 0xab - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cca, lo: 0x8a, hi: 0x8a}, - {value: 0x2cda, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd2, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1b, offset 0xb2 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3eec, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xb7 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1d, offset 0xba - {value: 0x0000, lo: 0x09}, - {value: 0x2ce2, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cea, lo: 0x87, hi: 0x87}, - {value: 0x2cf2, lo: 0x88, hi: 0x88}, - {value: 0x2f4c, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd4, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1e, offset 0xc4 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1f, offset 0xc6 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfa, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0a, lo: 0x8b, hi: 0x8b}, - {value: 0x2d02, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x20, offset 0xcd - {value: 0x6bee, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef4, lo: 0x9a, hi: 0x9a}, - {value: 0x2f54, lo: 0x9c, hi: 0x9c}, - {value: 0x2ddf, lo: 0x9d, hi: 0x9d}, - {value: 0x2d12, lo: 0x9e, hi: 0x9f}, - // Block 0x21, offset 0xd5 - {value: 0x0000, lo: 0x02}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x22, offset 0xd8 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x23, offset 0xda - {value: 0x0000, lo: 0x01}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x24, offset 0xdc - {value: 0x0000, lo: 0x01}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - // Block 0x25, offset 0xde - {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 0xe3 - {value: 0x0000, lo: 0x10}, - {value: 0x2640, lo: 0x83, hi: 0x83}, - {value: 0x2647, lo: 0x8d, hi: 0x8d}, - {value: 0x264e, lo: 0x92, hi: 0x92}, - {value: 0x2655, lo: 0x97, hi: 0x97}, - {value: 0x265c, lo: 0x9c, hi: 0x9c}, - {value: 0x2639, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a62, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a6b, lo: 0xb5, hi: 0xb5}, - {value: 0x4646, lo: 0xb6, hi: 0xb6}, - {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x464e, lo: 0xb8, hi: 0xb8}, - {value: 0x8200, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x27, offset 0xf4 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a74, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266a, lo: 0x93, hi: 0x93}, - {value: 0x2671, lo: 0x9d, hi: 0x9d}, - {value: 0x2678, lo: 0xa2, hi: 0xa2}, - {value: 0x267f, lo: 0xa7, hi: 0xa7}, - {value: 0x2686, lo: 0xac, hi: 0xac}, - {value: 0x2663, lo: 0xb9, hi: 0xb9}, - // Block 0x28, offset 0x100 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x29, offset 0x102 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1a, 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 0x108 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2b, offset 0x10a - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x10c - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x10e - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x110 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x112 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x114 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x117 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x11a - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x11c - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x11f - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x122 - {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 0x126 - {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 0x12b - {value: 0x0000, lo: 0x08}, - {value: 0x2d62, lo: 0x80, hi: 0x80}, - {value: 0x2d6a, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d72, 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 0x134 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x136 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x139 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x13b - {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 0x146 - {value: 0x0000, lo: 0x0e}, - {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: 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 0x155 - {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 0x159 - {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 0x167 - {value: 0x4277, lo: 0x02}, - {value: 0x01b8, lo: 0xa6, hi: 0xa6}, - {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x40, offset 0x16a - {value: 0x0007, lo: 0x05}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb5, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc3, lo: 0xae, hi: 0xae}, - // Block 0x41, offset 0x170 - {value: 0x000e, lo: 0x05}, - {value: 0x3bca, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd1, 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 0x176 - {value: 0x640c, lo: 0x0a}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3bdf, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3be6, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bed, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf4, lo: 0xa4, hi: 0xa5}, - {value: 0x3bfb, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x43, offset 0x181 - {value: 0x0007, lo: 0x03}, - {value: 0x3c64, lo: 0xa0, hi: 0xa1}, - {value: 0x3c8e, lo: 0xa2, hi: 0xa3}, - {value: 0x3cb8, lo: 0xaa, hi: 0xad}, - // Block 0x44, offset 0x185 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x45, offset 0x187 - {value: 0x0000, lo: 0x01}, - {value: 0x456f, lo: 0x9c, hi: 0x9c}, - // Block 0x46, offset 0x189 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x47, offset 0x18b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x48, offset 0x18d - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x49, offset 0x18f - {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 0x195 - {value: 0x0000, lo: 0x03}, - {value: 0x4a7d, lo: 0xb3, hi: 0xb3}, - {value: 0x4a7d, lo: 0xb5, hi: 0xb6}, - {value: 0x4a7d, lo: 0xba, hi: 0xbf}, - // Block 0x4b, offset 0x199 - {value: 0x0000, lo: 0x01}, - {value: 0x4a7d, lo: 0x8f, hi: 0xa3}, - // Block 0x4c, offset 0x19b - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4d, offset 0x19d - {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 0x1a5 - {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 0x1a9 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x50, offset 0x1ac - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x51, offset 0x1ae - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x52, offset 0x1b0 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x53, offset 0x1b2 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x54, offset 0x1b5 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x55, offset 0x1b7 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x56, offset 0x1b9 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x57, offset 0x1bb - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x58, offset 0x1bd - {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 0x1c3 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x5a, offset 0x1c6 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x5b, offset 0x1c8 - {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 0x1cf - {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 0x1d5 - {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 0x1db - {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 0x1e3 - {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 0x1e9 - {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 0x1ef - {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 0x1f5 - {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 0x1f9 - {value: 0x0006, lo: 0x0d}, - {value: 0x4422, lo: 0x9d, hi: 0x9d}, - {value: 0x8115, lo: 0x9e, hi: 0x9e}, - {value: 0x4494, lo: 0x9f, hi: 0x9f}, - {value: 0x4482, lo: 0xaa, hi: 0xab}, - {value: 0x4586, lo: 0xac, hi: 0xac}, - {value: 0x458e, lo: 0xad, hi: 0xad}, - {value: 0x43da, lo: 0xae, hi: 0xb1}, - {value: 0x43f8, lo: 0xb2, hi: 0xb4}, - {value: 0x4410, lo: 0xb5, hi: 0xb6}, - {value: 0x441c, lo: 0xb8, hi: 0xb8}, - {value: 0x4428, lo: 0xb9, hi: 0xbb}, - {value: 0x4440, lo: 0xbc, hi: 0xbc}, - {value: 0x4446, lo: 0xbe, hi: 0xbe}, - // Block 0x64, offset 0x207 - {value: 0x0006, lo: 0x08}, - {value: 0x444c, lo: 0x80, hi: 0x81}, - {value: 0x4458, lo: 0x83, hi: 0x84}, - {value: 0x446a, lo: 0x86, hi: 0x89}, - {value: 0x448e, lo: 0x8a, hi: 0x8a}, - {value: 0x440a, lo: 0x8b, hi: 0x8b}, - {value: 0x43f2, lo: 0x8c, hi: 0x8c}, - {value: 0x443a, lo: 0x8d, hi: 0x8d}, - {value: 0x4464, lo: 0x8e, hi: 0x8e}, - // Block 0x65, offset 0x210 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0xa4, hi: 0xa5}, - {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x66, offset 0x213 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x9b, hi: 0x9d}, - {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x67, offset 0x216 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x68, offset 0x218 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x99, hi: 0x99}, - {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x69, offset 0x21b - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x6a, offset 0x21d - {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 0x221 - {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 0x226 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6d, offset 0x228 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6e, offset 0x22a - {value: 0x0000, lo: 0x04}, - {value: 0x4a7d, lo: 0x9e, hi: 0x9f}, - {value: 0x4a7d, lo: 0xa3, hi: 0xa3}, - {value: 0x4a7d, lo: 0xa5, hi: 0xa6}, - {value: 0x4a7d, lo: 0xaa, hi: 0xaf}, - // Block 0x6f, offset 0x22f - {value: 0x0000, lo: 0x05}, - {value: 0x4a7d, lo: 0x82, hi: 0x87}, - {value: 0x4a7d, lo: 0x8a, hi: 0x8f}, - {value: 0x4a7d, lo: 0x92, hi: 0x97}, - {value: 0x4a7d, lo: 0x9a, hi: 0x9c}, - {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x70, offset 0x235 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x71, offset 0x237 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x72, offset 0x239 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x73, offset 0x23b - {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 0x241 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x75, offset 0x244 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x76, offset 0x247 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4234, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x423e, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x4248, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x77, offset 0x24f - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7a, lo: 0xae, hi: 0xae}, - {value: 0x2d84, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x78, offset 0x256 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x79, offset 0x259 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x7a, offset 0x25c - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x7b, offset 0x25e - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d8e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d98, 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 0x266 - {value: 0x6b5e, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2dac, lo: 0xbb, hi: 0xbb}, - {value: 0x2da2, lo: 0xbc, hi: 0xbd}, - {value: 0x2db6, lo: 0xbe, hi: 0xbe}, - // Block 0x7d, offset 0x26d - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7e, offset 0x270 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc0, lo: 0xba, hi: 0xba}, - {value: 0x2dca, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7f, offset 0x276 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x80, offset 0x278 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x81, offset 0x27b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x82, offset 0x27d - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x83, offset 0x27f - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x84, offset 0x281 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x85, offset 0x283 - {value: 0x0000, lo: 0x0c}, - {value: 0x465e, lo: 0x9e, hi: 0x9e}, - {value: 0x4668, lo: 0x9f, hi: 0x9f}, - {value: 0x469c, lo: 0xa0, hi: 0xa0}, - {value: 0x46aa, lo: 0xa1, hi: 0xa1}, - {value: 0x46b8, lo: 0xa2, hi: 0xa2}, - {value: 0x46c6, lo: 0xa3, hi: 0xa3}, - {value: 0x46d4, 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 0x86, offset 0x290 - {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: 0x4672, lo: 0xbb, hi: 0xbb}, - {value: 0x467c, lo: 0xbc, hi: 0xbc}, - {value: 0x46e2, lo: 0xbd, hi: 0xbd}, - {value: 0x46fe, lo: 0xbe, hi: 0xbe}, - {value: 0x46f0, lo: 0xbf, hi: 0xbf}, - // Block 0x87, offset 0x29a - {value: 0x0000, lo: 0x01}, - {value: 0x470c, lo: 0x80, hi: 0x80}, - // Block 0x88, offset 0x29c - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x89, offset 0x29e - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x8a, offset 0x2a0 - {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 < 0xC0: - 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 < 0xC0: - 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: 16932 bytes (16.54 KiB). Checksum: 30d032c1800b8f3e. -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: 0x2f6b, 0xc1: 0x2f70, 0xc2: 0x471a, 0xc3: 0x2f75, 0xc4: 0x4729, 0xc5: 0x472e, - 0xc6: 0xa000, 0xc7: 0x4738, 0xc8: 0x2fde, 0xc9: 0x2fe3, 0xca: 0x473d, 0xcb: 0x2ff7, - 0xcc: 0x306a, 0xcd: 0x306f, 0xce: 0x3074, 0xcf: 0x4751, 0xd1: 0x3100, - 0xd2: 0x3123, 0xd3: 0x3128, 0xd4: 0x475b, 0xd5: 0x4760, 0xd6: 0x476f, - 0xd8: 0xa000, 0xd9: 0x31af, 0xda: 0x31b4, 0xdb: 0x31b9, 0xdc: 0x47a1, 0xdd: 0x3231, - 0xe0: 0x3277, 0xe1: 0x327c, 0xe2: 0x47ab, 0xe3: 0x3281, - 0xe4: 0x47ba, 0xe5: 0x47bf, 0xe6: 0xa000, 0xe7: 0x47c9, 0xe8: 0x32ea, 0xe9: 0x32ef, - 0xea: 0x47ce, 0xeb: 0x3303, 0xec: 0x337b, 0xed: 0x3380, 0xee: 0x3385, 0xef: 0x47e2, - 0xf1: 0x3411, 0xf2: 0x3434, 0xf3: 0x3439, 0xf4: 0x47ec, 0xf5: 0x47f1, - 0xf6: 0x4800, 0xf8: 0xa000, 0xf9: 0x34c5, 0xfa: 0x34ca, 0xfb: 0x34cf, - 0xfc: 0x4832, 0xfd: 0x354c, 0xff: 0x3565, - // Block 0x4, offset 0x100 - 0x100: 0x2f7a, 0x101: 0x3286, 0x102: 0x471f, 0x103: 0x47b0, 0x104: 0x2f98, 0x105: 0x32a4, - 0x106: 0x2fac, 0x107: 0x32b8, 0x108: 0x2fb1, 0x109: 0x32bd, 0x10a: 0x2fb6, 0x10b: 0x32c2, - 0x10c: 0x2fbb, 0x10d: 0x32c7, 0x10e: 0x2fc5, 0x10f: 0x32d1, - 0x112: 0x4742, 0x113: 0x47d3, 0x114: 0x2fed, 0x115: 0x32f9, 0x116: 0x2ff2, 0x117: 0x32fe, - 0x118: 0x3010, 0x119: 0x331c, 0x11a: 0x3001, 0x11b: 0x330d, 0x11c: 0x3029, 0x11d: 0x3335, - 0x11e: 0x3033, 0x11f: 0x333f, 0x120: 0x3038, 0x121: 0x3344, 0x122: 0x3042, 0x123: 0x334e, - 0x124: 0x3047, 0x125: 0x3353, 0x128: 0x3079, 0x129: 0x338a, - 0x12a: 0x307e, 0x12b: 0x338f, 0x12c: 0x3083, 0x12d: 0x3394, 0x12e: 0x30a6, 0x12f: 0x33b2, - 0x130: 0x3088, 0x132: 0x1959, 0x133: 0x19e3, 0x134: 0x30b0, 0x135: 0x33bc, - 0x136: 0x30c4, 0x137: 0x33d5, 0x139: 0x30ce, 0x13a: 0x33df, 0x13b: 0x30d8, - 0x13c: 0x33e9, 0x13d: 0x30d3, 0x13e: 0x33e4, 0x13f: 0x1ba8, - // Block 0x5, offset 0x140 - 0x140: 0x1c30, 0x143: 0x30fb, 0x144: 0x340c, 0x145: 0x3114, - 0x146: 0x3425, 0x147: 0x310a, 0x148: 0x341b, 0x149: 0x1c58, - 0x14c: 0x4765, 0x14d: 0x47f6, 0x14e: 0x312d, 0x14f: 0x343e, 0x150: 0x3137, 0x151: 0x3448, - 0x154: 0x3155, 0x155: 0x3466, 0x156: 0x316e, 0x157: 0x347f, - 0x158: 0x315f, 0x159: 0x3470, 0x15a: 0x4788, 0x15b: 0x4819, 0x15c: 0x3178, 0x15d: 0x3489, - 0x15e: 0x3187, 0x15f: 0x3498, 0x160: 0x478d, 0x161: 0x481e, 0x162: 0x31a0, 0x163: 0x34b6, - 0x164: 0x3191, 0x165: 0x34a7, 0x168: 0x4797, 0x169: 0x4828, - 0x16a: 0x479c, 0x16b: 0x482d, 0x16c: 0x31be, 0x16d: 0x34d4, 0x16e: 0x31c8, 0x16f: 0x34de, - 0x170: 0x31cd, 0x171: 0x34e3, 0x172: 0x31eb, 0x173: 0x3501, 0x174: 0x320e, 0x175: 0x3524, - 0x176: 0x3236, 0x177: 0x3551, 0x178: 0x324a, 0x179: 0x3259, 0x17a: 0x3579, 0x17b: 0x3263, - 0x17c: 0x3583, 0x17d: 0x3268, 0x17e: 0x3588, 0x17f: 0x00a7, - // Block 0x6, offset 0x180 - 0x184: 0x2dea, 0x185: 0x2df0, - 0x186: 0x2df6, 0x187: 0x196e, 0x188: 0x1971, 0x189: 0x1a04, 0x18a: 0x1983, 0x18b: 0x1986, - 0x18c: 0x1a3a, 0x18d: 0x2f84, 0x18e: 0x3290, 0x18f: 0x3092, 0x190: 0x339e, 0x191: 0x313c, - 0x192: 0x344d, 0x193: 0x31d2, 0x194: 0x34e8, 0x195: 0x39cb, 0x196: 0x3b5a, 0x197: 0x39c4, - 0x198: 0x3b53, 0x199: 0x39d2, 0x19a: 0x3b61, 0x19b: 0x39bd, 0x19c: 0x3b4c, - 0x19e: 0x38ac, 0x19f: 0x3a3b, 0x1a0: 0x38a5, 0x1a1: 0x3a34, 0x1a2: 0x35af, 0x1a3: 0x35c1, - 0x1a6: 0x303d, 0x1a7: 0x3349, 0x1a8: 0x30ba, 0x1a9: 0x33cb, - 0x1aa: 0x477e, 0x1ab: 0x480f, 0x1ac: 0x398c, 0x1ad: 0x3b1b, 0x1ae: 0x35d3, 0x1af: 0x35d9, - 0x1b0: 0x33c1, 0x1b1: 0x193e, 0x1b2: 0x1941, 0x1b3: 0x19cb, 0x1b4: 0x3024, 0x1b5: 0x3330, - 0x1b8: 0x30f6, 0x1b9: 0x3407, 0x1ba: 0x38b3, 0x1bb: 0x3a42, - 0x1bc: 0x35a9, 0x1bd: 0x35bb, 0x1be: 0x35b5, 0x1bf: 0x35c7, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f89, 0x1c1: 0x3295, 0x1c2: 0x2f8e, 0x1c3: 0x329a, 0x1c4: 0x3006, 0x1c5: 0x3312, - 0x1c6: 0x300b, 0x1c7: 0x3317, 0x1c8: 0x3097, 0x1c9: 0x33a3, 0x1ca: 0x309c, 0x1cb: 0x33a8, - 0x1cc: 0x3141, 0x1cd: 0x3452, 0x1ce: 0x3146, 0x1cf: 0x3457, 0x1d0: 0x3164, 0x1d1: 0x3475, - 0x1d2: 0x3169, 0x1d3: 0x347a, 0x1d4: 0x31d7, 0x1d5: 0x34ed, 0x1d6: 0x31dc, 0x1d7: 0x34f2, - 0x1d8: 0x3182, 0x1d9: 0x3493, 0x1da: 0x319b, 0x1db: 0x34b1, - 0x1de: 0x3056, 0x1df: 0x3362, - 0x1e6: 0x4724, 0x1e7: 0x47b5, 0x1e8: 0x474c, 0x1e9: 0x47dd, - 0x1ea: 0x395b, 0x1eb: 0x3aea, 0x1ec: 0x3938, 0x1ed: 0x3ac7, 0x1ee: 0x476a, 0x1ef: 0x47fb, - 0x1f0: 0x3954, 0x1f1: 0x3ae3, 0x1f2: 0x3240, 0x1f3: 0x355b, - // 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: 0x4a40, 0x241: 0x4a45, 0x242: 0x9932, 0x243: 0x4a4a, 0x244: 0x4a4f, 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: 0x42a1, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x4256, 0x285: 0x450d, - 0x286: 0x35e5, 0x287: 0x00ce, 0x288: 0x3603, 0x289: 0x360f, 0x28a: 0x3621, - 0x28c: 0x363f, 0x28e: 0x3651, 0x28f: 0x366f, 0x290: 0x3e04, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3633, 0x2ab: 0x3663, 0x2ac: 0x4890, 0x2ad: 0x3693, 0x2ae: 0x48ba, 0x2af: 0x36a5, - 0x2b0: 0x3e6c, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x48d2, 0x2cb: 0x48f0, - 0x2cc: 0x36c3, 0x2cd: 0x36db, 0x2ce: 0x4908, 0x2d0: 0x01be, 0x2d1: 0x01d0, - 0x2d2: 0x01ac, 0x2d3: 0x439e, 0x2d4: 0x43a4, 0x2d5: 0x01fa, 0x2d6: 0x01e8, - 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, - 0x2f9: 0x01a6, - // Block 0xc, offset 0x300 - 0x300: 0x371d, 0x301: 0x3729, 0x303: 0x3717, - 0x306: 0xa000, 0x307: 0x3705, - 0x30c: 0x3759, 0x30d: 0x3741, 0x30e: 0x376b, 0x310: 0xa000, - 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x374d, 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: 0x37d1, 0x33a: 0xa000, - 0x33e: 0xa000, - // Block 0xd, offset 0x340 - 0x341: 0x372f, 0x342: 0x37b3, - 0x350: 0x370b, 0x351: 0x378f, - 0x352: 0x3711, 0x353: 0x3795, 0x356: 0x3723, 0x357: 0x37a7, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3825, 0x35b: 0x382b, 0x35c: 0x3735, 0x35d: 0x37b9, - 0x35e: 0x373b, 0x35f: 0x37bf, 0x362: 0x3747, 0x363: 0x37cb, - 0x364: 0x3753, 0x365: 0x37d7, 0x366: 0x375f, 0x367: 0x37e3, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3831, 0x36b: 0x3837, 0x36c: 0x3789, 0x36d: 0x380d, 0x36e: 0x3765, 0x36f: 0x37e9, - 0x370: 0x3771, 0x371: 0x37f5, 0x372: 0x3777, 0x373: 0x37fb, 0x374: 0x377d, 0x375: 0x3801, - 0x378: 0x3783, 0x379: 0x3807, - // Block 0xe, offset 0x380 - 0x387: 0x1d5d, - 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: 0x1d80, - 0x3f6: 0x200f, 0x3f7: 0x204b, 0x3f8: 0x2046, - // Block 0x10, offset 0x400 - 0x405: 0xa000, - 0x406: 0x2d22, 0x407: 0xa000, 0x408: 0x2d2a, 0x409: 0xa000, 0x40a: 0x2d32, 0x40b: 0xa000, - 0x40c: 0x2d3a, 0x40d: 0xa000, 0x40e: 0x2d42, 0x411: 0xa000, - 0x412: 0x2d4a, - 0x434: 0x8102, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d52, - 0x43c: 0xa000, 0x43d: 0x2d5a, 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: 0x2f93, 0x4c1: 0x329f, 0x4c2: 0x2f9d, 0x4c3: 0x32a9, 0x4c4: 0x2fa2, 0x4c5: 0x32ae, - 0x4c6: 0x2fa7, 0x4c7: 0x32b3, 0x4c8: 0x38c8, 0x4c9: 0x3a57, 0x4ca: 0x2fc0, 0x4cb: 0x32cc, - 0x4cc: 0x2fca, 0x4cd: 0x32d6, 0x4ce: 0x2fd9, 0x4cf: 0x32e5, 0x4d0: 0x2fcf, 0x4d1: 0x32db, - 0x4d2: 0x2fd4, 0x4d3: 0x32e0, 0x4d4: 0x38eb, 0x4d5: 0x3a7a, 0x4d6: 0x38f2, 0x4d7: 0x3a81, - 0x4d8: 0x3015, 0x4d9: 0x3321, 0x4da: 0x301a, 0x4db: 0x3326, 0x4dc: 0x3900, 0x4dd: 0x3a8f, - 0x4de: 0x301f, 0x4df: 0x332b, 0x4e0: 0x302e, 0x4e1: 0x333a, 0x4e2: 0x304c, 0x4e3: 0x3358, - 0x4e4: 0x305b, 0x4e5: 0x3367, 0x4e6: 0x3051, 0x4e7: 0x335d, 0x4e8: 0x3060, 0x4e9: 0x336c, - 0x4ea: 0x3065, 0x4eb: 0x3371, 0x4ec: 0x30ab, 0x4ed: 0x33b7, 0x4ee: 0x3907, 0x4ef: 0x3a96, - 0x4f0: 0x30b5, 0x4f1: 0x33c6, 0x4f2: 0x30bf, 0x4f3: 0x33d0, 0x4f4: 0x30c9, 0x4f5: 0x33da, - 0x4f6: 0x4756, 0x4f7: 0x47e7, 0x4f8: 0x390e, 0x4f9: 0x3a9d, 0x4fa: 0x30e2, 0x4fb: 0x33f3, - 0x4fc: 0x30dd, 0x4fd: 0x33ee, 0x4fe: 0x30e7, 0x4ff: 0x33f8, - // Block 0x14, offset 0x500 - 0x500: 0x30ec, 0x501: 0x33fd, 0x502: 0x30f1, 0x503: 0x3402, 0x504: 0x3105, 0x505: 0x3416, - 0x506: 0x310f, 0x507: 0x3420, 0x508: 0x311e, 0x509: 0x342f, 0x50a: 0x3119, 0x50b: 0x342a, - 0x50c: 0x3931, 0x50d: 0x3ac0, 0x50e: 0x393f, 0x50f: 0x3ace, 0x510: 0x3946, 0x511: 0x3ad5, - 0x512: 0x394d, 0x513: 0x3adc, 0x514: 0x314b, 0x515: 0x345c, 0x516: 0x3150, 0x517: 0x3461, - 0x518: 0x315a, 0x519: 0x346b, 0x51a: 0x4783, 0x51b: 0x4814, 0x51c: 0x3993, 0x51d: 0x3b22, - 0x51e: 0x3173, 0x51f: 0x3484, 0x520: 0x317d, 0x521: 0x348e, 0x522: 0x4792, 0x523: 0x4823, - 0x524: 0x399a, 0x525: 0x3b29, 0x526: 0x39a1, 0x527: 0x3b30, 0x528: 0x39a8, 0x529: 0x3b37, - 0x52a: 0x318c, 0x52b: 0x349d, 0x52c: 0x3196, 0x52d: 0x34ac, 0x52e: 0x31aa, 0x52f: 0x34c0, - 0x530: 0x31a5, 0x531: 0x34bb, 0x532: 0x31e6, 0x533: 0x34fc, 0x534: 0x31f5, 0x535: 0x350b, - 0x536: 0x31f0, 0x537: 0x3506, 0x538: 0x39af, 0x539: 0x3b3e, 0x53a: 0x39b6, 0x53b: 0x3b45, - 0x53c: 0x31fa, 0x53d: 0x3510, 0x53e: 0x31ff, 0x53f: 0x3515, - // Block 0x15, offset 0x540 - 0x540: 0x3204, 0x541: 0x351a, 0x542: 0x3209, 0x543: 0x351f, 0x544: 0x3218, 0x545: 0x352e, - 0x546: 0x3213, 0x547: 0x3529, 0x548: 0x321d, 0x549: 0x3538, 0x54a: 0x3222, 0x54b: 0x353d, - 0x54c: 0x3227, 0x54d: 0x3542, 0x54e: 0x3245, 0x54f: 0x3560, 0x550: 0x325e, 0x551: 0x357e, - 0x552: 0x326d, 0x553: 0x358d, 0x554: 0x3272, 0x555: 0x3592, 0x556: 0x3376, 0x557: 0x34a2, - 0x558: 0x3533, 0x559: 0x356f, 0x55a: 0x1bdc, 0x55b: 0x42d3, - 0x560: 0x4733, 0x561: 0x47c4, 0x562: 0x2f7f, 0x563: 0x328b, - 0x564: 0x3874, 0x565: 0x3a03, 0x566: 0x386d, 0x567: 0x39fc, 0x568: 0x3882, 0x569: 0x3a11, - 0x56a: 0x387b, 0x56b: 0x3a0a, 0x56c: 0x38ba, 0x56d: 0x3a49, 0x56e: 0x3890, 0x56f: 0x3a1f, - 0x570: 0x3889, 0x571: 0x3a18, 0x572: 0x389e, 0x573: 0x3a2d, 0x574: 0x3897, 0x575: 0x3a26, - 0x576: 0x38c1, 0x577: 0x3a50, 0x578: 0x4747, 0x579: 0x47d8, 0x57a: 0x2ffc, 0x57b: 0x3308, - 0x57c: 0x2fe8, 0x57d: 0x32f4, 0x57e: 0x38d6, 0x57f: 0x3a65, - // Block 0x16, offset 0x580 - 0x580: 0x38cf, 0x581: 0x3a5e, 0x582: 0x38e4, 0x583: 0x3a73, 0x584: 0x38dd, 0x585: 0x3a6c, - 0x586: 0x38f9, 0x587: 0x3a88, 0x588: 0x308d, 0x589: 0x3399, 0x58a: 0x30a1, 0x58b: 0x33ad, - 0x58c: 0x4779, 0x58d: 0x480a, 0x58e: 0x3132, 0x58f: 0x3443, 0x590: 0x391c, 0x591: 0x3aab, - 0x592: 0x3915, 0x593: 0x3aa4, 0x594: 0x392a, 0x595: 0x3ab9, 0x596: 0x3923, 0x597: 0x3ab2, - 0x598: 0x3985, 0x599: 0x3b14, 0x59a: 0x3969, 0x59b: 0x3af8, 0x59c: 0x3962, 0x59d: 0x3af1, - 0x59e: 0x3977, 0x59f: 0x3b06, 0x5a0: 0x3970, 0x5a1: 0x3aff, 0x5a2: 0x397e, 0x5a3: 0x3b0d, - 0x5a4: 0x31e1, 0x5a5: 0x34f7, 0x5a6: 0x31c3, 0x5a7: 0x34d9, 0x5a8: 0x39e0, 0x5a9: 0x3b6f, - 0x5aa: 0x39d9, 0x5ab: 0x3b68, 0x5ac: 0x39ee, 0x5ad: 0x3b7d, 0x5ae: 0x39e7, 0x5af: 0x3b76, - 0x5b0: 0x39f5, 0x5b1: 0x3b84, 0x5b2: 0x322c, 0x5b3: 0x3547, 0x5b4: 0x3254, 0x5b5: 0x3574, - 0x5b6: 0x324f, 0x5b7: 0x356a, 0x5b8: 0x323b, 0x5b9: 0x3556, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x4896, 0x5c1: 0x489c, 0x5c2: 0x49b0, 0x5c3: 0x49c8, 0x5c4: 0x49b8, 0x5c5: 0x49d0, - 0x5c6: 0x49c0, 0x5c7: 0x49d8, 0x5c8: 0x483c, 0x5c9: 0x4842, 0x5ca: 0x4920, 0x5cb: 0x4938, - 0x5cc: 0x4928, 0x5cd: 0x4940, 0x5ce: 0x4930, 0x5cf: 0x4948, 0x5d0: 0x48a8, 0x5d1: 0x48ae, - 0x5d2: 0x3db4, 0x5d3: 0x3dc4, 0x5d4: 0x3dbc, 0x5d5: 0x3dcc, - 0x5d8: 0x4848, 0x5d9: 0x484e, 0x5da: 0x3ce4, 0x5db: 0x3cf4, 0x5dc: 0x3cec, 0x5dd: 0x3cfc, - 0x5e0: 0x48c0, 0x5e1: 0x48c6, 0x5e2: 0x49e0, 0x5e3: 0x49f8, - 0x5e4: 0x49e8, 0x5e5: 0x4a00, 0x5e6: 0x49f0, 0x5e7: 0x4a08, 0x5e8: 0x4854, 0x5e9: 0x485a, - 0x5ea: 0x4950, 0x5eb: 0x4968, 0x5ec: 0x4958, 0x5ed: 0x4970, 0x5ee: 0x4960, 0x5ef: 0x4978, - 0x5f0: 0x48d8, 0x5f1: 0x48de, 0x5f2: 0x3e14, 0x5f3: 0x3e2c, 0x5f4: 0x3e1c, 0x5f5: 0x3e34, - 0x5f6: 0x3e24, 0x5f7: 0x3e3c, 0x5f8: 0x4860, 0x5f9: 0x4866, 0x5fa: 0x3d14, 0x5fb: 0x3d2c, - 0x5fc: 0x3d1c, 0x5fd: 0x3d34, 0x5fe: 0x3d24, 0x5ff: 0x3d3c, - // Block 0x18, offset 0x600 - 0x600: 0x48e4, 0x601: 0x48ea, 0x602: 0x3e44, 0x603: 0x3e54, 0x604: 0x3e4c, 0x605: 0x3e5c, - 0x608: 0x486c, 0x609: 0x4872, 0x60a: 0x3d44, 0x60b: 0x3d54, - 0x60c: 0x3d4c, 0x60d: 0x3d5c, 0x610: 0x48f6, 0x611: 0x48fc, - 0x612: 0x3e7c, 0x613: 0x3e94, 0x614: 0x3e84, 0x615: 0x3e9c, 0x616: 0x3e8c, 0x617: 0x3ea4, - 0x619: 0x4878, 0x61b: 0x3d64, 0x61d: 0x3d6c, - 0x61f: 0x3d74, 0x620: 0x490e, 0x621: 0x4914, 0x622: 0x4a10, 0x623: 0x4a28, - 0x624: 0x4a18, 0x625: 0x4a30, 0x626: 0x4a20, 0x627: 0x4a38, 0x628: 0x487e, 0x629: 0x4884, - 0x62a: 0x4980, 0x62b: 0x4998, 0x62c: 0x4988, 0x62d: 0x49a0, 0x62e: 0x4990, 0x62f: 0x49a8, - 0x630: 0x488a, 0x631: 0x43b0, 0x632: 0x368d, 0x633: 0x43b6, 0x634: 0x48b4, 0x635: 0x43bc, - 0x636: 0x369f, 0x637: 0x43c2, 0x638: 0x36bd, 0x639: 0x43c8, 0x63a: 0x36d5, 0x63b: 0x43ce, - 0x63c: 0x4902, 0x63d: 0x43d4, - // Block 0x19, offset 0x640 - 0x640: 0x3d9c, 0x641: 0x3da4, 0x642: 0x4180, 0x643: 0x419e, 0x644: 0x418a, 0x645: 0x41a8, - 0x646: 0x4194, 0x647: 0x41b2, 0x648: 0x3cd4, 0x649: 0x3cdc, 0x64a: 0x40cc, 0x64b: 0x40ea, - 0x64c: 0x40d6, 0x64d: 0x40f4, 0x64e: 0x40e0, 0x64f: 0x40fe, 0x650: 0x3de4, 0x651: 0x3dec, - 0x652: 0x41bc, 0x653: 0x41da, 0x654: 0x41c6, 0x655: 0x41e4, 0x656: 0x41d0, 0x657: 0x41ee, - 0x658: 0x3d04, 0x659: 0x3d0c, 0x65a: 0x4108, 0x65b: 0x4126, 0x65c: 0x4112, 0x65d: 0x4130, - 0x65e: 0x411c, 0x65f: 0x413a, 0x660: 0x3ebc, 0x661: 0x3ec4, 0x662: 0x41f8, 0x663: 0x4216, - 0x664: 0x4202, 0x665: 0x4220, 0x666: 0x420c, 0x667: 0x422a, 0x668: 0x3d7c, 0x669: 0x3d84, - 0x66a: 0x4144, 0x66b: 0x4162, 0x66c: 0x414e, 0x66d: 0x416c, 0x66e: 0x4158, 0x66f: 0x4176, - 0x670: 0x3681, 0x671: 0x367b, 0x672: 0x3d8c, 0x673: 0x3687, 0x674: 0x3d94, - 0x676: 0x48a2, 0x677: 0x3dac, 0x678: 0x35f1, 0x679: 0x35eb, 0x67a: 0x35df, 0x67b: 0x4380, - 0x67c: 0x35f7, 0x67d: 0x4283, 0x67e: 0x01d3, 0x67f: 0x4283, - // Block 0x1a, offset 0x680 - 0x680: 0x429c, 0x681: 0x4514, 0x682: 0x3dd4, 0x683: 0x3699, 0x684: 0x3ddc, - 0x686: 0x48cc, 0x687: 0x3df4, 0x688: 0x35fd, 0x689: 0x4386, 0x68a: 0x3609, 0x68b: 0x438c, - 0x68c: 0x3615, 0x68d: 0x451b, 0x68e: 0x4522, 0x68f: 0x4529, 0x690: 0x36b1, 0x691: 0x36ab, - 0x692: 0x3dfc, 0x693: 0x4576, 0x696: 0x36b7, 0x697: 0x3e0c, - 0x698: 0x362d, 0x699: 0x3627, 0x69a: 0x361b, 0x69b: 0x4392, 0x69d: 0x4530, - 0x69e: 0x4537, 0x69f: 0x453e, 0x6a0: 0x36e7, 0x6a1: 0x36e1, 0x6a2: 0x3e64, 0x6a3: 0x457e, - 0x6a4: 0x36c9, 0x6a5: 0x36cf, 0x6a6: 0x36ed, 0x6a7: 0x3e74, 0x6a8: 0x365d, 0x6a9: 0x3657, - 0x6aa: 0x364b, 0x6ab: 0x439e, 0x6ac: 0x3645, 0x6ad: 0x4506, 0x6ae: 0x450d, 0x6af: 0x0081, - 0x6b2: 0x3eac, 0x6b3: 0x36f3, 0x6b4: 0x3eb4, - 0x6b6: 0x491a, 0x6b7: 0x3ecc, 0x6b8: 0x3639, 0x6b9: 0x4398, 0x6ba: 0x3669, 0x6bb: 0x43aa, - 0x6bc: 0x3675, 0x6bd: 0x4256, 0x6be: 0x4288, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x1bd4, 0x6c1: 0x1bd8, 0x6c2: 0x0047, 0x6c3: 0x1c50, 0x6c5: 0x1be4, - 0x6c6: 0x1be8, 0x6c7: 0x00e9, 0x6c9: 0x1c54, 0x6ca: 0x008f, 0x6cb: 0x0051, - 0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053, - 0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x1989, - 0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065, - 0x6e0: 0x199b, 0x6e1: 0x1bc4, 0x6e2: 0x19a4, - 0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075, - 0x6ea: 0x0057, 0x6eb: 0x42ce, 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: 0x1b94, - 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: 0x222a, 0x711: 0x2236, - 0x712: 0x22ea, 0x713: 0x2212, 0x714: 0x2296, 0x715: 0x221e, 0x716: 0x229c, 0x717: 0x22b4, - 0x718: 0x22c0, 0x719: 0x2224, 0x71a: 0x22c6, 0x71b: 0x2230, 0x71c: 0x22ba, 0x71d: 0x22cc, - 0x71e: 0x22d2, 0x71f: 0x1cb8, 0x720: 0x0053, 0x721: 0x1956, 0x722: 0x1ba0, 0x723: 0x195f, - 0x724: 0x006d, 0x725: 0x19a7, 0x726: 0x1bcc, 0x727: 0x1d44, 0x728: 0x1962, 0x729: 0x0071, - 0x72a: 0x19b3, 0x72b: 0x1bd0, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b, - 0x730: 0x0093, 0x731: 0x19e0, 0x732: 0x1c14, 0x733: 0x19e9, 0x734: 0x00ad, 0x735: 0x1a5e, - 0x736: 0x1c48, 0x737: 0x1d58, 0x738: 0x19ec, 0x739: 0x00b1, 0x73a: 0x1a61, 0x73b: 0x1c4c, - 0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b, - // Block 0x1d, offset 0x740 - 0x741: 0x3c02, 0x743: 0xa000, 0x744: 0x3c09, 0x745: 0xa000, - 0x747: 0x3c10, 0x748: 0xa000, 0x749: 0x3c17, - 0x74d: 0xa000, - 0x760: 0x2f61, 0x761: 0xa000, 0x762: 0x3c25, - 0x764: 0xa000, 0x765: 0xa000, - 0x76d: 0x3c1e, 0x76e: 0x2f5c, 0x76f: 0x2f66, - 0x770: 0x3c2c, 0x771: 0x3c33, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3a, 0x775: 0x3c41, - 0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c48, 0x779: 0x3c4f, 0x77a: 0xa000, 0x77b: 0xa000, - 0x77c: 0xa000, 0x77d: 0xa000, - // Block 0x1e, offset 0x780 - 0x780: 0x3c56, 0x781: 0x3c5d, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c72, 0x785: 0x3c79, - 0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c80, 0x789: 0x3c87, - 0x791: 0xa000, - 0x792: 0xa000, - 0x7a2: 0xa000, - 0x7a8: 0xa000, 0x7a9: 0xa000, - 0x7ab: 0xa000, 0x7ac: 0x3c9c, 0x7ad: 0x3ca3, 0x7ae: 0x3caa, 0x7af: 0x3cb1, - 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: 0x187e, - 0x7ea: 0x1881, 0x7eb: 0x1884, 0x7ec: 0x1887, 0x7ed: 0x188a, 0x7ee: 0x188d, 0x7ef: 0x1890, - 0x7f0: 0x1893, 0x7f1: 0x1896, 0x7f2: 0x1899, 0x7f3: 0x18a2, 0x7f4: 0x1a64, 0x7f5: 0x1a68, - 0x7f6: 0x1a6c, 0x7f7: 0x1a70, 0x7f8: 0x1a74, 0x7f9: 0x1a78, 0x7fa: 0x1a7c, 0x7fb: 0x1a80, - 0x7fc: 0x1a84, 0x7fd: 0x1c7c, 0x7fe: 0x1c81, 0x7ff: 0x1c86, - // Block 0x20, offset 0x800 - 0x800: 0x1c8b, 0x801: 0x1c90, 0x802: 0x1c95, 0x803: 0x1c9a, 0x804: 0x1c9f, 0x805: 0x1ca4, - 0x806: 0x1ca9, 0x807: 0x1cae, 0x808: 0x187b, 0x809: 0x189f, 0x80a: 0x18c3, 0x80b: 0x18e7, - 0x80c: 0x190b, 0x80d: 0x1914, 0x80e: 0x191a, 0x80f: 0x1920, 0x810: 0x1926, 0x811: 0x1b5c, - 0x812: 0x1b60, 0x813: 0x1b64, 0x814: 0x1b68, 0x815: 0x1b6c, 0x816: 0x1b70, 0x817: 0x1b74, - 0x818: 0x1b78, 0x819: 0x1b7c, 0x81a: 0x1b80, 0x81b: 0x1b84, 0x81c: 0x1af0, 0x81d: 0x1af4, - 0x81e: 0x1af8, 0x81f: 0x1afc, 0x820: 0x1b00, 0x821: 0x1b04, 0x822: 0x1b08, 0x823: 0x1b0c, - 0x824: 0x1b10, 0x825: 0x1b14, 0x826: 0x1b18, 0x827: 0x1b1c, 0x828: 0x1b20, 0x829: 0x1b24, - 0x82a: 0x1b28, 0x82b: 0x1b2c, 0x82c: 0x1b30, 0x82d: 0x1b34, 0x82e: 0x1b38, 0x82f: 0x1b3c, - 0x830: 0x1b40, 0x831: 0x1b44, 0x832: 0x1b48, 0x833: 0x1b4c, 0x834: 0x1b50, 0x835: 0x1b54, - 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: 0x144f, 0x8e5: 0x1453, 0x8e6: 0x145b, 0x8e7: 0x1487, 0x8e8: 0x148b, 0x8e9: 0x149b, - 0x8ea: 0x14bf, 0x8eb: 0x14cb, 0x8ec: 0x14db, 0x8ed: 0x14f3, 0x8ee: 0x14fb, 0x8ef: 0x14ff, - 0x8f0: 0x1503, 0x8f1: 0x1507, 0x8f2: 0x1513, 0x8f3: 0x1517, 0x8f4: 0x151f, 0x8f5: 0x153b, - 0x8f6: 0x153f, 0x8f7: 0x1543, 0x8f8: 0x155b, 0x8f9: 0x155f, 0x8fa: 0x1567, 0x8fb: 0x157b, - 0x8fc: 0x157f, 0x8fd: 0x1583, 0x8fe: 0x158b, 0x8ff: 0x158f, - // Block 0x24, offset 0x900 - 0x906: 0xa000, 0x90b: 0xa000, - 0x90c: 0x3f04, 0x90d: 0xa000, 0x90e: 0x3f0c, 0x90f: 0xa000, 0x910: 0x3f14, 0x911: 0xa000, - 0x912: 0x3f1c, 0x913: 0xa000, 0x914: 0x3f24, 0x915: 0xa000, 0x916: 0x3f2c, 0x917: 0xa000, - 0x918: 0x3f34, 0x919: 0xa000, 0x91a: 0x3f3c, 0x91b: 0xa000, 0x91c: 0x3f44, 0x91d: 0xa000, - 0x91e: 0x3f4c, 0x91f: 0xa000, 0x920: 0x3f54, 0x921: 0xa000, 0x922: 0x3f5c, - 0x924: 0xa000, 0x925: 0x3f64, 0x926: 0xa000, 0x927: 0x3f6c, 0x928: 0xa000, 0x929: 0x3f74, - 0x92f: 0xa000, - 0x930: 0x3f7c, 0x931: 0x3f84, 0x932: 0xa000, 0x933: 0x3f8c, 0x934: 0x3f94, 0x935: 0xa000, - 0x936: 0x3f9c, 0x937: 0x3fa4, 0x938: 0xa000, 0x939: 0x3fac, 0x93a: 0x3fb4, 0x93b: 0xa000, - 0x93c: 0x3fbc, 0x93d: 0x3fc4, - // Block 0x25, offset 0x940 - 0x954: 0x3efc, - 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x436e, 0x95c: 0x4374, 0x95d: 0xa000, - 0x95e: 0x3fcc, 0x95f: 0x26b0, - 0x966: 0xa000, - 0x96b: 0xa000, 0x96c: 0x3fdc, 0x96d: 0xa000, 0x96e: 0x3fe4, 0x96f: 0xa000, - 0x970: 0x3fec, 0x971: 0xa000, 0x972: 0x3ff4, 0x973: 0xa000, 0x974: 0x3ffc, 0x975: 0xa000, - 0x976: 0x4004, 0x977: 0xa000, 0x978: 0x400c, 0x979: 0xa000, 0x97a: 0x4014, 0x97b: 0xa000, - 0x97c: 0x401c, 0x97d: 0xa000, 0x97e: 0x4024, 0x97f: 0xa000, - // Block 0x26, offset 0x980 - 0x980: 0x402c, 0x981: 0xa000, 0x982: 0x4034, 0x984: 0xa000, 0x985: 0x403c, - 0x986: 0xa000, 0x987: 0x4044, 0x988: 0xa000, 0x989: 0x404c, - 0x98f: 0xa000, 0x990: 0x4054, 0x991: 0x405c, - 0x992: 0xa000, 0x993: 0x4064, 0x994: 0x406c, 0x995: 0xa000, 0x996: 0x4074, 0x997: 0x407c, - 0x998: 0xa000, 0x999: 0x4084, 0x99a: 0x408c, 0x99b: 0xa000, 0x99c: 0x4094, 0x99d: 0x409c, - 0x9af: 0xa000, - 0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd4, - 0x9b7: 0x40a4, 0x9b8: 0x40ac, 0x9b9: 0x40b4, 0x9ba: 0x40bc, - 0x9bd: 0xa000, 0x9be: 0x40c4, 0x9bf: 0x26c5, - // 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: 0x42d8, 0x9d0: 0x42dd, 0x9d1: 0x42e2, - 0x9d2: 0x42e7, 0x9d3: 0x42ec, 0x9d4: 0x42f1, 0x9d5: 0x42f6, 0x9d6: 0x42fb, 0x9d7: 0x4300, - 0x9d8: 0x4305, 0x9d9: 0x430a, 0x9da: 0x430f, 0x9db: 0x4314, 0x9dc: 0x4319, 0x9dd: 0x431e, - 0x9de: 0x4323, 0x9df: 0x4328, 0x9e0: 0x432d, 0x9e1: 0x4332, 0x9e2: 0x4337, 0x9e3: 0x433c, - 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: 0x2050, 0xa41: 0x2056, 0xa42: 0x205c, 0xa43: 0x2062, 0xa44: 0x2068, 0xa45: 0x206e, - 0xa46: 0x2074, 0xa47: 0x207a, 0xa48: 0x2080, 0xa49: 0x2086, 0xa4a: 0x208c, 0xa4b: 0x2092, - 0xa4c: 0x2098, 0xa4d: 0x209e, 0xa4e: 0x2722, 0xa4f: 0x272b, 0xa50: 0x2734, 0xa51: 0x273d, - 0xa52: 0x2746, 0xa53: 0x274f, 0xa54: 0x2758, 0xa55: 0x2761, 0xa56: 0x276a, 0xa57: 0x277c, - 0xa58: 0x2785, 0xa59: 0x278e, 0xa5a: 0x2797, 0xa5b: 0x27a0, 0xa5c: 0x2773, 0xa5d: 0x2ba8, - 0xa5e: 0x2ae9, 0xa60: 0x20a4, 0xa61: 0x20bc, 0xa62: 0x20b0, 0xa63: 0x2104, - 0xa64: 0x20c2, 0xa65: 0x20e0, 0xa66: 0x20aa, 0xa67: 0x20da, 0xa68: 0x20b6, 0xa69: 0x20ec, - 0xa6a: 0x211c, 0xa6b: 0x213a, 0xa6c: 0x2134, 0xa6d: 0x2128, 0xa6e: 0x2176, 0xa6f: 0x210a, - 0xa70: 0x2116, 0xa71: 0x212e, 0xa72: 0x2122, 0xa73: 0x214c, 0xa74: 0x20f8, 0xa75: 0x2140, - 0xa76: 0x216a, 0xa77: 0x2152, 0xa78: 0x20e6, 0xa79: 0x20c8, 0xa7a: 0x20fe, 0xa7b: 0x2110, - 0xa7c: 0x2146, 0xa7d: 0x20ce, 0xa7e: 0x2170, 0xa7f: 0x20f2, - // Block 0x2a, offset 0xa80 - 0xa80: 0x2158, 0xa81: 0x20d4, 0xa82: 0x215e, 0xa83: 0x2164, 0xa84: 0x092f, 0xa85: 0x0b03, - 0xa86: 0x0ca7, 0xa87: 0x10c7, - 0xa90: 0x1bc0, 0xa91: 0x18a5, - 0xa92: 0x18a8, 0xa93: 0x18ab, 0xa94: 0x18ae, 0xa95: 0x18b1, 0xa96: 0x18b4, 0xa97: 0x18b7, - 0xa98: 0x18ba, 0xa99: 0x18bd, 0xa9a: 0x18c6, 0xa9b: 0x18c9, 0xa9c: 0x18cc, 0xa9d: 0x18cf, - 0xa9e: 0x18d2, 0xa9f: 0x18d5, 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: 0x2e14, 0xaaf: 0x2e1c, - 0xab0: 0x2e24, 0xab1: 0x2e2c, 0xab2: 0x2e34, 0xab3: 0x2e3c, 0xab4: 0x2e44, 0xab5: 0x2e4c, - 0xab6: 0x2e5c, 0xab7: 0x2e64, 0xab8: 0x2e6c, 0xab9: 0x2e74, 0xaba: 0x2e7c, 0xabb: 0x2e84, - 0xabc: 0x2ecf, 0xabd: 0x2e97, 0xabe: 0x2e54, - // 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: 0x145b, 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: 0x1523, 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: 0x18d8, 0xaf2: 0x18db, 0xaf3: 0x18de, 0xaf4: 0x18e1, 0xaf5: 0x18ea, - 0xaf6: 0x18ed, 0xaf7: 0x18f0, 0xaf8: 0x18f3, 0xaf9: 0x18f6, 0xafa: 0x18f9, 0xafb: 0x18fc, - 0xafc: 0x18ff, 0xafd: 0x1902, 0xafe: 0x1905, 0xaff: 0x190e, - // Block 0x2c, offset 0xb00 - 0xb00: 0x1cc2, 0xb01: 0x1cd1, 0xb02: 0x1ce0, 0xb03: 0x1cef, 0xb04: 0x1cfe, 0xb05: 0x1d0d, - 0xb06: 0x1d1c, 0xb07: 0x1d2b, 0xb08: 0x1d3a, 0xb09: 0x2188, 0xb0a: 0x219a, 0xb0b: 0x21ac, - 0xb0c: 0x1950, 0xb0d: 0x1c00, 0xb0e: 0x19ce, 0xb0f: 0x1ba4, 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: 0x2b08, 0xb41: 0x29a4, 0xb42: 0x2b18, 0xb43: 0x287c, 0xb44: 0x2ee0, 0xb45: 0x2886, - 0xb46: 0x2890, 0xb47: 0x2f24, 0xb48: 0x29b1, 0xb49: 0x289a, 0xb4a: 0x28a4, 0xb4b: 0x28ae, - 0xb4c: 0x29d8, 0xb4d: 0x29e5, 0xb4e: 0x29be, 0xb4f: 0x29cb, 0xb50: 0x2ea5, 0xb51: 0x29f2, - 0xb52: 0x29ff, 0xb53: 0x2bba, 0xb54: 0x26b7, 0xb55: 0x2bcd, 0xb56: 0x2be0, 0xb57: 0x2b28, - 0xb58: 0x2a0c, 0xb59: 0x2bf3, 0xb5a: 0x2c06, 0xb5b: 0x2a19, 0xb5c: 0x28b8, 0xb5d: 0x28c2, - 0xb5e: 0x2eb3, 0xb5f: 0x2a26, 0xb60: 0x2b38, 0xb61: 0x2ef1, 0xb62: 0x28cc, 0xb63: 0x28d6, - 0xb64: 0x2a33, 0xb65: 0x28e0, 0xb66: 0x28ea, 0xb67: 0x26cc, 0xb68: 0x26d3, 0xb69: 0x28f4, - 0xb6a: 0x28fe, 0xb6b: 0x2c19, 0xb6c: 0x2a40, 0xb6d: 0x2b48, 0xb6e: 0x2c2c, 0xb6f: 0x2a4d, - 0xb70: 0x2912, 0xb71: 0x2908, 0xb72: 0x2f38, 0xb73: 0x2a5a, 0xb74: 0x2c3f, 0xb75: 0x291c, - 0xb76: 0x2b58, 0xb77: 0x2926, 0xb78: 0x2a74, 0xb79: 0x2930, 0xb7a: 0x2a81, 0xb7b: 0x2f02, - 0xb7c: 0x2a67, 0xb7d: 0x2b68, 0xb7e: 0x2a8e, 0xb7f: 0x26da, - // Block 0x2e, offset 0xb80 - 0xb80: 0x2f13, 0xb81: 0x293a, 0xb82: 0x2944, 0xb83: 0x2a9b, 0xb84: 0x294e, 0xb85: 0x2958, - 0xb86: 0x2962, 0xb87: 0x2b78, 0xb88: 0x2aa8, 0xb89: 0x26e1, 0xb8a: 0x2c52, 0xb8b: 0x2e8c, - 0xb8c: 0x2b88, 0xb8d: 0x2ab5, 0xb8e: 0x2ec1, 0xb8f: 0x296c, 0xb90: 0x2976, 0xb91: 0x2ac2, - 0xb92: 0x26e8, 0xb93: 0x2acf, 0xb94: 0x2b98, 0xb95: 0x26ef, 0xb96: 0x2c65, 0xb97: 0x2980, - 0xb98: 0x1cb3, 0xb99: 0x1cc7, 0xb9a: 0x1cd6, 0xb9b: 0x1ce5, 0xb9c: 0x1cf4, 0xb9d: 0x1d03, - 0xb9e: 0x1d12, 0xb9f: 0x1d21, 0xba0: 0x1d30, 0xba1: 0x1d3f, 0xba2: 0x218e, 0xba3: 0x21a0, - 0xba4: 0x21b2, 0xba5: 0x21be, 0xba6: 0x21ca, 0xba7: 0x21d6, 0xba8: 0x21e2, 0xba9: 0x21ee, - 0xbaa: 0x21fa, 0xbab: 0x2206, 0xbac: 0x2242, 0xbad: 0x224e, 0xbae: 0x225a, 0xbaf: 0x2266, - 0xbb0: 0x2272, 0xbb1: 0x1c10, 0xbb2: 0x19c2, 0xbb3: 0x1932, 0xbb4: 0x1be0, 0xbb5: 0x1a43, - 0xbb6: 0x1a52, 0xbb7: 0x19c8, 0xbb8: 0x1bf8, 0xbb9: 0x1bfc, 0xbba: 0x195c, 0xbbb: 0x26fd, - 0xbbc: 0x270b, 0xbbd: 0x26f6, 0xbbe: 0x2704, 0xbbf: 0x2adc, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1a46, 0xbc1: 0x1a2e, 0xbc2: 0x1c5c, 0xbc3: 0x1a16, 0xbc4: 0x19ef, 0xbc5: 0x1965, - 0xbc6: 0x1974, 0xbc7: 0x1944, 0xbc8: 0x1bec, 0xbc9: 0x1d4e, 0xbca: 0x1a49, 0xbcb: 0x1a31, - 0xbcc: 0x1c60, 0xbcd: 0x1c6c, 0xbce: 0x1a22, 0xbcf: 0x19f8, 0xbd0: 0x1953, 0xbd1: 0x1c18, - 0xbd2: 0x1bac, 0xbd3: 0x1b98, 0xbd4: 0x1bc8, 0xbd5: 0x1c70, 0xbd6: 0x1a25, 0xbd7: 0x19c5, - 0xbd8: 0x19fb, 0xbd9: 0x19da, 0xbda: 0x1a3d, 0xbdb: 0x1c74, 0xbdc: 0x1a28, 0xbdd: 0x19bc, - 0xbde: 0x19fe, 0xbdf: 0x1c38, 0xbe0: 0x1bf0, 0xbe1: 0x1a10, 0xbe2: 0x1c20, 0xbe3: 0x1c3c, - 0xbe4: 0x1bf4, 0xbe5: 0x1a13, 0xbe6: 0x1c24, 0xbe7: 0x22e4, 0xbe8: 0x22f8, 0xbe9: 0x1992, - 0xbea: 0x1c1c, 0xbeb: 0x1bb0, 0xbec: 0x1b9c, 0xbed: 0x1c44, 0xbee: 0x2712, 0xbef: 0x27a9, - 0xbf0: 0x1a55, 0xbf1: 0x1a40, 0xbf2: 0x1c78, 0xbf3: 0x1a2b, 0xbf4: 0x1a4c, 0xbf5: 0x1a34, - 0xbf6: 0x1c64, 0xbf7: 0x1a19, 0xbf8: 0x19f2, 0xbf9: 0x197d, 0xbfa: 0x1a4f, 0xbfb: 0x1a37, - 0xbfc: 0x1c68, 0xbfd: 0x1a1c, 0xbfe: 0x19f5, 0xbff: 0x1980, - // Block 0x30, offset 0xc00 - 0xc00: 0x1c28, 0xc01: 0x1bb4, 0xc02: 0x1d49, 0xc03: 0x1935, 0xc04: 0x19b6, 0xc05: 0x19b9, - 0xc06: 0x22f1, 0xc07: 0x1b90, 0xc08: 0x19bf, 0xc09: 0x1947, 0xc0a: 0x19dd, 0xc0b: 0x194a, - 0xc0c: 0x19e6, 0xc0d: 0x1968, 0xc0e: 0x196b, 0xc0f: 0x1a01, 0xc10: 0x1a07, 0xc11: 0x1a0a, - 0xc12: 0x1c2c, 0xc13: 0x1a0d, 0xc14: 0x1a1f, 0xc15: 0x1c34, 0xc16: 0x1c40, 0xc17: 0x198c, - 0xc18: 0x1d53, 0xc19: 0x1bb8, 0xc1a: 0x198f, 0xc1b: 0x1a58, 0xc1c: 0x19a1, 0xc1d: 0x19b0, - 0xc1e: 0x22de, 0xc1f: 0x22d8, 0xc20: 0x1cbd, 0xc21: 0x1ccc, 0xc22: 0x1cdb, 0xc23: 0x1cea, - 0xc24: 0x1cf9, 0xc25: 0x1d08, 0xc26: 0x1d17, 0xc27: 0x1d26, 0xc28: 0x1d35, 0xc29: 0x2182, - 0xc2a: 0x2194, 0xc2b: 0x21a6, 0xc2c: 0x21b8, 0xc2d: 0x21c4, 0xc2e: 0x21d0, 0xc2f: 0x21dc, - 0xc30: 0x21e8, 0xc31: 0x21f4, 0xc32: 0x2200, 0xc33: 0x223c, 0xc34: 0x2248, 0xc35: 0x2254, - 0xc36: 0x2260, 0xc37: 0x226c, 0xc38: 0x2278, 0xc39: 0x227e, 0xc3a: 0x2284, 0xc3b: 0x228a, - 0xc3c: 0x2290, 0xc3d: 0x22a2, 0xc3e: 0x22a8, 0xc3f: 0x1c0c, - // Block 0x31, offset 0xc40 - 0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb, - 0xc46: 0x08df, 0xc47: 0x1627, 0xc48: 0x1627, 0xc49: 0x0a0b, 0xc4a: 0x145b, 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: 0x1443, 0xc5a: 0x156f, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87, - 0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15bf, 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: 0x14eb, 0xc79: 0x159f, 0xc7a: 0x15bb, 0xc7b: 0x102b, - 0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x1477, - // Block 0x32, offset 0xc80 - 0xc80: 0x15c7, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b, - 0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e3, 0xc8a: 0x09c3, 0xc8b: 0x0a8f, - 0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a3, - 0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127, - 0xc98: 0x125b, 0xc99: 0x14ab, 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: 0x1457, 0xcbf: 0x085b, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f, - 0xcc6: 0x1493, 0xcc7: 0x1577, 0xcc8: 0x15cb, 0xcc9: 0x15e3, 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: 0x147b, 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: 0x145f, 0xcf2: 0x14df, 0xcf3: 0x14ef, 0xcf4: 0x152b, 0xcf5: 0x0753, - 0xcf6: 0x107f, 0xcf7: 0x144b, 0xcf8: 0x14c7, 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: 0x161f, 0xd05: 0x0ce3, - 0xd06: 0x149f, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47, - 0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x1537, 0xd11: 0x07af, - 0xd12: 0x0c03, 0xd13: 0x14af, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df, - 0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14b7, 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: 0x1453, - 0xd2a: 0x14d3, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b, - 0xd30: 0x1287, 0xd31: 0x14bb, 0xd32: 0x15a7, 0xd33: 0x15cf, 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: 0x14a7, 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: 0x14f7, 0xd5d: 0x10eb, - 0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353, - 0xd65: 0x1407, 0xd66: 0x1433, - 0xd6a: 0x154b, 0xd6b: 0x154f, 0xd6c: 0x1553, 0xd6d: 0x15b7, 0xd6e: 0x142b, 0xd6f: 0x14c3, - 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: 0x14d7, 0xda9: 0x151b, - 0xdaa: 0x1533, 0xdab: 0x0b9b, 0xdac: 0x171a, 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: 0x1447, 0xe05: 0x1467, - 0xe06: 0x14b3, 0xe07: 0x14d7, 0xe08: 0x14f7, 0xe09: 0x150b, 0xe0a: 0x151b, 0xe0b: 0x1527, - 0xe0c: 0x1533, 0xe0d: 0x1587, 0xe0e: 0x1627, 0xe0f: 0x16b1, 0xe10: 0x16ac, 0xe11: 0x16de, - 0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1760, 0xe16: 0x178d, 0xe17: 0x1805, - 0xe18: 0x1613, 0xe19: 0x1623, - // Block 0x39, offset 0xe40 - 0xe40: 0x19d1, 0xe41: 0x19d4, 0xe42: 0x19d7, 0xe43: 0x1c04, 0xe44: 0x1c08, 0xe45: 0x1a5b, - 0xe46: 0x1a5b, - 0xe53: 0x1d71, 0xe54: 0x1d62, 0xe55: 0x1d67, 0xe56: 0x1d76, 0xe57: 0x1d6c, - 0xe5d: 0x4422, - 0xe5e: 0x8115, 0xe5f: 0x4494, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221, - 0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017, - 0xe6a: 0x4482, 0xe6b: 0x4488, 0xe6c: 0x4586, 0xe6d: 0x458e, 0xe6e: 0x43da, 0xe6f: 0x43e0, - 0xe70: 0x43e6, 0xe71: 0x43ec, 0xe72: 0x43f8, 0xe73: 0x43fe, 0xe74: 0x4404, 0xe75: 0x4410, - 0xe76: 0x4416, 0xe78: 0x441c, 0xe79: 0x4428, 0xe7a: 0x442e, 0xe7b: 0x4434, - 0xe7c: 0x4440, 0xe7e: 0x4446, - // Block 0x3a, offset 0xe80 - 0xe80: 0x444c, 0xe81: 0x4452, 0xe83: 0x4458, 0xe84: 0x445e, - 0xe86: 0x446a, 0xe87: 0x4470, 0xe88: 0x4476, 0xe89: 0x447c, 0xe8a: 0x448e, 0xe8b: 0x440a, - 0xe8c: 0x43f2, 0xe8d: 0x443a, 0xe8e: 0x4464, 0xe8f: 0x1d7b, 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: 0x4500, 0xee5: 0x4500, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed, - 0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308, - 0xef0: 0x44fa, 0xef1: 0x44fa, - // 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: 0x204b, - 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: 0x25a6, 0xf2b: 0x25a6, 0xf2c: 0x2616, 0xf2d: 0x2616, 0xf2e: 0x25e5, 0xf2f: 0x25e5, - 0xf30: 0x2601, 0xf31: 0x2601, 0xf32: 0x25fa, 0xf33: 0x25fa, 0xf34: 0x2608, 0xf35: 0x2608, - 0xf36: 0x260f, 0xf37: 0x260f, 0xf38: 0x260f, 0xf39: 0x25ec, 0xf3a: 0x25ec, 0xf3b: 0x25ec, - 0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302, - // Block 0x3d, offset 0xf40 - 0xf40: 0x25ad, 0xf41: 0x25b4, 0xf42: 0x25d0, 0xf43: 0x25ec, 0xf44: 0x25f3, 0xf45: 0x1d85, - 0xf46: 0x1d8a, 0xf47: 0x1d8f, 0xf48: 0x1d9e, 0xf49: 0x1dad, 0xf4a: 0x1db2, 0xf4b: 0x1db7, - 0xf4c: 0x1dbc, 0xf4d: 0x1dc1, 0xf4e: 0x1dd0, 0xf4f: 0x1ddf, 0xf50: 0x1de4, 0xf51: 0x1de9, - 0xf52: 0x1df8, 0xf53: 0x1e07, 0xf54: 0x1e0c, 0xf55: 0x1e11, 0xf56: 0x1e16, 0xf57: 0x1e25, - 0xf58: 0x1e2a, 0xf59: 0x1e39, 0xf5a: 0x1e3e, 0xf5b: 0x1e43, 0xf5c: 0x1e52, 0xf5d: 0x1e57, - 0xf5e: 0x1e5c, 0xf5f: 0x1e66, 0xf60: 0x1ea2, 0xf61: 0x1eb1, 0xf62: 0x1ec0, 0xf63: 0x1ec5, - 0xf64: 0x1eca, 0xf65: 0x1ed4, 0xf66: 0x1ee3, 0xf67: 0x1ee8, 0xf68: 0x1ef7, 0xf69: 0x1efc, - 0xf6a: 0x1f01, 0xf6b: 0x1f10, 0xf6c: 0x1f15, 0xf6d: 0x1f24, 0xf6e: 0x1f29, 0xf6f: 0x1f2e, - 0xf70: 0x1f33, 0xf71: 0x1f38, 0xf72: 0x1f3d, 0xf73: 0x1f42, 0xf74: 0x1f47, 0xf75: 0x1f4c, - 0xf76: 0x1f51, 0xf77: 0x1f56, 0xf78: 0x1f5b, 0xf79: 0x1f60, 0xf7a: 0x1f65, 0xf7b: 0x1f6a, - 0xf7c: 0x1f6f, 0xf7d: 0x1f74, 0xf7e: 0x1f79, 0xf7f: 0x1f83, - // Block 0x3e, offset 0xf80 - 0xf80: 0x1f88, 0xf81: 0x1f8d, 0xf82: 0x1f92, 0xf83: 0x1f9c, 0xf84: 0x1fa1, 0xf85: 0x1fab, - 0xf86: 0x1fb0, 0xf87: 0x1fb5, 0xf88: 0x1fba, 0xf89: 0x1fbf, 0xf8a: 0x1fc4, 0xf8b: 0x1fc9, - 0xf8c: 0x1fce, 0xf8d: 0x1fd3, 0xf8e: 0x1fe2, 0xf8f: 0x1ff1, 0xf90: 0x1ff6, 0xf91: 0x1ffb, - 0xf92: 0x2000, 0xf93: 0x2005, 0xf94: 0x200a, 0xf95: 0x2014, 0xf96: 0x2019, 0xf97: 0x201e, - 0xf98: 0x202d, 0xf99: 0x203c, 0xf9a: 0x2041, 0xf9b: 0x44b2, 0xf9c: 0x44b8, 0xf9d: 0x44ee, - 0xf9e: 0x4545, 0xf9f: 0x454c, 0xfa0: 0x4553, 0xfa1: 0x455a, 0xfa2: 0x4561, 0xfa3: 0x4568, - 0xfa4: 0x25c2, 0xfa5: 0x25c9, 0xfa6: 0x25d0, 0xfa7: 0x25d7, 0xfa8: 0x25ec, 0xfa9: 0x25f3, - 0xfaa: 0x1d94, 0xfab: 0x1d99, 0xfac: 0x1d9e, 0xfad: 0x1da3, 0xfae: 0x1dad, 0xfaf: 0x1db2, - 0xfb0: 0x1dc6, 0xfb1: 0x1dcb, 0xfb2: 0x1dd0, 0xfb3: 0x1dd5, 0xfb4: 0x1ddf, 0xfb5: 0x1de4, - 0xfb6: 0x1dee, 0xfb7: 0x1df3, 0xfb8: 0x1df8, 0xfb9: 0x1dfd, 0xfba: 0x1e07, 0xfbb: 0x1e0c, - 0xfbc: 0x1f38, 0xfbd: 0x1f3d, 0xfbe: 0x1f4c, 0xfbf: 0x1f51, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x1f56, 0xfc1: 0x1f6a, 0xfc2: 0x1f6f, 0xfc3: 0x1f74, 0xfc4: 0x1f79, 0xfc5: 0x1f92, - 0xfc6: 0x1f9c, 0xfc7: 0x1fa1, 0xfc8: 0x1fa6, 0xfc9: 0x1fba, 0xfca: 0x1fd8, 0xfcb: 0x1fdd, - 0xfcc: 0x1fe2, 0xfcd: 0x1fe7, 0xfce: 0x1ff1, 0xfcf: 0x1ff6, 0xfd0: 0x44ee, 0xfd1: 0x2023, - 0xfd2: 0x2028, 0xfd3: 0x202d, 0xfd4: 0x2032, 0xfd5: 0x203c, 0xfd6: 0x2041, 0xfd7: 0x25ad, - 0xfd8: 0x25b4, 0xfd9: 0x25bb, 0xfda: 0x25d0, 0xfdb: 0x25de, 0xfdc: 0x1d85, 0xfdd: 0x1d8a, - 0xfde: 0x1d8f, 0xfdf: 0x1d9e, 0xfe0: 0x1da8, 0xfe1: 0x1db7, 0xfe2: 0x1dbc, 0xfe3: 0x1dc1, - 0xfe4: 0x1dd0, 0xfe5: 0x1dda, 0xfe6: 0x1df8, 0xfe7: 0x1e11, 0xfe8: 0x1e16, 0xfe9: 0x1e25, - 0xfea: 0x1e2a, 0xfeb: 0x1e39, 0xfec: 0x1e43, 0xfed: 0x1e52, 0xfee: 0x1e57, 0xfef: 0x1e5c, - 0xff0: 0x1e66, 0xff1: 0x1ea2, 0xff2: 0x1ea7, 0xff3: 0x1eb1, 0xff4: 0x1ec0, 0xff5: 0x1ec5, - 0xff6: 0x1eca, 0xff7: 0x1ed4, 0xff8: 0x1ee3, 0xff9: 0x1ef7, 0xffa: 0x1efc, 0xffb: 0x1f01, - 0xffc: 0x1f10, 0xffd: 0x1f15, 0xffe: 0x1f24, 0xfff: 0x1f29, - // Block 0x40, offset 0x1000 - 0x1000: 0x1f2e, 0x1001: 0x1f33, 0x1002: 0x1f42, 0x1003: 0x1f47, 0x1004: 0x1f5b, 0x1005: 0x1f60, - 0x1006: 0x1f65, 0x1007: 0x1f6a, 0x1008: 0x1f6f, 0x1009: 0x1f83, 0x100a: 0x1f88, 0x100b: 0x1f8d, - 0x100c: 0x1f92, 0x100d: 0x1f97, 0x100e: 0x1fab, 0x100f: 0x1fb0, 0x1010: 0x1fb5, 0x1011: 0x1fba, - 0x1012: 0x1fc9, 0x1013: 0x1fce, 0x1014: 0x1fd3, 0x1015: 0x1fe2, 0x1016: 0x1fec, 0x1017: 0x1ffb, - 0x1018: 0x2000, 0x1019: 0x44e2, 0x101a: 0x2014, 0x101b: 0x2019, 0x101c: 0x201e, 0x101d: 0x202d, - 0x101e: 0x2037, 0x101f: 0x25d0, 0x1020: 0x25de, 0x1021: 0x1d9e, 0x1022: 0x1da8, 0x1023: 0x1dd0, - 0x1024: 0x1dda, 0x1025: 0x1df8, 0x1026: 0x1e02, 0x1027: 0x1e66, 0x1028: 0x1e6b, 0x1029: 0x1e8e, - 0x102a: 0x1e93, 0x102b: 0x1f6a, 0x102c: 0x1f6f, 0x102d: 0x1f92, 0x102e: 0x1fe2, 0x102f: 0x1fec, - 0x1030: 0x202d, 0x1031: 0x2037, 0x1032: 0x4596, 0x1033: 0x459e, 0x1034: 0x45a6, 0x1035: 0x1eed, - 0x1036: 0x1ef2, 0x1037: 0x1f06, 0x1038: 0x1f0b, 0x1039: 0x1f1a, 0x103a: 0x1f1f, 0x103b: 0x1e70, - 0x103c: 0x1e75, 0x103d: 0x1e98, 0x103e: 0x1e9d, 0x103f: 0x1e2f, - // Block 0x41, offset 0x1040 - 0x1040: 0x1e34, 0x1041: 0x1e1b, 0x1042: 0x1e20, 0x1043: 0x1e48, 0x1044: 0x1e4d, 0x1045: 0x1eb6, - 0x1046: 0x1ebb, 0x1047: 0x1ed9, 0x1048: 0x1ede, 0x1049: 0x1e7a, 0x104a: 0x1e7f, 0x104b: 0x1e84, - 0x104c: 0x1e8e, 0x104d: 0x1e89, 0x104e: 0x1e61, 0x104f: 0x1eac, 0x1050: 0x1ecf, 0x1051: 0x1eed, - 0x1052: 0x1ef2, 0x1053: 0x1f06, 0x1054: 0x1f0b, 0x1055: 0x1f1a, 0x1056: 0x1f1f, 0x1057: 0x1e70, - 0x1058: 0x1e75, 0x1059: 0x1e98, 0x105a: 0x1e9d, 0x105b: 0x1e2f, 0x105c: 0x1e34, 0x105d: 0x1e1b, - 0x105e: 0x1e20, 0x105f: 0x1e48, 0x1060: 0x1e4d, 0x1061: 0x1eb6, 0x1062: 0x1ebb, 0x1063: 0x1ed9, - 0x1064: 0x1ede, 0x1065: 0x1e7a, 0x1066: 0x1e7f, 0x1067: 0x1e84, 0x1068: 0x1e8e, 0x1069: 0x1e89, - 0x106a: 0x1e61, 0x106b: 0x1eac, 0x106c: 0x1ecf, 0x106d: 0x1e7a, 0x106e: 0x1e7f, 0x106f: 0x1e84, - 0x1070: 0x1e8e, 0x1071: 0x1e6b, 0x1072: 0x1e93, 0x1073: 0x1ee8, 0x1074: 0x1e52, 0x1075: 0x1e57, - 0x1076: 0x1e5c, 0x1077: 0x1e7a, 0x1078: 0x1e7f, 0x1079: 0x1e84, 0x107a: 0x1ee8, 0x107b: 0x1ef7, - 0x107c: 0x449a, 0x107d: 0x449a, - // Block 0x42, offset 0x1080 - 0x1090: 0x230d, 0x1091: 0x2322, - 0x1092: 0x2322, 0x1093: 0x2329, 0x1094: 0x2330, 0x1095: 0x2345, 0x1096: 0x234c, 0x1097: 0x2353, - 0x1098: 0x2376, 0x1099: 0x2376, 0x109a: 0x2399, 0x109b: 0x2392, 0x109c: 0x23ae, 0x109d: 0x23a0, - 0x109e: 0x23a7, 0x109f: 0x23ca, 0x10a0: 0x23ca, 0x10a1: 0x23c3, 0x10a2: 0x23d1, 0x10a3: 0x23d1, - 0x10a4: 0x23fb, 0x10a5: 0x23fb, 0x10a6: 0x2417, 0x10a7: 0x23df, 0x10a8: 0x23df, 0x10a9: 0x23d8, - 0x10aa: 0x23ed, 0x10ab: 0x23ed, 0x10ac: 0x23f4, 0x10ad: 0x23f4, 0x10ae: 0x241e, 0x10af: 0x242c, - 0x10b0: 0x242c, 0x10b1: 0x2433, 0x10b2: 0x2433, 0x10b3: 0x243a, 0x10b4: 0x2441, 0x10b5: 0x2448, - 0x10b6: 0x244f, 0x10b7: 0x244f, 0x10b8: 0x2456, 0x10b9: 0x2464, 0x10ba: 0x2472, 0x10bb: 0x246b, - 0x10bc: 0x2479, 0x10bd: 0x2479, 0x10be: 0x248e, 0x10bf: 0x2495, - // Block 0x43, offset 0x10c0 - 0x10c0: 0x24c6, 0x10c1: 0x24d4, 0x10c2: 0x24cd, 0x10c3: 0x24b1, 0x10c4: 0x24b1, 0x10c5: 0x24db, - 0x10c6: 0x24db, 0x10c7: 0x24e2, 0x10c8: 0x24e2, 0x10c9: 0x250c, 0x10ca: 0x2513, 0x10cb: 0x251a, - 0x10cc: 0x24f0, 0x10cd: 0x24fe, 0x10ce: 0x2521, 0x10cf: 0x2528, - 0x10d2: 0x24f7, 0x10d3: 0x257c, 0x10d4: 0x2583, 0x10d5: 0x2559, 0x10d6: 0x2560, 0x10d7: 0x2544, - 0x10d8: 0x2544, 0x10d9: 0x254b, 0x10da: 0x2575, 0x10db: 0x256e, 0x10dc: 0x2598, 0x10dd: 0x2598, - 0x10de: 0x2306, 0x10df: 0x231b, 0x10e0: 0x2314, 0x10e1: 0x233e, 0x10e2: 0x2337, 0x10e3: 0x2361, - 0x10e4: 0x235a, 0x10e5: 0x2384, 0x10e6: 0x2368, 0x10e7: 0x237d, 0x10e8: 0x23b5, 0x10e9: 0x2402, - 0x10ea: 0x23e6, 0x10eb: 0x2425, 0x10ec: 0x24bf, 0x10ed: 0x24e9, 0x10ee: 0x2591, 0x10ef: 0x258a, - 0x10f0: 0x259f, 0x10f1: 0x2536, 0x10f2: 0x249c, 0x10f3: 0x2567, 0x10f4: 0x248e, 0x10f5: 0x24c6, - 0x10f6: 0x245d, 0x10f7: 0x24aa, 0x10f8: 0x253d, 0x10f9: 0x252f, 0x10fa: 0x24b8, 0x10fb: 0x24a3, - 0x10fc: 0x24b8, 0x10fd: 0x253d, 0x10fe: 0x236f, 0x10ff: 0x238b, - // Block 0x44, offset 0x1100 - 0x1100: 0x2505, 0x1101: 0x2480, 0x1102: 0x22ff, 0x1103: 0x24a3, 0x1104: 0x2448, 0x1105: 0x2417, - 0x1106: 0x23bc, 0x1107: 0x2552, - 0x1130: 0x2410, 0x1131: 0x2487, 0x1132: 0x27bb, 0x1133: 0x27b2, 0x1134: 0x27e8, 0x1135: 0x27d6, - 0x1136: 0x27c4, 0x1137: 0x27df, 0x1138: 0x27f1, 0x1139: 0x2409, 0x113a: 0x2c78, 0x113b: 0x2af8, - 0x113c: 0x27cd, - // Block 0x45, offset 0x1140 - 0x1150: 0x0019, 0x1151: 0x0483, - 0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf, - 0x1158: 0x04c3, 0x1159: 0x1b58, - 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: 0x186f, 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: 0x4265, 0x118a: 0x4265, 0x118b: 0x4265, - 0x118c: 0x4265, 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: 0x42a6, 0x11b1: 0x44be, 0x11b2: 0x42ab, 0x11b4: 0x42b0, - 0x11b6: 0x42b5, 0x11b7: 0x44c4, 0x11b8: 0x42ba, 0x11b9: 0x44ca, 0x11ba: 0x42bf, 0x11bb: 0x44d0, - 0x11bc: 0x42c4, 0x11bd: 0x44d6, 0x11be: 0x42c9, 0x11bf: 0x44dc, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x0236, 0x11c1: 0x44a0, 0x11c2: 0x44a0, 0x11c3: 0x44a6, 0x11c4: 0x44a6, 0x11c5: 0x44e8, - 0x11c6: 0x44e8, 0x11c7: 0x44ac, 0x11c8: 0x44ac, 0x11c9: 0x44f4, 0x11ca: 0x44f4, 0x11cb: 0x44f4, - 0x11cc: 0x44f4, 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: 0x2dfc, - 0x1236: 0x2dfc, 0x1237: 0x2e04, 0x1238: 0x2e04, 0x1239: 0x2e0c, 0x123a: 0x2e0c, 0x123b: 0x1f7e, - 0x123c: 0x1f7e, - // 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: 0x4a56, 0x129f: 0x4a5c, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4341, - 0x12a4: 0x031b, 0x12a5: 0x4346, 0x12a6: 0x434b, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327, - 0x12aa: 0x4350, 0x12ab: 0x4355, 0x12ac: 0x435a, 0x12ad: 0x435f, 0x12ae: 0x4364, 0x12af: 0x4369, - 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: 0x42d8, 0x12c3: 0x42dd, 0x12c4: 0x42e2, 0x12c5: 0x42e7, - 0x12c6: 0x42ec, 0x12c7: 0x42f1, 0x12ca: 0x42f6, 0x12cb: 0x42fb, - 0x12cc: 0x4300, 0x12cd: 0x4305, 0x12ce: 0x430a, 0x12cf: 0x430f, - 0x12d2: 0x4314, 0x12d3: 0x4319, 0x12d4: 0x431e, 0x12d5: 0x4323, 0x12d6: 0x4328, 0x12d7: 0x432d, - 0x12da: 0x4332, 0x12db: 0x4337, 0x12dc: 0x433c, - 0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4260, - 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: 0x1875, 0x1441: 0x1872, 0x1442: 0x1878, 0x1443: 0x189c, 0x1444: 0x18c0, 0x1445: 0x18e4, - 0x1446: 0x1908, 0x1447: 0x1911, 0x1448: 0x1917, 0x1449: 0x191d, 0x144a: 0x1923, - 0x1450: 0x1a88, 0x1451: 0x1a8c, - 0x1452: 0x1a90, 0x1453: 0x1a94, 0x1454: 0x1a98, 0x1455: 0x1a9c, 0x1456: 0x1aa0, 0x1457: 0x1aa4, - 0x1458: 0x1aa8, 0x1459: 0x1aac, 0x145a: 0x1ab0, 0x145b: 0x1ab4, 0x145c: 0x1ab8, 0x145d: 0x1abc, - 0x145e: 0x1ac0, 0x145f: 0x1ac4, 0x1460: 0x1ac8, 0x1461: 0x1acc, 0x1462: 0x1ad0, 0x1463: 0x1ad4, - 0x1464: 0x1ad8, 0x1465: 0x1adc, 0x1466: 0x1ae0, 0x1467: 0x1ae4, 0x1468: 0x1ae8, 0x1469: 0x1aec, - 0x146a: 0x271a, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x1938, 0x146e: 0x19ad, - 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: 0x26a9, 0x1481: 0x26be, 0x1482: 0x0503, - 0x1490: 0x0c0f, 0x1491: 0x0a47, - 0x1492: 0x08d3, 0x1493: 0x4656, 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, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1643, 0x14c4: 0x0747, 0x14c5: 0x0757, - 0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773, - 0x14cc: 0x05b3, 0x14cd: 0x1657, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3, - 0x14d2: 0x1648, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1652, 0x14d7: 0x07cf, - 0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x182d, 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: 0x1666, 0x14f5: 0x0e93, - 0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166b, 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: 0x1670, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef, - 0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1675, 0x1521: 0x167a, 0x1522: 0x0a1f, 0x1523: 0x0a23, - 0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37, - 0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x167f, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63, - 0x1530: 0x0a6b, 0x1531: 0x1684, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f, - 0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x168e, - 0x153c: 0x0aaf, 0x153d: 0x1693, 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: 0x1698, 0x154a: 0x05db, 0x154b: 0x0b0f, - 0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x185f, 0x1550: 0x0b37, 0x1551: 0x16a2, - 0x1552: 0x16a2, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c5, - 0x1558: 0x1797, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83, - 0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3, - 0x1564: 0x16a7, 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: 0x16b6, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b, - 0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bb, 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: 0x16c0, 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: 0x16d9, - 0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e3, - 0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b, - 0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16e8, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f, - 0x15b0: 0x16ed, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7, - 0x15b6: 0x0dbb, 0x15b7: 0x16f2, 0x15b8: 0x1689, 0x15b9: 0x16f7, 0x15ba: 0x0ddb, 0x15bb: 0x16fc, - 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: 0x1701, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53, - 0x15cc: 0x0e4f, 0x15cd: 0x1706, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170b, 0x15d1: 0x1710, - 0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b, - 0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x164d, 0x15dc: 0x0eb3, 0x15dd: 0x1715, - 0x15de: 0x0ebf, 0x15df: 0x171f, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1724, - 0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x1729, 0x15e7: 0x172e, 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: 0x1733, - 0x15f6: 0x0fa3, 0x15f7: 0x1738, 0x15f8: 0x0faf, 0x15f9: 0x169d, 0x15fa: 0x0fbf, 0x15fb: 0x173d, - 0x15fc: 0x1742, 0x15fd: 0x1747, 0x15fe: 0x0627, 0x15ff: 0x062b, - // Block 0x58, offset 0x1600 - 0x1600: 0x0ff7, 0x1601: 0x1751, 0x1602: 0x174c, 0x1603: 0x1756, 0x1604: 0x175b, 0x1605: 0x0fff, - 0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637, - 0x160c: 0x063b, 0x160d: 0x1765, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f, - 0x1612: 0x176a, 0x1613: 0x105b, 0x1614: 0x176f, 0x1615: 0x1774, 0x1616: 0x107b, 0x1617: 0x1093, - 0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x1779, 0x161d: 0x177e, - 0x161e: 0x177e, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1783, 0x1622: 0x10cf, 0x1623: 0x10d3, - 0x1624: 0x064b, 0x1625: 0x1788, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7, - 0x162a: 0x1107, 0x162b: 0x1792, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133, - 0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x179c, 0x1633: 0x17a1, 0x1634: 0x065b, 0x1635: 0x17a6, - 0x1636: 0x115b, 0x1637: 0x17ab, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b0, - 0x163c: 0x17b5, 0x163d: 0x118f, 0x163e: 0x17ba, 0x163f: 0x1197, - // Block 0x59, offset 0x1640 - 0x1640: 0x16ca, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7, - 0x1646: 0x0a33, 0x1647: 0x17bf, 0x1648: 0x17c4, 0x1649: 0x16cf, 0x164a: 0x16d4, 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: 0x17c9, - 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: 0x17ce, 0x1665: 0x17d8, 0x1666: 0x17d3, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273, - 0x166a: 0x127b, 0x166b: 0x17ec, 0x166c: 0x127f, 0x166d: 0x17dd, 0x166e: 0x0673, 0x166f: 0x0677, - 0x1670: 0x17e2, 0x1671: 0x17e7, 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: 0x17f1, - 0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17f6, - 0x168c: 0x17fb, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b, - 0x1692: 0x137b, 0x1693: 0x1800, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7, - 0x1698: 0x180a, 0x1699: 0x165c, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1661, - 0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x180f, 0x16a1: 0x1814, 0x16a2: 0x1423, 0x16a3: 0x142f, - 0x16a4: 0x1437, 0x16a5: 0x1819, 0x16a6: 0x143b, 0x16a7: 0x1463, 0x16a8: 0x146f, 0x16a9: 0x1473, - 0x16aa: 0x146b, 0x16ab: 0x147f, 0x16ac: 0x1483, 0x16ad: 0x181e, 0x16ae: 0x148f, 0x16af: 0x0693, - 0x16b0: 0x1497, 0x16b1: 0x1823, 0x16b2: 0x0697, 0x16b3: 0x14cf, 0x16b4: 0x0ac3, 0x16b5: 0x14e7, - 0x16b6: 0x1828, 0x16b7: 0x1832, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x150f, 0x16bb: 0x1837, - 0x16bc: 0x06a3, 0x16bd: 0x183c, 0x16be: 0x1527, 0x16bf: 0x1527, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x152f, 0x16c1: 0x1841, 0x16c2: 0x1547, 0x16c3: 0x06a7, 0x16c4: 0x1557, 0x16c5: 0x1563, - 0x16c6: 0x156b, 0x16c7: 0x1573, 0x16c8: 0x06ab, 0x16c9: 0x1846, 0x16ca: 0x1587, 0x16cb: 0x15a3, - 0x16cc: 0x15af, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b3, 0x16d0: 0x184b, 0x16d1: 0x06b7, - 0x16d2: 0x1850, 0x16d3: 0x1855, 0x16d4: 0x185a, 0x16d5: 0x15d7, 0x16d6: 0x06bb, 0x16d7: 0x15eb, - 0x16d8: 0x15f3, 0x16d9: 0x15f7, 0x16da: 0x15ff, 0x16db: 0x1607, 0x16dc: 0x160f, 0x16dd: 0x1864, -} - -// 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, - 0x392: 0xd2, 0x393: 0xd3, 0x396: 0xd4, 0x397: 0xd5, - 0x398: 0xd6, 0x39a: 0xd7, 0x39c: 0xd8, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xd9, 0x3ec: 0xda, - // Block 0x10, offset 0x400 - 0x432: 0xdb, - // Block 0x11, offset 0x440 - 0x445: 0xdc, 0x446: 0xdd, 0x447: 0xde, - 0x449: 0xdf, - 0x450: 0xe0, 0x451: 0xe1, 0x452: 0xe2, 0x453: 0xe3, 0x454: 0xe4, 0x455: 0xe5, 0x456: 0xe6, 0x457: 0xe7, - 0x458: 0xe8, 0x459: 0xe9, 0x45a: 0x4a, 0x45b: 0xea, 0x45c: 0xeb, 0x45d: 0xec, 0x45e: 0xed, 0x45f: 0x4b, - // Block 0x12, offset 0x480 - 0x4a3: 0xee, - 0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e, - // Block 0x13, offset 0x4c0 - 0x4c4: 0x4f, 0x4c5: 0xef, 0x4c6: 0xf0, - 0x4c8: 0x50, 0x4c9: 0xf1, - // 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: 152 entries, 304 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x86, 0x8e, 0x95, 0x98, 0x9f, 0xa3, 0xa7, 0xa9, 0xab, 0xb4, 0xb8, 0xbf, 0xc4, 0xc7, 0xd1, 0xd3, 0xda, 0xe2, 0xe6, 0xe8, 0xeb, 0xef, 0xf5, 0x106, 0x112, 0x114, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12b, 0x12e, 0x130, 0x133, 0x136, 0x13a, 0x13f, 0x148, 0x14a, 0x14d, 0x14f, 0x15a, 0x165, 0x174, 0x182, 0x190, 0x1a0, 0x1ae, 0x1b5, 0x1bb, 0x1ca, 0x1ce, 0x1d0, 0x1d4, 0x1d6, 0x1d9, 0x1db, 0x1de, 0x1e0, 0x1e3, 0x1e5, 0x1e7, 0x1e9, 0x1f5, 0x1ff, 0x209, 0x20c, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21b, 0x21d, 0x21f, 0x221, 0x223, 0x229, 0x22c, 0x230, 0x232, 0x239, 0x23f, 0x245, 0x24d, 0x253, 0x259, 0x25f, 0x263, 0x265, 0x267, 0x269, 0x26b, 0x271, 0x274, 0x277, 0x27f, 0x286, 0x289, 0x28c, 0x28e, 0x296, 0x29d, 0x2a0, 0x2a6, 0x2a8, 0x2aa, 0x2ad, 0x2af, 0x2b1, 0x2b3, 0x2b5, 0x2c2, 0x2cc, 0x2ce, 0x2d0, 0x2d4, 0x2d9, 0x2e5, 0x2ea, 0x2f3, 0x2f9, 0x2fe, 0x302, 0x307, 0x30b, 0x31b, 0x329, 0x337, 0x345, 0x347, 0x351, 0x353} - -// nfkcSparseValues: 861 entries, 3444 bytes -var nfkcSparseValues = [861]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0002, lo: 0x0d}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x4274, lo: 0xa8, hi: 0xa8}, - {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x4260, lo: 0xaf, hi: 0xaf}, - {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x4256, lo: 0xb4, hi: 0xb4}, - {value: 0x01dc, lo: 0xb5, hi: 0xb5}, - {value: 0x428d, lo: 0xb8, hi: 0xb8}, - {value: 0x0023, lo: 0xb9, hi: 0xb9}, - {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x2218, lo: 0xbc, hi: 0xbc}, - {value: 0x220c, lo: 0xbd, hi: 0xbd}, - {value: 0x22ae, lo: 0xbe, hi: 0xbe}, - // Block 0x1, offset 0xe - {value: 0x0091, lo: 0x03}, - {value: 0x4774, lo: 0xa0, hi: 0xa1}, - {value: 0x47a6, 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: 0x426a, lo: 0x98, hi: 0x98}, - {value: 0x426f, lo: 0x99, hi: 0x9a}, - {value: 0x4292, lo: 0x9b, hi: 0x9b}, - {value: 0x425b, lo: 0x9c, hi: 0x9c}, - {value: 0x427e, 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: 0x37a1, lo: 0x90, hi: 0x90}, - {value: 0x37ad, lo: 0x91, hi: 0x91}, - {value: 0x379b, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3813, lo: 0x97, hi: 0x97}, - {value: 0x37dd, lo: 0x9c, hi: 0x9c}, - {value: 0x37c5, lo: 0x9d, hi: 0x9d}, - {value: 0x37ef, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x3819, lo: 0xb6, hi: 0xb6}, - {value: 0x381f, 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: 0x383d, lo: 0xa2, hi: 0xa2}, - {value: 0x3843, lo: 0xa3, hi: 0xa3}, - {value: 0x384f, lo: 0xa4, hi: 0xa4}, - {value: 0x3849, lo: 0xa5, hi: 0xa5}, - {value: 0x3855, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 - {value: 0x0000, lo: 0x0e}, - {value: 0x3867, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385b, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3861, 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: 0x0f}, - {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 0x86 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed4, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3edc, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee4, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x8e - {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: 0x45ae, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x95 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x98 - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9a, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x45ee, lo: 0x9c, hi: 0x9d}, - {value: 0x45fe, lo: 0x9f, hi: 0x9f}, - // Block 0x13, offset 0x9f - {value: 0x0000, lo: 0x03}, - {value: 0x4626, lo: 0xb3, hi: 0xb3}, - {value: 0x462e, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0xa3 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4606, lo: 0x99, hi: 0x9b}, - {value: 0x461e, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0xa7 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0xa9 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0xab - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb2, lo: 0x88, hi: 0x88}, - {value: 0x2caa, lo: 0x8b, hi: 0x8b}, - {value: 0x2cba, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x4636, lo: 0x9c, hi: 0x9c}, - {value: 0x463e, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0xb4 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc2, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0xb8 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cca, lo: 0x8a, hi: 0x8a}, - {value: 0x2cda, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd2, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xbf - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3eec, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xc4 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xc7 - {value: 0x0000, lo: 0x09}, - {value: 0x2ce2, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cea, lo: 0x87, hi: 0x87}, - {value: 0x2cf2, lo: 0x88, hi: 0x88}, - {value: 0x2f4c, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd4, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xd1 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xd3 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfa, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0a, lo: 0x8b, hi: 0x8b}, - {value: 0x2d02, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xda - {value: 0x6bee, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef4, lo: 0x9a, hi: 0x9a}, - {value: 0x2f54, lo: 0x9c, hi: 0x9c}, - {value: 0x2ddf, lo: 0x9d, hi: 0x9d}, - {value: 0x2d12, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xe2 - {value: 0x0000, lo: 0x03}, - {value: 0x261d, lo: 0xb3, hi: 0xb3}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xe6 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xe8 - {value: 0x0000, lo: 0x02}, - {value: 0x2632, lo: 0xb3, hi: 0xb3}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x23, offset 0xeb - {value: 0x0000, lo: 0x03}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - {value: 0x2624, lo: 0x9c, hi: 0x9c}, - {value: 0x262b, lo: 0x9d, hi: 0x9d}, - // Block 0x24, offset 0xef - {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 0xf5 - {value: 0x0000, lo: 0x10}, - {value: 0x2640, lo: 0x83, hi: 0x83}, - {value: 0x2647, lo: 0x8d, hi: 0x8d}, - {value: 0x264e, lo: 0x92, hi: 0x92}, - {value: 0x2655, lo: 0x97, hi: 0x97}, - {value: 0x265c, lo: 0x9c, hi: 0x9c}, - {value: 0x2639, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a62, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a6b, lo: 0xb5, hi: 0xb5}, - {value: 0x4646, lo: 0xb6, hi: 0xb6}, - {value: 0x4686, lo: 0xb7, hi: 0xb7}, - {value: 0x464e, lo: 0xb8, hi: 0xb8}, - {value: 0x4691, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0x106 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a74, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266a, lo: 0x93, hi: 0x93}, - {value: 0x2671, lo: 0x9d, hi: 0x9d}, - {value: 0x2678, lo: 0xa2, hi: 0xa2}, - {value: 0x267f, lo: 0xa7, hi: 0xa7}, - {value: 0x2686, lo: 0xac, hi: 0xac}, - {value: 0x2663, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0x112 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0x114 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1a, 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 0x11a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0x11c - {value: 0x0000, lo: 0x01}, - {value: 0x030f, lo: 0xbc, hi: 0xbc}, - // Block 0x2b, offset 0x11e - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x120 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x122 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x124 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x126 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x128 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x12b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x12e - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x130 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x133 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x136 - {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 0x13a - {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 0x13f - {value: 0x0000, lo: 0x08}, - {value: 0x2d62, lo: 0x80, hi: 0x80}, - {value: 0x2d6a, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d72, 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 0x148 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x14a - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x14d - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x14f - {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 0x15a - {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 0x165 - {value: 0x0000, lo: 0x0e}, - {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: 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 0x174 - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043b, lo: 0x91, hi: 0x91}, - {value: 0x4297, lo: 0x97, hi: 0x97}, - {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x186f, lo: 0xa5, hi: 0xa5}, - {value: 0x1b58, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x268d, lo: 0xb3, hi: 0xb3}, - {value: 0x27fa, lo: 0xb4, hi: 0xb4}, - {value: 0x2694, lo: 0xb6, hi: 0xb6}, - {value: 0x2804, lo: 0xb7, hi: 0xb7}, - {value: 0x1869, lo: 0xbc, hi: 0xbc}, - {value: 0x4265, lo: 0xbe, hi: 0xbe}, - // Block 0x3f, offset 0x182 - {value: 0x0002, lo: 0x0d}, - {value: 0x192f, lo: 0x87, hi: 0x87}, - {value: 0x192c, lo: 0x88, hi: 0x88}, - {value: 0x186c, lo: 0x89, hi: 0x89}, - {value: 0x298a, 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 0x190 - {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: 0x1995, lo: 0xa8, hi: 0xa8}, - // Block 0x41, offset 0x1a0 - {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 0x1ae - {value: 0x0007, lo: 0x06}, - {value: 0x217c, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb5, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc3, lo: 0xae, hi: 0xae}, - // Block 0x43, offset 0x1b5 - {value: 0x000e, lo: 0x05}, - {value: 0x3bca, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd1, 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 0x1bb - {value: 0x0173, lo: 0x0e}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3bdf, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3be6, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bed, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf4, lo: 0xa4, hi: 0xa4}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3bfb, lo: 0xa6, hi: 0xa6}, - {value: 0x269b, lo: 0xac, hi: 0xad}, - {value: 0x26a2, lo: 0xaf, hi: 0xaf}, - {value: 0x2818, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x45, offset 0x1ca - {value: 0x0007, lo: 0x03}, - {value: 0x3c64, lo: 0xa0, hi: 0xa1}, - {value: 0x3c8e, lo: 0xa2, hi: 0xa3}, - {value: 0x3cb8, lo: 0xaa, hi: 0xad}, - // Block 0x46, offset 0x1ce - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x47, offset 0x1d0 - {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 0x1d4 - {value: 0x0000, lo: 0x01}, - {value: 0x2997, lo: 0x8c, hi: 0x8c}, - // Block 0x49, offset 0x1d6 - {value: 0x0263, lo: 0x02}, - {value: 0x1b88, lo: 0xb4, hi: 0xb4}, - {value: 0x1929, lo: 0xb5, hi: 0xb6}, - // Block 0x4a, offset 0x1d9 - {value: 0x0000, lo: 0x01}, - {value: 0x456f, lo: 0x9c, hi: 0x9c}, - // Block 0x4b, offset 0x1db - {value: 0x0000, lo: 0x02}, - {value: 0x0095, lo: 0xbc, hi: 0xbc}, - {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4c, offset 0x1de - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x4d, offset 0x1e0 - {value: 0x0000, lo: 0x02}, - {value: 0x047f, lo: 0xaf, hi: 0xaf}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x4e, offset 0x1e3 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x4f, offset 0x1e5 - {value: 0x0000, lo: 0x01}, - {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, - // Block 0x50, offset 0x1e7 - {value: 0x0000, lo: 0x01}, - {value: 0x162b, lo: 0xb3, hi: 0xb3}, - // Block 0x51, offset 0x1e9 - {value: 0x0004, lo: 0x0b}, - {value: 0x1593, lo: 0x80, hi: 0x82}, - {value: 0x15ab, lo: 0x83, hi: 0x83}, - {value: 0x15c3, lo: 0x84, hi: 0x85}, - {value: 0x15d3, lo: 0x86, hi: 0x89}, - {value: 0x15e7, lo: 0x8a, hi: 0x8c}, - {value: 0x15fb, lo: 0x8d, hi: 0x8d}, - {value: 0x1603, lo: 0x8e, hi: 0x8e}, - {value: 0x160b, lo: 0x8f, hi: 0x90}, - {value: 0x1617, lo: 0x91, hi: 0x93}, - {value: 0x1627, lo: 0x94, hi: 0x94}, - {value: 0x162f, lo: 0x95, hi: 0x95}, - // Block 0x52, offset 0x1f5 - {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 0x1ff - {value: 0x0005, lo: 0x09}, - {value: 0x0313, lo: 0xb1, hi: 0xb1}, - {value: 0x0317, lo: 0xb2, hi: 0xb2}, - {value: 0x4341, lo: 0xb3, hi: 0xb3}, - {value: 0x031b, lo: 0xb4, hi: 0xb4}, - {value: 0x4346, lo: 0xb5, hi: 0xb6}, - {value: 0x031f, lo: 0xb7, hi: 0xb7}, - {value: 0x0323, lo: 0xb8, hi: 0xb8}, - {value: 0x0327, lo: 0xb9, hi: 0xb9}, - {value: 0x4350, lo: 0xba, hi: 0xbf}, - // Block 0x54, offset 0x209 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x55, offset 0x20c - {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 0x210 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x57, offset 0x212 - {value: 0x0000, lo: 0x01}, - {value: 0x1637, lo: 0xb0, hi: 0xb0}, - // Block 0x58, offset 0x214 - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x59, offset 0x216 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x5a, offset 0x218 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x5b, offset 0x21b - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x5c, offset 0x21d - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x5d, offset 0x21f - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x5e, offset 0x221 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x5f, offset 0x223 - {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 0x229 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x61, offset 0x22c - {value: 0x0008, lo: 0x03}, - {value: 0x1633, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x163f, lo: 0x9f, hi: 0x9f}, - // Block 0x62, offset 0x230 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x63, offset 0x232 - {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 0x239 - {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 0x23f - {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 0x245 - {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 0x24d - {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 0x253 - {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 0x259 - {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 0x25f - {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 0x263 - {value: 0x0002, lo: 0x01}, - {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6c, offset 0x265 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6d, offset 0x267 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x6e, offset 0x269 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x6f, offset 0x26b - {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 0x271 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x71, offset 0x274 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x277 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4234, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x423e, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x4248, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x73, offset 0x27f - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7a, lo: 0xae, hi: 0xae}, - {value: 0x2d84, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x74, offset 0x286 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x75, offset 0x289 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x76, offset 0x28c - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x77, offset 0x28e - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d8e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d98, 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 0x296 - {value: 0x6b5e, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2dac, lo: 0xbb, hi: 0xbb}, - {value: 0x2da2, lo: 0xbc, hi: 0xbd}, - {value: 0x2db6, lo: 0xbe, hi: 0xbe}, - // Block 0x79, offset 0x29d - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7a, offset 0x2a0 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc0, lo: 0xba, hi: 0xba}, - {value: 0x2dca, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7b, offset 0x2a6 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x7c, offset 0x2a8 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7d, offset 0x2aa - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x7e, offset 0x2ad - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x7f, offset 0x2af - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x80, offset 0x2b1 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x81, offset 0x2b3 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x82, offset 0x2b5 - {value: 0x0000, lo: 0x0c}, - {value: 0x465e, lo: 0x9e, hi: 0x9e}, - {value: 0x4668, lo: 0x9f, hi: 0x9f}, - {value: 0x469c, lo: 0xa0, hi: 0xa0}, - {value: 0x46aa, lo: 0xa1, hi: 0xa1}, - {value: 0x46b8, lo: 0xa2, hi: 0xa2}, - {value: 0x46c6, lo: 0xa3, hi: 0xa3}, - {value: 0x46d4, 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 0x83, offset 0x2c2 - {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: 0x4672, lo: 0xbb, hi: 0xbb}, - {value: 0x467c, lo: 0xbc, hi: 0xbc}, - {value: 0x46e2, lo: 0xbd, hi: 0xbd}, - {value: 0x46fe, lo: 0xbe, hi: 0xbe}, - {value: 0x46f0, lo: 0xbf, hi: 0xbf}, - // Block 0x84, offset 0x2cc - {value: 0x0000, lo: 0x01}, - {value: 0x470c, lo: 0x80, hi: 0x80}, - // Block 0x85, offset 0x2ce - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x86, offset 0x2d0 - {value: 0x0002, lo: 0x03}, - {value: 0x0043, lo: 0x80, hi: 0x99}, - {value: 0x0083, lo: 0x9a, hi: 0xb3}, - {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x87, offset 0x2d4 - {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 0x88, offset 0x2d9 - {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 0x89, offset 0x2e5 - {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 0x8a, offset 0x2ea - {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 0x8b, offset 0x2f3 - {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 0x8c, offset 0x2f9 - {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 0x8d, offset 0x2fe - {value: 0x0002, lo: 0x03}, - {value: 0x008f, lo: 0x80, hi: 0x93}, - {value: 0x0043, lo: 0x94, hi: 0xad}, - {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x8e, offset 0x302 - {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 0x8f, offset 0x307 - {value: 0x0002, lo: 0x03}, - {value: 0x004b, lo: 0x80, hi: 0x95}, - {value: 0x0083, lo: 0x96, hi: 0xaf}, - {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x90, offset 0x30b - {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 0x91, offset 0x31b - {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 0x92, offset 0x329 - {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 0x93, offset 0x337 - {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 0x94, offset 0x345 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x95, offset 0x347 - {value: 0x0002, lo: 0x09}, - {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x194d, lo: 0x8a, hi: 0x8a}, - {value: 0x197d, lo: 0x8b, hi: 0x8b}, - {value: 0x1998, lo: 0x8c, hi: 0x8c}, - {value: 0x199e, lo: 0x8d, hi: 0x8d}, - {value: 0x1bbc, lo: 0x8e, hi: 0x8e}, - {value: 0x19aa, lo: 0x8f, hi: 0x8f}, - {value: 0x1977, lo: 0xaa, hi: 0xaa}, - {value: 0x197a, lo: 0xab, hi: 0xab}, - // Block 0x96, offset 0x351 - {value: 0x0000, lo: 0x01}, - {value: 0x193b, lo: 0x90, hi: 0x90}, - // Block 0x97, offset 0x353 - {value: 0x0028, lo: 0x09}, - {value: 0x285e, lo: 0x80, hi: 0x80}, - {value: 0x2822, lo: 0x81, hi: 0x81}, - {value: 0x282c, lo: 0x82, hi: 0x82}, - {value: 0x2840, lo: 0x83, hi: 0x84}, - {value: 0x284a, lo: 0x85, hi: 0x86}, - {value: 0x2836, lo: 0x87, hi: 0x87}, - {value: 0x2854, 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 (53848 bytes) diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go deleted file mode 100644 index 8589067c..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go +++ /dev/null @@ -1,88 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go deleted file mode 100644 index 423386bf..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go +++ /dev/null @@ -1,54 +0,0 @@ -// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go deleted file mode 100644 index 45d71190..00000000 --- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go +++ /dev/null @@ -1,117 +0,0 @@ -// 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 -}