aboutsummaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/internal
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-05 00:37:32 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-05 00:37:32 +0100
commit6960aecc25400320adee1b8802a86839326e15b6 (patch)
tree334f7ca9491080a5e6f9a9747da77281c4958ba2 /vendor/golang.org/x/text/internal
downloadhepi-6960aecc25400320adee1b8802a86839326e15b6.tar.gz
Engage!
Diffstat (limited to 'vendor/golang.org/x/text/internal')
-rw-r--r--vendor/golang.org/x/text/internal/internal.go49
-rw-r--r--vendor/golang.org/x/text/internal/language/common.go16
-rw-r--r--vendor/golang.org/x/text/internal/language/compact.go29
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/compact.go61
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/language.go260
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/parents.go120
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/tables.go1015
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/tags.go91
-rw-r--r--vendor/golang.org/x/text/internal/language/compose.go167
-rw-r--r--vendor/golang.org/x/text/internal/language/coverage.go28
-rw-r--r--vendor/golang.org/x/text/internal/language/language.go627
-rw-r--r--vendor/golang.org/x/text/internal/language/lookup.go412
-rw-r--r--vendor/golang.org/x/text/internal/language/match.go226
-rw-r--r--vendor/golang.org/x/text/internal/language/parse.go608
-rw-r--r--vendor/golang.org/x/text/internal/language/tables.go3494
-rw-r--r--vendor/golang.org/x/text/internal/language/tags.go48
-rw-r--r--vendor/golang.org/x/text/internal/match.go67
-rw-r--r--vendor/golang.org/x/text/internal/tag/tag.go100
18 files changed, 7418 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/internal/internal.go b/vendor/golang.org/x/text/internal/internal.go
new file mode 100644
index 0000000..3cddbbd
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/internal.go
@@ -0,0 +1,49 @@
1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Package internal contains non-exported functionality that are used by
6// packages in the text repository.
7package internal // import "golang.org/x/text/internal"
8
9import (
10 "sort"
11
12 "golang.org/x/text/language"
13)
14
15// SortTags sorts tags in place.
16func SortTags(tags []language.Tag) {
17 sort.Sort(sorter(tags))
18}
19
20type sorter []language.Tag
21
22func (s sorter) Len() int {
23 return len(s)
24}
25
26func (s sorter) Swap(i, j int) {
27 s[i], s[j] = s[j], s[i]
28}
29
30func (s sorter) Less(i, j int) bool {
31 return s[i].String() < s[j].String()
32}
33
34// UniqueTags sorts and filters duplicate tags in place and returns a slice with
35// only unique tags.
36func UniqueTags(tags []language.Tag) []language.Tag {
37 if len(tags) <= 1 {
38 return tags
39 }
40 SortTags(tags)
41 k := 0
42 for i := 1; i < len(tags); i++ {
43 if tags[k].String() < tags[i].String() {
44 k++
45 tags[k] = tags[i]
46 }
47 }
48 return tags[:k+1]
49}
diff --git a/vendor/golang.org/x/text/internal/language/common.go b/vendor/golang.org/x/text/internal/language/common.go
new file mode 100644
index 0000000..cdfdb74
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/common.go
@@ -0,0 +1,16 @@
1// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
2
3package language
4
5// This file contains code common to the maketables.go and the package code.
6
7// AliasType is the type of an alias in AliasMap.
8type AliasType int8
9
10const (
11 Deprecated AliasType = iota
12 Macro
13 Legacy
14
15 AliasTypeUnknown AliasType = -1
16)
diff --git a/vendor/golang.org/x/text/internal/language/compact.go b/vendor/golang.org/x/text/internal/language/compact.go
new file mode 100644
index 0000000..46a0015
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact.go
@@ -0,0 +1,29 @@
1// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7// CompactCoreInfo is a compact integer with the three core tags encoded.
8type CompactCoreInfo uint32
9
10// GetCompactCore generates a uint32 value that is guaranteed to be unique for
11// different language, region, and script values.
12func GetCompactCore(t Tag) (cci CompactCoreInfo, ok bool) {
13 if t.LangID > langNoIndexOffset {
14 return 0, false
15 }
16 cci |= CompactCoreInfo(t.LangID) << (8 + 12)
17 cci |= CompactCoreInfo(t.ScriptID) << 12
18 cci |= CompactCoreInfo(t.RegionID)
19 return cci, true
20}
21
22// Tag generates a tag from c.
23func (c CompactCoreInfo) Tag() Tag {
24 return Tag{
25 LangID: Language(c >> 20),
26 RegionID: Region(c & 0x3ff),
27 ScriptID: Script(c>>12) & 0xff,
28 }
29}
diff --git a/vendor/golang.org/x/text/internal/language/compact/compact.go b/vendor/golang.org/x/text/internal/language/compact/compact.go
new file mode 100644
index 0000000..1b36935
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/compact.go
@@ -0,0 +1,61 @@
1// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Package compact defines a compact representation of language tags.
6//
7// Common language tags (at least all for which locale information is defined
8// in CLDR) are assigned a unique index. Each Tag is associated with such an
9// ID for selecting language-related resources (such as translations) as well
10// as one for selecting regional defaults (currency, number formatting, etc.)
11//
12// It may want to export this functionality at some point, but at this point
13// this is only available for use within x/text.
14package compact // import "golang.org/x/text/internal/language/compact"
15
16import (
17 "sort"
18 "strings"
19
20 "golang.org/x/text/internal/language"
21)
22
23// ID is an integer identifying a single tag.
24type ID uint16
25
26func getCoreIndex(t language.Tag) (id ID, ok bool) {
27 cci, ok := language.GetCompactCore(t)
28 if !ok {
29 return 0, false
30 }
31 i := sort.Search(len(coreTags), func(i int) bool {
32 return cci <= coreTags[i]
33 })
34 if i == len(coreTags) || coreTags[i] != cci {
35 return 0, false
36 }
37 return ID(i), true
38}
39
40// Parent returns the ID of the parent or the root ID if id is already the root.
41func (id ID) Parent() ID {
42 return parents[id]
43}
44
45// Tag converts id to an internal language Tag.
46func (id ID) Tag() language.Tag {
47 if int(id) >= len(coreTags) {
48 return specialTags[int(id)-len(coreTags)]
49 }
50 return coreTags[id].Tag()
51}
52
53var specialTags []language.Tag
54
55func init() {
56 tags := strings.Split(specialTagsStr, " ")
57 specialTags = make([]language.Tag, len(tags))
58 for i, t := range tags {
59 specialTags[i] = language.MustParse(t)
60 }
61}
diff --git a/vendor/golang.org/x/text/internal/language/compact/language.go b/vendor/golang.org/x/text/internal/language/compact/language.go
new file mode 100644
index 0000000..8c1b666
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/language.go
@@ -0,0 +1,260 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:generate go run gen.go gen_index.go -output tables.go
6//go:generate go run gen_parents.go
7
8package compact
9
10// TODO: Remove above NOTE after:
11// - verifying that tables are dropped correctly (most notably matcher tables).
12
13import (
14 "strings"
15
16 "golang.org/x/text/internal/language"
17)
18
19// Tag represents a BCP 47 language tag. It is used to specify an instance of a
20// specific language or locale. All language tag values are guaranteed to be
21// well-formed.
22type Tag struct {
23 // NOTE: exported tags will become part of the public API.
24 language ID
25 locale ID
26 full fullTag // always a language.Tag for now.
27}
28
29const _und = 0
30
31type fullTag interface {
32 IsRoot() bool
33 Parent() language.Tag
34}
35
36// Make a compact Tag from a fully specified internal language Tag.
37func Make(t language.Tag) (tag Tag) {
38 if region := t.TypeForKey("rg"); len(region) == 6 && region[2:] == "zzzz" {
39 if r, err := language.ParseRegion(region[:2]); err == nil {
40 tFull := t
41 t, _ = t.SetTypeForKey("rg", "")
42 // TODO: should we not consider "va" for the language tag?
43 var exact1, exact2 bool
44 tag.language, exact1 = FromTag(t)
45 t.RegionID = r
46 tag.locale, exact2 = FromTag(t)
47 if !exact1 || !exact2 {
48 tag.full = tFull
49 }
50 return tag
51 }
52 }
53 lang, ok := FromTag(t)
54 tag.language = lang
55 tag.locale = lang
56 if !ok {
57 tag.full = t
58 }
59 return tag
60}
61
62// Tag returns an internal language Tag version of this tag.
63func (t Tag) Tag() language.Tag {
64 if t.full != nil {
65 return t.full.(language.Tag)
66 }
67 tag := t.language.Tag()
68 if t.language != t.locale {
69 loc := t.locale.Tag()
70 tag, _ = tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz")
71 }
72 return tag
73}
74
75// IsCompact reports whether this tag is fully defined in terms of ID.
76func (t *Tag) IsCompact() bool {
77 return t.full == nil
78}
79
80// MayHaveVariants reports whether a tag may have variants. If it returns false
81// it is guaranteed the tag does not have variants.
82func (t Tag) MayHaveVariants() bool {
83 return t.full != nil || int(t.language) >= len(coreTags)
84}
85
86// MayHaveExtensions reports whether a tag may have extensions. If it returns
87// false it is guaranteed the tag does not have them.
88func (t Tag) MayHaveExtensions() bool {
89 return t.full != nil ||
90 int(t.language) >= len(coreTags) ||
91 t.language != t.locale
92}
93
94// IsRoot returns true if t is equal to language "und".
95func (t Tag) IsRoot() bool {
96 if t.full != nil {
97 return t.full.IsRoot()
98 }
99 return t.language == _und
100}
101
102// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
103// specific language are substituted with fields from the parent language.
104// The parent for a language may change for newer versions of CLDR.
105func (t Tag) Parent() Tag {
106 if t.full != nil {
107 return Make(t.full.Parent())
108 }
109 if t.language != t.locale {
110 // Simulate stripping -u-rg-xxxxxx
111 return Tag{language: t.language, locale: t.language}
112 }
113 // TODO: use parent lookup table once cycle from internal package is
114 // removed. Probably by internalizing the table and declaring this fast
115 // enough.
116 // lang := compactID(internal.Parent(uint16(t.language)))
117 lang, _ := FromTag(t.language.Tag().Parent())
118 return Tag{language: lang, locale: lang}
119}
120
121// nextToken returns token t and the rest of the string.
122func nextToken(s string) (t, tail string) {
123 p := strings.Index(s[1:], "-")
124 if p == -1 {
125 return s[1:], ""
126 }
127 p++
128 return s[1:p], s[p:]
129}
130
131// LanguageID returns an index, where 0 <= index < NumCompactTags, for tags
132// for which data exists in the text repository.The index will change over time
133// and should not be stored in persistent storage. If t does not match a compact
134// index, exact will be false and the compact index will be returned for the
135// first match after repeatedly taking the Parent of t.
136func LanguageID(t Tag) (id ID, exact bool) {
137 return t.language, t.full == nil
138}
139
140// RegionalID returns the ID for the regional variant of this tag. This index is
141// used to indicate region-specific overrides, such as default currency, default
142// calendar and week data, default time cycle, and default measurement system
143// and unit preferences.
144//
145// For instance, the tag en-GB-u-rg-uszzzz specifies British English with US
146// settings for currency, number formatting, etc. The CompactIndex for this tag
147// will be that for en-GB, while the RegionalID will be the one corresponding to
148// en-US.
149func RegionalID(t Tag) (id ID, exact bool) {
150 return t.locale, t.full == nil
151}
152
153// LanguageTag returns t stripped of regional variant indicators.
154//
155// At the moment this means it is stripped of a regional and variant subtag "rg"
156// and "va" in the "u" extension.
157func (t Tag) LanguageTag() Tag {
158 if t.full == nil {
159 return Tag{language: t.language, locale: t.language}
160 }
161 tt := t.Tag()
162 tt.SetTypeForKey("rg", "")
163 tt.SetTypeForKey("va", "")
164 return Make(tt)
165}
166
167// RegionalTag returns the regional variant of the tag.
168//
169// At the moment this means that the region is set from the regional subtag
170// "rg" in the "u" extension.
171func (t Tag) RegionalTag() Tag {
172 rt := Tag{language: t.locale, locale: t.locale}
173 if t.full == nil {
174 return rt
175 }
176 b := language.Builder{}
177 tag := t.Tag()
178 // tag, _ = tag.SetTypeForKey("rg", "")
179 b.SetTag(t.locale.Tag())
180 if v := tag.Variants(); v != "" {
181 for _, v := range strings.Split(v, "-") {
182 b.AddVariant(v)
183 }
184 }
185 for _, e := range tag.Extensions() {
186 b.AddExt(e)
187 }
188 return t
189}
190
191// FromTag reports closest matching ID for an internal language Tag.
192func FromTag(t language.Tag) (id ID, exact bool) {
193 // TODO: perhaps give more frequent tags a lower index.
194 // TODO: we could make the indexes stable. This will excluded some
195 // possibilities for optimization, so don't do this quite yet.
196 exact = true
197
198 b, s, r := t.Raw()
199 if t.HasString() {
200 if t.IsPrivateUse() {
201 // We have no entries for user-defined tags.
202 return 0, false
203 }
204 hasExtra := false
205 if t.HasVariants() {
206 if t.HasExtensions() {
207 build := language.Builder{}
208 build.SetTag(language.Tag{LangID: b, ScriptID: s, RegionID: r})
209 build.AddVariant(t.Variants())
210 exact = false
211 t = build.Make()
212 }
213 hasExtra = true
214 } else if _, ok := t.Extension('u'); ok {
215 // TODO: va may mean something else. Consider not considering it.
216 // Strip all but the 'va' entry.
217 old := t
218 variant := t.TypeForKey("va")
219 t = language.Tag{LangID: b, ScriptID: s, RegionID: r}
220 if variant != "" {
221 t, _ = t.SetTypeForKey("va", variant)
222 hasExtra = true
223 }
224 exact = old == t
225 } else {
226 exact = false
227 }
228 if hasExtra {
229 // We have some variants.
230 for i, s := range specialTags {
231 if s == t {
232 return ID(i + len(coreTags)), exact
233 }
234 }
235 exact = false
236 }
237 }
238 if x, ok := getCoreIndex(t); ok {
239 return x, exact
240 }
241 exact = false
242 if r != 0 && s == 0 {
243 // Deal with cases where an extra script is inserted for the region.
244 t, _ := t.Maximize()
245 if x, ok := getCoreIndex(t); ok {
246 return x, exact
247 }
248 }
249 for t = t.Parent(); t != root; t = t.Parent() {
250 // No variants specified: just compare core components.
251 // The key has the form lllssrrr, where l, s, and r are nibbles for
252 // respectively the langID, scriptID, and regionID.
253 if x, ok := getCoreIndex(t); ok {
254 return x, exact
255 }
256 }
257 return 0, exact
258}
259
260var root = language.Tag{}
diff --git a/vendor/golang.org/x/text/internal/language/compact/parents.go b/vendor/golang.org/x/text/internal/language/compact/parents.go
new file mode 100644
index 0000000..8d81072
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/parents.go
@@ -0,0 +1,120 @@
1// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
2
3package compact
4
5// parents maps a compact index of a tag to the compact index of the parent of
6// this tag.
7var parents = []ID{ // 775 elements
8 // Entry 0 - 3F
9 0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0004, 0x0000, 0x0006,
10 0x0000, 0x0008, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
11 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
12 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
13 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0000,
14 0x0000, 0x0028, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x0000,
15 0x002f, 0x002e, 0x002e, 0x0000, 0x0033, 0x0000, 0x0035, 0x0000,
16 0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x0000, 0x003e,
17 // Entry 40 - 7F
18 0x0000, 0x0040, 0x0040, 0x0000, 0x0043, 0x0043, 0x0000, 0x0046,
19 0x0000, 0x0048, 0x0000, 0x0000, 0x004b, 0x004a, 0x004a, 0x0000,
20 0x004f, 0x004f, 0x004f, 0x004f, 0x0000, 0x0054, 0x0054, 0x0000,
21 0x0057, 0x0000, 0x0059, 0x0000, 0x005b, 0x0000, 0x005d, 0x005d,
22 0x0000, 0x0060, 0x0000, 0x0062, 0x0000, 0x0064, 0x0000, 0x0066,
23 0x0066, 0x0000, 0x0069, 0x0000, 0x006b, 0x006b, 0x006b, 0x006b,
24 0x006b, 0x006b, 0x006b, 0x0000, 0x0073, 0x0000, 0x0075, 0x0000,
25 0x0077, 0x0000, 0x0000, 0x007a, 0x0000, 0x007c, 0x0000, 0x007e,
26 // Entry 80 - BF
27 0x0000, 0x0080, 0x0080, 0x0000, 0x0083, 0x0083, 0x0000, 0x0086,
28 0x0087, 0x0087, 0x0087, 0x0086, 0x0088, 0x0087, 0x0087, 0x0087,
29 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088,
30 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, 0x0088, 0x0087,
31 0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
32 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087,
33 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
34 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0086,
35 // Entry C0 - FF
36 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
37 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
38 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087,
39 0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
40 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0086, 0x0087,
41 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0000,
42 0x00ef, 0x0000, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2,
43 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f1, 0x00f1,
44 // Entry 100 - 13F
45 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1,
46 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x0000, 0x010e,
47 0x0000, 0x0110, 0x0000, 0x0112, 0x0000, 0x0114, 0x0114, 0x0000,
48 0x0117, 0x0117, 0x0117, 0x0117, 0x0000, 0x011c, 0x0000, 0x011e,
49 0x0000, 0x0120, 0x0120, 0x0000, 0x0123, 0x0123, 0x0123, 0x0123,
50 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
51 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
52 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
53 // Entry 140 - 17F
54 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
55 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
56 0x0123, 0x0123, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156,
57 0x0000, 0x0158, 0x0000, 0x015a, 0x0000, 0x015c, 0x015c, 0x015c,
58 0x0000, 0x0160, 0x0000, 0x0000, 0x0163, 0x0000, 0x0165, 0x0000,
59 0x0167, 0x0167, 0x0167, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000,
60 0x016f, 0x0000, 0x0171, 0x0171, 0x0000, 0x0174, 0x0000, 0x0176,
61 0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e,
62 // Entry 180 - 1BF
63 0x0000, 0x0000, 0x0000, 0x0182, 0x0000, 0x0184, 0x0184, 0x0184,
64 0x0184, 0x0000, 0x0000, 0x0000, 0x018b, 0x0000, 0x0000, 0x018e,
65 0x0000, 0x0000, 0x0191, 0x0000, 0x0000, 0x0000, 0x0195, 0x0000,
66 0x0197, 0x0000, 0x0000, 0x019a, 0x0000, 0x0000, 0x019d, 0x0000,
67 0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000,
68 0x01a7, 0x0000, 0x01a9, 0x0000, 0x01ab, 0x0000, 0x01ad, 0x0000,
69 0x01af, 0x0000, 0x01b1, 0x01b1, 0x0000, 0x01b4, 0x0000, 0x01b6,
70 0x0000, 0x01b8, 0x0000, 0x01ba, 0x0000, 0x01bc, 0x0000, 0x0000,
71 // Entry 1C0 - 1FF
72 0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x0000, 0x01c5, 0x0000,
73 0x01c7, 0x0000, 0x01c9, 0x0000, 0x01cb, 0x01cb, 0x01cb, 0x01cb,
74 0x0000, 0x01d0, 0x0000, 0x01d2, 0x01d2, 0x0000, 0x01d5, 0x0000,
75 0x01d7, 0x0000, 0x01d9, 0x0000, 0x01db, 0x0000, 0x01dd, 0x0000,
76 0x01df, 0x01df, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6,
77 0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x0000, 0x01ee,
78 0x0000, 0x01f0, 0x0000, 0x0000, 0x01f3, 0x0000, 0x01f5, 0x01f5,
79 0x01f5, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x0000, 0x01fd, 0x0000,
80 // Entry 200 - 23F
81 0x01ff, 0x0000, 0x0000, 0x0202, 0x0000, 0x0204, 0x0204, 0x0000,
82 0x0207, 0x0000, 0x0209, 0x0209, 0x0000, 0x020c, 0x020c, 0x0000,
83 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x0000,
84 0x0217, 0x0000, 0x0219, 0x0000, 0x021b, 0x0000, 0x0000, 0x0000,
85 0x0000, 0x0000, 0x0221, 0x0000, 0x0000, 0x0224, 0x0000, 0x0226,
86 0x0226, 0x0000, 0x0229, 0x0000, 0x022b, 0x022b, 0x0000, 0x0000,
87 0x022f, 0x022e, 0x022e, 0x0000, 0x0000, 0x0234, 0x0000, 0x0236,
88 0x0000, 0x0238, 0x0000, 0x0244, 0x023a, 0x0244, 0x0244, 0x0244,
89 // Entry 240 - 27F
90 0x0244, 0x0244, 0x0244, 0x0244, 0x023a, 0x0244, 0x0244, 0x0000,
91 0x0247, 0x0247, 0x0247, 0x0000, 0x024b, 0x0000, 0x024d, 0x0000,
92 0x024f, 0x024f, 0x0000, 0x0252, 0x0000, 0x0254, 0x0254, 0x0254,
93 0x0254, 0x0254, 0x0254, 0x0000, 0x025b, 0x0000, 0x025d, 0x0000,
94 0x025f, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000,
95 0x0000, 0x0268, 0x0268, 0x0268, 0x0000, 0x026c, 0x0000, 0x026e,
96 0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0274, 0x0273, 0x0273,
97 0x0000, 0x0278, 0x0000, 0x027a, 0x0000, 0x027c, 0x0000, 0x0000,
98 // Entry 280 - 2BF
99 0x0000, 0x0000, 0x0281, 0x0000, 0x0000, 0x0284, 0x0000, 0x0286,
100 0x0286, 0x0286, 0x0286, 0x0000, 0x028b, 0x028b, 0x028b, 0x0000,
101 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x0000, 0x0295, 0x0295,
102 0x0295, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x029d,
103 0x029d, 0x0000, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x0000, 0x0000,
104 0x02a7, 0x02a7, 0x02a7, 0x02a7, 0x0000, 0x02ac, 0x0000, 0x02ae,
105 0x02ae, 0x0000, 0x02b1, 0x0000, 0x02b3, 0x0000, 0x02b5, 0x02b5,
106 0x0000, 0x0000, 0x02b9, 0x0000, 0x0000, 0x0000, 0x02bd, 0x0000,
107 // Entry 2C0 - 2FF
108 0x02bf, 0x02bf, 0x0000, 0x0000, 0x02c3, 0x0000, 0x02c5, 0x0000,
109 0x02c7, 0x0000, 0x02c9, 0x0000, 0x02cb, 0x0000, 0x02cd, 0x02cd,
110 0x0000, 0x0000, 0x02d1, 0x0000, 0x02d3, 0x02d0, 0x02d0, 0x0000,
111 0x0000, 0x02d8, 0x02d7, 0x02d7, 0x0000, 0x0000, 0x02dd, 0x0000,
112 0x02df, 0x0000, 0x02e1, 0x0000, 0x0000, 0x02e4, 0x0000, 0x02e6,
113 0x0000, 0x0000, 0x02e9, 0x0000, 0x02eb, 0x0000, 0x02ed, 0x0000,
114 0x02ef, 0x02ef, 0x0000, 0x0000, 0x02f3, 0x02f2, 0x02f2, 0x0000,
115 0x02f7, 0x0000, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x0000,
116 // Entry 300 - 33F
117 0x02ff, 0x0300, 0x02ff, 0x0000, 0x0303, 0x0051, 0x00e6,
118} // Size: 1574 bytes
119
120// Total table size 1574 bytes (1KiB); checksum: 895AAF0B
diff --git a/vendor/golang.org/x/text/internal/language/compact/tables.go b/vendor/golang.org/x/text/internal/language/compact/tables.go
new file mode 100644
index 0000000..a09ed19
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/tables.go
@@ -0,0 +1,1015 @@
1// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
2
3package compact
4
5import "golang.org/x/text/internal/language"
6
7// CLDRVersion is the CLDR version from which the tables in this package are derived.
8const CLDRVersion = "32"
9
10// NumCompactTags is the number of common tags. The maximum tag is
11// NumCompactTags-1.
12const NumCompactTags = 775
13const (
14 undIndex ID = 0
15 afIndex ID = 1
16 afNAIndex ID = 2
17 afZAIndex ID = 3
18 agqIndex ID = 4
19 agqCMIndex ID = 5
20 akIndex ID = 6
21 akGHIndex ID = 7
22 amIndex ID = 8
23 amETIndex ID = 9
24 arIndex ID = 10
25 ar001Index ID = 11
26 arAEIndex ID = 12
27 arBHIndex ID = 13
28 arDJIndex ID = 14
29 arDZIndex ID = 15
30 arEGIndex ID = 16
31 arEHIndex ID = 17
32 arERIndex ID = 18
33 arILIndex ID = 19
34 arIQIndex ID = 20
35 arJOIndex ID = 21
36 arKMIndex ID = 22
37 arKWIndex ID = 23
38 arLBIndex ID = 24
39 arLYIndex ID = 25
40 arMAIndex ID = 26
41 arMRIndex ID = 27
42 arOMIndex ID = 28
43 arPSIndex ID = 29
44 arQAIndex ID = 30
45 arSAIndex ID = 31
46 arSDIndex ID = 32
47 arSOIndex ID = 33
48 arSSIndex ID = 34
49 arSYIndex ID = 35
50 arTDIndex ID = 36
51 arTNIndex ID = 37
52 arYEIndex ID = 38
53 arsIndex ID = 39
54 asIndex ID = 40
55 asINIndex ID = 41
56 asaIndex ID = 42
57 asaTZIndex ID = 43
58 astIndex ID = 44
59 astESIndex ID = 45
60 azIndex ID = 46
61 azCyrlIndex ID = 47
62 azCyrlAZIndex ID = 48
63 azLatnIndex ID = 49
64 azLatnAZIndex ID = 50
65 basIndex ID = 51
66 basCMIndex ID = 52
67 beIndex ID = 53
68 beBYIndex ID = 54
69 bemIndex ID = 55
70 bemZMIndex ID = 56
71 bezIndex ID = 57
72 bezTZIndex ID = 58
73 bgIndex ID = 59
74 bgBGIndex ID = 60
75 bhIndex ID = 61
76 bmIndex ID = 62
77 bmMLIndex ID = 63
78 bnIndex ID = 64
79 bnBDIndex ID = 65
80 bnINIndex ID = 66
81 boIndex ID = 67
82 boCNIndex ID = 68
83 boINIndex ID = 69
84 brIndex ID = 70
85 brFRIndex ID = 71
86 brxIndex ID = 72
87 brxINIndex ID = 73
88 bsIndex ID = 74
89 bsCyrlIndex ID = 75
90 bsCyrlBAIndex ID = 76
91 bsLatnIndex ID = 77
92 bsLatnBAIndex ID = 78
93 caIndex ID = 79
94 caADIndex ID = 80
95 caESIndex ID = 81
96 caFRIndex ID = 82
97 caITIndex ID = 83
98 ccpIndex ID = 84
99 ccpBDIndex ID = 85
100 ccpINIndex ID = 86
101 ceIndex ID = 87
102 ceRUIndex ID = 88
103 cggIndex ID = 89
104 cggUGIndex ID = 90
105 chrIndex ID = 91
106 chrUSIndex ID = 92
107 ckbIndex ID = 93
108 ckbIQIndex ID = 94
109 ckbIRIndex ID = 95
110 csIndex ID = 96
111 csCZIndex ID = 97
112 cuIndex ID = 98
113 cuRUIndex ID = 99
114 cyIndex ID = 100
115 cyGBIndex ID = 101
116 daIndex ID = 102
117 daDKIndex ID = 103
118 daGLIndex ID = 104
119 davIndex ID = 105
120 davKEIndex ID = 106
121 deIndex ID = 107
122 deATIndex ID = 108
123 deBEIndex ID = 109
124 deCHIndex ID = 110
125 deDEIndex ID = 111
126 deITIndex ID = 112
127 deLIIndex ID = 113
128 deLUIndex ID = 114
129 djeIndex ID = 115
130 djeNEIndex ID = 116
131 dsbIndex ID = 117
132 dsbDEIndex ID = 118
133 duaIndex ID = 119
134 duaCMIndex ID = 120
135 dvIndex ID = 121
136 dyoIndex ID = 122
137 dyoSNIndex ID = 123
138 dzIndex ID = 124
139 dzBTIndex ID = 125
140 ebuIndex ID = 126
141 ebuKEIndex ID = 127
142 eeIndex ID = 128
143 eeGHIndex ID = 129
144 eeTGIndex ID = 130
145 elIndex ID = 131
146 elCYIndex ID = 132
147 elGRIndex ID = 133
148 enIndex ID = 134
149 en001Index ID = 135
150 en150Index ID = 136
151 enAGIndex ID = 137
152 enAIIndex ID = 138
153 enASIndex ID = 139
154 enATIndex ID = 140
155 enAUIndex ID = 141
156 enBBIndex ID = 142
157 enBEIndex ID = 143
158 enBIIndex ID = 144
159 enBMIndex ID = 145
160 enBSIndex ID = 146
161 enBWIndex ID = 147
162 enBZIndex ID = 148
163 enCAIndex ID = 149
164 enCCIndex ID = 150
165 enCHIndex ID = 151
166 enCKIndex ID = 152
167 enCMIndex ID = 153
168 enCXIndex ID = 154
169 enCYIndex ID = 155
170 enDEIndex ID = 156
171 enDGIndex ID = 157
172 enDKIndex ID = 158
173 enDMIndex ID = 159
174 enERIndex ID = 160
175 enFIIndex ID = 161
176 enFJIndex ID = 162
177 enFKIndex ID = 163
178 enFMIndex ID = 164
179 enGBIndex ID = 165
180 enGDIndex ID = 166
181 enGGIndex ID = 167
182 enGHIndex ID = 168
183 enGIIndex ID = 169
184 enGMIndex ID = 170
185 enGUIndex ID = 171
186 enGYIndex ID = 172
187 enHKIndex ID = 173
188 enIEIndex ID = 174
189 enILIndex ID = 175
190 enIMIndex ID = 176
191 enINIndex ID = 177
192 enIOIndex ID = 178
193 enJEIndex ID = 179
194 enJMIndex ID = 180
195 enKEIndex ID = 181
196 enKIIndex ID = 182
197 enKNIndex ID = 183
198 enKYIndex ID = 184
199 enLCIndex ID = 185
200 enLRIndex ID = 186
201 enLSIndex ID = 187
202 enMGIndex ID = 188
203 enMHIndex ID = 189
204 enMOIndex ID = 190
205 enMPIndex ID = 191
206 enMSIndex ID = 192
207 enMTIndex ID = 193
208 enMUIndex ID = 194
209 enMWIndex ID = 195
210 enMYIndex ID = 196
211 enNAIndex ID = 197
212 enNFIndex ID = 198
213 enNGIndex ID = 199
214 enNLIndex ID = 200
215 enNRIndex ID = 201
216 enNUIndex ID = 202
217 enNZIndex ID = 203
218 enPGIndex ID = 204
219 enPHIndex ID = 205
220 enPKIndex ID = 206
221 enPNIndex ID = 207
222 enPRIndex ID = 208
223 enPWIndex ID = 209
224 enRWIndex ID = 210
225 enSBIndex ID = 211
226 enSCIndex ID = 212
227 enSDIndex ID = 213
228 enSEIndex ID = 214
229 enSGIndex ID = 215
230 enSHIndex ID = 216
231 enSIIndex ID = 217
232 enSLIndex ID = 218
233 enSSIndex ID = 219
234 enSXIndex ID = 220
235 enSZIndex ID = 221
236 enTCIndex ID = 222
237 enTKIndex ID = 223
238 enTOIndex ID = 224
239 enTTIndex ID = 225
240 enTVIndex ID = 226
241 enTZIndex ID = 227
242 enUGIndex ID = 228
243 enUMIndex ID = 229
244 enUSIndex ID = 230
245 enVCIndex ID = 231
246 enVGIndex ID = 232
247 enVIIndex ID = 233
248 enVUIndex ID = 234
249 enWSIndex ID = 235
250 enZAIndex ID = 236
251 enZMIndex ID = 237
252 enZWIndex ID = 238
253 eoIndex ID = 239
254 eo001Index ID = 240
255 esIndex ID = 241
256 es419Index ID = 242
257 esARIndex ID = 243
258 esBOIndex ID = 244
259 esBRIndex ID = 245
260 esBZIndex ID = 246
261 esCLIndex ID = 247
262 esCOIndex ID = 248
263 esCRIndex ID = 249
264 esCUIndex ID = 250
265 esDOIndex ID = 251
266 esEAIndex ID = 252
267 esECIndex ID = 253
268 esESIndex ID = 254
269 esGQIndex ID = 255
270 esGTIndex ID = 256
271 esHNIndex ID = 257
272 esICIndex ID = 258
273 esMXIndex ID = 259
274 esNIIndex ID = 260
275 esPAIndex ID = 261
276 esPEIndex ID = 262
277 esPHIndex ID = 263
278 esPRIndex ID = 264
279 esPYIndex ID = 265
280 esSVIndex ID = 266
281 esUSIndex ID = 267
282 esUYIndex ID = 268
283 esVEIndex ID = 269
284 etIndex ID = 270
285 etEEIndex ID = 271
286 euIndex ID = 272
287 euESIndex ID = 273
288 ewoIndex ID = 274
289 ewoCMIndex ID = 275
290 faIndex ID = 276
291 faAFIndex ID = 277
292 faIRIndex ID = 278
293 ffIndex ID = 279
294 ffCMIndex ID = 280
295 ffGNIndex ID = 281
296 ffMRIndex ID = 282
297 ffSNIndex ID = 283
298 fiIndex ID = 284
299 fiFIIndex ID = 285
300 filIndex ID = 286
301 filPHIndex ID = 287
302 foIndex ID = 288
303 foDKIndex ID = 289
304 foFOIndex ID = 290
305 frIndex ID = 291
306 frBEIndex ID = 292
307 frBFIndex ID = 293
308 frBIIndex ID = 294
309 frBJIndex ID = 295
310 frBLIndex ID = 296
311 frCAIndex ID = 297
312 frCDIndex ID = 298
313 frCFIndex ID = 299
314 frCGIndex ID = 300
315 frCHIndex ID = 301
316 frCIIndex ID = 302
317 frCMIndex ID = 303
318 frDJIndex ID = 304
319 frDZIndex ID = 305
320 frFRIndex ID = 306
321 frGAIndex ID = 307
322 frGFIndex ID = 308
323 frGNIndex ID = 309
324 frGPIndex ID = 310
325 frGQIndex ID = 311
326 frHTIndex ID = 312
327 frKMIndex ID = 313
328 frLUIndex ID = 314
329 frMAIndex ID = 315
330 frMCIndex ID = 316
331 frMFIndex ID = 317
332 frMGIndex ID = 318
333 frMLIndex ID = 319
334 frMQIndex ID = 320
335 frMRIndex ID = 321
336 frMUIndex ID = 322
337 frNCIndex ID = 323
338 frNEIndex ID = 324
339 frPFIndex ID = 325
340 frPMIndex ID = 326
341 frREIndex ID = 327
342 frRWIndex ID = 328
343 frSCIndex ID = 329
344 frSNIndex ID = 330
345 frSYIndex ID = 331
346 frTDIndex ID = 332
347 frTGIndex ID = 333
348 frTNIndex ID = 334
349 frVUIndex ID = 335
350 frWFIndex ID = 336
351 frYTIndex ID = 337
352 furIndex ID = 338
353 furITIndex ID = 339
354 fyIndex ID = 340
355 fyNLIndex ID = 341
356 gaIndex ID = 342
357 gaIEIndex ID = 343
358 gdIndex ID = 344
359 gdGBIndex ID = 345
360 glIndex ID = 346
361 glESIndex ID = 347
362 gswIndex ID = 348
363 gswCHIndex ID = 349
364 gswFRIndex ID = 350
365 gswLIIndex ID = 351
366 guIndex ID = 352
367 guINIndex ID = 353
368 guwIndex ID = 354
369 guzIndex ID = 355
370 guzKEIndex ID = 356
371 gvIndex ID = 357
372 gvIMIndex ID = 358
373 haIndex ID = 359
374 haGHIndex ID = 360
375 haNEIndex ID = 361
376 haNGIndex ID = 362
377 hawIndex ID = 363
378 hawUSIndex ID = 364
379 heIndex ID = 365
380 heILIndex ID = 366
381 hiIndex ID = 367
382 hiINIndex ID = 368
383 hrIndex ID = 369
384 hrBAIndex ID = 370
385 hrHRIndex ID = 371
386 hsbIndex ID = 372
387 hsbDEIndex ID = 373
388 huIndex ID = 374
389 huHUIndex ID = 375
390 hyIndex ID = 376
391 hyAMIndex ID = 377
392 idIndex ID = 378
393 idIDIndex ID = 379
394 igIndex ID = 380
395 igNGIndex ID = 381
396 iiIndex ID = 382
397 iiCNIndex ID = 383
398 inIndex ID = 384
399 ioIndex ID = 385
400 isIndex ID = 386
401 isISIndex ID = 387
402 itIndex ID = 388
403 itCHIndex ID = 389
404 itITIndex ID = 390
405 itSMIndex ID = 391
406 itVAIndex ID = 392
407 iuIndex ID = 393
408 iwIndex ID = 394
409 jaIndex ID = 395
410 jaJPIndex ID = 396
411 jboIndex ID = 397
412 jgoIndex ID = 398
413 jgoCMIndex ID = 399
414 jiIndex ID = 400
415 jmcIndex ID = 401
416 jmcTZIndex ID = 402
417 jvIndex ID = 403
418 jwIndex ID = 404
419 kaIndex ID = 405
420 kaGEIndex ID = 406
421 kabIndex ID = 407
422 kabDZIndex ID = 408
423 kajIndex ID = 409
424 kamIndex ID = 410
425 kamKEIndex ID = 411
426 kcgIndex ID = 412
427 kdeIndex ID = 413
428 kdeTZIndex ID = 414
429 keaIndex ID = 415
430 keaCVIndex ID = 416
431 khqIndex ID = 417
432 khqMLIndex ID = 418
433 kiIndex ID = 419
434 kiKEIndex ID = 420
435 kkIndex ID = 421
436 kkKZIndex ID = 422
437 kkjIndex ID = 423
438 kkjCMIndex ID = 424
439 klIndex ID = 425
440 klGLIndex ID = 426
441 klnIndex ID = 427
442 klnKEIndex ID = 428
443 kmIndex ID = 429
444 kmKHIndex ID = 430
445 knIndex ID = 431
446 knINIndex ID = 432
447 koIndex ID = 433
448 koKPIndex ID = 434
449 koKRIndex ID = 435
450 kokIndex ID = 436
451 kokINIndex ID = 437
452 ksIndex ID = 438
453 ksINIndex ID = 439
454 ksbIndex ID = 440
455 ksbTZIndex ID = 441
456 ksfIndex ID = 442
457 ksfCMIndex ID = 443
458 kshIndex ID = 444
459 kshDEIndex ID = 445
460 kuIndex ID = 446
461 kwIndex ID = 447
462 kwGBIndex ID = 448
463 kyIndex ID = 449
464 kyKGIndex ID = 450
465 lagIndex ID = 451
466 lagTZIndex ID = 452
467 lbIndex ID = 453
468 lbLUIndex ID = 454
469 lgIndex ID = 455
470 lgUGIndex ID = 456
471 lktIndex ID = 457
472 lktUSIndex ID = 458
473 lnIndex ID = 459
474 lnAOIndex ID = 460
475 lnCDIndex ID = 461
476 lnCFIndex ID = 462
477 lnCGIndex ID = 463
478 loIndex ID = 464
479 loLAIndex ID = 465
480 lrcIndex ID = 466
481 lrcIQIndex ID = 467
482 lrcIRIndex ID = 468
483 ltIndex ID = 469
484 ltLTIndex ID = 470
485 luIndex ID = 471
486 luCDIndex ID = 472
487 luoIndex ID = 473
488 luoKEIndex ID = 474
489 luyIndex ID = 475
490 luyKEIndex ID = 476
491 lvIndex ID = 477
492 lvLVIndex ID = 478
493 masIndex ID = 479
494 masKEIndex ID = 480
495 masTZIndex ID = 481
496 merIndex ID = 482
497 merKEIndex ID = 483
498 mfeIndex ID = 484
499 mfeMUIndex ID = 485
500 mgIndex ID = 486
501 mgMGIndex ID = 487
502 mghIndex ID = 488
503 mghMZIndex ID = 489
504 mgoIndex ID = 490
505 mgoCMIndex ID = 491
506 mkIndex ID = 492
507 mkMKIndex ID = 493
508 mlIndex ID = 494
509 mlINIndex ID = 495
510 mnIndex ID = 496
511 mnMNIndex ID = 497
512 moIndex ID = 498
513 mrIndex ID = 499
514 mrINIndex ID = 500
515 msIndex ID = 501
516 msBNIndex ID = 502
517 msMYIndex ID = 503
518 msSGIndex ID = 504
519 mtIndex ID = 505
520 mtMTIndex ID = 506
521 muaIndex ID = 507
522 muaCMIndex ID = 508
523 myIndex ID = 509
524 myMMIndex ID = 510
525 mznIndex ID = 511
526 mznIRIndex ID = 512
527 nahIndex ID = 513
528 naqIndex ID = 514
529 naqNAIndex ID = 515
530 nbIndex ID = 516
531 nbNOIndex ID = 517
532 nbSJIndex ID = 518
533 ndIndex ID = 519
534 ndZWIndex ID = 520
535 ndsIndex ID = 521
536 ndsDEIndex ID = 522
537 ndsNLIndex ID = 523
538 neIndex ID = 524
539 neINIndex ID = 525
540 neNPIndex ID = 526
541 nlIndex ID = 527
542 nlAWIndex ID = 528
543 nlBEIndex ID = 529
544 nlBQIndex ID = 530
545 nlCWIndex ID = 531
546 nlNLIndex ID = 532
547 nlSRIndex ID = 533
548 nlSXIndex ID = 534
549 nmgIndex ID = 535
550 nmgCMIndex ID = 536
551 nnIndex ID = 537
552 nnNOIndex ID = 538
553 nnhIndex ID = 539
554 nnhCMIndex ID = 540
555 noIndex ID = 541
556 nqoIndex ID = 542
557 nrIndex ID = 543
558 nsoIndex ID = 544
559 nusIndex ID = 545
560 nusSSIndex ID = 546
561 nyIndex ID = 547
562 nynIndex ID = 548
563 nynUGIndex ID = 549
564 omIndex ID = 550
565 omETIndex ID = 551
566 omKEIndex ID = 552
567 orIndex ID = 553
568 orINIndex ID = 554
569 osIndex ID = 555
570 osGEIndex ID = 556
571 osRUIndex ID = 557
572 paIndex ID = 558
573 paArabIndex ID = 559
574 paArabPKIndex ID = 560
575 paGuruIndex ID = 561
576 paGuruINIndex ID = 562
577 papIndex ID = 563
578 plIndex ID = 564
579 plPLIndex ID = 565
580 prgIndex ID = 566
581 prg001Index ID = 567
582 psIndex ID = 568
583 psAFIndex ID = 569
584 ptIndex ID = 570
585 ptAOIndex ID = 571
586 ptBRIndex ID = 572
587 ptCHIndex ID = 573
588 ptCVIndex ID = 574
589 ptGQIndex ID = 575
590 ptGWIndex ID = 576
591 ptLUIndex ID = 577
592 ptMOIndex ID = 578
593 ptMZIndex ID = 579
594 ptPTIndex ID = 580
595 ptSTIndex ID = 581
596 ptTLIndex ID = 582
597 quIndex ID = 583
598 quBOIndex ID = 584
599 quECIndex ID = 585
600 quPEIndex ID = 586
601 rmIndex ID = 587
602 rmCHIndex ID = 588
603 rnIndex ID = 589
604 rnBIIndex ID = 590
605 roIndex ID = 591
606 roMDIndex ID = 592
607 roROIndex ID = 593
608 rofIndex ID = 594
609 rofTZIndex ID = 595
610 ruIndex ID = 596
611 ruBYIndex ID = 597
612 ruKGIndex ID = 598
613 ruKZIndex ID = 599
614 ruMDIndex ID = 600
615 ruRUIndex ID = 601
616 ruUAIndex ID = 602
617 rwIndex ID = 603
618 rwRWIndex ID = 604
619 rwkIndex ID = 605
620 rwkTZIndex ID = 606
621 sahIndex ID = 607
622 sahRUIndex ID = 608
623 saqIndex ID = 609
624 saqKEIndex ID = 610
625 sbpIndex ID = 611
626 sbpTZIndex ID = 612
627 sdIndex ID = 613
628 sdPKIndex ID = 614
629 sdhIndex ID = 615
630 seIndex ID = 616
631 seFIIndex ID = 617
632 seNOIndex ID = 618
633 seSEIndex ID = 619
634 sehIndex ID = 620
635 sehMZIndex ID = 621
636 sesIndex ID = 622
637 sesMLIndex ID = 623
638 sgIndex ID = 624
639 sgCFIndex ID = 625
640 shIndex ID = 626
641 shiIndex ID = 627
642 shiLatnIndex ID = 628
643 shiLatnMAIndex ID = 629
644 shiTfngIndex ID = 630
645 shiTfngMAIndex ID = 631
646 siIndex ID = 632
647 siLKIndex ID = 633
648 skIndex ID = 634
649 skSKIndex ID = 635
650 slIndex ID = 636
651 slSIIndex ID = 637
652 smaIndex ID = 638
653 smiIndex ID = 639
654 smjIndex ID = 640
655 smnIndex ID = 641
656 smnFIIndex ID = 642
657 smsIndex ID = 643
658 snIndex ID = 644
659 snZWIndex ID = 645
660 soIndex ID = 646
661 soDJIndex ID = 647
662 soETIndex ID = 648
663 soKEIndex ID = 649
664 soSOIndex ID = 650
665 sqIndex ID = 651
666 sqALIndex ID = 652
667 sqMKIndex ID = 653
668 sqXKIndex ID = 654
669 srIndex ID = 655
670 srCyrlIndex ID = 656
671 srCyrlBAIndex ID = 657
672 srCyrlMEIndex ID = 658
673 srCyrlRSIndex ID = 659
674 srCyrlXKIndex ID = 660
675 srLatnIndex ID = 661
676 srLatnBAIndex ID = 662
677 srLatnMEIndex ID = 663
678 srLatnRSIndex ID = 664
679 srLatnXKIndex ID = 665
680 ssIndex ID = 666
681 ssyIndex ID = 667
682 stIndex ID = 668
683 svIndex ID = 669
684 svAXIndex ID = 670
685 svFIIndex ID = 671
686 svSEIndex ID = 672
687 swIndex ID = 673
688 swCDIndex ID = 674
689 swKEIndex ID = 675
690 swTZIndex ID = 676
691 swUGIndex ID = 677
692 syrIndex ID = 678
693 taIndex ID = 679
694 taINIndex ID = 680
695 taLKIndex ID = 681
696 taMYIndex ID = 682
697 taSGIndex ID = 683
698 teIndex ID = 684
699 teINIndex ID = 685
700 teoIndex ID = 686
701 teoKEIndex ID = 687
702 teoUGIndex ID = 688
703 tgIndex ID = 689
704 tgTJIndex ID = 690
705 thIndex ID = 691
706 thTHIndex ID = 692
707 tiIndex ID = 693
708 tiERIndex ID = 694
709 tiETIndex ID = 695
710 tigIndex ID = 696
711 tkIndex ID = 697
712 tkTMIndex ID = 698
713 tlIndex ID = 699
714 tnIndex ID = 700
715 toIndex ID = 701
716 toTOIndex ID = 702
717 trIndex ID = 703
718 trCYIndex ID = 704
719 trTRIndex ID = 705
720 tsIndex ID = 706
721 ttIndex ID = 707
722 ttRUIndex ID = 708
723 twqIndex ID = 709
724 twqNEIndex ID = 710
725 tzmIndex ID = 711
726 tzmMAIndex ID = 712
727 ugIndex ID = 713
728 ugCNIndex ID = 714
729 ukIndex ID = 715
730 ukUAIndex ID = 716
731 urIndex ID = 717
732 urINIndex ID = 718
733 urPKIndex ID = 719
734 uzIndex ID = 720
735 uzArabIndex ID = 721
736 uzArabAFIndex ID = 722
737 uzCyrlIndex ID = 723
738 uzCyrlUZIndex ID = 724
739 uzLatnIndex ID = 725
740 uzLatnUZIndex ID = 726
741 vaiIndex ID = 727
742 vaiLatnIndex ID = 728
743 vaiLatnLRIndex ID = 729
744 vaiVaiiIndex ID = 730
745 vaiVaiiLRIndex ID = 731
746 veIndex ID = 732
747 viIndex ID = 733
748 viVNIndex ID = 734
749 voIndex ID = 735
750 vo001Index ID = 736
751 vunIndex ID = 737
752 vunTZIndex ID = 738
753 waIndex ID = 739
754 waeIndex ID = 740
755 waeCHIndex ID = 741
756 woIndex ID = 742
757 woSNIndex ID = 743
758 xhIndex ID = 744
759 xogIndex ID = 745
760 xogUGIndex ID = 746
761 yavIndex ID = 747
762 yavCMIndex ID = 748
763 yiIndex ID = 749
764 yi001Index ID = 750
765 yoIndex ID = 751
766 yoBJIndex ID = 752
767 yoNGIndex ID = 753
768 yueIndex ID = 754
769 yueHansIndex ID = 755
770 yueHansCNIndex ID = 756
771 yueHantIndex ID = 757
772 yueHantHKIndex ID = 758
773 zghIndex ID = 759
774 zghMAIndex ID = 760
775 zhIndex ID = 761
776 zhHansIndex ID = 762
777 zhHansCNIndex ID = 763
778 zhHansHKIndex ID = 764
779 zhHansMOIndex ID = 765
780 zhHansSGIndex ID = 766
781 zhHantIndex ID = 767
782 zhHantHKIndex ID = 768
783 zhHantMOIndex ID = 769
784 zhHantTWIndex ID = 770
785 zuIndex ID = 771
786 zuZAIndex ID = 772
787 caESvalenciaIndex ID = 773
788 enUSuvaposixIndex ID = 774
789)
790
791var coreTags = []language.CompactCoreInfo{ // 773 elements
792 // Entry 0 - 1F
793 0x00000000, 0x01600000, 0x016000d3, 0x01600162,
794 0x01c00000, 0x01c00052, 0x02100000, 0x02100081,
795 0x02700000, 0x02700070, 0x03a00000, 0x03a00001,
796 0x03a00023, 0x03a00039, 0x03a00063, 0x03a00068,
797 0x03a0006c, 0x03a0006d, 0x03a0006e, 0x03a00098,
798 0x03a0009c, 0x03a000a2, 0x03a000a9, 0x03a000ad,
799 0x03a000b1, 0x03a000ba, 0x03a000bb, 0x03a000ca,
800 0x03a000e2, 0x03a000ee, 0x03a000f4, 0x03a00109,
801 // Entry 20 - 3F
802 0x03a0010c, 0x03a00116, 0x03a00118, 0x03a0011d,
803 0x03a00121, 0x03a00129, 0x03a0015f, 0x04000000,
804 0x04300000, 0x0430009a, 0x04400000, 0x04400130,
805 0x04800000, 0x0480006f, 0x05800000, 0x05820000,
806 0x05820032, 0x0585b000, 0x0585b032, 0x05e00000,
807 0x05e00052, 0x07100000, 0x07100047, 0x07500000,
808 0x07500163, 0x07900000, 0x07900130, 0x07e00000,
809 0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c4,
810 // Entry 40 - 5F
811 0x0a500000, 0x0a500035, 0x0a50009a, 0x0a900000,
812 0x0a900053, 0x0a90009a, 0x0b200000, 0x0b200079,
813 0x0b500000, 0x0b50009a, 0x0b700000, 0x0b720000,
814 0x0b720033, 0x0b75b000, 0x0b75b033, 0x0d700000,
815 0x0d700022, 0x0d70006f, 0x0d700079, 0x0d70009f,
816 0x0db00000, 0x0db00035, 0x0db0009a, 0x0dc00000,
817 0x0dc00107, 0x0df00000, 0x0df00132, 0x0e500000,
818 0x0e500136, 0x0e900000, 0x0e90009c, 0x0e90009d,
819 // Entry 60 - 7F
820 0x0fa00000, 0x0fa0005f, 0x0fe00000, 0x0fe00107,
821 0x10000000, 0x1000007c, 0x10100000, 0x10100064,
822 0x10100083, 0x10800000, 0x108000a5, 0x10d00000,
823 0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00061,
824 0x10d0009f, 0x10d000b3, 0x10d000b8, 0x11700000,
825 0x117000d5, 0x11f00000, 0x11f00061, 0x12400000,
826 0x12400052, 0x12800000, 0x12b00000, 0x12b00115,
827 0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a5,
828 // Entry 80 - 9F
829 0x13000000, 0x13000081, 0x13000123, 0x13600000,
830 0x1360005e, 0x13600088, 0x13900000, 0x13900001,
831 0x1390001a, 0x13900025, 0x13900026, 0x1390002d,
832 0x1390002e, 0x1390002f, 0x13900034, 0x13900036,
833 0x1390003a, 0x1390003d, 0x13900042, 0x13900046,
834 0x13900048, 0x13900049, 0x1390004a, 0x1390004e,
835 0x13900050, 0x13900052, 0x1390005d, 0x1390005e,
836 0x13900061, 0x13900062, 0x13900064, 0x13900065,
837 // Entry A0 - BF
838 0x1390006e, 0x13900073, 0x13900074, 0x13900075,
839 0x13900076, 0x1390007c, 0x1390007d, 0x13900080,
840 0x13900081, 0x13900082, 0x13900084, 0x1390008b,
841 0x1390008d, 0x1390008e, 0x13900097, 0x13900098,
842 0x13900099, 0x1390009a, 0x1390009b, 0x139000a0,
843 0x139000a1, 0x139000a5, 0x139000a8, 0x139000aa,
844 0x139000ae, 0x139000b2, 0x139000b5, 0x139000b6,
845 0x139000c0, 0x139000c1, 0x139000c7, 0x139000c8,
846 // Entry C0 - DF
847 0x139000cb, 0x139000cc, 0x139000cd, 0x139000cf,
848 0x139000d1, 0x139000d3, 0x139000d6, 0x139000d7,
849 0x139000da, 0x139000de, 0x139000e0, 0x139000e1,
850 0x139000e7, 0x139000e8, 0x139000e9, 0x139000ec,
851 0x139000ed, 0x139000f1, 0x13900108, 0x1390010a,
852 0x1390010b, 0x1390010c, 0x1390010d, 0x1390010e,
853 0x1390010f, 0x13900110, 0x13900113, 0x13900118,
854 0x1390011c, 0x1390011e, 0x13900120, 0x13900126,
855 // Entry E0 - FF
856 0x1390012a, 0x1390012d, 0x1390012e, 0x13900130,
857 0x13900132, 0x13900134, 0x13900136, 0x1390013a,
858 0x1390013d, 0x1390013e, 0x13900140, 0x13900143,
859 0x13900162, 0x13900163, 0x13900165, 0x13c00000,
860 0x13c00001, 0x13e00000, 0x13e0001f, 0x13e0002c,
861 0x13e0003f, 0x13e00041, 0x13e00048, 0x13e00051,
862 0x13e00054, 0x13e00057, 0x13e0005a, 0x13e00066,
863 0x13e00069, 0x13e0006a, 0x13e0006f, 0x13e00087,
864 // Entry 100 - 11F
865 0x13e0008a, 0x13e00090, 0x13e00095, 0x13e000d0,
866 0x13e000d9, 0x13e000e3, 0x13e000e5, 0x13e000e8,
867 0x13e000ed, 0x13e000f2, 0x13e0011b, 0x13e00136,
868 0x13e00137, 0x13e0013c, 0x14000000, 0x1400006b,
869 0x14500000, 0x1450006f, 0x14600000, 0x14600052,
870 0x14800000, 0x14800024, 0x1480009d, 0x14e00000,
871 0x14e00052, 0x14e00085, 0x14e000ca, 0x14e00115,
872 0x15100000, 0x15100073, 0x15300000, 0x153000e8,
873 // Entry 120 - 13F
874 0x15800000, 0x15800064, 0x15800077, 0x15e00000,
875 0x15e00036, 0x15e00037, 0x15e0003a, 0x15e0003b,
876 0x15e0003c, 0x15e00049, 0x15e0004b, 0x15e0004c,
877 0x15e0004d, 0x15e0004e, 0x15e0004f, 0x15e00052,
878 0x15e00063, 0x15e00068, 0x15e00079, 0x15e0007b,
879 0x15e0007f, 0x15e00085, 0x15e00086, 0x15e00087,
880 0x15e00092, 0x15e000a9, 0x15e000b8, 0x15e000bb,
881 0x15e000bc, 0x15e000bf, 0x15e000c0, 0x15e000c4,
882 // Entry 140 - 15F
883 0x15e000c9, 0x15e000ca, 0x15e000cd, 0x15e000d4,
884 0x15e000d5, 0x15e000e6, 0x15e000eb, 0x15e00103,
885 0x15e00108, 0x15e0010b, 0x15e00115, 0x15e0011d,
886 0x15e00121, 0x15e00123, 0x15e00129, 0x15e00140,
887 0x15e00141, 0x15e00160, 0x16900000, 0x1690009f,
888 0x16d00000, 0x16d000da, 0x16e00000, 0x16e00097,
889 0x17e00000, 0x17e0007c, 0x19000000, 0x1900006f,
890 0x1a300000, 0x1a30004e, 0x1a300079, 0x1a3000b3,
891 // Entry 160 - 17F
892 0x1a400000, 0x1a40009a, 0x1a900000, 0x1ab00000,
893 0x1ab000a5, 0x1ac00000, 0x1ac00099, 0x1b400000,
894 0x1b400081, 0x1b4000d5, 0x1b4000d7, 0x1b800000,
895 0x1b800136, 0x1bc00000, 0x1bc00098, 0x1be00000,
896 0x1be0009a, 0x1d100000, 0x1d100033, 0x1d100091,
897 0x1d200000, 0x1d200061, 0x1d500000, 0x1d500093,
898 0x1d700000, 0x1d700028, 0x1e100000, 0x1e100096,
899 0x1e700000, 0x1e7000d7, 0x1ea00000, 0x1ea00053,
900 // Entry 180 - 19F
901 0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009e,
902 0x1f900000, 0x1f90004e, 0x1f90009f, 0x1f900114,
903 0x1f900139, 0x1fa00000, 0x1fb00000, 0x20000000,
904 0x200000a3, 0x20300000, 0x20700000, 0x20700052,
905 0x20800000, 0x20a00000, 0x20a00130, 0x20e00000,
906 0x20f00000, 0x21000000, 0x2100007e, 0x21200000,
907 0x21200068, 0x21600000, 0x21700000, 0x217000a5,
908 0x21f00000, 0x22300000, 0x22300130, 0x22700000,
909 // Entry 1A0 - 1BF
910 0x2270005b, 0x23400000, 0x234000c4, 0x23900000,
911 0x239000a5, 0x24200000, 0x242000af, 0x24400000,
912 0x24400052, 0x24500000, 0x24500083, 0x24600000,
913 0x246000a5, 0x24a00000, 0x24a000a7, 0x25100000,
914 0x2510009a, 0x25400000, 0x254000ab, 0x254000ac,
915 0x25600000, 0x2560009a, 0x26a00000, 0x26a0009a,
916 0x26b00000, 0x26b00130, 0x26d00000, 0x26d00052,
917 0x26e00000, 0x26e00061, 0x27400000, 0x28100000,
918 // Entry 1C0 - 1DF
919 0x2810007c, 0x28a00000, 0x28a000a6, 0x29100000,
920 0x29100130, 0x29500000, 0x295000b8, 0x2a300000,
921 0x2a300132, 0x2af00000, 0x2af00136, 0x2b500000,
922 0x2b50002a, 0x2b50004b, 0x2b50004c, 0x2b50004d,
923 0x2b800000, 0x2b8000b0, 0x2bf00000, 0x2bf0009c,
924 0x2bf0009d, 0x2c000000, 0x2c0000b7, 0x2c200000,
925 0x2c20004b, 0x2c400000, 0x2c4000a5, 0x2c500000,
926 0x2c5000a5, 0x2c700000, 0x2c7000b9, 0x2d100000,
927 // Entry 1E0 - 1FF
928 0x2d1000a5, 0x2d100130, 0x2e900000, 0x2e9000a5,
929 0x2ed00000, 0x2ed000cd, 0x2f100000, 0x2f1000c0,
930 0x2f200000, 0x2f2000d2, 0x2f400000, 0x2f400052,
931 0x2ff00000, 0x2ff000c3, 0x30400000, 0x3040009a,
932 0x30b00000, 0x30b000c6, 0x31000000, 0x31b00000,
933 0x31b0009a, 0x31f00000, 0x31f0003e, 0x31f000d1,
934 0x31f0010e, 0x32000000, 0x320000cc, 0x32500000,
935 0x32500052, 0x33100000, 0x331000c5, 0x33a00000,
936 // Entry 200 - 21F
937 0x33a0009d, 0x34100000, 0x34500000, 0x345000d3,
938 0x34700000, 0x347000db, 0x34700111, 0x34e00000,
939 0x34e00165, 0x35000000, 0x35000061, 0x350000da,
940 0x35100000, 0x3510009a, 0x351000dc, 0x36700000,
941 0x36700030, 0x36700036, 0x36700040, 0x3670005c,
942 0x367000da, 0x36700117, 0x3670011c, 0x36800000,
943 0x36800052, 0x36a00000, 0x36a000db, 0x36c00000,
944 0x36c00052, 0x36f00000, 0x37500000, 0x37600000,
945 // Entry 220 - 23F
946 0x37a00000, 0x38000000, 0x38000118, 0x38700000,
947 0x38900000, 0x38900132, 0x39000000, 0x39000070,
948 0x390000a5, 0x39500000, 0x3950009a, 0x39800000,
949 0x3980007e, 0x39800107, 0x39d00000, 0x39d05000,
950 0x39d050e9, 0x39d36000, 0x39d3609a, 0x3a100000,
951 0x3b300000, 0x3b3000ea, 0x3bd00000, 0x3bd00001,
952 0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a,
953 0x3c000041, 0x3c00004e, 0x3c00005b, 0x3c000087,
954 // Entry 240 - 25F
955 0x3c00008c, 0x3c0000b8, 0x3c0000c7, 0x3c0000d2,
956 0x3c0000ef, 0x3c000119, 0x3c000127, 0x3c400000,
957 0x3c40003f, 0x3c40006a, 0x3c4000e5, 0x3d400000,
958 0x3d40004e, 0x3d900000, 0x3d90003a, 0x3dc00000,
959 0x3dc000bd, 0x3dc00105, 0x3de00000, 0x3de00130,
960 0x3e200000, 0x3e200047, 0x3e2000a6, 0x3e2000af,
961 0x3e2000bd, 0x3e200107, 0x3e200131, 0x3e500000,
962 0x3e500108, 0x3e600000, 0x3e600130, 0x3eb00000,
963 // Entry 260 - 27F
964 0x3eb00107, 0x3ec00000, 0x3ec000a5, 0x3f300000,
965 0x3f300130, 0x3fa00000, 0x3fa000e9, 0x3fc00000,
966 0x3fd00000, 0x3fd00073, 0x3fd000db, 0x3fd0010d,
967 0x3ff00000, 0x3ff000d2, 0x40100000, 0x401000c4,
968 0x40200000, 0x4020004c, 0x40700000, 0x40800000,
969 0x4085b000, 0x4085b0bb, 0x408eb000, 0x408eb0bb,
970 0x40c00000, 0x40c000b4, 0x41200000, 0x41200112,
971 0x41600000, 0x41600110, 0x41c00000, 0x41d00000,
972 // Entry 280 - 29F
973 0x41e00000, 0x41f00000, 0x41f00073, 0x42200000,
974 0x42300000, 0x42300165, 0x42900000, 0x42900063,
975 0x42900070, 0x429000a5, 0x42900116, 0x43100000,
976 0x43100027, 0x431000c3, 0x4310014e, 0x43200000,
977 0x43220000, 0x43220033, 0x432200be, 0x43220106,
978 0x4322014e, 0x4325b000, 0x4325b033, 0x4325b0be,
979 0x4325b106, 0x4325b14e, 0x43700000, 0x43a00000,
980 0x43b00000, 0x44400000, 0x44400031, 0x44400073,
981 // Entry 2A0 - 2BF
982 0x4440010d, 0x44500000, 0x4450004b, 0x445000a5,
983 0x44500130, 0x44500132, 0x44e00000, 0x45000000,
984 0x4500009a, 0x450000b4, 0x450000d1, 0x4500010e,
985 0x46100000, 0x4610009a, 0x46400000, 0x464000a5,
986 0x46400132, 0x46700000, 0x46700125, 0x46b00000,
987 0x46b00124, 0x46f00000, 0x46f0006e, 0x46f00070,
988 0x47100000, 0x47600000, 0x47600128, 0x47a00000,
989 0x48000000, 0x48200000, 0x4820012a, 0x48a00000,
990 // Entry 2C0 - 2DF
991 0x48a0005e, 0x48a0012c, 0x48e00000, 0x49400000,
992 0x49400107, 0x4a400000, 0x4a4000d5, 0x4a900000,
993 0x4a9000bb, 0x4ac00000, 0x4ac00053, 0x4ae00000,
994 0x4ae00131, 0x4b400000, 0x4b40009a, 0x4b4000e9,
995 0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000,
996 0x4bc20138, 0x4bc5b000, 0x4bc5b138, 0x4be00000,
997 0x4be5b000, 0x4be5b0b5, 0x4bef4000, 0x4bef40b5,
998 0x4c000000, 0x4c300000, 0x4c30013f, 0x4c900000,
999 // Entry 2E0 - 2FF
1000 0x4c900001, 0x4cc00000, 0x4cc00130, 0x4ce00000,
1001 0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500115,
1002 0x4f200000, 0x4fb00000, 0x4fb00132, 0x50900000,
1003 0x50900052, 0x51200000, 0x51200001, 0x51800000,
1004 0x5180003b, 0x518000d7, 0x51f00000, 0x51f3b000,
1005 0x51f3b053, 0x51f3c000, 0x51f3c08e, 0x52800000,
1006 0x528000bb, 0x52900000, 0x5293b000, 0x5293b053,
1007 0x5293b08e, 0x5293b0c7, 0x5293b10e, 0x5293c000,
1008 // Entry 300 - 31F
1009 0x5293c08e, 0x5293c0c7, 0x5293c12f, 0x52f00000,
1010 0x52f00162,
1011} // Size: 3116 bytes
1012
1013const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix"
1014
1015// Total table size 3147 bytes (3KiB); checksum: 5A8FFFA5
diff --git a/vendor/golang.org/x/text/internal/language/compact/tags.go b/vendor/golang.org/x/text/internal/language/compact/tags.go
new file mode 100644
index 0000000..ca135d2
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/tags.go
@@ -0,0 +1,91 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package compact
6
7var (
8 und = Tag{}
9
10 Und Tag = Tag{}
11
12 Afrikaans Tag = Tag{language: afIndex, locale: afIndex}
13 Amharic Tag = Tag{language: amIndex, locale: amIndex}
14 Arabic Tag = Tag{language: arIndex, locale: arIndex}
15 ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index}
16 Azerbaijani Tag = Tag{language: azIndex, locale: azIndex}
17 Bulgarian Tag = Tag{language: bgIndex, locale: bgIndex}
18 Bengali Tag = Tag{language: bnIndex, locale: bnIndex}
19 Catalan Tag = Tag{language: caIndex, locale: caIndex}
20 Czech Tag = Tag{language: csIndex, locale: csIndex}
21 Danish Tag = Tag{language: daIndex, locale: daIndex}
22 German Tag = Tag{language: deIndex, locale: deIndex}
23 Greek Tag = Tag{language: elIndex, locale: elIndex}
24 English Tag = Tag{language: enIndex, locale: enIndex}
25 AmericanEnglish Tag = Tag{language: enUSIndex, locale: enUSIndex}
26 BritishEnglish Tag = Tag{language: enGBIndex, locale: enGBIndex}
27 Spanish Tag = Tag{language: esIndex, locale: esIndex}
28 EuropeanSpanish Tag = Tag{language: esESIndex, locale: esESIndex}
29 LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index}
30 Estonian Tag = Tag{language: etIndex, locale: etIndex}
31 Persian Tag = Tag{language: faIndex, locale: faIndex}
32 Finnish Tag = Tag{language: fiIndex, locale: fiIndex}
33 Filipino Tag = Tag{language: filIndex, locale: filIndex}
34 French Tag = Tag{language: frIndex, locale: frIndex}
35 CanadianFrench Tag = Tag{language: frCAIndex, locale: frCAIndex}
36 Gujarati Tag = Tag{language: guIndex, locale: guIndex}
37 Hebrew Tag = Tag{language: heIndex, locale: heIndex}
38 Hindi Tag = Tag{language: hiIndex, locale: hiIndex}
39 Croatian Tag = Tag{language: hrIndex, locale: hrIndex}
40 Hungarian Tag = Tag{language: huIndex, locale: huIndex}
41 Armenian Tag = Tag{language: hyIndex, locale: hyIndex}
42 Indonesian Tag = Tag{language: idIndex, locale: idIndex}
43 Icelandic Tag = Tag{language: isIndex, locale: isIndex}
44 Italian Tag = Tag{language: itIndex, locale: itIndex}
45 Japanese Tag = Tag{language: jaIndex, locale: jaIndex}
46 Georgian Tag = Tag{language: kaIndex, locale: kaIndex}
47 Kazakh Tag = Tag{language: kkIndex, locale: kkIndex}
48 Khmer Tag = Tag{language: kmIndex, locale: kmIndex}
49 Kannada Tag = Tag{language: knIndex, locale: knIndex}
50 Korean Tag = Tag{language: koIndex, locale: koIndex}
51 Kirghiz Tag = Tag{language: kyIndex, locale: kyIndex}
52 Lao Tag = Tag{language: loIndex, locale: loIndex}
53 Lithuanian Tag = Tag{language: ltIndex, locale: ltIndex}
54 Latvian Tag = Tag{language: lvIndex, locale: lvIndex}
55 Macedonian Tag = Tag{language: mkIndex, locale: mkIndex}
56 Malayalam Tag = Tag{language: mlIndex, locale: mlIndex}
57 Mongolian Tag = Tag{language: mnIndex, locale: mnIndex}
58 Marathi Tag = Tag{language: mrIndex, locale: mrIndex}
59 Malay Tag = Tag{language: msIndex, locale: msIndex}
60 Burmese Tag = Tag{language: myIndex, locale: myIndex}
61 Nepali Tag = Tag{language: neIndex, locale: neIndex}
62 Dutch Tag = Tag{language: nlIndex, locale: nlIndex}
63 Norwegian Tag = Tag{language: noIndex, locale: noIndex}
64 Punjabi Tag = Tag{language: paIndex, locale: paIndex}
65 Polish Tag = Tag{language: plIndex, locale: plIndex}
66 Portuguese Tag = Tag{language: ptIndex, locale: ptIndex}
67 BrazilianPortuguese Tag = Tag{language: ptBRIndex, locale: ptBRIndex}
68 EuropeanPortuguese Tag = Tag{language: ptPTIndex, locale: ptPTIndex}
69 Romanian Tag = Tag{language: roIndex, locale: roIndex}
70 Russian Tag = Tag{language: ruIndex, locale: ruIndex}
71 Sinhala Tag = Tag{language: siIndex, locale: siIndex}
72 Slovak Tag = Tag{language: skIndex, locale: skIndex}
73 Slovenian Tag = Tag{language: slIndex, locale: slIndex}
74 Albanian Tag = Tag{language: sqIndex, locale: sqIndex}
75 Serbian Tag = Tag{language: srIndex, locale: srIndex}
76 SerbianLatin Tag = Tag{language: srLatnIndex, locale: srLatnIndex}
77 Swedish Tag = Tag{language: svIndex, locale: svIndex}
78 Swahili Tag = Tag{language: swIndex, locale: swIndex}
79 Tamil Tag = Tag{language: taIndex, locale: taIndex}
80 Telugu Tag = Tag{language: teIndex, locale: teIndex}
81 Thai Tag = Tag{language: thIndex, locale: thIndex}
82 Turkish Tag = Tag{language: trIndex, locale: trIndex}
83 Ukrainian Tag = Tag{language: ukIndex, locale: ukIndex}
84 Urdu Tag = Tag{language: urIndex, locale: urIndex}
85 Uzbek Tag = Tag{language: uzIndex, locale: uzIndex}
86 Vietnamese Tag = Tag{language: viIndex, locale: viIndex}
87 Chinese Tag = Tag{language: zhIndex, locale: zhIndex}
88 SimplifiedChinese Tag = Tag{language: zhHansIndex, locale: zhHansIndex}
89 TraditionalChinese Tag = Tag{language: zhHantIndex, locale: zhHantIndex}
90 Zulu Tag = Tag{language: zuIndex, locale: zuIndex}
91)
diff --git a/vendor/golang.org/x/text/internal/language/compose.go b/vendor/golang.org/x/text/internal/language/compose.go
new file mode 100644
index 0000000..4ae78e0
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compose.go
@@ -0,0 +1,167 @@
1// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7import (
8 "sort"
9 "strings"
10)
11
12// A Builder allows constructing a Tag from individual components.
13// Its main user is Compose in the top-level language package.
14type Builder struct {
15 Tag Tag
16
17 private string // the x extension
18 variants []string
19 extensions []string
20}
21
22// Make returns a new Tag from the current settings.
23func (b *Builder) Make() Tag {
24 t := b.Tag
25
26 if len(b.extensions) > 0 || len(b.variants) > 0 {
27 sort.Sort(sortVariants(b.variants))
28 sort.Strings(b.extensions)
29
30 if b.private != "" {
31 b.extensions = append(b.extensions, b.private)
32 }
33 n := maxCoreSize + tokenLen(b.variants...) + tokenLen(b.extensions...)
34 buf := make([]byte, n)
35 p := t.genCoreBytes(buf)
36 t.pVariant = byte(p)
37 p += appendTokens(buf[p:], b.variants...)
38 t.pExt = uint16(p)
39 p += appendTokens(buf[p:], b.extensions...)
40 t.str = string(buf[:p])
41 // We may not always need to remake the string, but when or when not
42 // to do so is rather tricky.
43 scan := makeScanner(buf[:p])
44 t, _ = parse(&scan, "")
45 return t
46
47 } else if b.private != "" {
48 t.str = b.private
49 t.RemakeString()
50 }
51 return t
52}
53
54// SetTag copies all the settings from a given Tag. Any previously set values
55// are discarded.
56func (b *Builder) SetTag(t Tag) {
57 b.Tag.LangID = t.LangID
58 b.Tag.RegionID = t.RegionID
59 b.Tag.ScriptID = t.ScriptID
60 // TODO: optimize
61 b.variants = b.variants[:0]
62 if variants := t.Variants(); variants != "" {
63 for _, vr := range strings.Split(variants[1:], "-") {
64 b.variants = append(b.variants, vr)
65 }
66 }
67 b.extensions, b.private = b.extensions[:0], ""
68 for _, e := range t.Extensions() {
69 b.AddExt(e)
70 }
71}
72
73// AddExt adds extension e to the tag. e must be a valid extension as returned
74// by Tag.Extension. If the extension already exists, it will be discarded,
75// except for a -u extension, where non-existing key-type pairs will added.
76func (b *Builder) AddExt(e string) {
77 if e[0] == 'x' {
78 if b.private == "" {
79 b.private = e
80 }
81 return
82 }
83 for i, s := range b.extensions {
84 if s[0] == e[0] {
85 if e[0] == 'u' {
86 b.extensions[i] += e[1:]
87 }
88 return
89 }
90 }
91 b.extensions = append(b.extensions, e)
92}
93
94// SetExt sets the extension e to the tag. e must be a valid extension as
95// returned by Tag.Extension. If the extension already exists, it will be
96// overwritten, except for a -u extension, where the individual key-type pairs
97// will be set.
98func (b *Builder) SetExt(e string) {
99 if e[0] == 'x' {
100 b.private = e
101 return
102 }
103 for i, s := range b.extensions {
104 if s[0] == e[0] {
105 if e[0] == 'u' {
106 b.extensions[i] = e + s[1:]
107 } else {
108 b.extensions[i] = e
109 }
110 return
111 }
112 }
113 b.extensions = append(b.extensions, e)
114}
115
116// AddVariant adds any number of variants.
117func (b *Builder) AddVariant(v ...string) {
118 for _, v := range v {
119 if v != "" {
120 b.variants = append(b.variants, v)
121 }
122 }
123}
124
125// ClearVariants removes any variants previously added, including those
126// copied from a Tag in SetTag.
127func (b *Builder) ClearVariants() {
128 b.variants = b.variants[:0]
129}
130
131// ClearExtensions removes any extensions previously added, including those
132// copied from a Tag in SetTag.
133func (b *Builder) ClearExtensions() {
134 b.private = ""
135 b.extensions = b.extensions[:0]
136}
137
138func tokenLen(token ...string) (n int) {
139 for _, t := range token {
140 n += len(t) + 1
141 }
142 return
143}
144
145func appendTokens(b []byte, token ...string) int {
146 p := 0
147 for _, t := range token {
148 b[p] = '-'
149 copy(b[p+1:], t)
150 p += 1 + len(t)
151 }
152 return p
153}
154
155type sortVariants []string
156
157func (s sortVariants) Len() int {
158 return len(s)
159}
160
161func (s sortVariants) Swap(i, j int) {
162 s[j], s[i] = s[i], s[j]
163}
164
165func (s sortVariants) Less(i, j int) bool {
166 return variantIndex[s[i]] < variantIndex[s[j]]
167}
diff --git a/vendor/golang.org/x/text/internal/language/coverage.go b/vendor/golang.org/x/text/internal/language/coverage.go
new file mode 100644
index 0000000..9b20b88
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/coverage.go
@@ -0,0 +1,28 @@
1// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7// BaseLanguages returns the list of all supported base languages. It generates
8// the list by traversing the internal structures.
9func BaseLanguages() []Language {
10 base := make([]Language, 0, NumLanguages)
11 for i := 0; i < langNoIndexOffset; i++ {
12 // We included "und" already for the value 0.
13 if i != nonCanonicalUnd {
14 base = append(base, Language(i))
15 }
16 }
17 i := langNoIndexOffset
18 for _, v := range langNoIndex {
19 for k := 0; k < 8; k++ {
20 if v&1 == 1 {
21 base = append(base, Language(i))
22 }
23 v >>= 1
24 i++
25 }
26 }
27 return base
28}
diff --git a/vendor/golang.org/x/text/internal/language/language.go b/vendor/golang.org/x/text/internal/language/language.go
new file mode 100644
index 0000000..09d41c7
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/language.go
@@ -0,0 +1,627 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:generate go run gen.go gen_common.go -output tables.go
6
7package language // import "golang.org/x/text/internal/language"
8
9// TODO: Remove above NOTE after:
10// - verifying that tables are dropped correctly (most notably matcher tables).
11
12import (
13 "errors"
14 "fmt"
15 "strings"
16)
17
18const (
19 // maxCoreSize is the maximum size of a BCP 47 tag without variants and
20 // extensions. Equals max lang (3) + script (4) + max reg (3) + 2 dashes.
21 maxCoreSize = 12
22
23 // max99thPercentileSize is a somewhat arbitrary buffer size that presumably
24 // is large enough to hold at least 99% of the BCP 47 tags.
25 max99thPercentileSize = 32
26
27 // maxSimpleUExtensionSize is the maximum size of a -u extension with one
28 // key-type pair. Equals len("-u-") + key (2) + dash + max value (8).
29 maxSimpleUExtensionSize = 14
30)
31
32// Tag represents a BCP 47 language tag. It is used to specify an instance of a
33// specific language or locale. All language tag values are guaranteed to be
34// well-formed. The zero value of Tag is Und.
35type Tag struct {
36 // TODO: the following fields have the form TagTypeID. This name is chosen
37 // to allow refactoring the public package without conflicting with its
38 // Base, Script, and Region methods. Once the transition is fully completed
39 // the ID can be stripped from the name.
40
41 LangID Language
42 RegionID Region
43 // TODO: we will soon run out of positions for ScriptID. Idea: instead of
44 // storing lang, region, and ScriptID codes, store only the compact index and
45 // have a lookup table from this code to its expansion. This greatly speeds
46 // up table lookup, speed up common variant cases.
47 // This will also immediately free up 3 extra bytes. Also, the pVariant
48 // field can now be moved to the lookup table, as the compact index uniquely
49 // determines the offset of a possible variant.
50 ScriptID Script
51 pVariant byte // offset in str, includes preceding '-'
52 pExt uint16 // offset of first extension, includes preceding '-'
53
54 // str is the string representation of the Tag. It will only be used if the
55 // tag has variants or extensions.
56 str string
57}
58
59// Make is a convenience wrapper for Parse that omits the error.
60// In case of an error, a sensible default is returned.
61func Make(s string) Tag {
62 t, _ := Parse(s)
63 return t
64}
65
66// Raw returns the raw base language, script and region, without making an
67// attempt to infer their values.
68// TODO: consider removing
69func (t Tag) Raw() (b Language, s Script, r Region) {
70 return t.LangID, t.ScriptID, t.RegionID
71}
72
73// equalTags compares language, script and region subtags only.
74func (t Tag) equalTags(a Tag) bool {
75 return t.LangID == a.LangID && t.ScriptID == a.ScriptID && t.RegionID == a.RegionID
76}
77
78// IsRoot returns true if t is equal to language "und".
79func (t Tag) IsRoot() bool {
80 if int(t.pVariant) < len(t.str) {
81 return false
82 }
83 return t.equalTags(Und)
84}
85
86// IsPrivateUse reports whether the Tag consists solely of an IsPrivateUse use
87// tag.
88func (t Tag) IsPrivateUse() bool {
89 return t.str != "" && t.pVariant == 0
90}
91
92// RemakeString is used to update t.str in case lang, script or region changed.
93// It is assumed that pExt and pVariant still point to the start of the
94// respective parts.
95func (t *Tag) RemakeString() {
96 if t.str == "" {
97 return
98 }
99 extra := t.str[t.pVariant:]
100 if t.pVariant > 0 {
101 extra = extra[1:]
102 }
103 if t.equalTags(Und) && strings.HasPrefix(extra, "x-") {
104 t.str = extra
105 t.pVariant = 0
106 t.pExt = 0
107 return
108 }
109 var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases.
110 b := buf[:t.genCoreBytes(buf[:])]
111 if extra != "" {
112 diff := len(b) - int(t.pVariant)
113 b = append(b, '-')
114 b = append(b, extra...)
115 t.pVariant = uint8(int(t.pVariant) + diff)
116 t.pExt = uint16(int(t.pExt) + diff)
117 } else {
118 t.pVariant = uint8(len(b))
119 t.pExt = uint16(len(b))
120 }
121 t.str = string(b)
122}
123
124// genCoreBytes writes a string for the base languages, script and region tags
125// to the given buffer and returns the number of bytes written. It will never
126// write more than maxCoreSize bytes.
127func (t *Tag) genCoreBytes(buf []byte) int {
128 n := t.LangID.StringToBuf(buf[:])
129 if t.ScriptID != 0 {
130 n += copy(buf[n:], "-")
131 n += copy(buf[n:], t.ScriptID.String())
132 }
133 if t.RegionID != 0 {
134 n += copy(buf[n:], "-")
135 n += copy(buf[n:], t.RegionID.String())
136 }
137 return n
138}
139
140// String returns the canonical string representation of the language tag.
141func (t Tag) String() string {
142 if t.str != "" {
143 return t.str
144 }
145 if t.ScriptID == 0 && t.RegionID == 0 {
146 return t.LangID.String()
147 }
148 buf := [maxCoreSize]byte{}
149 return string(buf[:t.genCoreBytes(buf[:])])
150}
151
152// MarshalText implements encoding.TextMarshaler.
153func (t Tag) MarshalText() (text []byte, err error) {
154 if t.str != "" {
155 text = append(text, t.str...)
156 } else if t.ScriptID == 0 && t.RegionID == 0 {
157 text = append(text, t.LangID.String()...)
158 } else {
159 buf := [maxCoreSize]byte{}
160 text = buf[:t.genCoreBytes(buf[:])]
161 }
162 return text, nil
163}
164
165// UnmarshalText implements encoding.TextUnmarshaler.
166func (t *Tag) UnmarshalText(text []byte) error {
167 tag, err := Parse(string(text))
168 *t = tag
169 return err
170}
171
172// Variants returns the part of the tag holding all variants or the empty string
173// if there are no variants defined.
174func (t Tag) Variants() string {
175 if t.pVariant == 0 {
176 return ""
177 }
178 return t.str[t.pVariant:t.pExt]
179}
180
181// VariantOrPrivateUseTags returns variants or private use tags.
182func (t Tag) VariantOrPrivateUseTags() string {
183 if t.pExt > 0 {
184 return t.str[t.pVariant:t.pExt]
185 }
186 return t.str[t.pVariant:]
187}
188
189// HasString reports whether this tag defines more than just the raw
190// components.
191func (t Tag) HasString() bool {
192 return t.str != ""
193}
194
195// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
196// specific language are substituted with fields from the parent language.
197// The parent for a language may change for newer versions of CLDR.
198func (t Tag) Parent() Tag {
199 if t.str != "" {
200 // Strip the variants and extensions.
201 b, s, r := t.Raw()
202 t = Tag{LangID: b, ScriptID: s, RegionID: r}
203 if t.RegionID == 0 && t.ScriptID != 0 && t.LangID != 0 {
204 base, _ := addTags(Tag{LangID: t.LangID})
205 if base.ScriptID == t.ScriptID {
206 return Tag{LangID: t.LangID}
207 }
208 }
209 return t
210 }
211 if t.LangID != 0 {
212 if t.RegionID != 0 {
213 maxScript := t.ScriptID
214 if maxScript == 0 {
215 max, _ := addTags(t)
216 maxScript = max.ScriptID
217 }
218
219 for i := range parents {
220 if Language(parents[i].lang) == t.LangID && Script(parents[i].maxScript) == maxScript {
221 for _, r := range parents[i].fromRegion {
222 if Region(r) == t.RegionID {
223 return Tag{
224 LangID: t.LangID,
225 ScriptID: Script(parents[i].script),
226 RegionID: Region(parents[i].toRegion),
227 }
228 }
229 }
230 }
231 }
232
233 // Strip the script if it is the default one.
234 base, _ := addTags(Tag{LangID: t.LangID})
235 if base.ScriptID != maxScript {
236 return Tag{LangID: t.LangID, ScriptID: maxScript}
237 }
238 return Tag{LangID: t.LangID}
239 } else if t.ScriptID != 0 {
240 // The parent for an base-script pair with a non-default script is
241 // "und" instead of the base language.
242 base, _ := addTags(Tag{LangID: t.LangID})
243 if base.ScriptID != t.ScriptID {
244 return Und
245 }
246 return Tag{LangID: t.LangID}
247 }
248 }
249 return Und
250}
251
252// ParseExtension parses s as an extension and returns it on success.
253func ParseExtension(s string) (ext string, err error) {
254 defer func() {
255 if recover() != nil {
256 ext = ""
257 err = ErrSyntax
258 }
259 }()
260
261 scan := makeScannerString(s)
262 var end int
263 if n := len(scan.token); n != 1 {
264 return "", ErrSyntax
265 }
266 scan.toLower(0, len(scan.b))
267 end = parseExtension(&scan)
268 if end != len(s) {
269 return "", ErrSyntax
270 }
271 return string(scan.b), nil
272}
273
274// HasVariants reports whether t has variants.
275func (t Tag) HasVariants() bool {
276 return uint16(t.pVariant) < t.pExt
277}
278
279// HasExtensions reports whether t has extensions.
280func (t Tag) HasExtensions() bool {
281 return int(t.pExt) < len(t.str)
282}
283
284// Extension returns the extension of type x for tag t. It will return
285// false for ok if t does not have the requested extension. The returned
286// extension will be invalid in this case.
287func (t Tag) Extension(x byte) (ext string, ok bool) {
288 for i := int(t.pExt); i < len(t.str)-1; {
289 var ext string
290 i, ext = getExtension(t.str, i)
291 if ext[0] == x {
292 return ext, true
293 }
294 }
295 return "", false
296}
297
298// Extensions returns all extensions of t.
299func (t Tag) Extensions() []string {
300 e := []string{}
301 for i := int(t.pExt); i < len(t.str)-1; {
302 var ext string
303 i, ext = getExtension(t.str, i)
304 e = append(e, ext)
305 }
306 return e
307}
308
309// TypeForKey returns the type associated with the given key, where key and type
310// are of the allowed values defined for the Unicode locale extension ('u') in
311// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
312// TypeForKey will traverse the inheritance chain to get the correct value.
313//
314// If there are multiple types associated with a key, only the first will be
315// returned. If there is no type associated with a key, it returns the empty
316// string.
317func (t Tag) TypeForKey(key string) string {
318 if _, start, end, _ := t.findTypeForKey(key); end != start {
319 s := t.str[start:end]
320 if p := strings.IndexByte(s, '-'); p >= 0 {
321 s = s[:p]
322 }
323 return s
324 }
325 return ""
326}
327
328var (
329 errPrivateUse = errors.New("cannot set a key on a private use tag")
330 errInvalidArguments = errors.New("invalid key or type")
331)
332
333// SetTypeForKey returns a new Tag with the key set to type, where key and type
334// are of the allowed values defined for the Unicode locale extension ('u') in
335// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
336// An empty value removes an existing pair with the same key.
337func (t Tag) SetTypeForKey(key, value string) (Tag, error) {
338 if t.IsPrivateUse() {
339 return t, errPrivateUse
340 }
341 if len(key) != 2 {
342 return t, errInvalidArguments
343 }
344
345 // Remove the setting if value is "".
346 if value == "" {
347 start, sep, end, _ := t.findTypeForKey(key)
348 if start != sep {
349 // Remove a possible empty extension.
350 switch {
351 case t.str[start-2] != '-': // has previous elements.
352 case end == len(t.str), // end of string
353 end+2 < len(t.str) && t.str[end+2] == '-': // end of extension
354 start -= 2
355 }
356 if start == int(t.pVariant) && end == len(t.str) {
357 t.str = ""
358 t.pVariant, t.pExt = 0, 0
359 } else {
360 t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:])
361 }
362 }
363 return t, nil
364 }
365
366 if len(value) < 3 || len(value) > 8 {
367 return t, errInvalidArguments
368 }
369
370 var (
371 buf [maxCoreSize + maxSimpleUExtensionSize]byte
372 uStart int // start of the -u extension.
373 )
374
375 // Generate the tag string if needed.
376 if t.str == "" {
377 uStart = t.genCoreBytes(buf[:])
378 buf[uStart] = '-'
379 uStart++
380 }
381
382 // Create new key-type pair and parse it to verify.
383 b := buf[uStart:]
384 copy(b, "u-")
385 copy(b[2:], key)
386 b[4] = '-'
387 b = b[:5+copy(b[5:], value)]
388 scan := makeScanner(b)
389 if parseExtensions(&scan); scan.err != nil {
390 return t, scan.err
391 }
392
393 // Assemble the replacement string.
394 if t.str == "" {
395 t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1)
396 t.str = string(buf[:uStart+len(b)])
397 } else {
398 s := t.str
399 start, sep, end, hasExt := t.findTypeForKey(key)
400 if start == sep {
401 if hasExt {
402 b = b[2:]
403 }
404 t.str = fmt.Sprintf("%s-%s%s", s[:sep], b, s[end:])
405 } else {
406 t.str = fmt.Sprintf("%s-%s%s", s[:start+3], value, s[end:])
407 }
408 }
409 return t, nil
410}
411
412// findTypeForKey returns the start and end position for the type corresponding
413// to key or the point at which to insert the key-value pair if the type
414// wasn't found. The hasExt return value reports whether an -u extension was present.
415// Note: the extensions are typically very small and are likely to contain
416// only one key-type pair.
417func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) {
418 p := int(t.pExt)
419 if len(key) != 2 || p == len(t.str) || p == 0 {
420 return p, p, p, false
421 }
422 s := t.str
423
424 // Find the correct extension.
425 for p++; s[p] != 'u'; p++ {
426 if s[p] > 'u' {
427 p--
428 return p, p, p, false
429 }
430 if p = nextExtension(s, p); p == len(s) {
431 return len(s), len(s), len(s), false
432 }
433 }
434 // Proceed to the hyphen following the extension name.
435 p++
436
437 // curKey is the key currently being processed.
438 curKey := ""
439
440 // Iterate over keys until we get the end of a section.
441 for {
442 end = p
443 for p++; p < len(s) && s[p] != '-'; p++ {
444 }
445 n := p - end - 1
446 if n <= 2 && curKey == key {
447 if sep < end {
448 sep++
449 }
450 return start, sep, end, true
451 }
452 switch n {
453 case 0, // invalid string
454 1: // next extension
455 return end, end, end, true
456 case 2:
457 // next key
458 curKey = s[end+1 : p]
459 if curKey > key {
460 return end, end, end, true
461 }
462 start = end
463 sep = p
464 }
465 }
466}
467
468// ParseBase parses a 2- or 3-letter ISO 639 code.
469// It returns a ValueError if s is a well-formed but unknown language identifier
470// or another error if another error occurred.
471func ParseBase(s string) (l Language, err error) {
472 defer func() {
473 if recover() != nil {
474 l = 0
475 err = ErrSyntax
476 }
477 }()
478
479 if n := len(s); n < 2 || 3 < n {
480 return 0, ErrSyntax
481 }
482 var buf [3]byte
483 return getLangID(buf[:copy(buf[:], s)])
484}
485
486// ParseScript parses a 4-letter ISO 15924 code.
487// It returns a ValueError if s is a well-formed but unknown script identifier
488// or another error if another error occurred.
489func ParseScript(s string) (scr Script, err error) {
490 defer func() {
491 if recover() != nil {
492 scr = 0
493 err = ErrSyntax
494 }
495 }()
496
497 if len(s) != 4 {
498 return 0, ErrSyntax
499 }
500 var buf [4]byte
501 return getScriptID(script, buf[:copy(buf[:], s)])
502}
503
504// EncodeM49 returns the Region for the given UN M.49 code.
505// It returns an error if r is not a valid code.
506func EncodeM49(r int) (Region, error) {
507 return getRegionM49(r)
508}
509
510// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code.
511// It returns a ValueError if s is a well-formed but unknown region identifier
512// or another error if another error occurred.
513func ParseRegion(s string) (r Region, err error) {
514 defer func() {
515 if recover() != nil {
516 r = 0
517 err = ErrSyntax
518 }
519 }()
520
521 if n := len(s); n < 2 || 3 < n {
522 return 0, ErrSyntax
523 }
524 var buf [3]byte
525 return getRegionID(buf[:copy(buf[:], s)])
526}
527
528// IsCountry returns whether this region is a country or autonomous area. This
529// includes non-standard definitions from CLDR.
530func (r Region) IsCountry() bool {
531 if r == 0 || r.IsGroup() || r.IsPrivateUse() && r != _XK {
532 return false
533 }
534 return true
535}
536
537// IsGroup returns whether this region defines a collection of regions. This
538// includes non-standard definitions from CLDR.
539func (r Region) IsGroup() bool {
540 if r == 0 {
541 return false
542 }
543 return int(regionInclusion[r]) < len(regionContainment)
544}
545
546// Contains returns whether Region c is contained by Region r. It returns true
547// if c == r.
548func (r Region) Contains(c Region) bool {
549 if r == c {
550 return true
551 }
552 g := regionInclusion[r]
553 if g >= nRegionGroups {
554 return false
555 }
556 m := regionContainment[g]
557
558 d := regionInclusion[c]
559 b := regionInclusionBits[d]
560
561 // A contained country may belong to multiple disjoint groups. Matching any
562 // of these indicates containment. If the contained region is a group, it
563 // must strictly be a subset.
564 if d >= nRegionGroups {
565 return b&m != 0
566 }
567 return b&^m == 0
568}
569
570var errNoTLD = errors.New("language: region is not a valid ccTLD")
571
572// TLD returns the country code top-level domain (ccTLD). UK is returned for GB.
573// In all other cases it returns either the region itself or an error.
574//
575// This method may return an error for a region for which there exists a
576// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The
577// region will already be canonicalized it was obtained from a Tag that was
578// obtained using any of the default methods.
579func (r Region) TLD() (Region, error) {
580 // See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the
581 // difference between ISO 3166-1 and IANA ccTLD.
582 if r == _GB {
583 r = _UK
584 }
585 if (r.typ() & ccTLD) == 0 {
586 return 0, errNoTLD
587 }
588 return r, nil
589}
590
591// Canonicalize returns the region or a possible replacement if the region is
592// deprecated. It will not return a replacement for deprecated regions that
593// are split into multiple regions.
594func (r Region) Canonicalize() Region {
595 if cr := normRegion(r); cr != 0 {
596 return cr
597 }
598 return r
599}
600
601// Variant represents a registered variant of a language as defined by BCP 47.
602type Variant struct {
603 ID uint8
604 str string
605}
606
607// ParseVariant parses and returns a Variant. An error is returned if s is not
608// a valid variant.
609func ParseVariant(s string) (v Variant, err error) {
610 defer func() {
611 if recover() != nil {
612 v = Variant{}
613 err = ErrSyntax
614 }
615 }()
616
617 s = strings.ToLower(s)
618 if id, ok := variantIndex[s]; ok {
619 return Variant{id, s}, nil
620 }
621 return Variant{}, NewValueError([]byte(s))
622}
623
624// String returns the string representation of the variant.
625func (v Variant) String() string {
626 return v.str
627}
diff --git a/vendor/golang.org/x/text/internal/language/lookup.go b/vendor/golang.org/x/text/internal/language/lookup.go
new file mode 100644
index 0000000..231b4fb
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/lookup.go
@@ -0,0 +1,412 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7import (
8 "bytes"
9 "fmt"
10 "sort"
11 "strconv"
12
13 "golang.org/x/text/internal/tag"
14)
15
16// findIndex tries to find the given tag in idx and returns a standardized error
17// if it could not be found.
18func findIndex(idx tag.Index, key []byte, form string) (index int, err error) {
19 if !tag.FixCase(form, key) {
20 return 0, ErrSyntax
21 }
22 i := idx.Index(key)
23 if i == -1 {
24 return 0, NewValueError(key)
25 }
26 return i, nil
27}
28
29func searchUint(imap []uint16, key uint16) int {
30 return sort.Search(len(imap), func(i int) bool {
31 return imap[i] >= key
32 })
33}
34
35type Language uint16
36
37// getLangID returns the langID of s if s is a canonical subtag
38// or langUnknown if s is not a canonical subtag.
39func getLangID(s []byte) (Language, error) {
40 if len(s) == 2 {
41 return getLangISO2(s)
42 }
43 return getLangISO3(s)
44}
45
46// TODO language normalization as well as the AliasMaps could be moved to the
47// higher level package, but it is a bit tricky to separate the generation.
48
49func (id Language) Canonicalize() (Language, AliasType) {
50 return normLang(id)
51}
52
53// normLang returns the mapped langID of id according to mapping m.
54func normLang(id Language) (Language, AliasType) {
55 k := sort.Search(len(AliasMap), func(i int) bool {
56 return AliasMap[i].From >= uint16(id)
57 })
58 if k < len(AliasMap) && AliasMap[k].From == uint16(id) {
59 return Language(AliasMap[k].To), AliasTypes[k]
60 }
61 return id, AliasTypeUnknown
62}
63
64// getLangISO2 returns the langID for the given 2-letter ISO language code
65// or unknownLang if this does not exist.
66func getLangISO2(s []byte) (Language, error) {
67 if !tag.FixCase("zz", s) {
68 return 0, ErrSyntax
69 }
70 if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 {
71 return Language(i), nil
72 }
73 return 0, NewValueError(s)
74}
75
76const base = 'z' - 'a' + 1
77
78func strToInt(s []byte) uint {
79 v := uint(0)
80 for i := 0; i < len(s); i++ {
81 v *= base
82 v += uint(s[i] - 'a')
83 }
84 return v
85}
86
87// converts the given integer to the original ASCII string passed to strToInt.
88// len(s) must match the number of characters obtained.
89func intToStr(v uint, s []byte) {
90 for i := len(s) - 1; i >= 0; i-- {
91 s[i] = byte(v%base) + 'a'
92 v /= base
93 }
94}
95
96// getLangISO3 returns the langID for the given 3-letter ISO language code
97// or unknownLang if this does not exist.
98func getLangISO3(s []byte) (Language, error) {
99 if tag.FixCase("und", s) {
100 // first try to match canonical 3-letter entries
101 for i := lang.Index(s[:2]); i != -1; i = lang.Next(s[:2], i) {
102 if e := lang.Elem(i); e[3] == 0 && e[2] == s[2] {
103 // We treat "und" as special and always translate it to "unspecified".
104 // Note that ZZ and Zzzz are private use and are not treated as
105 // unspecified by default.
106 id := Language(i)
107 if id == nonCanonicalUnd {
108 return 0, nil
109 }
110 return id, nil
111 }
112 }
113 if i := altLangISO3.Index(s); i != -1 {
114 return Language(altLangIndex[altLangISO3.Elem(i)[3]]), nil
115 }
116 n := strToInt(s)
117 if langNoIndex[n/8]&(1<<(n%8)) != 0 {
118 return Language(n) + langNoIndexOffset, nil
119 }
120 // Check for non-canonical uses of ISO3.
121 for i := lang.Index(s[:1]); i != -1; i = lang.Next(s[:1], i) {
122 if e := lang.Elem(i); e[2] == s[1] && e[3] == s[2] {
123 return Language(i), nil
124 }
125 }
126 return 0, NewValueError(s)
127 }
128 return 0, ErrSyntax
129}
130
131// StringToBuf writes the string to b and returns the number of bytes
132// written. cap(b) must be >= 3.
133func (id Language) StringToBuf(b []byte) int {
134 if id >= langNoIndexOffset {
135 intToStr(uint(id)-langNoIndexOffset, b[:3])
136 return 3
137 } else if id == 0 {
138 return copy(b, "und")
139 }
140 l := lang[id<<2:]
141 if l[3] == 0 {
142 return copy(b, l[:3])
143 }
144 return copy(b, l[:2])
145}
146
147// String returns the BCP 47 representation of the langID.
148// Use b as variable name, instead of id, to ensure the variable
149// used is consistent with that of Base in which this type is embedded.
150func (b Language) String() string {
151 if b == 0 {
152 return "und"
153 } else if b >= langNoIndexOffset {
154 b -= langNoIndexOffset
155 buf := [3]byte{}
156 intToStr(uint(b), buf[:])
157 return string(buf[:])
158 }
159 l := lang.Elem(int(b))
160 if l[3] == 0 {
161 return l[:3]
162 }
163 return l[:2]
164}
165
166// ISO3 returns the ISO 639-3 language code.
167func (b Language) ISO3() string {
168 if b == 0 || b >= langNoIndexOffset {
169 return b.String()
170 }
171 l := lang.Elem(int(b))
172 if l[3] == 0 {
173 return l[:3]
174 } else if l[2] == 0 {
175 return altLangISO3.Elem(int(l[3]))[:3]
176 }
177 // This allocation will only happen for 3-letter ISO codes
178 // that are non-canonical BCP 47 language identifiers.
179 return l[0:1] + l[2:4]
180}
181
182// IsPrivateUse reports whether this language code is reserved for private use.
183func (b Language) IsPrivateUse() bool {
184 return langPrivateStart <= b && b <= langPrivateEnd
185}
186
187// SuppressScript returns the script marked as SuppressScript in the IANA
188// language tag repository, or 0 if there is no such script.
189func (b Language) SuppressScript() Script {
190 if b < langNoIndexOffset {
191 return Script(suppressScript[b])
192 }
193 return 0
194}
195
196type Region uint16
197
198// getRegionID returns the region id for s if s is a valid 2-letter region code
199// or unknownRegion.
200func getRegionID(s []byte) (Region, error) {
201 if len(s) == 3 {
202 if isAlpha(s[0]) {
203 return getRegionISO3(s)
204 }
205 if i, err := strconv.ParseUint(string(s), 10, 10); err == nil {
206 return getRegionM49(int(i))
207 }
208 }
209 return getRegionISO2(s)
210}
211
212// getRegionISO2 returns the regionID for the given 2-letter ISO country code
213// or unknownRegion if this does not exist.
214func getRegionISO2(s []byte) (Region, error) {
215 i, err := findIndex(regionISO, s, "ZZ")
216 if err != nil {
217 return 0, err
218 }
219 return Region(i) + isoRegionOffset, nil
220}
221
222// getRegionISO3 returns the regionID for the given 3-letter ISO country code
223// or unknownRegion if this does not exist.
224func getRegionISO3(s []byte) (Region, error) {
225 if tag.FixCase("ZZZ", s) {
226 for i := regionISO.Index(s[:1]); i != -1; i = regionISO.Next(s[:1], i) {
227 if e := regionISO.Elem(i); e[2] == s[1] && e[3] == s[2] {
228 return Region(i) + isoRegionOffset, nil
229 }
230 }
231 for i := 0; i < len(altRegionISO3); i += 3 {
232 if tag.Compare(altRegionISO3[i:i+3], s) == 0 {
233 return Region(altRegionIDs[i/3]), nil
234 }
235 }
236 return 0, NewValueError(s)
237 }
238 return 0, ErrSyntax
239}
240
241func getRegionM49(n int) (Region, error) {
242 if 0 < n && n <= 999 {
243 const (
244 searchBits = 7
245 regionBits = 9
246 regionMask = 1<<regionBits - 1
247 )
248 idx := n >> searchBits
249 buf := fromM49[m49Index[idx]:m49Index[idx+1]]
250 val := uint16(n) << regionBits // we rely on bits shifting out
251 i := sort.Search(len(buf), func(i int) bool {
252 return buf[i] >= val
253 })
254 if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val {
255 return Region(r & regionMask), nil
256 }
257 }
258 var e ValueError
259 fmt.Fprint(bytes.NewBuffer([]byte(e.v[:])), n)
260 return 0, e
261}
262
263// normRegion returns a region if r is deprecated or 0 otherwise.
264// TODO: consider supporting BYS (-> BLR), CSK (-> 200 or CZ), PHI (-> PHL) and AFI (-> DJ).
265// TODO: consider mapping split up regions to new most populous one (like CLDR).
266func normRegion(r Region) Region {
267 m := regionOldMap
268 k := sort.Search(len(m), func(i int) bool {
269 return m[i].From >= uint16(r)
270 })
271 if k < len(m) && m[k].From == uint16(r) {
272 return Region(m[k].To)
273 }
274 return 0
275}
276
277const (
278 iso3166UserAssigned = 1 << iota
279 ccTLD
280 bcp47Region
281)
282
283func (r Region) typ() byte {
284 return regionTypes[r]
285}
286
287// String returns the BCP 47 representation for the region.
288// It returns "ZZ" for an unspecified region.
289func (r Region) String() string {
290 if r < isoRegionOffset {
291 if r == 0 {
292 return "ZZ"
293 }
294 return fmt.Sprintf("%03d", r.M49())
295 }
296 r -= isoRegionOffset
297 return regionISO.Elem(int(r))[:2]
298}
299
300// ISO3 returns the 3-letter ISO code of r.
301// Note that not all regions have a 3-letter ISO code.
302// In such cases this method returns "ZZZ".
303func (r Region) ISO3() string {
304 if r < isoRegionOffset {
305 return "ZZZ"
306 }
307 r -= isoRegionOffset
308 reg := regionISO.Elem(int(r))
309 switch reg[2] {
310 case 0:
311 return altRegionISO3[reg[3]:][:3]
312 case ' ':
313 return "ZZZ"
314 }
315 return reg[0:1] + reg[2:4]
316}
317
318// M49 returns the UN M.49 encoding of r, or 0 if this encoding
319// is not defined for r.
320func (r Region) M49() int {
321 return int(m49[r])
322}
323
324// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This
325// may include private-use tags that are assigned by CLDR and used in this
326// implementation. So IsPrivateUse and IsCountry can be simultaneously true.
327func (r Region) IsPrivateUse() bool {
328 return r.typ()&iso3166UserAssigned != 0
329}
330
331type Script uint16
332
333// getScriptID returns the script id for string s. It assumes that s
334// is of the format [A-Z][a-z]{3}.
335func getScriptID(idx tag.Index, s []byte) (Script, error) {
336 i, err := findIndex(idx, s, "Zzzz")
337 return Script(i), err
338}
339
340// String returns the script code in title case.
341// It returns "Zzzz" for an unspecified script.
342func (s Script) String() string {
343 if s == 0 {
344 return "Zzzz"
345 }
346 return script.Elem(int(s))
347}
348
349// IsPrivateUse reports whether this script code is reserved for private use.
350func (s Script) IsPrivateUse() bool {
351 return _Qaaa <= s && s <= _Qabx
352}
353
354const (
355 maxAltTaglen = len("en-US-POSIX")
356 maxLen = maxAltTaglen
357)
358
359var (
360 // grandfatheredMap holds a mapping from legacy and grandfathered tags to
361 // their base language or index to more elaborate tag.
362 grandfatheredMap = map[[maxLen]byte]int16{
363 [maxLen]byte{'a', 'r', 't', '-', 'l', 'o', 'j', 'b', 'a', 'n'}: _jbo, // art-lojban
364 [maxLen]byte{'i', '-', 'a', 'm', 'i'}: _ami, // i-ami
365 [maxLen]byte{'i', '-', 'b', 'n', 'n'}: _bnn, // i-bnn
366 [maxLen]byte{'i', '-', 'h', 'a', 'k'}: _hak, // i-hak
367 [maxLen]byte{'i', '-', 'k', 'l', 'i', 'n', 'g', 'o', 'n'}: _tlh, // i-klingon
368 [maxLen]byte{'i', '-', 'l', 'u', 'x'}: _lb, // i-lux
369 [maxLen]byte{'i', '-', 'n', 'a', 'v', 'a', 'j', 'o'}: _nv, // i-navajo
370 [maxLen]byte{'i', '-', 'p', 'w', 'n'}: _pwn, // i-pwn
371 [maxLen]byte{'i', '-', 't', 'a', 'o'}: _tao, // i-tao
372 [maxLen]byte{'i', '-', 't', 'a', 'y'}: _tay, // i-tay
373 [maxLen]byte{'i', '-', 't', 's', 'u'}: _tsu, // i-tsu
374 [maxLen]byte{'n', 'o', '-', 'b', 'o', 'k'}: _nb, // no-bok
375 [maxLen]byte{'n', 'o', '-', 'n', 'y', 'n'}: _nn, // no-nyn
376 [maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'f', 'r'}: _sfb, // sgn-BE-FR
377 [maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'n', 'l'}: _vgt, // sgn-BE-NL
378 [maxLen]byte{'s', 'g', 'n', '-', 'c', 'h', '-', 'd', 'e'}: _sgg, // sgn-CH-DE
379 [maxLen]byte{'z', 'h', '-', 'g', 'u', 'o', 'y', 'u'}: _cmn, // zh-guoyu
380 [maxLen]byte{'z', 'h', '-', 'h', 'a', 'k', 'k', 'a'}: _hak, // zh-hakka
381 [maxLen]byte{'z', 'h', '-', 'm', 'i', 'n', '-', 'n', 'a', 'n'}: _nan, // zh-min-nan
382 [maxLen]byte{'z', 'h', '-', 'x', 'i', 'a', 'n', 'g'}: _hsn, // zh-xiang
383
384 // Grandfathered tags with no modern replacement will be converted as
385 // follows:
386 [maxLen]byte{'c', 'e', 'l', '-', 'g', 'a', 'u', 'l', 'i', 's', 'h'}: -1, // cel-gaulish
387 [maxLen]byte{'e', 'n', '-', 'g', 'b', '-', 'o', 'e', 'd'}: -2, // en-GB-oed
388 [maxLen]byte{'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'}: -3, // i-default
389 [maxLen]byte{'i', '-', 'e', 'n', 'o', 'c', 'h', 'i', 'a', 'n'}: -4, // i-enochian
390 [maxLen]byte{'i', '-', 'm', 'i', 'n', 'g', 'o'}: -5, // i-mingo
391 [maxLen]byte{'z', 'h', '-', 'm', 'i', 'n'}: -6, // zh-min
392
393 // CLDR-specific tag.
394 [maxLen]byte{'r', 'o', 'o', 't'}: 0, // root
395 [maxLen]byte{'e', 'n', '-', 'u', 's', '-', 'p', 'o', 's', 'i', 'x'}: -7, // en_US_POSIX"
396 }
397
398 altTagIndex = [...]uint8{0, 17, 31, 45, 61, 74, 86, 102}
399
400 altTags = "xtg-x-cel-gaulishen-GB-oxendicten-x-i-defaultund-x-i-enochiansee-x-i-mingonan-x-zh-minen-US-u-va-posix"
401)
402
403func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) {
404 if v, ok := grandfatheredMap[s]; ok {
405 if v < 0 {
406 return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true
407 }
408 t.LangID = Language(v)
409 return t, true
410 }
411 return t, false
412}
diff --git a/vendor/golang.org/x/text/internal/language/match.go b/vendor/golang.org/x/text/internal/language/match.go
new file mode 100644
index 0000000..75a2dbc
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/match.go
@@ -0,0 +1,226 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7import "errors"
8
9type scriptRegionFlags uint8
10
11const (
12 isList = 1 << iota
13 scriptInFrom
14 regionInFrom
15)
16
17func (t *Tag) setUndefinedLang(id Language) {
18 if t.LangID == 0 {
19 t.LangID = id
20 }
21}
22
23func (t *Tag) setUndefinedScript(id Script) {
24 if t.ScriptID == 0 {
25 t.ScriptID = id
26 }
27}
28
29func (t *Tag) setUndefinedRegion(id Region) {
30 if t.RegionID == 0 || t.RegionID.Contains(id) {
31 t.RegionID = id
32 }
33}
34
35// ErrMissingLikelyTagsData indicates no information was available
36// to compute likely values of missing tags.
37var ErrMissingLikelyTagsData = errors.New("missing likely tags data")
38
39// addLikelySubtags sets subtags to their most likely value, given the locale.
40// In most cases this means setting fields for unknown values, but in some
41// cases it may alter a value. It returns an ErrMissingLikelyTagsData error
42// if the given locale cannot be expanded.
43func (t Tag) addLikelySubtags() (Tag, error) {
44 id, err := addTags(t)
45 if err != nil {
46 return t, err
47 } else if id.equalTags(t) {
48 return t, nil
49 }
50 id.RemakeString()
51 return id, nil
52}
53
54// specializeRegion attempts to specialize a group region.
55func specializeRegion(t *Tag) bool {
56 if i := regionInclusion[t.RegionID]; i < nRegionGroups {
57 x := likelyRegionGroup[i]
58 if Language(x.lang) == t.LangID && Script(x.script) == t.ScriptID {
59 t.RegionID = Region(x.region)
60 }
61 return true
62 }
63 return false
64}
65
66// Maximize returns a new tag with missing tags filled in.
67func (t Tag) Maximize() (Tag, error) {
68 return addTags(t)
69}
70
71func addTags(t Tag) (Tag, error) {
72 // We leave private use identifiers alone.
73 if t.IsPrivateUse() {
74 return t, nil
75 }
76 if t.ScriptID != 0 && t.RegionID != 0 {
77 if t.LangID != 0 {
78 // already fully specified
79 specializeRegion(&t)
80 return t, nil
81 }
82 // Search matches for und-script-region. Note that for these cases
83 // region will never be a group so there is no need to check for this.
84 list := likelyRegion[t.RegionID : t.RegionID+1]
85 if x := list[0]; x.flags&isList != 0 {
86 list = likelyRegionList[x.lang : x.lang+uint16(x.script)]
87 }
88 for _, x := range list {
89 // Deviating from the spec. See match_test.go for details.
90 if Script(x.script) == t.ScriptID {
91 t.setUndefinedLang(Language(x.lang))
92 return t, nil
93 }
94 }
95 }
96 if t.LangID != 0 {
97 // Search matches for lang-script and lang-region, where lang != und.
98 if t.LangID < langNoIndexOffset {
99 x := likelyLang[t.LangID]
100 if x.flags&isList != 0 {
101 list := likelyLangList[x.region : x.region+uint16(x.script)]
102 if t.ScriptID != 0 {
103 for _, x := range list {
104 if Script(x.script) == t.ScriptID && x.flags&scriptInFrom != 0 {
105 t.setUndefinedRegion(Region(x.region))
106 return t, nil
107 }
108 }
109 } else if t.RegionID != 0 {
110 count := 0
111 goodScript := true
112 tt := t
113 for _, x := range list {
114 // We visit all entries for which the script was not
115 // defined, including the ones where the region was not
116 // defined. This allows for proper disambiguation within
117 // regions.
118 if x.flags&scriptInFrom == 0 && t.RegionID.Contains(Region(x.region)) {
119 tt.RegionID = Region(x.region)
120 tt.setUndefinedScript(Script(x.script))
121 goodScript = goodScript && tt.ScriptID == Script(x.script)
122 count++
123 }
124 }
125 if count == 1 {
126 return tt, nil
127 }
128 // Even if we fail to find a unique Region, we might have
129 // an unambiguous script.
130 if goodScript {
131 t.ScriptID = tt.ScriptID
132 }
133 }
134 }
135 }
136 } else {
137 // Search matches for und-script.
138 if t.ScriptID != 0 {
139 x := likelyScript[t.ScriptID]
140 if x.region != 0 {
141 t.setUndefinedRegion(Region(x.region))
142 t.setUndefinedLang(Language(x.lang))
143 return t, nil
144 }
145 }
146 // Search matches for und-region. If und-script-region exists, it would
147 // have been found earlier.
148 if t.RegionID != 0 {
149 if i := regionInclusion[t.RegionID]; i < nRegionGroups {
150 x := likelyRegionGroup[i]
151 if x.region != 0 {
152 t.setUndefinedLang(Language(x.lang))
153 t.setUndefinedScript(Script(x.script))
154 t.RegionID = Region(x.region)
155 }
156 } else {
157 x := likelyRegion[t.RegionID]
158 if x.flags&isList != 0 {
159 x = likelyRegionList[x.lang]
160 }
161 if x.script != 0 && x.flags != scriptInFrom {
162 t.setUndefinedLang(Language(x.lang))
163 t.setUndefinedScript(Script(x.script))
164 return t, nil
165 }
166 }
167 }
168 }
169
170 // Search matches for lang.
171 if t.LangID < langNoIndexOffset {
172 x := likelyLang[t.LangID]
173 if x.flags&isList != 0 {
174 x = likelyLangList[x.region]
175 }
176 if x.region != 0 {
177 t.setUndefinedScript(Script(x.script))
178 t.setUndefinedRegion(Region(x.region))
179 }
180 specializeRegion(&t)
181 if t.LangID == 0 {
182 t.LangID = _en // default language
183 }
184 return t, nil
185 }
186 return t, ErrMissingLikelyTagsData
187}
188
189func (t *Tag) setTagsFrom(id Tag) {
190 t.LangID = id.LangID
191 t.ScriptID = id.ScriptID
192 t.RegionID = id.RegionID
193}
194
195// minimize removes the region or script subtags from t such that
196// t.addLikelySubtags() == t.minimize().addLikelySubtags().
197func (t Tag) minimize() (Tag, error) {
198 t, err := minimizeTags(t)
199 if err != nil {
200 return t, err
201 }
202 t.RemakeString()
203 return t, nil
204}
205
206// minimizeTags mimics the behavior of the ICU 51 C implementation.
207func minimizeTags(t Tag) (Tag, error) {
208 if t.equalTags(Und) {
209 return t, nil
210 }
211 max, err := addTags(t)
212 if err != nil {
213 return t, err
214 }
215 for _, id := range [...]Tag{
216 {LangID: t.LangID},
217 {LangID: t.LangID, RegionID: t.RegionID},
218 {LangID: t.LangID, ScriptID: t.ScriptID},
219 } {
220 if x, err := addTags(id); err == nil && max.equalTags(x) {
221 t.setTagsFrom(id)
222 break
223 }
224 }
225 return t, nil
226}
diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go
new file mode 100644
index 0000000..aad1e0a
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/parse.go
@@ -0,0 +1,608 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7import (
8 "bytes"
9 "errors"
10 "fmt"
11 "sort"
12
13 "golang.org/x/text/internal/tag"
14)
15
16// isAlpha returns true if the byte is not a digit.
17// b must be an ASCII letter or digit.
18func isAlpha(b byte) bool {
19 return b > '9'
20}
21
22// isAlphaNum returns true if the string contains only ASCII letters or digits.
23func isAlphaNum(s []byte) bool {
24 for _, c := range s {
25 if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') {
26 return false
27 }
28 }
29 return true
30}
31
32// ErrSyntax is returned by any of the parsing functions when the
33// input is not well-formed, according to BCP 47.
34// TODO: return the position at which the syntax error occurred?
35var ErrSyntax = errors.New("language: tag is not well-formed")
36
37// ErrDuplicateKey is returned when a tag contains the same key twice with
38// different values in the -u section.
39var ErrDuplicateKey = errors.New("language: different values for same key in -u extension")
40
41// ValueError is returned by any of the parsing functions when the
42// input is well-formed but the respective subtag is not recognized
43// as a valid value.
44type ValueError struct {
45 v [8]byte
46}
47
48// NewValueError creates a new ValueError.
49func NewValueError(tag []byte) ValueError {
50 var e ValueError
51 copy(e.v[:], tag)
52 return e
53}
54
55func (e ValueError) tag() []byte {
56 n := bytes.IndexByte(e.v[:], 0)
57 if n == -1 {
58 n = 8
59 }
60 return e.v[:n]
61}
62
63// Error implements the error interface.
64func (e ValueError) Error() string {
65 return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag())
66}
67
68// Subtag returns the subtag for which the error occurred.
69func (e ValueError) Subtag() string {
70 return string(e.tag())
71}
72
73// scanner is used to scan BCP 47 tokens, which are separated by _ or -.
74type scanner struct {
75 b []byte
76 bytes [max99thPercentileSize]byte
77 token []byte
78 start int // start position of the current token
79 end int // end position of the current token
80 next int // next point for scan
81 err error
82 done bool
83}
84
85func makeScannerString(s string) scanner {
86 scan := scanner{}
87 if len(s) <= len(scan.bytes) {
88 scan.b = scan.bytes[:copy(scan.bytes[:], s)]
89 } else {
90 scan.b = []byte(s)
91 }
92 scan.init()
93 return scan
94}
95
96// makeScanner returns a scanner using b as the input buffer.
97// b is not copied and may be modified by the scanner routines.
98func makeScanner(b []byte) scanner {
99 scan := scanner{b: b}
100 scan.init()
101 return scan
102}
103
104func (s *scanner) init() {
105 for i, c := range s.b {
106 if c == '_' {
107 s.b[i] = '-'
108 }
109 }
110 s.scan()
111}
112
113// restToLower converts the string between start and end to lower case.
114func (s *scanner) toLower(start, end int) {
115 for i := start; i < end; i++ {
116 c := s.b[i]
117 if 'A' <= c && c <= 'Z' {
118 s.b[i] += 'a' - 'A'
119 }
120 }
121}
122
123func (s *scanner) setError(e error) {
124 if s.err == nil || (e == ErrSyntax && s.err != ErrSyntax) {
125 s.err = e
126 }
127}
128
129// resizeRange shrinks or grows the array at position oldStart such that
130// a new string of size newSize can fit between oldStart and oldEnd.
131// Sets the scan point to after the resized range.
132func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) {
133 s.start = oldStart
134 if end := oldStart + newSize; end != oldEnd {
135 diff := end - oldEnd
136 var b []byte
137 if n := len(s.b) + diff; n > cap(s.b) {
138 b = make([]byte, n)
139 copy(b, s.b[:oldStart])
140 } else {
141 b = s.b[:n]
142 }
143 copy(b[end:], s.b[oldEnd:])
144 s.b = b
145 s.next = end + (s.next - s.end)
146 s.end = end
147 }
148}
149
150// replace replaces the current token with repl.
151func (s *scanner) replace(repl string) {
152 s.resizeRange(s.start, s.end, len(repl))
153 copy(s.b[s.start:], repl)
154}
155
156// gobble removes the current token from the input.
157// Caller must call scan after calling gobble.
158func (s *scanner) gobble(e error) {
159 s.setError(e)
160 if s.start == 0 {
161 s.b = s.b[:+copy(s.b, s.b[s.next:])]
162 s.end = 0
163 } else {
164 s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])]
165 s.end = s.start - 1
166 }
167 s.next = s.start
168}
169
170// deleteRange removes the given range from s.b before the current token.
171func (s *scanner) deleteRange(start, end int) {
172 s.b = s.b[:start+copy(s.b[start:], s.b[end:])]
173 diff := end - start
174 s.next -= diff
175 s.start -= diff
176 s.end -= diff
177}
178
179// scan parses the next token of a BCP 47 string. Tokens that are larger
180// than 8 characters or include non-alphanumeric characters result in an error
181// and are gobbled and removed from the output.
182// It returns the end position of the last token consumed.
183func (s *scanner) scan() (end int) {
184 end = s.end
185 s.token = nil
186 for s.start = s.next; s.next < len(s.b); {
187 i := bytes.IndexByte(s.b[s.next:], '-')
188 if i == -1 {
189 s.end = len(s.b)
190 s.next = len(s.b)
191 i = s.end - s.start
192 } else {
193 s.end = s.next + i
194 s.next = s.end + 1
195 }
196 token := s.b[s.start:s.end]
197 if i < 1 || i > 8 || !isAlphaNum(token) {
198 s.gobble(ErrSyntax)
199 continue
200 }
201 s.token = token
202 return end
203 }
204 if n := len(s.b); n > 0 && s.b[n-1] == '-' {
205 s.setError(ErrSyntax)
206 s.b = s.b[:len(s.b)-1]
207 }
208 s.done = true
209 return end
210}
211
212// acceptMinSize parses multiple tokens of the given size or greater.
213// It returns the end position of the last token consumed.
214func (s *scanner) acceptMinSize(min int) (end int) {
215 end = s.end
216 s.scan()
217 for ; len(s.token) >= min; s.scan() {
218 end = s.end
219 }
220 return end
221}
222
223// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
224// failed it returns an error and any part of the tag that could be parsed.
225// If parsing succeeded but an unknown value was found, it returns
226// ValueError. The Tag returned in this case is just stripped of the unknown
227// value. All other values are preserved. It accepts tags in the BCP 47 format
228// and extensions to this standard defined in
229// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
230func Parse(s string) (t Tag, err error) {
231 // TODO: consider supporting old-style locale key-value pairs.
232 if s == "" {
233 return Und, ErrSyntax
234 }
235 defer func() {
236 if recover() != nil {
237 t = Und
238 err = ErrSyntax
239 return
240 }
241 }()
242 if len(s) <= maxAltTaglen {
243 b := [maxAltTaglen]byte{}
244 for i, c := range s {
245 // Generating invalid UTF-8 is okay as it won't match.
246 if 'A' <= c && c <= 'Z' {
247 c += 'a' - 'A'
248 } else if c == '_' {
249 c = '-'
250 }
251 b[i] = byte(c)
252 }
253 if t, ok := grandfathered(b); ok {
254 return t, nil
255 }
256 }
257 scan := makeScannerString(s)
258 return parse(&scan, s)
259}
260
261func parse(scan *scanner, s string) (t Tag, err error) {
262 t = Und
263 var end int
264 if n := len(scan.token); n <= 1 {
265 scan.toLower(0, len(scan.b))
266 if n == 0 || scan.token[0] != 'x' {
267 return t, ErrSyntax
268 }
269 end = parseExtensions(scan)
270 } else if n >= 4 {
271 return Und, ErrSyntax
272 } else { // the usual case
273 t, end = parseTag(scan, true)
274 if n := len(scan.token); n == 1 {
275 t.pExt = uint16(end)
276 end = parseExtensions(scan)
277 } else if end < len(scan.b) {
278 scan.setError(ErrSyntax)
279 scan.b = scan.b[:end]
280 }
281 }
282 if int(t.pVariant) < len(scan.b) {
283 if end < len(s) {
284 s = s[:end]
285 }
286 if len(s) > 0 && tag.Compare(s, scan.b) == 0 {
287 t.str = s
288 } else {
289 t.str = string(scan.b)
290 }
291 } else {
292 t.pVariant, t.pExt = 0, 0
293 }
294 return t, scan.err
295}
296
297// parseTag parses language, script, region and variants.
298// It returns a Tag and the end position in the input that was parsed.
299// If doNorm is true, then <lang>-<extlang> will be normalized to <extlang>.
300func parseTag(scan *scanner, doNorm bool) (t Tag, end int) {
301 var e error
302 // TODO: set an error if an unknown lang, script or region is encountered.
303 t.LangID, e = getLangID(scan.token)
304 scan.setError(e)
305 scan.replace(t.LangID.String())
306 langStart := scan.start
307 end = scan.scan()
308 for len(scan.token) == 3 && isAlpha(scan.token[0]) {
309 // From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent
310 // to a tag of the form <extlang>.
311 if doNorm {
312 lang, e := getLangID(scan.token)
313 if lang != 0 {
314 t.LangID = lang
315 langStr := lang.String()
316 copy(scan.b[langStart:], langStr)
317 scan.b[langStart+len(langStr)] = '-'
318 scan.start = langStart + len(langStr) + 1
319 }
320 scan.gobble(e)
321 }
322 end = scan.scan()
323 }
324 if len(scan.token) == 4 && isAlpha(scan.token[0]) {
325 t.ScriptID, e = getScriptID(script, scan.token)
326 if t.ScriptID == 0 {
327 scan.gobble(e)
328 }
329 end = scan.scan()
330 }
331 if n := len(scan.token); n >= 2 && n <= 3 {
332 t.RegionID, e = getRegionID(scan.token)
333 if t.RegionID == 0 {
334 scan.gobble(e)
335 } else {
336 scan.replace(t.RegionID.String())
337 }
338 end = scan.scan()
339 }
340 scan.toLower(scan.start, len(scan.b))
341 t.pVariant = byte(end)
342 end = parseVariants(scan, end, t)
343 t.pExt = uint16(end)
344 return t, end
345}
346
347var separator = []byte{'-'}
348
349// parseVariants scans tokens as long as each token is a valid variant string.
350// Duplicate variants are removed.
351func parseVariants(scan *scanner, end int, t Tag) int {
352 start := scan.start
353 varIDBuf := [4]uint8{}
354 variantBuf := [4][]byte{}
355 varID := varIDBuf[:0]
356 variant := variantBuf[:0]
357 last := -1
358 needSort := false
359 for ; len(scan.token) >= 4; scan.scan() {
360 // TODO: measure the impact of needing this conversion and redesign
361 // the data structure if there is an issue.
362 v, ok := variantIndex[string(scan.token)]
363 if !ok {
364 // unknown variant
365 // TODO: allow user-defined variants?
366 scan.gobble(NewValueError(scan.token))
367 continue
368 }
369 varID = append(varID, v)
370 variant = append(variant, scan.token)
371 if !needSort {
372 if last < int(v) {
373 last = int(v)
374 } else {
375 needSort = true
376 // There is no legal combinations of more than 7 variants
377 // (and this is by no means a useful sequence).
378 const maxVariants = 8
379 if len(varID) > maxVariants {
380 break
381 }
382 }
383 }
384 end = scan.end
385 }
386 if needSort {
387 sort.Sort(variantsSort{varID, variant})
388 k, l := 0, -1
389 for i, v := range varID {
390 w := int(v)
391 if l == w {
392 // Remove duplicates.
393 continue
394 }
395 varID[k] = varID[i]
396 variant[k] = variant[i]
397 k++
398 l = w
399 }
400 if str := bytes.Join(variant[:k], separator); len(str) == 0 {
401 end = start - 1
402 } else {
403 scan.resizeRange(start, end, len(str))
404 copy(scan.b[scan.start:], str)
405 end = scan.end
406 }
407 }
408 return end
409}
410
411type variantsSort struct {
412 i []uint8
413 v [][]byte
414}
415
416func (s variantsSort) Len() int {
417 return len(s.i)
418}
419
420func (s variantsSort) Swap(i, j int) {
421 s.i[i], s.i[j] = s.i[j], s.i[i]
422 s.v[i], s.v[j] = s.v[j], s.v[i]
423}
424
425func (s variantsSort) Less(i, j int) bool {
426 return s.i[i] < s.i[j]
427}
428
429type bytesSort struct {
430 b [][]byte
431 n int // first n bytes to compare
432}
433
434func (b bytesSort) Len() int {
435 return len(b.b)
436}
437
438func (b bytesSort) Swap(i, j int) {
439 b.b[i], b.b[j] = b.b[j], b.b[i]
440}
441
442func (b bytesSort) Less(i, j int) bool {
443 for k := 0; k < b.n; k++ {
444 if b.b[i][k] == b.b[j][k] {
445 continue
446 }
447 return b.b[i][k] < b.b[j][k]
448 }
449 return false
450}
451
452// parseExtensions parses and normalizes the extensions in the buffer.
453// It returns the last position of scan.b that is part of any extension.
454// It also trims scan.b to remove excess parts accordingly.
455func parseExtensions(scan *scanner) int {
456 start := scan.start
457 exts := [][]byte{}
458 private := []byte{}
459 end := scan.end
460 for len(scan.token) == 1 {
461 extStart := scan.start
462 ext := scan.token[0]
463 end = parseExtension(scan)
464 extension := scan.b[extStart:end]
465 if len(extension) < 3 || (ext != 'x' && len(extension) < 4) {
466 scan.setError(ErrSyntax)
467 end = extStart
468 continue
469 } else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) {
470 scan.b = scan.b[:end]
471 return end
472 } else if ext == 'x' {
473 private = extension
474 break
475 }
476 exts = append(exts, extension)
477 }
478 sort.Sort(bytesSort{exts, 1})
479 if len(private) > 0 {
480 exts = append(exts, private)
481 }
482 scan.b = scan.b[:start]
483 if len(exts) > 0 {
484 scan.b = append(scan.b, bytes.Join(exts, separator)...)
485 } else if start > 0 {
486 // Strip trailing '-'.
487 scan.b = scan.b[:start-1]
488 }
489 return end
490}
491
492// parseExtension parses a single extension and returns the position of
493// the extension end.
494func parseExtension(scan *scanner) int {
495 start, end := scan.start, scan.end
496 switch scan.token[0] {
497 case 'u': // https://www.ietf.org/rfc/rfc6067.txt
498 attrStart := end
499 scan.scan()
500 for last := []byte{}; len(scan.token) > 2; scan.scan() {
501 if bytes.Compare(scan.token, last) != -1 {
502 // Attributes are unsorted. Start over from scratch.
503 p := attrStart + 1
504 scan.next = p
505 attrs := [][]byte{}
506 for scan.scan(); len(scan.token) > 2; scan.scan() {
507 attrs = append(attrs, scan.token)
508 end = scan.end
509 }
510 sort.Sort(bytesSort{attrs, 3})
511 copy(scan.b[p:], bytes.Join(attrs, separator))
512 break
513 }
514 last = scan.token
515 end = scan.end
516 }
517 // Scan key-type sequences. A key is of length 2 and may be followed
518 // by 0 or more "type" subtags from 3 to the maximum of 8 letters.
519 var last, key []byte
520 for attrEnd := end; len(scan.token) == 2; last = key {
521 key = scan.token
522 end = scan.end
523 for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() {
524 end = scan.end
525 }
526 // TODO: check key value validity
527 if bytes.Compare(key, last) != 1 || scan.err != nil {
528 // We have an invalid key or the keys are not sorted.
529 // Start scanning keys from scratch and reorder.
530 p := attrEnd + 1
531 scan.next = p
532 keys := [][]byte{}
533 for scan.scan(); len(scan.token) == 2; {
534 keyStart := scan.start
535 end = scan.end
536 for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() {
537 end = scan.end
538 }
539 keys = append(keys, scan.b[keyStart:end])
540 }
541 sort.Stable(bytesSort{keys, 2})
542 if n := len(keys); n > 0 {
543 k := 0
544 for i := 1; i < n; i++ {
545 if !bytes.Equal(keys[k][:2], keys[i][:2]) {
546 k++
547 keys[k] = keys[i]
548 } else if !bytes.Equal(keys[k], keys[i]) {
549 scan.setError(ErrDuplicateKey)
550 }
551 }
552 keys = keys[:k+1]
553 }
554 reordered := bytes.Join(keys, separator)
555 if e := p + len(reordered); e < end {
556 scan.deleteRange(e, end)
557 end = e
558 }
559 copy(scan.b[p:], reordered)
560 break
561 }
562 }
563 case 't': // https://www.ietf.org/rfc/rfc6497.txt
564 scan.scan()
565 if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) {
566 _, end = parseTag(scan, false)
567 scan.toLower(start, end)
568 }
569 for len(scan.token) == 2 && !isAlpha(scan.token[1]) {
570 end = scan.acceptMinSize(3)
571 }
572 case 'x':
573 end = scan.acceptMinSize(1)
574 default:
575 end = scan.acceptMinSize(2)
576 }
577 return end
578}
579
580// getExtension returns the name, body and end position of the extension.
581func getExtension(s string, p int) (end int, ext string) {
582 if s[p] == '-' {
583 p++
584 }
585 if s[p] == 'x' {
586 return len(s), s[p:]
587 }
588 end = nextExtension(s, p)
589 return end, s[p:end]
590}
591
592// nextExtension finds the next extension within the string, searching
593// for the -<char>- pattern from position p.
594// In the fast majority of cases, language tags will have at most
595// one extension and extensions tend to be small.
596func nextExtension(s string, p int) int {
597 for n := len(s) - 3; p < n; {
598 if s[p] == '-' {
599 if s[p+2] == '-' {
600 return p
601 }
602 p += 3
603 } else {
604 p++
605 }
606 }
607 return len(s)
608}
diff --git a/vendor/golang.org/x/text/internal/language/tables.go b/vendor/golang.org/x/text/internal/language/tables.go
new file mode 100644
index 0000000..14167e7
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/tables.go
@@ -0,0 +1,3494 @@
1// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
2
3package language
4
5import "golang.org/x/text/internal/tag"
6
7// CLDRVersion is the CLDR version from which the tables in this package are derived.
8const CLDRVersion = "32"
9
10const NumLanguages = 8798
11
12const NumScripts = 261
13
14const NumRegions = 358
15
16type FromTo struct {
17 From uint16
18 To uint16
19}
20
21const nonCanonicalUnd = 1201
22const (
23 _af = 22
24 _am = 39
25 _ar = 58
26 _az = 88
27 _bg = 126
28 _bn = 165
29 _ca = 215
30 _cs = 250
31 _da = 257
32 _de = 269
33 _el = 310
34 _en = 313
35 _es = 318
36 _et = 320
37 _fa = 328
38 _fi = 337
39 _fil = 339
40 _fr = 350
41 _gu = 420
42 _he = 444
43 _hi = 446
44 _hr = 465
45 _hu = 469
46 _hy = 471
47 _id = 481
48 _is = 504
49 _it = 505
50 _ja = 512
51 _ka = 528
52 _kk = 578
53 _km = 586
54 _kn = 593
55 _ko = 596
56 _ky = 650
57 _lo = 696
58 _lt = 704
59 _lv = 711
60 _mk = 767
61 _ml = 772
62 _mn = 779
63 _mo = 784
64 _mr = 795
65 _ms = 799
66 _mul = 806
67 _my = 817
68 _nb = 839
69 _ne = 849
70 _nl = 871
71 _no = 879
72 _pa = 925
73 _pl = 947
74 _pt = 960
75 _ro = 988
76 _ru = 994
77 _sh = 1031
78 _si = 1036
79 _sk = 1042
80 _sl = 1046
81 _sq = 1073
82 _sr = 1074
83 _sv = 1092
84 _sw = 1093
85 _ta = 1104
86 _te = 1121
87 _th = 1131
88 _tl = 1146
89 _tn = 1152
90 _tr = 1162
91 _uk = 1198
92 _ur = 1204
93 _uz = 1212
94 _vi = 1219
95 _zh = 1321
96 _zu = 1327
97 _jbo = 515
98 _ami = 1650
99 _bnn = 2357
100 _hak = 438
101 _tlh = 14467
102 _lb = 661
103 _nv = 899
104 _pwn = 12055
105 _tao = 14188
106 _tay = 14198
107 _tsu = 14662
108 _nn = 874
109 _sfb = 13629
110 _vgt = 15701
111 _sgg = 13660
112 _cmn = 3007
113 _nan = 835
114 _hsn = 467
115)
116
117const langPrivateStart = 0x2f72
118
119const langPrivateEnd = 0x3179
120
121// lang holds an alphabetically sorted list of ISO-639 language identifiers.
122// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
123// For 2-byte language identifiers, the two successive bytes have the following meaning:
124// - if the first letter of the 2- and 3-letter ISO codes are the same:
125// the second and third letter of the 3-letter ISO code.
126// - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
127//
128// For 3-byte language identifiers the 4th byte is 0.
129const lang tag.Index = "" + // Size: 5324 bytes
130 "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abq\x00abr\x00abt\x00aby\x00a" +
131 "cd\x00ace\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey" +
132 "\x00affragc\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00a" +
133 "jg\x00akkaakk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00am" +
134 "p\x00anrganc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00" +
135 "ape\x00apr\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars" +
136 "\x00ary\x00arz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00a" +
137 "tj\x00auy\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx" +
138 "\x00ayymayb\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00" +
139 "bba\x00bbb\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bc" +
140 "m\x00bcn\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00" +
141 "bet\x00bew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn" +
142 "\x00bgx\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib" +
143 "\x00big\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn" +
144 "\x00bjo\x00bjr\x00bjt\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt" +
145 "\x00bmambmh\x00bmk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00" +
146 "bom\x00bon\x00bpy\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx" +
147 "\x00brz\x00bsosbsj\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00b" +
148 "uc\x00bud\x00bug\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr" +
149 "\x00bxh\x00bye\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf" +
150 "\x00bzh\x00bzw\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg" +
151 "\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00c" +
152 "kl\x00cko\x00cky\x00cla\x00cme\x00cmg\x00cooscop\x00cps\x00crrecrh\x00cr" +
153 "j\x00crk\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymda" +
154 "andad\x00daf\x00dag\x00dah\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00" +
155 "ddn\x00deeuded\x00den\x00dga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia" +
156 "\x00dje\x00dnj\x00dob\x00doi\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm" +
157 "\x00dtp\x00dts\x00dty\x00dua\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00d" +
158 "yo\x00dyu\x00dzzodzg\x00ebu\x00eeweefi\x00egl\x00egy\x00eka\x00eky\x00el" +
159 "llema\x00emi\x00enngenn\x00enq\x00eopoeri\x00es\x00\x05esu\x00etstetr" +
160 "\x00ett\x00etu\x00etx\x00euusewo\x00ext\x00faasfaa\x00fab\x00fag\x00fai" +
161 "\x00fan\x00ffulffi\x00ffm\x00fiinfia\x00fil\x00fit\x00fjijflr\x00fmp\x00" +
162 "foaofod\x00fon\x00for\x00fpe\x00fqs\x00frrafrc\x00frp\x00frr\x00frs\x00f" +
163 "ub\x00fud\x00fue\x00fuf\x00fuh\x00fuq\x00fur\x00fuv\x00fuy\x00fvr\x00fyr" +
164 "ygalegaa\x00gaf\x00gag\x00gah\x00gaj\x00gam\x00gan\x00gaw\x00gay\x00gba" +
165 "\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdlagde\x00gdn\x00gdr\x00geb\x00g" +
166 "ej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gil\x00gim\x00gjk\x00gjn\x00gju" +
167 "\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00gnrngnd\x00gng\x00god\x00gof" +
168 "\x00goi\x00gom\x00gon\x00gor\x00gos\x00got\x00grb\x00grc\x00grt\x00grw" +
169 "\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00gux\x00guz\x00gvlvgvf" +
170 "\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauhag\x00hak\x00ham\x00h" +
171 "aw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif\x00hig\x00hih\x00hi" +
172 "l\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homo" +
173 "hoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui\x00hyyehzerianaian" +
174 "\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd\x00idi\x00idu\x00i" +
175 "eleife\x00igboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw\x00ikx\x00i" +
176 "lo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00\x03iwm\x00i" +
177 "ws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00jgk\x00jgo" +
178 "\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatkaa\x00kab" +
179 "\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp\x00kbq" +
180 "\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl\x00kdt" +
181 "\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00kgp\x00k" +
182 "ha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij\x00kiu" +
183 "\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klalkln\x00" +
184 "klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw\x00knank" +
185 "nf\x00knp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" +
186 "\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" +
187 "rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" +
188 "\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" +
189 "us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" +
190 "\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" +
191 "\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" +
192 "ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" +
193 "d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" +
194 "\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" +
195 "\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" +
196 "lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" +
197 "w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" +
198 "\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" +
199 "\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" +
200 "\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" +
201 "min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" +
202 "ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" +
203 "e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" +
204 "mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" +
205 "us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" +
206 "\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" +
207 "\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" +
208 "bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" +
209 "\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" +
210 "if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" +
211 "dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" +
212 "nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" +
213 "\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" +
214 "\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" +
215 "opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" +
216 "\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" +
217 "\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" +
218 "\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" +
219 "ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" +
220 "f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" +
221 "rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" +
222 "ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" +
223 "\x00sah\x00saq\x00sas\x00sat\x00sav\x00saz\x00sba\x00sbe\x00sbp\x00scrds" +
224 "ck\x00scl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00se" +
225 "i\x00ses\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn" +
226 "\x00shu\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks" +
227 "\x00sllvsld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp" +
228 "\x00smq\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq" +
229 "\x00sou\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx" +
230 "\x00ssswssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00" +
231 "sur\x00sus\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00s" +
232 "yl\x00syr\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf" +
233 "\x00tbg\x00tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelt" +
234 "ed\x00tem\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00th" +
235 "q\x00thr\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr" +
236 "\x00tkt\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00" +
237 "tog\x00toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssot" +
238 "sd\x00tsf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts" +
239 "\x00ttt\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00t" +
240 "wq\x00txg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli" +
241 "\x00umb\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00u" +
242 "vh\x00uvl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv" +
243 "\x00vls\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj" +
244 "\x00wal\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg" +
245 "\x00wib\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu" +
246 "\x00woolwob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00x" +
247 "bi\x00xcr\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna" +
248 "\x00xnr\x00xog\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe" +
249 "\x00yam\x00yao\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb" +
250 "\x00yby\x00yer\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00y" +
251 "ooryon\x00yrb\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw" +
252 "\x00zahazag\x00zbl\x00zdj\x00zea\x00zgh\x00zhhozhx\x00zia\x00zlm\x00zmi" +
253 "\x00zne\x00zuulzxx\x00zza\x00\xff\xff\xff\xff"
254
255const langNoIndexOffset = 1330
256
257// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
258// in lookup tables. The language ids for these language codes are derived directly
259// from the letters and are not consecutive.
260// Size: 2197 bytes, 2197 elements
261var langNoIndex = [2197]uint8{
262 // Entry 0 - 3F
263 0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2,
264 0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57,
265 0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70,
266 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x72,
267 0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77,
268 0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2,
269 0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xbc, 0x0a, 0x6a,
270 0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff,
271 // Entry 40 - 7F
272 0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0,
273 0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed,
274 0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35,
275 0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff,
276 0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5,
277 0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3,
278 0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce,
279 0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf,
280 // Entry 80 - BF
281 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x7f, 0xff, 0xff,
282 0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7,
283 0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba,
284 0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff,
285 0xfd, 0xdf, 0xfb, 0xfe, 0x9d, 0xb4, 0xd3, 0xff,
286 0xef, 0xff, 0xdf, 0xf7, 0x7f, 0xb7, 0xfd, 0xd5,
287 0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c,
288 0x08, 0x21, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80,
289 // Entry C0 - FF
290 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96,
291 0x1b, 0x14, 0x08, 0xf3, 0x2b, 0xe7, 0x17, 0x56,
292 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7f, 0xf3, 0xef,
293 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
294 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xff, 0x7b, 0x35,
295 0x3e, 0xc7, 0xc7, 0xdf, 0xff, 0x01, 0x81, 0x00,
296 0xb0, 0x05, 0x80, 0x00, 0x20, 0x00, 0x00, 0x03,
297 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d,
298 // Entry 100 - 13F
299 0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64,
300 0x0d, 0x19, 0x41, 0xdf, 0x79, 0x22, 0x00, 0x00,
301 0x00, 0x5e, 0x64, 0xdc, 0x24, 0xe5, 0xd9, 0xe3,
302 0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x41, 0x0c,
303 0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc7, 0x67, 0x5f,
304 0x56, 0x99, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00,
305 0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56,
306 0x90, 0x6d, 0x01, 0x2e, 0x96, 0x69, 0x20, 0xfb,
307 // Entry 140 - 17F
308 0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x16,
309 0x03, 0x00, 0x00, 0xb0, 0x14, 0x23, 0x50, 0x06,
310 0x0a, 0x00, 0x01, 0x00, 0x00, 0x10, 0x11, 0x09,
311 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10,
312 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x05,
313 0x08, 0x00, 0x00, 0x05, 0x00, 0x80, 0x28, 0x04,
314 0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35,
315 0x24, 0x52, 0xf4, 0xd5, 0xbf, 0x62, 0xc9, 0x03,
316 // Entry 180 - 1BF
317 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
318 0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98,
319 0x21, 0x18, 0x81, 0x08, 0x00, 0x01, 0x40, 0x82,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea,
322 0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04,
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
325 // Entry 1C0 - 1FF
326 0x00, 0x03, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00,
327 0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00,
328 0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00,
329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55,
330 0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40,
331 0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
333 0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7a, 0xbf,
334 // Entry 200 - 23F
335 0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27,
336 0xed, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5,
337 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe1, 0xdf,
338 0x03, 0x44, 0x08, 0x90, 0x01, 0x04, 0x81, 0xe3,
339 0x92, 0x54, 0xdb, 0x28, 0xd3, 0x5f, 0xfe, 0x6d,
340 0x79, 0xed, 0x1c, 0x7f, 0x04, 0x08, 0x00, 0x01,
341 0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f,
342 0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54,
343 // Entry 240 - 27F
344 0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00,
345 0x20, 0x7b, 0x78, 0x02, 0x07, 0x84, 0x00, 0xf0,
346 0xbb, 0x7e, 0x5a, 0x00, 0x18, 0x04, 0x81, 0x00,
347 0x00, 0x00, 0x80, 0x10, 0x90, 0x1c, 0x01, 0x00,
348 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04,
349 0x08, 0xa0, 0x70, 0xa5, 0x0c, 0x40, 0x00, 0x00,
350 0x91, 0x24, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff,
351 0x7b, 0x7f, 0x70, 0x00, 0x05, 0x9b, 0xdd, 0x66,
352 // Entry 280 - 2BF
353 0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05,
354 0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51,
355 0xe2, 0xef, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05,
356 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
357 0x0c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60,
358 0xe7, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80,
359 0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04,
360 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20,
361 // Entry 2C0 - 2FF
362 0x02, 0x50, 0x80, 0x11, 0x00, 0x99, 0x6c, 0xe2,
363 0x50, 0x27, 0x1d, 0x11, 0x29, 0x0e, 0x59, 0xe9,
364 0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00,
365 0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d,
366 0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00,
367 0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01,
368 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x40, 0x08,
369 0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x8d, 0x12, 0x00,
370 // Entry 300 - 33F
371 0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0,
372 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
373 0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80,
374 0x00, 0x01, 0xd0, 0x16, 0x40, 0x00, 0x10, 0xb0,
375 0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00,
376 0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80,
377 0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00,
378 0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00,
379 // Entry 340 - 37F
380 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01,
381 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3,
382 0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb,
383 0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6,
384 0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff,
385 0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff,
386 0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0x7f,
387 0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f,
388 // Entry 380 - 3BF
389 0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f,
390 0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d,
391 0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf,
392 0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff,
393 0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb,
394 0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe,
395 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x7d, 0x1f,
396 0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44,
397 // Entry 3C0 - 3FF
398 0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57,
399 0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7,
400 0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x20,
401 0x40, 0x54, 0x9f, 0x8a, 0xdf, 0xf9, 0x6e, 0x11,
402 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x03,
403 0x05, 0xd1, 0x50, 0x5c, 0x00, 0x40, 0x00, 0x10,
404 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2,
405 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe,
406 // Entry 400 - 43F
407 0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f,
408 0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7,
409 0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f,
410 0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b,
411 0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7,
412 0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe,
413 0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde,
414 0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf,
415 // Entry 440 - 47F
416 0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d,
417 0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd,
418 0x7f, 0x4e, 0xbf, 0x8f, 0xae, 0xff, 0xee, 0xdf,
419 0x7f, 0xf7, 0x73, 0x02, 0x02, 0x04, 0xfc, 0xf7,
420 0xff, 0xb7, 0xd7, 0xef, 0xfe, 0xcd, 0xf5, 0xce,
421 0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xfd,
422 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff,
423 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x06, 0xc4,
424 // Entry 480 - 4BF
425 0x93, 0x50, 0x5d, 0xaf, 0xa6, 0xff, 0x99, 0xfb,
426 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20,
427 0x14, 0x00, 0x55, 0x51, 0xc2, 0x65, 0xf5, 0x41,
428 0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x85, 0xc5, 0x05,
429 0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x05,
430 0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00,
431 0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00,
432 0x06, 0x11, 0x20, 0x00, 0x18, 0x01, 0x92, 0xf1,
433 // Entry 4C0 - 4FF
434 0xfd, 0x47, 0x69, 0x06, 0x95, 0x06, 0x57, 0xed,
435 0xfb, 0x4d, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40,
436 0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83,
437 0xb8, 0x4f, 0x10, 0x8e, 0x89, 0x46, 0xde, 0xf7,
438 0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90,
439 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00,
440 0x01, 0x00, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x3d,
441 0xbe, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41,
442 // Entry 500 - 53F
443 0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49,
444 0x2d, 0x14, 0x27, 0x5f, 0xed, 0xf1, 0x3f, 0xe7,
445 0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8,
446 0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe7, 0xf7,
447 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10,
448 0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9,
449 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c,
450 0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40,
451 // Entry 540 - 57F
452 0x00, 0x00, 0x01, 0x43, 0x19, 0x24, 0x08, 0x00,
453 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
454 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
455 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
456 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
457 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
458 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
459 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
460 // Entry 580 - 5BF
461 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
462 0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d,
463 0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80,
464 0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf,
465 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
466 0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00,
467 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x20, 0x81,
468 0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40,
469 // Entry 5C0 - 5FF
470 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0xbe, 0x02,
471 0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20,
472 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02,
473 0x3d, 0x40, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d,
474 0x31, 0x00, 0x00, 0x00, 0x01, 0x18, 0x02, 0x20,
475 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00,
476 0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f,
477 0x1f, 0x98, 0xcf, 0x9c, 0xff, 0xaf, 0x5f, 0xfe,
478 // Entry 600 - 63F
479 0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9,
480 0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1,
481 0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7,
482 0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd,
483 0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x9f,
484 0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe,
485 0xbe, 0x5f, 0x46, 0x5b, 0xe9, 0x5f, 0x50, 0x18,
486 0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f,
487 // Entry 640 - 67F
488 0x75, 0xc4, 0x7d, 0x81, 0x92, 0xf5, 0x57, 0x6c,
489 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde,
490 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x3f, 0x00, 0x98,
491 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff,
492 0xb9, 0xda, 0x7d, 0xd0, 0x3e, 0x15, 0x7b, 0xb4,
493 0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7,
494 0x5f, 0xff, 0xff, 0x9e, 0xdf, 0xf6, 0xd7, 0xb9,
495 0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3,
496 // Entry 680 - 6BF
497 0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37,
498 0xce, 0x7f, 0x44, 0x1d, 0x73, 0x7f, 0xf8, 0xda,
499 0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x79, 0xa0,
500 0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08,
501 0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00,
502 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x09, 0x06,
503 0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00,
504 0x04, 0x00, 0x10, 0xdc, 0x58, 0xd7, 0x0d, 0x0f,
505 // Entry 6C0 - 6FF
506 0x54, 0x4d, 0xf1, 0x16, 0x44, 0xd5, 0x42, 0x08,
507 0x40, 0x02, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00,
508 0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x48, 0x41,
509 0x24, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00,
510 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
511 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab,
512 0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
513 0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00,
514 // Entry 700 - 73F
515 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
516 0x80, 0x86, 0xc2, 0x00, 0x00, 0x01, 0x00, 0x01,
517 0xff, 0x18, 0x02, 0x00, 0x02, 0xf0, 0xfd, 0x79,
518 0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00,
519 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
520 0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00,
521 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
523 // Entry 740 - 77F
524 0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e,
525 0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x46,
526 0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04,
527 0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a,
528 0x01, 0x00, 0x00, 0xb0, 0x80, 0x20, 0x55, 0x75,
529 0x97, 0x7c, 0xdf, 0x31, 0xcc, 0x68, 0xd1, 0x03,
530 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00,
531 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60,
532 // Entry 780 - 7BF
533 0x83, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01,
534 0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00,
535 0x10, 0x03, 0x31, 0x02, 0x01, 0x00, 0x00, 0xf0,
536 0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78,
537 0x78, 0x15, 0x50, 0x05, 0xa4, 0x84, 0xa9, 0x41,
538 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x40,
539 0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02,
540 0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed,
541 // Entry 7C0 - 7FF
542 0xdd, 0xbf, 0xf2, 0x5d, 0xc7, 0x0c, 0xd5, 0x42,
543 0xfc, 0xff, 0xf7, 0x1f, 0x00, 0x80, 0x40, 0x56,
544 0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff,
545 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d,
546 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80,
547 0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60,
548 0xfe, 0x01, 0x02, 0x88, 0x2a, 0x40, 0x16, 0x01,
549 0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10,
550 // Entry 800 - 83F
551 0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf,
552 0xbf, 0x03, 0x00, 0x00, 0x10, 0xdc, 0xa3, 0xd1,
553 0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3,
554 0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80,
555 0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84,
556 0x2f, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93,
557 0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10,
558 0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00,
559 // Entry 840 - 87F
560 0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x16, 0x89,
561 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03,
562 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28,
563 0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00,
564 0x00, 0xcb, 0xe4, 0x3a, 0x46, 0x88, 0x54, 0xf1,
565 0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50,
566 0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40,
567 0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1,
568 // Entry 880 - 8BF
569 0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00,
570 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24,
571 0x0a, 0x00, 0x80, 0x00, 0x00,
572}
573
574// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
575// to 2-letter language codes that cannot be derived using the method described above.
576// Each 3-letter code is followed by its 1-byte langID.
577const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff"
578
579// altLangIndex is used to convert indexes in altLangISO3 to langIDs.
580// Size: 12 bytes, 6 elements
581var altLangIndex = [6]uint16{
582 0x0281, 0x0407, 0x01fb, 0x03e5, 0x013e, 0x0208,
583}
584
585// AliasMap maps langIDs to their suggested replacements.
586// Size: 772 bytes, 193 elements
587var AliasMap = [193]FromTo{
588 0: {From: 0x82, To: 0x88},
589 1: {From: 0x187, To: 0x1ae},
590 2: {From: 0x1f3, To: 0x1e1},
591 3: {From: 0x1fb, To: 0x1bc},
592 4: {From: 0x208, To: 0x512},
593 5: {From: 0x20f, To: 0x20e},
594 6: {From: 0x310, To: 0x3dc},
595 7: {From: 0x347, To: 0x36f},
596 8: {From: 0x407, To: 0x432},
597 9: {From: 0x47a, To: 0x153},
598 10: {From: 0x490, To: 0x451},
599 11: {From: 0x4a2, To: 0x21},
600 12: {From: 0x53e, To: 0x544},
601 13: {From: 0x58f, To: 0x12d},
602 14: {From: 0x62b, To: 0x34},
603 15: {From: 0x62f, To: 0x14},
604 16: {From: 0x630, To: 0x1eb1},
605 17: {From: 0x651, To: 0x431},
606 18: {From: 0x662, To: 0x431},
607 19: {From: 0x6ed, To: 0x3a},
608 20: {From: 0x6f8, To: 0x1d7},
609 21: {From: 0x709, To: 0x3625},
610 22: {From: 0x73e, To: 0x21a1},
611 23: {From: 0x7b3, To: 0x56},
612 24: {From: 0x7b9, To: 0x299b},
613 25: {From: 0x7c5, To: 0x58},
614 26: {From: 0x7e6, To: 0x145},
615 27: {From: 0x80c, To: 0x5a},
616 28: {From: 0x815, To: 0x8d},
617 29: {From: 0x87e, To: 0x810},
618 30: {From: 0x8a8, To: 0x8b7},
619 31: {From: 0x8c3, To: 0xee3},
620 32: {From: 0x8fa, To: 0x1dc},
621 33: {From: 0x9ef, To: 0x331},
622 34: {From: 0xa36, To: 0x2c5},
623 35: {From: 0xa3d, To: 0xbf},
624 36: {From: 0xabe, To: 0x3322},
625 37: {From: 0xb38, To: 0x529},
626 38: {From: 0xb75, To: 0x265a},
627 39: {From: 0xb7e, To: 0xbc3},
628 40: {From: 0xb9b, To: 0x44e},
629 41: {From: 0xbbc, To: 0x4229},
630 42: {From: 0xbbf, To: 0x529},
631 43: {From: 0xbfe, To: 0x2da7},
632 44: {From: 0xc2e, To: 0x3181},
633 45: {From: 0xcb9, To: 0xf3},
634 46: {From: 0xd08, To: 0xfa},
635 47: {From: 0xdc8, To: 0x11a},
636 48: {From: 0xdd7, To: 0x32d},
637 49: {From: 0xdf8, To: 0xdfb},
638 50: {From: 0xdfe, To: 0x531},
639 51: {From: 0xe01, To: 0xdf3},
640 52: {From: 0xedf, To: 0x205a},
641 53: {From: 0xee9, To: 0x222e},
642 54: {From: 0xeee, To: 0x2e9a},
643 55: {From: 0xf39, To: 0x367},
644 56: {From: 0x10d0, To: 0x140},
645 57: {From: 0x1104, To: 0x2d0},
646 58: {From: 0x11a0, To: 0x1ec},
647 59: {From: 0x1279, To: 0x21},
648 60: {From: 0x1424, To: 0x15e},
649 61: {From: 0x1470, To: 0x14e},
650 62: {From: 0x151f, To: 0xd9b},
651 63: {From: 0x1523, To: 0x390},
652 64: {From: 0x1532, To: 0x19f},
653 65: {From: 0x1580, To: 0x210},
654 66: {From: 0x1583, To: 0x10d},
655 67: {From: 0x15a3, To: 0x3caf},
656 68: {From: 0x1630, To: 0x222e},
657 69: {From: 0x166a, To: 0x19b},
658 70: {From: 0x16c8, To: 0x136},
659 71: {From: 0x1700, To: 0x29f8},
660 72: {From: 0x1718, To: 0x194},
661 73: {From: 0x1727, To: 0xf3f},
662 74: {From: 0x177a, To: 0x178},
663 75: {From: 0x1809, To: 0x17b6},
664 76: {From: 0x1816, To: 0x18f3},
665 77: {From: 0x188a, To: 0x436},
666 78: {From: 0x1979, To: 0x1d01},
667 79: {From: 0x1a74, To: 0x2bb0},
668 80: {From: 0x1a8a, To: 0x1f8},
669 81: {From: 0x1b5a, To: 0x1fa},
670 82: {From: 0x1b86, To: 0x1515},
671 83: {From: 0x1d64, To: 0x2c9b},
672 84: {From: 0x2038, To: 0x37b1},
673 85: {From: 0x203d, To: 0x20dd},
674 86: {From: 0x2042, To: 0x2e00},
675 87: {From: 0x205a, To: 0x30b},
676 88: {From: 0x20e3, To: 0x274},
677 89: {From: 0x20ee, To: 0x263},
678 90: {From: 0x20f2, To: 0x22d},
679 91: {From: 0x20f9, To: 0x256},
680 92: {From: 0x210f, To: 0x21eb},
681 93: {From: 0x2135, To: 0x27d},
682 94: {From: 0x2160, To: 0x913},
683 95: {From: 0x2199, To: 0x121},
684 96: {From: 0x21ce, To: 0x1561},
685 97: {From: 0x21e6, To: 0x504},
686 98: {From: 0x21f4, To: 0x49f},
687 99: {From: 0x21fb, To: 0x269},
688 100: {From: 0x222d, To: 0x121},
689 101: {From: 0x2237, To: 0x121},
690 102: {From: 0x2248, To: 0x217d},
691 103: {From: 0x2262, To: 0x92a},
692 104: {From: 0x2316, To: 0x3226},
693 105: {From: 0x236a, To: 0x2835},
694 106: {From: 0x2382, To: 0x3365},
695 107: {From: 0x2472, To: 0x2c7},
696 108: {From: 0x24e4, To: 0x2ff},
697 109: {From: 0x24f0, To: 0x2fa},
698 110: {From: 0x24fa, To: 0x31f},
699 111: {From: 0x2550, To: 0xb5b},
700 112: {From: 0x25a9, To: 0xe2},
701 113: {From: 0x263e, To: 0x2d0},
702 114: {From: 0x26c9, To: 0x26b4},
703 115: {From: 0x26f9, To: 0x3c8},
704 116: {From: 0x2727, To: 0x3caf},
705 117: {From: 0x2755, To: 0x6a4},
706 118: {From: 0x2765, To: 0x26b4},
707 119: {From: 0x2789, To: 0x4358},
708 120: {From: 0x27c9, To: 0x2001},
709 121: {From: 0x28ea, To: 0x27b1},
710 122: {From: 0x28ef, To: 0x2837},
711 123: {From: 0x28fe, To: 0xaa5},
712 124: {From: 0x2914, To: 0x351},
713 125: {From: 0x2986, To: 0x2da7},
714 126: {From: 0x29f0, To: 0x96b},
715 127: {From: 0x2b1a, To: 0x38d},
716 128: {From: 0x2bfc, To: 0x395},
717 129: {From: 0x2c3f, To: 0x3caf},
718 130: {From: 0x2ce1, To: 0x2201},
719 131: {From: 0x2cfc, To: 0x3be},
720 132: {From: 0x2d13, To: 0x597},
721 133: {From: 0x2d47, To: 0x148},
722 134: {From: 0x2d48, To: 0x148},
723 135: {From: 0x2dff, To: 0x2f1},
724 136: {From: 0x2e08, To: 0x19cc},
725 137: {From: 0x2e10, To: 0xc45},
726 138: {From: 0x2e1a, To: 0x2d95},
727 139: {From: 0x2e21, To: 0x292},
728 140: {From: 0x2e54, To: 0x7d},
729 141: {From: 0x2e65, To: 0x2282},
730 142: {From: 0x2e97, To: 0x1a4},
731 143: {From: 0x2ea0, To: 0x2e9b},
732 144: {From: 0x2eef, To: 0x2ed7},
733 145: {From: 0x3193, To: 0x3c4},
734 146: {From: 0x3366, To: 0x338e},
735 147: {From: 0x342a, To: 0x3dc},
736 148: {From: 0x34ee, To: 0x18d0},
737 149: {From: 0x35c8, To: 0x2c9b},
738 150: {From: 0x35e6, To: 0x412},
739 151: {From: 0x35f5, To: 0x24b},
740 152: {From: 0x360d, To: 0x1dc},
741 153: {From: 0x3658, To: 0x246},
742 154: {From: 0x3676, To: 0x3f4},
743 155: {From: 0x36fd, To: 0x445},
744 156: {From: 0x3747, To: 0x3b42},
745 157: {From: 0x37c0, To: 0x121},
746 158: {From: 0x3816, To: 0x38f2},
747 159: {From: 0x382a, To: 0x2b48},
748 160: {From: 0x382b, To: 0x2c9b},
749 161: {From: 0x382f, To: 0xa9},
750 162: {From: 0x3832, To: 0x3228},
751 163: {From: 0x386c, To: 0x39a6},
752 164: {From: 0x3892, To: 0x3fc0},
753 165: {From: 0x38a0, To: 0x45f},
754 166: {From: 0x38a5, To: 0x39d7},
755 167: {From: 0x38b4, To: 0x1fa4},
756 168: {From: 0x38b5, To: 0x2e9a},
757 169: {From: 0x38fa, To: 0x38f1},
758 170: {From: 0x395c, To: 0x47e},
759 171: {From: 0x3b4e, To: 0xd91},
760 172: {From: 0x3b78, To: 0x137},
761 173: {From: 0x3c99, To: 0x4bc},
762 174: {From: 0x3fbd, To: 0x100},
763 175: {From: 0x4208, To: 0xa91},
764 176: {From: 0x42be, To: 0x573},
765 177: {From: 0x42f9, To: 0x3f60},
766 178: {From: 0x4378, To: 0x25a},
767 179: {From: 0x43b8, To: 0xe6c},
768 180: {From: 0x43cd, To: 0x10f},
769 181: {From: 0x43d4, To: 0x4848},
770 182: {From: 0x44af, To: 0x3322},
771 183: {From: 0x44e3, To: 0x512},
772 184: {From: 0x45ca, To: 0x2409},
773 185: {From: 0x45dd, To: 0x26dc},
774 186: {From: 0x4610, To: 0x48ae},
775 187: {From: 0x46ae, To: 0x46a0},
776 188: {From: 0x473e, To: 0x4745},
777 189: {From: 0x4817, To: 0x3503},
778 190: {From: 0x483b, To: 0x208b},
779 191: {From: 0x4916, To: 0x31f},
780 192: {From: 0x49a7, To: 0x523},
781}
782
783// Size: 193 bytes, 193 elements
784var AliasTypes = [193]AliasType{
785 // Entry 0 - 3F
786 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 0, 0,
787 1, 2, 1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 0,
788 0, 2, 1, 1, 0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1,
789 1, 1, 1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1,
790 // Entry 40 - 7F
791 1, 2, 2, 0, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0,
792 2, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0,
793 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 0,
794 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
795 // Entry 80 - BF
796 1, 0, 0, 1, 0, 2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0,
797 0, 1, 1, 2, 0, 0, 2, 0, 0, 1, 1, 1, 0, 0, 0, 0,
798 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 0,
799 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1,
800 // Entry C0 - FF
801 1,
802}
803
804const (
805 _Latn = 91
806 _Hani = 57
807 _Hans = 59
808 _Hant = 60
809 _Qaaa = 149
810 _Qaai = 157
811 _Qabx = 198
812 _Zinh = 255
813 _Zyyy = 260
814 _Zzzz = 261
815)
816
817// script is an alphabetically sorted list of ISO 15924 codes. The index
818// of the script in the string, divided by 4, is the internal scriptID.
819const script tag.Index = "" + // Size: 1052 bytes
820 "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
821 "BrahBraiBugiBuhdCakmCansCariChamCherChrsCirtCoptCpmnCprtCyrlCyrsDevaDiak" +
822 "DogrDsrtDuplEgydEgyhEgypElbaElymEthiGeokGeorGlagGongGonmGothGranGrekGujr" +
823 "GuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamo" +
824 "JavaJpanJurcKaliKanaKawiKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatf" +
825 "LatgLatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedf" +
826 "MendMercMeroMlymModiMongMoonMrooMteiMultMymrNagmNandNarbNbatNewaNkdbNkgb" +
827 "NkooNshuOgamOlckOrkhOryaOsgeOsmaOugrPalmPaucPcunPelmPermPhagPhliPhlpPhlv" +
828 "PhnxPiqdPlrdPrtiPsinQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" +
829 "QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" +
830 "QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" +
831 "QabxRanjRjngRohgRoroRunrSamrSaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogd" +
832 "SogoSoraSoyoSundSunuSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTelu" +
833 "TengTfngTglgThaaThaiTibtTirhTnsaTotoUgarVaiiVispVithWaraWchoWoleXpeoXsux" +
834 "YeziYiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff\xff"
835
836// suppressScript is an index from langID to the dominant script for that language,
837// if it exists. If a script is given, it should be suppressed from the language tag.
838// Size: 1330 bytes, 1330 elements
839var suppressScript = [1330]uint8{
840 // Entry 0 - 3F
841 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00,
844 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
845 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c,
846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
847 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
849 // Entry 40 - 7F
850 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
851 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
852 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00,
853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
855 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
856 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
858 // Entry 80 - BF
859 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
860 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
861 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
863 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
865 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
866 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
867 // Entry C0 - FF
868 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
869 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
872 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
874 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
875 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00,
876 // Entry 100 - 13F
877 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
878 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00,
879 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
880 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
882 0xed, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00,
883 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
884 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x5b, 0x00,
885 // Entry 140 - 17F
886 0x5b, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00,
887 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
888 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00,
889 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00,
890 0x00, 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00,
891 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x00,
892 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
894 // Entry 180 - 1BF
895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
896 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
897 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00,
898 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
899 0x00, 0x00, 0x00, 0x5b, 0x35, 0x00, 0x00, 0x00,
900 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00,
901 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
902 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x22, 0x00,
903 // Entry 1C0 - 1FF
904 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
905 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
906 0x00, 0x5b, 0x5b, 0x00, 0x5b, 0x5b, 0x00, 0x08,
907 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
908 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
909 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
910 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00,
911 0x5b, 0x5b, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00,
912 // Entry 200 - 23F
913 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
914 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
915 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
916 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
917 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
919 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
920 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
921 // Entry 240 - 27F
922 0x00, 0x00, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00,
923 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00,
924 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x22, 0x00,
925 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
926 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
927 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
928 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
930 // Entry 280 - 2BF
931 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
932 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00,
933 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00,
934 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
935 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
936 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00,
938 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
939 // Entry 2C0 - 2FF
940 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00,
942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
943 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
944 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
945 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
946 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
947 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
948 // Entry 300 - 33F
949 0x00, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00,
950 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
951 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
952 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5b,
953 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
954 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
955 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
956 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00,
957 // Entry 340 - 37F
958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
959 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00,
960 0x5b, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
961 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
962 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
963 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x5b,
964 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5b, 0x00,
965 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00,
966 // Entry 380 - 3BF
967 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
968 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
969 0x5b, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00,
970 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00,
971 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
972 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
973 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00,
974 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
975 // Entry 3C0 - 3FF
976 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00,
977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
978 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00,
979 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00,
980 0x00, 0x00, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00,
981 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
982 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
983 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
984 // Entry 400 - 43F
985 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00,
986 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00,
987 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00,
988 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00,
989 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
990 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
991 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
992 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00,
993 // Entry 440 - 47F
994 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x00, 0x00,
995 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
996 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
997 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
998 0x00, 0xe9, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00,
999 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x2c,
1000 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
1001 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00,
1002 // Entry 480 - 4BF
1003 0x5b, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00,
1004 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00,
1005 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1006 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1007 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1008 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
1009 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
1010 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1011 // Entry 4C0 - 4FF
1012 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00,
1013 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1016 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1017 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1018 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00,
1019 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1020 // Entry 500 - 53F
1021 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1022 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1023 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
1024 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1025 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
1026 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
1027 0x00, 0x00,
1028}
1029
1030const (
1031 _001 = 1
1032 _419 = 31
1033 _BR = 65
1034 _CA = 73
1035 _ES = 111
1036 _GB = 124
1037 _MD = 189
1038 _PT = 239
1039 _UK = 307
1040 _US = 310
1041 _ZZ = 358
1042 _XA = 324
1043 _XC = 326
1044 _XK = 334
1045)
1046
1047// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID
1048// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for
1049// the UN.M49 codes used for groups.)
1050const isoRegionOffset = 32
1051
1052// regionTypes defines the status of a region for various standards.
1053// Size: 359 bytes, 359 elements
1054var regionTypes = [359]uint8{
1055 // Entry 0 - 3F
1056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1059 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1060 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1061 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1062 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1063 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1064 // Entry 40 - 7F
1065 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06,
1066 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1067 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x04, 0x06,
1068 0x04, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1069 0x04, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00,
1070 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1071 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06,
1072 0x00, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06,
1073 // Entry 80 - BF
1074 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1075 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1076 0x06, 0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06,
1077 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1078 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06,
1079 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1080 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1081 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1082 // Entry C0 - FF
1083 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06,
1084 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1085 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1086 0x00, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04,
1087 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06,
1088 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1089 0x00, 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05,
1090 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
1091 // Entry 100 - 13F
1092 0x05, 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06,
1093 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1094 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1095 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04,
1096 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1097 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1098 0x06, 0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06,
1099 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
1100 // Entry 140 - 17F
1101 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05,
1102 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
1103 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
1104 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06,
1105 0x06, 0x04, 0x06, 0x06, 0x04, 0x06, 0x05,
1106}
1107
1108// regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
1109// Each 2-letter codes is followed by two bytes with the following meaning:
1110// - [A-Z}{2}: the first letter of the 2-letter code plus these two
1111// letters form the 3-letter ISO code.
1112// - 0, n: index into altRegionISO3.
1113const regionISO tag.Index = "" + // Size: 1312 bytes
1114 "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" +
1115 "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" +
1116 "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" +
1117 "CQ CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADO" +
1118 "OMDYHYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSM" +
1119 "FOROFQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQ" +
1120 "NQGRRCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERL" +
1121 "ILSRIMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM" +
1122 "\x00\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSO" +
1123 "LTTULUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNP" +
1124 "MQTQMRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLD" +
1125 "NOORNPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM" +
1126 "\x00\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSS" +
1127 "QTTTQU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLB" +
1128 "SCYCSDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXM" +
1129 "SYYRSZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTT" +
1130 "TOTVUVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVN" +
1131 "NMVUUTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXN" +
1132 "NNXOOOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUG" +
1133 "ZAAFZMMBZRARZWWEZZZZ\xff\xff\xff\xff"
1134
1135// altRegionISO3 holds a list of 3-letter region codes that cannot be
1136// mapped to 2-letter codes using the default algorithm. This is a short list.
1137const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN"
1138
1139// altRegionIDs holds a list of regionIDs the positions of which match those
1140// of the 3-letter ISO codes in altRegionISO3.
1141// Size: 22 bytes, 11 elements
1142var altRegionIDs = [11]uint16{
1143 0x0058, 0x0071, 0x0089, 0x00a9, 0x00ab, 0x00ae, 0x00eb, 0x0106,
1144 0x0122, 0x0160, 0x00dd,
1145}
1146
1147// Size: 80 bytes, 20 elements
1148var regionOldMap = [20]FromTo{
1149 0: {From: 0x44, To: 0xc5},
1150 1: {From: 0x59, To: 0xa8},
1151 2: {From: 0x60, To: 0x61},
1152 3: {From: 0x67, To: 0x3b},
1153 4: {From: 0x7a, To: 0x79},
1154 5: {From: 0x94, To: 0x37},
1155 6: {From: 0xa4, To: 0x134},
1156 7: {From: 0xc2, To: 0x134},
1157 8: {From: 0xd8, To: 0x140},
1158 9: {From: 0xdd, To: 0x2b},
1159 10: {From: 0xf0, To: 0x134},
1160 11: {From: 0xf3, To: 0xe3},
1161 12: {From: 0xfd, To: 0x71},
1162 13: {From: 0x104, To: 0x165},
1163 14: {From: 0x12b, To: 0x127},
1164 15: {From: 0x133, To: 0x7c},
1165 16: {From: 0x13b, To: 0x13f},
1166 17: {From: 0x142, To: 0x134},
1167 18: {From: 0x15e, To: 0x15f},
1168 19: {From: 0x164, To: 0x4b},
1169}
1170
1171// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
1172// codes indicating collections of regions.
1173// Size: 718 bytes, 359 elements
1174var m49 = [359]int16{
1175 // Entry 0 - 3F
1176 0, 1, 2, 3, 5, 9, 11, 13,
1177 14, 15, 17, 18, 19, 21, 29, 30,
1178 34, 35, 39, 53, 54, 57, 61, 142,
1179 143, 145, 150, 151, 154, 155, 202, 419,
1180 958, 0, 20, 784, 4, 28, 660, 8,
1181 51, 530, 24, 10, 32, 16, 40, 36,
1182 533, 248, 31, 70, 52, 50, 56, 854,
1183 100, 48, 108, 204, 652, 60, 96, 68,
1184 // Entry 40 - 7F
1185 535, 76, 44, 64, 104, 74, 72, 112,
1186 84, 124, 166, 180, 140, 178, 756, 384,
1187 184, 152, 120, 156, 170, 0, 0, 188,
1188 891, 296, 192, 132, 531, 162, 196, 203,
1189 278, 276, 0, 262, 208, 212, 214, 204,
1190 12, 0, 218, 233, 818, 732, 232, 724,
1191 231, 967, 0, 246, 242, 238, 583, 234,
1192 0, 250, 249, 266, 826, 308, 268, 254,
1193 // Entry 80 - BF
1194 831, 288, 292, 304, 270, 324, 312, 226,
1195 300, 239, 320, 316, 624, 328, 344, 334,
1196 340, 191, 332, 348, 854, 0, 360, 372,
1197 376, 833, 356, 86, 368, 364, 352, 380,
1198 832, 388, 400, 392, 581, 404, 417, 116,
1199 296, 174, 659, 408, 410, 414, 136, 398,
1200 418, 422, 662, 438, 144, 430, 426, 440,
1201 442, 428, 434, 504, 492, 498, 499, 663,
1202 // Entry C0 - FF
1203 450, 584, 581, 807, 466, 104, 496, 446,
1204 580, 474, 478, 500, 470, 480, 462, 454,
1205 484, 458, 508, 516, 540, 562, 574, 566,
1206 548, 558, 528, 578, 524, 10, 520, 536,
1207 570, 554, 512, 591, 0, 604, 258, 598,
1208 608, 586, 616, 666, 612, 630, 275, 620,
1209 581, 585, 600, 591, 634, 959, 960, 961,
1210 962, 963, 964, 965, 966, 967, 968, 969,
1211 // Entry 100 - 13F
1212 970, 971, 972, 638, 716, 642, 688, 643,
1213 646, 682, 90, 690, 729, 752, 702, 654,
1214 705, 744, 703, 694, 674, 686, 706, 740,
1215 728, 678, 810, 222, 534, 760, 748, 0,
1216 796, 148, 260, 768, 764, 762, 772, 626,
1217 795, 788, 776, 626, 792, 780, 798, 158,
1218 834, 804, 800, 826, 581, 0, 840, 858,
1219 860, 336, 670, 704, 862, 92, 850, 704,
1220 // Entry 140 - 17F
1221 548, 876, 581, 882, 973, 974, 975, 976,
1222 977, 978, 979, 980, 981, 982, 983, 984,
1223 985, 986, 987, 988, 989, 990, 991, 992,
1224 993, 994, 995, 996, 997, 998, 720, 887,
1225 175, 891, 710, 894, 180, 716, 999,
1226}
1227
1228// m49Index gives indexes into fromM49 based on the three most significant bits
1229// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in
1230//
1231// fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]]
1232//
1233// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code.
1234// The region code is stored in the 9 lsb of the indexed value.
1235// Size: 18 bytes, 9 elements
1236var m49Index = [9]int16{
1237 0, 59, 108, 143, 181, 220, 259, 291,
1238 333,
1239}
1240
1241// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.
1242// Size: 666 bytes, 333 elements
1243var fromM49 = [333]uint16{
1244 // Entry 0 - 3F
1245 0x0201, 0x0402, 0x0603, 0x0824, 0x0a04, 0x1027, 0x1205, 0x142b,
1246 0x1606, 0x1868, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b,
1247 0x260c, 0x2822, 0x2a0d, 0x302a, 0x3825, 0x3a0e, 0x3c0f, 0x3e32,
1248 0x402c, 0x4410, 0x4611, 0x482f, 0x4e12, 0x502e, 0x5842, 0x6039,
1249 0x6435, 0x6628, 0x6834, 0x6a13, 0x6c14, 0x7036, 0x7215, 0x783d,
1250 0x7a16, 0x8043, 0x883f, 0x8c33, 0x9046, 0x9445, 0x9841, 0xa848,
1251 0xac9b, 0xb50a, 0xb93d, 0xc03e, 0xc838, 0xd0c5, 0xd83a, 0xe047,
1252 0xe8a7, 0xf052, 0xf849, 0x085b, 0x10ae, 0x184c, 0x1c17, 0x1e18,
1253 // Entry 40 - 7F
1254 0x20b4, 0x2219, 0x2921, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d,
1255 0x3853, 0x3d2f, 0x445d, 0x4c4a, 0x5454, 0x5ca9, 0x5f60, 0x644d,
1256 0x684b, 0x7050, 0x7857, 0x7e91, 0x805a, 0x885e, 0x941e, 0x965f,
1257 0x983b, 0xa064, 0xa865, 0xac66, 0xb46a, 0xbd1b, 0xc487, 0xcc70,
1258 0xce70, 0xd06e, 0xd26b, 0xd477, 0xdc75, 0xde89, 0xe474, 0xec73,
1259 0xf031, 0xf27a, 0xf479, 0xfc7f, 0x04e6, 0x0922, 0x0c63, 0x147b,
1260 0x187e, 0x1c84, 0x26ee, 0x2861, 0x2c60, 0x3061, 0x4081, 0x4882,
1261 0x50a8, 0x5888, 0x6083, 0x687d, 0x7086, 0x788b, 0x808a, 0x8885,
1262 // Entry 80 - BF
1263 0x908d, 0x9892, 0x9c8f, 0xa139, 0xa890, 0xb08e, 0xb893, 0xc09e,
1264 0xc89a, 0xd096, 0xd89d, 0xe09c, 0xe897, 0xf098, 0xf89f, 0x004f,
1265 0x08a1, 0x10a3, 0x1caf, 0x20a2, 0x28a5, 0x30ab, 0x34ac, 0x3cad,
1266 0x42a6, 0x44b0, 0x461f, 0x4cb1, 0x54b6, 0x58b9, 0x5cb5, 0x64ba,
1267 0x6cb3, 0x70b7, 0x74b8, 0x7cc7, 0x84c0, 0x8ccf, 0x94d1, 0x9cce,
1268 0xa4c4, 0xaccc, 0xb4c9, 0xbcca, 0xc0cd, 0xc8d0, 0xd8bc, 0xe0c6,
1269 0xe4bd, 0xe6be, 0xe8cb, 0xf0bb, 0xf8d2, 0x00e2, 0x08d3, 0x10de,
1270 0x18dc, 0x20da, 0x2429, 0x265c, 0x2a30, 0x2d1c, 0x2e40, 0x30df,
1271 // Entry C0 - FF
1272 0x38d4, 0x4940, 0x54e1, 0x5cd9, 0x64d5, 0x6cd7, 0x74e0, 0x7cd6,
1273 0x84db, 0x88c8, 0x8b34, 0x8e76, 0x90c1, 0x92f1, 0x94e9, 0x9ee3,
1274 0xace7, 0xb0f2, 0xb8e5, 0xc0e8, 0xc8ec, 0xd0ea, 0xd8ef, 0xe08c,
1275 0xe527, 0xeced, 0xf4f4, 0xfd03, 0x0505, 0x0707, 0x0d08, 0x183c,
1276 0x1d0f, 0x26aa, 0x2826, 0x2cb2, 0x2ebf, 0x34eb, 0x3d3a, 0x4514,
1277 0x4d19, 0x5509, 0x5d15, 0x6106, 0x650b, 0x6d13, 0x7d0e, 0x7f12,
1278 0x813f, 0x8310, 0x8516, 0x8d62, 0x9965, 0xa15e, 0xa86f, 0xb118,
1279 0xb30c, 0xb86d, 0xc10c, 0xc917, 0xd111, 0xd91e, 0xe10d, 0xe84e,
1280 // Entry 100 - 13F
1281 0xf11d, 0xf525, 0xf924, 0x0123, 0x0926, 0x112a, 0x192d, 0x2023,
1282 0x2929, 0x312c, 0x3728, 0x3920, 0x3d2e, 0x4132, 0x4931, 0x4ec3,
1283 0x551a, 0x646c, 0x747c, 0x7e80, 0x80a0, 0x8299, 0x8530, 0x9136,
1284 0xa53e, 0xac37, 0xb537, 0xb938, 0xbd3c, 0xd941, 0xe543, 0xed5f,
1285 0xef5f, 0xf658, 0xfd63, 0x7c20, 0x7ef5, 0x80f6, 0x82f7, 0x84f8,
1286 0x86f9, 0x88fa, 0x8afb, 0x8cfc, 0x8e71, 0x90fe, 0x92ff, 0x9500,
1287 0x9701, 0x9902, 0x9b44, 0x9d45, 0x9f46, 0xa147, 0xa348, 0xa549,
1288 0xa74a, 0xa94b, 0xab4c, 0xad4d, 0xaf4e, 0xb14f, 0xb350, 0xb551,
1289 // Entry 140 - 17F
1290 0xb752, 0xb953, 0xbb54, 0xbd55, 0xbf56, 0xc157, 0xc358, 0xc559,
1291 0xc75a, 0xc95b, 0xcb5c, 0xcd5d, 0xcf66,
1292}
1293
1294// Size: 2128 bytes
1295var variantIndex = map[string]uint8{
1296 "1606nict": 0x0,
1297 "1694acad": 0x1,
1298 "1901": 0x2,
1299 "1959acad": 0x3,
1300 "1994": 0x67,
1301 "1996": 0x4,
1302 "abl1943": 0x5,
1303 "akuapem": 0x6,
1304 "alalc97": 0x69,
1305 "aluku": 0x7,
1306 "ao1990": 0x8,
1307 "aranes": 0x9,
1308 "arevela": 0xa,
1309 "arevmda": 0xb,
1310 "arkaika": 0xc,
1311 "asante": 0xd,
1312 "auvern": 0xe,
1313 "baku1926": 0xf,
1314 "balanka": 0x10,
1315 "barla": 0x11,
1316 "basiceng": 0x12,
1317 "bauddha": 0x13,
1318 "bciav": 0x14,
1319 "bcizbl": 0x15,
1320 "biscayan": 0x16,
1321 "biske": 0x62,
1322 "bohoric": 0x17,
1323 "boont": 0x18,
1324 "bornholm": 0x19,
1325 "cisaup": 0x1a,
1326 "colb1945": 0x1b,
1327 "cornu": 0x1c,
1328 "creiss": 0x1d,
1329 "dajnko": 0x1e,
1330 "ekavsk": 0x1f,
1331 "emodeng": 0x20,
1332 "fonipa": 0x6a,
1333 "fonkirsh": 0x6b,
1334 "fonnapa": 0x6c,
1335 "fonupa": 0x6d,
1336 "fonxsamp": 0x6e,
1337 "gallo": 0x21,
1338 "gascon": 0x22,
1339 "grclass": 0x23,
1340 "grital": 0x24,
1341 "grmistr": 0x25,
1342 "hepburn": 0x26,
1343 "heploc": 0x68,
1344 "hognorsk": 0x27,
1345 "hsistemo": 0x28,
1346 "ijekavsk": 0x29,
1347 "itihasa": 0x2a,
1348 "ivanchov": 0x2b,
1349 "jauer": 0x2c,
1350 "jyutping": 0x2d,
1351 "kkcor": 0x2e,
1352 "kociewie": 0x2f,
1353 "kscor": 0x30,
1354 "laukika": 0x31,
1355 "lemosin": 0x32,
1356 "lengadoc": 0x33,
1357 "lipaw": 0x63,
1358 "ltg1929": 0x34,
1359 "ltg2007": 0x35,
1360 "luna1918": 0x36,
1361 "metelko": 0x37,
1362 "monoton": 0x38,
1363 "ndyuka": 0x39,
1364 "nedis": 0x3a,
1365 "newfound": 0x3b,
1366 "nicard": 0x3c,
1367 "njiva": 0x64,
1368 "nulik": 0x3d,
1369 "osojs": 0x65,
1370 "oxendict": 0x3e,
1371 "pahawh2": 0x3f,
1372 "pahawh3": 0x40,
1373 "pahawh4": 0x41,
1374 "pamaka": 0x42,
1375 "peano": 0x43,
1376 "petr1708": 0x44,
1377 "pinyin": 0x45,
1378 "polyton": 0x46,
1379 "provenc": 0x47,
1380 "puter": 0x48,
1381 "rigik": 0x49,
1382 "rozaj": 0x4a,
1383 "rumgr": 0x4b,
1384 "scotland": 0x4c,
1385 "scouse": 0x4d,
1386 "simple": 0x6f,
1387 "solba": 0x66,
1388 "sotav": 0x4e,
1389 "spanglis": 0x4f,
1390 "surmiran": 0x50,
1391 "sursilv": 0x51,
1392 "sutsilv": 0x52,
1393 "synnejyl": 0x53,
1394 "tarask": 0x54,
1395 "tongyong": 0x55,
1396 "tunumiit": 0x56,
1397 "uccor": 0x57,
1398 "ucrcor": 0x58,
1399 "ulster": 0x59,
1400 "unifon": 0x5a,
1401 "vaidika": 0x5b,
1402 "valencia": 0x5c,
1403 "vallader": 0x5d,
1404 "vecdruka": 0x5e,
1405 "vivaraup": 0x5f,
1406 "wadegile": 0x60,
1407 "xsistemo": 0x61,
1408}
1409
1410// variantNumSpecialized is the number of specialized variants in variants.
1411const variantNumSpecialized = 105
1412
1413// nRegionGroups is the number of region groups.
1414const nRegionGroups = 33
1415
1416type likelyLangRegion struct {
1417 lang uint16
1418 region uint16
1419}
1420
1421// likelyScript is a lookup table, indexed by scriptID, for the most likely
1422// languages and regions given a script.
1423// Size: 1052 bytes, 263 elements
1424var likelyScript = [263]likelyLangRegion{
1425 1: {lang: 0x14e, region: 0x85},
1426 3: {lang: 0x2a2, region: 0x107},
1427 4: {lang: 0x1f, region: 0x9a},
1428 5: {lang: 0x3a, region: 0x6c},
1429 7: {lang: 0x3b, region: 0x9d},
1430 8: {lang: 0x1d7, region: 0x28},
1431 9: {lang: 0x13, region: 0x9d},
1432 10: {lang: 0x5b, region: 0x96},
1433 11: {lang: 0x60, region: 0x52},
1434 12: {lang: 0xb9, region: 0xb5},
1435 13: {lang: 0x63, region: 0x96},
1436 14: {lang: 0xa5, region: 0x35},
1437 15: {lang: 0x3e9, region: 0x9a},
1438 17: {lang: 0x529, region: 0x12f},
1439 18: {lang: 0x3b1, region: 0x9a},
1440 19: {lang: 0x15e, region: 0x79},
1441 20: {lang: 0xc2, region: 0x96},
1442 21: {lang: 0x9d, region: 0xe8},
1443 22: {lang: 0xdb, region: 0x35},
1444 23: {lang: 0xf3, region: 0x49},
1445 24: {lang: 0x4f0, region: 0x12c},
1446 25: {lang: 0xe7, region: 0x13f},
1447 26: {lang: 0xe5, region: 0x136},
1448 29: {lang: 0xf1, region: 0x6c},
1449 31: {lang: 0x1a0, region: 0x5e},
1450 32: {lang: 0x3e2, region: 0x107},
1451 34: {lang: 0x1be, region: 0x9a},
1452 38: {lang: 0x15e, region: 0x79},
1453 41: {lang: 0x133, region: 0x6c},
1454 42: {lang: 0x431, region: 0x27},
1455 44: {lang: 0x27, region: 0x70},
1456 46: {lang: 0x210, region: 0x7e},
1457 47: {lang: 0xfe, region: 0x38},
1458 49: {lang: 0x19b, region: 0x9a},
1459 50: {lang: 0x19e, region: 0x131},
1460 51: {lang: 0x3e9, region: 0x9a},
1461 52: {lang: 0x136, region: 0x88},
1462 53: {lang: 0x1a4, region: 0x9a},
1463 54: {lang: 0x39d, region: 0x9a},
1464 55: {lang: 0x529, region: 0x12f},
1465 56: {lang: 0x254, region: 0xac},
1466 57: {lang: 0x529, region: 0x53},
1467 58: {lang: 0x1cb, region: 0xe8},
1468 59: {lang: 0x529, region: 0x53},
1469 60: {lang: 0x529, region: 0x12f},
1470 61: {lang: 0x2fd, region: 0x9c},
1471 62: {lang: 0x1bc, region: 0x98},
1472 63: {lang: 0x200, region: 0xa3},
1473 64: {lang: 0x1c5, region: 0x12c},
1474 65: {lang: 0x1ca, region: 0xb0},
1475 68: {lang: 0x1d5, region: 0x93},
1476 70: {lang: 0x142, region: 0x9f},
1477 71: {lang: 0x254, region: 0xac},
1478 72: {lang: 0x20e, region: 0x96},
1479 73: {lang: 0x200, region: 0xa3},
1480 75: {lang: 0x135, region: 0xc5},
1481 76: {lang: 0x200, region: 0xa3},
1482 78: {lang: 0x3bb, region: 0xe9},
1483 79: {lang: 0x24a, region: 0xa7},
1484 80: {lang: 0x3fa, region: 0x9a},
1485 83: {lang: 0x251, region: 0x9a},
1486 84: {lang: 0x254, region: 0xac},
1487 86: {lang: 0x88, region: 0x9a},
1488 87: {lang: 0x370, region: 0x124},
1489 88: {lang: 0x2b8, region: 0xb0},
1490 93: {lang: 0x29f, region: 0x9a},
1491 94: {lang: 0x2a8, region: 0x9a},
1492 95: {lang: 0x28f, region: 0x88},
1493 96: {lang: 0x1a0, region: 0x88},
1494 97: {lang: 0x2ac, region: 0x53},
1495 99: {lang: 0x4f4, region: 0x12c},
1496 100: {lang: 0x4f5, region: 0x12c},
1497 101: {lang: 0x1be, region: 0x9a},
1498 103: {lang: 0x337, region: 0x9d},
1499 104: {lang: 0x4f7, region: 0x53},
1500 105: {lang: 0xa9, region: 0x53},
1501 108: {lang: 0x2e8, region: 0x113},
1502 109: {lang: 0x4f8, region: 0x10c},
1503 110: {lang: 0x4f8, region: 0x10c},
1504 111: {lang: 0x304, region: 0x9a},
1505 112: {lang: 0x31b, region: 0x9a},
1506 113: {lang: 0x30b, region: 0x53},
1507 115: {lang: 0x31e, region: 0x35},
1508 116: {lang: 0x30e, region: 0x9a},
1509 117: {lang: 0x414, region: 0xe9},
1510 118: {lang: 0x331, region: 0xc5},
1511 121: {lang: 0x4f9, region: 0x109},
1512 122: {lang: 0x3b, region: 0xa2},
1513 123: {lang: 0x353, region: 0xdc},
1514 126: {lang: 0x2d0, region: 0x85},
1515 127: {lang: 0x52a, region: 0x53},
1516 128: {lang: 0x403, region: 0x97},
1517 129: {lang: 0x3ee, region: 0x9a},
1518 130: {lang: 0x39b, region: 0xc6},
1519 131: {lang: 0x395, region: 0x9a},
1520 132: {lang: 0x399, region: 0x136},
1521 133: {lang: 0x429, region: 0x116},
1522 135: {lang: 0x3b, region: 0x11d},
1523 136: {lang: 0xfd, region: 0xc5},
1524 139: {lang: 0x27d, region: 0x107},
1525 140: {lang: 0x2c9, region: 0x53},
1526 141: {lang: 0x39f, region: 0x9d},
1527 142: {lang: 0x39f, region: 0x53},
1528 144: {lang: 0x3ad, region: 0xb1},
1529 146: {lang: 0x1c6, region: 0x53},
1530 147: {lang: 0x4fd, region: 0x9d},
1531 200: {lang: 0x3cb, region: 0x96},
1532 203: {lang: 0x372, region: 0x10d},
1533 204: {lang: 0x420, region: 0x98},
1534 206: {lang: 0x4ff, region: 0x15f},
1535 207: {lang: 0x3f0, region: 0x9a},
1536 208: {lang: 0x45, region: 0x136},
1537 209: {lang: 0x139, region: 0x7c},
1538 210: {lang: 0x3e9, region: 0x9a},
1539 212: {lang: 0x3e9, region: 0x9a},
1540 213: {lang: 0x3fa, region: 0x9a},
1541 214: {lang: 0x40c, region: 0xb4},
1542 217: {lang: 0x433, region: 0x9a},
1543 218: {lang: 0xef, region: 0xc6},
1544 219: {lang: 0x43e, region: 0x96},
1545 221: {lang: 0x44d, region: 0x35},
1546 222: {lang: 0x44e, region: 0x9c},
1547 226: {lang: 0x45a, region: 0xe8},
1548 227: {lang: 0x11a, region: 0x9a},
1549 228: {lang: 0x45e, region: 0x53},
1550 229: {lang: 0x232, region: 0x53},
1551 230: {lang: 0x450, region: 0x9a},
1552 231: {lang: 0x4a5, region: 0x53},
1553 232: {lang: 0x9f, region: 0x13f},
1554 233: {lang: 0x461, region: 0x9a},
1555 235: {lang: 0x528, region: 0xbb},
1556 236: {lang: 0x153, region: 0xe8},
1557 237: {lang: 0x128, region: 0xce},
1558 238: {lang: 0x46b, region: 0x124},
1559 239: {lang: 0xa9, region: 0x53},
1560 240: {lang: 0x2ce, region: 0x9a},
1561 243: {lang: 0x4ad, region: 0x11d},
1562 244: {lang: 0x4be, region: 0xb5},
1563 247: {lang: 0x1ce, region: 0x9a},
1564 250: {lang: 0x3a9, region: 0x9d},
1565 251: {lang: 0x22, region: 0x9c},
1566 253: {lang: 0x1ea, region: 0x53},
1567 254: {lang: 0xef, region: 0xc6},
1568}
1569
1570type likelyScriptRegion struct {
1571 region uint16
1572 script uint16
1573 flags uint8
1574}
1575
1576// likelyLang is a lookup table, indexed by langID, for the most likely
1577// scripts and regions given incomplete information. If more entries exist for a
1578// given language, region and script are the index and size respectively
1579// of the list in likelyLangList.
1580// Size: 7980 bytes, 1330 elements
1581var likelyLang = [1330]likelyScriptRegion{
1582 0: {region: 0x136, script: 0x5b, flags: 0x0},
1583 1: {region: 0x70, script: 0x5b, flags: 0x0},
1584 2: {region: 0x166, script: 0x5b, flags: 0x0},
1585 3: {region: 0x166, script: 0x5b, flags: 0x0},
1586 4: {region: 0x166, script: 0x5b, flags: 0x0},
1587 5: {region: 0x7e, script: 0x20, flags: 0x0},
1588 6: {region: 0x166, script: 0x5b, flags: 0x0},
1589 7: {region: 0x166, script: 0x20, flags: 0x0},
1590 8: {region: 0x81, script: 0x5b, flags: 0x0},
1591 9: {region: 0x166, script: 0x5b, flags: 0x0},
1592 10: {region: 0x166, script: 0x5b, flags: 0x0},
1593 11: {region: 0x166, script: 0x5b, flags: 0x0},
1594 12: {region: 0x96, script: 0x5b, flags: 0x0},
1595 13: {region: 0x132, script: 0x5b, flags: 0x0},
1596 14: {region: 0x81, script: 0x5b, flags: 0x0},
1597 15: {region: 0x166, script: 0x5b, flags: 0x0},
1598 16: {region: 0x166, script: 0x5b, flags: 0x0},
1599 17: {region: 0x107, script: 0x20, flags: 0x0},
1600 18: {region: 0x166, script: 0x5b, flags: 0x0},
1601 19: {region: 0x9d, script: 0x9, flags: 0x0},
1602 20: {region: 0x129, script: 0x5, flags: 0x0},
1603 21: {region: 0x166, script: 0x5b, flags: 0x0},
1604 22: {region: 0x162, script: 0x5b, flags: 0x0},
1605 23: {region: 0x166, script: 0x5b, flags: 0x0},
1606 24: {region: 0x166, script: 0x5b, flags: 0x0},
1607 25: {region: 0x166, script: 0x5b, flags: 0x0},
1608 26: {region: 0x166, script: 0x5b, flags: 0x0},
1609 27: {region: 0x166, script: 0x5b, flags: 0x0},
1610 28: {region: 0x52, script: 0x5b, flags: 0x0},
1611 29: {region: 0x166, script: 0x5b, flags: 0x0},
1612 30: {region: 0x166, script: 0x5b, flags: 0x0},
1613 31: {region: 0x9a, script: 0x4, flags: 0x0},
1614 32: {region: 0x166, script: 0x5b, flags: 0x0},
1615 33: {region: 0x81, script: 0x5b, flags: 0x0},
1616 34: {region: 0x9c, script: 0xfb, flags: 0x0},
1617 35: {region: 0x166, script: 0x5b, flags: 0x0},
1618 36: {region: 0x166, script: 0x5b, flags: 0x0},
1619 37: {region: 0x14e, script: 0x5b, flags: 0x0},
1620 38: {region: 0x107, script: 0x20, flags: 0x0},
1621 39: {region: 0x70, script: 0x2c, flags: 0x0},
1622 40: {region: 0x166, script: 0x5b, flags: 0x0},
1623 41: {region: 0x166, script: 0x5b, flags: 0x0},
1624 42: {region: 0xd7, script: 0x5b, flags: 0x0},
1625 43: {region: 0x166, script: 0x5b, flags: 0x0},
1626 45: {region: 0x166, script: 0x5b, flags: 0x0},
1627 46: {region: 0x166, script: 0x5b, flags: 0x0},
1628 47: {region: 0x166, script: 0x5b, flags: 0x0},
1629 48: {region: 0x166, script: 0x5b, flags: 0x0},
1630 49: {region: 0x166, script: 0x5b, flags: 0x0},
1631 50: {region: 0x166, script: 0x5b, flags: 0x0},
1632 51: {region: 0x96, script: 0x5b, flags: 0x0},
1633 52: {region: 0x166, script: 0x5, flags: 0x0},
1634 53: {region: 0x123, script: 0x5, flags: 0x0},
1635 54: {region: 0x166, script: 0x5b, flags: 0x0},
1636 55: {region: 0x166, script: 0x5b, flags: 0x0},
1637 56: {region: 0x166, script: 0x5b, flags: 0x0},
1638 57: {region: 0x166, script: 0x5b, flags: 0x0},
1639 58: {region: 0x6c, script: 0x5, flags: 0x0},
1640 59: {region: 0x0, script: 0x3, flags: 0x1},
1641 60: {region: 0x166, script: 0x5b, flags: 0x0},
1642 61: {region: 0x51, script: 0x5b, flags: 0x0},
1643 62: {region: 0x3f, script: 0x5b, flags: 0x0},
1644 63: {region: 0x68, script: 0x5, flags: 0x0},
1645 65: {region: 0xbb, script: 0x5, flags: 0x0},
1646 66: {region: 0x6c, script: 0x5, flags: 0x0},
1647 67: {region: 0x9a, script: 0xe, flags: 0x0},
1648 68: {region: 0x130, script: 0x5b, flags: 0x0},
1649 69: {region: 0x136, script: 0xd0, flags: 0x0},
1650 70: {region: 0x166, script: 0x5b, flags: 0x0},
1651 71: {region: 0x166, script: 0x5b, flags: 0x0},
1652 72: {region: 0x6f, script: 0x5b, flags: 0x0},
1653 73: {region: 0x166, script: 0x5b, flags: 0x0},
1654 74: {region: 0x166, script: 0x5b, flags: 0x0},
1655 75: {region: 0x49, script: 0x5b, flags: 0x0},
1656 76: {region: 0x166, script: 0x5b, flags: 0x0},
1657 77: {region: 0x107, script: 0x20, flags: 0x0},
1658 78: {region: 0x166, script: 0x5, flags: 0x0},
1659 79: {region: 0x166, script: 0x5b, flags: 0x0},
1660 80: {region: 0x166, script: 0x5b, flags: 0x0},
1661 81: {region: 0x166, script: 0x5b, flags: 0x0},
1662 82: {region: 0x9a, script: 0x22, flags: 0x0},
1663 83: {region: 0x166, script: 0x5b, flags: 0x0},
1664 84: {region: 0x166, script: 0x5b, flags: 0x0},
1665 85: {region: 0x166, script: 0x5b, flags: 0x0},
1666 86: {region: 0x3f, script: 0x5b, flags: 0x0},
1667 87: {region: 0x166, script: 0x5b, flags: 0x0},
1668 88: {region: 0x3, script: 0x5, flags: 0x1},
1669 89: {region: 0x107, script: 0x20, flags: 0x0},
1670 90: {region: 0xe9, script: 0x5, flags: 0x0},
1671 91: {region: 0x96, script: 0x5b, flags: 0x0},
1672 92: {region: 0xdc, script: 0x22, flags: 0x0},
1673 93: {region: 0x2e, script: 0x5b, flags: 0x0},
1674 94: {region: 0x52, script: 0x5b, flags: 0x0},
1675 95: {region: 0x166, script: 0x5b, flags: 0x0},
1676 96: {region: 0x52, script: 0xb, flags: 0x0},
1677 97: {region: 0x166, script: 0x5b, flags: 0x0},
1678 98: {region: 0x166, script: 0x5b, flags: 0x0},
1679 99: {region: 0x96, script: 0x5b, flags: 0x0},
1680 100: {region: 0x166, script: 0x5b, flags: 0x0},
1681 101: {region: 0x52, script: 0x5b, flags: 0x0},
1682 102: {region: 0x166, script: 0x5b, flags: 0x0},
1683 103: {region: 0x166, script: 0x5b, flags: 0x0},
1684 104: {region: 0x166, script: 0x5b, flags: 0x0},
1685 105: {region: 0x166, script: 0x5b, flags: 0x0},
1686 106: {region: 0x4f, script: 0x5b, flags: 0x0},
1687 107: {region: 0x166, script: 0x5b, flags: 0x0},
1688 108: {region: 0x166, script: 0x5b, flags: 0x0},
1689 109: {region: 0x166, script: 0x5b, flags: 0x0},
1690 110: {region: 0x166, script: 0x2c, flags: 0x0},
1691 111: {region: 0x166, script: 0x5b, flags: 0x0},
1692 112: {region: 0x166, script: 0x5b, flags: 0x0},
1693 113: {region: 0x47, script: 0x20, flags: 0x0},
1694 114: {region: 0x166, script: 0x5b, flags: 0x0},
1695 115: {region: 0x166, script: 0x5b, flags: 0x0},
1696 116: {region: 0x10c, script: 0x5, flags: 0x0},
1697 117: {region: 0x163, script: 0x5b, flags: 0x0},
1698 118: {region: 0x166, script: 0x5b, flags: 0x0},
1699 119: {region: 0x96, script: 0x5b, flags: 0x0},
1700 120: {region: 0x166, script: 0x5b, flags: 0x0},
1701 121: {region: 0x130, script: 0x5b, flags: 0x0},
1702 122: {region: 0x52, script: 0x5b, flags: 0x0},
1703 123: {region: 0x9a, script: 0xe6, flags: 0x0},
1704 124: {region: 0xe9, script: 0x5, flags: 0x0},
1705 125: {region: 0x9a, script: 0x22, flags: 0x0},
1706 126: {region: 0x38, script: 0x20, flags: 0x0},
1707 127: {region: 0x9a, script: 0x22, flags: 0x0},
1708 128: {region: 0xe9, script: 0x5, flags: 0x0},
1709 129: {region: 0x12c, script: 0x34, flags: 0x0},
1710 131: {region: 0x9a, script: 0x22, flags: 0x0},
1711 132: {region: 0x166, script: 0x5b, flags: 0x0},
1712 133: {region: 0x9a, script: 0x22, flags: 0x0},
1713 134: {region: 0xe8, script: 0x5b, flags: 0x0},
1714 135: {region: 0x166, script: 0x5b, flags: 0x0},
1715 136: {region: 0x9a, script: 0x22, flags: 0x0},
1716 137: {region: 0x166, script: 0x5b, flags: 0x0},
1717 138: {region: 0x140, script: 0x5b, flags: 0x0},
1718 139: {region: 0x166, script: 0x5b, flags: 0x0},
1719 140: {region: 0x166, script: 0x5b, flags: 0x0},
1720 141: {region: 0xe8, script: 0x5b, flags: 0x0},
1721 142: {region: 0x166, script: 0x5b, flags: 0x0},
1722 143: {region: 0xd7, script: 0x5b, flags: 0x0},
1723 144: {region: 0x166, script: 0x5b, flags: 0x0},
1724 145: {region: 0x166, script: 0x5b, flags: 0x0},
1725 146: {region: 0x166, script: 0x5b, flags: 0x0},
1726 147: {region: 0x166, script: 0x2c, flags: 0x0},
1727 148: {region: 0x9a, script: 0x22, flags: 0x0},
1728 149: {region: 0x96, script: 0x5b, flags: 0x0},
1729 150: {region: 0x166, script: 0x5b, flags: 0x0},
1730 151: {region: 0x166, script: 0x5b, flags: 0x0},
1731 152: {region: 0x115, script: 0x5b, flags: 0x0},
1732 153: {region: 0x166, script: 0x5b, flags: 0x0},
1733 154: {region: 0x166, script: 0x5b, flags: 0x0},
1734 155: {region: 0x52, script: 0x5b, flags: 0x0},
1735 156: {region: 0x166, script: 0x5b, flags: 0x0},
1736 157: {region: 0xe8, script: 0x5b, flags: 0x0},
1737 158: {region: 0x166, script: 0x5b, flags: 0x0},
1738 159: {region: 0x13f, script: 0xe8, flags: 0x0},
1739 160: {region: 0xc4, script: 0x5b, flags: 0x0},
1740 161: {region: 0x166, script: 0x5b, flags: 0x0},
1741 162: {region: 0x166, script: 0x5b, flags: 0x0},
1742 163: {region: 0xc4, script: 0x5b, flags: 0x0},
1743 164: {region: 0x166, script: 0x5b, flags: 0x0},
1744 165: {region: 0x35, script: 0xe, flags: 0x0},
1745 166: {region: 0x166, script: 0x5b, flags: 0x0},
1746 167: {region: 0x166, script: 0x5b, flags: 0x0},
1747 168: {region: 0x166, script: 0x5b, flags: 0x0},
1748 169: {region: 0x53, script: 0xef, flags: 0x0},
1749 170: {region: 0x166, script: 0x5b, flags: 0x0},
1750 171: {region: 0x166, script: 0x5b, flags: 0x0},
1751 172: {region: 0x166, script: 0x5b, flags: 0x0},
1752 173: {region: 0x9a, script: 0xe, flags: 0x0},
1753 174: {region: 0x166, script: 0x5b, flags: 0x0},
1754 175: {region: 0x9d, script: 0x5, flags: 0x0},
1755 176: {region: 0x166, script: 0x5b, flags: 0x0},
1756 177: {region: 0x4f, script: 0x5b, flags: 0x0},
1757 178: {region: 0x79, script: 0x5b, flags: 0x0},
1758 179: {region: 0x9a, script: 0x22, flags: 0x0},
1759 180: {region: 0xe9, script: 0x5, flags: 0x0},
1760 181: {region: 0x9a, script: 0x22, flags: 0x0},
1761 182: {region: 0x166, script: 0x5b, flags: 0x0},
1762 183: {region: 0x33, script: 0x5b, flags: 0x0},
1763 184: {region: 0x166, script: 0x5b, flags: 0x0},
1764 185: {region: 0xb5, script: 0xc, flags: 0x0},
1765 186: {region: 0x52, script: 0x5b, flags: 0x0},
1766 187: {region: 0x166, script: 0x2c, flags: 0x0},
1767 188: {region: 0xe8, script: 0x5b, flags: 0x0},
1768 189: {region: 0x166, script: 0x5b, flags: 0x0},
1769 190: {region: 0xe9, script: 0x22, flags: 0x0},
1770 191: {region: 0x107, script: 0x20, flags: 0x0},
1771 192: {region: 0x160, script: 0x5b, flags: 0x0},
1772 193: {region: 0x166, script: 0x5b, flags: 0x0},
1773 194: {region: 0x96, script: 0x5b, flags: 0x0},
1774 195: {region: 0x166, script: 0x5b, flags: 0x0},
1775 196: {region: 0x52, script: 0x5b, flags: 0x0},
1776 197: {region: 0x166, script: 0x5b, flags: 0x0},
1777 198: {region: 0x166, script: 0x5b, flags: 0x0},
1778 199: {region: 0x166, script: 0x5b, flags: 0x0},
1779 200: {region: 0x87, script: 0x5b, flags: 0x0},
1780 201: {region: 0x166, script: 0x5b, flags: 0x0},
1781 202: {region: 0x166, script: 0x5b, flags: 0x0},
1782 203: {region: 0x166, script: 0x5b, flags: 0x0},
1783 204: {region: 0x166, script: 0x5b, flags: 0x0},
1784 205: {region: 0x6e, script: 0x2c, flags: 0x0},
1785 206: {region: 0x166, script: 0x5b, flags: 0x0},
1786 207: {region: 0x166, script: 0x5b, flags: 0x0},
1787 208: {region: 0x52, script: 0x5b, flags: 0x0},
1788 209: {region: 0x166, script: 0x5b, flags: 0x0},
1789 210: {region: 0x166, script: 0x5b, flags: 0x0},
1790 211: {region: 0xc4, script: 0x5b, flags: 0x0},
1791 212: {region: 0x166, script: 0x5b, flags: 0x0},
1792 213: {region: 0x166, script: 0x5b, flags: 0x0},
1793 214: {region: 0x166, script: 0x5b, flags: 0x0},
1794 215: {region: 0x6f, script: 0x5b, flags: 0x0},
1795 216: {region: 0x166, script: 0x5b, flags: 0x0},
1796 217: {region: 0x166, script: 0x5b, flags: 0x0},
1797 218: {region: 0xd7, script: 0x5b, flags: 0x0},
1798 219: {region: 0x35, script: 0x16, flags: 0x0},
1799 220: {region: 0x107, script: 0x20, flags: 0x0},
1800 221: {region: 0xe8, script: 0x5b, flags: 0x0},
1801 222: {region: 0x166, script: 0x5b, flags: 0x0},
1802 223: {region: 0x132, script: 0x5b, flags: 0x0},
1803 224: {region: 0x8b, script: 0x5b, flags: 0x0},
1804 225: {region: 0x76, script: 0x5b, flags: 0x0},
1805 226: {region: 0x107, script: 0x20, flags: 0x0},
1806 227: {region: 0x136, script: 0x5b, flags: 0x0},
1807 228: {region: 0x49, script: 0x5b, flags: 0x0},
1808 229: {region: 0x136, script: 0x1a, flags: 0x0},
1809 230: {region: 0xa7, script: 0x5, flags: 0x0},
1810 231: {region: 0x13f, script: 0x19, flags: 0x0},
1811 232: {region: 0x166, script: 0x5b, flags: 0x0},
1812 233: {region: 0x9c, script: 0x5, flags: 0x0},
1813 234: {region: 0x166, script: 0x5b, flags: 0x0},
1814 235: {region: 0x166, script: 0x5b, flags: 0x0},
1815 236: {region: 0x166, script: 0x5b, flags: 0x0},
1816 237: {region: 0x166, script: 0x5b, flags: 0x0},
1817 238: {region: 0x166, script: 0x5b, flags: 0x0},
1818 239: {region: 0xc6, script: 0xda, flags: 0x0},
1819 240: {region: 0x79, script: 0x5b, flags: 0x0},
1820 241: {region: 0x6c, script: 0x1d, flags: 0x0},
1821 242: {region: 0xe8, script: 0x5b, flags: 0x0},
1822 243: {region: 0x49, script: 0x17, flags: 0x0},
1823 244: {region: 0x131, script: 0x20, flags: 0x0},
1824 245: {region: 0x49, script: 0x17, flags: 0x0},
1825 246: {region: 0x49, script: 0x17, flags: 0x0},
1826 247: {region: 0x49, script: 0x17, flags: 0x0},
1827 248: {region: 0x49, script: 0x17, flags: 0x0},
1828 249: {region: 0x10b, script: 0x5b, flags: 0x0},
1829 250: {region: 0x5f, script: 0x5b, flags: 0x0},
1830 251: {region: 0xea, script: 0x5b, flags: 0x0},
1831 252: {region: 0x49, script: 0x17, flags: 0x0},
1832 253: {region: 0xc5, script: 0x88, flags: 0x0},
1833 254: {region: 0x8, script: 0x2, flags: 0x1},
1834 255: {region: 0x107, script: 0x20, flags: 0x0},
1835 256: {region: 0x7c, script: 0x5b, flags: 0x0},
1836 257: {region: 0x64, script: 0x5b, flags: 0x0},
1837 258: {region: 0x166, script: 0x5b, flags: 0x0},
1838 259: {region: 0x166, script: 0x5b, flags: 0x0},
1839 260: {region: 0x166, script: 0x5b, flags: 0x0},
1840 261: {region: 0x166, script: 0x5b, flags: 0x0},
1841 262: {region: 0x136, script: 0x5b, flags: 0x0},
1842 263: {region: 0x107, script: 0x20, flags: 0x0},
1843 264: {region: 0xa5, script: 0x5b, flags: 0x0},
1844 265: {region: 0x166, script: 0x5b, flags: 0x0},
1845 266: {region: 0x166, script: 0x5b, flags: 0x0},
1846 267: {region: 0x9a, script: 0x5, flags: 0x0},
1847 268: {region: 0x166, script: 0x5b, flags: 0x0},
1848 269: {region: 0x61, script: 0x5b, flags: 0x0},
1849 270: {region: 0x166, script: 0x5b, flags: 0x0},
1850 271: {region: 0x49, script: 0x5b, flags: 0x0},
1851 272: {region: 0x166, script: 0x5b, flags: 0x0},
1852 273: {region: 0x166, script: 0x5b, flags: 0x0},
1853 274: {region: 0x166, script: 0x5b, flags: 0x0},
1854 275: {region: 0x166, script: 0x5, flags: 0x0},
1855 276: {region: 0x49, script: 0x5b, flags: 0x0},
1856 277: {region: 0x166, script: 0x5b, flags: 0x0},
1857 278: {region: 0x166, script: 0x5b, flags: 0x0},
1858 279: {region: 0xd5, script: 0x5b, flags: 0x0},
1859 280: {region: 0x4f, script: 0x5b, flags: 0x0},
1860 281: {region: 0x166, script: 0x5b, flags: 0x0},
1861 282: {region: 0x9a, script: 0x5, flags: 0x0},
1862 283: {region: 0x166, script: 0x5b, flags: 0x0},
1863 284: {region: 0x166, script: 0x5b, flags: 0x0},
1864 285: {region: 0x166, script: 0x5b, flags: 0x0},
1865 286: {region: 0x166, script: 0x2c, flags: 0x0},
1866 287: {region: 0x61, script: 0x5b, flags: 0x0},
1867 288: {region: 0xc4, script: 0x5b, flags: 0x0},
1868 289: {region: 0xd1, script: 0x5b, flags: 0x0},
1869 290: {region: 0x166, script: 0x5b, flags: 0x0},
1870 291: {region: 0xdc, script: 0x22, flags: 0x0},
1871 292: {region: 0x52, script: 0x5b, flags: 0x0},
1872 293: {region: 0x166, script: 0x5b, flags: 0x0},
1873 294: {region: 0x166, script: 0x5b, flags: 0x0},
1874 295: {region: 0x166, script: 0x5b, flags: 0x0},
1875 296: {region: 0xce, script: 0xed, flags: 0x0},
1876 297: {region: 0x166, script: 0x5b, flags: 0x0},
1877 298: {region: 0x166, script: 0x5b, flags: 0x0},
1878 299: {region: 0x115, script: 0x5b, flags: 0x0},
1879 300: {region: 0x37, script: 0x5b, flags: 0x0},
1880 301: {region: 0x43, script: 0xef, flags: 0x0},
1881 302: {region: 0x166, script: 0x5b, flags: 0x0},
1882 303: {region: 0xa5, script: 0x5b, flags: 0x0},
1883 304: {region: 0x81, script: 0x5b, flags: 0x0},
1884 305: {region: 0xd7, script: 0x5b, flags: 0x0},
1885 306: {region: 0x9f, script: 0x5b, flags: 0x0},
1886 307: {region: 0x6c, script: 0x29, flags: 0x0},
1887 308: {region: 0x166, script: 0x5b, flags: 0x0},
1888 309: {region: 0xc5, script: 0x4b, flags: 0x0},
1889 310: {region: 0x88, script: 0x34, flags: 0x0},
1890 311: {region: 0x166, script: 0x5b, flags: 0x0},
1891 312: {region: 0x166, script: 0x5b, flags: 0x0},
1892 313: {region: 0xa, script: 0x2, flags: 0x1},
1893 314: {region: 0x166, script: 0x5b, flags: 0x0},
1894 315: {region: 0x166, script: 0x5b, flags: 0x0},
1895 316: {region: 0x1, script: 0x5b, flags: 0x0},
1896 317: {region: 0x166, script: 0x5b, flags: 0x0},
1897 318: {region: 0x6f, script: 0x5b, flags: 0x0},
1898 319: {region: 0x136, script: 0x5b, flags: 0x0},
1899 320: {region: 0x6b, script: 0x5b, flags: 0x0},
1900 321: {region: 0x166, script: 0x5b, flags: 0x0},
1901 322: {region: 0x9f, script: 0x46, flags: 0x0},
1902 323: {region: 0x166, script: 0x5b, flags: 0x0},
1903 324: {region: 0x166, script: 0x5b, flags: 0x0},
1904 325: {region: 0x6f, script: 0x5b, flags: 0x0},
1905 326: {region: 0x52, script: 0x5b, flags: 0x0},
1906 327: {region: 0x6f, script: 0x5b, flags: 0x0},
1907 328: {region: 0x9d, script: 0x5, flags: 0x0},
1908 329: {region: 0x166, script: 0x5b, flags: 0x0},
1909 330: {region: 0x166, script: 0x5b, flags: 0x0},
1910 331: {region: 0x166, script: 0x5b, flags: 0x0},
1911 332: {region: 0x166, script: 0x5b, flags: 0x0},
1912 333: {region: 0x87, script: 0x5b, flags: 0x0},
1913 334: {region: 0xc, script: 0x2, flags: 0x1},
1914 335: {region: 0x166, script: 0x5b, flags: 0x0},
1915 336: {region: 0xc4, script: 0x5b, flags: 0x0},
1916 337: {region: 0x73, script: 0x5b, flags: 0x0},
1917 338: {region: 0x10c, script: 0x5, flags: 0x0},
1918 339: {region: 0xe8, script: 0x5b, flags: 0x0},
1919 340: {region: 0x10d, script: 0x5b, flags: 0x0},
1920 341: {region: 0x74, script: 0x5b, flags: 0x0},
1921 342: {region: 0x166, script: 0x5b, flags: 0x0},
1922 343: {region: 0x166, script: 0x5b, flags: 0x0},
1923 344: {region: 0x77, script: 0x5b, flags: 0x0},
1924 345: {region: 0x166, script: 0x5b, flags: 0x0},
1925 346: {region: 0x3b, script: 0x5b, flags: 0x0},
1926 347: {region: 0x166, script: 0x5b, flags: 0x0},
1927 348: {region: 0x166, script: 0x5b, flags: 0x0},
1928 349: {region: 0x166, script: 0x5b, flags: 0x0},
1929 350: {region: 0x79, script: 0x5b, flags: 0x0},
1930 351: {region: 0x136, script: 0x5b, flags: 0x0},
1931 352: {region: 0x79, script: 0x5b, flags: 0x0},
1932 353: {region: 0x61, script: 0x5b, flags: 0x0},
1933 354: {region: 0x61, script: 0x5b, flags: 0x0},
1934 355: {region: 0x52, script: 0x5, flags: 0x0},
1935 356: {region: 0x141, script: 0x5b, flags: 0x0},
1936 357: {region: 0x166, script: 0x5b, flags: 0x0},
1937 358: {region: 0x85, script: 0x5b, flags: 0x0},
1938 359: {region: 0x166, script: 0x5b, flags: 0x0},
1939 360: {region: 0xd5, script: 0x5b, flags: 0x0},
1940 361: {region: 0x9f, script: 0x5b, flags: 0x0},
1941 362: {region: 0xd7, script: 0x5b, flags: 0x0},
1942 363: {region: 0x166, script: 0x5b, flags: 0x0},
1943 364: {region: 0x10c, script: 0x5b, flags: 0x0},
1944 365: {region: 0xda, script: 0x5b, flags: 0x0},
1945 366: {region: 0x97, script: 0x5b, flags: 0x0},
1946 367: {region: 0x81, script: 0x5b, flags: 0x0},
1947 368: {region: 0x166, script: 0x5b, flags: 0x0},
1948 369: {region: 0xbd, script: 0x5b, flags: 0x0},
1949 370: {region: 0x166, script: 0x5b, flags: 0x0},
1950 371: {region: 0x166, script: 0x5b, flags: 0x0},
1951 372: {region: 0x166, script: 0x5b, flags: 0x0},
1952 373: {region: 0x53, script: 0x3b, flags: 0x0},
1953 374: {region: 0x166, script: 0x5b, flags: 0x0},
1954 375: {region: 0x96, script: 0x5b, flags: 0x0},
1955 376: {region: 0x166, script: 0x5b, flags: 0x0},
1956 377: {region: 0x166, script: 0x5b, flags: 0x0},
1957 378: {region: 0x9a, script: 0x22, flags: 0x0},
1958 379: {region: 0x166, script: 0x5b, flags: 0x0},
1959 380: {region: 0x9d, script: 0x5, flags: 0x0},
1960 381: {region: 0x7f, script: 0x5b, flags: 0x0},
1961 382: {region: 0x7c, script: 0x5b, flags: 0x0},
1962 383: {region: 0x166, script: 0x5b, flags: 0x0},
1963 384: {region: 0x166, script: 0x5b, flags: 0x0},
1964 385: {region: 0x166, script: 0x5b, flags: 0x0},
1965 386: {region: 0x166, script: 0x5b, flags: 0x0},
1966 387: {region: 0x166, script: 0x5b, flags: 0x0},
1967 388: {region: 0x166, script: 0x5b, flags: 0x0},
1968 389: {region: 0x70, script: 0x2c, flags: 0x0},
1969 390: {region: 0x166, script: 0x5b, flags: 0x0},
1970 391: {region: 0xdc, script: 0x22, flags: 0x0},
1971 392: {region: 0x166, script: 0x5b, flags: 0x0},
1972 393: {region: 0xa8, script: 0x5b, flags: 0x0},
1973 394: {region: 0x166, script: 0x5b, flags: 0x0},
1974 395: {region: 0xe9, script: 0x5, flags: 0x0},
1975 396: {region: 0x166, script: 0x5b, flags: 0x0},
1976 397: {region: 0xe9, script: 0x5, flags: 0x0},
1977 398: {region: 0x166, script: 0x5b, flags: 0x0},
1978 399: {region: 0x166, script: 0x5b, flags: 0x0},
1979 400: {region: 0x6f, script: 0x5b, flags: 0x0},
1980 401: {region: 0x9d, script: 0x5, flags: 0x0},
1981 402: {region: 0x166, script: 0x5b, flags: 0x0},
1982 403: {region: 0x166, script: 0x2c, flags: 0x0},
1983 404: {region: 0xf2, script: 0x5b, flags: 0x0},
1984 405: {region: 0x166, script: 0x5b, flags: 0x0},
1985 406: {region: 0x166, script: 0x5b, flags: 0x0},
1986 407: {region: 0x166, script: 0x5b, flags: 0x0},
1987 408: {region: 0x166, script: 0x2c, flags: 0x0},
1988 409: {region: 0x166, script: 0x5b, flags: 0x0},
1989 410: {region: 0x9a, script: 0x22, flags: 0x0},
1990 411: {region: 0x9a, script: 0xe9, flags: 0x0},
1991 412: {region: 0x96, script: 0x5b, flags: 0x0},
1992 413: {region: 0xda, script: 0x5b, flags: 0x0},
1993 414: {region: 0x131, script: 0x32, flags: 0x0},
1994 415: {region: 0x166, script: 0x5b, flags: 0x0},
1995 416: {region: 0xe, script: 0x2, flags: 0x1},
1996 417: {region: 0x9a, script: 0xe, flags: 0x0},
1997 418: {region: 0x166, script: 0x5b, flags: 0x0},
1998 419: {region: 0x4e, script: 0x5b, flags: 0x0},
1999 420: {region: 0x9a, script: 0x35, flags: 0x0},
2000 421: {region: 0x41, script: 0x5b, flags: 0x0},
2001 422: {region: 0x54, script: 0x5b, flags: 0x0},
2002 423: {region: 0x166, script: 0x5b, flags: 0x0},
2003 424: {region: 0x81, script: 0x5b, flags: 0x0},
2004 425: {region: 0x166, script: 0x5b, flags: 0x0},
2005 426: {region: 0x166, script: 0x5b, flags: 0x0},
2006 427: {region: 0xa5, script: 0x5b, flags: 0x0},
2007 428: {region: 0x99, script: 0x5b, flags: 0x0},
2008 429: {region: 0x166, script: 0x5b, flags: 0x0},
2009 430: {region: 0xdc, script: 0x22, flags: 0x0},
2010 431: {region: 0x166, script: 0x5b, flags: 0x0},
2011 432: {region: 0x166, script: 0x5, flags: 0x0},
2012 433: {region: 0x49, script: 0x5b, flags: 0x0},
2013 434: {region: 0x166, script: 0x5, flags: 0x0},
2014 435: {region: 0x166, script: 0x5b, flags: 0x0},
2015 436: {region: 0x10, script: 0x3, flags: 0x1},
2016 437: {region: 0x166, script: 0x5b, flags: 0x0},
2017 438: {region: 0x53, script: 0x3b, flags: 0x0},
2018 439: {region: 0x166, script: 0x5b, flags: 0x0},
2019 440: {region: 0x136, script: 0x5b, flags: 0x0},
2020 441: {region: 0x24, script: 0x5, flags: 0x0},
2021 442: {region: 0x166, script: 0x5b, flags: 0x0},
2022 443: {region: 0x166, script: 0x2c, flags: 0x0},
2023 444: {region: 0x98, script: 0x3e, flags: 0x0},
2024 445: {region: 0x166, script: 0x5b, flags: 0x0},
2025 446: {region: 0x9a, script: 0x22, flags: 0x0},
2026 447: {region: 0x166, script: 0x5b, flags: 0x0},
2027 448: {region: 0x74, script: 0x5b, flags: 0x0},
2028 449: {region: 0x166, script: 0x5b, flags: 0x0},
2029 450: {region: 0x166, script: 0x5b, flags: 0x0},
2030 451: {region: 0xe8, script: 0x5b, flags: 0x0},
2031 452: {region: 0x166, script: 0x5b, flags: 0x0},
2032 453: {region: 0x12c, script: 0x40, flags: 0x0},
2033 454: {region: 0x53, script: 0x92, flags: 0x0},
2034 455: {region: 0x166, script: 0x5b, flags: 0x0},
2035 456: {region: 0xe9, script: 0x5, flags: 0x0},
2036 457: {region: 0x9a, script: 0x22, flags: 0x0},
2037 458: {region: 0xb0, script: 0x41, flags: 0x0},
2038 459: {region: 0xe8, script: 0x5b, flags: 0x0},
2039 460: {region: 0xe9, script: 0x5, flags: 0x0},
2040 461: {region: 0xe7, script: 0x5b, flags: 0x0},
2041 462: {region: 0x9a, script: 0x22, flags: 0x0},
2042 463: {region: 0x9a, script: 0x22, flags: 0x0},
2043 464: {region: 0x166, script: 0x5b, flags: 0x0},
2044 465: {region: 0x91, script: 0x5b, flags: 0x0},
2045 466: {region: 0x61, script: 0x5b, flags: 0x0},
2046 467: {region: 0x53, script: 0x3b, flags: 0x0},
2047 468: {region: 0x92, script: 0x5b, flags: 0x0},
2048 469: {region: 0x93, script: 0x5b, flags: 0x0},
2049 470: {region: 0x166, script: 0x5b, flags: 0x0},
2050 471: {region: 0x28, script: 0x8, flags: 0x0},
2051 472: {region: 0xd3, script: 0x5b, flags: 0x0},
2052 473: {region: 0x79, script: 0x5b, flags: 0x0},
2053 474: {region: 0x166, script: 0x5b, flags: 0x0},
2054 475: {region: 0x166, script: 0x5b, flags: 0x0},
2055 476: {region: 0xd1, script: 0x5b, flags: 0x0},
2056 477: {region: 0xd7, script: 0x5b, flags: 0x0},
2057 478: {region: 0x166, script: 0x5b, flags: 0x0},
2058 479: {region: 0x166, script: 0x5b, flags: 0x0},
2059 480: {region: 0x166, script: 0x5b, flags: 0x0},
2060 481: {region: 0x96, script: 0x5b, flags: 0x0},
2061 482: {region: 0x166, script: 0x5b, flags: 0x0},
2062 483: {region: 0x166, script: 0x5b, flags: 0x0},
2063 484: {region: 0x166, script: 0x5b, flags: 0x0},
2064 486: {region: 0x123, script: 0x5b, flags: 0x0},
2065 487: {region: 0xd7, script: 0x5b, flags: 0x0},
2066 488: {region: 0x166, script: 0x5b, flags: 0x0},
2067 489: {region: 0x166, script: 0x5b, flags: 0x0},
2068 490: {region: 0x53, script: 0xfd, flags: 0x0},
2069 491: {region: 0x166, script: 0x5b, flags: 0x0},
2070 492: {region: 0x136, script: 0x5b, flags: 0x0},
2071 493: {region: 0x166, script: 0x5b, flags: 0x0},
2072 494: {region: 0x49, script: 0x5b, flags: 0x0},
2073 495: {region: 0x166, script: 0x5b, flags: 0x0},
2074 496: {region: 0x166, script: 0x5b, flags: 0x0},
2075 497: {region: 0xe8, script: 0x5b, flags: 0x0},
2076 498: {region: 0x166, script: 0x5b, flags: 0x0},
2077 499: {region: 0x96, script: 0x5b, flags: 0x0},
2078 500: {region: 0x107, script: 0x20, flags: 0x0},
2079 501: {region: 0x1, script: 0x5b, flags: 0x0},
2080 502: {region: 0x166, script: 0x5b, flags: 0x0},
2081 503: {region: 0x166, script: 0x5b, flags: 0x0},
2082 504: {region: 0x9e, script: 0x5b, flags: 0x0},
2083 505: {region: 0x9f, script: 0x5b, flags: 0x0},
2084 506: {region: 0x49, script: 0x17, flags: 0x0},
2085 507: {region: 0x98, script: 0x3e, flags: 0x0},
2086 508: {region: 0x166, script: 0x5b, flags: 0x0},
2087 509: {region: 0x166, script: 0x5b, flags: 0x0},
2088 510: {region: 0x107, script: 0x5b, flags: 0x0},
2089 511: {region: 0x166, script: 0x5b, flags: 0x0},
2090 512: {region: 0xa3, script: 0x49, flags: 0x0},
2091 513: {region: 0x166, script: 0x5b, flags: 0x0},
2092 514: {region: 0xa1, script: 0x5b, flags: 0x0},
2093 515: {region: 0x1, script: 0x5b, flags: 0x0},
2094 516: {region: 0x166, script: 0x5b, flags: 0x0},
2095 517: {region: 0x166, script: 0x5b, flags: 0x0},
2096 518: {region: 0x166, script: 0x5b, flags: 0x0},
2097 519: {region: 0x52, script: 0x5b, flags: 0x0},
2098 520: {region: 0x131, script: 0x3e, flags: 0x0},
2099 521: {region: 0x166, script: 0x5b, flags: 0x0},
2100 522: {region: 0x130, script: 0x5b, flags: 0x0},
2101 523: {region: 0xdc, script: 0x22, flags: 0x0},
2102 524: {region: 0x166, script: 0x5b, flags: 0x0},
2103 525: {region: 0x64, script: 0x5b, flags: 0x0},
2104 526: {region: 0x96, script: 0x5b, flags: 0x0},
2105 527: {region: 0x96, script: 0x5b, flags: 0x0},
2106 528: {region: 0x7e, script: 0x2e, flags: 0x0},
2107 529: {region: 0x138, script: 0x20, flags: 0x0},
2108 530: {region: 0x68, script: 0x5b, flags: 0x0},
2109 531: {region: 0xc5, script: 0x5b, flags: 0x0},
2110 532: {region: 0x166, script: 0x5b, flags: 0x0},
2111 533: {region: 0x166, script: 0x5b, flags: 0x0},
2112 534: {region: 0xd7, script: 0x5b, flags: 0x0},
2113 535: {region: 0xa5, script: 0x5b, flags: 0x0},
2114 536: {region: 0xc4, script: 0x5b, flags: 0x0},
2115 537: {region: 0x107, script: 0x20, flags: 0x0},
2116 538: {region: 0x166, script: 0x5b, flags: 0x0},
2117 539: {region: 0x166, script: 0x5b, flags: 0x0},
2118 540: {region: 0x166, script: 0x5b, flags: 0x0},
2119 541: {region: 0x166, script: 0x5b, flags: 0x0},
2120 542: {region: 0xd5, script: 0x5, flags: 0x0},
2121 543: {region: 0xd7, script: 0x5b, flags: 0x0},
2122 544: {region: 0x165, script: 0x5b, flags: 0x0},
2123 545: {region: 0x166, script: 0x5b, flags: 0x0},
2124 546: {region: 0x166, script: 0x5b, flags: 0x0},
2125 547: {region: 0x130, script: 0x5b, flags: 0x0},
2126 548: {region: 0x123, script: 0x5, flags: 0x0},
2127 549: {region: 0x166, script: 0x5b, flags: 0x0},
2128 550: {region: 0x124, script: 0xee, flags: 0x0},
2129 551: {region: 0x5b, script: 0x5b, flags: 0x0},
2130 552: {region: 0x52, script: 0x5b, flags: 0x0},
2131 553: {region: 0x166, script: 0x5b, flags: 0x0},
2132 554: {region: 0x4f, script: 0x5b, flags: 0x0},
2133 555: {region: 0x9a, script: 0x22, flags: 0x0},
2134 556: {region: 0x9a, script: 0x22, flags: 0x0},
2135 557: {region: 0x4b, script: 0x5b, flags: 0x0},
2136 558: {region: 0x96, script: 0x5b, flags: 0x0},
2137 559: {region: 0x166, script: 0x5b, flags: 0x0},
2138 560: {region: 0x41, script: 0x5b, flags: 0x0},
2139 561: {region: 0x9a, script: 0x5b, flags: 0x0},
2140 562: {region: 0x53, script: 0xe5, flags: 0x0},
2141 563: {region: 0x9a, script: 0x22, flags: 0x0},
2142 564: {region: 0xc4, script: 0x5b, flags: 0x0},
2143 565: {region: 0x166, script: 0x5b, flags: 0x0},
2144 566: {region: 0x9a, script: 0x76, flags: 0x0},
2145 567: {region: 0xe9, script: 0x5, flags: 0x0},
2146 568: {region: 0x166, script: 0x5b, flags: 0x0},
2147 569: {region: 0xa5, script: 0x5b, flags: 0x0},
2148 570: {region: 0x166, script: 0x5b, flags: 0x0},
2149 571: {region: 0x12c, script: 0x5b, flags: 0x0},
2150 572: {region: 0x166, script: 0x5b, flags: 0x0},
2151 573: {region: 0xd3, script: 0x5b, flags: 0x0},
2152 574: {region: 0x166, script: 0x5b, flags: 0x0},
2153 575: {region: 0xb0, script: 0x58, flags: 0x0},
2154 576: {region: 0x166, script: 0x5b, flags: 0x0},
2155 577: {region: 0x166, script: 0x5b, flags: 0x0},
2156 578: {region: 0x13, script: 0x6, flags: 0x1},
2157 579: {region: 0x166, script: 0x5b, flags: 0x0},
2158 580: {region: 0x52, script: 0x5b, flags: 0x0},
2159 581: {region: 0x83, script: 0x5b, flags: 0x0},
2160 582: {region: 0xa5, script: 0x5b, flags: 0x0},
2161 583: {region: 0x166, script: 0x5b, flags: 0x0},
2162 584: {region: 0x166, script: 0x5b, flags: 0x0},
2163 585: {region: 0x166, script: 0x5b, flags: 0x0},
2164 586: {region: 0xa7, script: 0x4f, flags: 0x0},
2165 587: {region: 0x2a, script: 0x5b, flags: 0x0},
2166 588: {region: 0x166, script: 0x5b, flags: 0x0},
2167 589: {region: 0x166, script: 0x5b, flags: 0x0},
2168 590: {region: 0x166, script: 0x5b, flags: 0x0},
2169 591: {region: 0x166, script: 0x5b, flags: 0x0},
2170 592: {region: 0x166, script: 0x5b, flags: 0x0},
2171 593: {region: 0x9a, script: 0x53, flags: 0x0},
2172 594: {region: 0x8c, script: 0x5b, flags: 0x0},
2173 595: {region: 0x166, script: 0x5b, flags: 0x0},
2174 596: {region: 0xac, script: 0x54, flags: 0x0},
2175 597: {region: 0x107, script: 0x20, flags: 0x0},
2176 598: {region: 0x9a, script: 0x22, flags: 0x0},
2177 599: {region: 0x166, script: 0x5b, flags: 0x0},
2178 600: {region: 0x76, script: 0x5b, flags: 0x0},
2179 601: {region: 0x166, script: 0x5b, flags: 0x0},
2180 602: {region: 0xb5, script: 0x5b, flags: 0x0},
2181 603: {region: 0x166, script: 0x5b, flags: 0x0},
2182 604: {region: 0x166, script: 0x5b, flags: 0x0},
2183 605: {region: 0x166, script: 0x5b, flags: 0x0},
2184 606: {region: 0x166, script: 0x5b, flags: 0x0},
2185 607: {region: 0x166, script: 0x5b, flags: 0x0},
2186 608: {region: 0x166, script: 0x5b, flags: 0x0},
2187 609: {region: 0x166, script: 0x5b, flags: 0x0},
2188 610: {region: 0x166, script: 0x2c, flags: 0x0},
2189 611: {region: 0x166, script: 0x5b, flags: 0x0},
2190 612: {region: 0x107, script: 0x20, flags: 0x0},
2191 613: {region: 0x113, script: 0x5b, flags: 0x0},
2192 614: {region: 0xe8, script: 0x5b, flags: 0x0},
2193 615: {region: 0x107, script: 0x5b, flags: 0x0},
2194 616: {region: 0x166, script: 0x5b, flags: 0x0},
2195 617: {region: 0x9a, script: 0x22, flags: 0x0},
2196 618: {region: 0x9a, script: 0x5, flags: 0x0},
2197 619: {region: 0x130, script: 0x5b, flags: 0x0},
2198 620: {region: 0x166, script: 0x5b, flags: 0x0},
2199 621: {region: 0x52, script: 0x5b, flags: 0x0},
2200 622: {region: 0x61, script: 0x5b, flags: 0x0},
2201 623: {region: 0x166, script: 0x5b, flags: 0x0},
2202 624: {region: 0x166, script: 0x5b, flags: 0x0},
2203 625: {region: 0x166, script: 0x2c, flags: 0x0},
2204 626: {region: 0x166, script: 0x5b, flags: 0x0},
2205 627: {region: 0x166, script: 0x5b, flags: 0x0},
2206 628: {region: 0x19, script: 0x3, flags: 0x1},
2207 629: {region: 0x166, script: 0x5b, flags: 0x0},
2208 630: {region: 0x166, script: 0x5b, flags: 0x0},
2209 631: {region: 0x166, script: 0x5b, flags: 0x0},
2210 632: {region: 0x166, script: 0x5b, flags: 0x0},
2211 633: {region: 0x107, script: 0x20, flags: 0x0},
2212 634: {region: 0x166, script: 0x5b, flags: 0x0},
2213 635: {region: 0x166, script: 0x5b, flags: 0x0},
2214 636: {region: 0x166, script: 0x5b, flags: 0x0},
2215 637: {region: 0x107, script: 0x20, flags: 0x0},
2216 638: {region: 0x166, script: 0x5b, flags: 0x0},
2217 639: {region: 0x96, script: 0x5b, flags: 0x0},
2218 640: {region: 0xe9, script: 0x5, flags: 0x0},
2219 641: {region: 0x7c, script: 0x5b, flags: 0x0},
2220 642: {region: 0x166, script: 0x5b, flags: 0x0},
2221 643: {region: 0x166, script: 0x5b, flags: 0x0},
2222 644: {region: 0x166, script: 0x5b, flags: 0x0},
2223 645: {region: 0x166, script: 0x2c, flags: 0x0},
2224 646: {region: 0x124, script: 0xee, flags: 0x0},
2225 647: {region: 0xe9, script: 0x5, flags: 0x0},
2226 648: {region: 0x166, script: 0x5b, flags: 0x0},
2227 649: {region: 0x166, script: 0x5b, flags: 0x0},
2228 650: {region: 0x1c, script: 0x5, flags: 0x1},
2229 651: {region: 0x166, script: 0x5b, flags: 0x0},
2230 652: {region: 0x166, script: 0x5b, flags: 0x0},
2231 653: {region: 0x166, script: 0x5b, flags: 0x0},
2232 654: {region: 0x139, script: 0x5b, flags: 0x0},
2233 655: {region: 0x88, script: 0x5f, flags: 0x0},
2234 656: {region: 0x98, script: 0x3e, flags: 0x0},
2235 657: {region: 0x130, script: 0x5b, flags: 0x0},
2236 658: {region: 0xe9, script: 0x5, flags: 0x0},
2237 659: {region: 0x132, script: 0x5b, flags: 0x0},
2238 660: {region: 0x166, script: 0x5b, flags: 0x0},
2239 661: {region: 0xb8, script: 0x5b, flags: 0x0},
2240 662: {region: 0x107, script: 0x20, flags: 0x0},
2241 663: {region: 0x166, script: 0x5b, flags: 0x0},
2242 664: {region: 0x96, script: 0x5b, flags: 0x0},
2243 665: {region: 0x166, script: 0x5b, flags: 0x0},
2244 666: {region: 0x53, script: 0xee, flags: 0x0},
2245 667: {region: 0x166, script: 0x5b, flags: 0x0},
2246 668: {region: 0x166, script: 0x5b, flags: 0x0},
2247 669: {region: 0x166, script: 0x5b, flags: 0x0},
2248 670: {region: 0x166, script: 0x5b, flags: 0x0},
2249 671: {region: 0x9a, script: 0x5d, flags: 0x0},
2250 672: {region: 0x166, script: 0x5b, flags: 0x0},
2251 673: {region: 0x166, script: 0x5b, flags: 0x0},
2252 674: {region: 0x107, script: 0x20, flags: 0x0},
2253 675: {region: 0x132, script: 0x5b, flags: 0x0},
2254 676: {region: 0x166, script: 0x5b, flags: 0x0},
2255 677: {region: 0xda, script: 0x5b, flags: 0x0},
2256 678: {region: 0x166, script: 0x5b, flags: 0x0},
2257 679: {region: 0x166, script: 0x5b, flags: 0x0},
2258 680: {region: 0x21, script: 0x2, flags: 0x1},
2259 681: {region: 0x166, script: 0x5b, flags: 0x0},
2260 682: {region: 0x166, script: 0x5b, flags: 0x0},
2261 683: {region: 0x9f, script: 0x5b, flags: 0x0},
2262 684: {region: 0x53, script: 0x61, flags: 0x0},
2263 685: {region: 0x96, script: 0x5b, flags: 0x0},
2264 686: {region: 0x9d, script: 0x5, flags: 0x0},
2265 687: {region: 0x136, script: 0x5b, flags: 0x0},
2266 688: {region: 0x166, script: 0x5b, flags: 0x0},
2267 689: {region: 0x166, script: 0x5b, flags: 0x0},
2268 690: {region: 0x9a, script: 0xe9, flags: 0x0},
2269 691: {region: 0x9f, script: 0x5b, flags: 0x0},
2270 692: {region: 0x166, script: 0x5b, flags: 0x0},
2271 693: {region: 0x4b, script: 0x5b, flags: 0x0},
2272 694: {region: 0x166, script: 0x5b, flags: 0x0},
2273 695: {region: 0x166, script: 0x5b, flags: 0x0},
2274 696: {region: 0xb0, script: 0x58, flags: 0x0},
2275 697: {region: 0x166, script: 0x5b, flags: 0x0},
2276 698: {region: 0x166, script: 0x5b, flags: 0x0},
2277 699: {region: 0x4b, script: 0x5b, flags: 0x0},
2278 700: {region: 0x166, script: 0x5b, flags: 0x0},
2279 701: {region: 0x166, script: 0x5b, flags: 0x0},
2280 702: {region: 0x163, script: 0x5b, flags: 0x0},
2281 703: {region: 0x9d, script: 0x5, flags: 0x0},
2282 704: {region: 0xb7, script: 0x5b, flags: 0x0},
2283 705: {region: 0xb9, script: 0x5b, flags: 0x0},
2284 706: {region: 0x4b, script: 0x5b, flags: 0x0},
2285 707: {region: 0x4b, script: 0x5b, flags: 0x0},
2286 708: {region: 0xa5, script: 0x5b, flags: 0x0},
2287 709: {region: 0xa5, script: 0x5b, flags: 0x0},
2288 710: {region: 0x9d, script: 0x5, flags: 0x0},
2289 711: {region: 0xb9, script: 0x5b, flags: 0x0},
2290 712: {region: 0x124, script: 0xee, flags: 0x0},
2291 713: {region: 0x53, script: 0x3b, flags: 0x0},
2292 714: {region: 0x12c, script: 0x5b, flags: 0x0},
2293 715: {region: 0x96, script: 0x5b, flags: 0x0},
2294 716: {region: 0x52, script: 0x5b, flags: 0x0},
2295 717: {region: 0x9a, script: 0x22, flags: 0x0},
2296 718: {region: 0x9a, script: 0x22, flags: 0x0},
2297 719: {region: 0x96, script: 0x5b, flags: 0x0},
2298 720: {region: 0x23, script: 0x3, flags: 0x1},
2299 721: {region: 0xa5, script: 0x5b, flags: 0x0},
2300 722: {region: 0x166, script: 0x5b, flags: 0x0},
2301 723: {region: 0xd0, script: 0x5b, flags: 0x0},
2302 724: {region: 0x166, script: 0x5b, flags: 0x0},
2303 725: {region: 0x166, script: 0x5b, flags: 0x0},
2304 726: {region: 0x166, script: 0x5b, flags: 0x0},
2305 727: {region: 0x166, script: 0x5b, flags: 0x0},
2306 728: {region: 0x166, script: 0x5b, flags: 0x0},
2307 729: {region: 0x166, script: 0x5b, flags: 0x0},
2308 730: {region: 0x166, script: 0x5b, flags: 0x0},
2309 731: {region: 0x166, script: 0x5b, flags: 0x0},
2310 732: {region: 0x166, script: 0x5b, flags: 0x0},
2311 733: {region: 0x166, script: 0x5b, flags: 0x0},
2312 734: {region: 0x166, script: 0x5b, flags: 0x0},
2313 735: {region: 0x166, script: 0x5, flags: 0x0},
2314 736: {region: 0x107, script: 0x20, flags: 0x0},
2315 737: {region: 0xe8, script: 0x5b, flags: 0x0},
2316 738: {region: 0x166, script: 0x5b, flags: 0x0},
2317 739: {region: 0x96, script: 0x5b, flags: 0x0},
2318 740: {region: 0x166, script: 0x2c, flags: 0x0},
2319 741: {region: 0x166, script: 0x5b, flags: 0x0},
2320 742: {region: 0x166, script: 0x5b, flags: 0x0},
2321 743: {region: 0x166, script: 0x5b, flags: 0x0},
2322 744: {region: 0x113, script: 0x5b, flags: 0x0},
2323 745: {region: 0xa5, script: 0x5b, flags: 0x0},
2324 746: {region: 0x166, script: 0x5b, flags: 0x0},
2325 747: {region: 0x166, script: 0x5b, flags: 0x0},
2326 748: {region: 0x124, script: 0x5, flags: 0x0},
2327 749: {region: 0xcd, script: 0x5b, flags: 0x0},
2328 750: {region: 0x166, script: 0x5b, flags: 0x0},
2329 751: {region: 0x166, script: 0x5b, flags: 0x0},
2330 752: {region: 0x166, script: 0x5b, flags: 0x0},
2331 753: {region: 0xc0, script: 0x5b, flags: 0x0},
2332 754: {region: 0xd2, script: 0x5b, flags: 0x0},
2333 755: {region: 0x166, script: 0x5b, flags: 0x0},
2334 756: {region: 0x52, script: 0x5b, flags: 0x0},
2335 757: {region: 0xdc, script: 0x22, flags: 0x0},
2336 758: {region: 0x130, script: 0x5b, flags: 0x0},
2337 759: {region: 0xc1, script: 0x5b, flags: 0x0},
2338 760: {region: 0x166, script: 0x5b, flags: 0x0},
2339 761: {region: 0x166, script: 0x5b, flags: 0x0},
2340 762: {region: 0xe1, script: 0x5b, flags: 0x0},
2341 763: {region: 0x166, script: 0x5b, flags: 0x0},
2342 764: {region: 0x96, script: 0x5b, flags: 0x0},
2343 765: {region: 0x9c, script: 0x3d, flags: 0x0},
2344 766: {region: 0x166, script: 0x5b, flags: 0x0},
2345 767: {region: 0xc3, script: 0x20, flags: 0x0},
2346 768: {region: 0x166, script: 0x5, flags: 0x0},
2347 769: {region: 0x166, script: 0x5b, flags: 0x0},
2348 770: {region: 0x166, script: 0x5b, flags: 0x0},
2349 771: {region: 0x166, script: 0x5b, flags: 0x0},
2350 772: {region: 0x9a, script: 0x6f, flags: 0x0},
2351 773: {region: 0x166, script: 0x5b, flags: 0x0},
2352 774: {region: 0x166, script: 0x5b, flags: 0x0},
2353 775: {region: 0x10c, script: 0x5b, flags: 0x0},
2354 776: {region: 0x166, script: 0x5b, flags: 0x0},
2355 777: {region: 0x166, script: 0x5b, flags: 0x0},
2356 778: {region: 0x166, script: 0x5b, flags: 0x0},
2357 779: {region: 0x26, script: 0x3, flags: 0x1},
2358 780: {region: 0x166, script: 0x5b, flags: 0x0},
2359 781: {region: 0x166, script: 0x5b, flags: 0x0},
2360 782: {region: 0x9a, script: 0xe, flags: 0x0},
2361 783: {region: 0xc5, script: 0x76, flags: 0x0},
2362 785: {region: 0x166, script: 0x5b, flags: 0x0},
2363 786: {region: 0x49, script: 0x5b, flags: 0x0},
2364 787: {region: 0x49, script: 0x5b, flags: 0x0},
2365 788: {region: 0x37, script: 0x5b, flags: 0x0},
2366 789: {region: 0x166, script: 0x5b, flags: 0x0},
2367 790: {region: 0x166, script: 0x5b, flags: 0x0},
2368 791: {region: 0x166, script: 0x5b, flags: 0x0},
2369 792: {region: 0x166, script: 0x5b, flags: 0x0},
2370 793: {region: 0x166, script: 0x5b, flags: 0x0},
2371 794: {region: 0x166, script: 0x5b, flags: 0x0},
2372 795: {region: 0x9a, script: 0x22, flags: 0x0},
2373 796: {region: 0xdc, script: 0x22, flags: 0x0},
2374 797: {region: 0x107, script: 0x20, flags: 0x0},
2375 798: {region: 0x35, script: 0x73, flags: 0x0},
2376 799: {region: 0x29, script: 0x3, flags: 0x1},
2377 800: {region: 0xcc, script: 0x5b, flags: 0x0},
2378 801: {region: 0x166, script: 0x5b, flags: 0x0},
2379 802: {region: 0x166, script: 0x5b, flags: 0x0},
2380 803: {region: 0x166, script: 0x5b, flags: 0x0},
2381 804: {region: 0x9a, script: 0x22, flags: 0x0},
2382 805: {region: 0x52, script: 0x5b, flags: 0x0},
2383 807: {region: 0x166, script: 0x5b, flags: 0x0},
2384 808: {region: 0x136, script: 0x5b, flags: 0x0},
2385 809: {region: 0x166, script: 0x5b, flags: 0x0},
2386 810: {region: 0x166, script: 0x5b, flags: 0x0},
2387 811: {region: 0xe9, script: 0x5, flags: 0x0},
2388 812: {region: 0xc4, script: 0x5b, flags: 0x0},
2389 813: {region: 0x9a, script: 0x22, flags: 0x0},
2390 814: {region: 0x96, script: 0x5b, flags: 0x0},
2391 815: {region: 0x165, script: 0x5b, flags: 0x0},
2392 816: {region: 0x166, script: 0x5b, flags: 0x0},
2393 817: {region: 0xc5, script: 0x76, flags: 0x0},
2394 818: {region: 0x166, script: 0x5b, flags: 0x0},
2395 819: {region: 0x166, script: 0x2c, flags: 0x0},
2396 820: {region: 0x107, script: 0x20, flags: 0x0},
2397 821: {region: 0x166, script: 0x5b, flags: 0x0},
2398 822: {region: 0x132, script: 0x5b, flags: 0x0},
2399 823: {region: 0x9d, script: 0x67, flags: 0x0},
2400 824: {region: 0x166, script: 0x5b, flags: 0x0},
2401 825: {region: 0x166, script: 0x5b, flags: 0x0},
2402 826: {region: 0x9d, script: 0x5, flags: 0x0},
2403 827: {region: 0x166, script: 0x5b, flags: 0x0},
2404 828: {region: 0x166, script: 0x5b, flags: 0x0},
2405 829: {region: 0x166, script: 0x5b, flags: 0x0},
2406 830: {region: 0xde, script: 0x5b, flags: 0x0},
2407 831: {region: 0x166, script: 0x5b, flags: 0x0},
2408 832: {region: 0x166, script: 0x5b, flags: 0x0},
2409 834: {region: 0x166, script: 0x5b, flags: 0x0},
2410 835: {region: 0x53, script: 0x3b, flags: 0x0},
2411 836: {region: 0x9f, script: 0x5b, flags: 0x0},
2412 837: {region: 0xd3, script: 0x5b, flags: 0x0},
2413 838: {region: 0x166, script: 0x5b, flags: 0x0},
2414 839: {region: 0xdb, script: 0x5b, flags: 0x0},
2415 840: {region: 0x166, script: 0x5b, flags: 0x0},
2416 841: {region: 0x166, script: 0x5b, flags: 0x0},
2417 842: {region: 0x166, script: 0x5b, flags: 0x0},
2418 843: {region: 0xd0, script: 0x5b, flags: 0x0},
2419 844: {region: 0x166, script: 0x5b, flags: 0x0},
2420 845: {region: 0x166, script: 0x5b, flags: 0x0},
2421 846: {region: 0x165, script: 0x5b, flags: 0x0},
2422 847: {region: 0xd2, script: 0x5b, flags: 0x0},
2423 848: {region: 0x61, script: 0x5b, flags: 0x0},
2424 849: {region: 0xdc, script: 0x22, flags: 0x0},
2425 850: {region: 0x166, script: 0x5b, flags: 0x0},
2426 851: {region: 0xdc, script: 0x22, flags: 0x0},
2427 852: {region: 0x166, script: 0x5b, flags: 0x0},
2428 853: {region: 0x166, script: 0x5b, flags: 0x0},
2429 854: {region: 0xd3, script: 0x5b, flags: 0x0},
2430 855: {region: 0x166, script: 0x5b, flags: 0x0},
2431 856: {region: 0x166, script: 0x5b, flags: 0x0},
2432 857: {region: 0xd2, script: 0x5b, flags: 0x0},
2433 858: {region: 0x166, script: 0x5b, flags: 0x0},
2434 859: {region: 0xd0, script: 0x5b, flags: 0x0},
2435 860: {region: 0xd0, script: 0x5b, flags: 0x0},
2436 861: {region: 0x166, script: 0x5b, flags: 0x0},
2437 862: {region: 0x166, script: 0x5b, flags: 0x0},
2438 863: {region: 0x96, script: 0x5b, flags: 0x0},
2439 864: {region: 0x166, script: 0x5b, flags: 0x0},
2440 865: {region: 0xe0, script: 0x5b, flags: 0x0},
2441 866: {region: 0x166, script: 0x5b, flags: 0x0},
2442 867: {region: 0x166, script: 0x5b, flags: 0x0},
2443 868: {region: 0x9a, script: 0x5b, flags: 0x0},
2444 869: {region: 0x166, script: 0x5b, flags: 0x0},
2445 870: {region: 0x166, script: 0x5b, flags: 0x0},
2446 871: {region: 0xda, script: 0x5b, flags: 0x0},
2447 872: {region: 0x52, script: 0x5b, flags: 0x0},
2448 873: {region: 0x166, script: 0x5b, flags: 0x0},
2449 874: {region: 0xdb, script: 0x5b, flags: 0x0},
2450 875: {region: 0x166, script: 0x5b, flags: 0x0},
2451 876: {region: 0x52, script: 0x5b, flags: 0x0},
2452 877: {region: 0x166, script: 0x5b, flags: 0x0},
2453 878: {region: 0x166, script: 0x5b, flags: 0x0},
2454 879: {region: 0xdb, script: 0x5b, flags: 0x0},
2455 880: {region: 0x124, script: 0x57, flags: 0x0},
2456 881: {region: 0x9a, script: 0x22, flags: 0x0},
2457 882: {region: 0x10d, script: 0xcb, flags: 0x0},
2458 883: {region: 0x166, script: 0x5b, flags: 0x0},
2459 884: {region: 0x166, script: 0x5b, flags: 0x0},
2460 885: {region: 0x85, script: 0x7e, flags: 0x0},
2461 886: {region: 0x162, script: 0x5b, flags: 0x0},
2462 887: {region: 0x166, script: 0x5b, flags: 0x0},
2463 888: {region: 0x49, script: 0x17, flags: 0x0},
2464 889: {region: 0x166, script: 0x5b, flags: 0x0},
2465 890: {region: 0x162, script: 0x5b, flags: 0x0},
2466 891: {region: 0x166, script: 0x5b, flags: 0x0},
2467 892: {region: 0x166, script: 0x5b, flags: 0x0},
2468 893: {region: 0x166, script: 0x5b, flags: 0x0},
2469 894: {region: 0x166, script: 0x5b, flags: 0x0},
2470 895: {region: 0x166, script: 0x5b, flags: 0x0},
2471 896: {region: 0x118, script: 0x5b, flags: 0x0},
2472 897: {region: 0x166, script: 0x5b, flags: 0x0},
2473 898: {region: 0x166, script: 0x5b, flags: 0x0},
2474 899: {region: 0x136, script: 0x5b, flags: 0x0},
2475 900: {region: 0x166, script: 0x5b, flags: 0x0},
2476 901: {region: 0x53, script: 0x5b, flags: 0x0},
2477 902: {region: 0x166, script: 0x5b, flags: 0x0},
2478 903: {region: 0xcf, script: 0x5b, flags: 0x0},
2479 904: {region: 0x130, script: 0x5b, flags: 0x0},
2480 905: {region: 0x132, script: 0x5b, flags: 0x0},
2481 906: {region: 0x81, script: 0x5b, flags: 0x0},
2482 907: {region: 0x79, script: 0x5b, flags: 0x0},
2483 908: {region: 0x166, script: 0x5b, flags: 0x0},
2484 910: {region: 0x166, script: 0x5b, flags: 0x0},
2485 911: {region: 0x166, script: 0x5b, flags: 0x0},
2486 912: {region: 0x70, script: 0x5b, flags: 0x0},
2487 913: {region: 0x166, script: 0x5b, flags: 0x0},
2488 914: {region: 0x166, script: 0x5b, flags: 0x0},
2489 915: {region: 0x166, script: 0x5b, flags: 0x0},
2490 916: {region: 0x166, script: 0x5b, flags: 0x0},
2491 917: {region: 0x9a, script: 0x83, flags: 0x0},
2492 918: {region: 0x166, script: 0x5b, flags: 0x0},
2493 919: {region: 0x166, script: 0x5, flags: 0x0},
2494 920: {region: 0x7e, script: 0x20, flags: 0x0},
2495 921: {region: 0x136, script: 0x84, flags: 0x0},
2496 922: {region: 0x166, script: 0x5, flags: 0x0},
2497 923: {region: 0xc6, script: 0x82, flags: 0x0},
2498 924: {region: 0x166, script: 0x5b, flags: 0x0},
2499 925: {region: 0x2c, script: 0x3, flags: 0x1},
2500 926: {region: 0xe8, script: 0x5b, flags: 0x0},
2501 927: {region: 0x2f, script: 0x2, flags: 0x1},
2502 928: {region: 0xe8, script: 0x5b, flags: 0x0},
2503 929: {region: 0x30, script: 0x5b, flags: 0x0},
2504 930: {region: 0xf1, script: 0x5b, flags: 0x0},
2505 931: {region: 0x166, script: 0x5b, flags: 0x0},
2506 932: {region: 0x79, script: 0x5b, flags: 0x0},
2507 933: {region: 0xd7, script: 0x5b, flags: 0x0},
2508 934: {region: 0x136, script: 0x5b, flags: 0x0},
2509 935: {region: 0x49, script: 0x5b, flags: 0x0},
2510 936: {region: 0x166, script: 0x5b, flags: 0x0},
2511 937: {region: 0x9d, script: 0xfa, flags: 0x0},
2512 938: {region: 0x166, script: 0x5b, flags: 0x0},
2513 939: {region: 0x61, script: 0x5b, flags: 0x0},
2514 940: {region: 0x166, script: 0x5, flags: 0x0},
2515 941: {region: 0xb1, script: 0x90, flags: 0x0},
2516 943: {region: 0x166, script: 0x5b, flags: 0x0},
2517 944: {region: 0x166, script: 0x5b, flags: 0x0},
2518 945: {region: 0x9a, script: 0x12, flags: 0x0},
2519 946: {region: 0xa5, script: 0x5b, flags: 0x0},
2520 947: {region: 0xea, script: 0x5b, flags: 0x0},
2521 948: {region: 0x166, script: 0x5b, flags: 0x0},
2522 949: {region: 0x9f, script: 0x5b, flags: 0x0},
2523 950: {region: 0x166, script: 0x5b, flags: 0x0},
2524 951: {region: 0x166, script: 0x5b, flags: 0x0},
2525 952: {region: 0x88, script: 0x34, flags: 0x0},
2526 953: {region: 0x76, script: 0x5b, flags: 0x0},
2527 954: {region: 0x166, script: 0x5b, flags: 0x0},
2528 955: {region: 0xe9, script: 0x4e, flags: 0x0},
2529 956: {region: 0x9d, script: 0x5, flags: 0x0},
2530 957: {region: 0x1, script: 0x5b, flags: 0x0},
2531 958: {region: 0x24, script: 0x5, flags: 0x0},
2532 959: {region: 0x166, script: 0x5b, flags: 0x0},
2533 960: {region: 0x41, script: 0x5b, flags: 0x0},
2534 961: {region: 0x166, script: 0x5b, flags: 0x0},
2535 962: {region: 0x7b, script: 0x5b, flags: 0x0},
2536 963: {region: 0x166, script: 0x5b, flags: 0x0},
2537 964: {region: 0xe5, script: 0x5b, flags: 0x0},
2538 965: {region: 0x8a, script: 0x5b, flags: 0x0},
2539 966: {region: 0x6a, script: 0x5b, flags: 0x0},
2540 967: {region: 0x166, script: 0x5b, flags: 0x0},
2541 968: {region: 0x9a, script: 0x22, flags: 0x0},
2542 969: {region: 0x166, script: 0x5b, flags: 0x0},
2543 970: {region: 0x103, script: 0x5b, flags: 0x0},
2544 971: {region: 0x96, script: 0x5b, flags: 0x0},
2545 972: {region: 0x166, script: 0x5b, flags: 0x0},
2546 973: {region: 0x166, script: 0x5b, flags: 0x0},
2547 974: {region: 0x9f, script: 0x5b, flags: 0x0},
2548 975: {region: 0x166, script: 0x5, flags: 0x0},
2549 976: {region: 0x9a, script: 0x5b, flags: 0x0},
2550 977: {region: 0x31, script: 0x2, flags: 0x1},
2551 978: {region: 0xdc, script: 0x22, flags: 0x0},
2552 979: {region: 0x35, script: 0xe, flags: 0x0},
2553 980: {region: 0x4e, script: 0x5b, flags: 0x0},
2554 981: {region: 0x73, script: 0x5b, flags: 0x0},
2555 982: {region: 0x4e, script: 0x5b, flags: 0x0},
2556 983: {region: 0x9d, script: 0x5, flags: 0x0},
2557 984: {region: 0x10d, script: 0x5b, flags: 0x0},
2558 985: {region: 0x3a, script: 0x5b, flags: 0x0},
2559 986: {region: 0x166, script: 0x5b, flags: 0x0},
2560 987: {region: 0xd2, script: 0x5b, flags: 0x0},
2561 988: {region: 0x105, script: 0x5b, flags: 0x0},
2562 989: {region: 0x96, script: 0x5b, flags: 0x0},
2563 990: {region: 0x130, script: 0x5b, flags: 0x0},
2564 991: {region: 0x166, script: 0x5b, flags: 0x0},
2565 992: {region: 0x166, script: 0x5b, flags: 0x0},
2566 993: {region: 0x74, script: 0x5b, flags: 0x0},
2567 994: {region: 0x107, script: 0x20, flags: 0x0},
2568 995: {region: 0x131, script: 0x20, flags: 0x0},
2569 996: {region: 0x10a, script: 0x5b, flags: 0x0},
2570 997: {region: 0x108, script: 0x5b, flags: 0x0},
2571 998: {region: 0x130, script: 0x5b, flags: 0x0},
2572 999: {region: 0x166, script: 0x5b, flags: 0x0},
2573 1000: {region: 0xa3, script: 0x4c, flags: 0x0},
2574 1001: {region: 0x9a, script: 0x22, flags: 0x0},
2575 1002: {region: 0x81, script: 0x5b, flags: 0x0},
2576 1003: {region: 0x107, script: 0x20, flags: 0x0},
2577 1004: {region: 0xa5, script: 0x5b, flags: 0x0},
2578 1005: {region: 0x96, script: 0x5b, flags: 0x0},
2579 1006: {region: 0x9a, script: 0x5b, flags: 0x0},
2580 1007: {region: 0x115, script: 0x5b, flags: 0x0},
2581 1008: {region: 0x9a, script: 0xcf, flags: 0x0},
2582 1009: {region: 0x166, script: 0x5b, flags: 0x0},
2583 1010: {region: 0x166, script: 0x5b, flags: 0x0},
2584 1011: {region: 0x130, script: 0x5b, flags: 0x0},
2585 1012: {region: 0x9f, script: 0x5b, flags: 0x0},
2586 1013: {region: 0x9a, script: 0x22, flags: 0x0},
2587 1014: {region: 0x166, script: 0x5, flags: 0x0},
2588 1015: {region: 0x9f, script: 0x5b, flags: 0x0},
2589 1016: {region: 0x7c, script: 0x5b, flags: 0x0},
2590 1017: {region: 0x49, script: 0x5b, flags: 0x0},
2591 1018: {region: 0x33, script: 0x4, flags: 0x1},
2592 1019: {region: 0x9f, script: 0x5b, flags: 0x0},
2593 1020: {region: 0x9d, script: 0x5, flags: 0x0},
2594 1021: {region: 0xdb, script: 0x5b, flags: 0x0},
2595 1022: {region: 0x4f, script: 0x5b, flags: 0x0},
2596 1023: {region: 0xd2, script: 0x5b, flags: 0x0},
2597 1024: {region: 0xd0, script: 0x5b, flags: 0x0},
2598 1025: {region: 0xc4, script: 0x5b, flags: 0x0},
2599 1026: {region: 0x4c, script: 0x5b, flags: 0x0},
2600 1027: {region: 0x97, script: 0x80, flags: 0x0},
2601 1028: {region: 0xb7, script: 0x5b, flags: 0x0},
2602 1029: {region: 0x166, script: 0x2c, flags: 0x0},
2603 1030: {region: 0x166, script: 0x5b, flags: 0x0},
2604 1032: {region: 0xbb, script: 0xeb, flags: 0x0},
2605 1033: {region: 0x166, script: 0x5b, flags: 0x0},
2606 1034: {region: 0xc5, script: 0x76, flags: 0x0},
2607 1035: {region: 0x166, script: 0x5, flags: 0x0},
2608 1036: {region: 0xb4, script: 0xd6, flags: 0x0},
2609 1037: {region: 0x70, script: 0x5b, flags: 0x0},
2610 1038: {region: 0x166, script: 0x5b, flags: 0x0},
2611 1039: {region: 0x166, script: 0x5b, flags: 0x0},
2612 1040: {region: 0x166, script: 0x5b, flags: 0x0},
2613 1041: {region: 0x166, script: 0x5b, flags: 0x0},
2614 1042: {region: 0x112, script: 0x5b, flags: 0x0},
2615 1043: {region: 0x166, script: 0x5b, flags: 0x0},
2616 1044: {region: 0xe9, script: 0x5, flags: 0x0},
2617 1045: {region: 0x166, script: 0x5b, flags: 0x0},
2618 1046: {region: 0x110, script: 0x5b, flags: 0x0},
2619 1047: {region: 0x166, script: 0x5b, flags: 0x0},
2620 1048: {region: 0xea, script: 0x5b, flags: 0x0},
2621 1049: {region: 0x166, script: 0x5b, flags: 0x0},
2622 1050: {region: 0x96, script: 0x5b, flags: 0x0},
2623 1051: {region: 0x143, script: 0x5b, flags: 0x0},
2624 1052: {region: 0x10d, script: 0x5b, flags: 0x0},
2625 1054: {region: 0x10d, script: 0x5b, flags: 0x0},
2626 1055: {region: 0x73, script: 0x5b, flags: 0x0},
2627 1056: {region: 0x98, script: 0xcc, flags: 0x0},
2628 1057: {region: 0x166, script: 0x5b, flags: 0x0},
2629 1058: {region: 0x73, script: 0x5b, flags: 0x0},
2630 1059: {region: 0x165, script: 0x5b, flags: 0x0},
2631 1060: {region: 0x166, script: 0x5b, flags: 0x0},
2632 1061: {region: 0xc4, script: 0x5b, flags: 0x0},
2633 1062: {region: 0x166, script: 0x5b, flags: 0x0},
2634 1063: {region: 0x166, script: 0x5b, flags: 0x0},
2635 1064: {region: 0x166, script: 0x5b, flags: 0x0},
2636 1065: {region: 0x116, script: 0x5b, flags: 0x0},
2637 1066: {region: 0x166, script: 0x5b, flags: 0x0},
2638 1067: {region: 0x166, script: 0x5b, flags: 0x0},
2639 1068: {region: 0x124, script: 0xee, flags: 0x0},
2640 1069: {region: 0x166, script: 0x5b, flags: 0x0},
2641 1070: {region: 0x166, script: 0x5b, flags: 0x0},
2642 1071: {region: 0x166, script: 0x5b, flags: 0x0},
2643 1072: {region: 0x166, script: 0x5b, flags: 0x0},
2644 1073: {region: 0x27, script: 0x5b, flags: 0x0},
2645 1074: {region: 0x37, script: 0x5, flags: 0x1},
2646 1075: {region: 0x9a, script: 0xd9, flags: 0x0},
2647 1076: {region: 0x117, script: 0x5b, flags: 0x0},
2648 1077: {region: 0x115, script: 0x5b, flags: 0x0},
2649 1078: {region: 0x9a, script: 0x22, flags: 0x0},
2650 1079: {region: 0x162, script: 0x5b, flags: 0x0},
2651 1080: {region: 0x166, script: 0x5b, flags: 0x0},
2652 1081: {region: 0x166, script: 0x5b, flags: 0x0},
2653 1082: {region: 0x6e, script: 0x5b, flags: 0x0},
2654 1083: {region: 0x162, script: 0x5b, flags: 0x0},
2655 1084: {region: 0x166, script: 0x5b, flags: 0x0},
2656 1085: {region: 0x61, script: 0x5b, flags: 0x0},
2657 1086: {region: 0x96, script: 0x5b, flags: 0x0},
2658 1087: {region: 0x166, script: 0x5b, flags: 0x0},
2659 1088: {region: 0x166, script: 0x5b, flags: 0x0},
2660 1089: {region: 0x130, script: 0x5b, flags: 0x0},
2661 1090: {region: 0x166, script: 0x5b, flags: 0x0},
2662 1091: {region: 0x85, script: 0x5b, flags: 0x0},
2663 1092: {region: 0x10d, script: 0x5b, flags: 0x0},
2664 1093: {region: 0x130, script: 0x5b, flags: 0x0},
2665 1094: {region: 0x160, script: 0x5, flags: 0x0},
2666 1095: {region: 0x4b, script: 0x5b, flags: 0x0},
2667 1096: {region: 0x61, script: 0x5b, flags: 0x0},
2668 1097: {region: 0x166, script: 0x5b, flags: 0x0},
2669 1098: {region: 0x9a, script: 0x22, flags: 0x0},
2670 1099: {region: 0x96, script: 0x5b, flags: 0x0},
2671 1100: {region: 0x166, script: 0x5b, flags: 0x0},
2672 1101: {region: 0x35, script: 0xe, flags: 0x0},
2673 1102: {region: 0x9c, script: 0xde, flags: 0x0},
2674 1103: {region: 0xea, script: 0x5b, flags: 0x0},
2675 1104: {region: 0x9a, script: 0xe6, flags: 0x0},
2676 1105: {region: 0xdc, script: 0x22, flags: 0x0},
2677 1106: {region: 0x166, script: 0x5b, flags: 0x0},
2678 1107: {region: 0x166, script: 0x5b, flags: 0x0},
2679 1108: {region: 0x166, script: 0x5b, flags: 0x0},
2680 1109: {region: 0x166, script: 0x5b, flags: 0x0},
2681 1110: {region: 0x166, script: 0x5b, flags: 0x0},
2682 1111: {region: 0x166, script: 0x5b, flags: 0x0},
2683 1112: {region: 0x166, script: 0x5b, flags: 0x0},
2684 1113: {region: 0x166, script: 0x5b, flags: 0x0},
2685 1114: {region: 0xe8, script: 0x5b, flags: 0x0},
2686 1115: {region: 0x166, script: 0x5b, flags: 0x0},
2687 1116: {region: 0x166, script: 0x5b, flags: 0x0},
2688 1117: {region: 0x9a, script: 0x53, flags: 0x0},
2689 1118: {region: 0x53, script: 0xe4, flags: 0x0},
2690 1119: {region: 0xdc, script: 0x22, flags: 0x0},
2691 1120: {region: 0xdc, script: 0x22, flags: 0x0},
2692 1121: {region: 0x9a, script: 0xe9, flags: 0x0},
2693 1122: {region: 0x166, script: 0x5b, flags: 0x0},
2694 1123: {region: 0x113, script: 0x5b, flags: 0x0},
2695 1124: {region: 0x132, script: 0x5b, flags: 0x0},
2696 1125: {region: 0x127, script: 0x5b, flags: 0x0},
2697 1126: {region: 0x166, script: 0x5b, flags: 0x0},
2698 1127: {region: 0x3c, script: 0x3, flags: 0x1},
2699 1128: {region: 0x166, script: 0x5b, flags: 0x0},
2700 1129: {region: 0x166, script: 0x5b, flags: 0x0},
2701 1130: {region: 0x166, script: 0x5b, flags: 0x0},
2702 1131: {region: 0x124, script: 0xee, flags: 0x0},
2703 1132: {region: 0xdc, script: 0x22, flags: 0x0},
2704 1133: {region: 0xdc, script: 0x22, flags: 0x0},
2705 1134: {region: 0xdc, script: 0x22, flags: 0x0},
2706 1135: {region: 0x70, script: 0x2c, flags: 0x0},
2707 1136: {region: 0x166, script: 0x5b, flags: 0x0},
2708 1137: {region: 0x6e, script: 0x2c, flags: 0x0},
2709 1138: {region: 0x166, script: 0x5b, flags: 0x0},
2710 1139: {region: 0x166, script: 0x5b, flags: 0x0},
2711 1140: {region: 0x166, script: 0x5b, flags: 0x0},
2712 1141: {region: 0xd7, script: 0x5b, flags: 0x0},
2713 1142: {region: 0x128, script: 0x5b, flags: 0x0},
2714 1143: {region: 0x126, script: 0x5b, flags: 0x0},
2715 1144: {region: 0x32, script: 0x5b, flags: 0x0},
2716 1145: {region: 0xdc, script: 0x22, flags: 0x0},
2717 1146: {region: 0xe8, script: 0x5b, flags: 0x0},
2718 1147: {region: 0x166, script: 0x5b, flags: 0x0},
2719 1148: {region: 0x166, script: 0x5b, flags: 0x0},
2720 1149: {region: 0x32, script: 0x5b, flags: 0x0},
2721 1150: {region: 0xd5, script: 0x5b, flags: 0x0},
2722 1151: {region: 0x166, script: 0x5b, flags: 0x0},
2723 1152: {region: 0x162, script: 0x5b, flags: 0x0},
2724 1153: {region: 0x166, script: 0x5b, flags: 0x0},
2725 1154: {region: 0x12a, script: 0x5b, flags: 0x0},
2726 1155: {region: 0x166, script: 0x5b, flags: 0x0},
2727 1156: {region: 0xcf, script: 0x5b, flags: 0x0},
2728 1157: {region: 0x166, script: 0x5b, flags: 0x0},
2729 1158: {region: 0xe7, script: 0x5b, flags: 0x0},
2730 1159: {region: 0x166, script: 0x5b, flags: 0x0},
2731 1160: {region: 0x166, script: 0x5b, flags: 0x0},
2732 1161: {region: 0x166, script: 0x5b, flags: 0x0},
2733 1162: {region: 0x12c, script: 0x5b, flags: 0x0},
2734 1163: {region: 0x12c, script: 0x5b, flags: 0x0},
2735 1164: {region: 0x12f, script: 0x5b, flags: 0x0},
2736 1165: {region: 0x166, script: 0x5, flags: 0x0},
2737 1166: {region: 0x162, script: 0x5b, flags: 0x0},
2738 1167: {region: 0x88, script: 0x34, flags: 0x0},
2739 1168: {region: 0xdc, script: 0x22, flags: 0x0},
2740 1169: {region: 0xe8, script: 0x5b, flags: 0x0},
2741 1170: {region: 0x43, script: 0xef, flags: 0x0},
2742 1171: {region: 0x166, script: 0x5b, flags: 0x0},
2743 1172: {region: 0x107, script: 0x20, flags: 0x0},
2744 1173: {region: 0x166, script: 0x5b, flags: 0x0},
2745 1174: {region: 0x166, script: 0x5b, flags: 0x0},
2746 1175: {region: 0x132, script: 0x5b, flags: 0x0},
2747 1176: {region: 0x166, script: 0x5b, flags: 0x0},
2748 1177: {region: 0x124, script: 0xee, flags: 0x0},
2749 1178: {region: 0x32, script: 0x5b, flags: 0x0},
2750 1179: {region: 0x166, script: 0x5b, flags: 0x0},
2751 1180: {region: 0x166, script: 0x5b, flags: 0x0},
2752 1181: {region: 0xcf, script: 0x5b, flags: 0x0},
2753 1182: {region: 0x166, script: 0x5b, flags: 0x0},
2754 1183: {region: 0x166, script: 0x5b, flags: 0x0},
2755 1184: {region: 0x12e, script: 0x5b, flags: 0x0},
2756 1185: {region: 0x166, script: 0x5b, flags: 0x0},
2757 1187: {region: 0x166, script: 0x5b, flags: 0x0},
2758 1188: {region: 0xd5, script: 0x5b, flags: 0x0},
2759 1189: {region: 0x53, script: 0xe7, flags: 0x0},
2760 1190: {region: 0xe6, script: 0x5b, flags: 0x0},
2761 1191: {region: 0x166, script: 0x5b, flags: 0x0},
2762 1192: {region: 0x107, script: 0x20, flags: 0x0},
2763 1193: {region: 0xbb, script: 0x5b, flags: 0x0},
2764 1194: {region: 0x166, script: 0x5b, flags: 0x0},
2765 1195: {region: 0x107, script: 0x20, flags: 0x0},
2766 1196: {region: 0x3f, script: 0x4, flags: 0x1},
2767 1197: {region: 0x11d, script: 0xf3, flags: 0x0},
2768 1198: {region: 0x131, script: 0x20, flags: 0x0},
2769 1199: {region: 0x76, script: 0x5b, flags: 0x0},
2770 1200: {region: 0x2a, script: 0x5b, flags: 0x0},
2771 1202: {region: 0x43, script: 0x3, flags: 0x1},
2772 1203: {region: 0x9a, script: 0xe, flags: 0x0},
2773 1204: {region: 0xe9, script: 0x5, flags: 0x0},
2774 1205: {region: 0x166, script: 0x5b, flags: 0x0},
2775 1206: {region: 0x166, script: 0x5b, flags: 0x0},
2776 1207: {region: 0x166, script: 0x5b, flags: 0x0},
2777 1208: {region: 0x166, script: 0x5b, flags: 0x0},
2778 1209: {region: 0x166, script: 0x5b, flags: 0x0},
2779 1210: {region: 0x166, script: 0x5b, flags: 0x0},
2780 1211: {region: 0x166, script: 0x5b, flags: 0x0},
2781 1212: {region: 0x46, script: 0x4, flags: 0x1},
2782 1213: {region: 0x166, script: 0x5b, flags: 0x0},
2783 1214: {region: 0xb5, script: 0xf4, flags: 0x0},
2784 1215: {region: 0x166, script: 0x5b, flags: 0x0},
2785 1216: {region: 0x162, script: 0x5b, flags: 0x0},
2786 1217: {region: 0x9f, script: 0x5b, flags: 0x0},
2787 1218: {region: 0x107, script: 0x5b, flags: 0x0},
2788 1219: {region: 0x13f, script: 0x5b, flags: 0x0},
2789 1220: {region: 0x11c, script: 0x5b, flags: 0x0},
2790 1221: {region: 0x166, script: 0x5b, flags: 0x0},
2791 1222: {region: 0x36, script: 0x5b, flags: 0x0},
2792 1223: {region: 0x61, script: 0x5b, flags: 0x0},
2793 1224: {region: 0xd2, script: 0x5b, flags: 0x0},
2794 1225: {region: 0x1, script: 0x5b, flags: 0x0},
2795 1226: {region: 0x107, script: 0x5b, flags: 0x0},
2796 1227: {region: 0x6b, script: 0x5b, flags: 0x0},
2797 1228: {region: 0x130, script: 0x5b, flags: 0x0},
2798 1229: {region: 0x166, script: 0x5b, flags: 0x0},
2799 1230: {region: 0x36, script: 0x5b, flags: 0x0},
2800 1231: {region: 0x4e, script: 0x5b, flags: 0x0},
2801 1232: {region: 0x166, script: 0x5b, flags: 0x0},
2802 1233: {region: 0x70, script: 0x2c, flags: 0x0},
2803 1234: {region: 0x166, script: 0x5b, flags: 0x0},
2804 1235: {region: 0xe8, script: 0x5b, flags: 0x0},
2805 1236: {region: 0x2f, script: 0x5b, flags: 0x0},
2806 1237: {region: 0x9a, script: 0xe9, flags: 0x0},
2807 1238: {region: 0x9a, script: 0x22, flags: 0x0},
2808 1239: {region: 0x166, script: 0x5b, flags: 0x0},
2809 1240: {region: 0x166, script: 0x5b, flags: 0x0},
2810 1241: {region: 0x166, script: 0x5b, flags: 0x0},
2811 1242: {region: 0x166, script: 0x5b, flags: 0x0},
2812 1243: {region: 0x166, script: 0x5b, flags: 0x0},
2813 1244: {region: 0x166, script: 0x5b, flags: 0x0},
2814 1245: {region: 0x166, script: 0x5b, flags: 0x0},
2815 1246: {region: 0x166, script: 0x5b, flags: 0x0},
2816 1247: {region: 0x166, script: 0x5b, flags: 0x0},
2817 1248: {region: 0x141, script: 0x5b, flags: 0x0},
2818 1249: {region: 0x166, script: 0x5b, flags: 0x0},
2819 1250: {region: 0x166, script: 0x5b, flags: 0x0},
2820 1251: {region: 0xa9, script: 0x5, flags: 0x0},
2821 1252: {region: 0x166, script: 0x5b, flags: 0x0},
2822 1253: {region: 0x115, script: 0x5b, flags: 0x0},
2823 1254: {region: 0x166, script: 0x5b, flags: 0x0},
2824 1255: {region: 0x166, script: 0x5b, flags: 0x0},
2825 1256: {region: 0x166, script: 0x5b, flags: 0x0},
2826 1257: {region: 0x166, script: 0x5b, flags: 0x0},
2827 1258: {region: 0x9a, script: 0x22, flags: 0x0},
2828 1259: {region: 0x53, script: 0x3b, flags: 0x0},
2829 1260: {region: 0x166, script: 0x5b, flags: 0x0},
2830 1261: {region: 0x166, script: 0x5b, flags: 0x0},
2831 1262: {region: 0x41, script: 0x5b, flags: 0x0},
2832 1263: {region: 0x166, script: 0x5b, flags: 0x0},
2833 1264: {region: 0x12c, script: 0x18, flags: 0x0},
2834 1265: {region: 0x166, script: 0x5b, flags: 0x0},
2835 1266: {region: 0x162, script: 0x5b, flags: 0x0},
2836 1267: {region: 0x166, script: 0x5b, flags: 0x0},
2837 1268: {region: 0x12c, script: 0x63, flags: 0x0},
2838 1269: {region: 0x12c, script: 0x64, flags: 0x0},
2839 1270: {region: 0x7e, script: 0x2e, flags: 0x0},
2840 1271: {region: 0x53, script: 0x68, flags: 0x0},
2841 1272: {region: 0x10c, script: 0x6d, flags: 0x0},
2842 1273: {region: 0x109, script: 0x79, flags: 0x0},
2843 1274: {region: 0x9a, script: 0x22, flags: 0x0},
2844 1275: {region: 0x132, script: 0x5b, flags: 0x0},
2845 1276: {region: 0x166, script: 0x5b, flags: 0x0},
2846 1277: {region: 0x9d, script: 0x93, flags: 0x0},
2847 1278: {region: 0x166, script: 0x5b, flags: 0x0},
2848 1279: {region: 0x15f, script: 0xce, flags: 0x0},
2849 1280: {region: 0x166, script: 0x5b, flags: 0x0},
2850 1281: {region: 0x166, script: 0x5b, flags: 0x0},
2851 1282: {region: 0xdc, script: 0x22, flags: 0x0},
2852 1283: {region: 0x166, script: 0x5b, flags: 0x0},
2853 1284: {region: 0x166, script: 0x5b, flags: 0x0},
2854 1285: {region: 0xd2, script: 0x5b, flags: 0x0},
2855 1286: {region: 0x76, script: 0x5b, flags: 0x0},
2856 1287: {region: 0x166, script: 0x5b, flags: 0x0},
2857 1288: {region: 0x166, script: 0x5b, flags: 0x0},
2858 1289: {region: 0x52, script: 0x5b, flags: 0x0},
2859 1290: {region: 0x166, script: 0x5b, flags: 0x0},
2860 1291: {region: 0x166, script: 0x5b, flags: 0x0},
2861 1292: {region: 0x166, script: 0x5b, flags: 0x0},
2862 1293: {region: 0x52, script: 0x5b, flags: 0x0},
2863 1294: {region: 0x166, script: 0x5b, flags: 0x0},
2864 1295: {region: 0x166, script: 0x5b, flags: 0x0},
2865 1296: {region: 0x166, script: 0x5b, flags: 0x0},
2866 1297: {region: 0x166, script: 0x5b, flags: 0x0},
2867 1298: {region: 0x1, script: 0x3e, flags: 0x0},
2868 1299: {region: 0x166, script: 0x5b, flags: 0x0},
2869 1300: {region: 0x166, script: 0x5b, flags: 0x0},
2870 1301: {region: 0x166, script: 0x5b, flags: 0x0},
2871 1302: {region: 0x166, script: 0x5b, flags: 0x0},
2872 1303: {region: 0x166, script: 0x5b, flags: 0x0},
2873 1304: {region: 0xd7, script: 0x5b, flags: 0x0},
2874 1305: {region: 0x166, script: 0x5b, flags: 0x0},
2875 1306: {region: 0x166, script: 0x5b, flags: 0x0},
2876 1307: {region: 0x166, script: 0x5b, flags: 0x0},
2877 1308: {region: 0x41, script: 0x5b, flags: 0x0},
2878 1309: {region: 0x166, script: 0x5b, flags: 0x0},
2879 1310: {region: 0xd0, script: 0x5b, flags: 0x0},
2880 1311: {region: 0x4a, script: 0x3, flags: 0x1},
2881 1312: {region: 0x166, script: 0x5b, flags: 0x0},
2882 1313: {region: 0x166, script: 0x5b, flags: 0x0},
2883 1314: {region: 0x166, script: 0x5b, flags: 0x0},
2884 1315: {region: 0x53, script: 0x5b, flags: 0x0},
2885 1316: {region: 0x10c, script: 0x5b, flags: 0x0},
2886 1318: {region: 0xa9, script: 0x5, flags: 0x0},
2887 1319: {region: 0xda, script: 0x5b, flags: 0x0},
2888 1320: {region: 0xbb, script: 0xeb, flags: 0x0},
2889 1321: {region: 0x4d, script: 0x14, flags: 0x1},
2890 1322: {region: 0x53, script: 0x7f, flags: 0x0},
2891 1323: {region: 0x166, script: 0x5b, flags: 0x0},
2892 1324: {region: 0x123, script: 0x5b, flags: 0x0},
2893 1325: {region: 0xd1, script: 0x5b, flags: 0x0},
2894 1326: {region: 0x166, script: 0x5b, flags: 0x0},
2895 1327: {region: 0x162, script: 0x5b, flags: 0x0},
2896 1329: {region: 0x12c, script: 0x5b, flags: 0x0},
2897}
2898
2899// likelyLangList holds lists info associated with likelyLang.
2900// Size: 582 bytes, 97 elements
2901var likelyLangList = [97]likelyScriptRegion{
2902 0: {region: 0x9d, script: 0x7, flags: 0x0},
2903 1: {region: 0xa2, script: 0x7a, flags: 0x2},
2904 2: {region: 0x11d, script: 0x87, flags: 0x2},
2905 3: {region: 0x32, script: 0x5b, flags: 0x0},
2906 4: {region: 0x9c, script: 0x5, flags: 0x4},
2907 5: {region: 0x9d, script: 0x5, flags: 0x4},
2908 6: {region: 0x107, script: 0x20, flags: 0x4},
2909 7: {region: 0x9d, script: 0x5, flags: 0x2},
2910 8: {region: 0x107, script: 0x20, flags: 0x0},
2911 9: {region: 0x38, script: 0x2f, flags: 0x2},
2912 10: {region: 0x136, script: 0x5b, flags: 0x0},
2913 11: {region: 0x7c, script: 0xd1, flags: 0x2},
2914 12: {region: 0x115, script: 0x5b, flags: 0x0},
2915 13: {region: 0x85, script: 0x1, flags: 0x2},
2916 14: {region: 0x5e, script: 0x1f, flags: 0x0},
2917 15: {region: 0x88, script: 0x60, flags: 0x2},
2918 16: {region: 0xd7, script: 0x5b, flags: 0x0},
2919 17: {region: 0x52, script: 0x5, flags: 0x4},
2920 18: {region: 0x10c, script: 0x5, flags: 0x4},
2921 19: {region: 0xaf, script: 0x20, flags: 0x0},
2922 20: {region: 0x24, script: 0x5, flags: 0x4},
2923 21: {region: 0x53, script: 0x5, flags: 0x4},
2924 22: {region: 0x9d, script: 0x5, flags: 0x4},
2925 23: {region: 0xc6, script: 0x5, flags: 0x4},
2926 24: {region: 0x53, script: 0x5, flags: 0x2},
2927 25: {region: 0x12c, script: 0x5b, flags: 0x0},
2928 26: {region: 0xb1, script: 0x5, flags: 0x4},
2929 27: {region: 0x9c, script: 0x5, flags: 0x2},
2930 28: {region: 0xa6, script: 0x20, flags: 0x0},
2931 29: {region: 0x53, script: 0x5, flags: 0x4},
2932 30: {region: 0x12c, script: 0x5b, flags: 0x4},
2933 31: {region: 0x53, script: 0x5, flags: 0x2},
2934 32: {region: 0x12c, script: 0x5b, flags: 0x2},
2935 33: {region: 0xdc, script: 0x22, flags: 0x0},
2936 34: {region: 0x9a, script: 0x5e, flags: 0x2},
2937 35: {region: 0x84, script: 0x5b, flags: 0x0},
2938 36: {region: 0x85, script: 0x7e, flags: 0x4},
2939 37: {region: 0x85, script: 0x7e, flags: 0x2},
2940 38: {region: 0xc6, script: 0x20, flags: 0x0},
2941 39: {region: 0x53, script: 0x71, flags: 0x4},
2942 40: {region: 0x53, script: 0x71, flags: 0x2},
2943 41: {region: 0xd1, script: 0x5b, flags: 0x0},
2944 42: {region: 0x4a, script: 0x5, flags: 0x4},
2945 43: {region: 0x96, script: 0x5, flags: 0x4},
2946 44: {region: 0x9a, script: 0x36, flags: 0x0},
2947 45: {region: 0xe9, script: 0x5, flags: 0x4},
2948 46: {region: 0xe9, script: 0x5, flags: 0x2},
2949 47: {region: 0x9d, script: 0x8d, flags: 0x0},
2950 48: {region: 0x53, script: 0x8e, flags: 0x2},
2951 49: {region: 0xbb, script: 0xeb, flags: 0x0},
2952 50: {region: 0xda, script: 0x5b, flags: 0x4},
2953 51: {region: 0xe9, script: 0x5, flags: 0x0},
2954 52: {region: 0x9a, script: 0x22, flags: 0x2},
2955 53: {region: 0x9a, script: 0x50, flags: 0x2},
2956 54: {region: 0x9a, script: 0xd5, flags: 0x2},
2957 55: {region: 0x106, script: 0x20, flags: 0x0},
2958 56: {region: 0xbe, script: 0x5b, flags: 0x4},
2959 57: {region: 0x105, script: 0x5b, flags: 0x4},
2960 58: {region: 0x107, script: 0x5b, flags: 0x4},
2961 59: {region: 0x12c, script: 0x5b, flags: 0x4},
2962 60: {region: 0x125, script: 0x20, flags: 0x0},
2963 61: {region: 0xe9, script: 0x5, flags: 0x4},
2964 62: {region: 0xe9, script: 0x5, flags: 0x2},
2965 63: {region: 0x53, script: 0x5, flags: 0x0},
2966 64: {region: 0xaf, script: 0x20, flags: 0x4},
2967 65: {region: 0xc6, script: 0x20, flags: 0x4},
2968 66: {region: 0xaf, script: 0x20, flags: 0x2},
2969 67: {region: 0x9a, script: 0xe, flags: 0x0},
2970 68: {region: 0xdc, script: 0x22, flags: 0x4},
2971 69: {region: 0xdc, script: 0x22, flags: 0x2},
2972 70: {region: 0x138, script: 0x5b, flags: 0x0},
2973 71: {region: 0x24, script: 0x5, flags: 0x4},
2974 72: {region: 0x53, script: 0x20, flags: 0x4},
2975 73: {region: 0x24, script: 0x5, flags: 0x2},
2976 74: {region: 0x8e, script: 0x3c, flags: 0x0},
2977 75: {region: 0x53, script: 0x3b, flags: 0x4},
2978 76: {region: 0x53, script: 0x3b, flags: 0x2},
2979 77: {region: 0x53, script: 0x3b, flags: 0x0},
2980 78: {region: 0x2f, script: 0x3c, flags: 0x4},
2981 79: {region: 0x3e, script: 0x3c, flags: 0x4},
2982 80: {region: 0x7c, script: 0x3c, flags: 0x4},
2983 81: {region: 0x7f, script: 0x3c, flags: 0x4},
2984 82: {region: 0x8e, script: 0x3c, flags: 0x4},
2985 83: {region: 0x96, script: 0x3c, flags: 0x4},
2986 84: {region: 0xc7, script: 0x3c, flags: 0x4},
2987 85: {region: 0xd1, script: 0x3c, flags: 0x4},
2988 86: {region: 0xe3, script: 0x3c, flags: 0x4},
2989 87: {region: 0xe6, script: 0x3c, flags: 0x4},
2990 88: {region: 0xe8, script: 0x3c, flags: 0x4},
2991 89: {region: 0x117, script: 0x3c, flags: 0x4},
2992 90: {region: 0x124, script: 0x3c, flags: 0x4},
2993 91: {region: 0x12f, script: 0x3c, flags: 0x4},
2994 92: {region: 0x136, script: 0x3c, flags: 0x4},
2995 93: {region: 0x13f, script: 0x3c, flags: 0x4},
2996 94: {region: 0x12f, script: 0x11, flags: 0x2},
2997 95: {region: 0x12f, script: 0x37, flags: 0x2},
2998 96: {region: 0x12f, script: 0x3c, flags: 0x2},
2999}
3000
3001type likelyLangScript struct {
3002 lang uint16
3003 script uint16
3004 flags uint8
3005}
3006
3007// likelyRegion is a lookup table, indexed by regionID, for the most likely
3008// languages and scripts given incomplete information. If more entries exist
3009// for a given regionID, lang and script are the index and size respectively
3010// of the list in likelyRegionList.
3011// TODO: exclude containers and user-definable regions from the list.
3012// Size: 2154 bytes, 359 elements
3013var likelyRegion = [359]likelyLangScript{
3014 34: {lang: 0xd7, script: 0x5b, flags: 0x0},
3015 35: {lang: 0x3a, script: 0x5, flags: 0x0},
3016 36: {lang: 0x0, script: 0x2, flags: 0x1},
3017 39: {lang: 0x2, script: 0x2, flags: 0x1},
3018 40: {lang: 0x4, script: 0x2, flags: 0x1},
3019 42: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3020 43: {lang: 0x0, script: 0x5b, flags: 0x0},
3021 44: {lang: 0x13e, script: 0x5b, flags: 0x0},
3022 45: {lang: 0x41b, script: 0x5b, flags: 0x0},
3023 46: {lang: 0x10d, script: 0x5b, flags: 0x0},
3024 48: {lang: 0x367, script: 0x5b, flags: 0x0},
3025 49: {lang: 0x444, script: 0x5b, flags: 0x0},
3026 50: {lang: 0x58, script: 0x5b, flags: 0x0},
3027 51: {lang: 0x6, script: 0x2, flags: 0x1},
3028 53: {lang: 0xa5, script: 0xe, flags: 0x0},
3029 54: {lang: 0x367, script: 0x5b, flags: 0x0},
3030 55: {lang: 0x15e, script: 0x5b, flags: 0x0},
3031 56: {lang: 0x7e, script: 0x20, flags: 0x0},
3032 57: {lang: 0x3a, script: 0x5, flags: 0x0},
3033 58: {lang: 0x3d9, script: 0x5b, flags: 0x0},
3034 59: {lang: 0x15e, script: 0x5b, flags: 0x0},
3035 60: {lang: 0x15e, script: 0x5b, flags: 0x0},
3036 62: {lang: 0x31f, script: 0x5b, flags: 0x0},
3037 63: {lang: 0x13e, script: 0x5b, flags: 0x0},
3038 64: {lang: 0x3a1, script: 0x5b, flags: 0x0},
3039 65: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3040 67: {lang: 0x8, script: 0x2, flags: 0x1},
3041 69: {lang: 0x0, script: 0x5b, flags: 0x0},
3042 71: {lang: 0x71, script: 0x20, flags: 0x0},
3043 73: {lang: 0x512, script: 0x3e, flags: 0x2},
3044 74: {lang: 0x31f, script: 0x5, flags: 0x2},
3045 75: {lang: 0x445, script: 0x5b, flags: 0x0},
3046 76: {lang: 0x15e, script: 0x5b, flags: 0x0},
3047 77: {lang: 0x15e, script: 0x5b, flags: 0x0},
3048 78: {lang: 0x10d, script: 0x5b, flags: 0x0},
3049 79: {lang: 0x15e, script: 0x5b, flags: 0x0},
3050 81: {lang: 0x13e, script: 0x5b, flags: 0x0},
3051 82: {lang: 0x15e, script: 0x5b, flags: 0x0},
3052 83: {lang: 0xa, script: 0x4, flags: 0x1},
3053 84: {lang: 0x13e, script: 0x5b, flags: 0x0},
3054 85: {lang: 0x0, script: 0x5b, flags: 0x0},
3055 87: {lang: 0x13e, script: 0x5b, flags: 0x0},
3056 90: {lang: 0x13e, script: 0x5b, flags: 0x0},
3057 91: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3058 92: {lang: 0x3a1, script: 0x5b, flags: 0x0},
3059 94: {lang: 0xe, script: 0x2, flags: 0x1},
3060 95: {lang: 0xfa, script: 0x5b, flags: 0x0},
3061 97: {lang: 0x10d, script: 0x5b, flags: 0x0},
3062 99: {lang: 0x1, script: 0x5b, flags: 0x0},
3063 100: {lang: 0x101, script: 0x5b, flags: 0x0},
3064 102: {lang: 0x13e, script: 0x5b, flags: 0x0},
3065 104: {lang: 0x10, script: 0x2, flags: 0x1},
3066 105: {lang: 0x13e, script: 0x5b, flags: 0x0},
3067 106: {lang: 0x13e, script: 0x5b, flags: 0x0},
3068 107: {lang: 0x140, script: 0x5b, flags: 0x0},
3069 108: {lang: 0x3a, script: 0x5, flags: 0x0},
3070 109: {lang: 0x3a, script: 0x5, flags: 0x0},
3071 110: {lang: 0x46f, script: 0x2c, flags: 0x0},
3072 111: {lang: 0x13e, script: 0x5b, flags: 0x0},
3073 112: {lang: 0x12, script: 0x2, flags: 0x1},
3074 114: {lang: 0x10d, script: 0x5b, flags: 0x0},
3075 115: {lang: 0x151, script: 0x5b, flags: 0x0},
3076 116: {lang: 0x1c0, script: 0x22, flags: 0x2},
3077 119: {lang: 0x158, script: 0x5b, flags: 0x0},
3078 121: {lang: 0x15e, script: 0x5b, flags: 0x0},
3079 123: {lang: 0x15e, script: 0x5b, flags: 0x0},
3080 124: {lang: 0x14, script: 0x2, flags: 0x1},
3081 126: {lang: 0x16, script: 0x3, flags: 0x1},
3082 127: {lang: 0x15e, script: 0x5b, flags: 0x0},
3083 129: {lang: 0x21, script: 0x5b, flags: 0x0},
3084 131: {lang: 0x245, script: 0x5b, flags: 0x0},
3085 133: {lang: 0x15e, script: 0x5b, flags: 0x0},
3086 134: {lang: 0x15e, script: 0x5b, flags: 0x0},
3087 135: {lang: 0x13e, script: 0x5b, flags: 0x0},
3088 136: {lang: 0x19, script: 0x2, flags: 0x1},
3089 137: {lang: 0x0, script: 0x5b, flags: 0x0},
3090 138: {lang: 0x13e, script: 0x5b, flags: 0x0},
3091 140: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3092 142: {lang: 0x529, script: 0x3c, flags: 0x0},
3093 143: {lang: 0x0, script: 0x5b, flags: 0x0},
3094 144: {lang: 0x13e, script: 0x5b, flags: 0x0},
3095 145: {lang: 0x1d1, script: 0x5b, flags: 0x0},
3096 146: {lang: 0x1d4, script: 0x5b, flags: 0x0},
3097 147: {lang: 0x1d5, script: 0x5b, flags: 0x0},
3098 149: {lang: 0x13e, script: 0x5b, flags: 0x0},
3099 150: {lang: 0x1b, script: 0x2, flags: 0x1},
3100 152: {lang: 0x1bc, script: 0x3e, flags: 0x0},
3101 154: {lang: 0x1d, script: 0x3, flags: 0x1},
3102 156: {lang: 0x3a, script: 0x5, flags: 0x0},
3103 157: {lang: 0x20, script: 0x2, flags: 0x1},
3104 158: {lang: 0x1f8, script: 0x5b, flags: 0x0},
3105 159: {lang: 0x1f9, script: 0x5b, flags: 0x0},
3106 162: {lang: 0x3a, script: 0x5, flags: 0x0},
3107 163: {lang: 0x200, script: 0x49, flags: 0x0},
3108 165: {lang: 0x445, script: 0x5b, flags: 0x0},
3109 166: {lang: 0x28a, script: 0x20, flags: 0x0},
3110 167: {lang: 0x22, script: 0x3, flags: 0x1},
3111 169: {lang: 0x25, script: 0x2, flags: 0x1},
3112 171: {lang: 0x254, script: 0x54, flags: 0x0},
3113 172: {lang: 0x254, script: 0x54, flags: 0x0},
3114 173: {lang: 0x3a, script: 0x5, flags: 0x0},
3115 175: {lang: 0x3e2, script: 0x20, flags: 0x0},
3116 176: {lang: 0x27, script: 0x2, flags: 0x1},
3117 177: {lang: 0x3a, script: 0x5, flags: 0x0},
3118 179: {lang: 0x10d, script: 0x5b, flags: 0x0},
3119 180: {lang: 0x40c, script: 0xd6, flags: 0x0},
3120 182: {lang: 0x43b, script: 0x5b, flags: 0x0},
3121 183: {lang: 0x2c0, script: 0x5b, flags: 0x0},
3122 184: {lang: 0x15e, script: 0x5b, flags: 0x0},
3123 185: {lang: 0x2c7, script: 0x5b, flags: 0x0},
3124 186: {lang: 0x3a, script: 0x5, flags: 0x0},
3125 187: {lang: 0x29, script: 0x2, flags: 0x1},
3126 188: {lang: 0x15e, script: 0x5b, flags: 0x0},
3127 189: {lang: 0x2b, script: 0x2, flags: 0x1},
3128 190: {lang: 0x432, script: 0x5b, flags: 0x0},
3129 191: {lang: 0x15e, script: 0x5b, flags: 0x0},
3130 192: {lang: 0x2f1, script: 0x5b, flags: 0x0},
3131 195: {lang: 0x2d, script: 0x2, flags: 0x1},
3132 196: {lang: 0xa0, script: 0x5b, flags: 0x0},
3133 197: {lang: 0x2f, script: 0x2, flags: 0x1},
3134 198: {lang: 0x31, script: 0x2, flags: 0x1},
3135 199: {lang: 0x33, script: 0x2, flags: 0x1},
3136 201: {lang: 0x15e, script: 0x5b, flags: 0x0},
3137 202: {lang: 0x35, script: 0x2, flags: 0x1},
3138 204: {lang: 0x320, script: 0x5b, flags: 0x0},
3139 205: {lang: 0x37, script: 0x3, flags: 0x1},
3140 206: {lang: 0x128, script: 0xed, flags: 0x0},
3141 208: {lang: 0x13e, script: 0x5b, flags: 0x0},
3142 209: {lang: 0x31f, script: 0x5b, flags: 0x0},
3143 210: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3144 211: {lang: 0x16, script: 0x5b, flags: 0x0},
3145 212: {lang: 0x15e, script: 0x5b, flags: 0x0},
3146 213: {lang: 0x1b4, script: 0x5b, flags: 0x0},
3147 215: {lang: 0x1b4, script: 0x5, flags: 0x2},
3148 217: {lang: 0x13e, script: 0x5b, flags: 0x0},
3149 218: {lang: 0x367, script: 0x5b, flags: 0x0},
3150 219: {lang: 0x347, script: 0x5b, flags: 0x0},
3151 220: {lang: 0x351, script: 0x22, flags: 0x0},
3152 226: {lang: 0x3a, script: 0x5, flags: 0x0},
3153 227: {lang: 0x13e, script: 0x5b, flags: 0x0},
3154 229: {lang: 0x13e, script: 0x5b, flags: 0x0},
3155 230: {lang: 0x15e, script: 0x5b, flags: 0x0},
3156 231: {lang: 0x486, script: 0x5b, flags: 0x0},
3157 232: {lang: 0x153, script: 0x5b, flags: 0x0},
3158 233: {lang: 0x3a, script: 0x3, flags: 0x1},
3159 234: {lang: 0x3b3, script: 0x5b, flags: 0x0},
3160 235: {lang: 0x15e, script: 0x5b, flags: 0x0},
3161 237: {lang: 0x13e, script: 0x5b, flags: 0x0},
3162 238: {lang: 0x3a, script: 0x5, flags: 0x0},
3163 239: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3164 241: {lang: 0x3a2, script: 0x5b, flags: 0x0},
3165 242: {lang: 0x194, script: 0x5b, flags: 0x0},
3166 244: {lang: 0x3a, script: 0x5, flags: 0x0},
3167 259: {lang: 0x15e, script: 0x5b, flags: 0x0},
3168 261: {lang: 0x3d, script: 0x2, flags: 0x1},
3169 262: {lang: 0x432, script: 0x20, flags: 0x0},
3170 263: {lang: 0x3f, script: 0x2, flags: 0x1},
3171 264: {lang: 0x3e5, script: 0x5b, flags: 0x0},
3172 265: {lang: 0x3a, script: 0x5, flags: 0x0},
3173 267: {lang: 0x15e, script: 0x5b, flags: 0x0},
3174 268: {lang: 0x3a, script: 0x5, flags: 0x0},
3175 269: {lang: 0x41, script: 0x2, flags: 0x1},
3176 272: {lang: 0x416, script: 0x5b, flags: 0x0},
3177 273: {lang: 0x347, script: 0x5b, flags: 0x0},
3178 274: {lang: 0x43, script: 0x2, flags: 0x1},
3179 276: {lang: 0x1f9, script: 0x5b, flags: 0x0},
3180 277: {lang: 0x15e, script: 0x5b, flags: 0x0},
3181 278: {lang: 0x429, script: 0x5b, flags: 0x0},
3182 279: {lang: 0x367, script: 0x5b, flags: 0x0},
3183 281: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3184 283: {lang: 0x13e, script: 0x5b, flags: 0x0},
3185 285: {lang: 0x45, script: 0x2, flags: 0x1},
3186 289: {lang: 0x15e, script: 0x5b, flags: 0x0},
3187 290: {lang: 0x15e, script: 0x5b, flags: 0x0},
3188 291: {lang: 0x47, script: 0x2, flags: 0x1},
3189 292: {lang: 0x49, script: 0x3, flags: 0x1},
3190 293: {lang: 0x4c, script: 0x2, flags: 0x1},
3191 294: {lang: 0x477, script: 0x5b, flags: 0x0},
3192 295: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3193 296: {lang: 0x476, script: 0x5b, flags: 0x0},
3194 297: {lang: 0x4e, script: 0x2, flags: 0x1},
3195 298: {lang: 0x482, script: 0x5b, flags: 0x0},
3196 300: {lang: 0x50, script: 0x4, flags: 0x1},
3197 302: {lang: 0x4a0, script: 0x5b, flags: 0x0},
3198 303: {lang: 0x54, script: 0x2, flags: 0x1},
3199 304: {lang: 0x445, script: 0x5b, flags: 0x0},
3200 305: {lang: 0x56, script: 0x3, flags: 0x1},
3201 306: {lang: 0x445, script: 0x5b, flags: 0x0},
3202 310: {lang: 0x512, script: 0x3e, flags: 0x2},
3203 311: {lang: 0x13e, script: 0x5b, flags: 0x0},
3204 312: {lang: 0x4bc, script: 0x5b, flags: 0x0},
3205 313: {lang: 0x1f9, script: 0x5b, flags: 0x0},
3206 316: {lang: 0x13e, script: 0x5b, flags: 0x0},
3207 319: {lang: 0x4c3, script: 0x5b, flags: 0x0},
3208 320: {lang: 0x8a, script: 0x5b, flags: 0x0},
3209 321: {lang: 0x15e, script: 0x5b, flags: 0x0},
3210 323: {lang: 0x41b, script: 0x5b, flags: 0x0},
3211 334: {lang: 0x59, script: 0x2, flags: 0x1},
3212 351: {lang: 0x3a, script: 0x5, flags: 0x0},
3213 352: {lang: 0x5b, script: 0x2, flags: 0x1},
3214 357: {lang: 0x423, script: 0x5b, flags: 0x0},
3215}
3216
3217// likelyRegionList holds lists info associated with likelyRegion.
3218// Size: 558 bytes, 93 elements
3219var likelyRegionList = [93]likelyLangScript{
3220 0: {lang: 0x148, script: 0x5, flags: 0x0},
3221 1: {lang: 0x476, script: 0x5b, flags: 0x0},
3222 2: {lang: 0x431, script: 0x5b, flags: 0x0},
3223 3: {lang: 0x2ff, script: 0x20, flags: 0x0},
3224 4: {lang: 0x1d7, script: 0x8, flags: 0x0},
3225 5: {lang: 0x274, script: 0x5b, flags: 0x0},
3226 6: {lang: 0xb7, script: 0x5b, flags: 0x0},
3227 7: {lang: 0x432, script: 0x20, flags: 0x0},
3228 8: {lang: 0x12d, script: 0xef, flags: 0x0},
3229 9: {lang: 0x351, script: 0x22, flags: 0x0},
3230 10: {lang: 0x529, script: 0x3b, flags: 0x0},
3231 11: {lang: 0x4ac, script: 0x5, flags: 0x0},
3232 12: {lang: 0x523, script: 0x5b, flags: 0x0},
3233 13: {lang: 0x29a, script: 0xee, flags: 0x0},
3234 14: {lang: 0x136, script: 0x34, flags: 0x0},
3235 15: {lang: 0x48a, script: 0x5b, flags: 0x0},
3236 16: {lang: 0x3a, script: 0x5, flags: 0x0},
3237 17: {lang: 0x15e, script: 0x5b, flags: 0x0},
3238 18: {lang: 0x27, script: 0x2c, flags: 0x0},
3239 19: {lang: 0x139, script: 0x5b, flags: 0x0},
3240 20: {lang: 0x26a, script: 0x5, flags: 0x2},
3241 21: {lang: 0x512, script: 0x3e, flags: 0x2},
3242 22: {lang: 0x210, script: 0x2e, flags: 0x0},
3243 23: {lang: 0x5, script: 0x20, flags: 0x0},
3244 24: {lang: 0x274, script: 0x5b, flags: 0x0},
3245 25: {lang: 0x136, script: 0x34, flags: 0x0},
3246 26: {lang: 0x2ff, script: 0x20, flags: 0x0},
3247 27: {lang: 0x1e1, script: 0x5b, flags: 0x0},
3248 28: {lang: 0x31f, script: 0x5, flags: 0x0},
3249 29: {lang: 0x1be, script: 0x22, flags: 0x0},
3250 30: {lang: 0x4b4, script: 0x5, flags: 0x0},
3251 31: {lang: 0x236, script: 0x76, flags: 0x0},
3252 32: {lang: 0x148, script: 0x5, flags: 0x0},
3253 33: {lang: 0x476, script: 0x5b, flags: 0x0},
3254 34: {lang: 0x24a, script: 0x4f, flags: 0x0},
3255 35: {lang: 0xe6, script: 0x5, flags: 0x0},
3256 36: {lang: 0x226, script: 0xee, flags: 0x0},
3257 37: {lang: 0x3a, script: 0x5, flags: 0x0},
3258 38: {lang: 0x15e, script: 0x5b, flags: 0x0},
3259 39: {lang: 0x2b8, script: 0x58, flags: 0x0},
3260 40: {lang: 0x226, script: 0xee, flags: 0x0},
3261 41: {lang: 0x3a, script: 0x5, flags: 0x0},
3262 42: {lang: 0x15e, script: 0x5b, flags: 0x0},
3263 43: {lang: 0x3dc, script: 0x5b, flags: 0x0},
3264 44: {lang: 0x4ae, script: 0x20, flags: 0x0},
3265 45: {lang: 0x2ff, script: 0x20, flags: 0x0},
3266 46: {lang: 0x431, script: 0x5b, flags: 0x0},
3267 47: {lang: 0x331, script: 0x76, flags: 0x0},
3268 48: {lang: 0x213, script: 0x5b, flags: 0x0},
3269 49: {lang: 0x30b, script: 0x20, flags: 0x0},
3270 50: {lang: 0x242, script: 0x5, flags: 0x0},
3271 51: {lang: 0x529, script: 0x3c, flags: 0x0},
3272 52: {lang: 0x3c0, script: 0x5b, flags: 0x0},
3273 53: {lang: 0x3a, script: 0x5, flags: 0x0},
3274 54: {lang: 0x15e, script: 0x5b, flags: 0x0},
3275 55: {lang: 0x2ed, script: 0x5b, flags: 0x0},
3276 56: {lang: 0x4b4, script: 0x5, flags: 0x0},
3277 57: {lang: 0x88, script: 0x22, flags: 0x0},
3278 58: {lang: 0x4b4, script: 0x5, flags: 0x0},
3279 59: {lang: 0x4b4, script: 0x5, flags: 0x0},
3280 60: {lang: 0xbe, script: 0x22, flags: 0x0},
3281 61: {lang: 0x3dc, script: 0x5b, flags: 0x0},
3282 62: {lang: 0x7e, script: 0x20, flags: 0x0},
3283 63: {lang: 0x3e2, script: 0x20, flags: 0x0},
3284 64: {lang: 0x267, script: 0x5b, flags: 0x0},
3285 65: {lang: 0x444, script: 0x5b, flags: 0x0},
3286 66: {lang: 0x512, script: 0x3e, flags: 0x0},
3287 67: {lang: 0x412, script: 0x5b, flags: 0x0},
3288 68: {lang: 0x4ae, script: 0x20, flags: 0x0},
3289 69: {lang: 0x3a, script: 0x5, flags: 0x0},
3290 70: {lang: 0x15e, script: 0x5b, flags: 0x0},
3291 71: {lang: 0x15e, script: 0x5b, flags: 0x0},
3292 72: {lang: 0x35, script: 0x5, flags: 0x0},
3293 73: {lang: 0x46b, script: 0xee, flags: 0x0},
3294 74: {lang: 0x2ec, script: 0x5, flags: 0x0},
3295 75: {lang: 0x30f, script: 0x76, flags: 0x0},
3296 76: {lang: 0x467, script: 0x20, flags: 0x0},
3297 77: {lang: 0x148, script: 0x5, flags: 0x0},
3298 78: {lang: 0x3a, script: 0x5, flags: 0x0},
3299 79: {lang: 0x15e, script: 0x5b, flags: 0x0},
3300 80: {lang: 0x48a, script: 0x5b, flags: 0x0},
3301 81: {lang: 0x58, script: 0x5, flags: 0x0},
3302 82: {lang: 0x219, script: 0x20, flags: 0x0},
3303 83: {lang: 0x81, script: 0x34, flags: 0x0},
3304 84: {lang: 0x529, script: 0x3c, flags: 0x0},
3305 85: {lang: 0x48c, script: 0x5b, flags: 0x0},
3306 86: {lang: 0x4ae, script: 0x20, flags: 0x0},
3307 87: {lang: 0x512, script: 0x3e, flags: 0x0},
3308 88: {lang: 0x3b3, script: 0x5b, flags: 0x0},
3309 89: {lang: 0x431, script: 0x5b, flags: 0x0},
3310 90: {lang: 0x432, script: 0x20, flags: 0x0},
3311 91: {lang: 0x15e, script: 0x5b, flags: 0x0},
3312 92: {lang: 0x446, script: 0x5, flags: 0x0},
3313}
3314
3315type likelyTag struct {
3316 lang uint16
3317 region uint16
3318 script uint16
3319}
3320
3321// Size: 198 bytes, 33 elements
3322var likelyRegionGroup = [33]likelyTag{
3323 1: {lang: 0x139, region: 0xd7, script: 0x5b},
3324 2: {lang: 0x139, region: 0x136, script: 0x5b},
3325 3: {lang: 0x3c0, region: 0x41, script: 0x5b},
3326 4: {lang: 0x139, region: 0x2f, script: 0x5b},
3327 5: {lang: 0x139, region: 0xd7, script: 0x5b},
3328 6: {lang: 0x13e, region: 0xd0, script: 0x5b},
3329 7: {lang: 0x445, region: 0x130, script: 0x5b},
3330 8: {lang: 0x3a, region: 0x6c, script: 0x5},
3331 9: {lang: 0x445, region: 0x4b, script: 0x5b},
3332 10: {lang: 0x139, region: 0x162, script: 0x5b},
3333 11: {lang: 0x139, region: 0x136, script: 0x5b},
3334 12: {lang: 0x139, region: 0x136, script: 0x5b},
3335 13: {lang: 0x13e, region: 0x5a, script: 0x5b},
3336 14: {lang: 0x529, region: 0x53, script: 0x3b},
3337 15: {lang: 0x1be, region: 0x9a, script: 0x22},
3338 16: {lang: 0x1e1, region: 0x96, script: 0x5b},
3339 17: {lang: 0x1f9, region: 0x9f, script: 0x5b},
3340 18: {lang: 0x139, region: 0x2f, script: 0x5b},
3341 19: {lang: 0x139, region: 0xe7, script: 0x5b},
3342 20: {lang: 0x139, region: 0x8b, script: 0x5b},
3343 21: {lang: 0x41b, region: 0x143, script: 0x5b},
3344 22: {lang: 0x529, region: 0x53, script: 0x3b},
3345 23: {lang: 0x4bc, region: 0x138, script: 0x5b},
3346 24: {lang: 0x3a, region: 0x109, script: 0x5},
3347 25: {lang: 0x3e2, region: 0x107, script: 0x20},
3348 26: {lang: 0x3e2, region: 0x107, script: 0x20},
3349 27: {lang: 0x139, region: 0x7c, script: 0x5b},
3350 28: {lang: 0x10d, region: 0x61, script: 0x5b},
3351 29: {lang: 0x139, region: 0xd7, script: 0x5b},
3352 30: {lang: 0x13e, region: 0x1f, script: 0x5b},
3353 31: {lang: 0x139, region: 0x9b, script: 0x5b},
3354 32: {lang: 0x139, region: 0x7c, script: 0x5b},
3355}
3356
3357// Size: 264 bytes, 33 elements
3358var regionContainment = [33]uint64{
3359 // Entry 0 - 1F
3360 0x00000001ffffffff, 0x00000000200007a2, 0x0000000000003044, 0x0000000000000008,
3361 0x00000000803c0010, 0x0000000000000020, 0x0000000000000040, 0x0000000000000080,
3362 0x0000000000000100, 0x0000000000000200, 0x0000000000000400, 0x000000004000384c,
3363 0x0000000000001000, 0x0000000000002000, 0x0000000000004000, 0x0000000000008000,
3364 0x0000000000010000, 0x0000000000020000, 0x0000000000040000, 0x0000000000080000,
3365 0x0000000000100000, 0x0000000000200000, 0x0000000001c1c000, 0x0000000000800000,
3366 0x0000000001000000, 0x000000001e020000, 0x0000000004000000, 0x0000000008000000,
3367 0x0000000010000000, 0x00000000200006a0, 0x0000000040002048, 0x0000000080000000,
3368 // Entry 20 - 3F
3369 0x0000000100000000,
3370}
3371
3372// regionInclusion maps region identifiers to sets of regions in regionInclusionBits,
3373// where each set holds all groupings that are directly connected in a region
3374// containment graph.
3375// Size: 359 bytes, 359 elements
3376var regionInclusion = [359]uint8{
3377 // Entry 0 - 3F
3378 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
3379 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
3380 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
3381 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
3382 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x26, 0x23,
3383 0x24, 0x26, 0x27, 0x22, 0x28, 0x29, 0x2a, 0x2b,
3384 0x26, 0x2c, 0x24, 0x23, 0x26, 0x25, 0x2a, 0x2d,
3385 0x2e, 0x24, 0x2f, 0x2d, 0x26, 0x30, 0x31, 0x28,
3386 // Entry 40 - 7F
3387 0x26, 0x28, 0x26, 0x25, 0x31, 0x22, 0x32, 0x33,
3388 0x34, 0x30, 0x22, 0x27, 0x27, 0x27, 0x35, 0x2d,
3389 0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x21, 0x34,
3390 0x23, 0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e,
3391 0x35, 0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21,
3392 0x39, 0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a,
3393 0x2f, 0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c,
3394 0x21, 0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28,
3395 // Entry 80 - BF
3396 0x2c, 0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27,
3397 0x3a, 0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22,
3398 0x34, 0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38,
3399 0x24, 0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a,
3400 0x2c, 0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31,
3401 0x3c, 0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d,
3402 0x31, 0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38,
3403 0x2a, 0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26,
3404 // Entry C0 - FF
3405 0x2f, 0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36,
3406 0x3c, 0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f,
3407 0x34, 0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d,
3408 0x21, 0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24,
3409 0x29, 0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b,
3410 0x31, 0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a,
3411 0x21, 0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f,
3412 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
3413 // Entry 100 - 13F
3414 0x21, 0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33,
3415 0x2f, 0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d,
3416 0x3a, 0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28,
3417 0x2f, 0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22,
3418 0x26, 0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31,
3419 0x3d, 0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36,
3420 0x2f, 0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28,
3421 0x3d, 0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31,
3422 // Entry 140 - 17F
3423 0x3b, 0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21,
3424 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21,
3425 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
3426 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24,
3427 0x2f, 0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21,
3428}
3429
3430// regionInclusionBits is an array of bit vectors where every vector represents
3431// a set of region groupings. These sets are used to compute the distance
3432// between two regions for the purpose of language matching.
3433// Size: 584 bytes, 73 elements
3434var regionInclusionBits = [73]uint64{
3435 // Entry 0 - 1F
3436 0x0000000102400813, 0x00000000200007a3, 0x0000000000003844, 0x0000000040000808,
3437 0x00000000803c0011, 0x0000000020000022, 0x0000000040000844, 0x0000000020000082,
3438 0x0000000000000102, 0x0000000020000202, 0x0000000020000402, 0x000000004000384d,
3439 0x0000000000001804, 0x0000000040002804, 0x0000000000404000, 0x0000000000408000,
3440 0x0000000000410000, 0x0000000002020000, 0x0000000000040010, 0x0000000000080010,
3441 0x0000000000100010, 0x0000000000200010, 0x0000000001c1c001, 0x0000000000c00000,
3442 0x0000000001400000, 0x000000001e020001, 0x0000000006000000, 0x000000000a000000,
3443 0x0000000012000000, 0x00000000200006a2, 0x0000000040002848, 0x0000000080000010,
3444 // Entry 20 - 3F
3445 0x0000000100000001, 0x0000000000000001, 0x0000000080000000, 0x0000000000020000,
3446 0x0000000001000000, 0x0000000000008000, 0x0000000000002000, 0x0000000000000200,
3447 0x0000000000000008, 0x0000000000200000, 0x0000000110000000, 0x0000000000040000,
3448 0x0000000008000000, 0x0000000000000020, 0x0000000104000000, 0x0000000000000080,
3449 0x0000000000001000, 0x0000000000010000, 0x0000000000000400, 0x0000000004000000,
3450 0x0000000000000040, 0x0000000010000000, 0x0000000000004000, 0x0000000101000000,
3451 0x0000000108000000, 0x0000000000000100, 0x0000000100020000, 0x0000000000080000,
3452 0x0000000000100000, 0x0000000000800000, 0x00000001ffffffff, 0x0000000122400fb3,
3453 // Entry 40 - 5F
3454 0x00000001827c0813, 0x000000014240385f, 0x0000000103c1c813, 0x000000011e420813,
3455 0x0000000112000001, 0x0000000106000001, 0x0000000101400001, 0x000000010a000001,
3456 0x0000000102020001,
3457}
3458
3459// regionInclusionNext marks, for each entry in regionInclusionBits, the set of
3460// all groups that are reachable from the groups set in the respective entry.
3461// Size: 73 bytes, 73 elements
3462var regionInclusionNext = [73]uint8{
3463 // Entry 0 - 3F
3464 0x3e, 0x3f, 0x0b, 0x0b, 0x40, 0x01, 0x0b, 0x01,
3465 0x01, 0x01, 0x01, 0x41, 0x0b, 0x0b, 0x16, 0x16,
3466 0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x42, 0x16,
3467 0x16, 0x43, 0x19, 0x19, 0x19, 0x01, 0x0b, 0x04,
3468 0x00, 0x00, 0x1f, 0x11, 0x18, 0x0f, 0x0d, 0x09,
3469 0x03, 0x15, 0x44, 0x12, 0x1b, 0x05, 0x45, 0x07,
3470 0x0c, 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x46,
3471 0x47, 0x08, 0x48, 0x13, 0x14, 0x17, 0x3e, 0x3e,
3472 // Entry 40 - 7F
3473 0x3e, 0x3e, 0x3e, 0x3e, 0x43, 0x43, 0x42, 0x43,
3474 0x43,
3475}
3476
3477type parentRel struct {
3478 lang uint16
3479 script uint16
3480 maxScript uint16
3481 toRegion uint16
3482 fromRegion []uint16
3483}
3484
3485// Size: 414 bytes, 5 elements
3486var parents = [5]parentRel{
3487 0: {lang: 0x139, script: 0x0, maxScript: 0x5b, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5d, 0x5e, 0x62, 0x65, 0x6e, 0x74, 0x75, 0x76, 0x7c, 0x7d, 0x80, 0x81, 0x82, 0x84, 0x8d, 0x8e, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0xa0, 0xa1, 0xa5, 0xa8, 0xaa, 0xae, 0xb2, 0xb5, 0xb6, 0xc0, 0xc7, 0xcb, 0xcc, 0xcd, 0xcf, 0xd1, 0xd3, 0xd6, 0xd7, 0xde, 0xe0, 0xe1, 0xe7, 0xe8, 0xe9, 0xec, 0xf1, 0x108, 0x10a, 0x10b, 0x10c, 0x10e, 0x10f, 0x113, 0x118, 0x11c, 0x11e, 0x120, 0x126, 0x12a, 0x12d, 0x12e, 0x130, 0x132, 0x13a, 0x13d, 0x140, 0x143, 0x162, 0x163, 0x165}},
3488 1: {lang: 0x139, script: 0x0, maxScript: 0x5b, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x61, 0x64, 0x73, 0xda, 0x10d, 0x110}},
3489 2: {lang: 0x13e, script: 0x0, maxScript: 0x5b, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x57, 0x5a, 0x66, 0x6a, 0x8a, 0x90, 0xd0, 0xd9, 0xe3, 0xe5, 0xed, 0xf2, 0x11b, 0x136, 0x137, 0x13c}},
3490 3: {lang: 0x3c0, script: 0x0, maxScript: 0x5b, toRegion: 0xef, fromRegion: []uint16{0x2a, 0x4e, 0x5b, 0x87, 0x8c, 0xb8, 0xc7, 0xd2, 0x119, 0x127}},
3491 4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8e, fromRegion: []uint16{0xc7}},
3492}
3493
3494// Total table size 30466 bytes (29KiB); checksum: 7544152B
diff --git a/vendor/golang.org/x/text/internal/language/tags.go b/vendor/golang.org/x/text/internal/language/tags.go
new file mode 100644
index 0000000..e7afd31
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/tags.go
@@ -0,0 +1,48 @@
1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package language
6
7// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
8// It simplifies safe initialization of Tag values.
9func MustParse(s string) Tag {
10 t, err := Parse(s)
11 if err != nil {
12 panic(err)
13 }
14 return t
15}
16
17// MustParseBase is like ParseBase, but panics if the given base cannot be parsed.
18// It simplifies safe initialization of Base values.
19func MustParseBase(s string) Language {
20 b, err := ParseBase(s)
21 if err != nil {
22 panic(err)
23 }
24 return b
25}
26
27// MustParseScript is like ParseScript, but panics if the given script cannot be
28// parsed. It simplifies safe initialization of Script values.
29func MustParseScript(s string) Script {
30 scr, err := ParseScript(s)
31 if err != nil {
32 panic(err)
33 }
34 return scr
35}
36
37// MustParseRegion is like ParseRegion, but panics if the given region cannot be
38// parsed. It simplifies safe initialization of Region values.
39func MustParseRegion(s string) Region {
40 r, err := ParseRegion(s)
41 if err != nil {
42 panic(err)
43 }
44 return r
45}
46
47// Und is the root language.
48var Und Tag
diff --git a/vendor/golang.org/x/text/internal/match.go b/vendor/golang.org/x/text/internal/match.go
new file mode 100644
index 0000000..1cc004a
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/match.go
@@ -0,0 +1,67 @@
1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package internal
6
7// This file contains matchers that implement CLDR inheritance.
8//
9// See https://unicode.org/reports/tr35/#Locale_Inheritance.
10//
11// Some of the inheritance described in this document is already handled by
12// the cldr package.
13
14import (
15 "golang.org/x/text/language"
16)
17
18// TODO: consider if (some of the) matching algorithm needs to be public after
19// getting some feel about what is generic and what is specific.
20
21// NewInheritanceMatcher returns a matcher that matches based on the inheritance
22// chain.
23//
24// The matcher uses canonicalization and the parent relationship to find a
25// match. The resulting match will always be either Und or a language with the
26// same language and script as the requested language. It will not match
27// languages for which there is understood to be mutual or one-directional
28// intelligibility.
29//
30// A Match will indicate an Exact match if the language matches after
31// canonicalization and High if the matched tag is a parent.
32func NewInheritanceMatcher(t []language.Tag) *InheritanceMatcher {
33 tags := &InheritanceMatcher{make(map[language.Tag]int)}
34 for i, tag := range t {
35 ct, err := language.All.Canonicalize(tag)
36 if err != nil {
37 ct = tag
38 }
39 tags.index[ct] = i
40 }
41 return tags
42}
43
44type InheritanceMatcher struct {
45 index map[language.Tag]int
46}
47
48func (m InheritanceMatcher) Match(want ...language.Tag) (language.Tag, int, language.Confidence) {
49 for _, t := range want {
50 ct, err := language.All.Canonicalize(t)
51 if err != nil {
52 ct = t
53 }
54 conf := language.Exact
55 for {
56 if index, ok := m.index[ct]; ok {
57 return ct, index, conf
58 }
59 if ct == language.Und {
60 break
61 }
62 ct = ct.Parent()
63 conf = language.High
64 }
65 }
66 return language.Und, 0, language.No
67}
diff --git a/vendor/golang.org/x/text/internal/tag/tag.go b/vendor/golang.org/x/text/internal/tag/tag.go
new file mode 100644
index 0000000..b5d3488
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/tag/tag.go
@@ -0,0 +1,100 @@
1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Package tag contains functionality handling tags and related data.
6package tag // import "golang.org/x/text/internal/tag"
7
8import "sort"
9
10// An Index converts tags to a compact numeric value.
11//
12// All elements are of size 4. Tags may be up to 4 bytes long. Excess bytes can
13// be used to store additional information about the tag.
14type Index string
15
16// Elem returns the element data at the given index.
17func (s Index) Elem(x int) string {
18 return string(s[x*4 : x*4+4])
19}
20
21// Index reports the index of the given key or -1 if it could not be found.
22// Only the first len(key) bytes from the start of the 4-byte entries will be
23// considered for the search and the first match in Index will be returned.
24func (s Index) Index(key []byte) int {
25 n := len(key)
26 // search the index of the first entry with an equal or higher value than
27 // key in s.
28 index := sort.Search(len(s)/4, func(i int) bool {
29 return cmp(s[i*4:i*4+n], key) != -1
30 })
31 i := index * 4
32 if cmp(s[i:i+len(key)], key) != 0 {
33 return -1
34 }
35 return index
36}
37
38// Next finds the next occurrence of key after index x, which must have been
39// obtained from a call to Index using the same key. It returns x+1 or -1.
40func (s Index) Next(key []byte, x int) int {
41 if x++; x*4 < len(s) && cmp(s[x*4:x*4+len(key)], key) == 0 {
42 return x
43 }
44 return -1
45}
46
47// cmp returns an integer comparing a and b lexicographically.
48func cmp(a Index, b []byte) int {
49 n := len(a)
50 if len(b) < n {
51 n = len(b)
52 }
53 for i, c := range b[:n] {
54 switch {
55 case a[i] > c:
56 return 1
57 case a[i] < c:
58 return -1
59 }
60 }
61 switch {
62 case len(a) < len(b):
63 return -1
64 case len(a) > len(b):
65 return 1
66 }
67 return 0
68}
69
70// Compare returns an integer comparing a and b lexicographically.
71func Compare(a string, b []byte) int {
72 return cmp(Index(a), b)
73}
74
75// FixCase reformats b to the same pattern of cases as form.
76// If returns false if string b is malformed.
77func FixCase(form string, b []byte) bool {
78 if len(form) != len(b) {
79 return false
80 }
81 for i, c := range b {
82 if form[i] <= 'Z' {
83 if c >= 'a' {
84 c -= 'z' - 'Z'
85 }
86 if c < 'A' || 'Z' < c {
87 return false
88 }
89 } else {
90 if c <= 'Z' {
91 c += 'z' - 'Z'
92 }
93 if c < 'a' || 'z' < c {
94 return false
95 }
96 }
97 b[i] = c
98 }
99 return true
100}