pax_global_header00006660000000000000000000000064143441247070014520gustar00rootroot0000000000000052 comment=dabf77401b04b57597914595d170883092e0df3c stringprep-1.0.4/000077500000000000000000000000001434412470700137175ustar00rootroot00000000000000stringprep-1.0.4/.chglog/000077500000000000000000000000001434412470700152405ustar00rootroot00000000000000stringprep-1.0.4/.chglog/CHANGELOG.tpl.md000077500000000000000000000012101434412470700176440ustar00rootroot00000000000000{{ if .Versions -}} {{ range .Versions }} ## [{{ .Tag.Name }}] - {{ datetime "2006-01-02" .Tag.Date }} {{ range .CommitGroups }} ### {{ .Title }} {{ range .Commits }} - {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }} {{ end }} {{ end -}} {{- if .RevertCommits -}} ### Reverts {{ range .RevertCommits -}} - {{ .Revert.Header }} {{ end }} {{ end -}} {{- if .NoteGroups -}} {{ range .NoteGroups -}} ### {{ .Title }} {{ range .Notes }} {{ .Body }} {{ end }} {{ end -}} {{ end -}} {{ end }} {{ range .Versions -}} [{{ .Tag.Name }}]: {{ $.Info.RepositoryURL }}/releases/tag/{{ .Tag.Name }} {{ end -}} {{ end -}} stringprep-1.0.4/.chglog/config.yml000077500000000000000000000010641434412470700172340ustar00rootroot00000000000000style: github template: CHANGELOG.tpl.md info: title: CHANGELOG repository_url: https://github.com/xdg-go/stringprep options: commits: filters: Type: - feat - fix - perf - refactor - task commit_groups: title_maps: feat: Features fix: Bug Fixes perf: Performance Improvements refactor: Code Refactoring task: Maintenance header: pattern: "^(\\w*)\\:\\s(.*)$" pattern_maps: - Type - Subject notes: keywords: - BREAKING CHANGE stringprep-1.0.4/.github/000077500000000000000000000000001434412470700152575ustar00rootroot00000000000000stringprep-1.0.4/.github/workflows/000077500000000000000000000000001434412470700173145ustar00rootroot00000000000000stringprep-1.0.4/.github/workflows/test.yml000066400000000000000000000014501434412470700210160ustar00rootroot00000000000000on: [push, pull_request] name: CI jobs: test: strategy: matrix: go-version: [1.14.x, 1.15.x, 1.16.x, 1.17.x, 1.18.x, 1.19.x] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: ${{ matrix.go-version }} - name: Checkout code uses: actions/checkout@v2 - uses: actions/cache@v2 with: # In order: # * Module download cache # * Build cache (Linux) # * Build cache (Mac) # * Build cache (Windows) path: | ~/go/pkg/mod ~/.cache/go-build key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Test run: go test -race ./... stringprep-1.0.4/.gitignore000066400000000000000000000000001434412470700156750ustar00rootroot00000000000000stringprep-1.0.4/CHANGELOG.md000066400000000000000000000012641434412470700155330ustar00rootroot00000000000000# CHANGELOG ## [v1.0.4] - 2022-12-07 ### Maintenance - Bump golang.org/x/text to v0.3.8 due to CVE-2022-32149 ## [v1.0.3] - 2022-03-01 ### Maintenance - Bump golang.org/x/text to v0.3.7 due to CVE-2021-38561 ## [v1.0.2] - 2021-03-27 ### Maintenance - Change minimum Go version to 1.11 ## [v1.0.1] - 2021-03-24 ### Bug Fixes - Add go.mod file ## [v1.0.0] - 2018-02-21 [v1.0.2]: https://github.com/xdg-go/stringprep/releases/tag/v1.0.2 [v1.0.1]: https://github.com/xdg-go/stringprep/releases/tag/v1.0.1 [v1.0.0]: https://github.com/xdg-go/stringprep/releases/tag/v1.0.0 stringprep-1.0.4/LICENSE000066400000000000000000000236361434412470700147360ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. stringprep-1.0.4/README.md000066400000000000000000000020401434412470700151720ustar00rootroot00000000000000[![Go Reference](https://pkg.go.dev/badge/github.com/xdg-go/stringprep.svg)](https://pkg.go.dev/github.com/xdg-go/stringprep) [![Go Report Card](https://goreportcard.com/badge/github.com/xdg-go/stringprep)](https://goreportcard.com/report/github.com/xdg-go/stringprep) [![Github Actions](https://github.com/xdg-go/stringprep/actions/workflows/test.yml/badge.svg)](https://github.com/xdg-go/stringprep/actions/workflows/test.yml) # stringprep – Go implementation of RFC-3454 stringprep and RFC-4013 SASLprep ## Synopsis ``` import "github.com/xdg-go/stringprep" prepped := stringprep.SASLprep.Prepare("TrustNô1") ``` ## Description This library provides an implementation of the stringprep algorithm (RFC-3454) in Go, including all data tables. A pre-built SASLprep (RFC-4013) profile is provided as well. ## Copyright and License Copyright 2018 by David A. Golden. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 stringprep-1.0.4/bidi.go000066400000000000000000000034501434412470700151570ustar00rootroot00000000000000// Copyright 2018 by David A. Golden. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package stringprep var errHasLCat = "BiDi string can't have runes from category L" var errFirstRune = "BiDi string first rune must have category R or AL" var errLastRune = "BiDi string last rune must have category R or AL" // Check for prohibited characters from table C.8 func checkBiDiProhibitedRune(s string) error { for _, r := range s { if TableC8.Contains(r) { return Error{Msg: errProhibited, Rune: r} } } return nil } // Check for LCat characters from table D.2 func checkBiDiLCat(s string) error { for _, r := range s { if TableD2.Contains(r) { return Error{Msg: errHasLCat, Rune: r} } } return nil } // Check first and last characters are in table D.1; requires non-empty string func checkBadFirstAndLastRandALCat(s string) error { rs := []rune(s) if !TableD1.Contains(rs[0]) { return Error{Msg: errFirstRune, Rune: rs[0]} } n := len(rs) - 1 if !TableD1.Contains(rs[n]) { return Error{Msg: errLastRune, Rune: rs[n]} } return nil } // Look for RandALCat characters from table D.1 func hasBiDiRandALCat(s string) bool { for _, r := range s { if TableD1.Contains(r) { return true } } return false } // Check that BiDi rules are satisfied ; let empty string pass this rule func passesBiDiRules(s string) error { if len(s) == 0 { return nil } if err := checkBiDiProhibitedRune(s); err != nil { return err } if hasBiDiRandALCat(s) { if err := checkBiDiLCat(s); err != nil { return err } if err := checkBadFirstAndLastRandALCat(s); err != nil { return err } } return nil } stringprep-1.0.4/doc.go000066400000000000000000000007401434412470700150140ustar00rootroot00000000000000// Copyright 2018 by David A. Golden. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 // Package stringprep provides data tables and algorithms for RFC-3454, // including errata (as of 2018-02). It also provides a profile for // SASLprep as defined in RFC-4013. package stringprep stringprep-1.0.4/error.go000066400000000000000000000004211434412470700153740ustar00rootroot00000000000000package stringprep import "fmt" // Error describes problems encountered during stringprep, including what rune // was problematic. type Error struct { Msg string Rune rune } func (e Error) Error() string { return fmt.Sprintf("%s (rune: '\\u%04x')", e.Msg, e.Rune) } stringprep-1.0.4/examples_test.go000066400000000000000000000012511434412470700171220ustar00rootroot00000000000000package stringprep_test import ( "fmt" "github.com/xdg-go/stringprep" ) func Example_customProfile() { customProfile := stringprep.Profile{ Mappings: []stringprep.Mapping{ stringprep.TableB1, stringprep.TableB2, }, Normalize: true, Prohibits: []stringprep.Set{ stringprep.TableC1_1, stringprep.TableC1_2, }, CheckBiDi: true, } prepped, err := customProfile.Prepare("TrustNô1") if err != nil { panic("stringprep failed") } fmt.Print(prepped) // Output: trustnô1 } func Example_sASLprep() { prepped, err := stringprep.SASLprep.Prepare("TrustNô1") if err != nil { panic("SASLprep failed") } fmt.Print(prepped) // Output: TrustNô1 } stringprep-1.0.4/go.mod000066400000000000000000000001171434412470700150240ustar00rootroot00000000000000module github.com/xdg-go/stringprep go 1.11 require golang.org/x/text v0.3.8 stringprep-1.0.4/go.sum000066400000000000000000000047211434412470700150560ustar00rootroot00000000000000github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= stringprep-1.0.4/map.go000066400000000000000000000012611434412470700150230ustar00rootroot00000000000000// Copyright 2018 by David A. Golden. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package stringprep // Mapping represents a stringprep mapping, from a single rune to zero or more // runes. type Mapping map[rune][]rune // Map maps a rune to a (possibly empty) rune slice via a stringprep Mapping. // The ok return value is false if the rune was not found. func (m Mapping) Map(r rune) (replacement []rune, ok bool) { rs, ok := m[r] if !ok { return nil, false } return rs, true } stringprep-1.0.4/map_test.go000066400000000000000000000027231434412470700160660ustar00rootroot00000000000000package stringprep import ( "fmt" "reflect" "testing" ) func TestMapping(t *testing.T) { mappingTests := []struct { label string table Mapping in rune exists bool out []rune }{ // Table B1 {label: "B1", table: TableB1, in: 0x00AD, exists: true, out: []rune{}}, {label: "B1", table: TableB1, in: 0x0040, exists: false, out: nil}, // Table B2 {label: "B2", table: TableB2, in: 0x0043, exists: true, out: []rune{0x0063}}, {label: "B2", table: TableB2, in: 0x00DF, exists: true, out: []rune{0x0073, 0x0073}}, {label: "B2", table: TableB2, in: 0x1F56, exists: true, out: []rune{0x03C5, 0x0313, 0x0342}}, {label: "B2", table: TableB2, in: 0x0040, exists: false, out: nil}, // Table B3 {label: "B3", table: TableB3, in: 0x1FF7, exists: true, out: []rune{0x03C9, 0x0342, 0x03B9}}, {label: "B3", table: TableB3, in: 0x0040, exists: false, out: nil}, } for _, c := range mappingTests { t.Run(fmt.Sprintf("%s 0x%04x", c.label, c.in), func(t *testing.T) { got, ok := c.table.Map(c.in) switch c.exists { case true: if !ok { t.Errorf("input '0x%04x' was not found, but should have been", c.in) } if !reflect.DeepEqual(got, c.out) { t.Errorf("input '0x%04x' was %v, expected %v", c.in, got, c.out) } case false: if ok { t.Errorf("input '0x%04x' was found, but should not have been", c.in) } if got != nil { t.Errorf("input '0x%04x' was %v, expected %v", c.in, got, c.out) } } }) } } stringprep-1.0.4/profile.go000066400000000000000000000025311434412470700157070ustar00rootroot00000000000000package stringprep import ( "golang.org/x/text/unicode/norm" ) // Profile represents a stringprep profile. type Profile struct { Mappings []Mapping Normalize bool Prohibits []Set CheckBiDi bool } var errProhibited = "prohibited character" // Prepare transforms an input string to an output string following // the rules defined in the profile as defined by RFC-3454. func (p Profile) Prepare(s string) (string, error) { // Optimistically, assume output will be same length as input temp := make([]rune, 0, len(s)) // Apply maps for _, r := range s { rs, ok := p.applyMaps(r) if ok { temp = append(temp, rs...) } else { temp = append(temp, r) } } // Normalize var out string if p.Normalize { out = norm.NFKC.String(string(temp)) } else { out = string(temp) } // Check prohibited for _, r := range out { if p.runeIsProhibited(r) { return "", Error{Msg: errProhibited, Rune: r} } } // Check BiDi allowed if p.CheckBiDi { if err := passesBiDiRules(out); err != nil { return "", err } } return out, nil } func (p Profile) applyMaps(r rune) ([]rune, bool) { for _, m := range p.Mappings { rs, ok := m.Map(r) if ok { return rs, true } } return nil, false } func (p Profile) runeIsProhibited(r rune) bool { for _, s := range p.Prohibits { if s.Contains(r) { return true } } return false } stringprep-1.0.4/profile_test.go000066400000000000000000000047021434412470700167500ustar00rootroot00000000000000package stringprep import ( "reflect" "strconv" "testing" ) func TestProfiles(t *testing.T) { p1 := Profile{ Mappings: []Mapping{TableB1, TableB2}, Normalize: true, Prohibits: []Set{TableC1_1, TableC1_2, TableC6}, CheckBiDi: true, } p2 := Profile{ Mappings: []Mapping{}, Normalize: false, Prohibits: []Set{}, CheckBiDi: false, } profileTests := []struct { label string profile Profile in string out string err error }{ {label: "p1: empty", profile: p1, in: "", out: "", err: nil}, {label: "p1: ascii", profile: p1, in: "user", out: "user", err: nil}, {label: "p1: zws", profile: p1, in: "u\u200Ber", out: "uer", err: nil}, {label: "p1: sharp", profile: p1, in: "u\u00DFer", out: "usser", err: nil}, {label: "p1: nfkc", profile: p1, in: "ua\u030Aer", out: "u\u00e5er", err: nil}, { label: "p1: replacement", profile: p1, in: "u\uFFFDer", out: "", err: Error{Msg: errProhibited, Rune: '\uFFFD'}, }, { label: "p1: bidi ok", profile: p1, in: "\u0627\u0031\u0628", out: "\u0627\u0031\u0628", err: nil, }, { label: "p1: bidi not ok RandAL with L", profile: p1, in: "\u0627\u0589\u0628", out: "", err: Error{Msg: errHasLCat, Rune: '\u0589'}, }, { label: "p1: bidi bad first rune", profile: p1, in: "\u0031\u0627", out: "", err: Error{Msg: errFirstRune, Rune: '\u0031'}, }, { label: "p1: bidi bad last rune", profile: p1, in: "\u0627\u0031", out: "", err: Error{Msg: errLastRune, Rune: '\u0031'}, }, { label: "p1: bidi bad chars", profile: p1, in: "\u206D", out: "", err: Error{Msg: errProhibited, Rune: '\u206D'}, }, { label: "p2: bidi not checked", profile: p2, in: "\u0627\u0031", out: "\u0627\u0031", err: nil, }, {label: "p2: no nfkc", profile: p2, in: "ua\u030Aer", out: "ua\u030Aer", err: nil}, } for _, c := range profileTests { t.Run(c.label, func(t *testing.T) { got, err := c.profile.Prepare(c.in) if c.err == nil { if got != c.out { t.Errorf("input '%s': got '%s', expected '%s'", strconv.QuoteToASCII(c.in), strconv.QuoteToASCII(got), strconv.QuoteToASCII(c.out)) } } else { if !reflect.DeepEqual(err, c.err) { t.Errorf("input '%s': got error '%v', expected '%v'", strconv.QuoteToASCII(c.in), err, c.err) } } }) } } stringprep-1.0.4/saslprep.go000066400000000000000000000022501434412470700160760ustar00rootroot00000000000000package stringprep var mapNonASCIISpaceToASCIISpace = Mapping{ 0x00A0: []rune{0x0020}, 0x1680: []rune{0x0020}, 0x2000: []rune{0x0020}, 0x2001: []rune{0x0020}, 0x2002: []rune{0x0020}, 0x2003: []rune{0x0020}, 0x2004: []rune{0x0020}, 0x2005: []rune{0x0020}, 0x2006: []rune{0x0020}, 0x2007: []rune{0x0020}, 0x2008: []rune{0x0020}, 0x2009: []rune{0x0020}, 0x200A: []rune{0x0020}, 0x200B: []rune{0x0020}, 0x202F: []rune{0x0020}, 0x205F: []rune{0x0020}, 0x3000: []rune{0x0020}, } // SASLprep is a pre-defined stringprep profile for user names and passwords // as described in RFC-4013. // // Because the stringprep distinction between query and stored strings was // intended for compatibility across profile versions, but SASLprep was never // updated and is now deprecated, this profile only operates in stored // strings mode, prohibiting unassigned code points. var SASLprep Profile = saslprep var saslprep = Profile{ Mappings: []Mapping{ TableB1, mapNonASCIISpaceToASCIISpace, }, Normalize: true, Prohibits: []Set{ TableA1, TableC1_2, TableC2_1, TableC2_2, TableC3, TableC4, TableC5, TableC6, TableC7, TableC8, TableC9, }, CheckBiDi: true, } stringprep-1.0.4/saslprep_test.go000066400000000000000000000024611434412470700171410ustar00rootroot00000000000000package stringprep import ( "reflect" "strconv" "testing" ) func TestSASLprep(t *testing.T) { saslTests := []struct { label string in string out string err error }{ {label: "soft hyphen", in: "I\u00ADX", out: "IX", err: nil}, {label: "non ASCII space", in: "I\u2000X", out: "I X", err: nil}, {label: "no transform", in: "user", out: "user", err: nil}, {label: "case preserve", in: "USER", out: "USER", err: nil}, {label: "8859-1 to NFKC", in: "\u00AA", out: "a", err: nil}, {label: "NFKC", in: "\u2168", out: "IX", err: nil}, { label: "prohibited", in: "\u0007", out: "", err: Error{Msg: errProhibited, Rune: '\u0007'}, }, { label: "bidi not ok", in: "\u0627\u0031", out: "", err: Error{Msg: errLastRune, Rune: '\u0031'}, }, } for _, c := range saslTests { t.Run(c.label, func(t *testing.T) { got, err := SASLprep.Prepare(c.in) t.Logf("err is '%v'", err) if c.err == nil { if got != c.out { t.Errorf("input '%s': got '%s', expected '%s'", strconv.QuoteToASCII(c.in), strconv.QuoteToASCII(got), strconv.QuoteToASCII(c.out)) } } else { if !reflect.DeepEqual(err, c.err) { t.Errorf("input '%s': got error '%v', expected '%v'", strconv.QuoteToASCII(c.in), err, c.err) } } }) } } stringprep-1.0.4/set.go000066400000000000000000000020731434412470700150430ustar00rootroot00000000000000// Copyright 2018 by David A. Golden. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package stringprep import "sort" // RuneRange represents a close-ended range of runes: [N,M]. For a range // consisting of a single rune, N and M will be equal. type RuneRange [2]rune // Contains returns true if a rune is within the bounds of the RuneRange. func (rr RuneRange) Contains(r rune) bool { return rr[0] <= r && r <= rr[1] } func (rr RuneRange) isAbove(r rune) bool { return r <= rr[0] } // Set represents a stringprep data table used to identify runes of a // particular type. type Set []RuneRange // Contains returns true if a rune is within any of the RuneRanges in the // Set. func (s Set) Contains(r rune) bool { i := sort.Search(len(s), func(i int) bool { return s[i].Contains(r) || s[i].isAbove(r) }) if i < len(s) && s[i].Contains(r) { return true } return false } stringprep-1.0.4/set_test.go000066400000000000000000000065001434412470700161010ustar00rootroot00000000000000package stringprep import ( "fmt" "testing" ) func TestRanges(t *testing.T) { rangeTests := []struct { label string table Set in rune out bool }{ // Table A.1 {label: "A1", table: TableA1, in: 0x0221, out: true}, {label: "A1", table: TableA1, in: 0x0955, out: true}, {label: "A1", table: TableA1, in: 0x0956, out: true}, {label: "A1", table: TableA1, in: 0x0957, out: true}, {label: "A1", table: TableA1, in: 0x0020, out: false}, // Table C.1.1 {label: "C1.1", table: TableC1_1, in: 0x0020, out: true}, {label: "C1.1", table: TableC1_1, in: 0x0040, out: false}, // Table C.1.2 {label: "C1.2", table: TableC1_2, in: 0x200A, out: true}, {label: "C1.2", table: TableC1_2, in: 0x0040, out: false}, // Table C.2.1 {label: "C2.1", table: TableC2_1, in: 0x0000, out: true}, {label: "C2.1", table: TableC2_1, in: 0x0010, out: true}, {label: "C2.1", table: TableC2_1, in: 0x001F, out: true}, {label: "C2.1", table: TableC2_1, in: 0x007F, out: true}, {label: "C2.1", table: TableC2_1, in: 0x0040, out: false}, // Table C.2.2 {label: "C2.2", table: TableC2_2, in: 0x0080, out: true}, {label: "C2.2", table: TableC2_2, in: 0x0090, out: true}, {label: "C2.2", table: TableC2_2, in: 0x009F, out: true}, {label: "C2.2", table: TableC2_2, in: 0x2028, out: true}, {label: "C2.2", table: TableC2_2, in: 0xFEFF, out: true}, {label: "C2.2", table: TableC2_2, in: 0x1D173, out: true}, {label: "C2.2", table: TableC2_2, in: 0x1D17A, out: true}, {label: "C2.2", table: TableC2_2, in: 0x0040, out: false}, // Table C.3 {label: "C3", table: TableC3, in: 0xE000, out: true}, {label: "C3", table: TableC3, in: 0xF000, out: true}, {label: "C3", table: TableC3, in: 0xF8FF, out: true}, {label: "C3", table: TableC3, in: 0xF0000, out: true}, {label: "C3", table: TableC3, in: 0xF1000, out: true}, {label: "C3", table: TableC3, in: 0xFFFFD, out: true}, {label: "C3", table: TableC3, in: 0x100000, out: true}, {label: "C3", table: TableC3, in: 0x10ABCD, out: true}, {label: "C3", table: TableC3, in: 0x10FFFD, out: true}, {label: "C3", table: TableC3, in: 0x0040, out: false}, // Table C.4 {label: "C4", table: TableC4, in: 0xFDD0, out: true}, {label: "C4", table: TableC4, in: 0xFFFF, out: true}, {label: "C4", table: TableC4, in: 0x0040, out: false}, // Table C.5 {label: "C5", table: TableC5, in: 0xD801, out: true}, {label: "C5", table: TableC5, in: 0x0040, out: false}, // Table C.6 {label: "C6", table: TableC6, in: 0xFFFA, out: true}, {label: "C6", table: TableC6, in: 0x0040, out: false}, // Table C.7 {label: "C7", table: TableC7, in: 0x2FFB, out: true}, {label: "C7", table: TableC7, in: 0x0040, out: false}, // Table C.8 {label: "C8", table: TableC8, in: 0x0341, out: true}, {label: "C8", table: TableC8, in: 0x0040, out: false}, // Table C.9 {label: "C9", table: TableC9, in: 0xE0001, out: true}, {label: "C9", table: TableC9, in: 0xE007E, out: true}, {label: "C9", table: TableC9, in: 0x0040, out: false}, // Table D.1 {label: "D1", table: TableD1, in: 0x200F, out: true}, {label: "D1", table: TableD1, in: 0x0040, out: false}, } for _, c := range rangeTests { t.Run(fmt.Sprintf("%s 0x%04x", c.label, c.in), func(t *testing.T) { if got := c.table.Contains(c.in); got != c.out { t.Errorf("input '0x%04x' was %v, expected %v", c.in, got, c.out) } }) } } stringprep-1.0.4/tables.go000066400000000000000000005024531434412470700155310ustar00rootroot00000000000000// Copyright 2018 by David A. Golden. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 package stringprep var tableA1 = Set{ RuneRange{0x0221, 0x0221}, RuneRange{0x0234, 0x024F}, RuneRange{0x02AE, 0x02AF}, RuneRange{0x02EF, 0x02FF}, RuneRange{0x0350, 0x035F}, RuneRange{0x0370, 0x0373}, RuneRange{0x0376, 0x0379}, RuneRange{0x037B, 0x037D}, RuneRange{0x037F, 0x0383}, RuneRange{0x038B, 0x038B}, RuneRange{0x038D, 0x038D}, RuneRange{0x03A2, 0x03A2}, RuneRange{0x03CF, 0x03CF}, RuneRange{0x03F7, 0x03FF}, RuneRange{0x0487, 0x0487}, RuneRange{0x04CF, 0x04CF}, RuneRange{0x04F6, 0x04F7}, RuneRange{0x04FA, 0x04FF}, RuneRange{0x0510, 0x0530}, RuneRange{0x0557, 0x0558}, RuneRange{0x0560, 0x0560}, RuneRange{0x0588, 0x0588}, RuneRange{0x058B, 0x0590}, RuneRange{0x05A2, 0x05A2}, RuneRange{0x05BA, 0x05BA}, RuneRange{0x05C5, 0x05CF}, RuneRange{0x05EB, 0x05EF}, RuneRange{0x05F5, 0x060B}, RuneRange{0x060D, 0x061A}, RuneRange{0x061C, 0x061E}, RuneRange{0x0620, 0x0620}, RuneRange{0x063B, 0x063F}, RuneRange{0x0656, 0x065F}, RuneRange{0x06EE, 0x06EF}, RuneRange{0x06FF, 0x06FF}, RuneRange{0x070E, 0x070E}, RuneRange{0x072D, 0x072F}, RuneRange{0x074B, 0x077F}, RuneRange{0x07B2, 0x0900}, RuneRange{0x0904, 0x0904}, RuneRange{0x093A, 0x093B}, RuneRange{0x094E, 0x094F}, RuneRange{0x0955, 0x0957}, RuneRange{0x0971, 0x0980}, RuneRange{0x0984, 0x0984}, RuneRange{0x098D, 0x098E}, RuneRange{0x0991, 0x0992}, RuneRange{0x09A9, 0x09A9}, RuneRange{0x09B1, 0x09B1}, RuneRange{0x09B3, 0x09B5}, RuneRange{0x09BA, 0x09BB}, RuneRange{0x09BD, 0x09BD}, RuneRange{0x09C5, 0x09C6}, RuneRange{0x09C9, 0x09CA}, RuneRange{0x09CE, 0x09D6}, RuneRange{0x09D8, 0x09DB}, RuneRange{0x09DE, 0x09DE}, RuneRange{0x09E4, 0x09E5}, RuneRange{0x09FB, 0x0A01}, RuneRange{0x0A03, 0x0A04}, RuneRange{0x0A0B, 0x0A0E}, RuneRange{0x0A11, 0x0A12}, RuneRange{0x0A29, 0x0A29}, RuneRange{0x0A31, 0x0A31}, RuneRange{0x0A34, 0x0A34}, RuneRange{0x0A37, 0x0A37}, RuneRange{0x0A3A, 0x0A3B}, RuneRange{0x0A3D, 0x0A3D}, RuneRange{0x0A43, 0x0A46}, RuneRange{0x0A49, 0x0A4A}, RuneRange{0x0A4E, 0x0A58}, RuneRange{0x0A5D, 0x0A5D}, RuneRange{0x0A5F, 0x0A65}, RuneRange{0x0A75, 0x0A80}, RuneRange{0x0A84, 0x0A84}, RuneRange{0x0A8C, 0x0A8C}, RuneRange{0x0A8E, 0x0A8E}, RuneRange{0x0A92, 0x0A92}, RuneRange{0x0AA9, 0x0AA9}, RuneRange{0x0AB1, 0x0AB1}, RuneRange{0x0AB4, 0x0AB4}, RuneRange{0x0ABA, 0x0ABB}, RuneRange{0x0AC6, 0x0AC6}, RuneRange{0x0ACA, 0x0ACA}, RuneRange{0x0ACE, 0x0ACF}, RuneRange{0x0AD1, 0x0ADF}, RuneRange{0x0AE1, 0x0AE5}, RuneRange{0x0AF0, 0x0B00}, RuneRange{0x0B04, 0x0B04}, RuneRange{0x0B0D, 0x0B0E}, RuneRange{0x0B11, 0x0B12}, RuneRange{0x0B29, 0x0B29}, RuneRange{0x0B31, 0x0B31}, RuneRange{0x0B34, 0x0B35}, RuneRange{0x0B3A, 0x0B3B}, RuneRange{0x0B44, 0x0B46}, RuneRange{0x0B49, 0x0B4A}, RuneRange{0x0B4E, 0x0B55}, RuneRange{0x0B58, 0x0B5B}, RuneRange{0x0B5E, 0x0B5E}, RuneRange{0x0B62, 0x0B65}, RuneRange{0x0B71, 0x0B81}, RuneRange{0x0B84, 0x0B84}, RuneRange{0x0B8B, 0x0B8D}, RuneRange{0x0B91, 0x0B91}, RuneRange{0x0B96, 0x0B98}, RuneRange{0x0B9B, 0x0B9B}, RuneRange{0x0B9D, 0x0B9D}, RuneRange{0x0BA0, 0x0BA2}, RuneRange{0x0BA5, 0x0BA7}, RuneRange{0x0BAB, 0x0BAD}, RuneRange{0x0BB6, 0x0BB6}, RuneRange{0x0BBA, 0x0BBD}, RuneRange{0x0BC3, 0x0BC5}, RuneRange{0x0BC9, 0x0BC9}, RuneRange{0x0BCE, 0x0BD6}, RuneRange{0x0BD8, 0x0BE6}, RuneRange{0x0BF3, 0x0C00}, RuneRange{0x0C04, 0x0C04}, RuneRange{0x0C0D, 0x0C0D}, RuneRange{0x0C11, 0x0C11}, RuneRange{0x0C29, 0x0C29}, RuneRange{0x0C34, 0x0C34}, RuneRange{0x0C3A, 0x0C3D}, RuneRange{0x0C45, 0x0C45}, RuneRange{0x0C49, 0x0C49}, RuneRange{0x0C4E, 0x0C54}, RuneRange{0x0C57, 0x0C5F}, RuneRange{0x0C62, 0x0C65}, RuneRange{0x0C70, 0x0C81}, RuneRange{0x0C84, 0x0C84}, RuneRange{0x0C8D, 0x0C8D}, RuneRange{0x0C91, 0x0C91}, RuneRange{0x0CA9, 0x0CA9}, RuneRange{0x0CB4, 0x0CB4}, RuneRange{0x0CBA, 0x0CBD}, RuneRange{0x0CC5, 0x0CC5}, RuneRange{0x0CC9, 0x0CC9}, RuneRange{0x0CCE, 0x0CD4}, RuneRange{0x0CD7, 0x0CDD}, RuneRange{0x0CDF, 0x0CDF}, RuneRange{0x0CE2, 0x0CE5}, RuneRange{0x0CF0, 0x0D01}, RuneRange{0x0D04, 0x0D04}, RuneRange{0x0D0D, 0x0D0D}, RuneRange{0x0D11, 0x0D11}, RuneRange{0x0D29, 0x0D29}, RuneRange{0x0D3A, 0x0D3D}, RuneRange{0x0D44, 0x0D45}, RuneRange{0x0D49, 0x0D49}, RuneRange{0x0D4E, 0x0D56}, RuneRange{0x0D58, 0x0D5F}, RuneRange{0x0D62, 0x0D65}, RuneRange{0x0D70, 0x0D81}, RuneRange{0x0D84, 0x0D84}, RuneRange{0x0D97, 0x0D99}, RuneRange{0x0DB2, 0x0DB2}, RuneRange{0x0DBC, 0x0DBC}, RuneRange{0x0DBE, 0x0DBF}, RuneRange{0x0DC7, 0x0DC9}, RuneRange{0x0DCB, 0x0DCE}, RuneRange{0x0DD5, 0x0DD5}, RuneRange{0x0DD7, 0x0DD7}, RuneRange{0x0DE0, 0x0DF1}, RuneRange{0x0DF5, 0x0E00}, RuneRange{0x0E3B, 0x0E3E}, RuneRange{0x0E5C, 0x0E80}, RuneRange{0x0E83, 0x0E83}, RuneRange{0x0E85, 0x0E86}, RuneRange{0x0E89, 0x0E89}, RuneRange{0x0E8B, 0x0E8C}, RuneRange{0x0E8E, 0x0E93}, RuneRange{0x0E98, 0x0E98}, RuneRange{0x0EA0, 0x0EA0}, RuneRange{0x0EA4, 0x0EA4}, RuneRange{0x0EA6, 0x0EA6}, RuneRange{0x0EA8, 0x0EA9}, RuneRange{0x0EAC, 0x0EAC}, RuneRange{0x0EBA, 0x0EBA}, RuneRange{0x0EBE, 0x0EBF}, RuneRange{0x0EC5, 0x0EC5}, RuneRange{0x0EC7, 0x0EC7}, RuneRange{0x0ECE, 0x0ECF}, RuneRange{0x0EDA, 0x0EDB}, RuneRange{0x0EDE, 0x0EFF}, RuneRange{0x0F48, 0x0F48}, RuneRange{0x0F6B, 0x0F70}, RuneRange{0x0F8C, 0x0F8F}, RuneRange{0x0F98, 0x0F98}, RuneRange{0x0FBD, 0x0FBD}, RuneRange{0x0FCD, 0x0FCE}, RuneRange{0x0FD0, 0x0FFF}, RuneRange{0x1022, 0x1022}, RuneRange{0x1028, 0x1028}, RuneRange{0x102B, 0x102B}, RuneRange{0x1033, 0x1035}, RuneRange{0x103A, 0x103F}, RuneRange{0x105A, 0x109F}, RuneRange{0x10C6, 0x10CF}, RuneRange{0x10F9, 0x10FA}, RuneRange{0x10FC, 0x10FF}, RuneRange{0x115A, 0x115E}, RuneRange{0x11A3, 0x11A7}, RuneRange{0x11FA, 0x11FF}, RuneRange{0x1207, 0x1207}, RuneRange{0x1247, 0x1247}, RuneRange{0x1249, 0x1249}, RuneRange{0x124E, 0x124F}, RuneRange{0x1257, 0x1257}, RuneRange{0x1259, 0x1259}, RuneRange{0x125E, 0x125F}, RuneRange{0x1287, 0x1287}, RuneRange{0x1289, 0x1289}, RuneRange{0x128E, 0x128F}, RuneRange{0x12AF, 0x12AF}, RuneRange{0x12B1, 0x12B1}, RuneRange{0x12B6, 0x12B7}, RuneRange{0x12BF, 0x12BF}, RuneRange{0x12C1, 0x12C1}, RuneRange{0x12C6, 0x12C7}, RuneRange{0x12CF, 0x12CF}, RuneRange{0x12D7, 0x12D7}, RuneRange{0x12EF, 0x12EF}, RuneRange{0x130F, 0x130F}, RuneRange{0x1311, 0x1311}, RuneRange{0x1316, 0x1317}, RuneRange{0x131F, 0x131F}, RuneRange{0x1347, 0x1347}, RuneRange{0x135B, 0x1360}, RuneRange{0x137D, 0x139F}, RuneRange{0x13F5, 0x1400}, RuneRange{0x1677, 0x167F}, RuneRange{0x169D, 0x169F}, RuneRange{0x16F1, 0x16FF}, RuneRange{0x170D, 0x170D}, RuneRange{0x1715, 0x171F}, RuneRange{0x1737, 0x173F}, RuneRange{0x1754, 0x175F}, RuneRange{0x176D, 0x176D}, RuneRange{0x1771, 0x1771}, RuneRange{0x1774, 0x177F}, RuneRange{0x17DD, 0x17DF}, RuneRange{0x17EA, 0x17FF}, RuneRange{0x180F, 0x180F}, RuneRange{0x181A, 0x181F}, RuneRange{0x1878, 0x187F}, RuneRange{0x18AA, 0x1DFF}, RuneRange{0x1E9C, 0x1E9F}, RuneRange{0x1EFA, 0x1EFF}, RuneRange{0x1F16, 0x1F17}, RuneRange{0x1F1E, 0x1F1F}, RuneRange{0x1F46, 0x1F47}, RuneRange{0x1F4E, 0x1F4F}, RuneRange{0x1F58, 0x1F58}, RuneRange{0x1F5A, 0x1F5A}, RuneRange{0x1F5C, 0x1F5C}, RuneRange{0x1F5E, 0x1F5E}, RuneRange{0x1F7E, 0x1F7F}, RuneRange{0x1FB5, 0x1FB5}, RuneRange{0x1FC5, 0x1FC5}, RuneRange{0x1FD4, 0x1FD5}, RuneRange{0x1FDC, 0x1FDC}, RuneRange{0x1FF0, 0x1FF1}, RuneRange{0x1FF5, 0x1FF5}, RuneRange{0x1FFF, 0x1FFF}, RuneRange{0x2053, 0x2056}, RuneRange{0x2058, 0x205E}, RuneRange{0x2064, 0x2069}, RuneRange{0x2072, 0x2073}, RuneRange{0x208F, 0x209F}, RuneRange{0x20B2, 0x20CF}, RuneRange{0x20EB, 0x20FF}, RuneRange{0x213B, 0x213C}, RuneRange{0x214C, 0x2152}, RuneRange{0x2184, 0x218F}, RuneRange{0x23CF, 0x23FF}, RuneRange{0x2427, 0x243F}, RuneRange{0x244B, 0x245F}, RuneRange{0x24FF, 0x24FF}, RuneRange{0x2614, 0x2615}, RuneRange{0x2618, 0x2618}, RuneRange{0x267E, 0x267F}, RuneRange{0x268A, 0x2700}, RuneRange{0x2705, 0x2705}, RuneRange{0x270A, 0x270B}, RuneRange{0x2728, 0x2728}, RuneRange{0x274C, 0x274C}, RuneRange{0x274E, 0x274E}, RuneRange{0x2753, 0x2755}, RuneRange{0x2757, 0x2757}, RuneRange{0x275F, 0x2760}, RuneRange{0x2795, 0x2797}, RuneRange{0x27B0, 0x27B0}, RuneRange{0x27BF, 0x27CF}, RuneRange{0x27EC, 0x27EF}, RuneRange{0x2B00, 0x2E7F}, RuneRange{0x2E9A, 0x2E9A}, RuneRange{0x2EF4, 0x2EFF}, RuneRange{0x2FD6, 0x2FEF}, RuneRange{0x2FFC, 0x2FFF}, RuneRange{0x3040, 0x3040}, RuneRange{0x3097, 0x3098}, RuneRange{0x3100, 0x3104}, RuneRange{0x312D, 0x3130}, RuneRange{0x318F, 0x318F}, RuneRange{0x31B8, 0x31EF}, RuneRange{0x321D, 0x321F}, RuneRange{0x3244, 0x3250}, RuneRange{0x327C, 0x327E}, RuneRange{0x32CC, 0x32CF}, RuneRange{0x32FF, 0x32FF}, RuneRange{0x3377, 0x337A}, RuneRange{0x33DE, 0x33DF}, RuneRange{0x33FF, 0x33FF}, RuneRange{0x4DB6, 0x4DFF}, RuneRange{0x9FA6, 0x9FFF}, RuneRange{0xA48D, 0xA48F}, RuneRange{0xA4C7, 0xABFF}, RuneRange{0xD7A4, 0xD7FF}, RuneRange{0xFA2E, 0xFA2F}, RuneRange{0xFA6B, 0xFAFF}, RuneRange{0xFB07, 0xFB12}, RuneRange{0xFB18, 0xFB1C}, RuneRange{0xFB37, 0xFB37}, RuneRange{0xFB3D, 0xFB3D}, RuneRange{0xFB3F, 0xFB3F}, RuneRange{0xFB42, 0xFB42}, RuneRange{0xFB45, 0xFB45}, RuneRange{0xFBB2, 0xFBD2}, RuneRange{0xFD40, 0xFD4F}, RuneRange{0xFD90, 0xFD91}, RuneRange{0xFDC8, 0xFDCF}, RuneRange{0xFDFD, 0xFDFF}, RuneRange{0xFE10, 0xFE1F}, RuneRange{0xFE24, 0xFE2F}, RuneRange{0xFE47, 0xFE48}, RuneRange{0xFE53, 0xFE53}, RuneRange{0xFE67, 0xFE67}, RuneRange{0xFE6C, 0xFE6F}, RuneRange{0xFE75, 0xFE75}, RuneRange{0xFEFD, 0xFEFE}, RuneRange{0xFF00, 0xFF00}, RuneRange{0xFFBF, 0xFFC1}, RuneRange{0xFFC8, 0xFFC9}, RuneRange{0xFFD0, 0xFFD1}, RuneRange{0xFFD8, 0xFFD9}, RuneRange{0xFFDD, 0xFFDF}, RuneRange{0xFFE7, 0xFFE7}, RuneRange{0xFFEF, 0xFFF8}, RuneRange{0x10000, 0x102FF}, RuneRange{0x1031F, 0x1031F}, RuneRange{0x10324, 0x1032F}, RuneRange{0x1034B, 0x103FF}, RuneRange{0x10426, 0x10427}, RuneRange{0x1044E, 0x1CFFF}, RuneRange{0x1D0F6, 0x1D0FF}, RuneRange{0x1D127, 0x1D129}, RuneRange{0x1D1DE, 0x1D3FF}, RuneRange{0x1D455, 0x1D455}, RuneRange{0x1D49D, 0x1D49D}, RuneRange{0x1D4A0, 0x1D4A1}, RuneRange{0x1D4A3, 0x1D4A4}, RuneRange{0x1D4A7, 0x1D4A8}, RuneRange{0x1D4AD, 0x1D4AD}, RuneRange{0x1D4BA, 0x1D4BA}, RuneRange{0x1D4BC, 0x1D4BC}, RuneRange{0x1D4C1, 0x1D4C1}, RuneRange{0x1D4C4, 0x1D4C4}, RuneRange{0x1D506, 0x1D506}, RuneRange{0x1D50B, 0x1D50C}, RuneRange{0x1D515, 0x1D515}, RuneRange{0x1D51D, 0x1D51D}, RuneRange{0x1D53A, 0x1D53A}, RuneRange{0x1D53F, 0x1D53F}, RuneRange{0x1D545, 0x1D545}, RuneRange{0x1D547, 0x1D549}, RuneRange{0x1D551, 0x1D551}, RuneRange{0x1D6A4, 0x1D6A7}, RuneRange{0x1D7CA, 0x1D7CD}, RuneRange{0x1D800, 0x1FFFD}, RuneRange{0x2A6D7, 0x2F7FF}, RuneRange{0x2FA1E, 0x2FFFD}, RuneRange{0x30000, 0x3FFFD}, RuneRange{0x40000, 0x4FFFD}, RuneRange{0x50000, 0x5FFFD}, RuneRange{0x60000, 0x6FFFD}, RuneRange{0x70000, 0x7FFFD}, RuneRange{0x80000, 0x8FFFD}, RuneRange{0x90000, 0x9FFFD}, RuneRange{0xA0000, 0xAFFFD}, RuneRange{0xB0000, 0xBFFFD}, RuneRange{0xC0000, 0xCFFFD}, RuneRange{0xD0000, 0xDFFFD}, RuneRange{0xE0000, 0xE0000}, RuneRange{0xE0002, 0xE001F}, RuneRange{0xE0080, 0xEFFFD}, } // TableA1 represents RFC-3454 Table A.1. var TableA1 Set = tableA1 var tableB1 = Mapping{ 0x00AD: []rune{}, // Map to nothing 0x034F: []rune{}, // Map to nothing 0x180B: []rune{}, // Map to nothing 0x180C: []rune{}, // Map to nothing 0x180D: []rune{}, // Map to nothing 0x200B: []rune{}, // Map to nothing 0x200C: []rune{}, // Map to nothing 0x200D: []rune{}, // Map to nothing 0x2060: []rune{}, // Map to nothing 0xFE00: []rune{}, // Map to nothing 0xFE01: []rune{}, // Map to nothing 0xFE02: []rune{}, // Map to nothing 0xFE03: []rune{}, // Map to nothing 0xFE04: []rune{}, // Map to nothing 0xFE05: []rune{}, // Map to nothing 0xFE06: []rune{}, // Map to nothing 0xFE07: []rune{}, // Map to nothing 0xFE08: []rune{}, // Map to nothing 0xFE09: []rune{}, // Map to nothing 0xFE0A: []rune{}, // Map to nothing 0xFE0B: []rune{}, // Map to nothing 0xFE0C: []rune{}, // Map to nothing 0xFE0D: []rune{}, // Map to nothing 0xFE0E: []rune{}, // Map to nothing 0xFE0F: []rune{}, // Map to nothing 0xFEFF: []rune{}, // Map to nothing } // TableB1 represents RFC-3454 Table B.1. var TableB1 Mapping = tableB1 var tableB2 = Mapping{ 0x0041: []rune{0x0061}, // Case map 0x0042: []rune{0x0062}, // Case map 0x0043: []rune{0x0063}, // Case map 0x0044: []rune{0x0064}, // Case map 0x0045: []rune{0x0065}, // Case map 0x0046: []rune{0x0066}, // Case map 0x0047: []rune{0x0067}, // Case map 0x0048: []rune{0x0068}, // Case map 0x0049: []rune{0x0069}, // Case map 0x004A: []rune{0x006A}, // Case map 0x004B: []rune{0x006B}, // Case map 0x004C: []rune{0x006C}, // Case map 0x004D: []rune{0x006D}, // Case map 0x004E: []rune{0x006E}, // Case map 0x004F: []rune{0x006F}, // Case map 0x0050: []rune{0x0070}, // Case map 0x0051: []rune{0x0071}, // Case map 0x0052: []rune{0x0072}, // Case map 0x0053: []rune{0x0073}, // Case map 0x0054: []rune{0x0074}, // Case map 0x0055: []rune{0x0075}, // Case map 0x0056: []rune{0x0076}, // Case map 0x0057: []rune{0x0077}, // Case map 0x0058: []rune{0x0078}, // Case map 0x0059: []rune{0x0079}, // Case map 0x005A: []rune{0x007A}, // Case map 0x00B5: []rune{0x03BC}, // Case map 0x00C0: []rune{0x00E0}, // Case map 0x00C1: []rune{0x00E1}, // Case map 0x00C2: []rune{0x00E2}, // Case map 0x00C3: []rune{0x00E3}, // Case map 0x00C4: []rune{0x00E4}, // Case map 0x00C5: []rune{0x00E5}, // Case map 0x00C6: []rune{0x00E6}, // Case map 0x00C7: []rune{0x00E7}, // Case map 0x00C8: []rune{0x00E8}, // Case map 0x00C9: []rune{0x00E9}, // Case map 0x00CA: []rune{0x00EA}, // Case map 0x00CB: []rune{0x00EB}, // Case map 0x00CC: []rune{0x00EC}, // Case map 0x00CD: []rune{0x00ED}, // Case map 0x00CE: []rune{0x00EE}, // Case map 0x00CF: []rune{0x00EF}, // Case map 0x00D0: []rune{0x00F0}, // Case map 0x00D1: []rune{0x00F1}, // Case map 0x00D2: []rune{0x00F2}, // Case map 0x00D3: []rune{0x00F3}, // Case map 0x00D4: []rune{0x00F4}, // Case map 0x00D5: []rune{0x00F5}, // Case map 0x00D6: []rune{0x00F6}, // Case map 0x00D8: []rune{0x00F8}, // Case map 0x00D9: []rune{0x00F9}, // Case map 0x00DA: []rune{0x00FA}, // Case map 0x00DB: []rune{0x00FB}, // Case map 0x00DC: []rune{0x00FC}, // Case map 0x00DD: []rune{0x00FD}, // Case map 0x00DE: []rune{0x00FE}, // Case map 0x00DF: []rune{0x0073, 0x0073}, // Case map 0x0100: []rune{0x0101}, // Case map 0x0102: []rune{0x0103}, // Case map 0x0104: []rune{0x0105}, // Case map 0x0106: []rune{0x0107}, // Case map 0x0108: []rune{0x0109}, // Case map 0x010A: []rune{0x010B}, // Case map 0x010C: []rune{0x010D}, // Case map 0x010E: []rune{0x010F}, // Case map 0x0110: []rune{0x0111}, // Case map 0x0112: []rune{0x0113}, // Case map 0x0114: []rune{0x0115}, // Case map 0x0116: []rune{0x0117}, // Case map 0x0118: []rune{0x0119}, // Case map 0x011A: []rune{0x011B}, // Case map 0x011C: []rune{0x011D}, // Case map 0x011E: []rune{0x011F}, // Case map 0x0120: []rune{0x0121}, // Case map 0x0122: []rune{0x0123}, // Case map 0x0124: []rune{0x0125}, // Case map 0x0126: []rune{0x0127}, // Case map 0x0128: []rune{0x0129}, // Case map 0x012A: []rune{0x012B}, // Case map 0x012C: []rune{0x012D}, // Case map 0x012E: []rune{0x012F}, // Case map 0x0130: []rune{0x0069, 0x0307}, // Case map 0x0132: []rune{0x0133}, // Case map 0x0134: []rune{0x0135}, // Case map 0x0136: []rune{0x0137}, // Case map 0x0139: []rune{0x013A}, // Case map 0x013B: []rune{0x013C}, // Case map 0x013D: []rune{0x013E}, // Case map 0x013F: []rune{0x0140}, // Case map 0x0141: []rune{0x0142}, // Case map 0x0143: []rune{0x0144}, // Case map 0x0145: []rune{0x0146}, // Case map 0x0147: []rune{0x0148}, // Case map 0x0149: []rune{0x02BC, 0x006E}, // Case map 0x014A: []rune{0x014B}, // Case map 0x014C: []rune{0x014D}, // Case map 0x014E: []rune{0x014F}, // Case map 0x0150: []rune{0x0151}, // Case map 0x0152: []rune{0x0153}, // Case map 0x0154: []rune{0x0155}, // Case map 0x0156: []rune{0x0157}, // Case map 0x0158: []rune{0x0159}, // Case map 0x015A: []rune{0x015B}, // Case map 0x015C: []rune{0x015D}, // Case map 0x015E: []rune{0x015F}, // Case map 0x0160: []rune{0x0161}, // Case map 0x0162: []rune{0x0163}, // Case map 0x0164: []rune{0x0165}, // Case map 0x0166: []rune{0x0167}, // Case map 0x0168: []rune{0x0169}, // Case map 0x016A: []rune{0x016B}, // Case map 0x016C: []rune{0x016D}, // Case map 0x016E: []rune{0x016F}, // Case map 0x0170: []rune{0x0171}, // Case map 0x0172: []rune{0x0173}, // Case map 0x0174: []rune{0x0175}, // Case map 0x0176: []rune{0x0177}, // Case map 0x0178: []rune{0x00FF}, // Case map 0x0179: []rune{0x017A}, // Case map 0x017B: []rune{0x017C}, // Case map 0x017D: []rune{0x017E}, // Case map 0x017F: []rune{0x0073}, // Case map 0x0181: []rune{0x0253}, // Case map 0x0182: []rune{0x0183}, // Case map 0x0184: []rune{0x0185}, // Case map 0x0186: []rune{0x0254}, // Case map 0x0187: []rune{0x0188}, // Case map 0x0189: []rune{0x0256}, // Case map 0x018A: []rune{0x0257}, // Case map 0x018B: []rune{0x018C}, // Case map 0x018E: []rune{0x01DD}, // Case map 0x018F: []rune{0x0259}, // Case map 0x0190: []rune{0x025B}, // Case map 0x0191: []rune{0x0192}, // Case map 0x0193: []rune{0x0260}, // Case map 0x0194: []rune{0x0263}, // Case map 0x0196: []rune{0x0269}, // Case map 0x0197: []rune{0x0268}, // Case map 0x0198: []rune{0x0199}, // Case map 0x019C: []rune{0x026F}, // Case map 0x019D: []rune{0x0272}, // Case map 0x019F: []rune{0x0275}, // Case map 0x01A0: []rune{0x01A1}, // Case map 0x01A2: []rune{0x01A3}, // Case map 0x01A4: []rune{0x01A5}, // Case map 0x01A6: []rune{0x0280}, // Case map 0x01A7: []rune{0x01A8}, // Case map 0x01A9: []rune{0x0283}, // Case map 0x01AC: []rune{0x01AD}, // Case map 0x01AE: []rune{0x0288}, // Case map 0x01AF: []rune{0x01B0}, // Case map 0x01B1: []rune{0x028A}, // Case map 0x01B2: []rune{0x028B}, // Case map 0x01B3: []rune{0x01B4}, // Case map 0x01B5: []rune{0x01B6}, // Case map 0x01B7: []rune{0x0292}, // Case map 0x01B8: []rune{0x01B9}, // Case map 0x01BC: []rune{0x01BD}, // Case map 0x01C4: []rune{0x01C6}, // Case map 0x01C5: []rune{0x01C6}, // Case map 0x01C7: []rune{0x01C9}, // Case map 0x01C8: []rune{0x01C9}, // Case map 0x01CA: []rune{0x01CC}, // Case map 0x01CB: []rune{0x01CC}, // Case map 0x01CD: []rune{0x01CE}, // Case map 0x01CF: []rune{0x01D0}, // Case map 0x01D1: []rune{0x01D2}, // Case map 0x01D3: []rune{0x01D4}, // Case map 0x01D5: []rune{0x01D6}, // Case map 0x01D7: []rune{0x01D8}, // Case map 0x01D9: []rune{0x01DA}, // Case map 0x01DB: []rune{0x01DC}, // Case map 0x01DE: []rune{0x01DF}, // Case map 0x01E0: []rune{0x01E1}, // Case map 0x01E2: []rune{0x01E3}, // Case map 0x01E4: []rune{0x01E5}, // Case map 0x01E6: []rune{0x01E7}, // Case map 0x01E8: []rune{0x01E9}, // Case map 0x01EA: []rune{0x01EB}, // Case map 0x01EC: []rune{0x01ED}, // Case map 0x01EE: []rune{0x01EF}, // Case map 0x01F0: []rune{0x006A, 0x030C}, // Case map 0x01F1: []rune{0x01F3}, // Case map 0x01F2: []rune{0x01F3}, // Case map 0x01F4: []rune{0x01F5}, // Case map 0x01F6: []rune{0x0195}, // Case map 0x01F7: []rune{0x01BF}, // Case map 0x01F8: []rune{0x01F9}, // Case map 0x01FA: []rune{0x01FB}, // Case map 0x01FC: []rune{0x01FD}, // Case map 0x01FE: []rune{0x01FF}, // Case map 0x0200: []rune{0x0201}, // Case map 0x0202: []rune{0x0203}, // Case map 0x0204: []rune{0x0205}, // Case map 0x0206: []rune{0x0207}, // Case map 0x0208: []rune{0x0209}, // Case map 0x020A: []rune{0x020B}, // Case map 0x020C: []rune{0x020D}, // Case map 0x020E: []rune{0x020F}, // Case map 0x0210: []rune{0x0211}, // Case map 0x0212: []rune{0x0213}, // Case map 0x0214: []rune{0x0215}, // Case map 0x0216: []rune{0x0217}, // Case map 0x0218: []rune{0x0219}, // Case map 0x021A: []rune{0x021B}, // Case map 0x021C: []rune{0x021D}, // Case map 0x021E: []rune{0x021F}, // Case map 0x0220: []rune{0x019E}, // Case map 0x0222: []rune{0x0223}, // Case map 0x0224: []rune{0x0225}, // Case map 0x0226: []rune{0x0227}, // Case map 0x0228: []rune{0x0229}, // Case map 0x022A: []rune{0x022B}, // Case map 0x022C: []rune{0x022D}, // Case map 0x022E: []rune{0x022F}, // Case map 0x0230: []rune{0x0231}, // Case map 0x0232: []rune{0x0233}, // Case map 0x0345: []rune{0x03B9}, // Case map 0x037A: []rune{0x0020, 0x03B9}, // Additional folding 0x0386: []rune{0x03AC}, // Case map 0x0388: []rune{0x03AD}, // Case map 0x0389: []rune{0x03AE}, // Case map 0x038A: []rune{0x03AF}, // Case map 0x038C: []rune{0x03CC}, // Case map 0x038E: []rune{0x03CD}, // Case map 0x038F: []rune{0x03CE}, // Case map 0x0390: []rune{0x03B9, 0x0308, 0x0301}, // Case map 0x0391: []rune{0x03B1}, // Case map 0x0392: []rune{0x03B2}, // Case map 0x0393: []rune{0x03B3}, // Case map 0x0394: []rune{0x03B4}, // Case map 0x0395: []rune{0x03B5}, // Case map 0x0396: []rune{0x03B6}, // Case map 0x0397: []rune{0x03B7}, // Case map 0x0398: []rune{0x03B8}, // Case map 0x0399: []rune{0x03B9}, // Case map 0x039A: []rune{0x03BA}, // Case map 0x039B: []rune{0x03BB}, // Case map 0x039C: []rune{0x03BC}, // Case map 0x039D: []rune{0x03BD}, // Case map 0x039E: []rune{0x03BE}, // Case map 0x039F: []rune{0x03BF}, // Case map 0x03A0: []rune{0x03C0}, // Case map 0x03A1: []rune{0x03C1}, // Case map 0x03A3: []rune{0x03C3}, // Case map 0x03A4: []rune{0x03C4}, // Case map 0x03A5: []rune{0x03C5}, // Case map 0x03A6: []rune{0x03C6}, // Case map 0x03A7: []rune{0x03C7}, // Case map 0x03A8: []rune{0x03C8}, // Case map 0x03A9: []rune{0x03C9}, // Case map 0x03AA: []rune{0x03CA}, // Case map 0x03AB: []rune{0x03CB}, // Case map 0x03B0: []rune{0x03C5, 0x0308, 0x0301}, // Case map 0x03C2: []rune{0x03C3}, // Case map 0x03D0: []rune{0x03B2}, // Case map 0x03D1: []rune{0x03B8}, // Case map 0x03D2: []rune{0x03C5}, // Additional folding 0x03D3: []rune{0x03CD}, // Additional folding 0x03D4: []rune{0x03CB}, // Additional folding 0x03D5: []rune{0x03C6}, // Case map 0x03D6: []rune{0x03C0}, // Case map 0x03D8: []rune{0x03D9}, // Case map 0x03DA: []rune{0x03DB}, // Case map 0x03DC: []rune{0x03DD}, // Case map 0x03DE: []rune{0x03DF}, // Case map 0x03E0: []rune{0x03E1}, // Case map 0x03E2: []rune{0x03E3}, // Case map 0x03E4: []rune{0x03E5}, // Case map 0x03E6: []rune{0x03E7}, // Case map 0x03E8: []rune{0x03E9}, // Case map 0x03EA: []rune{0x03EB}, // Case map 0x03EC: []rune{0x03ED}, // Case map 0x03EE: []rune{0x03EF}, // Case map 0x03F0: []rune{0x03BA}, // Case map 0x03F1: []rune{0x03C1}, // Case map 0x03F2: []rune{0x03C3}, // Case map 0x03F4: []rune{0x03B8}, // Case map 0x03F5: []rune{0x03B5}, // Case map 0x0400: []rune{0x0450}, // Case map 0x0401: []rune{0x0451}, // Case map 0x0402: []rune{0x0452}, // Case map 0x0403: []rune{0x0453}, // Case map 0x0404: []rune{0x0454}, // Case map 0x0405: []rune{0x0455}, // Case map 0x0406: []rune{0x0456}, // Case map 0x0407: []rune{0x0457}, // Case map 0x0408: []rune{0x0458}, // Case map 0x0409: []rune{0x0459}, // Case map 0x040A: []rune{0x045A}, // Case map 0x040B: []rune{0x045B}, // Case map 0x040C: []rune{0x045C}, // Case map 0x040D: []rune{0x045D}, // Case map 0x040E: []rune{0x045E}, // Case map 0x040F: []rune{0x045F}, // Case map 0x0410: []rune{0x0430}, // Case map 0x0411: []rune{0x0431}, // Case map 0x0412: []rune{0x0432}, // Case map 0x0413: []rune{0x0433}, // Case map 0x0414: []rune{0x0434}, // Case map 0x0415: []rune{0x0435}, // Case map 0x0416: []rune{0x0436}, // Case map 0x0417: []rune{0x0437}, // Case map 0x0418: []rune{0x0438}, // Case map 0x0419: []rune{0x0439}, // Case map 0x041A: []rune{0x043A}, // Case map 0x041B: []rune{0x043B}, // Case map 0x041C: []rune{0x043C}, // Case map 0x041D: []rune{0x043D}, // Case map 0x041E: []rune{0x043E}, // Case map 0x041F: []rune{0x043F}, // Case map 0x0420: []rune{0x0440}, // Case map 0x0421: []rune{0x0441}, // Case map 0x0422: []rune{0x0442}, // Case map 0x0423: []rune{0x0443}, // Case map 0x0424: []rune{0x0444}, // Case map 0x0425: []rune{0x0445}, // Case map 0x0426: []rune{0x0446}, // Case map 0x0427: []rune{0x0447}, // Case map 0x0428: []rune{0x0448}, // Case map 0x0429: []rune{0x0449}, // Case map 0x042A: []rune{0x044A}, // Case map 0x042B: []rune{0x044B}, // Case map 0x042C: []rune{0x044C}, // Case map 0x042D: []rune{0x044D}, // Case map 0x042E: []rune{0x044E}, // Case map 0x042F: []rune{0x044F}, // Case map 0x0460: []rune{0x0461}, // Case map 0x0462: []rune{0x0463}, // Case map 0x0464: []rune{0x0465}, // Case map 0x0466: []rune{0x0467}, // Case map 0x0468: []rune{0x0469}, // Case map 0x046A: []rune{0x046B}, // Case map 0x046C: []rune{0x046D}, // Case map 0x046E: []rune{0x046F}, // Case map 0x0470: []rune{0x0471}, // Case map 0x0472: []rune{0x0473}, // Case map 0x0474: []rune{0x0475}, // Case map 0x0476: []rune{0x0477}, // Case map 0x0478: []rune{0x0479}, // Case map 0x047A: []rune{0x047B}, // Case map 0x047C: []rune{0x047D}, // Case map 0x047E: []rune{0x047F}, // Case map 0x0480: []rune{0x0481}, // Case map 0x048A: []rune{0x048B}, // Case map 0x048C: []rune{0x048D}, // Case map 0x048E: []rune{0x048F}, // Case map 0x0490: []rune{0x0491}, // Case map 0x0492: []rune{0x0493}, // Case map 0x0494: []rune{0x0495}, // Case map 0x0496: []rune{0x0497}, // Case map 0x0498: []rune{0x0499}, // Case map 0x049A: []rune{0x049B}, // Case map 0x049C: []rune{0x049D}, // Case map 0x049E: []rune{0x049F}, // Case map 0x04A0: []rune{0x04A1}, // Case map 0x04A2: []rune{0x04A3}, // Case map 0x04A4: []rune{0x04A5}, // Case map 0x04A6: []rune{0x04A7}, // Case map 0x04A8: []rune{0x04A9}, // Case map 0x04AA: []rune{0x04AB}, // Case map 0x04AC: []rune{0x04AD}, // Case map 0x04AE: []rune{0x04AF}, // Case map 0x04B0: []rune{0x04B1}, // Case map 0x04B2: []rune{0x04B3}, // Case map 0x04B4: []rune{0x04B5}, // Case map 0x04B6: []rune{0x04B7}, // Case map 0x04B8: []rune{0x04B9}, // Case map 0x04BA: []rune{0x04BB}, // Case map 0x04BC: []rune{0x04BD}, // Case map 0x04BE: []rune{0x04BF}, // Case map 0x04C1: []rune{0x04C2}, // Case map 0x04C3: []rune{0x04C4}, // Case map 0x04C5: []rune{0x04C6}, // Case map 0x04C7: []rune{0x04C8}, // Case map 0x04C9: []rune{0x04CA}, // Case map 0x04CB: []rune{0x04CC}, // Case map 0x04CD: []rune{0x04CE}, // Case map 0x04D0: []rune{0x04D1}, // Case map 0x04D2: []rune{0x04D3}, // Case map 0x04D4: []rune{0x04D5}, // Case map 0x04D6: []rune{0x04D7}, // Case map 0x04D8: []rune{0x04D9}, // Case map 0x04DA: []rune{0x04DB}, // Case map 0x04DC: []rune{0x04DD}, // Case map 0x04DE: []rune{0x04DF}, // Case map 0x04E0: []rune{0x04E1}, // Case map 0x04E2: []rune{0x04E3}, // Case map 0x04E4: []rune{0x04E5}, // Case map 0x04E6: []rune{0x04E7}, // Case map 0x04E8: []rune{0x04E9}, // Case map 0x04EA: []rune{0x04EB}, // Case map 0x04EC: []rune{0x04ED}, // Case map 0x04EE: []rune{0x04EF}, // Case map 0x04F0: []rune{0x04F1}, // Case map 0x04F2: []rune{0x04F3}, // Case map 0x04F4: []rune{0x04F5}, // Case map 0x04F8: []rune{0x04F9}, // Case map 0x0500: []rune{0x0501}, // Case map 0x0502: []rune{0x0503}, // Case map 0x0504: []rune{0x0505}, // Case map 0x0506: []rune{0x0507}, // Case map 0x0508: []rune{0x0509}, // Case map 0x050A: []rune{0x050B}, // Case map 0x050C: []rune{0x050D}, // Case map 0x050E: []rune{0x050F}, // Case map 0x0531: []rune{0x0561}, // Case map 0x0532: []rune{0x0562}, // Case map 0x0533: []rune{0x0563}, // Case map 0x0534: []rune{0x0564}, // Case map 0x0535: []rune{0x0565}, // Case map 0x0536: []rune{0x0566}, // Case map 0x0537: []rune{0x0567}, // Case map 0x0538: []rune{0x0568}, // Case map 0x0539: []rune{0x0569}, // Case map 0x053A: []rune{0x056A}, // Case map 0x053B: []rune{0x056B}, // Case map 0x053C: []rune{0x056C}, // Case map 0x053D: []rune{0x056D}, // Case map 0x053E: []rune{0x056E}, // Case map 0x053F: []rune{0x056F}, // Case map 0x0540: []rune{0x0570}, // Case map 0x0541: []rune{0x0571}, // Case map 0x0542: []rune{0x0572}, // Case map 0x0543: []rune{0x0573}, // Case map 0x0544: []rune{0x0574}, // Case map 0x0545: []rune{0x0575}, // Case map 0x0546: []rune{0x0576}, // Case map 0x0547: []rune{0x0577}, // Case map 0x0548: []rune{0x0578}, // Case map 0x0549: []rune{0x0579}, // Case map 0x054A: []rune{0x057A}, // Case map 0x054B: []rune{0x057B}, // Case map 0x054C: []rune{0x057C}, // Case map 0x054D: []rune{0x057D}, // Case map 0x054E: []rune{0x057E}, // Case map 0x054F: []rune{0x057F}, // Case map 0x0550: []rune{0x0580}, // Case map 0x0551: []rune{0x0581}, // Case map 0x0552: []rune{0x0582}, // Case map 0x0553: []rune{0x0583}, // Case map 0x0554: []rune{0x0584}, // Case map 0x0555: []rune{0x0585}, // Case map 0x0556: []rune{0x0586}, // Case map 0x0587: []rune{0x0565, 0x0582}, // Case map 0x1E00: []rune{0x1E01}, // Case map 0x1E02: []rune{0x1E03}, // Case map 0x1E04: []rune{0x1E05}, // Case map 0x1E06: []rune{0x1E07}, // Case map 0x1E08: []rune{0x1E09}, // Case map 0x1E0A: []rune{0x1E0B}, // Case map 0x1E0C: []rune{0x1E0D}, // Case map 0x1E0E: []rune{0x1E0F}, // Case map 0x1E10: []rune{0x1E11}, // Case map 0x1E12: []rune{0x1E13}, // Case map 0x1E14: []rune{0x1E15}, // Case map 0x1E16: []rune{0x1E17}, // Case map 0x1E18: []rune{0x1E19}, // Case map 0x1E1A: []rune{0x1E1B}, // Case map 0x1E1C: []rune{0x1E1D}, // Case map 0x1E1E: []rune{0x1E1F}, // Case map 0x1E20: []rune{0x1E21}, // Case map 0x1E22: []rune{0x1E23}, // Case map 0x1E24: []rune{0x1E25}, // Case map 0x1E26: []rune{0x1E27}, // Case map 0x1E28: []rune{0x1E29}, // Case map 0x1E2A: []rune{0x1E2B}, // Case map 0x1E2C: []rune{0x1E2D}, // Case map 0x1E2E: []rune{0x1E2F}, // Case map 0x1E30: []rune{0x1E31}, // Case map 0x1E32: []rune{0x1E33}, // Case map 0x1E34: []rune{0x1E35}, // Case map 0x1E36: []rune{0x1E37}, // Case map 0x1E38: []rune{0x1E39}, // Case map 0x1E3A: []rune{0x1E3B}, // Case map 0x1E3C: []rune{0x1E3D}, // Case map 0x1E3E: []rune{0x1E3F}, // Case map 0x1E40: []rune{0x1E41}, // Case map 0x1E42: []rune{0x1E43}, // Case map 0x1E44: []rune{0x1E45}, // Case map 0x1E46: []rune{0x1E47}, // Case map 0x1E48: []rune{0x1E49}, // Case map 0x1E4A: []rune{0x1E4B}, // Case map 0x1E4C: []rune{0x1E4D}, // Case map 0x1E4E: []rune{0x1E4F}, // Case map 0x1E50: []rune{0x1E51}, // Case map 0x1E52: []rune{0x1E53}, // Case map 0x1E54: []rune{0x1E55}, // Case map 0x1E56: []rune{0x1E57}, // Case map 0x1E58: []rune{0x1E59}, // Case map 0x1E5A: []rune{0x1E5B}, // Case map 0x1E5C: []rune{0x1E5D}, // Case map 0x1E5E: []rune{0x1E5F}, // Case map 0x1E60: []rune{0x1E61}, // Case map 0x1E62: []rune{0x1E63}, // Case map 0x1E64: []rune{0x1E65}, // Case map 0x1E66: []rune{0x1E67}, // Case map 0x1E68: []rune{0x1E69}, // Case map 0x1E6A: []rune{0x1E6B}, // Case map 0x1E6C: []rune{0x1E6D}, // Case map 0x1E6E: []rune{0x1E6F}, // Case map 0x1E70: []rune{0x1E71}, // Case map 0x1E72: []rune{0x1E73}, // Case map 0x1E74: []rune{0x1E75}, // Case map 0x1E76: []rune{0x1E77}, // Case map 0x1E78: []rune{0x1E79}, // Case map 0x1E7A: []rune{0x1E7B}, // Case map 0x1E7C: []rune{0x1E7D}, // Case map 0x1E7E: []rune{0x1E7F}, // Case map 0x1E80: []rune{0x1E81}, // Case map 0x1E82: []rune{0x1E83}, // Case map 0x1E84: []rune{0x1E85}, // Case map 0x1E86: []rune{0x1E87}, // Case map 0x1E88: []rune{0x1E89}, // Case map 0x1E8A: []rune{0x1E8B}, // Case map 0x1E8C: []rune{0x1E8D}, // Case map 0x1E8E: []rune{0x1E8F}, // Case map 0x1E90: []rune{0x1E91}, // Case map 0x1E92: []rune{0x1E93}, // Case map 0x1E94: []rune{0x1E95}, // Case map 0x1E96: []rune{0x0068, 0x0331}, // Case map 0x1E97: []rune{0x0074, 0x0308}, // Case map 0x1E98: []rune{0x0077, 0x030A}, // Case map 0x1E99: []rune{0x0079, 0x030A}, // Case map 0x1E9A: []rune{0x0061, 0x02BE}, // Case map 0x1E9B: []rune{0x1E61}, // Case map 0x1EA0: []rune{0x1EA1}, // Case map 0x1EA2: []rune{0x1EA3}, // Case map 0x1EA4: []rune{0x1EA5}, // Case map 0x1EA6: []rune{0x1EA7}, // Case map 0x1EA8: []rune{0x1EA9}, // Case map 0x1EAA: []rune{0x1EAB}, // Case map 0x1EAC: []rune{0x1EAD}, // Case map 0x1EAE: []rune{0x1EAF}, // Case map 0x1EB0: []rune{0x1EB1}, // Case map 0x1EB2: []rune{0x1EB3}, // Case map 0x1EB4: []rune{0x1EB5}, // Case map 0x1EB6: []rune{0x1EB7}, // Case map 0x1EB8: []rune{0x1EB9}, // Case map 0x1EBA: []rune{0x1EBB}, // Case map 0x1EBC: []rune{0x1EBD}, // Case map 0x1EBE: []rune{0x1EBF}, // Case map 0x1EC0: []rune{0x1EC1}, // Case map 0x1EC2: []rune{0x1EC3}, // Case map 0x1EC4: []rune{0x1EC5}, // Case map 0x1EC6: []rune{0x1EC7}, // Case map 0x1EC8: []rune{0x1EC9}, // Case map 0x1ECA: []rune{0x1ECB}, // Case map 0x1ECC: []rune{0x1ECD}, // Case map 0x1ECE: []rune{0x1ECF}, // Case map 0x1ED0: []rune{0x1ED1}, // Case map 0x1ED2: []rune{0x1ED3}, // Case map 0x1ED4: []rune{0x1ED5}, // Case map 0x1ED6: []rune{0x1ED7}, // Case map 0x1ED8: []rune{0x1ED9}, // Case map 0x1EDA: []rune{0x1EDB}, // Case map 0x1EDC: []rune{0x1EDD}, // Case map 0x1EDE: []rune{0x1EDF}, // Case map 0x1EE0: []rune{0x1EE1}, // Case map 0x1EE2: []rune{0x1EE3}, // Case map 0x1EE4: []rune{0x1EE5}, // Case map 0x1EE6: []rune{0x1EE7}, // Case map 0x1EE8: []rune{0x1EE9}, // Case map 0x1EEA: []rune{0x1EEB}, // Case map 0x1EEC: []rune{0x1EED}, // Case map 0x1EEE: []rune{0x1EEF}, // Case map 0x1EF0: []rune{0x1EF1}, // Case map 0x1EF2: []rune{0x1EF3}, // Case map 0x1EF4: []rune{0x1EF5}, // Case map 0x1EF6: []rune{0x1EF7}, // Case map 0x1EF8: []rune{0x1EF9}, // Case map 0x1F08: []rune{0x1F00}, // Case map 0x1F09: []rune{0x1F01}, // Case map 0x1F0A: []rune{0x1F02}, // Case map 0x1F0B: []rune{0x1F03}, // Case map 0x1F0C: []rune{0x1F04}, // Case map 0x1F0D: []rune{0x1F05}, // Case map 0x1F0E: []rune{0x1F06}, // Case map 0x1F0F: []rune{0x1F07}, // Case map 0x1F18: []rune{0x1F10}, // Case map 0x1F19: []rune{0x1F11}, // Case map 0x1F1A: []rune{0x1F12}, // Case map 0x1F1B: []rune{0x1F13}, // Case map 0x1F1C: []rune{0x1F14}, // Case map 0x1F1D: []rune{0x1F15}, // Case map 0x1F28: []rune{0x1F20}, // Case map 0x1F29: []rune{0x1F21}, // Case map 0x1F2A: []rune{0x1F22}, // Case map 0x1F2B: []rune{0x1F23}, // Case map 0x1F2C: []rune{0x1F24}, // Case map 0x1F2D: []rune{0x1F25}, // Case map 0x1F2E: []rune{0x1F26}, // Case map 0x1F2F: []rune{0x1F27}, // Case map 0x1F38: []rune{0x1F30}, // Case map 0x1F39: []rune{0x1F31}, // Case map 0x1F3A: []rune{0x1F32}, // Case map 0x1F3B: []rune{0x1F33}, // Case map 0x1F3C: []rune{0x1F34}, // Case map 0x1F3D: []rune{0x1F35}, // Case map 0x1F3E: []rune{0x1F36}, // Case map 0x1F3F: []rune{0x1F37}, // Case map 0x1F48: []rune{0x1F40}, // Case map 0x1F49: []rune{0x1F41}, // Case map 0x1F4A: []rune{0x1F42}, // Case map 0x1F4B: []rune{0x1F43}, // Case map 0x1F4C: []rune{0x1F44}, // Case map 0x1F4D: []rune{0x1F45}, // Case map 0x1F50: []rune{0x03C5, 0x0313}, // Case map 0x1F52: []rune{0x03C5, 0x0313, 0x0300}, // Case map 0x1F54: []rune{0x03C5, 0x0313, 0x0301}, // Case map 0x1F56: []rune{0x03C5, 0x0313, 0x0342}, // Case map 0x1F59: []rune{0x1F51}, // Case map 0x1F5B: []rune{0x1F53}, // Case map 0x1F5D: []rune{0x1F55}, // Case map 0x1F5F: []rune{0x1F57}, // Case map 0x1F68: []rune{0x1F60}, // Case map 0x1F69: []rune{0x1F61}, // Case map 0x1F6A: []rune{0x1F62}, // Case map 0x1F6B: []rune{0x1F63}, // Case map 0x1F6C: []rune{0x1F64}, // Case map 0x1F6D: []rune{0x1F65}, // Case map 0x1F6E: []rune{0x1F66}, // Case map 0x1F6F: []rune{0x1F67}, // Case map 0x1F80: []rune{0x1F00, 0x03B9}, // Case map 0x1F81: []rune{0x1F01, 0x03B9}, // Case map 0x1F82: []rune{0x1F02, 0x03B9}, // Case map 0x1F83: []rune{0x1F03, 0x03B9}, // Case map 0x1F84: []rune{0x1F04, 0x03B9}, // Case map 0x1F85: []rune{0x1F05, 0x03B9}, // Case map 0x1F86: []rune{0x1F06, 0x03B9}, // Case map 0x1F87: []rune{0x1F07, 0x03B9}, // Case map 0x1F88: []rune{0x1F00, 0x03B9}, // Case map 0x1F89: []rune{0x1F01, 0x03B9}, // Case map 0x1F8A: []rune{0x1F02, 0x03B9}, // Case map 0x1F8B: []rune{0x1F03, 0x03B9}, // Case map 0x1F8C: []rune{0x1F04, 0x03B9}, // Case map 0x1F8D: []rune{0x1F05, 0x03B9}, // Case map 0x1F8E: []rune{0x1F06, 0x03B9}, // Case map 0x1F8F: []rune{0x1F07, 0x03B9}, // Case map 0x1F90: []rune{0x1F20, 0x03B9}, // Case map 0x1F91: []rune{0x1F21, 0x03B9}, // Case map 0x1F92: []rune{0x1F22, 0x03B9}, // Case map 0x1F93: []rune{0x1F23, 0x03B9}, // Case map 0x1F94: []rune{0x1F24, 0x03B9}, // Case map 0x1F95: []rune{0x1F25, 0x03B9}, // Case map 0x1F96: []rune{0x1F26, 0x03B9}, // Case map 0x1F97: []rune{0x1F27, 0x03B9}, // Case map 0x1F98: []rune{0x1F20, 0x03B9}, // Case map 0x1F99: []rune{0x1F21, 0x03B9}, // Case map 0x1F9A: []rune{0x1F22, 0x03B9}, // Case map 0x1F9B: []rune{0x1F23, 0x03B9}, // Case map 0x1F9C: []rune{0x1F24, 0x03B9}, // Case map 0x1F9D: []rune{0x1F25, 0x03B9}, // Case map 0x1F9E: []rune{0x1F26, 0x03B9}, // Case map 0x1F9F: []rune{0x1F27, 0x03B9}, // Case map 0x1FA0: []rune{0x1F60, 0x03B9}, // Case map 0x1FA1: []rune{0x1F61, 0x03B9}, // Case map 0x1FA2: []rune{0x1F62, 0x03B9}, // Case map 0x1FA3: []rune{0x1F63, 0x03B9}, // Case map 0x1FA4: []rune{0x1F64, 0x03B9}, // Case map 0x1FA5: []rune{0x1F65, 0x03B9}, // Case map 0x1FA6: []rune{0x1F66, 0x03B9}, // Case map 0x1FA7: []rune{0x1F67, 0x03B9}, // Case map 0x1FA8: []rune{0x1F60, 0x03B9}, // Case map 0x1FA9: []rune{0x1F61, 0x03B9}, // Case map 0x1FAA: []rune{0x1F62, 0x03B9}, // Case map 0x1FAB: []rune{0x1F63, 0x03B9}, // Case map 0x1FAC: []rune{0x1F64, 0x03B9}, // Case map 0x1FAD: []rune{0x1F65, 0x03B9}, // Case map 0x1FAE: []rune{0x1F66, 0x03B9}, // Case map 0x1FAF: []rune{0x1F67, 0x03B9}, // Case map 0x1FB2: []rune{0x1F70, 0x03B9}, // Case map 0x1FB3: []rune{0x03B1, 0x03B9}, // Case map 0x1FB4: []rune{0x03AC, 0x03B9}, // Case map 0x1FB6: []rune{0x03B1, 0x0342}, // Case map 0x1FB7: []rune{0x03B1, 0x0342, 0x03B9}, // Case map 0x1FB8: []rune{0x1FB0}, // Case map 0x1FB9: []rune{0x1FB1}, // Case map 0x1FBA: []rune{0x1F70}, // Case map 0x1FBB: []rune{0x1F71}, // Case map 0x1FBC: []rune{0x03B1, 0x03B9}, // Case map 0x1FBE: []rune{0x03B9}, // Case map 0x1FC2: []rune{0x1F74, 0x03B9}, // Case map 0x1FC3: []rune{0x03B7, 0x03B9}, // Case map 0x1FC4: []rune{0x03AE, 0x03B9}, // Case map 0x1FC6: []rune{0x03B7, 0x0342}, // Case map 0x1FC7: []rune{0x03B7, 0x0342, 0x03B9}, // Case map 0x1FC8: []rune{0x1F72}, // Case map 0x1FC9: []rune{0x1F73}, // Case map 0x1FCA: []rune{0x1F74}, // Case map 0x1FCB: []rune{0x1F75}, // Case map 0x1FCC: []rune{0x03B7, 0x03B9}, // Case map 0x1FD2: []rune{0x03B9, 0x0308, 0x0300}, // Case map 0x1FD3: []rune{0x03B9, 0x0308, 0x0301}, // Case map 0x1FD6: []rune{0x03B9, 0x0342}, // Case map 0x1FD7: []rune{0x03B9, 0x0308, 0x0342}, // Case map 0x1FD8: []rune{0x1FD0}, // Case map 0x1FD9: []rune{0x1FD1}, // Case map 0x1FDA: []rune{0x1F76}, // Case map 0x1FDB: []rune{0x1F77}, // Case map 0x1FE2: []rune{0x03C5, 0x0308, 0x0300}, // Case map 0x1FE3: []rune{0x03C5, 0x0308, 0x0301}, // Case map 0x1FE4: []rune{0x03C1, 0x0313}, // Case map 0x1FE6: []rune{0x03C5, 0x0342}, // Case map 0x1FE7: []rune{0x03C5, 0x0308, 0x0342}, // Case map 0x1FE8: []rune{0x1FE0}, // Case map 0x1FE9: []rune{0x1FE1}, // Case map 0x1FEA: []rune{0x1F7A}, // Case map 0x1FEB: []rune{0x1F7B}, // Case map 0x1FEC: []rune{0x1FE5}, // Case map 0x1FF2: []rune{0x1F7C, 0x03B9}, // Case map 0x1FF3: []rune{0x03C9, 0x03B9}, // Case map 0x1FF4: []rune{0x03CE, 0x03B9}, // Case map 0x1FF6: []rune{0x03C9, 0x0342}, // Case map 0x1FF7: []rune{0x03C9, 0x0342, 0x03B9}, // Case map 0x1FF8: []rune{0x1F78}, // Case map 0x1FF9: []rune{0x1F79}, // Case map 0x1FFA: []rune{0x1F7C}, // Case map 0x1FFB: []rune{0x1F7D}, // Case map 0x1FFC: []rune{0x03C9, 0x03B9}, // Case map 0x20A8: []rune{0x0072, 0x0073}, // Additional folding 0x2102: []rune{0x0063}, // Additional folding 0x2103: []rune{0x00B0, 0x0063}, // Additional folding 0x2107: []rune{0x025B}, // Additional folding 0x2109: []rune{0x00B0, 0x0066}, // Additional folding 0x210B: []rune{0x0068}, // Additional folding 0x210C: []rune{0x0068}, // Additional folding 0x210D: []rune{0x0068}, // Additional folding 0x2110: []rune{0x0069}, // Additional folding 0x2111: []rune{0x0069}, // Additional folding 0x2112: []rune{0x006C}, // Additional folding 0x2115: []rune{0x006E}, // Additional folding 0x2116: []rune{0x006E, 0x006F}, // Additional folding 0x2119: []rune{0x0070}, // Additional folding 0x211A: []rune{0x0071}, // Additional folding 0x211B: []rune{0x0072}, // Additional folding 0x211C: []rune{0x0072}, // Additional folding 0x211D: []rune{0x0072}, // Additional folding 0x2120: []rune{0x0073, 0x006D}, // Additional folding 0x2121: []rune{0x0074, 0x0065, 0x006C}, // Additional folding 0x2122: []rune{0x0074, 0x006D}, // Additional folding 0x2124: []rune{0x007A}, // Additional folding 0x2126: []rune{0x03C9}, // Case map 0x2128: []rune{0x007A}, // Additional folding 0x212A: []rune{0x006B}, // Case map 0x212B: []rune{0x00E5}, // Case map 0x212C: []rune{0x0062}, // Additional folding 0x212D: []rune{0x0063}, // Additional folding 0x2130: []rune{0x0065}, // Additional folding 0x2131: []rune{0x0066}, // Additional folding 0x2133: []rune{0x006D}, // Additional folding 0x213E: []rune{0x03B3}, // Additional folding 0x213F: []rune{0x03C0}, // Additional folding 0x2145: []rune{0x0064}, // Additional folding 0x2160: []rune{0x2170}, // Case map 0x2161: []rune{0x2171}, // Case map 0x2162: []rune{0x2172}, // Case map 0x2163: []rune{0x2173}, // Case map 0x2164: []rune{0x2174}, // Case map 0x2165: []rune{0x2175}, // Case map 0x2166: []rune{0x2176}, // Case map 0x2167: []rune{0x2177}, // Case map 0x2168: []rune{0x2178}, // Case map 0x2169: []rune{0x2179}, // Case map 0x216A: []rune{0x217A}, // Case map 0x216B: []rune{0x217B}, // Case map 0x216C: []rune{0x217C}, // Case map 0x216D: []rune{0x217D}, // Case map 0x216E: []rune{0x217E}, // Case map 0x216F: []rune{0x217F}, // Case map 0x24B6: []rune{0x24D0}, // Case map 0x24B7: []rune{0x24D1}, // Case map 0x24B8: []rune{0x24D2}, // Case map 0x24B9: []rune{0x24D3}, // Case map 0x24BA: []rune{0x24D4}, // Case map 0x24BB: []rune{0x24D5}, // Case map 0x24BC: []rune{0x24D6}, // Case map 0x24BD: []rune{0x24D7}, // Case map 0x24BE: []rune{0x24D8}, // Case map 0x24BF: []rune{0x24D9}, // Case map 0x24C0: []rune{0x24DA}, // Case map 0x24C1: []rune{0x24DB}, // Case map 0x24C2: []rune{0x24DC}, // Case map 0x24C3: []rune{0x24DD}, // Case map 0x24C4: []rune{0x24DE}, // Case map 0x24C5: []rune{0x24DF}, // Case map 0x24C6: []rune{0x24E0}, // Case map 0x24C7: []rune{0x24E1}, // Case map 0x24C8: []rune{0x24E2}, // Case map 0x24C9: []rune{0x24E3}, // Case map 0x24CA: []rune{0x24E4}, // Case map 0x24CB: []rune{0x24E5}, // Case map 0x24CC: []rune{0x24E6}, // Case map 0x24CD: []rune{0x24E7}, // Case map 0x24CE: []rune{0x24E8}, // Case map 0x24CF: []rune{0x24E9}, // Case map 0x3371: []rune{0x0068, 0x0070, 0x0061}, // Additional folding 0x3373: []rune{0x0061, 0x0075}, // Additional folding 0x3375: []rune{0x006F, 0x0076}, // Additional folding 0x3380: []rune{0x0070, 0x0061}, // Additional folding 0x3381: []rune{0x006E, 0x0061}, // Additional folding 0x3382: []rune{0x03BC, 0x0061}, // Additional folding 0x3383: []rune{0x006D, 0x0061}, // Additional folding 0x3384: []rune{0x006B, 0x0061}, // Additional folding 0x3385: []rune{0x006B, 0x0062}, // Additional folding 0x3386: []rune{0x006D, 0x0062}, // Additional folding 0x3387: []rune{0x0067, 0x0062}, // Additional folding 0x338A: []rune{0x0070, 0x0066}, // Additional folding 0x338B: []rune{0x006E, 0x0066}, // Additional folding 0x338C: []rune{0x03BC, 0x0066}, // Additional folding 0x3390: []rune{0x0068, 0x007A}, // Additional folding 0x3391: []rune{0x006B, 0x0068, 0x007A}, // Additional folding 0x3392: []rune{0x006D, 0x0068, 0x007A}, // Additional folding 0x3393: []rune{0x0067, 0x0068, 0x007A}, // Additional folding 0x3394: []rune{0x0074, 0x0068, 0x007A}, // Additional folding 0x33A9: []rune{0x0070, 0x0061}, // Additional folding 0x33AA: []rune{0x006B, 0x0070, 0x0061}, // Additional folding 0x33AB: []rune{0x006D, 0x0070, 0x0061}, // Additional folding 0x33AC: []rune{0x0067, 0x0070, 0x0061}, // Additional folding 0x33B4: []rune{0x0070, 0x0076}, // Additional folding 0x33B5: []rune{0x006E, 0x0076}, // Additional folding 0x33B6: []rune{0x03BC, 0x0076}, // Additional folding 0x33B7: []rune{0x006D, 0x0076}, // Additional folding 0x33B8: []rune{0x006B, 0x0076}, // Additional folding 0x33B9: []rune{0x006D, 0x0076}, // Additional folding 0x33BA: []rune{0x0070, 0x0077}, // Additional folding 0x33BB: []rune{0x006E, 0x0077}, // Additional folding 0x33BC: []rune{0x03BC, 0x0077}, // Additional folding 0x33BD: []rune{0x006D, 0x0077}, // Additional folding 0x33BE: []rune{0x006B, 0x0077}, // Additional folding 0x33BF: []rune{0x006D, 0x0077}, // Additional folding 0x33C0: []rune{0x006B, 0x03C9}, // Additional folding 0x33C1: []rune{0x006D, 0x03C9}, // Additional folding 0x33C3: []rune{0x0062, 0x0071}, // Additional folding 0x33C6: []rune{0x0063, 0x2215, 0x006B, 0x0067}, // Additional folding 0x33C7: []rune{0x0063, 0x006F, 0x002E}, // Additional folding 0x33C8: []rune{0x0064, 0x0062}, // Additional folding 0x33C9: []rune{0x0067, 0x0079}, // Additional folding 0x33CB: []rune{0x0068, 0x0070}, // Additional folding 0x33CD: []rune{0x006B, 0x006B}, // Additional folding 0x33CE: []rune{0x006B, 0x006D}, // Additional folding 0x33D7: []rune{0x0070, 0x0068}, // Additional folding 0x33D9: []rune{0x0070, 0x0070, 0x006D}, // Additional folding 0x33DA: []rune{0x0070, 0x0072}, // Additional folding 0x33DC: []rune{0x0073, 0x0076}, // Additional folding 0x33DD: []rune{0x0077, 0x0062}, // Additional folding 0xFB00: []rune{0x0066, 0x0066}, // Case map 0xFB01: []rune{0x0066, 0x0069}, // Case map 0xFB02: []rune{0x0066, 0x006C}, // Case map 0xFB03: []rune{0x0066, 0x0066, 0x0069}, // Case map 0xFB04: []rune{0x0066, 0x0066, 0x006C}, // Case map 0xFB05: []rune{0x0073, 0x0074}, // Case map 0xFB06: []rune{0x0073, 0x0074}, // Case map 0xFB13: []rune{0x0574, 0x0576}, // Case map 0xFB14: []rune{0x0574, 0x0565}, // Case map 0xFB15: []rune{0x0574, 0x056B}, // Case map 0xFB16: []rune{0x057E, 0x0576}, // Case map 0xFB17: []rune{0x0574, 0x056D}, // Case map 0xFF21: []rune{0xFF41}, // Case map 0xFF22: []rune{0xFF42}, // Case map 0xFF23: []rune{0xFF43}, // Case map 0xFF24: []rune{0xFF44}, // Case map 0xFF25: []rune{0xFF45}, // Case map 0xFF26: []rune{0xFF46}, // Case map 0xFF27: []rune{0xFF47}, // Case map 0xFF28: []rune{0xFF48}, // Case map 0xFF29: []rune{0xFF49}, // Case map 0xFF2A: []rune{0xFF4A}, // Case map 0xFF2B: []rune{0xFF4B}, // Case map 0xFF2C: []rune{0xFF4C}, // Case map 0xFF2D: []rune{0xFF4D}, // Case map 0xFF2E: []rune{0xFF4E}, // Case map 0xFF2F: []rune{0xFF4F}, // Case map 0xFF30: []rune{0xFF50}, // Case map 0xFF31: []rune{0xFF51}, // Case map 0xFF32: []rune{0xFF52}, // Case map 0xFF33: []rune{0xFF53}, // Case map 0xFF34: []rune{0xFF54}, // Case map 0xFF35: []rune{0xFF55}, // Case map 0xFF36: []rune{0xFF56}, // Case map 0xFF37: []rune{0xFF57}, // Case map 0xFF38: []rune{0xFF58}, // Case map 0xFF39: []rune{0xFF59}, // Case map 0xFF3A: []rune{0xFF5A}, // Case map 0x10400: []rune{0x10428}, // Case map 0x10401: []rune{0x10429}, // Case map 0x10402: []rune{0x1042A}, // Case map 0x10403: []rune{0x1042B}, // Case map 0x10404: []rune{0x1042C}, // Case map 0x10405: []rune{0x1042D}, // Case map 0x10406: []rune{0x1042E}, // Case map 0x10407: []rune{0x1042F}, // Case map 0x10408: []rune{0x10430}, // Case map 0x10409: []rune{0x10431}, // Case map 0x1040A: []rune{0x10432}, // Case map 0x1040B: []rune{0x10433}, // Case map 0x1040C: []rune{0x10434}, // Case map 0x1040D: []rune{0x10435}, // Case map 0x1040E: []rune{0x10436}, // Case map 0x1040F: []rune{0x10437}, // Case map 0x10410: []rune{0x10438}, // Case map 0x10411: []rune{0x10439}, // Case map 0x10412: []rune{0x1043A}, // Case map 0x10413: []rune{0x1043B}, // Case map 0x10414: []rune{0x1043C}, // Case map 0x10415: []rune{0x1043D}, // Case map 0x10416: []rune{0x1043E}, // Case map 0x10417: []rune{0x1043F}, // Case map 0x10418: []rune{0x10440}, // Case map 0x10419: []rune{0x10441}, // Case map 0x1041A: []rune{0x10442}, // Case map 0x1041B: []rune{0x10443}, // Case map 0x1041C: []rune{0x10444}, // Case map 0x1041D: []rune{0x10445}, // Case map 0x1041E: []rune{0x10446}, // Case map 0x1041F: []rune{0x10447}, // Case map 0x10420: []rune{0x10448}, // Case map 0x10421: []rune{0x10449}, // Case map 0x10422: []rune{0x1044A}, // Case map 0x10423: []rune{0x1044B}, // Case map 0x10424: []rune{0x1044C}, // Case map 0x10425: []rune{0x1044D}, // Case map 0x1D400: []rune{0x0061}, // Additional folding 0x1D401: []rune{0x0062}, // Additional folding 0x1D402: []rune{0x0063}, // Additional folding 0x1D403: []rune{0x0064}, // Additional folding 0x1D404: []rune{0x0065}, // Additional folding 0x1D405: []rune{0x0066}, // Additional folding 0x1D406: []rune{0x0067}, // Additional folding 0x1D407: []rune{0x0068}, // Additional folding 0x1D408: []rune{0x0069}, // Additional folding 0x1D409: []rune{0x006A}, // Additional folding 0x1D40A: []rune{0x006B}, // Additional folding 0x1D40B: []rune{0x006C}, // Additional folding 0x1D40C: []rune{0x006D}, // Additional folding 0x1D40D: []rune{0x006E}, // Additional folding 0x1D40E: []rune{0x006F}, // Additional folding 0x1D40F: []rune{0x0070}, // Additional folding 0x1D410: []rune{0x0071}, // Additional folding 0x1D411: []rune{0x0072}, // Additional folding 0x1D412: []rune{0x0073}, // Additional folding 0x1D413: []rune{0x0074}, // Additional folding 0x1D414: []rune{0x0075}, // Additional folding 0x1D415: []rune{0x0076}, // Additional folding 0x1D416: []rune{0x0077}, // Additional folding 0x1D417: []rune{0x0078}, // Additional folding 0x1D418: []rune{0x0079}, // Additional folding 0x1D419: []rune{0x007A}, // Additional folding 0x1D434: []rune{0x0061}, // Additional folding 0x1D435: []rune{0x0062}, // Additional folding 0x1D436: []rune{0x0063}, // Additional folding 0x1D437: []rune{0x0064}, // Additional folding 0x1D438: []rune{0x0065}, // Additional folding 0x1D439: []rune{0x0066}, // Additional folding 0x1D43A: []rune{0x0067}, // Additional folding 0x1D43B: []rune{0x0068}, // Additional folding 0x1D43C: []rune{0x0069}, // Additional folding 0x1D43D: []rune{0x006A}, // Additional folding 0x1D43E: []rune{0x006B}, // Additional folding 0x1D43F: []rune{0x006C}, // Additional folding 0x1D440: []rune{0x006D}, // Additional folding 0x1D441: []rune{0x006E}, // Additional folding 0x1D442: []rune{0x006F}, // Additional folding 0x1D443: []rune{0x0070}, // Additional folding 0x1D444: []rune{0x0071}, // Additional folding 0x1D445: []rune{0x0072}, // Additional folding 0x1D446: []rune{0x0073}, // Additional folding 0x1D447: []rune{0x0074}, // Additional folding 0x1D448: []rune{0x0075}, // Additional folding 0x1D449: []rune{0x0076}, // Additional folding 0x1D44A: []rune{0x0077}, // Additional folding 0x1D44B: []rune{0x0078}, // Additional folding 0x1D44C: []rune{0x0079}, // Additional folding 0x1D44D: []rune{0x007A}, // Additional folding 0x1D468: []rune{0x0061}, // Additional folding 0x1D469: []rune{0x0062}, // Additional folding 0x1D46A: []rune{0x0063}, // Additional folding 0x1D46B: []rune{0x0064}, // Additional folding 0x1D46C: []rune{0x0065}, // Additional folding 0x1D46D: []rune{0x0066}, // Additional folding 0x1D46E: []rune{0x0067}, // Additional folding 0x1D46F: []rune{0x0068}, // Additional folding 0x1D470: []rune{0x0069}, // Additional folding 0x1D471: []rune{0x006A}, // Additional folding 0x1D472: []rune{0x006B}, // Additional folding 0x1D473: []rune{0x006C}, // Additional folding 0x1D474: []rune{0x006D}, // Additional folding 0x1D475: []rune{0x006E}, // Additional folding 0x1D476: []rune{0x006F}, // Additional folding 0x1D477: []rune{0x0070}, // Additional folding 0x1D478: []rune{0x0071}, // Additional folding 0x1D479: []rune{0x0072}, // Additional folding 0x1D47A: []rune{0x0073}, // Additional folding 0x1D47B: []rune{0x0074}, // Additional folding 0x1D47C: []rune{0x0075}, // Additional folding 0x1D47D: []rune{0x0076}, // Additional folding 0x1D47E: []rune{0x0077}, // Additional folding 0x1D47F: []rune{0x0078}, // Additional folding 0x1D480: []rune{0x0079}, // Additional folding 0x1D481: []rune{0x007A}, // Additional folding 0x1D49C: []rune{0x0061}, // Additional folding 0x1D49E: []rune{0x0063}, // Additional folding 0x1D49F: []rune{0x0064}, // Additional folding 0x1D4A2: []rune{0x0067}, // Additional folding 0x1D4A5: []rune{0x006A}, // Additional folding 0x1D4A6: []rune{0x006B}, // Additional folding 0x1D4A9: []rune{0x006E}, // Additional folding 0x1D4AA: []rune{0x006F}, // Additional folding 0x1D4AB: []rune{0x0070}, // Additional folding 0x1D4AC: []rune{0x0071}, // Additional folding 0x1D4AE: []rune{0x0073}, // Additional folding 0x1D4AF: []rune{0x0074}, // Additional folding 0x1D4B0: []rune{0x0075}, // Additional folding 0x1D4B1: []rune{0x0076}, // Additional folding 0x1D4B2: []rune{0x0077}, // Additional folding 0x1D4B3: []rune{0x0078}, // Additional folding 0x1D4B4: []rune{0x0079}, // Additional folding 0x1D4B5: []rune{0x007A}, // Additional folding 0x1D4D0: []rune{0x0061}, // Additional folding 0x1D4D1: []rune{0x0062}, // Additional folding 0x1D4D2: []rune{0x0063}, // Additional folding 0x1D4D3: []rune{0x0064}, // Additional folding 0x1D4D4: []rune{0x0065}, // Additional folding 0x1D4D5: []rune{0x0066}, // Additional folding 0x1D4D6: []rune{0x0067}, // Additional folding 0x1D4D7: []rune{0x0068}, // Additional folding 0x1D4D8: []rune{0x0069}, // Additional folding 0x1D4D9: []rune{0x006A}, // Additional folding 0x1D4DA: []rune{0x006B}, // Additional folding 0x1D4DB: []rune{0x006C}, // Additional folding 0x1D4DC: []rune{0x006D}, // Additional folding 0x1D4DD: []rune{0x006E}, // Additional folding 0x1D4DE: []rune{0x006F}, // Additional folding 0x1D4DF: []rune{0x0070}, // Additional folding 0x1D4E0: []rune{0x0071}, // Additional folding 0x1D4E1: []rune{0x0072}, // Additional folding 0x1D4E2: []rune{0x0073}, // Additional folding 0x1D4E3: []rune{0x0074}, // Additional folding 0x1D4E4: []rune{0x0075}, // Additional folding 0x1D4E5: []rune{0x0076}, // Additional folding 0x1D4E6: []rune{0x0077}, // Additional folding 0x1D4E7: []rune{0x0078}, // Additional folding 0x1D4E8: []rune{0x0079}, // Additional folding 0x1D4E9: []rune{0x007A}, // Additional folding 0x1D504: []rune{0x0061}, // Additional folding 0x1D505: []rune{0x0062}, // Additional folding 0x1D507: []rune{0x0064}, // Additional folding 0x1D508: []rune{0x0065}, // Additional folding 0x1D509: []rune{0x0066}, // Additional folding 0x1D50A: []rune{0x0067}, // Additional folding 0x1D50D: []rune{0x006A}, // Additional folding 0x1D50E: []rune{0x006B}, // Additional folding 0x1D50F: []rune{0x006C}, // Additional folding 0x1D510: []rune{0x006D}, // Additional folding 0x1D511: []rune{0x006E}, // Additional folding 0x1D512: []rune{0x006F}, // Additional folding 0x1D513: []rune{0x0070}, // Additional folding 0x1D514: []rune{0x0071}, // Additional folding 0x1D516: []rune{0x0073}, // Additional folding 0x1D517: []rune{0x0074}, // Additional folding 0x1D518: []rune{0x0075}, // Additional folding 0x1D519: []rune{0x0076}, // Additional folding 0x1D51A: []rune{0x0077}, // Additional folding 0x1D51B: []rune{0x0078}, // Additional folding 0x1D51C: []rune{0x0079}, // Additional folding 0x1D538: []rune{0x0061}, // Additional folding 0x1D539: []rune{0x0062}, // Additional folding 0x1D53B: []rune{0x0064}, // Additional folding 0x1D53C: []rune{0x0065}, // Additional folding 0x1D53D: []rune{0x0066}, // Additional folding 0x1D53E: []rune{0x0067}, // Additional folding 0x1D540: []rune{0x0069}, // Additional folding 0x1D541: []rune{0x006A}, // Additional folding 0x1D542: []rune{0x006B}, // Additional folding 0x1D543: []rune{0x006C}, // Additional folding 0x1D544: []rune{0x006D}, // Additional folding 0x1D546: []rune{0x006F}, // Additional folding 0x1D54A: []rune{0x0073}, // Additional folding 0x1D54B: []rune{0x0074}, // Additional folding 0x1D54C: []rune{0x0075}, // Additional folding 0x1D54D: []rune{0x0076}, // Additional folding 0x1D54E: []rune{0x0077}, // Additional folding 0x1D54F: []rune{0x0078}, // Additional folding 0x1D550: []rune{0x0079}, // Additional folding 0x1D56C: []rune{0x0061}, // Additional folding 0x1D56D: []rune{0x0062}, // Additional folding 0x1D56E: []rune{0x0063}, // Additional folding 0x1D56F: []rune{0x0064}, // Additional folding 0x1D570: []rune{0x0065}, // Additional folding 0x1D571: []rune{0x0066}, // Additional folding 0x1D572: []rune{0x0067}, // Additional folding 0x1D573: []rune{0x0068}, // Additional folding 0x1D574: []rune{0x0069}, // Additional folding 0x1D575: []rune{0x006A}, // Additional folding 0x1D576: []rune{0x006B}, // Additional folding 0x1D577: []rune{0x006C}, // Additional folding 0x1D578: []rune{0x006D}, // Additional folding 0x1D579: []rune{0x006E}, // Additional folding 0x1D57A: []rune{0x006F}, // Additional folding 0x1D57B: []rune{0x0070}, // Additional folding 0x1D57C: []rune{0x0071}, // Additional folding 0x1D57D: []rune{0x0072}, // Additional folding 0x1D57E: []rune{0x0073}, // Additional folding 0x1D57F: []rune{0x0074}, // Additional folding 0x1D580: []rune{0x0075}, // Additional folding 0x1D581: []rune{0x0076}, // Additional folding 0x1D582: []rune{0x0077}, // Additional folding 0x1D583: []rune{0x0078}, // Additional folding 0x1D584: []rune{0x0079}, // Additional folding 0x1D585: []rune{0x007A}, // Additional folding 0x1D5A0: []rune{0x0061}, // Additional folding 0x1D5A1: []rune{0x0062}, // Additional folding 0x1D5A2: []rune{0x0063}, // Additional folding 0x1D5A3: []rune{0x0064}, // Additional folding 0x1D5A4: []rune{0x0065}, // Additional folding 0x1D5A5: []rune{0x0066}, // Additional folding 0x1D5A6: []rune{0x0067}, // Additional folding 0x1D5A7: []rune{0x0068}, // Additional folding 0x1D5A8: []rune{0x0069}, // Additional folding 0x1D5A9: []rune{0x006A}, // Additional folding 0x1D5AA: []rune{0x006B}, // Additional folding 0x1D5AB: []rune{0x006C}, // Additional folding 0x1D5AC: []rune{0x006D}, // Additional folding 0x1D5AD: []rune{0x006E}, // Additional folding 0x1D5AE: []rune{0x006F}, // Additional folding 0x1D5AF: []rune{0x0070}, // Additional folding 0x1D5B0: []rune{0x0071}, // Additional folding 0x1D5B1: []rune{0x0072}, // Additional folding 0x1D5B2: []rune{0x0073}, // Additional folding 0x1D5B3: []rune{0x0074}, // Additional folding 0x1D5B4: []rune{0x0075}, // Additional folding 0x1D5B5: []rune{0x0076}, // Additional folding 0x1D5B6: []rune{0x0077}, // Additional folding 0x1D5B7: []rune{0x0078}, // Additional folding 0x1D5B8: []rune{0x0079}, // Additional folding 0x1D5B9: []rune{0x007A}, // Additional folding 0x1D5D4: []rune{0x0061}, // Additional folding 0x1D5D5: []rune{0x0062}, // Additional folding 0x1D5D6: []rune{0x0063}, // Additional folding 0x1D5D7: []rune{0x0064}, // Additional folding 0x1D5D8: []rune{0x0065}, // Additional folding 0x1D5D9: []rune{0x0066}, // Additional folding 0x1D5DA: []rune{0x0067}, // Additional folding 0x1D5DB: []rune{0x0068}, // Additional folding 0x1D5DC: []rune{0x0069}, // Additional folding 0x1D5DD: []rune{0x006A}, // Additional folding 0x1D5DE: []rune{0x006B}, // Additional folding 0x1D5DF: []rune{0x006C}, // Additional folding 0x1D5E0: []rune{0x006D}, // Additional folding 0x1D5E1: []rune{0x006E}, // Additional folding 0x1D5E2: []rune{0x006F}, // Additional folding 0x1D5E3: []rune{0x0070}, // Additional folding 0x1D5E4: []rune{0x0071}, // Additional folding 0x1D5E5: []rune{0x0072}, // Additional folding 0x1D5E6: []rune{0x0073}, // Additional folding 0x1D5E7: []rune{0x0074}, // Additional folding 0x1D5E8: []rune{0x0075}, // Additional folding 0x1D5E9: []rune{0x0076}, // Additional folding 0x1D5EA: []rune{0x0077}, // Additional folding 0x1D5EB: []rune{0x0078}, // Additional folding 0x1D5EC: []rune{0x0079}, // Additional folding 0x1D5ED: []rune{0x007A}, // Additional folding 0x1D608: []rune{0x0061}, // Additional folding 0x1D609: []rune{0x0062}, // Additional folding 0x1D60A: []rune{0x0063}, // Additional folding 0x1D60B: []rune{0x0064}, // Additional folding 0x1D60C: []rune{0x0065}, // Additional folding 0x1D60D: []rune{0x0066}, // Additional folding 0x1D60E: []rune{0x0067}, // Additional folding 0x1D60F: []rune{0x0068}, // Additional folding 0x1D610: []rune{0x0069}, // Additional folding 0x1D611: []rune{0x006A}, // Additional folding 0x1D612: []rune{0x006B}, // Additional folding 0x1D613: []rune{0x006C}, // Additional folding 0x1D614: []rune{0x006D}, // Additional folding 0x1D615: []rune{0x006E}, // Additional folding 0x1D616: []rune{0x006F}, // Additional folding 0x1D617: []rune{0x0070}, // Additional folding 0x1D618: []rune{0x0071}, // Additional folding 0x1D619: []rune{0x0072}, // Additional folding 0x1D61A: []rune{0x0073}, // Additional folding 0x1D61B: []rune{0x0074}, // Additional folding 0x1D61C: []rune{0x0075}, // Additional folding 0x1D61D: []rune{0x0076}, // Additional folding 0x1D61E: []rune{0x0077}, // Additional folding 0x1D61F: []rune{0x0078}, // Additional folding 0x1D620: []rune{0x0079}, // Additional folding 0x1D621: []rune{0x007A}, // Additional folding 0x1D63C: []rune{0x0061}, // Additional folding 0x1D63D: []rune{0x0062}, // Additional folding 0x1D63E: []rune{0x0063}, // Additional folding 0x1D63F: []rune{0x0064}, // Additional folding 0x1D640: []rune{0x0065}, // Additional folding 0x1D641: []rune{0x0066}, // Additional folding 0x1D642: []rune{0x0067}, // Additional folding 0x1D643: []rune{0x0068}, // Additional folding 0x1D644: []rune{0x0069}, // Additional folding 0x1D645: []rune{0x006A}, // Additional folding 0x1D646: []rune{0x006B}, // Additional folding 0x1D647: []rune{0x006C}, // Additional folding 0x1D648: []rune{0x006D}, // Additional folding 0x1D649: []rune{0x006E}, // Additional folding 0x1D64A: []rune{0x006F}, // Additional folding 0x1D64B: []rune{0x0070}, // Additional folding 0x1D64C: []rune{0x0071}, // Additional folding 0x1D64D: []rune{0x0072}, // Additional folding 0x1D64E: []rune{0x0073}, // Additional folding 0x1D64F: []rune{0x0074}, // Additional folding 0x1D650: []rune{0x0075}, // Additional folding 0x1D651: []rune{0x0076}, // Additional folding 0x1D652: []rune{0x0077}, // Additional folding 0x1D653: []rune{0x0078}, // Additional folding 0x1D654: []rune{0x0079}, // Additional folding 0x1D655: []rune{0x007A}, // Additional folding 0x1D670: []rune{0x0061}, // Additional folding 0x1D671: []rune{0x0062}, // Additional folding 0x1D672: []rune{0x0063}, // Additional folding 0x1D673: []rune{0x0064}, // Additional folding 0x1D674: []rune{0x0065}, // Additional folding 0x1D675: []rune{0x0066}, // Additional folding 0x1D676: []rune{0x0067}, // Additional folding 0x1D677: []rune{0x0068}, // Additional folding 0x1D678: []rune{0x0069}, // Additional folding 0x1D679: []rune{0x006A}, // Additional folding 0x1D67A: []rune{0x006B}, // Additional folding 0x1D67B: []rune{0x006C}, // Additional folding 0x1D67C: []rune{0x006D}, // Additional folding 0x1D67D: []rune{0x006E}, // Additional folding 0x1D67E: []rune{0x006F}, // Additional folding 0x1D67F: []rune{0x0070}, // Additional folding 0x1D680: []rune{0x0071}, // Additional folding 0x1D681: []rune{0x0072}, // Additional folding 0x1D682: []rune{0x0073}, // Additional folding 0x1D683: []rune{0x0074}, // Additional folding 0x1D684: []rune{0x0075}, // Additional folding 0x1D685: []rune{0x0076}, // Additional folding 0x1D686: []rune{0x0077}, // Additional folding 0x1D687: []rune{0x0078}, // Additional folding 0x1D688: []rune{0x0079}, // Additional folding 0x1D689: []rune{0x007A}, // Additional folding 0x1D6A8: []rune{0x03B1}, // Additional folding 0x1D6A9: []rune{0x03B2}, // Additional folding 0x1D6AA: []rune{0x03B3}, // Additional folding 0x1D6AB: []rune{0x03B4}, // Additional folding 0x1D6AC: []rune{0x03B5}, // Additional folding 0x1D6AD: []rune{0x03B6}, // Additional folding 0x1D6AE: []rune{0x03B7}, // Additional folding 0x1D6AF: []rune{0x03B8}, // Additional folding 0x1D6B0: []rune{0x03B9}, // Additional folding 0x1D6B1: []rune{0x03BA}, // Additional folding 0x1D6B2: []rune{0x03BB}, // Additional folding 0x1D6B3: []rune{0x03BC}, // Additional folding 0x1D6B4: []rune{0x03BD}, // Additional folding 0x1D6B5: []rune{0x03BE}, // Additional folding 0x1D6B6: []rune{0x03BF}, // Additional folding 0x1D6B7: []rune{0x03C0}, // Additional folding 0x1D6B8: []rune{0x03C1}, // Additional folding 0x1D6B9: []rune{0x03B8}, // Additional folding 0x1D6BA: []rune{0x03C3}, // Additional folding 0x1D6BB: []rune{0x03C4}, // Additional folding 0x1D6BC: []rune{0x03C5}, // Additional folding 0x1D6BD: []rune{0x03C6}, // Additional folding 0x1D6BE: []rune{0x03C7}, // Additional folding 0x1D6BF: []rune{0x03C8}, // Additional folding 0x1D6C0: []rune{0x03C9}, // Additional folding 0x1D6D3: []rune{0x03C3}, // Additional folding 0x1D6E2: []rune{0x03B1}, // Additional folding 0x1D6E3: []rune{0x03B2}, // Additional folding 0x1D6E4: []rune{0x03B3}, // Additional folding 0x1D6E5: []rune{0x03B4}, // Additional folding 0x1D6E6: []rune{0x03B5}, // Additional folding 0x1D6E7: []rune{0x03B6}, // Additional folding 0x1D6E8: []rune{0x03B7}, // Additional folding 0x1D6E9: []rune{0x03B8}, // Additional folding 0x1D6EA: []rune{0x03B9}, // Additional folding 0x1D6EB: []rune{0x03BA}, // Additional folding 0x1D6EC: []rune{0x03BB}, // Additional folding 0x1D6ED: []rune{0x03BC}, // Additional folding 0x1D6EE: []rune{0x03BD}, // Additional folding 0x1D6EF: []rune{0x03BE}, // Additional folding 0x1D6F0: []rune{0x03BF}, // Additional folding 0x1D6F1: []rune{0x03C0}, // Additional folding 0x1D6F2: []rune{0x03C1}, // Additional folding 0x1D6F3: []rune{0x03B8}, // Additional folding 0x1D6F4: []rune{0x03C3}, // Additional folding 0x1D6F5: []rune{0x03C4}, // Additional folding 0x1D6F6: []rune{0x03C5}, // Additional folding 0x1D6F7: []rune{0x03C6}, // Additional folding 0x1D6F8: []rune{0x03C7}, // Additional folding 0x1D6F9: []rune{0x03C8}, // Additional folding 0x1D6FA: []rune{0x03C9}, // Additional folding 0x1D70D: []rune{0x03C3}, // Additional folding 0x1D71C: []rune{0x03B1}, // Additional folding 0x1D71D: []rune{0x03B2}, // Additional folding 0x1D71E: []rune{0x03B3}, // Additional folding 0x1D71F: []rune{0x03B4}, // Additional folding 0x1D720: []rune{0x03B5}, // Additional folding 0x1D721: []rune{0x03B6}, // Additional folding 0x1D722: []rune{0x03B7}, // Additional folding 0x1D723: []rune{0x03B8}, // Additional folding 0x1D724: []rune{0x03B9}, // Additional folding 0x1D725: []rune{0x03BA}, // Additional folding 0x1D726: []rune{0x03BB}, // Additional folding 0x1D727: []rune{0x03BC}, // Additional folding 0x1D728: []rune{0x03BD}, // Additional folding 0x1D729: []rune{0x03BE}, // Additional folding 0x1D72A: []rune{0x03BF}, // Additional folding 0x1D72B: []rune{0x03C0}, // Additional folding 0x1D72C: []rune{0x03C1}, // Additional folding 0x1D72D: []rune{0x03B8}, // Additional folding 0x1D72E: []rune{0x03C3}, // Additional folding 0x1D72F: []rune{0x03C4}, // Additional folding 0x1D730: []rune{0x03C5}, // Additional folding 0x1D731: []rune{0x03C6}, // Additional folding 0x1D732: []rune{0x03C7}, // Additional folding 0x1D733: []rune{0x03C8}, // Additional folding 0x1D734: []rune{0x03C9}, // Additional folding 0x1D747: []rune{0x03C3}, // Additional folding 0x1D756: []rune{0x03B1}, // Additional folding 0x1D757: []rune{0x03B2}, // Additional folding 0x1D758: []rune{0x03B3}, // Additional folding 0x1D759: []rune{0x03B4}, // Additional folding 0x1D75A: []rune{0x03B5}, // Additional folding 0x1D75B: []rune{0x03B6}, // Additional folding 0x1D75C: []rune{0x03B7}, // Additional folding 0x1D75D: []rune{0x03B8}, // Additional folding 0x1D75E: []rune{0x03B9}, // Additional folding 0x1D75F: []rune{0x03BA}, // Additional folding 0x1D760: []rune{0x03BB}, // Additional folding 0x1D761: []rune{0x03BC}, // Additional folding 0x1D762: []rune{0x03BD}, // Additional folding 0x1D763: []rune{0x03BE}, // Additional folding 0x1D764: []rune{0x03BF}, // Additional folding 0x1D765: []rune{0x03C0}, // Additional folding 0x1D766: []rune{0x03C1}, // Additional folding 0x1D767: []rune{0x03B8}, // Additional folding 0x1D768: []rune{0x03C3}, // Additional folding 0x1D769: []rune{0x03C4}, // Additional folding 0x1D76A: []rune{0x03C5}, // Additional folding 0x1D76B: []rune{0x03C6}, // Additional folding 0x1D76C: []rune{0x03C7}, // Additional folding 0x1D76D: []rune{0x03C8}, // Additional folding 0x1D76E: []rune{0x03C9}, // Additional folding 0x1D781: []rune{0x03C3}, // Additional folding 0x1D790: []rune{0x03B1}, // Additional folding 0x1D791: []rune{0x03B2}, // Additional folding 0x1D792: []rune{0x03B3}, // Additional folding 0x1D793: []rune{0x03B4}, // Additional folding 0x1D794: []rune{0x03B5}, // Additional folding 0x1D795: []rune{0x03B6}, // Additional folding 0x1D796: []rune{0x03B7}, // Additional folding 0x1D797: []rune{0x03B8}, // Additional folding 0x1D798: []rune{0x03B9}, // Additional folding 0x1D799: []rune{0x03BA}, // Additional folding 0x1D79A: []rune{0x03BB}, // Additional folding 0x1D79B: []rune{0x03BC}, // Additional folding 0x1D79C: []rune{0x03BD}, // Additional folding 0x1D79D: []rune{0x03BE}, // Additional folding 0x1D79E: []rune{0x03BF}, // Additional folding 0x1D79F: []rune{0x03C0}, // Additional folding 0x1D7A0: []rune{0x03C1}, // Additional folding 0x1D7A1: []rune{0x03B8}, // Additional folding 0x1D7A2: []rune{0x03C3}, // Additional folding 0x1D7A3: []rune{0x03C4}, // Additional folding 0x1D7A4: []rune{0x03C5}, // Additional folding 0x1D7A5: []rune{0x03C6}, // Additional folding 0x1D7A6: []rune{0x03C7}, // Additional folding 0x1D7A7: []rune{0x03C8}, // Additional folding 0x1D7A8: []rune{0x03C9}, // Additional folding 0x1D7BB: []rune{0x03C3}, // Additional folding } // TableB2 represents RFC-3454 Table B.2. var TableB2 Mapping = tableB2 var tableB3 = Mapping{ 0x0041: []rune{0x0061}, // Case map 0x0042: []rune{0x0062}, // Case map 0x0043: []rune{0x0063}, // Case map 0x0044: []rune{0x0064}, // Case map 0x0045: []rune{0x0065}, // Case map 0x0046: []rune{0x0066}, // Case map 0x0047: []rune{0x0067}, // Case map 0x0048: []rune{0x0068}, // Case map 0x0049: []rune{0x0069}, // Case map 0x004A: []rune{0x006A}, // Case map 0x004B: []rune{0x006B}, // Case map 0x004C: []rune{0x006C}, // Case map 0x004D: []rune{0x006D}, // Case map 0x004E: []rune{0x006E}, // Case map 0x004F: []rune{0x006F}, // Case map 0x0050: []rune{0x0070}, // Case map 0x0051: []rune{0x0071}, // Case map 0x0052: []rune{0x0072}, // Case map 0x0053: []rune{0x0073}, // Case map 0x0054: []rune{0x0074}, // Case map 0x0055: []rune{0x0075}, // Case map 0x0056: []rune{0x0076}, // Case map 0x0057: []rune{0x0077}, // Case map 0x0058: []rune{0x0078}, // Case map 0x0059: []rune{0x0079}, // Case map 0x005A: []rune{0x007A}, // Case map 0x00B5: []rune{0x03BC}, // Case map 0x00C0: []rune{0x00E0}, // Case map 0x00C1: []rune{0x00E1}, // Case map 0x00C2: []rune{0x00E2}, // Case map 0x00C3: []rune{0x00E3}, // Case map 0x00C4: []rune{0x00E4}, // Case map 0x00C5: []rune{0x00E5}, // Case map 0x00C6: []rune{0x00E6}, // Case map 0x00C7: []rune{0x00E7}, // Case map 0x00C8: []rune{0x00E8}, // Case map 0x00C9: []rune{0x00E9}, // Case map 0x00CA: []rune{0x00EA}, // Case map 0x00CB: []rune{0x00EB}, // Case map 0x00CC: []rune{0x00EC}, // Case map 0x00CD: []rune{0x00ED}, // Case map 0x00CE: []rune{0x00EE}, // Case map 0x00CF: []rune{0x00EF}, // Case map 0x00D0: []rune{0x00F0}, // Case map 0x00D1: []rune{0x00F1}, // Case map 0x00D2: []rune{0x00F2}, // Case map 0x00D3: []rune{0x00F3}, // Case map 0x00D4: []rune{0x00F4}, // Case map 0x00D5: []rune{0x00F5}, // Case map 0x00D6: []rune{0x00F6}, // Case map 0x00D8: []rune{0x00F8}, // Case map 0x00D9: []rune{0x00F9}, // Case map 0x00DA: []rune{0x00FA}, // Case map 0x00DB: []rune{0x00FB}, // Case map 0x00DC: []rune{0x00FC}, // Case map 0x00DD: []rune{0x00FD}, // Case map 0x00DE: []rune{0x00FE}, // Case map 0x00DF: []rune{0x0073, 0x0073}, // Case map 0x0100: []rune{0x0101}, // Case map 0x0102: []rune{0x0103}, // Case map 0x0104: []rune{0x0105}, // Case map 0x0106: []rune{0x0107}, // Case map 0x0108: []rune{0x0109}, // Case map 0x010A: []rune{0x010B}, // Case map 0x010C: []rune{0x010D}, // Case map 0x010E: []rune{0x010F}, // Case map 0x0110: []rune{0x0111}, // Case map 0x0112: []rune{0x0113}, // Case map 0x0114: []rune{0x0115}, // Case map 0x0116: []rune{0x0117}, // Case map 0x0118: []rune{0x0119}, // Case map 0x011A: []rune{0x011B}, // Case map 0x011C: []rune{0x011D}, // Case map 0x011E: []rune{0x011F}, // Case map 0x0120: []rune{0x0121}, // Case map 0x0122: []rune{0x0123}, // Case map 0x0124: []rune{0x0125}, // Case map 0x0126: []rune{0x0127}, // Case map 0x0128: []rune{0x0129}, // Case map 0x012A: []rune{0x012B}, // Case map 0x012C: []rune{0x012D}, // Case map 0x012E: []rune{0x012F}, // Case map 0x0130: []rune{0x0069, 0x0307}, // Case map 0x0132: []rune{0x0133}, // Case map 0x0134: []rune{0x0135}, // Case map 0x0136: []rune{0x0137}, // Case map 0x0139: []rune{0x013A}, // Case map 0x013B: []rune{0x013C}, // Case map 0x013D: []rune{0x013E}, // Case map 0x013F: []rune{0x0140}, // Case map 0x0141: []rune{0x0142}, // Case map 0x0143: []rune{0x0144}, // Case map 0x0145: []rune{0x0146}, // Case map 0x0147: []rune{0x0148}, // Case map 0x0149: []rune{0x02BC, 0x006E}, // Case map 0x014A: []rune{0x014B}, // Case map 0x014C: []rune{0x014D}, // Case map 0x014E: []rune{0x014F}, // Case map 0x0150: []rune{0x0151}, // Case map 0x0152: []rune{0x0153}, // Case map 0x0154: []rune{0x0155}, // Case map 0x0156: []rune{0x0157}, // Case map 0x0158: []rune{0x0159}, // Case map 0x015A: []rune{0x015B}, // Case map 0x015C: []rune{0x015D}, // Case map 0x015E: []rune{0x015F}, // Case map 0x0160: []rune{0x0161}, // Case map 0x0162: []rune{0x0163}, // Case map 0x0164: []rune{0x0165}, // Case map 0x0166: []rune{0x0167}, // Case map 0x0168: []rune{0x0169}, // Case map 0x016A: []rune{0x016B}, // Case map 0x016C: []rune{0x016D}, // Case map 0x016E: []rune{0x016F}, // Case map 0x0170: []rune{0x0171}, // Case map 0x0172: []rune{0x0173}, // Case map 0x0174: []rune{0x0175}, // Case map 0x0176: []rune{0x0177}, // Case map 0x0178: []rune{0x00FF}, // Case map 0x0179: []rune{0x017A}, // Case map 0x017B: []rune{0x017C}, // Case map 0x017D: []rune{0x017E}, // Case map 0x017F: []rune{0x0073}, // Case map 0x0181: []rune{0x0253}, // Case map 0x0182: []rune{0x0183}, // Case map 0x0184: []rune{0x0185}, // Case map 0x0186: []rune{0x0254}, // Case map 0x0187: []rune{0x0188}, // Case map 0x0189: []rune{0x0256}, // Case map 0x018A: []rune{0x0257}, // Case map 0x018B: []rune{0x018C}, // Case map 0x018E: []rune{0x01DD}, // Case map 0x018F: []rune{0x0259}, // Case map 0x0190: []rune{0x025B}, // Case map 0x0191: []rune{0x0192}, // Case map 0x0193: []rune{0x0260}, // Case map 0x0194: []rune{0x0263}, // Case map 0x0196: []rune{0x0269}, // Case map 0x0197: []rune{0x0268}, // Case map 0x0198: []rune{0x0199}, // Case map 0x019C: []rune{0x026F}, // Case map 0x019D: []rune{0x0272}, // Case map 0x019F: []rune{0x0275}, // Case map 0x01A0: []rune{0x01A1}, // Case map 0x01A2: []rune{0x01A3}, // Case map 0x01A4: []rune{0x01A5}, // Case map 0x01A6: []rune{0x0280}, // Case map 0x01A7: []rune{0x01A8}, // Case map 0x01A9: []rune{0x0283}, // Case map 0x01AC: []rune{0x01AD}, // Case map 0x01AE: []rune{0x0288}, // Case map 0x01AF: []rune{0x01B0}, // Case map 0x01B1: []rune{0x028A}, // Case map 0x01B2: []rune{0x028B}, // Case map 0x01B3: []rune{0x01B4}, // Case map 0x01B5: []rune{0x01B6}, // Case map 0x01B7: []rune{0x0292}, // Case map 0x01B8: []rune{0x01B9}, // Case map 0x01BC: []rune{0x01BD}, // Case map 0x01C4: []rune{0x01C6}, // Case map 0x01C5: []rune{0x01C6}, // Case map 0x01C7: []rune{0x01C9}, // Case map 0x01C8: []rune{0x01C9}, // Case map 0x01CA: []rune{0x01CC}, // Case map 0x01CB: []rune{0x01CC}, // Case map 0x01CD: []rune{0x01CE}, // Case map 0x01CF: []rune{0x01D0}, // Case map 0x01D1: []rune{0x01D2}, // Case map 0x01D3: []rune{0x01D4}, // Case map 0x01D5: []rune{0x01D6}, // Case map 0x01D7: []rune{0x01D8}, // Case map 0x01D9: []rune{0x01DA}, // Case map 0x01DB: []rune{0x01DC}, // Case map 0x01DE: []rune{0x01DF}, // Case map 0x01E0: []rune{0x01E1}, // Case map 0x01E2: []rune{0x01E3}, // Case map 0x01E4: []rune{0x01E5}, // Case map 0x01E6: []rune{0x01E7}, // Case map 0x01E8: []rune{0x01E9}, // Case map 0x01EA: []rune{0x01EB}, // Case map 0x01EC: []rune{0x01ED}, // Case map 0x01EE: []rune{0x01EF}, // Case map 0x01F0: []rune{0x006A, 0x030C}, // Case map 0x01F1: []rune{0x01F3}, // Case map 0x01F2: []rune{0x01F3}, // Case map 0x01F4: []rune{0x01F5}, // Case map 0x01F6: []rune{0x0195}, // Case map 0x01F7: []rune{0x01BF}, // Case map 0x01F8: []rune{0x01F9}, // Case map 0x01FA: []rune{0x01FB}, // Case map 0x01FC: []rune{0x01FD}, // Case map 0x01FE: []rune{0x01FF}, // Case map 0x0200: []rune{0x0201}, // Case map 0x0202: []rune{0x0203}, // Case map 0x0204: []rune{0x0205}, // Case map 0x0206: []rune{0x0207}, // Case map 0x0208: []rune{0x0209}, // Case map 0x020A: []rune{0x020B}, // Case map 0x020C: []rune{0x020D}, // Case map 0x020E: []rune{0x020F}, // Case map 0x0210: []rune{0x0211}, // Case map 0x0212: []rune{0x0213}, // Case map 0x0214: []rune{0x0215}, // Case map 0x0216: []rune{0x0217}, // Case map 0x0218: []rune{0x0219}, // Case map 0x021A: []rune{0x021B}, // Case map 0x021C: []rune{0x021D}, // Case map 0x021E: []rune{0x021F}, // Case map 0x0220: []rune{0x019E}, // Case map 0x0222: []rune{0x0223}, // Case map 0x0224: []rune{0x0225}, // Case map 0x0226: []rune{0x0227}, // Case map 0x0228: []rune{0x0229}, // Case map 0x022A: []rune{0x022B}, // Case map 0x022C: []rune{0x022D}, // Case map 0x022E: []rune{0x022F}, // Case map 0x0230: []rune{0x0231}, // Case map 0x0232: []rune{0x0233}, // Case map 0x0345: []rune{0x03B9}, // Case map 0x0386: []rune{0x03AC}, // Case map 0x0388: []rune{0x03AD}, // Case map 0x0389: []rune{0x03AE}, // Case map 0x038A: []rune{0x03AF}, // Case map 0x038C: []rune{0x03CC}, // Case map 0x038E: []rune{0x03CD}, // Case map 0x038F: []rune{0x03CE}, // Case map 0x0390: []rune{0x03B9, 0x0308, 0x0301}, // Case map 0x0391: []rune{0x03B1}, // Case map 0x0392: []rune{0x03B2}, // Case map 0x0393: []rune{0x03B3}, // Case map 0x0394: []rune{0x03B4}, // Case map 0x0395: []rune{0x03B5}, // Case map 0x0396: []rune{0x03B6}, // Case map 0x0397: []rune{0x03B7}, // Case map 0x0398: []rune{0x03B8}, // Case map 0x0399: []rune{0x03B9}, // Case map 0x039A: []rune{0x03BA}, // Case map 0x039B: []rune{0x03BB}, // Case map 0x039C: []rune{0x03BC}, // Case map 0x039D: []rune{0x03BD}, // Case map 0x039E: []rune{0x03BE}, // Case map 0x039F: []rune{0x03BF}, // Case map 0x03A0: []rune{0x03C0}, // Case map 0x03A1: []rune{0x03C1}, // Case map 0x03A3: []rune{0x03C3}, // Case map 0x03A4: []rune{0x03C4}, // Case map 0x03A5: []rune{0x03C5}, // Case map 0x03A6: []rune{0x03C6}, // Case map 0x03A7: []rune{0x03C7}, // Case map 0x03A8: []rune{0x03C8}, // Case map 0x03A9: []rune{0x03C9}, // Case map 0x03AA: []rune{0x03CA}, // Case map 0x03AB: []rune{0x03CB}, // Case map 0x03B0: []rune{0x03C5, 0x0308, 0x0301}, // Case map 0x03C2: []rune{0x03C3}, // Case map 0x03D0: []rune{0x03B2}, // Case map 0x03D1: []rune{0x03B8}, // Case map 0x03D5: []rune{0x03C6}, // Case map 0x03D6: []rune{0x03C0}, // Case map 0x03D8: []rune{0x03D9}, // Case map 0x03DA: []rune{0x03DB}, // Case map 0x03DC: []rune{0x03DD}, // Case map 0x03DE: []rune{0x03DF}, // Case map 0x03E0: []rune{0x03E1}, // Case map 0x03E2: []rune{0x03E3}, // Case map 0x03E4: []rune{0x03E5}, // Case map 0x03E6: []rune{0x03E7}, // Case map 0x03E8: []rune{0x03E9}, // Case map 0x03EA: []rune{0x03EB}, // Case map 0x03EC: []rune{0x03ED}, // Case map 0x03EE: []rune{0x03EF}, // Case map 0x03F0: []rune{0x03BA}, // Case map 0x03F1: []rune{0x03C1}, // Case map 0x03F2: []rune{0x03C3}, // Case map 0x03F4: []rune{0x03B8}, // Case map 0x03F5: []rune{0x03B5}, // Case map 0x0400: []rune{0x0450}, // Case map 0x0401: []rune{0x0451}, // Case map 0x0402: []rune{0x0452}, // Case map 0x0403: []rune{0x0453}, // Case map 0x0404: []rune{0x0454}, // Case map 0x0405: []rune{0x0455}, // Case map 0x0406: []rune{0x0456}, // Case map 0x0407: []rune{0x0457}, // Case map 0x0408: []rune{0x0458}, // Case map 0x0409: []rune{0x0459}, // Case map 0x040A: []rune{0x045A}, // Case map 0x040B: []rune{0x045B}, // Case map 0x040C: []rune{0x045C}, // Case map 0x040D: []rune{0x045D}, // Case map 0x040E: []rune{0x045E}, // Case map 0x040F: []rune{0x045F}, // Case map 0x0410: []rune{0x0430}, // Case map 0x0411: []rune{0x0431}, // Case map 0x0412: []rune{0x0432}, // Case map 0x0413: []rune{0x0433}, // Case map 0x0414: []rune{0x0434}, // Case map 0x0415: []rune{0x0435}, // Case map 0x0416: []rune{0x0436}, // Case map 0x0417: []rune{0x0437}, // Case map 0x0418: []rune{0x0438}, // Case map 0x0419: []rune{0x0439}, // Case map 0x041A: []rune{0x043A}, // Case map 0x041B: []rune{0x043B}, // Case map 0x041C: []rune{0x043C}, // Case map 0x041D: []rune{0x043D}, // Case map 0x041E: []rune{0x043E}, // Case map 0x041F: []rune{0x043F}, // Case map 0x0420: []rune{0x0440}, // Case map 0x0421: []rune{0x0441}, // Case map 0x0422: []rune{0x0442}, // Case map 0x0423: []rune{0x0443}, // Case map 0x0424: []rune{0x0444}, // Case map 0x0425: []rune{0x0445}, // Case map 0x0426: []rune{0x0446}, // Case map 0x0427: []rune{0x0447}, // Case map 0x0428: []rune{0x0448}, // Case map 0x0429: []rune{0x0449}, // Case map 0x042A: []rune{0x044A}, // Case map 0x042B: []rune{0x044B}, // Case map 0x042C: []rune{0x044C}, // Case map 0x042D: []rune{0x044D}, // Case map 0x042E: []rune{0x044E}, // Case map 0x042F: []rune{0x044F}, // Case map 0x0460: []rune{0x0461}, // Case map 0x0462: []rune{0x0463}, // Case map 0x0464: []rune{0x0465}, // Case map 0x0466: []rune{0x0467}, // Case map 0x0468: []rune{0x0469}, // Case map 0x046A: []rune{0x046B}, // Case map 0x046C: []rune{0x046D}, // Case map 0x046E: []rune{0x046F}, // Case map 0x0470: []rune{0x0471}, // Case map 0x0472: []rune{0x0473}, // Case map 0x0474: []rune{0x0475}, // Case map 0x0476: []rune{0x0477}, // Case map 0x0478: []rune{0x0479}, // Case map 0x047A: []rune{0x047B}, // Case map 0x047C: []rune{0x047D}, // Case map 0x047E: []rune{0x047F}, // Case map 0x0480: []rune{0x0481}, // Case map 0x048A: []rune{0x048B}, // Case map 0x048C: []rune{0x048D}, // Case map 0x048E: []rune{0x048F}, // Case map 0x0490: []rune{0x0491}, // Case map 0x0492: []rune{0x0493}, // Case map 0x0494: []rune{0x0495}, // Case map 0x0496: []rune{0x0497}, // Case map 0x0498: []rune{0x0499}, // Case map 0x049A: []rune{0x049B}, // Case map 0x049C: []rune{0x049D}, // Case map 0x049E: []rune{0x049F}, // Case map 0x04A0: []rune{0x04A1}, // Case map 0x04A2: []rune{0x04A3}, // Case map 0x04A4: []rune{0x04A5}, // Case map 0x04A6: []rune{0x04A7}, // Case map 0x04A8: []rune{0x04A9}, // Case map 0x04AA: []rune{0x04AB}, // Case map 0x04AC: []rune{0x04AD}, // Case map 0x04AE: []rune{0x04AF}, // Case map 0x04B0: []rune{0x04B1}, // Case map 0x04B2: []rune{0x04B3}, // Case map 0x04B4: []rune{0x04B5}, // Case map 0x04B6: []rune{0x04B7}, // Case map 0x04B8: []rune{0x04B9}, // Case map 0x04BA: []rune{0x04BB}, // Case map 0x04BC: []rune{0x04BD}, // Case map 0x04BE: []rune{0x04BF}, // Case map 0x04C1: []rune{0x04C2}, // Case map 0x04C3: []rune{0x04C4}, // Case map 0x04C5: []rune{0x04C6}, // Case map 0x04C7: []rune{0x04C8}, // Case map 0x04C9: []rune{0x04CA}, // Case map 0x04CB: []rune{0x04CC}, // Case map 0x04CD: []rune{0x04CE}, // Case map 0x04D0: []rune{0x04D1}, // Case map 0x04D2: []rune{0x04D3}, // Case map 0x04D4: []rune{0x04D5}, // Case map 0x04D6: []rune{0x04D7}, // Case map 0x04D8: []rune{0x04D9}, // Case map 0x04DA: []rune{0x04DB}, // Case map 0x04DC: []rune{0x04DD}, // Case map 0x04DE: []rune{0x04DF}, // Case map 0x04E0: []rune{0x04E1}, // Case map 0x04E2: []rune{0x04E3}, // Case map 0x04E4: []rune{0x04E5}, // Case map 0x04E6: []rune{0x04E7}, // Case map 0x04E8: []rune{0x04E9}, // Case map 0x04EA: []rune{0x04EB}, // Case map 0x04EC: []rune{0x04ED}, // Case map 0x04EE: []rune{0x04EF}, // Case map 0x04F0: []rune{0x04F1}, // Case map 0x04F2: []rune{0x04F3}, // Case map 0x04F4: []rune{0x04F5}, // Case map 0x04F8: []rune{0x04F9}, // Case map 0x0500: []rune{0x0501}, // Case map 0x0502: []rune{0x0503}, // Case map 0x0504: []rune{0x0505}, // Case map 0x0506: []rune{0x0507}, // Case map 0x0508: []rune{0x0509}, // Case map 0x050A: []rune{0x050B}, // Case map 0x050C: []rune{0x050D}, // Case map 0x050E: []rune{0x050F}, // Case map 0x0531: []rune{0x0561}, // Case map 0x0532: []rune{0x0562}, // Case map 0x0533: []rune{0x0563}, // Case map 0x0534: []rune{0x0564}, // Case map 0x0535: []rune{0x0565}, // Case map 0x0536: []rune{0x0566}, // Case map 0x0537: []rune{0x0567}, // Case map 0x0538: []rune{0x0568}, // Case map 0x0539: []rune{0x0569}, // Case map 0x053A: []rune{0x056A}, // Case map 0x053B: []rune{0x056B}, // Case map 0x053C: []rune{0x056C}, // Case map 0x053D: []rune{0x056D}, // Case map 0x053E: []rune{0x056E}, // Case map 0x053F: []rune{0x056F}, // Case map 0x0540: []rune{0x0570}, // Case map 0x0541: []rune{0x0571}, // Case map 0x0542: []rune{0x0572}, // Case map 0x0543: []rune{0x0573}, // Case map 0x0544: []rune{0x0574}, // Case map 0x0545: []rune{0x0575}, // Case map 0x0546: []rune{0x0576}, // Case map 0x0547: []rune{0x0577}, // Case map 0x0548: []rune{0x0578}, // Case map 0x0549: []rune{0x0579}, // Case map 0x054A: []rune{0x057A}, // Case map 0x054B: []rune{0x057B}, // Case map 0x054C: []rune{0x057C}, // Case map 0x054D: []rune{0x057D}, // Case map 0x054E: []rune{0x057E}, // Case map 0x054F: []rune{0x057F}, // Case map 0x0550: []rune{0x0580}, // Case map 0x0551: []rune{0x0581}, // Case map 0x0552: []rune{0x0582}, // Case map 0x0553: []rune{0x0583}, // Case map 0x0554: []rune{0x0584}, // Case map 0x0555: []rune{0x0585}, // Case map 0x0556: []rune{0x0586}, // Case map 0x0587: []rune{0x0565, 0x0582}, // Case map 0x1E00: []rune{0x1E01}, // Case map 0x1E02: []rune{0x1E03}, // Case map 0x1E04: []rune{0x1E05}, // Case map 0x1E06: []rune{0x1E07}, // Case map 0x1E08: []rune{0x1E09}, // Case map 0x1E0A: []rune{0x1E0B}, // Case map 0x1E0C: []rune{0x1E0D}, // Case map 0x1E0E: []rune{0x1E0F}, // Case map 0x1E10: []rune{0x1E11}, // Case map 0x1E12: []rune{0x1E13}, // Case map 0x1E14: []rune{0x1E15}, // Case map 0x1E16: []rune{0x1E17}, // Case map 0x1E18: []rune{0x1E19}, // Case map 0x1E1A: []rune{0x1E1B}, // Case map 0x1E1C: []rune{0x1E1D}, // Case map 0x1E1E: []rune{0x1E1F}, // Case map 0x1E20: []rune{0x1E21}, // Case map 0x1E22: []rune{0x1E23}, // Case map 0x1E24: []rune{0x1E25}, // Case map 0x1E26: []rune{0x1E27}, // Case map 0x1E28: []rune{0x1E29}, // Case map 0x1E2A: []rune{0x1E2B}, // Case map 0x1E2C: []rune{0x1E2D}, // Case map 0x1E2E: []rune{0x1E2F}, // Case map 0x1E30: []rune{0x1E31}, // Case map 0x1E32: []rune{0x1E33}, // Case map 0x1E34: []rune{0x1E35}, // Case map 0x1E36: []rune{0x1E37}, // Case map 0x1E38: []rune{0x1E39}, // Case map 0x1E3A: []rune{0x1E3B}, // Case map 0x1E3C: []rune{0x1E3D}, // Case map 0x1E3E: []rune{0x1E3F}, // Case map 0x1E40: []rune{0x1E41}, // Case map 0x1E42: []rune{0x1E43}, // Case map 0x1E44: []rune{0x1E45}, // Case map 0x1E46: []rune{0x1E47}, // Case map 0x1E48: []rune{0x1E49}, // Case map 0x1E4A: []rune{0x1E4B}, // Case map 0x1E4C: []rune{0x1E4D}, // Case map 0x1E4E: []rune{0x1E4F}, // Case map 0x1E50: []rune{0x1E51}, // Case map 0x1E52: []rune{0x1E53}, // Case map 0x1E54: []rune{0x1E55}, // Case map 0x1E56: []rune{0x1E57}, // Case map 0x1E58: []rune{0x1E59}, // Case map 0x1E5A: []rune{0x1E5B}, // Case map 0x1E5C: []rune{0x1E5D}, // Case map 0x1E5E: []rune{0x1E5F}, // Case map 0x1E60: []rune{0x1E61}, // Case map 0x1E62: []rune{0x1E63}, // Case map 0x1E64: []rune{0x1E65}, // Case map 0x1E66: []rune{0x1E67}, // Case map 0x1E68: []rune{0x1E69}, // Case map 0x1E6A: []rune{0x1E6B}, // Case map 0x1E6C: []rune{0x1E6D}, // Case map 0x1E6E: []rune{0x1E6F}, // Case map 0x1E70: []rune{0x1E71}, // Case map 0x1E72: []rune{0x1E73}, // Case map 0x1E74: []rune{0x1E75}, // Case map 0x1E76: []rune{0x1E77}, // Case map 0x1E78: []rune{0x1E79}, // Case map 0x1E7A: []rune{0x1E7B}, // Case map 0x1E7C: []rune{0x1E7D}, // Case map 0x1E7E: []rune{0x1E7F}, // Case map 0x1E80: []rune{0x1E81}, // Case map 0x1E82: []rune{0x1E83}, // Case map 0x1E84: []rune{0x1E85}, // Case map 0x1E86: []rune{0x1E87}, // Case map 0x1E88: []rune{0x1E89}, // Case map 0x1E8A: []rune{0x1E8B}, // Case map 0x1E8C: []rune{0x1E8D}, // Case map 0x1E8E: []rune{0x1E8F}, // Case map 0x1E90: []rune{0x1E91}, // Case map 0x1E92: []rune{0x1E93}, // Case map 0x1E94: []rune{0x1E95}, // Case map 0x1E96: []rune{0x0068, 0x0331}, // Case map 0x1E97: []rune{0x0074, 0x0308}, // Case map 0x1E98: []rune{0x0077, 0x030A}, // Case map 0x1E99: []rune{0x0079, 0x030A}, // Case map 0x1E9A: []rune{0x0061, 0x02BE}, // Case map 0x1E9B: []rune{0x1E61}, // Case map 0x1EA0: []rune{0x1EA1}, // Case map 0x1EA2: []rune{0x1EA3}, // Case map 0x1EA4: []rune{0x1EA5}, // Case map 0x1EA6: []rune{0x1EA7}, // Case map 0x1EA8: []rune{0x1EA9}, // Case map 0x1EAA: []rune{0x1EAB}, // Case map 0x1EAC: []rune{0x1EAD}, // Case map 0x1EAE: []rune{0x1EAF}, // Case map 0x1EB0: []rune{0x1EB1}, // Case map 0x1EB2: []rune{0x1EB3}, // Case map 0x1EB4: []rune{0x1EB5}, // Case map 0x1EB6: []rune{0x1EB7}, // Case map 0x1EB8: []rune{0x1EB9}, // Case map 0x1EBA: []rune{0x1EBB}, // Case map 0x1EBC: []rune{0x1EBD}, // Case map 0x1EBE: []rune{0x1EBF}, // Case map 0x1EC0: []rune{0x1EC1}, // Case map 0x1EC2: []rune{0x1EC3}, // Case map 0x1EC4: []rune{0x1EC5}, // Case map 0x1EC6: []rune{0x1EC7}, // Case map 0x1EC8: []rune{0x1EC9}, // Case map 0x1ECA: []rune{0x1ECB}, // Case map 0x1ECC: []rune{0x1ECD}, // Case map 0x1ECE: []rune{0x1ECF}, // Case map 0x1ED0: []rune{0x1ED1}, // Case map 0x1ED2: []rune{0x1ED3}, // Case map 0x1ED4: []rune{0x1ED5}, // Case map 0x1ED6: []rune{0x1ED7}, // Case map 0x1ED8: []rune{0x1ED9}, // Case map 0x1EDA: []rune{0x1EDB}, // Case map 0x1EDC: []rune{0x1EDD}, // Case map 0x1EDE: []rune{0x1EDF}, // Case map 0x1EE0: []rune{0x1EE1}, // Case map 0x1EE2: []rune{0x1EE3}, // Case map 0x1EE4: []rune{0x1EE5}, // Case map 0x1EE6: []rune{0x1EE7}, // Case map 0x1EE8: []rune{0x1EE9}, // Case map 0x1EEA: []rune{0x1EEB}, // Case map 0x1EEC: []rune{0x1EED}, // Case map 0x1EEE: []rune{0x1EEF}, // Case map 0x1EF0: []rune{0x1EF1}, // Case map 0x1EF2: []rune{0x1EF3}, // Case map 0x1EF4: []rune{0x1EF5}, // Case map 0x1EF6: []rune{0x1EF7}, // Case map 0x1EF8: []rune{0x1EF9}, // Case map 0x1F08: []rune{0x1F00}, // Case map 0x1F09: []rune{0x1F01}, // Case map 0x1F0A: []rune{0x1F02}, // Case map 0x1F0B: []rune{0x1F03}, // Case map 0x1F0C: []rune{0x1F04}, // Case map 0x1F0D: []rune{0x1F05}, // Case map 0x1F0E: []rune{0x1F06}, // Case map 0x1F0F: []rune{0x1F07}, // Case map 0x1F18: []rune{0x1F10}, // Case map 0x1F19: []rune{0x1F11}, // Case map 0x1F1A: []rune{0x1F12}, // Case map 0x1F1B: []rune{0x1F13}, // Case map 0x1F1C: []rune{0x1F14}, // Case map 0x1F1D: []rune{0x1F15}, // Case map 0x1F28: []rune{0x1F20}, // Case map 0x1F29: []rune{0x1F21}, // Case map 0x1F2A: []rune{0x1F22}, // Case map 0x1F2B: []rune{0x1F23}, // Case map 0x1F2C: []rune{0x1F24}, // Case map 0x1F2D: []rune{0x1F25}, // Case map 0x1F2E: []rune{0x1F26}, // Case map 0x1F2F: []rune{0x1F27}, // Case map 0x1F38: []rune{0x1F30}, // Case map 0x1F39: []rune{0x1F31}, // Case map 0x1F3A: []rune{0x1F32}, // Case map 0x1F3B: []rune{0x1F33}, // Case map 0x1F3C: []rune{0x1F34}, // Case map 0x1F3D: []rune{0x1F35}, // Case map 0x1F3E: []rune{0x1F36}, // Case map 0x1F3F: []rune{0x1F37}, // Case map 0x1F48: []rune{0x1F40}, // Case map 0x1F49: []rune{0x1F41}, // Case map 0x1F4A: []rune{0x1F42}, // Case map 0x1F4B: []rune{0x1F43}, // Case map 0x1F4C: []rune{0x1F44}, // Case map 0x1F4D: []rune{0x1F45}, // Case map 0x1F50: []rune{0x03C5, 0x0313}, // Case map 0x1F52: []rune{0x03C5, 0x0313, 0x0300}, // Case map 0x1F54: []rune{0x03C5, 0x0313, 0x0301}, // Case map 0x1F56: []rune{0x03C5, 0x0313, 0x0342}, // Case map 0x1F59: []rune{0x1F51}, // Case map 0x1F5B: []rune{0x1F53}, // Case map 0x1F5D: []rune{0x1F55}, // Case map 0x1F5F: []rune{0x1F57}, // Case map 0x1F68: []rune{0x1F60}, // Case map 0x1F69: []rune{0x1F61}, // Case map 0x1F6A: []rune{0x1F62}, // Case map 0x1F6B: []rune{0x1F63}, // Case map 0x1F6C: []rune{0x1F64}, // Case map 0x1F6D: []rune{0x1F65}, // Case map 0x1F6E: []rune{0x1F66}, // Case map 0x1F6F: []rune{0x1F67}, // Case map 0x1F80: []rune{0x1F00, 0x03B9}, // Case map 0x1F81: []rune{0x1F01, 0x03B9}, // Case map 0x1F82: []rune{0x1F02, 0x03B9}, // Case map 0x1F83: []rune{0x1F03, 0x03B9}, // Case map 0x1F84: []rune{0x1F04, 0x03B9}, // Case map 0x1F85: []rune{0x1F05, 0x03B9}, // Case map 0x1F86: []rune{0x1F06, 0x03B9}, // Case map 0x1F87: []rune{0x1F07, 0x03B9}, // Case map 0x1F88: []rune{0x1F00, 0x03B9}, // Case map 0x1F89: []rune{0x1F01, 0x03B9}, // Case map 0x1F8A: []rune{0x1F02, 0x03B9}, // Case map 0x1F8B: []rune{0x1F03, 0x03B9}, // Case map 0x1F8C: []rune{0x1F04, 0x03B9}, // Case map 0x1F8D: []rune{0x1F05, 0x03B9}, // Case map 0x1F8E: []rune{0x1F06, 0x03B9}, // Case map 0x1F8F: []rune{0x1F07, 0x03B9}, // Case map 0x1F90: []rune{0x1F20, 0x03B9}, // Case map 0x1F91: []rune{0x1F21, 0x03B9}, // Case map 0x1F92: []rune{0x1F22, 0x03B9}, // Case map 0x1F93: []rune{0x1F23, 0x03B9}, // Case map 0x1F94: []rune{0x1F24, 0x03B9}, // Case map 0x1F95: []rune{0x1F25, 0x03B9}, // Case map 0x1F96: []rune{0x1F26, 0x03B9}, // Case map 0x1F97: []rune{0x1F27, 0x03B9}, // Case map 0x1F98: []rune{0x1F20, 0x03B9}, // Case map 0x1F99: []rune{0x1F21, 0x03B9}, // Case map 0x1F9A: []rune{0x1F22, 0x03B9}, // Case map 0x1F9B: []rune{0x1F23, 0x03B9}, // Case map 0x1F9C: []rune{0x1F24, 0x03B9}, // Case map 0x1F9D: []rune{0x1F25, 0x03B9}, // Case map 0x1F9E: []rune{0x1F26, 0x03B9}, // Case map 0x1F9F: []rune{0x1F27, 0x03B9}, // Case map 0x1FA0: []rune{0x1F60, 0x03B9}, // Case map 0x1FA1: []rune{0x1F61, 0x03B9}, // Case map 0x1FA2: []rune{0x1F62, 0x03B9}, // Case map 0x1FA3: []rune{0x1F63, 0x03B9}, // Case map 0x1FA4: []rune{0x1F64, 0x03B9}, // Case map 0x1FA5: []rune{0x1F65, 0x03B9}, // Case map 0x1FA6: []rune{0x1F66, 0x03B9}, // Case map 0x1FA7: []rune{0x1F67, 0x03B9}, // Case map 0x1FA8: []rune{0x1F60, 0x03B9}, // Case map 0x1FA9: []rune{0x1F61, 0x03B9}, // Case map 0x1FAA: []rune{0x1F62, 0x03B9}, // Case map 0x1FAB: []rune{0x1F63, 0x03B9}, // Case map 0x1FAC: []rune{0x1F64, 0x03B9}, // Case map 0x1FAD: []rune{0x1F65, 0x03B9}, // Case map 0x1FAE: []rune{0x1F66, 0x03B9}, // Case map 0x1FAF: []rune{0x1F67, 0x03B9}, // Case map 0x1FB2: []rune{0x1F70, 0x03B9}, // Case map 0x1FB3: []rune{0x03B1, 0x03B9}, // Case map 0x1FB4: []rune{0x03AC, 0x03B9}, // Case map 0x1FB6: []rune{0x03B1, 0x0342}, // Case map 0x1FB7: []rune{0x03B1, 0x0342, 0x03B9}, // Case map 0x1FB8: []rune{0x1FB0}, // Case map 0x1FB9: []rune{0x1FB1}, // Case map 0x1FBA: []rune{0x1F70}, // Case map 0x1FBB: []rune{0x1F71}, // Case map 0x1FBC: []rune{0x03B1, 0x03B9}, // Case map 0x1FBE: []rune{0x03B9}, // Case map 0x1FC2: []rune{0x1F74, 0x03B9}, // Case map 0x1FC3: []rune{0x03B7, 0x03B9}, // Case map 0x1FC4: []rune{0x03AE, 0x03B9}, // Case map 0x1FC6: []rune{0x03B7, 0x0342}, // Case map 0x1FC7: []rune{0x03B7, 0x0342, 0x03B9}, // Case map 0x1FC8: []rune{0x1F72}, // Case map 0x1FC9: []rune{0x1F73}, // Case map 0x1FCA: []rune{0x1F74}, // Case map 0x1FCB: []rune{0x1F75}, // Case map 0x1FCC: []rune{0x03B7, 0x03B9}, // Case map 0x1FD2: []rune{0x03B9, 0x0308, 0x0300}, // Case map 0x1FD3: []rune{0x03B9, 0x0308, 0x0301}, // Case map 0x1FD6: []rune{0x03B9, 0x0342}, // Case map 0x1FD7: []rune{0x03B9, 0x0308, 0x0342}, // Case map 0x1FD8: []rune{0x1FD0}, // Case map 0x1FD9: []rune{0x1FD1}, // Case map 0x1FDA: []rune{0x1F76}, // Case map 0x1FDB: []rune{0x1F77}, // Case map 0x1FE2: []rune{0x03C5, 0x0308, 0x0300}, // Case map 0x1FE3: []rune{0x03C5, 0x0308, 0x0301}, // Case map 0x1FE4: []rune{0x03C1, 0x0313}, // Case map 0x1FE6: []rune{0x03C5, 0x0342}, // Case map 0x1FE7: []rune{0x03C5, 0x0308, 0x0342}, // Case map 0x1FE8: []rune{0x1FE0}, // Case map 0x1FE9: []rune{0x1FE1}, // Case map 0x1FEA: []rune{0x1F7A}, // Case map 0x1FEB: []rune{0x1F7B}, // Case map 0x1FEC: []rune{0x1FE5}, // Case map 0x1FF2: []rune{0x1F7C, 0x03B9}, // Case map 0x1FF3: []rune{0x03C9, 0x03B9}, // Case map 0x1FF4: []rune{0x03CE, 0x03B9}, // Case map 0x1FF6: []rune{0x03C9, 0x0342}, // Case map 0x1FF7: []rune{0x03C9, 0x0342, 0x03B9}, // Case map 0x1FF8: []rune{0x1F78}, // Case map 0x1FF9: []rune{0x1F79}, // Case map 0x1FFA: []rune{0x1F7C}, // Case map 0x1FFB: []rune{0x1F7D}, // Case map 0x1FFC: []rune{0x03C9, 0x03B9}, // Case map 0x2126: []rune{0x03C9}, // Case map 0x212A: []rune{0x006B}, // Case map 0x212B: []rune{0x00E5}, // Case map 0x2160: []rune{0x2170}, // Case map 0x2161: []rune{0x2171}, // Case map 0x2162: []rune{0x2172}, // Case map 0x2163: []rune{0x2173}, // Case map 0x2164: []rune{0x2174}, // Case map 0x2165: []rune{0x2175}, // Case map 0x2166: []rune{0x2176}, // Case map 0x2167: []rune{0x2177}, // Case map 0x2168: []rune{0x2178}, // Case map 0x2169: []rune{0x2179}, // Case map 0x216A: []rune{0x217A}, // Case map 0x216B: []rune{0x217B}, // Case map 0x216C: []rune{0x217C}, // Case map 0x216D: []rune{0x217D}, // Case map 0x216E: []rune{0x217E}, // Case map 0x216F: []rune{0x217F}, // Case map 0x24B6: []rune{0x24D0}, // Case map 0x24B7: []rune{0x24D1}, // Case map 0x24B8: []rune{0x24D2}, // Case map 0x24B9: []rune{0x24D3}, // Case map 0x24BA: []rune{0x24D4}, // Case map 0x24BB: []rune{0x24D5}, // Case map 0x24BC: []rune{0x24D6}, // Case map 0x24BD: []rune{0x24D7}, // Case map 0x24BE: []rune{0x24D8}, // Case map 0x24BF: []rune{0x24D9}, // Case map 0x24C0: []rune{0x24DA}, // Case map 0x24C1: []rune{0x24DB}, // Case map 0x24C2: []rune{0x24DC}, // Case map 0x24C3: []rune{0x24DD}, // Case map 0x24C4: []rune{0x24DE}, // Case map 0x24C5: []rune{0x24DF}, // Case map 0x24C6: []rune{0x24E0}, // Case map 0x24C7: []rune{0x24E1}, // Case map 0x24C8: []rune{0x24E2}, // Case map 0x24C9: []rune{0x24E3}, // Case map 0x24CA: []rune{0x24E4}, // Case map 0x24CB: []rune{0x24E5}, // Case map 0x24CC: []rune{0x24E6}, // Case map 0x24CD: []rune{0x24E7}, // Case map 0x24CE: []rune{0x24E8}, // Case map 0x24CF: []rune{0x24E9}, // Case map 0xFB00: []rune{0x0066, 0x0066}, // Case map 0xFB01: []rune{0x0066, 0x0069}, // Case map 0xFB02: []rune{0x0066, 0x006C}, // Case map 0xFB03: []rune{0x0066, 0x0066, 0x0069}, // Case map 0xFB04: []rune{0x0066, 0x0066, 0x006C}, // Case map 0xFB05: []rune{0x0073, 0x0074}, // Case map 0xFB06: []rune{0x0073, 0x0074}, // Case map 0xFB13: []rune{0x0574, 0x0576}, // Case map 0xFB14: []rune{0x0574, 0x0565}, // Case map 0xFB15: []rune{0x0574, 0x056B}, // Case map 0xFB16: []rune{0x057E, 0x0576}, // Case map 0xFB17: []rune{0x0574, 0x056D}, // Case map 0xFF21: []rune{0xFF41}, // Case map 0xFF22: []rune{0xFF42}, // Case map 0xFF23: []rune{0xFF43}, // Case map 0xFF24: []rune{0xFF44}, // Case map 0xFF25: []rune{0xFF45}, // Case map 0xFF26: []rune{0xFF46}, // Case map 0xFF27: []rune{0xFF47}, // Case map 0xFF28: []rune{0xFF48}, // Case map 0xFF29: []rune{0xFF49}, // Case map 0xFF2A: []rune{0xFF4A}, // Case map 0xFF2B: []rune{0xFF4B}, // Case map 0xFF2C: []rune{0xFF4C}, // Case map 0xFF2D: []rune{0xFF4D}, // Case map 0xFF2E: []rune{0xFF4E}, // Case map 0xFF2F: []rune{0xFF4F}, // Case map 0xFF30: []rune{0xFF50}, // Case map 0xFF31: []rune{0xFF51}, // Case map 0xFF32: []rune{0xFF52}, // Case map 0xFF33: []rune{0xFF53}, // Case map 0xFF34: []rune{0xFF54}, // Case map 0xFF35: []rune{0xFF55}, // Case map 0xFF36: []rune{0xFF56}, // Case map 0xFF37: []rune{0xFF57}, // Case map 0xFF38: []rune{0xFF58}, // Case map 0xFF39: []rune{0xFF59}, // Case map 0xFF3A: []rune{0xFF5A}, // Case map 0x10400: []rune{0x10428}, // Case map 0x10401: []rune{0x10429}, // Case map 0x10402: []rune{0x1042A}, // Case map 0x10403: []rune{0x1042B}, // Case map 0x10404: []rune{0x1042C}, // Case map 0x10405: []rune{0x1042D}, // Case map 0x10406: []rune{0x1042E}, // Case map 0x10407: []rune{0x1042F}, // Case map 0x10408: []rune{0x10430}, // Case map 0x10409: []rune{0x10431}, // Case map 0x1040A: []rune{0x10432}, // Case map 0x1040B: []rune{0x10433}, // Case map 0x1040C: []rune{0x10434}, // Case map 0x1040D: []rune{0x10435}, // Case map 0x1040E: []rune{0x10436}, // Case map 0x1040F: []rune{0x10437}, // Case map 0x10410: []rune{0x10438}, // Case map 0x10411: []rune{0x10439}, // Case map 0x10412: []rune{0x1043A}, // Case map 0x10413: []rune{0x1043B}, // Case map 0x10414: []rune{0x1043C}, // Case map 0x10415: []rune{0x1043D}, // Case map 0x10416: []rune{0x1043E}, // Case map 0x10417: []rune{0x1043F}, // Case map 0x10418: []rune{0x10440}, // Case map 0x10419: []rune{0x10441}, // Case map 0x1041A: []rune{0x10442}, // Case map 0x1041B: []rune{0x10443}, // Case map 0x1041C: []rune{0x10444}, // Case map 0x1041D: []rune{0x10445}, // Case map 0x1041E: []rune{0x10446}, // Case map 0x1041F: []rune{0x10447}, // Case map 0x10420: []rune{0x10448}, // Case map 0x10421: []rune{0x10449}, // Case map 0x10422: []rune{0x1044A}, // Case map 0x10423: []rune{0x1044B}, // Case map 0x10424: []rune{0x1044C}, // Case map 0x10425: []rune{0x1044D}, // Case map } // TableB3 represents RFC-3454 Table B.3. var TableB3 Mapping = tableB3 var tableC1_1 = Set{ RuneRange{0x0020, 0x0020}, // SPACE } // TableC1_1 represents RFC-3454 Table C.1.1. var TableC1_1 Set = tableC1_1 var tableC1_2 = Set{ RuneRange{0x00A0, 0x00A0}, // NO-BREAK SPACE RuneRange{0x1680, 0x1680}, // OGHAM SPACE MARK RuneRange{0x2000, 0x2000}, // EN QUAD RuneRange{0x2001, 0x2001}, // EM QUAD RuneRange{0x2002, 0x2002}, // EN SPACE RuneRange{0x2003, 0x2003}, // EM SPACE RuneRange{0x2004, 0x2004}, // THREE-PER-EM SPACE RuneRange{0x2005, 0x2005}, // FOUR-PER-EM SPACE RuneRange{0x2006, 0x2006}, // SIX-PER-EM SPACE RuneRange{0x2007, 0x2007}, // FIGURE SPACE RuneRange{0x2008, 0x2008}, // PUNCTUATION SPACE RuneRange{0x2009, 0x2009}, // THIN SPACE RuneRange{0x200A, 0x200A}, // HAIR SPACE RuneRange{0x200B, 0x200B}, // ZERO WIDTH SPACE RuneRange{0x202F, 0x202F}, // NARROW NO-BREAK SPACE RuneRange{0x205F, 0x205F}, // MEDIUM MATHEMATICAL SPACE RuneRange{0x3000, 0x3000}, // IDEOGRAPHIC SPACE } // TableC1_2 represents RFC-3454 Table C.1.2. var TableC1_2 Set = tableC1_2 var tableC2_1 = Set{ RuneRange{0x0000, 0x001F}, // [CONTROL CHARACTERS] RuneRange{0x007F, 0x007F}, // DELETE } // TableC2_1 represents RFC-3454 Table C.2.1. var TableC2_1 Set = tableC2_1 var tableC2_2 = Set{ RuneRange{0x0080, 0x009F}, // [CONTROL CHARACTERS] RuneRange{0x06DD, 0x06DD}, // ARABIC END OF AYAH RuneRange{0x070F, 0x070F}, // SYRIAC ABBREVIATION MARK RuneRange{0x180E, 0x180E}, // MONGOLIAN VOWEL SEPARATOR RuneRange{0x200C, 0x200C}, // ZERO WIDTH NON-JOINER RuneRange{0x200D, 0x200D}, // ZERO WIDTH JOINER RuneRange{0x2028, 0x2028}, // LINE SEPARATOR RuneRange{0x2029, 0x2029}, // PARAGRAPH SEPARATOR RuneRange{0x2060, 0x2060}, // WORD JOINER RuneRange{0x2061, 0x2061}, // FUNCTION APPLICATION RuneRange{0x2062, 0x2062}, // INVISIBLE TIMES RuneRange{0x2063, 0x2063}, // INVISIBLE SEPARATOR RuneRange{0x206A, 0x206F}, // [CONTROL CHARACTERS] RuneRange{0xFEFF, 0xFEFF}, // ZERO WIDTH NO-BREAK SPACE RuneRange{0xFFF9, 0xFFFC}, // [CONTROL CHARACTERS] RuneRange{0x1D173, 0x1D17A}, // [MUSICAL CONTROL CHARACTERS] } // TableC2_2 represents RFC-3454 Table C.2.2. var TableC2_2 Set = tableC2_2 var tableC3 = Set{ RuneRange{0xE000, 0xF8FF}, // [PRIVATE USE, PLANE 0] RuneRange{0xF0000, 0xFFFFD}, // [PRIVATE USE, PLANE 15] RuneRange{0x100000, 0x10FFFD}, // [PRIVATE USE, PLANE 16] } // TableC3 represents RFC-3454 Table C.3. var TableC3 Set = tableC3 var tableC4 = Set{ RuneRange{0xFDD0, 0xFDEF}, // [NONCHARACTER CODE POINTS] RuneRange{0xFFFE, 0xFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x1FFFE, 0x1FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x2FFFE, 0x2FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x3FFFE, 0x3FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x4FFFE, 0x4FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x5FFFE, 0x5FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x6FFFE, 0x6FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x7FFFE, 0x7FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x8FFFE, 0x8FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x9FFFE, 0x9FFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0xAFFFE, 0xAFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0xBFFFE, 0xBFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0xCFFFE, 0xCFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0xDFFFE, 0xDFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0xEFFFE, 0xEFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0xFFFFE, 0xFFFFF}, // [NONCHARACTER CODE POINTS] RuneRange{0x10FFFE, 0x10FFFF}, // [NONCHARACTER CODE POINTS] } // TableC4 represents RFC-3454 Table C.4. var TableC4 Set = tableC4 var tableC5 = Set{ RuneRange{0xD800, 0xDFFF}, // [SURROGATE CODES] } // TableC5 represents RFC-3454 Table C.5. var TableC5 Set = tableC5 var tableC6 = Set{ RuneRange{0xFFF9, 0xFFF9}, // INTERLINEAR ANNOTATION ANCHOR RuneRange{0xFFFA, 0xFFFA}, // INTERLINEAR ANNOTATION SEPARATOR RuneRange{0xFFFB, 0xFFFB}, // INTERLINEAR ANNOTATION TERMINATOR RuneRange{0xFFFC, 0xFFFC}, // OBJECT REPLACEMENT CHARACTER RuneRange{0xFFFD, 0xFFFD}, // REPLACEMENT CHARACTER } // TableC6 represents RFC-3454 Table C.6. var TableC6 Set = tableC6 var tableC7 = Set{ RuneRange{0x2FF0, 0x2FFB}, // [IDEOGRAPHIC DESCRIPTION CHARACTERS] } // TableC7 represents RFC-3454 Table C.7. var TableC7 Set = tableC7 var tableC8 = Set{ RuneRange{0x0340, 0x0340}, // COMBINING GRAVE TONE MARK RuneRange{0x0341, 0x0341}, // COMBINING ACUTE TONE MARK RuneRange{0x200E, 0x200E}, // LEFT-TO-RIGHT MARK RuneRange{0x200F, 0x200F}, // RIGHT-TO-LEFT MARK RuneRange{0x202A, 0x202A}, // LEFT-TO-RIGHT EMBEDDING RuneRange{0x202B, 0x202B}, // RIGHT-TO-LEFT EMBEDDING RuneRange{0x202C, 0x202C}, // POP DIRECTIONAL FORMATTING RuneRange{0x202D, 0x202D}, // LEFT-TO-RIGHT OVERRIDE RuneRange{0x202E, 0x202E}, // RIGHT-TO-LEFT OVERRIDE RuneRange{0x206A, 0x206A}, // INHIBIT SYMMETRIC SWAPPING RuneRange{0x206B, 0x206B}, // ACTIVATE SYMMETRIC SWAPPING RuneRange{0x206C, 0x206C}, // INHIBIT ARABIC FORM SHAPING RuneRange{0x206D, 0x206D}, // ACTIVATE ARABIC FORM SHAPING RuneRange{0x206E, 0x206E}, // NATIONAL DIGIT SHAPES RuneRange{0x206F, 0x206F}, // NOMINAL DIGIT SHAPES } // TableC8 represents RFC-3454 Table C.8. var TableC8 Set = tableC8 var tableC9 = Set{ RuneRange{0xE0001, 0xE0001}, // LANGUAGE TAG RuneRange{0xE0020, 0xE007F}, // [TAGGING CHARACTERS] } // TableC9 represents RFC-3454 Table C.9. var TableC9 Set = tableC9 var tableD1 = Set{ RuneRange{0x05BE, 0x05BE}, RuneRange{0x05C0, 0x05C0}, RuneRange{0x05C3, 0x05C3}, RuneRange{0x05D0, 0x05EA}, RuneRange{0x05F0, 0x05F4}, RuneRange{0x061B, 0x061B}, RuneRange{0x061F, 0x061F}, RuneRange{0x0621, 0x063A}, RuneRange{0x0640, 0x064A}, RuneRange{0x066D, 0x066F}, RuneRange{0x0671, 0x06D5}, RuneRange{0x06DD, 0x06DD}, RuneRange{0x06E5, 0x06E6}, RuneRange{0x06FA, 0x06FE}, RuneRange{0x0700, 0x070D}, RuneRange{0x0710, 0x0710}, RuneRange{0x0712, 0x072C}, RuneRange{0x0780, 0x07A5}, RuneRange{0x07B1, 0x07B1}, RuneRange{0x200F, 0x200F}, RuneRange{0xFB1D, 0xFB1D}, RuneRange{0xFB1F, 0xFB28}, RuneRange{0xFB2A, 0xFB36}, RuneRange{0xFB38, 0xFB3C}, RuneRange{0xFB3E, 0xFB3E}, RuneRange{0xFB40, 0xFB41}, RuneRange{0xFB43, 0xFB44}, RuneRange{0xFB46, 0xFBB1}, RuneRange{0xFBD3, 0xFD3D}, RuneRange{0xFD50, 0xFD8F}, RuneRange{0xFD92, 0xFDC7}, RuneRange{0xFDF0, 0xFDFC}, RuneRange{0xFE70, 0xFE74}, RuneRange{0xFE76, 0xFEFC}, } // TableD1 represents RFC-3454 Table D.1. var TableD1 Set = tableD1 var tableD2 = Set{ RuneRange{0x0041, 0x005A}, RuneRange{0x0061, 0x007A}, RuneRange{0x00AA, 0x00AA}, RuneRange{0x00B5, 0x00B5}, RuneRange{0x00BA, 0x00BA}, RuneRange{0x00C0, 0x00D6}, RuneRange{0x00D8, 0x00F6}, RuneRange{0x00F8, 0x0220}, RuneRange{0x0222, 0x0233}, RuneRange{0x0250, 0x02AD}, RuneRange{0x02B0, 0x02B8}, RuneRange{0x02BB, 0x02C1}, RuneRange{0x02D0, 0x02D1}, RuneRange{0x02E0, 0x02E4}, RuneRange{0x02EE, 0x02EE}, RuneRange{0x037A, 0x037A}, RuneRange{0x0386, 0x0386}, RuneRange{0x0388, 0x038A}, RuneRange{0x038C, 0x038C}, RuneRange{0x038E, 0x03A1}, RuneRange{0x03A3, 0x03CE}, RuneRange{0x03D0, 0x03F5}, RuneRange{0x0400, 0x0482}, RuneRange{0x048A, 0x04CE}, RuneRange{0x04D0, 0x04F5}, RuneRange{0x04F8, 0x04F9}, RuneRange{0x0500, 0x050F}, RuneRange{0x0531, 0x0556}, RuneRange{0x0559, 0x055F}, RuneRange{0x0561, 0x0587}, RuneRange{0x0589, 0x0589}, RuneRange{0x0903, 0x0903}, RuneRange{0x0905, 0x0939}, RuneRange{0x093D, 0x0940}, RuneRange{0x0949, 0x094C}, RuneRange{0x0950, 0x0950}, RuneRange{0x0958, 0x0961}, RuneRange{0x0964, 0x0970}, RuneRange{0x0982, 0x0983}, RuneRange{0x0985, 0x098C}, RuneRange{0x098F, 0x0990}, RuneRange{0x0993, 0x09A8}, RuneRange{0x09AA, 0x09B0}, RuneRange{0x09B2, 0x09B2}, RuneRange{0x09B6, 0x09B9}, RuneRange{0x09BE, 0x09C0}, RuneRange{0x09C7, 0x09C8}, RuneRange{0x09CB, 0x09CC}, RuneRange{0x09D7, 0x09D7}, RuneRange{0x09DC, 0x09DD}, RuneRange{0x09DF, 0x09E1}, RuneRange{0x09E6, 0x09F1}, RuneRange{0x09F4, 0x09FA}, RuneRange{0x0A05, 0x0A0A}, RuneRange{0x0A0F, 0x0A10}, RuneRange{0x0A13, 0x0A28}, RuneRange{0x0A2A, 0x0A30}, RuneRange{0x0A32, 0x0A33}, RuneRange{0x0A35, 0x0A36}, RuneRange{0x0A38, 0x0A39}, RuneRange{0x0A3E, 0x0A40}, RuneRange{0x0A59, 0x0A5C}, RuneRange{0x0A5E, 0x0A5E}, RuneRange{0x0A66, 0x0A6F}, RuneRange{0x0A72, 0x0A74}, RuneRange{0x0A83, 0x0A83}, RuneRange{0x0A85, 0x0A8B}, RuneRange{0x0A8D, 0x0A8D}, RuneRange{0x0A8F, 0x0A91}, RuneRange{0x0A93, 0x0AA8}, RuneRange{0x0AAA, 0x0AB0}, RuneRange{0x0AB2, 0x0AB3}, RuneRange{0x0AB5, 0x0AB9}, RuneRange{0x0ABD, 0x0AC0}, RuneRange{0x0AC9, 0x0AC9}, RuneRange{0x0ACB, 0x0ACC}, RuneRange{0x0AD0, 0x0AD0}, RuneRange{0x0AE0, 0x0AE0}, RuneRange{0x0AE6, 0x0AEF}, RuneRange{0x0B02, 0x0B03}, RuneRange{0x0B05, 0x0B0C}, RuneRange{0x0B0F, 0x0B10}, RuneRange{0x0B13, 0x0B28}, RuneRange{0x0B2A, 0x0B30}, RuneRange{0x0B32, 0x0B33}, RuneRange{0x0B36, 0x0B39}, RuneRange{0x0B3D, 0x0B3E}, RuneRange{0x0B40, 0x0B40}, RuneRange{0x0B47, 0x0B48}, RuneRange{0x0B4B, 0x0B4C}, RuneRange{0x0B57, 0x0B57}, RuneRange{0x0B5C, 0x0B5D}, RuneRange{0x0B5F, 0x0B61}, RuneRange{0x0B66, 0x0B70}, RuneRange{0x0B83, 0x0B83}, RuneRange{0x0B85, 0x0B8A}, RuneRange{0x0B8E, 0x0B90}, RuneRange{0x0B92, 0x0B95}, RuneRange{0x0B99, 0x0B9A}, RuneRange{0x0B9C, 0x0B9C}, RuneRange{0x0B9E, 0x0B9F}, RuneRange{0x0BA3, 0x0BA4}, RuneRange{0x0BA8, 0x0BAA}, RuneRange{0x0BAE, 0x0BB5}, RuneRange{0x0BB7, 0x0BB9}, RuneRange{0x0BBE, 0x0BBF}, RuneRange{0x0BC1, 0x0BC2}, RuneRange{0x0BC6, 0x0BC8}, RuneRange{0x0BCA, 0x0BCC}, RuneRange{0x0BD7, 0x0BD7}, RuneRange{0x0BE7, 0x0BF2}, RuneRange{0x0C01, 0x0C03}, RuneRange{0x0C05, 0x0C0C}, RuneRange{0x0C0E, 0x0C10}, RuneRange{0x0C12, 0x0C28}, RuneRange{0x0C2A, 0x0C33}, RuneRange{0x0C35, 0x0C39}, RuneRange{0x0C41, 0x0C44}, RuneRange{0x0C60, 0x0C61}, RuneRange{0x0C66, 0x0C6F}, RuneRange{0x0C82, 0x0C83}, RuneRange{0x0C85, 0x0C8C}, RuneRange{0x0C8E, 0x0C90}, RuneRange{0x0C92, 0x0CA8}, RuneRange{0x0CAA, 0x0CB3}, RuneRange{0x0CB5, 0x0CB9}, RuneRange{0x0CBE, 0x0CBE}, RuneRange{0x0CC0, 0x0CC4}, RuneRange{0x0CC7, 0x0CC8}, RuneRange{0x0CCA, 0x0CCB}, RuneRange{0x0CD5, 0x0CD6}, RuneRange{0x0CDE, 0x0CDE}, RuneRange{0x0CE0, 0x0CE1}, RuneRange{0x0CE6, 0x0CEF}, RuneRange{0x0D02, 0x0D03}, RuneRange{0x0D05, 0x0D0C}, RuneRange{0x0D0E, 0x0D10}, RuneRange{0x0D12, 0x0D28}, RuneRange{0x0D2A, 0x0D39}, RuneRange{0x0D3E, 0x0D40}, RuneRange{0x0D46, 0x0D48}, RuneRange{0x0D4A, 0x0D4C}, RuneRange{0x0D57, 0x0D57}, RuneRange{0x0D60, 0x0D61}, RuneRange{0x0D66, 0x0D6F}, RuneRange{0x0D82, 0x0D83}, RuneRange{0x0D85, 0x0D96}, RuneRange{0x0D9A, 0x0DB1}, RuneRange{0x0DB3, 0x0DBB}, RuneRange{0x0DBD, 0x0DBD}, RuneRange{0x0DC0, 0x0DC6}, RuneRange{0x0DCF, 0x0DD1}, RuneRange{0x0DD8, 0x0DDF}, RuneRange{0x0DF2, 0x0DF4}, RuneRange{0x0E01, 0x0E30}, RuneRange{0x0E32, 0x0E33}, RuneRange{0x0E40, 0x0E46}, RuneRange{0x0E4F, 0x0E5B}, RuneRange{0x0E81, 0x0E82}, RuneRange{0x0E84, 0x0E84}, RuneRange{0x0E87, 0x0E88}, RuneRange{0x0E8A, 0x0E8A}, RuneRange{0x0E8D, 0x0E8D}, RuneRange{0x0E94, 0x0E97}, RuneRange{0x0E99, 0x0E9F}, RuneRange{0x0EA1, 0x0EA3}, RuneRange{0x0EA5, 0x0EA5}, RuneRange{0x0EA7, 0x0EA7}, RuneRange{0x0EAA, 0x0EAB}, RuneRange{0x0EAD, 0x0EB0}, RuneRange{0x0EB2, 0x0EB3}, RuneRange{0x0EBD, 0x0EBD}, RuneRange{0x0EC0, 0x0EC4}, RuneRange{0x0EC6, 0x0EC6}, RuneRange{0x0ED0, 0x0ED9}, RuneRange{0x0EDC, 0x0EDD}, RuneRange{0x0F00, 0x0F17}, RuneRange{0x0F1A, 0x0F34}, RuneRange{0x0F36, 0x0F36}, RuneRange{0x0F38, 0x0F38}, RuneRange{0x0F3E, 0x0F47}, RuneRange{0x0F49, 0x0F6A}, RuneRange{0x0F7F, 0x0F7F}, RuneRange{0x0F85, 0x0F85}, RuneRange{0x0F88, 0x0F8B}, RuneRange{0x0FBE, 0x0FC5}, RuneRange{0x0FC7, 0x0FCC}, RuneRange{0x0FCF, 0x0FCF}, RuneRange{0x1000, 0x1021}, RuneRange{0x1023, 0x1027}, RuneRange{0x1029, 0x102A}, RuneRange{0x102C, 0x102C}, RuneRange{0x1031, 0x1031}, RuneRange{0x1038, 0x1038}, RuneRange{0x1040, 0x1057}, RuneRange{0x10A0, 0x10C5}, RuneRange{0x10D0, 0x10F8}, RuneRange{0x10FB, 0x10FB}, RuneRange{0x1100, 0x1159}, RuneRange{0x115F, 0x11A2}, RuneRange{0x11A8, 0x11F9}, RuneRange{0x1200, 0x1206}, RuneRange{0x1208, 0x1246}, RuneRange{0x1248, 0x1248}, RuneRange{0x124A, 0x124D}, RuneRange{0x1250, 0x1256}, RuneRange{0x1258, 0x1258}, RuneRange{0x125A, 0x125D}, RuneRange{0x1260, 0x1286}, RuneRange{0x1288, 0x1288}, RuneRange{0x128A, 0x128D}, RuneRange{0x1290, 0x12AE}, RuneRange{0x12B0, 0x12B0}, RuneRange{0x12B2, 0x12B5}, RuneRange{0x12B8, 0x12BE}, RuneRange{0x12C0, 0x12C0}, RuneRange{0x12C2, 0x12C5}, RuneRange{0x12C8, 0x12CE}, RuneRange{0x12D0, 0x12D6}, RuneRange{0x12D8, 0x12EE}, RuneRange{0x12F0, 0x130E}, RuneRange{0x1310, 0x1310}, RuneRange{0x1312, 0x1315}, RuneRange{0x1318, 0x131E}, RuneRange{0x1320, 0x1346}, RuneRange{0x1348, 0x135A}, RuneRange{0x1361, 0x137C}, RuneRange{0x13A0, 0x13F4}, RuneRange{0x1401, 0x1676}, RuneRange{0x1681, 0x169A}, RuneRange{0x16A0, 0x16F0}, RuneRange{0x1700, 0x170C}, RuneRange{0x170E, 0x1711}, RuneRange{0x1720, 0x1731}, RuneRange{0x1735, 0x1736}, RuneRange{0x1740, 0x1751}, RuneRange{0x1760, 0x176C}, RuneRange{0x176E, 0x1770}, RuneRange{0x1780, 0x17B6}, RuneRange{0x17BE, 0x17C5}, RuneRange{0x17C7, 0x17C8}, RuneRange{0x17D4, 0x17DA}, RuneRange{0x17DC, 0x17DC}, RuneRange{0x17E0, 0x17E9}, RuneRange{0x1810, 0x1819}, RuneRange{0x1820, 0x1877}, RuneRange{0x1880, 0x18A8}, RuneRange{0x1E00, 0x1E9B}, RuneRange{0x1EA0, 0x1EF9}, RuneRange{0x1F00, 0x1F15}, RuneRange{0x1F18, 0x1F1D}, RuneRange{0x1F20, 0x1F45}, RuneRange{0x1F48, 0x1F4D}, RuneRange{0x1F50, 0x1F57}, RuneRange{0x1F59, 0x1F59}, RuneRange{0x1F5B, 0x1F5B}, RuneRange{0x1F5D, 0x1F5D}, RuneRange{0x1F5F, 0x1F7D}, RuneRange{0x1F80, 0x1FB4}, RuneRange{0x1FB6, 0x1FBC}, RuneRange{0x1FBE, 0x1FBE}, RuneRange{0x1FC2, 0x1FC4}, RuneRange{0x1FC6, 0x1FCC}, RuneRange{0x1FD0, 0x1FD3}, RuneRange{0x1FD6, 0x1FDB}, RuneRange{0x1FE0, 0x1FEC}, RuneRange{0x1FF2, 0x1FF4}, RuneRange{0x1FF6, 0x1FFC}, RuneRange{0x200E, 0x200E}, RuneRange{0x2071, 0x2071}, RuneRange{0x207F, 0x207F}, RuneRange{0x2102, 0x2102}, RuneRange{0x2107, 0x2107}, RuneRange{0x210A, 0x2113}, RuneRange{0x2115, 0x2115}, RuneRange{0x2119, 0x211D}, RuneRange{0x2124, 0x2124}, RuneRange{0x2126, 0x2126}, RuneRange{0x2128, 0x2128}, RuneRange{0x212A, 0x212D}, RuneRange{0x212F, 0x2131}, RuneRange{0x2133, 0x2139}, RuneRange{0x213D, 0x213F}, RuneRange{0x2145, 0x2149}, RuneRange{0x2160, 0x2183}, RuneRange{0x2336, 0x237A}, RuneRange{0x2395, 0x2395}, RuneRange{0x249C, 0x24E9}, RuneRange{0x3005, 0x3007}, RuneRange{0x3021, 0x3029}, RuneRange{0x3031, 0x3035}, RuneRange{0x3038, 0x303C}, RuneRange{0x3041, 0x3096}, RuneRange{0x309D, 0x309F}, RuneRange{0x30A1, 0x30FA}, RuneRange{0x30FC, 0x30FF}, RuneRange{0x3105, 0x312C}, RuneRange{0x3131, 0x318E}, RuneRange{0x3190, 0x31B7}, RuneRange{0x31F0, 0x321C}, RuneRange{0x3220, 0x3243}, RuneRange{0x3260, 0x327B}, RuneRange{0x327F, 0x32B0}, RuneRange{0x32C0, 0x32CB}, RuneRange{0x32D0, 0x32FE}, RuneRange{0x3300, 0x3376}, RuneRange{0x337B, 0x33DD}, RuneRange{0x33E0, 0x33FE}, RuneRange{0x3400, 0x4DB5}, RuneRange{0x4E00, 0x9FA5}, RuneRange{0xA000, 0xA48C}, RuneRange{0xAC00, 0xD7A3}, RuneRange{0xD800, 0xFA2D}, RuneRange{0xFA30, 0xFA6A}, RuneRange{0xFB00, 0xFB06}, RuneRange{0xFB13, 0xFB17}, RuneRange{0xFF21, 0xFF3A}, RuneRange{0xFF41, 0xFF5A}, RuneRange{0xFF66, 0xFFBE}, RuneRange{0xFFC2, 0xFFC7}, RuneRange{0xFFCA, 0xFFCF}, RuneRange{0xFFD2, 0xFFD7}, RuneRange{0xFFDA, 0xFFDC}, RuneRange{0x10300, 0x1031E}, RuneRange{0x10320, 0x10323}, RuneRange{0x10330, 0x1034A}, RuneRange{0x10400, 0x10425}, RuneRange{0x10428, 0x1044D}, RuneRange{0x1D000, 0x1D0F5}, RuneRange{0x1D100, 0x1D126}, RuneRange{0x1D12A, 0x1D166}, RuneRange{0x1D16A, 0x1D172}, RuneRange{0x1D183, 0x1D184}, RuneRange{0x1D18C, 0x1D1A9}, RuneRange{0x1D1AE, 0x1D1DD}, RuneRange{0x1D400, 0x1D454}, RuneRange{0x1D456, 0x1D49C}, RuneRange{0x1D49E, 0x1D49F}, RuneRange{0x1D4A2, 0x1D4A2}, RuneRange{0x1D4A5, 0x1D4A6}, RuneRange{0x1D4A9, 0x1D4AC}, RuneRange{0x1D4AE, 0x1D4B9}, RuneRange{0x1D4BB, 0x1D4BB}, RuneRange{0x1D4BD, 0x1D4C0}, RuneRange{0x1D4C2, 0x1D4C3}, RuneRange{0x1D4C5, 0x1D505}, RuneRange{0x1D507, 0x1D50A}, RuneRange{0x1D50D, 0x1D514}, RuneRange{0x1D516, 0x1D51C}, RuneRange{0x1D51E, 0x1D539}, RuneRange{0x1D53B, 0x1D53E}, RuneRange{0x1D540, 0x1D544}, RuneRange{0x1D546, 0x1D546}, RuneRange{0x1D54A, 0x1D550}, RuneRange{0x1D552, 0x1D6A3}, RuneRange{0x1D6A8, 0x1D7C9}, RuneRange{0x20000, 0x2A6D6}, RuneRange{0x2F800, 0x2FA1D}, RuneRange{0xF0000, 0xFFFFD}, RuneRange{0x100000, 0x10FFFD}, } // TableD2 represents RFC-3454 Table D.2. var TableD2 Set = tableD2