Enable TextInfo APIs for netstandard 1.7 on Linux (#7568)
authorTarek Mahmoud Sayed <tarekms@microsoft.com>
Wed, 12 Oct 2016 16:29:55 +0000 (09:29 -0700)
committerGitHub <noreply@github.com>
Wed, 12 Oct 2016 16:29:55 +0000 (09:29 -0700)
* Enable TextInfo APIs for netstandard 1.7 on Linux

The change here is to enable the newly added netstandard 1.7 TextInfo APIs on Linux.

- moved the locale specific data to its own file Locale.Unic.cs
- added needed data to handle the TextInfo properties (e.g. codepages)
- created some helper methods in LocaleData classto handle accessing the locale data
- added the implementation for added APIs

* Fix some typos

src/mscorlib/corefx/System/Globalization/CultureData.Unix.cs
src/mscorlib/corefx/System/Globalization/CultureData.Windows.cs
src/mscorlib/corefx/System/Globalization/CultureData.cs
src/mscorlib/corefx/System/Globalization/LocaleData.Unix.cs [new file with mode: 0644]
src/mscorlib/corefx/System/Globalization/STUBS.cs
src/mscorlib/corefx/System/Globalization/TextInfo.cs
src/mscorlib/mscorlib.shared.sources.props

index 89b14ac..04e91c3 100644 (file)
@@ -18,3511 +18,6 @@ namespace System.Globalization
         const int ICU_ULOC_FULLNAME_CAPACITY = 157;           // max size of locale name
         const string ICU_COLLATION_KEYWORD = "@collation=";
         
-        // c_localeNames is the concatenation of all supported culture names.
-        // this is done rather than using a large readonly array of strings to avoid
-        // generating a large amount of code in the static constructor.
-        // Using indices from s_localeNamesIndices, we binary search this string when mapping
-        // an culture name to Lcid. Note that these names are all lowercase and are
-        // sorted alphabetically (ordinal).
-        private const string c_localeNames =
-        //  culture name                    Lcid    
-            "aa"                      + //  01000 - 0
-            "aa-dj"                   + //  01000 - 2
-            "aa-er"                   + //  01000 - 7
-            "aa-et"                   + //  01000 - 12
-            "af"                      + //  00036 - 17
-            "af-na"                   + //  01000 - 19
-            "af-za"                   + //  00436 - 24
-            "agq"                     + //  01000 - 29
-            "agq-cm"                  + //  01000 - 32
-            "ak"                      + //  01000 - 38
-            "ak-gh"                   + //  01000 - 40
-            "am"                      + //  0005e - 45
-            "am-et"                   + //  0045e - 47
-            "ar"                      + //  00001 - 52
-            "ar-001"                  + //  01000 - 54
-            "ar-ae"                   + //  03801 - 60
-            "ar-bh"                   + //  03c01 - 65
-            "ar-dj"                   + //  01000 - 70
-            "ar-dz"                   + //  01401 - 75
-            "ar-eg"                   + //  00c01 - 80
-            "ar-er"                   + //  01000 - 85
-            "ar-il"                   + //  01000 - 90
-            "ar-iq"                   + //  00801 - 95
-            "ar-jo"                   + //  02c01 - 100
-            "ar-km"                   + //  01000 - 105
-            "ar-kw"                   + //  03401 - 110
-            "ar-lb"                   + //  03001 - 115
-            "ar-ly"                   + //  01001 - 120
-            "ar-ma"                   + //  01801 - 125
-            "ar-mr"                   + //  01000 - 130
-            "ar-om"                   + //  02001 - 135
-            "ar-ps"                   + //  01000 - 140
-            "ar-qa"                   + //  04001 - 145
-            "ar-sa"                   + //  00401 - 150
-            "ar-sd"                   + //  01000 - 155
-            "ar-so"                   + //  01000 - 160
-            "ar-ss"                   + //  01000 - 165
-            "ar-sy"                   + //  02801 - 170
-            "ar-td"                   + //  01000 - 175
-            "ar-tn"                   + //  01c01 - 180
-            "ar-ye"                   + //  02401 - 185
-            "arn"                     + //  0007a - 190
-            "arn-cl"                  + //  0047a - 193
-            "as"                      + //  0004d - 199
-            "as-in"                   + //  0044d - 201
-            "asa"                     + //  01000 - 206
-            "asa-tz"                  + //  01000 - 209
-            "ast"                     + //  01000 - 215
-            "ast-es"                  + //  01000 - 218
-            "az"                      + //  0002c - 224
-            "az-cyrl"                 + //  0742c - 226
-            "az-cyrl-az"              + //  0082c - 233
-            "az-latn"                 + //  0782c - 243
-            "az-latn-az"              + //  0042c - 250
-            "ba"                      + //  0006d - 260
-            "ba-ru"                   + //  0046d - 262
-            "bas"                     + //  01000 - 267
-            "bas-cm"                  + //  01000 - 270
-            "be"                      + //  00023 - 276
-            "be-by"                   + //  00423 - 278
-            "bem"                     + //  01000 - 283
-            "bem-zm"                  + //  01000 - 286
-            "bez"                     + //  01000 - 292
-            "bez-tz"                  + //  01000 - 295
-            "bg"                      + //  00002 - 301
-            "bg-bg"                   + //  00402 - 303
-            "bin"                     + //  00066 - 308
-            "bin-ng"                  + //  00466 - 311
-            "bm"                      + //  01000 - 317
-            "bm-latn"                 + //  01000 - 319
-            "bm-latn-ml"              + //  01000 - 326
-            "bn"                      + //  00045 - 336
-            "bn-bd"                   + //  00845 - 338
-            "bn-in"                   + //  00445 - 343
-            "bo"                      + //  00051 - 348
-            "bo-cn"                   + //  00451 - 350
-            "bo-in"                   + //  01000 - 355
-            "br"                      + //  0007e - 360
-            "br-fr"                   + //  0047e - 362
-            "brx"                     + //  01000 - 367
-            "brx-in"                  + //  01000 - 370
-            "bs"                      + //  0781a - 376
-            "bs-cyrl"                 + //  0641a - 378
-            "bs-cyrl-ba"              + //  0201a - 385
-            "bs-latn"                 + //  0681a - 395
-            "bs-latn-ba"              + //  0141a - 402
-            "byn"                     + //  01000 - 412
-            "byn-er"                  + //  01000 - 415
-            "ca"                      + //  00003 - 421
-            "ca-ad"                   + //  01000 - 423
-            "ca-es"                   + //  00403 - 428
-            "ca-es-valencia"          + //  00803 - 433
-            "ca-fr"                   + //  01000 - 447
-            "ca-it"                   + //  01000 - 452
-            "ce-ru"                   + //  01000 - 457
-            "cgg"                     + //  01000 - 462
-            "cgg-ug"                  + //  01000 - 465
-            "chr"                     + //  0005c - 471
-            "chr-cher"                + //  07c5c - 474
-            "chr-cher-us"             + //  0045c - 482
-            "co"                      + //  00083 - 493
-            "co-fr"                   + //  00483 - 495
-            "cs"                      + //  00005 - 500
-            "cs-cz"                   + //  00405 - 502
-            "cu-ru"                   + //  01000 - 507
-            "cy"                      + //  00052 - 512
-            "cy-gb"                   + //  00452 - 514
-            "da"                      + //  00006 - 519
-            "da-dk"                   + //  00406 - 521
-            "da-gl"                   + //  01000 - 526
-            "dav"                     + //  01000 - 531
-            "dav-ke"                  + //  01000 - 534
-            "de"                      + //  00007 - 540
-            "de-at"                   + //  00c07 - 542
-            "de-be"                   + //  01000 - 547
-            "de-ch"                   + //  00807 - 552
-            "de-de"                   + //  00407 - 557
-            "de-de_phoneb"            + //  10407 - 562
-            "de-it"                   + //  01000 - 574
-            "de-li"                   + //  01407 - 579
-            "de-lu"                   + //  01007 - 584
-            "dje"                     + //  01000 - 589
-            "dje-ne"                  + //  01000 - 592
-            "dsb"                     + //  07c2e - 598
-            "dsb-de"                  + //  0082e - 601
-            "dua"                     + //  01000 - 607
-            "dua-cm"                  + //  01000 - 610
-            "dv"                      + //  00065 - 616
-            "dv-mv"                   + //  00465 - 618
-            "dyo"                     + //  01000 - 623
-            "dyo-sn"                  + //  01000 - 626
-            "dz"                      + //  01000 - 632
-            "dz-bt"                   + //  00c51 - 634
-            "ebu"                     + //  01000 - 639
-            "ebu-ke"                  + //  01000 - 642
-            "ee"                      + //  01000 - 648
-            "ee-gh"                   + //  01000 - 650
-            "ee-tg"                   + //  01000 - 655
-            "el"                      + //  00008 - 660
-            "el-cy"                   + //  01000 - 662
-            "el-gr"                   + //  00408 - 667
-            "en"                      + //  00009 - 672
-            "en-001"                  + //  01000 - 674
-            "en-029"                  + //  02409 - 680
-            "en-150"                  + //  01000 - 686
-            "en-ag"                   + //  01000 - 692
-            "en-ai"                   + //  01000 - 697
-            "en-as"                   + //  01000 - 702
-            "en-at"                   + //  01000 - 707
-            "en-au"                   + //  00c09 - 712
-            "en-bb"                   + //  01000 - 717
-            "en-be"                   + //  01000 - 722
-            "en-bi"                   + //  01000 - 727
-            "en-bm"                   + //  01000 - 732
-            "en-bs"                   + //  01000 - 737
-            "en-bw"                   + //  01000 - 742
-            "en-bz"                   + //  02809 - 747
-            "en-ca"                   + //  01009 - 752
-            "en-cc"                   + //  01000 - 757
-            "en-ch"                   + //  01000 - 762
-            "en-ck"                   + //  01000 - 767
-            "en-cm"                   + //  01000 - 772
-            "en-cx"                   + //  01000 - 777
-            "en-cy"                   + //  01000 - 782
-            "en-de"                   + //  01000 - 787
-            "en-dk"                   + //  01000 - 792
-            "en-dm"                   + //  01000 - 797
-            "en-er"                   + //  01000 - 802
-            "en-fi"                   + //  01000 - 807
-            "en-fj"                   + //  01000 - 812
-            "en-fk"                   + //  01000 - 817
-            "en-fm"                   + //  01000 - 822
-            "en-gb"                   + //  00809 - 827
-            "en-gd"                   + //  01000 - 832
-            "en-gg"                   + //  01000 - 837
-            "en-gh"                   + //  01000 - 842
-            "en-gi"                   + //  01000 - 847
-            "en-gm"                   + //  01000 - 852
-            "en-gu"                   + //  01000 - 857
-            "en-gy"                   + //  01000 - 862
-            "en-hk"                   + //  03c09 - 867
-            "en-id"                   + //  03809 - 872
-            "en-ie"                   + //  01809 - 877
-            "en-il"                   + //  01000 - 882
-            "en-im"                   + //  01000 - 887
-            "en-in"                   + //  04009 - 892
-            "en-io"                   + //  01000 - 897
-            "en-je"                   + //  01000 - 902
-            "en-jm"                   + //  02009 - 907
-            "en-ke"                   + //  01000 - 912
-            "en-ki"                   + //  01000 - 917
-            "en-kn"                   + //  01000 - 922
-            "en-ky"                   + //  01000 - 927
-            "en-lc"                   + //  01000 - 932
-            "en-lr"                   + //  01000 - 937
-            "en-ls"                   + //  01000 - 942
-            "en-mg"                   + //  01000 - 947
-            "en-mh"                   + //  01000 - 952
-            "en-mo"                   + //  01000 - 957
-            "en-mp"                   + //  01000 - 962
-            "en-ms"                   + //  01000 - 967
-            "en-mt"                   + //  01000 - 972
-            "en-mu"                   + //  01000 - 977
-            "en-mw"                   + //  01000 - 982
-            "en-my"                   + //  04409 - 987
-            "en-na"                   + //  01000 - 992
-            "en-nf"                   + //  01000 - 997
-            "en-ng"                   + //  01000 - 1002
-            "en-nl"                   + //  01000 - 1007
-            "en-nr"                   + //  01000 - 1012
-            "en-nu"                   + //  01000 - 1017
-            "en-nz"                   + //  01409 - 1022
-            "en-pg"                   + //  01000 - 1027
-            "en-ph"                   + //  03409 - 1032
-            "en-pk"                   + //  01000 - 1037
-            "en-pn"                   + //  01000 - 1042
-            "en-pr"                   + //  01000 - 1047
-            "en-pw"                   + //  01000 - 1052
-            "en-rw"                   + //  01000 - 1057
-            "en-sb"                   + //  01000 - 1062
-            "en-sc"                   + //  01000 - 1067
-            "en-sd"                   + //  01000 - 1072
-            "en-se"                   + //  01000 - 1077
-            "en-sg"                   + //  04809 - 1082
-            "en-sh"                   + //  01000 - 1087
-            "en-si"                   + //  01000 - 1092
-            "en-sl"                   + //  01000 - 1097
-            "en-ss"                   + //  01000 - 1102
-            "en-sx"                   + //  01000 - 1107
-            "en-sz"                   + //  01000 - 1112
-            "en-tc"                   + //  01000 - 1117
-            "en-tk"                   + //  01000 - 1122
-            "en-to"                   + //  01000 - 1127
-            "en-tt"                   + //  02c09 - 1132
-            "en-tv"                   + //  01000 - 1137
-            "en-tz"                   + //  01000 - 1142
-            "en-ug"                   + //  01000 - 1147
-            "en-um"                   + //  01000 - 1152
-            "en-us"                   + //  00409 - 1157
-            "en-vc"                   + //  01000 - 1162
-            "en-vg"                   + //  01000 - 1167
-            "en-vi"                   + //  01000 - 1172
-            "en-vu"                   + //  01000 - 1177
-            "en-ws"                   + //  01000 - 1182
-            "en-za"                   + //  01c09 - 1187
-            "en-zm"                   + //  01000 - 1192
-            "en-zw"                   + //  03009 - 1197
-            "eo"                      + //  01000 - 1202
-            "eo-001"                  + //  01000 - 1204
-            "es"                      + //  0000a - 1210
-            "es-419"                  + //  0580a - 1212
-            "es-ar"                   + //  02c0a - 1218
-            "es-bo"                   + //  0400a - 1223
-            "es-br"                   + //  01000 - 1228
-            "es-cl"                   + //  0340a - 1233
-            "es-co"                   + //  0240a - 1238
-            "es-cr"                   + //  0140a - 1243
-            "es-cu"                   + //  05c0a - 1248
-            "es-do"                   + //  01c0a - 1253
-            "es-ec"                   + //  0300a - 1258
-            "es-es"                   + //  00c0a - 1263
-            "es-es_tradnl"            + //  0040a - 1268
-            "es-gq"                   + //  01000 - 1280
-            "es-gt"                   + //  0100a - 1285
-            "es-hn"                   + //  0480a - 1290
-            "es-mx"                   + //  0080a - 1295
-            "es-ni"                   + //  04c0a - 1300
-            "es-pa"                   + //  0180a - 1305
-            "es-pe"                   + //  0280a - 1310
-            "es-ph"                   + //  01000 - 1315
-            "es-pr"                   + //  0500a - 1320
-            "es-py"                   + //  03c0a - 1325
-            "es-sv"                   + //  0440a - 1330
-            "es-us"                   + //  0540a - 1335
-            "es-uy"                   + //  0380a - 1340
-            "es-ve"                   + //  0200a - 1345
-            "et"                      + //  00025 - 1350
-            "et-ee"                   + //  00425 - 1352
-            "eu"                      + //  0002d - 1357
-            "eu-es"                   + //  0042d - 1359
-            "ewo"                     + //  01000 - 1364
-            "ewo-cm"                  + //  01000 - 1367
-            "fa"                      + //  00029 - 1373
-            "fa-ir"                   + //  00429 - 1375
-            "ff"                      + //  00067 - 1380
-            "ff-cm"                   + //  01000 - 1382
-            "ff-gn"                   + //  01000 - 1387
-            "ff-latn"                 + //  07c67 - 1392
-            "ff-latn-sn"              + //  00867 - 1399
-            "ff-mr"                   + //  01000 - 1409
-            "ff-ng"                   + //  00467 - 1414
-            "fi"                      + //  0000b - 1419
-            "fi-fi"                   + //  0040b - 1421
-            "fil"                     + //  00064 - 1426
-            "fil-ph"                  + //  00464 - 1429
-            "fo"                      + //  00038 - 1435
-            "fo-dk"                   + //  01000 - 1437
-            "fo-fo"                   + //  00438 - 1442
-            "fr"                      + //  0000c - 1447
-            "fr-029"                  + //  01c0c - 1449
-            "fr-be"                   + //  0080c - 1455
-            "fr-bf"                   + //  01000 - 1460
-            "fr-bi"                   + //  01000 - 1465
-            "fr-bj"                   + //  01000 - 1470
-            "fr-bl"                   + //  01000 - 1475
-            "fr-ca"                   + //  00c0c - 1480
-            "fr-cd"                   + //  0240c - 1485
-            "fr-cf"                   + //  01000 - 1490
-            "fr-cg"                   + //  01000 - 1495
-            "fr-ch"                   + //  0100c - 1500
-            "fr-ci"                   + //  0300c - 1505
-            "fr-cm"                   + //  02c0c - 1510
-            "fr-dj"                   + //  01000 - 1515
-            "fr-dz"                   + //  01000 - 1520
-            "fr-fr"                   + //  0040c - 1525
-            "fr-ga"                   + //  01000 - 1530
-            "fr-gf"                   + //  01000 - 1535
-            "fr-gn"                   + //  01000 - 1540
-            "fr-gp"                   + //  01000 - 1545
-            "fr-gq"                   + //  01000 - 1550
-            "fr-ht"                   + //  03c0c - 1555
-            "fr-km"                   + //  01000 - 1560
-            "fr-lu"                   + //  0140c - 1565
-            "fr-ma"                   + //  0380c - 1570
-            "fr-mc"                   + //  0180c - 1575
-            "fr-mf"                   + //  01000 - 1580
-            "fr-mg"                   + //  01000 - 1585
-            "fr-ml"                   + //  0340c - 1590
-            "fr-mq"                   + //  01000 - 1595
-            "fr-mr"                   + //  01000 - 1600
-            "fr-mu"                   + //  01000 - 1605
-            "fr-nc"                   + //  01000 - 1610
-            "fr-ne"                   + //  01000 - 1615
-            "fr-pf"                   + //  01000 - 1620
-            "fr-pm"                   + //  01000 - 1625
-            "fr-re"                   + //  0200c - 1630
-            "fr-rw"                   + //  01000 - 1635
-            "fr-sc"                   + //  01000 - 1640
-            "fr-sn"                   + //  0280c - 1645
-            "fr-sy"                   + //  01000 - 1650
-            "fr-td"                   + //  01000 - 1655
-            "fr-tg"                   + //  01000 - 1660
-            "fr-tn"                   + //  01000 - 1665
-            "fr-vu"                   + //  01000 - 1670
-            "fr-wf"                   + //  01000 - 1675
-            "fr-yt"                   + //  01000 - 1680
-            "fur"                     + //  01000 - 1685
-            "fur-it"                  + //  01000 - 1688
-            "fy"                      + //  00062 - 1694
-            "fy-nl"                   + //  00462 - 1696
-            "ga"                      + //  0003c - 1701
-            "ga-ie"                   + //  0083c - 1703
-            "gd"                      + //  00091 - 1708
-            "gd-gb"                   + //  00491 - 1710
-            "gl"                      + //  00056 - 1715
-            "gl-es"                   + //  00456 - 1717
-            "gn"                      + //  00074 - 1722
-            "gn-py"                   + //  00474 - 1724
-            "gsw"                     + //  00084 - 1729
-            "gsw-ch"                  + //  01000 - 1732
-            "gsw-fr"                  + //  00484 - 1738
-            "gsw-li"                  + //  01000 - 1744
-            "gu"                      + //  00047 - 1750
-            "gu-in"                   + //  00447 - 1752
-            "guz"                     + //  01000 - 1757
-            "guz-ke"                  + //  01000 - 1760
-            "gv"                      + //  01000 - 1766
-            "gv-im"                   + //  01000 - 1768
-            "ha"                      + //  00068 - 1773
-            "ha-latn"                 + //  07c68 - 1775
-            "ha-latn-gh"              + //  01000 - 1782
-            "ha-latn-ne"              + //  01000 - 1792
-            "ha-latn-ng"              + //  00468 - 1802
-            "haw"                     + //  00075 - 1812
-            "haw-us"                  + //  00475 - 1815
-            "he"                      + //  0000d - 1821
-            "he-il"                   + //  0040d - 1823
-            "hi"                      + //  00039 - 1828
-            "hi-in"                   + //  00439 - 1830
-            "hr"                      + //  0001a - 1835
-            "hr-ba"                   + //  0101a - 1837
-            "hr-hr"                   + //  0041a - 1842
-            "hsb"                     + //  0002e - 1847
-            "hsb-de"                  + //  0042e - 1850
-            "hu"                      + //  0000e - 1856
-            "hu-hu"                   + //  0040e - 1858
-            "hu-hu_technl"            + //  1040e - 1863
-            "hy"                      + //  0002b - 1875
-            "hy-am"                   + //  0042b - 1877
-            "ia"                      + //  01000 - 1882
-            "ia-001"                  + //  01000 - 1884
-            "ia-fr"                   + //  01000 - 1890
-            "ibb"                     + //  00069 - 1895
-            "ibb-ng"                  + //  00469 - 1898
-            "id"                      + //  00021 - 1904
-            "id-id"                   + //  00421 - 1906
-            "ig"                      + //  00070 - 1911
-            "ig-ng"                   + //  00470 - 1913
-            "ii"                      + //  00078 - 1918
-            "ii-cn"                   + //  00478 - 1920
-            "is"                      + //  0000f - 1925
-            "is-is"                   + //  0040f - 1927
-            "it"                      + //  00010 - 1932
-            "it-ch"                   + //  00810 - 1934
-            "it-it"                   + //  00410 - 1939
-            "it-sm"                   + //  01000 - 1944
-            "iu"                      + //  0005d - 1949
-            "iu-cans"                 + //  0785d - 1951
-            "iu-cans-ca"              + //  0045d - 1958
-            "iu-latn"                 + //  07c5d - 1968
-            "iu-latn-ca"              + //  0085d - 1975
-            "ja"                      + //  00011 - 1985
-            "ja-jp"                   + //  00411 - 1987
-            "ja-jp_radstr"            + //  40411 - 1992
-            "jgo"                     + //  01000 - 2004
-            "jgo-cm"                  + //  01000 - 2007
-            "jmc"                     + //  01000 - 2013
-            "jmc-tz"                  + //  01000 - 2016
-            "jv"                      + //  01000 - 2022
-            "jv-java"                 + //  01000 - 2024
-            "jv-java-id"              + //  01000 - 2031
-            "jv-latn"                 + //  01000 - 2041
-            "jv-latn-id"              + //  01000 - 2048
-            "ka"                      + //  00037 - 2058
-            "ka-ge"                   + //  00437 - 2060
-            "ka-ge_modern"            + //  10437 - 2065
-            "kab"                     + //  01000 - 2077
-            "kab-dz"                  + //  01000 - 2080
-            "kam"                     + //  01000 - 2086
-            "kam-ke"                  + //  01000 - 2089
-            "kde"                     + //  01000 - 2095
-            "kde-tz"                  + //  01000 - 2098
-            "kea"                     + //  01000 - 2104
-            "kea-cv"                  + //  01000 - 2107
-            "khq"                     + //  01000 - 2113
-            "khq-ml"                  + //  01000 - 2116
-            "ki"                      + //  01000 - 2122
-            "ki-ke"                   + //  01000 - 2124
-            "kk"                      + //  0003f - 2129
-            "kk-kz"                   + //  0043f - 2131
-            "kkj"                     + //  01000 - 2136
-            "kkj-cm"                  + //  01000 - 2139
-            "kl"                      + //  0006f - 2145
-            "kl-gl"                   + //  0046f - 2147
-            "kln"                     + //  01000 - 2152
-            "kln-ke"                  + //  01000 - 2155
-            "km"                      + //  00053 - 2161
-            "km-kh"                   + //  00453 - 2163
-            "kn"                      + //  0004b - 2168
-            "kn-in"                   + //  0044b - 2170
-            "ko"                      + //  00012 - 2175
-            "ko-kp"                   + //  01000 - 2177
-            "ko-kr"                   + //  00412 - 2182
-            "kok"                     + //  00057 - 2187
-            "kok-in"                  + //  00457 - 2190
-            "kr"                      + //  00071 - 2196
-            "kr-ng"                   + //  00471 - 2198
-            "ks"                      + //  00060 - 2203
-            "ks-arab"                 + //  00460 - 2205
-            "ks-arab-in"              + //  01000 - 2212
-            "ks-deva"                 + //  01000 - 2222
-            "ks-deva-in"              + //  00860 - 2229
-            "ksb"                     + //  01000 - 2239
-            "ksb-tz"                  + //  01000 - 2242
-            "ksf"                     + //  01000 - 2248
-            "ksf-cm"                  + //  01000 - 2251
-            "ksh"                     + //  01000 - 2257
-            "ksh-de"                  + //  01000 - 2260
-            "ku"                      + //  00092 - 2266
-            "ku-arab"                 + //  07c92 - 2268
-            "ku-arab-iq"              + //  00492 - 2275
-            "ku-arab-ir"              + //  01000 - 2285
-            "kw"                      + //  01000 - 2295
-            "kw-gb"                   + //  01000 - 2297
-            "ky"                      + //  00040 - 2302
-            "ky-kg"                   + //  00440 - 2304
-            "la"                      + //  00076 - 2309
-            "la-001"                  + //  00476 - 2311
-            "lag"                     + //  01000 - 2317
-            "lag-tz"                  + //  01000 - 2320
-            "lb"                      + //  0006e - 2326
-            "lb-lu"                   + //  0046e - 2328
-            "lg"                      + //  01000 - 2333
-            "lg-ug"                   + //  01000 - 2335
-            "lkt"                     + //  01000 - 2340
-            "lkt-us"                  + //  01000 - 2343
-            "ln"                      + //  01000 - 2349
-            "ln-ao"                   + //  01000 - 2351
-            "ln-cd"                   + //  01000 - 2356
-            "ln-cf"                   + //  01000 - 2361
-            "ln-cg"                   + //  01000 - 2366
-            "lo"                      + //  00054 - 2371
-            "lo-la"                   + //  00454 - 2373
-            "lrc-iq"                  + //  01000 - 2378
-            "lrc-ir"                  + //  01000 - 2384
-            "lt"                      + //  00027 - 2390
-            "lt-lt"                   + //  00427 - 2392
-            "lu"                      + //  01000 - 2397
-            "lu-cd"                   + //  01000 - 2399
-            "luo"                     + //  01000 - 2404
-            "luo-ke"                  + //  01000 - 2407
-            "luy"                     + //  01000 - 2413
-            "luy-ke"                  + //  01000 - 2416
-            "lv"                      + //  00026 - 2422
-            "lv-lv"                   + //  00426 - 2424
-            "mas"                     + //  01000 - 2429
-            "mas-ke"                  + //  01000 - 2432
-            "mas-tz"                  + //  01000 - 2438
-            "mer"                     + //  01000 - 2444
-            "mer-ke"                  + //  01000 - 2447
-            "mfe"                     + //  01000 - 2453
-            "mfe-mu"                  + //  01000 - 2456
-            "mg"                      + //  01000 - 2462
-            "mg-mg"                   + //  01000 - 2464
-            "mgh"                     + //  01000 - 2469
-            "mgh-mz"                  + //  01000 - 2472
-            "mgo"                     + //  01000 - 2478
-            "mgo-cm"                  + //  01000 - 2481
-            "mi"                      + //  00081 - 2487
-            "mi-nz"                   + //  00481 - 2489
-            "mk"                      + //  0002f - 2494
-            "mk-mk"                   + //  0042f - 2496
-            "ml"                      + //  0004c - 2501
-            "ml-in"                   + //  0044c - 2503
-            "mn"                      + //  00050 - 2508
-            "mn-cyrl"                 + //  07850 - 2510
-            "mn-mn"                   + //  00450 - 2517
-            "mn-mong"                 + //  07c50 - 2522
-            "mn-mong-cn"              + //  00850 - 2529
-            "mn-mong-mn"              + //  00c50 - 2539
-            "mni"                     + //  00058 - 2549
-            "mni-in"                  + //  00458 - 2552
-            "moh"                     + //  0007c - 2558
-            "moh-ca"                  + //  0047c - 2561
-            "mr"                      + //  0004e - 2567
-            "mr-in"                   + //  0044e - 2569
-            "ms"                      + //  0003e - 2574
-            "ms-bn"                   + //  0083e - 2576
-            "ms-my"                   + //  0043e - 2581
-            "ms-sg"                   + //  01000 - 2586
-            "mt"                      + //  0003a - 2591
-            "mt-mt"                   + //  0043a - 2593
-            "mua"                     + //  01000 - 2598
-            "mua-cm"                  + //  01000 - 2601
-            "my"                      + //  00055 - 2607
-            "my-mm"                   + //  00455 - 2609
-            "mzn-ir"                  + //  01000 - 2614
-            "naq"                     + //  01000 - 2620
-            "naq-na"                  + //  01000 - 2623
-            "nb"                      + //  07c14 - 2629
-            "nb-no"                   + //  00414 - 2631
-            "nb-sj"                   + //  01000 - 2636
-            "nd"                      + //  01000 - 2641
-            "nd-zw"                   + //  01000 - 2643
-            "nds-de"                  + //  01000 - 2648
-            "nds-nl"                  + //  01000 - 2654
-            "ne"                      + //  00061 - 2660
-            "ne-in"                   + //  00861 - 2662
-            "ne-np"                   + //  00461 - 2667
-            "nl"                      + //  00013 - 2672
-            "nl-aw"                   + //  01000 - 2674
-            "nl-be"                   + //  00813 - 2679
-            "nl-bq"                   + //  01000 - 2684
-            "nl-cw"                   + //  01000 - 2689
-            "nl-nl"                   + //  00413 - 2694
-            "nl-sr"                   + //  01000 - 2699
-            "nl-sx"                   + //  01000 - 2704
-            "nmg"                     + //  01000 - 2709
-            "nmg-cm"                  + //  01000 - 2712
-            "nn"                      + //  07814 - 2718
-            "nn-no"                   + //  00814 - 2720
-            "nnh"                     + //  01000 - 2725
-            "nnh-cm"                  + //  01000 - 2728
-            "no"                      + //  00014 - 2734
-            "nqo"                     + //  01000 - 2736
-            "nqo-gn"                  + //  01000 - 2739
-            "nr"                      + //  01000 - 2745
-            "nr-za"                   + //  01000 - 2747
-            "nso"                     + //  0006c - 2752
-            "nso-za"                  + //  0046c - 2755
-            "nus"                     + //  01000 - 2761
-            "nus-ss"                  + //  01000 - 2764
-            "nyn"                     + //  01000 - 2770
-            "nyn-ug"                  + //  01000 - 2773
-            "oc"                      + //  00082 - 2779
-            "oc-fr"                   + //  00482 - 2781
-            "om"                      + //  00072 - 2786
-            "om-et"                   + //  00472 - 2788
-            "om-ke"                   + //  01000 - 2793
-            "or"                      + //  00048 - 2798
-            "or-in"                   + //  00448 - 2800
-            "os"                      + //  01000 - 2805
-            "os-ge"                   + //  01000 - 2807
-            "os-ru"                   + //  01000 - 2812
-            "pa"                      + //  00046 - 2817
-            "pa-arab"                 + //  07c46 - 2819
-            "pa-arab-pk"              + //  00846 - 2826
-            "pa-in"                   + //  00446 - 2836
-            "pap"                     + //  00079 - 2841
-            "pap-029"                 + //  00479 - 2844
-            "pl"                      + //  00015 - 2851
-            "pl-pl"                   + //  00415 - 2853
-            "prg-001"                 + //  01000 - 2858
-            "prs"                     + //  0008c - 2865
-            "prs-af"                  + //  0048c - 2868
-            "ps"                      + //  00063 - 2874
-            "ps-af"                   + //  00463 - 2876
-            "pt"                      + //  00016 - 2881
-            "pt-ao"                   + //  01000 - 2883
-            "pt-br"                   + //  00416 - 2888
-            "pt-ch"                   + //  01000 - 2893
-            "pt-cv"                   + //  01000 - 2898
-            "pt-gq"                   + //  01000 - 2903
-            "pt-gw"                   + //  01000 - 2908
-            "pt-lu"                   + //  01000 - 2913
-            "pt-mo"                   + //  01000 - 2918
-            "pt-mz"                   + //  01000 - 2923
-            "pt-pt"                   + //  00816 - 2928
-            "pt-st"                   + //  01000 - 2933
-            "pt-tl"                   + //  01000 - 2938
-            "qps-latn-x-sh"           + //  00901 - 2943
-            "qps-ploc"                + //  00501 - 2956
-            "qps-ploca"               + //  005fe - 2964
-            "qps-plocm"               + //  009ff - 2973
-            "quc"                     + //  00086 - 2982
-            "quc-latn"                + //  07c86 - 2985
-            "quc-latn-gt"             + //  00486 - 2993
-            "quz"                     + //  0006b - 3004
-            "quz-bo"                  + //  0046b - 3007
-            "quz-ec"                  + //  0086b - 3013
-            "quz-pe"                  + //  00c6b - 3019
-            "rm"                      + //  00017 - 3025
-            "rm-ch"                   + //  00417 - 3027
-            "rn"                      + //  01000 - 3032
-            "rn-bi"                   + //  01000 - 3034
-            "ro"                      + //  00018 - 3039
-            "ro-md"                   + //  00818 - 3041
-            "ro-ro"                   + //  00418 - 3046
-            "rof"                     + //  01000 - 3051
-            "rof-tz"                  + //  01000 - 3054
-            "ru"                      + //  00019 - 3060
-            "ru-by"                   + //  01000 - 3062
-            "ru-kg"                   + //  01000 - 3067
-            "ru-kz"                   + //  01000 - 3072
-            "ru-md"                   + //  00819 - 3077
-            "ru-ru"                   + //  00419 - 3082
-            "ru-ua"                   + //  01000 - 3087
-            "rw"                      + //  00087 - 3092
-            "rw-rw"                   + //  00487 - 3094
-            "rwk"                     + //  01000 - 3099
-            "rwk-tz"                  + //  01000 - 3102
-            "sa"                      + //  0004f - 3108
-            "sa-in"                   + //  0044f - 3110
-            "sah"                     + //  00085 - 3115
-            "sah-ru"                  + //  00485 - 3118
-            "saq"                     + //  01000 - 3124
-            "saq-ke"                  + //  01000 - 3127
-            "sbp"                     + //  01000 - 3133
-            "sbp-tz"                  + //  01000 - 3136
-            "sd"                      + //  00059 - 3142
-            "sd-arab"                 + //  07c59 - 3144
-            "sd-arab-pk"              + //  00859 - 3151
-            "sd-deva"                 + //  01000 - 3161
-            "sd-deva-in"              + //  00459 - 3168
-            "se"                      + //  0003b - 3178
-            "se-fi"                   + //  00c3b - 3180
-            "se-no"                   + //  0043b - 3185
-            "se-se"                   + //  0083b - 3190
-            "seh"                     + //  01000 - 3195
-            "seh-mz"                  + //  01000 - 3198
-            "ses"                     + //  01000 - 3204
-            "ses-ml"                  + //  01000 - 3207
-            "sg"                      + //  01000 - 3213
-            "sg-cf"                   + //  01000 - 3215
-            "shi"                     + //  01000 - 3220
-            "shi-latn"                + //  01000 - 3223
-            "shi-latn-ma"             + //  01000 - 3231
-            "shi-tfng"                + //  01000 - 3242
-            "shi-tfng-ma"             + //  01000 - 3250
-            "si"                      + //  0005b - 3261
-            "si-lk"                   + //  0045b - 3263
-            "sk"                      + //  0001b - 3268
-            "sk-sk"                   + //  0041b - 3270
-            "sl"                      + //  00024 - 3275
-            "sl-si"                   + //  00424 - 3277
-            "sma"                     + //  0783b - 3282
-            "sma-no"                  + //  0183b - 3285
-            "sma-se"                  + //  01c3b - 3291
-            "smj"                     + //  07c3b - 3297
-            "smj-no"                  + //  0103b - 3300
-            "smj-se"                  + //  0143b - 3306
-            "smn"                     + //  0703b - 3312
-            "smn-fi"                  + //  0243b - 3315
-            "sms"                     + //  0743b - 3321
-            "sms-fi"                  + //  0203b - 3324
-            "sn"                      + //  01000 - 3330
-            "sn-latn"                 + //  01000 - 3332
-            "sn-latn-zw"              + //  01000 - 3339
-            "so"                      + //  00077 - 3349
-            "so-dj"                   + //  01000 - 3351
-            "so-et"                   + //  01000 - 3356
-            "so-ke"                   + //  01000 - 3361
-            "so-so"                   + //  00477 - 3366
-            "sq"                      + //  0001c - 3371
-            "sq-al"                   + //  0041c - 3373
-            "sq-mk"                   + //  01000 - 3378
-            "sq-xk"                   + //  01000 - 3383
-            "sr"                      + //  07c1a - 3388
-            "sr-cyrl"                 + //  06c1a - 3390
-            "sr-cyrl-ba"              + //  01c1a - 3397
-            "sr-cyrl-cs"              + //  00c1a - 3407
-            "sr-cyrl-me"              + //  0301a - 3417
-            "sr-cyrl-rs"              + //  0281a - 3427
-            "sr-cyrl-xk"              + //  01000 - 3437
-            "sr-latn"                 + //  0701a - 3447
-            "sr-latn-ba"              + //  0181a - 3454
-            "sr-latn-cs"              + //  0081a - 3464
-            "sr-latn-me"              + //  02c1a - 3474
-            "sr-latn-rs"              + //  0241a - 3484
-            "sr-latn-xk"              + //  01000 - 3494
-            "ss"                      + //  01000 - 3504
-            "ss-sz"                   + //  01000 - 3506
-            "ss-za"                   + //  01000 - 3511
-            "ssy"                     + //  01000 - 3516
-            "ssy-er"                  + //  01000 - 3519
-            "st"                      + //  00030 - 3525
-            "st-ls"                   + //  01000 - 3527
-            "st-za"                   + //  00430 - 3532
-            "sv"                      + //  0001d - 3537
-            "sv-ax"                   + //  01000 - 3539
-            "sv-fi"                   + //  0081d - 3544
-            "sv-se"                   + //  0041d - 3549
-            "sw"                      + //  00041 - 3554
-            "sw-cd"                   + //  01000 - 3556
-            "sw-ke"                   + //  00441 - 3561
-            "sw-tz"                   + //  01000 - 3566
-            "sw-ug"                   + //  01000 - 3571
-            "swc"                     + //  01000 - 3576
-            "swc-cd"                  + //  01000 - 3579
-            "syr"                     + //  0005a - 3585
-            "syr-sy"                  + //  0045a - 3588
-            "ta"                      + //  00049 - 3594
-            "ta-in"                   + //  00449 - 3596
-            "ta-lk"                   + //  00849 - 3601
-            "ta-my"                   + //  01000 - 3606
-            "ta-sg"                   + //  01000 - 3611
-            "te"                      + //  0004a - 3616
-            "te-in"                   + //  0044a - 3618
-            "teo"                     + //  01000 - 3623
-            "teo-ke"                  + //  01000 - 3626
-            "teo-ug"                  + //  01000 - 3632
-            "tg"                      + //  00028 - 3638
-            "tg-cyrl"                 + //  07c28 - 3640
-            "tg-cyrl-tj"              + //  00428 - 3647
-            "th"                      + //  0001e - 3657
-            "th-th"                   + //  0041e - 3659
-            "ti"                      + //  00073 - 3664
-            "ti-er"                   + //  00873 - 3666
-            "ti-et"                   + //  00473 - 3671
-            "tig"                     + //  01000 - 3676
-            "tig-er"                  + //  01000 - 3679
-            "tk"                      + //  00042 - 3685
-            "tk-tm"                   + //  00442 - 3687
-            "tn"                      + //  00032 - 3692
-            "tn-bw"                   + //  00832 - 3694
-            "tn-za"                   + //  00432 - 3699
-            "to"                      + //  01000 - 3704
-            "to-to"                   + //  01000 - 3706
-            "tr"                      + //  0001f - 3711
-            "tr-cy"                   + //  01000 - 3713
-            "tr-tr"                   + //  0041f - 3718
-            "ts"                      + //  00031 - 3723
-            "ts-za"                   + //  00431 - 3725
-            "tt"                      + //  00044 - 3730
-            "tt-ru"                   + //  00444 - 3732
-            "twq"                     + //  01000 - 3737
-            "twq-ne"                  + //  01000 - 3740
-            "tzm"                     + //  0005f - 3746
-            "tzm-arab"                + //  01000 - 3749
-            "tzm-arab-ma"             + //  0045f - 3757
-            "tzm-latn"                + //  07c5f - 3768
-            "tzm-latn-dz"             + //  0085f - 3776
-            "tzm-latn-ma"             + //  01000 - 3787
-            "tzm-tfng"                + //  0785f - 3798
-            "tzm-tfng-ma"             + //  0105f - 3806
-            "ug"                      + //  00080 - 3817
-            "ug-cn"                   + //  00480 - 3819
-            "uk"                      + //  00022 - 3824
-            "uk-ua"                   + //  00422 - 3826
-            "ur"                      + //  00020 - 3831
-            "ur-in"                   + //  00820 - 3833
-            "ur-pk"                   + //  00420 - 3838
-            "uz"                      + //  00043 - 3843
-            "uz-arab"                 + //  01000 - 3845
-            "uz-arab-af"              + //  01000 - 3852
-            "uz-cyrl"                 + //  07843 - 3862
-            "uz-cyrl-uz"              + //  00843 - 3869
-            "uz-latn"                 + //  07c43 - 3879
-            "uz-latn-uz"              + //  00443 - 3886
-            "vai"                     + //  01000 - 3896
-            "vai-latn"                + //  01000 - 3899
-            "vai-latn-lr"             + //  01000 - 3907
-            "vai-vaii"                + //  01000 - 3918
-            "vai-vaii-lr"             + //  01000 - 3926
-            "ve"                      + //  00033 - 3937
-            "ve-za"                   + //  00433 - 3939
-            "vi"                      + //  0002a - 3944
-            "vi-vn"                   + //  0042a - 3946
-            "vo"                      + //  01000 - 3951
-            "vo-001"                  + //  01000 - 3953
-            "vun"                     + //  01000 - 3959
-            "vun-tz"                  + //  01000 - 3962
-            "wae"                     + //  01000 - 3968
-            "wae-ch"                  + //  01000 - 3971
-            "wal"                     + //  01000 - 3977
-            "wal-et"                  + //  01000 - 3980
-            "wo"                      + //  00088 - 3986
-            "wo-sn"                   + //  00488 - 3988
-            "x-iv_mathan"             + //  1007f - 3993
-            "xh"                      + //  00034 - 4004
-            "xh-za"                   + //  00434 - 4006
-            "xog"                     + //  01000 - 4011
-            "xog-ug"                  + //  01000 - 4014
-            "yav"                     + //  01000 - 4020
-            "yav-cm"                  + //  01000 - 4023
-            "yi"                      + //  0003d - 4029
-            "yi-001"                  + //  0043d - 4031
-            "yo"                      + //  0006a - 4037
-            "yo-bj"                   + //  01000 - 4039
-            "yo-ng"                   + //  0046a - 4044
-            "yue-hk"                  + //  01000 - 4049
-            "zgh"                     + //  01000 - 4055
-            "zgh-tfng"                + //  01000 - 4058
-            "zgh-tfng-ma"             + //  01000 - 4066
-            "zh"                      + //  07804 - 4077
-            "zh-chs"                  + //  00004 - 4079
-            "zh-cht"                  + //  07c04 - 4085
-            "zh-cn"                   + //  00804 - 4091
-            "zh-cn_phoneb"            + //  50804 - 4096
-            "zh-cn_stroke"            + //  20804 - 4108
-            "zh-hans"                 + //  00004 - 4120
-            "zh-hans-hk"              + //  01000 - 4127
-            "zh-hans-mo"              + //  01000 - 4137
-            "zh-hant"                 + //  07c04 - 4147
-            "zh-hk"                   + //  00c04 - 4154
-            "zh-hk_radstr"            + //  40c04 - 4159
-            "zh-mo"                   + //  01404 - 4171
-            "zh-mo_radstr"            + //  41404 - 4176
-            "zh-mo_stroke"            + //  21404 - 4188
-            "zh-sg"                   + //  01004 - 4200
-            "zh-sg_phoneb"            + //  51004 - 4205
-            "zh-sg_stroke"            + //  21004 - 4217
-            "zh-tw"                   + //  00404 - 4229
-            "zh-tw_pronun"            + //  30404 - 4234
-            "zh-tw_radstr"            + //  40404 - 4246
-            "zu"                      + //  00035 - 4258
-            "zu-za";                    //  00435 - 4260
-        
-        // s_localeNamesIndices contains the start index of every culture name in the string
-        // s_localeNames. We infer the length of each string by looking at the start index
-        // of the next string.
-        private static readonly int[] s_localeNamesIndices = new int[]
-        {
-            // c_localeNames index, // index to this array - culture name
-            0   , // 0    - aa
-            2   , // 1    - aa-dj
-            7   , // 2    - aa-er
-            12  , // 3    - aa-et
-            17  , // 4    - af
-            19  , // 5    - af-na
-            24  , // 6    - af-za
-            29  , // 7    - agq
-            32  , // 8    - agq-cm
-            38  , // 9    - ak
-            40  , // 10   - ak-gh
-            45  , // 11   - am
-            47  , // 12   - am-et
-            52  , // 13   - ar
-            54  , // 14   - ar-001
-            60  , // 15   - ar-ae
-            65  , // 16   - ar-bh
-            70  , // 17   - ar-dj
-            75  , // 18   - ar-dz
-            80  , // 19   - ar-eg
-            85  , // 20   - ar-er
-            90  , // 21   - ar-il
-            95  , // 22   - ar-iq
-            100 , // 23   - ar-jo
-            105 , // 24   - ar-km
-            110 , // 25   - ar-kw
-            115 , // 26   - ar-lb
-            120 , // 27   - ar-ly
-            125 , // 28   - ar-ma
-            130 , // 29   - ar-mr
-            135 , // 30   - ar-om
-            140 , // 31   - ar-ps
-            145 , // 32   - ar-qa
-            150 , // 33   - ar-sa
-            155 , // 34   - ar-sd
-            160 , // 35   - ar-so
-            165 , // 36   - ar-ss
-            170 , // 37   - ar-sy
-            175 , // 38   - ar-td
-            180 , // 39   - ar-tn
-            185 , // 40   - ar-ye
-            190 , // 41   - arn
-            193 , // 42   - arn-cl
-            199 , // 43   - as
-            201 , // 44   - as-in
-            206 , // 45   - asa
-            209 , // 46   - asa-tz
-            215 , // 47   - ast
-            218 , // 48   - ast-es
-            224 , // 49   - az
-            226 , // 50   - az-cyrl
-            233 , // 51   - az-cyrl-az
-            243 , // 52   - az-latn
-            250 , // 53   - az-latn-az
-            260 , // 54   - ba
-            262 , // 55   - ba-ru
-            267 , // 56   - bas
-            270 , // 57   - bas-cm
-            276 , // 58   - be
-            278 , // 59   - be-by
-            283 , // 60   - bem
-            286 , // 61   - bem-zm
-            292 , // 62   - bez
-            295 , // 63   - bez-tz
-            301 , // 64   - bg
-            303 , // 65   - bg-bg
-            308 , // 66   - bin
-            311 , // 67   - bin-ng
-            317 , // 68   - bm
-            319 , // 69   - bm-latn
-            326 , // 70   - bm-latn-ml
-            336 , // 71   - bn
-            338 , // 72   - bn-bd
-            343 , // 73   - bn-in
-            348 , // 74   - bo
-            350 , // 75   - bo-cn
-            355 , // 76   - bo-in
-            360 , // 77   - br
-            362 , // 78   - br-fr
-            367 , // 79   - brx
-            370 , // 80   - brx-in
-            376 , // 81   - bs
-            378 , // 82   - bs-cyrl
-            385 , // 83   - bs-cyrl-ba
-            395 , // 84   - bs-latn
-            402 , // 85   - bs-latn-ba
-            412 , // 86   - byn
-            415 , // 87   - byn-er
-            421 , // 88   - ca
-            423 , // 89   - ca-ad
-            428 , // 90   - ca-es
-            433 , // 91   - ca-es-valencia
-            447 , // 92   - ca-fr
-            452 , // 93   - ca-it
-            457 , // 94   - ce-ru
-            462 , // 95   - cgg
-            465 , // 96   - cgg-ug
-            471 , // 97   - chr
-            474 , // 98   - chr-cher
-            482 , // 99   - chr-cher-us
-            493 , // 100  - co
-            495 , // 101  - co-fr
-            500 , // 102  - cs
-            502 , // 103  - cs-cz
-            507 , // 104  - cu-ru
-            512 , // 105  - cy
-            514 , // 106  - cy-gb
-            519 , // 107  - da
-            521 , // 108  - da-dk
-            526 , // 109  - da-gl
-            531 , // 110  - dav
-            534 , // 111  - dav-ke
-            540 , // 112  - de
-            542 , // 113  - de-at
-            547 , // 114  - de-be
-            552 , // 115  - de-ch
-            557 , // 116  - de-de
-            562 , // 117  - de-de_phoneb
-            574 , // 118  - de-it
-            579 , // 119  - de-li
-            584 , // 120  - de-lu
-            589 , // 121  - dje
-            592 , // 122  - dje-ne
-            598 , // 123  - dsb
-            601 , // 124  - dsb-de
-            607 , // 125  - dua
-            610 , // 126  - dua-cm
-            616 , // 127  - dv
-            618 , // 128  - dv-mv
-            623 , // 129  - dyo
-            626 , // 130  - dyo-sn
-            632 , // 131  - dz
-            634 , // 132  - dz-bt
-            639 , // 133  - ebu
-            642 , // 134  - ebu-ke
-            648 , // 135  - ee
-            650 , // 136  - ee-gh
-            655 , // 137  - ee-tg
-            660 , // 138  - el
-            662 , // 139  - el-cy
-            667 , // 140  - el-gr
-            672 , // 141  - en
-            674 , // 142  - en-001
-            680 , // 143  - en-029
-            686 , // 144  - en-150
-            692 , // 145  - en-ag
-            697 , // 146  - en-ai
-            702 , // 147  - en-as
-            707 , // 148  - en-at
-            712 , // 149  - en-au
-            717 , // 150  - en-bb
-            722 , // 151  - en-be
-            727 , // 152  - en-bi
-            732 , // 153  - en-bm
-            737 , // 154  - en-bs
-            742 , // 155  - en-bw
-            747 , // 156  - en-bz
-            752 , // 157  - en-ca
-            757 , // 158  - en-cc
-            762 , // 159  - en-ch
-            767 , // 160  - en-ck
-            772 , // 161  - en-cm
-            777 , // 162  - en-cx
-            782 , // 163  - en-cy
-            787 , // 164  - en-de
-            792 , // 165  - en-dk
-            797 , // 166  - en-dm
-            802 , // 167  - en-er
-            807 , // 168  - en-fi
-            812 , // 169  - en-fj
-            817 , // 170  - en-fk
-            822 , // 171  - en-fm
-            827 , // 172  - en-gb
-            832 , // 173  - en-gd
-            837 , // 174  - en-gg
-            842 , // 175  - en-gh
-            847 , // 176  - en-gi
-            852 , // 177  - en-gm
-            857 , // 178  - en-gu
-            862 , // 179  - en-gy
-            867 , // 180  - en-hk
-            872 , // 181  - en-id
-            877 , // 182  - en-ie
-            882 , // 183  - en-il
-            887 , // 184  - en-im
-            892 , // 185  - en-in
-            897 , // 186  - en-io
-            902 , // 187  - en-je
-            907 , // 188  - en-jm
-            912 , // 189  - en-ke
-            917 , // 190  - en-ki
-            922 , // 191  - en-kn
-            927 , // 192  - en-ky
-            932 , // 193  - en-lc
-            937 , // 194  - en-lr
-            942 , // 195  - en-ls
-            947 , // 196  - en-mg
-            952 , // 197  - en-mh
-            957 , // 198  - en-mo
-            962 , // 199  - en-mp
-            967 , // 200  - en-ms
-            972 , // 201  - en-mt
-            977 , // 202  - en-mu
-            982 , // 203  - en-mw
-            987 , // 204  - en-my
-            992 , // 205  - en-na
-            997 , // 206  - en-nf
-            1002, // 207  - en-ng
-            1007, // 208  - en-nl
-            1012, // 209  - en-nr
-            1017, // 210  - en-nu
-            1022, // 211  - en-nz
-            1027, // 212  - en-pg
-            1032, // 213  - en-ph
-            1037, // 214  - en-pk
-            1042, // 215  - en-pn
-            1047, // 216  - en-pr
-            1052, // 217  - en-pw
-            1057, // 218  - en-rw
-            1062, // 219  - en-sb
-            1067, // 220  - en-sc
-            1072, // 221  - en-sd
-            1077, // 222  - en-se
-            1082, // 223  - en-sg
-            1087, // 224  - en-sh
-            1092, // 225  - en-si
-            1097, // 226  - en-sl
-            1102, // 227  - en-ss
-            1107, // 228  - en-sx
-            1112, // 229  - en-sz
-            1117, // 230  - en-tc
-            1122, // 231  - en-tk
-            1127, // 232  - en-to
-            1132, // 233  - en-tt
-            1137, // 234  - en-tv
-            1142, // 235  - en-tz
-            1147, // 236  - en-ug
-            1152, // 237  - en-um
-            1157, // 238  - en-us
-            1162, // 239  - en-vc
-            1167, // 240  - en-vg
-            1172, // 241  - en-vi
-            1177, // 242  - en-vu
-            1182, // 243  - en-ws
-            1187, // 244  - en-za
-            1192, // 245  - en-zm
-            1197, // 246  - en-zw
-            1202, // 247  - eo
-            1204, // 248  - eo-001
-            1210, // 249  - es
-            1212, // 250  - es-419
-            1218, // 251  - es-ar
-            1223, // 252  - es-bo
-            1228, // 253  - es-br
-            1233, // 254  - es-cl
-            1238, // 255  - es-co
-            1243, // 256  - es-cr
-            1248, // 257  - es-cu
-            1253, // 258  - es-do
-            1258, // 259  - es-ec
-            1263, // 260  - es-es
-            1268, // 261  - es-es_tradnl
-            1280, // 262  - es-gq
-            1285, // 263  - es-gt
-            1290, // 264  - es-hn
-            1295, // 265  - es-mx
-            1300, // 266  - es-ni
-            1305, // 267  - es-pa
-            1310, // 268  - es-pe
-            1315, // 269  - es-ph
-            1320, // 270  - es-pr
-            1325, // 271  - es-py
-            1330, // 272  - es-sv
-            1335, // 273  - es-us
-            1340, // 274  - es-uy
-            1345, // 275  - es-ve
-            1350, // 276  - et
-            1352, // 277  - et-ee
-            1357, // 278  - eu
-            1359, // 279  - eu-es
-            1364, // 280  - ewo
-            1367, // 281  - ewo-cm
-            1373, // 282  - fa
-            1375, // 283  - fa-ir
-            1380, // 284  - ff
-            1382, // 285  - ff-cm
-            1387, // 286  - ff-gn
-            1392, // 287  - ff-latn
-            1399, // 288  - ff-latn-sn
-            1409, // 289  - ff-mr
-            1414, // 290  - ff-ng
-            1419, // 291  - fi
-            1421, // 292  - fi-fi
-            1426, // 293  - fil
-            1429, // 294  - fil-ph
-            1435, // 295  - fo
-            1437, // 296  - fo-dk
-            1442, // 297  - fo-fo
-            1447, // 298  - fr
-            1449, // 299  - fr-029
-            1455, // 300  - fr-be
-            1460, // 301  - fr-bf
-            1465, // 302  - fr-bi
-            1470, // 303  - fr-bj
-            1475, // 304  - fr-bl
-            1480, // 305  - fr-ca
-            1485, // 306  - fr-cd
-            1490, // 307  - fr-cf
-            1495, // 308  - fr-cg
-            1500, // 309  - fr-ch
-            1505, // 310  - fr-ci
-            1510, // 311  - fr-cm
-            1515, // 312  - fr-dj
-            1520, // 313  - fr-dz
-            1525, // 314  - fr-fr
-            1530, // 315  - fr-ga
-            1535, // 316  - fr-gf
-            1540, // 317  - fr-gn
-            1545, // 318  - fr-gp
-            1550, // 319  - fr-gq
-            1555, // 320  - fr-ht
-            1560, // 321  - fr-km
-            1565, // 322  - fr-lu
-            1570, // 323  - fr-ma
-            1575, // 324  - fr-mc
-            1580, // 325  - fr-mf
-            1585, // 326  - fr-mg
-            1590, // 327  - fr-ml
-            1595, // 328  - fr-mq
-            1600, // 329  - fr-mr
-            1605, // 330  - fr-mu
-            1610, // 331  - fr-nc
-            1615, // 332  - fr-ne
-            1620, // 333  - fr-pf
-            1625, // 334  - fr-pm
-            1630, // 335  - fr-re
-            1635, // 336  - fr-rw
-            1640, // 337  - fr-sc
-            1645, // 338  - fr-sn
-            1650, // 339  - fr-sy
-            1655, // 340  - fr-td
-            1660, // 341  - fr-tg
-            1665, // 342  - fr-tn
-            1670, // 343  - fr-vu
-            1675, // 344  - fr-wf
-            1680, // 345  - fr-yt
-            1685, // 346  - fur
-            1688, // 347  - fur-it
-            1694, // 348  - fy
-            1696, // 349  - fy-nl
-            1701, // 350  - ga
-            1703, // 351  - ga-ie
-            1708, // 352  - gd
-            1710, // 353  - gd-gb
-            1715, // 354  - gl
-            1717, // 355  - gl-es
-            1722, // 356  - gn
-            1724, // 357  - gn-py
-            1729, // 358  - gsw
-            1732, // 359  - gsw-ch
-            1738, // 360  - gsw-fr
-            1744, // 361  - gsw-li
-            1750, // 362  - gu
-            1752, // 363  - gu-in
-            1757, // 364  - guz
-            1760, // 365  - guz-ke
-            1766, // 366  - gv
-            1768, // 367  - gv-im
-            1773, // 368  - ha
-            1775, // 369  - ha-latn
-            1782, // 370  - ha-latn-gh
-            1792, // 371  - ha-latn-ne
-            1802, // 372  - ha-latn-ng
-            1812, // 373  - haw
-            1815, // 374  - haw-us
-            1821, // 375  - he
-            1823, // 376  - he-il
-            1828, // 377  - hi
-            1830, // 378  - hi-in
-            1835, // 379  - hr
-            1837, // 380  - hr-ba
-            1842, // 381  - hr-hr
-            1847, // 382  - hsb
-            1850, // 383  - hsb-de
-            1856, // 384  - hu
-            1858, // 385  - hu-hu
-            1863, // 386  - hu-hu_technl
-            1875, // 387  - hy
-            1877, // 388  - hy-am
-            1882, // 389  - ia
-            1884, // 390  - ia-001
-            1890, // 391  - ia-fr
-            1895, // 392  - ibb
-            1898, // 393  - ibb-ng
-            1904, // 394  - id
-            1906, // 395  - id-id
-            1911, // 396  - ig
-            1913, // 397  - ig-ng
-            1918, // 398  - ii
-            1920, // 399  - ii-cn
-            1925, // 400  - is
-            1927, // 401  - is-is
-            1932, // 402  - it
-            1934, // 403  - it-ch
-            1939, // 404  - it-it
-            1944, // 405  - it-sm
-            1949, // 406  - iu
-            1951, // 407  - iu-cans
-            1958, // 408  - iu-cans-ca
-            1968, // 409  - iu-latn
-            1975, // 410  - iu-latn-ca
-            1985, // 411  - ja
-            1987, // 412  - ja-jp
-            1992, // 413  - ja-jp_radstr
-            2004, // 414  - jgo
-            2007, // 415  - jgo-cm
-            2013, // 416  - jmc
-            2016, // 417  - jmc-tz
-            2022, // 418  - jv
-            2024, // 419  - jv-java
-            2031, // 420  - jv-java-id
-            2041, // 421  - jv-latn
-            2048, // 422  - jv-latn-id
-            2058, // 423  - ka
-            2060, // 424  - ka-ge
-            2065, // 425  - ka-ge_modern
-            2077, // 426  - kab
-            2080, // 427  - kab-dz
-            2086, // 428  - kam
-            2089, // 429  - kam-ke
-            2095, // 430  - kde
-            2098, // 431  - kde-tz
-            2104, // 432  - kea
-            2107, // 433  - kea-cv
-            2113, // 434  - khq
-            2116, // 435  - khq-ml
-            2122, // 436  - ki
-            2124, // 437  - ki-ke
-            2129, // 438  - kk
-            2131, // 439  - kk-kz
-            2136, // 440  - kkj
-            2139, // 441  - kkj-cm
-            2145, // 442  - kl
-            2147, // 443  - kl-gl
-            2152, // 444  - kln
-            2155, // 445  - kln-ke
-            2161, // 446  - km
-            2163, // 447  - km-kh
-            2168, // 448  - kn
-            2170, // 449  - kn-in
-            2175, // 450  - ko
-            2177, // 451  - ko-kp
-            2182, // 452  - ko-kr
-            2187, // 453  - kok
-            2190, // 454  - kok-in
-            2196, // 455  - kr
-            2198, // 456  - kr-ng
-            2203, // 457  - ks
-            2205, // 458  - ks-arab
-            2212, // 459  - ks-arab-in
-            2222, // 460  - ks-deva
-            2229, // 461  - ks-deva-in
-            2239, // 462  - ksb
-            2242, // 463  - ksb-tz
-            2248, // 464  - ksf
-            2251, // 465  - ksf-cm
-            2257, // 466  - ksh
-            2260, // 467  - ksh-de
-            2266, // 468  - ku
-            2268, // 469  - ku-arab
-            2275, // 470  - ku-arab-iq
-            2285, // 471  - ku-arab-ir
-            2295, // 472  - kw
-            2297, // 473  - kw-gb
-            2302, // 474  - ky
-            2304, // 475  - ky-kg
-            2309, // 476  - la
-            2311, // 477  - la-001
-            2317, // 478  - lag
-            2320, // 479  - lag-tz
-            2326, // 480  - lb
-            2328, // 481  - lb-lu
-            2333, // 482  - lg
-            2335, // 483  - lg-ug
-            2340, // 484  - lkt
-            2343, // 485  - lkt-us
-            2349, // 486  - ln
-            2351, // 487  - ln-ao
-            2356, // 488  - ln-cd
-            2361, // 489  - ln-cf
-            2366, // 490  - ln-cg
-            2371, // 491  - lo
-            2373, // 492  - lo-la
-            2378, // 493  - lrc-iq
-            2384, // 494  - lrc-ir
-            2390, // 495  - lt
-            2392, // 496  - lt-lt
-            2397, // 497  - lu
-            2399, // 498  - lu-cd
-            2404, // 499  - luo
-            2407, // 500  - luo-ke
-            2413, // 501  - luy
-            2416, // 502  - luy-ke
-            2422, // 503  - lv
-            2424, // 504  - lv-lv
-            2429, // 505  - mas
-            2432, // 506  - mas-ke
-            2438, // 507  - mas-tz
-            2444, // 508  - mer
-            2447, // 509  - mer-ke
-            2453, // 510  - mfe
-            2456, // 511  - mfe-mu
-            2462, // 512  - mg
-            2464, // 513  - mg-mg
-            2469, // 514  - mgh
-            2472, // 515  - mgh-mz
-            2478, // 516  - mgo
-            2481, // 517  - mgo-cm
-            2487, // 518  - mi
-            2489, // 519  - mi-nz
-            2494, // 520  - mk
-            2496, // 521  - mk-mk
-            2501, // 522  - ml
-            2503, // 523  - ml-in
-            2508, // 524  - mn
-            2510, // 525  - mn-cyrl
-            2517, // 526  - mn-mn
-            2522, // 527  - mn-mong
-            2529, // 528  - mn-mong-cn
-            2539, // 529  - mn-mong-mn
-            2549, // 530  - mni
-            2552, // 531  - mni-in
-            2558, // 532  - moh
-            2561, // 533  - moh-ca
-            2567, // 534  - mr
-            2569, // 535  - mr-in
-            2574, // 536  - ms
-            2576, // 537  - ms-bn
-            2581, // 538  - ms-my
-            2586, // 539  - ms-sg
-            2591, // 540  - mt
-            2593, // 541  - mt-mt
-            2598, // 542  - mua
-            2601, // 543  - mua-cm
-            2607, // 544  - my
-            2609, // 545  - my-mm
-            2614, // 546  - mzn-ir
-            2620, // 547  - naq
-            2623, // 548  - naq-na
-            2629, // 549  - nb
-            2631, // 550  - nb-no
-            2636, // 551  - nb-sj
-            2641, // 552  - nd
-            2643, // 553  - nd-zw
-            2648, // 554  - nds-de
-            2654, // 555  - nds-nl
-            2660, // 556  - ne
-            2662, // 557  - ne-in
-            2667, // 558  - ne-np
-            2672, // 559  - nl
-            2674, // 560  - nl-aw
-            2679, // 561  - nl-be
-            2684, // 562  - nl-bq
-            2689, // 563  - nl-cw
-            2694, // 564  - nl-nl
-            2699, // 565  - nl-sr
-            2704, // 566  - nl-sx
-            2709, // 567  - nmg
-            2712, // 568  - nmg-cm
-            2718, // 569  - nn
-            2720, // 570  - nn-no
-            2725, // 571  - nnh
-            2728, // 572  - nnh-cm
-            2734, // 573  - no
-            2736, // 574  - nqo
-            2739, // 575  - nqo-gn
-            2745, // 576  - nr
-            2747, // 577  - nr-za
-            2752, // 578  - nso
-            2755, // 579  - nso-za
-            2761, // 580  - nus
-            2764, // 581  - nus-ss
-            2770, // 582  - nyn
-            2773, // 583  - nyn-ug
-            2779, // 584  - oc
-            2781, // 585  - oc-fr
-            2786, // 586  - om
-            2788, // 587  - om-et
-            2793, // 588  - om-ke
-            2798, // 589  - or
-            2800, // 590  - or-in
-            2805, // 591  - os
-            2807, // 592  - os-ge
-            2812, // 593  - os-ru
-            2817, // 594  - pa
-            2819, // 595  - pa-arab
-            2826, // 596  - pa-arab-pk
-            2836, // 597  - pa-in
-            2841, // 598  - pap
-            2844, // 599  - pap-029
-            2851, // 600  - pl
-            2853, // 601  - pl-pl
-            2858, // 602  - prg-001
-            2865, // 603  - prs
-            2868, // 604  - prs-af
-            2874, // 605  - ps
-            2876, // 606  - ps-af
-            2881, // 607  - pt
-            2883, // 608  - pt-ao
-            2888, // 609  - pt-br
-            2893, // 610  - pt-ch
-            2898, // 611  - pt-cv
-            2903, // 612  - pt-gq
-            2908, // 613  - pt-gw
-            2913, // 614  - pt-lu
-            2918, // 615  - pt-mo
-            2923, // 616  - pt-mz
-            2928, // 617  - pt-pt
-            2933, // 618  - pt-st
-            2938, // 619  - pt-tl
-            2943, // 620  - qps-latn-x-sh
-            2956, // 621  - qps-ploc
-            2964, // 622  - qps-ploca
-            2973, // 623  - qps-plocm
-            2982, // 624  - quc
-            2985, // 625  - quc-latn
-            2993, // 626  - quc-latn-gt
-            3004, // 627  - quz
-            3007, // 628  - quz-bo
-            3013, // 629  - quz-ec
-            3019, // 630  - quz-pe
-            3025, // 631  - rm
-            3027, // 632  - rm-ch
-            3032, // 633  - rn
-            3034, // 634  - rn-bi
-            3039, // 635  - ro
-            3041, // 636  - ro-md
-            3046, // 637  - ro-ro
-            3051, // 638  - rof
-            3054, // 639  - rof-tz
-            3060, // 640  - ru
-            3062, // 641  - ru-by
-            3067, // 642  - ru-kg
-            3072, // 643  - ru-kz
-            3077, // 644  - ru-md
-            3082, // 645  - ru-ru
-            3087, // 646  - ru-ua
-            3092, // 647  - rw
-            3094, // 648  - rw-rw
-            3099, // 649  - rwk
-            3102, // 650  - rwk-tz
-            3108, // 651  - sa
-            3110, // 652  - sa-in
-            3115, // 653  - sah
-            3118, // 654  - sah-ru
-            3124, // 655  - saq
-            3127, // 656  - saq-ke
-            3133, // 657  - sbp
-            3136, // 658  - sbp-tz
-            3142, // 659  - sd
-            3144, // 660  - sd-arab
-            3151, // 661  - sd-arab-pk
-            3161, // 662  - sd-deva
-            3168, // 663  - sd-deva-in
-            3178, // 664  - se
-            3180, // 665  - se-fi
-            3185, // 666  - se-no
-            3190, // 667  - se-se
-            3195, // 668  - seh
-            3198, // 669  - seh-mz
-            3204, // 670  - ses
-            3207, // 671  - ses-ml
-            3213, // 672  - sg
-            3215, // 673  - sg-cf
-            3220, // 674  - shi
-            3223, // 675  - shi-latn
-            3231, // 676  - shi-latn-ma
-            3242, // 677  - shi-tfng
-            3250, // 678  - shi-tfng-ma
-            3261, // 679  - si
-            3263, // 680  - si-lk
-            3268, // 681  - sk
-            3270, // 682  - sk-sk
-            3275, // 683  - sl
-            3277, // 684  - sl-si
-            3282, // 685  - sma
-            3285, // 686  - sma-no
-            3291, // 687  - sma-se
-            3297, // 688  - smj
-            3300, // 689  - smj-no
-            3306, // 690  - smj-se
-            3312, // 691  - smn
-            3315, // 692  - smn-fi
-            3321, // 693  - sms
-            3324, // 694  - sms-fi
-            3330, // 695  - sn
-            3332, // 696  - sn-latn
-            3339, // 697  - sn-latn-zw
-            3349, // 698  - so
-            3351, // 699  - so-dj
-            3356, // 700  - so-et
-            3361, // 701  - so-ke
-            3366, // 702  - so-so
-            3371, // 703  - sq
-            3373, // 704  - sq-al
-            3378, // 705  - sq-mk
-            3383, // 706  - sq-xk
-            3388, // 707  - sr
-            3390, // 708  - sr-cyrl
-            3397, // 709  - sr-cyrl-ba
-            3407, // 710  - sr-cyrl-cs
-            3417, // 711  - sr-cyrl-me
-            3427, // 712  - sr-cyrl-rs
-            3437, // 713  - sr-cyrl-xk
-            3447, // 714  - sr-latn
-            3454, // 715  - sr-latn-ba
-            3464, // 716  - sr-latn-cs
-            3474, // 717  - sr-latn-me
-            3484, // 718  - sr-latn-rs
-            3494, // 719  - sr-latn-xk
-            3504, // 720  - ss
-            3506, // 721  - ss-sz
-            3511, // 722  - ss-za
-            3516, // 723  - ssy
-            3519, // 724  - ssy-er
-            3525, // 725  - st
-            3527, // 726  - st-ls
-            3532, // 727  - st-za
-            3537, // 728  - sv
-            3539, // 729  - sv-ax
-            3544, // 730  - sv-fi
-            3549, // 731  - sv-se
-            3554, // 732  - sw
-            3556, // 733  - sw-cd
-            3561, // 734  - sw-ke
-            3566, // 735  - sw-tz
-            3571, // 736  - sw-ug
-            3576, // 737  - swc
-            3579, // 738  - swc-cd
-            3585, // 739  - syr
-            3588, // 740  - syr-sy
-            3594, // 741  - ta
-            3596, // 742  - ta-in
-            3601, // 743  - ta-lk
-            3606, // 744  - ta-my
-            3611, // 745  - ta-sg
-            3616, // 746  - te
-            3618, // 747  - te-in
-            3623, // 748  - teo
-            3626, // 749  - teo-ke
-            3632, // 750  - teo-ug
-            3638, // 751  - tg
-            3640, // 752  - tg-cyrl
-            3647, // 753  - tg-cyrl-tj
-            3657, // 754  - th
-            3659, // 755  - th-th
-            3664, // 756  - ti
-            3666, // 757  - ti-er
-            3671, // 758  - ti-et
-            3676, // 759  - tig
-            3679, // 760  - tig-er
-            3685, // 761  - tk
-            3687, // 762  - tk-tm
-            3692, // 763  - tn
-            3694, // 764  - tn-bw
-            3699, // 765  - tn-za
-            3704, // 766  - to
-            3706, // 767  - to-to
-            3711, // 768  - tr
-            3713, // 769  - tr-cy
-            3718, // 770  - tr-tr
-            3723, // 771  - ts
-            3725, // 772  - ts-za
-            3730, // 773  - tt
-            3732, // 774  - tt-ru
-            3737, // 775  - twq
-            3740, // 776  - twq-ne
-            3746, // 777  - tzm
-            3749, // 778  - tzm-arab
-            3757, // 779  - tzm-arab-ma
-            3768, // 780  - tzm-latn
-            3776, // 781  - tzm-latn-dz
-            3787, // 782  - tzm-latn-ma
-            3798, // 783  - tzm-tfng
-            3806, // 784  - tzm-tfng-ma
-            3817, // 785  - ug
-            3819, // 786  - ug-cn
-            3824, // 787  - uk
-            3826, // 788  - uk-ua
-            3831, // 789  - ur
-            3833, // 790  - ur-in
-            3838, // 791  - ur-pk
-            3843, // 792  - uz
-            3845, // 793  - uz-arab
-            3852, // 794  - uz-arab-af
-            3862, // 795  - uz-cyrl
-            3869, // 796  - uz-cyrl-uz
-            3879, // 797  - uz-latn
-            3886, // 798  - uz-latn-uz
-            3896, // 799  - vai
-            3899, // 800  - vai-latn
-            3907, // 801  - vai-latn-lr
-            3918, // 802  - vai-vaii
-            3926, // 803  - vai-vaii-lr
-            3937, // 804  - ve
-            3939, // 805  - ve-za
-            3944, // 806  - vi
-            3946, // 807  - vi-vn
-            3951, // 808  - vo
-            3953, // 809  - vo-001
-            3959, // 810  - vun
-            3962, // 811  - vun-tz
-            3968, // 812  - wae
-            3971, // 813  - wae-ch
-            3977, // 814  - wal
-            3980, // 815  - wal-et
-            3986, // 816  - wo
-            3988, // 817  - wo-sn
-            3993, // 818  - x-iv_mathan
-            4004, // 819  - xh
-            4006, // 820  - xh-za
-            4011, // 821  - xog
-            4014, // 822  - xog-ug
-            4020, // 823  - yav
-            4023, // 824  - yav-cm
-            4029, // 825  - yi
-            4031, // 826  - yi-001
-            4037, // 827  - yo
-            4039, // 828  - yo-bj
-            4044, // 829  - yo-ng
-            4049, // 830  - yue-hk
-            4055, // 831  - zgh
-            4058, // 832  - zgh-tfng
-            4066, // 833  - zgh-tfng-ma
-            4077, // 834  - zh
-            4079, // 835  - zh-chs
-            4085, // 836  - zh-cht
-            4091, // 837  - zh-cn
-            4096, // 838  - zh-cn_phoneb
-            4108, // 839  - zh-cn_stroke
-            4120, // 840  - zh-hans
-            4127, // 841  - zh-hans-hk
-            4137, // 842  - zh-hans-mo
-            4147, // 843  - zh-hant
-            4154, // 844  - zh-hk
-            4159, // 845  - zh-hk_radstr
-            4171, // 846  - zh-mo
-            4176, // 847  - zh-mo_radstr
-            4188, // 848  - zh-mo_stroke
-            4200, // 849  - zh-sg
-            4205, // 850  - zh-sg_phoneb
-            4217, // 851  - zh-sg_stroke
-            4229, // 852  - zh-tw
-            4234, // 853  - zh-tw_pronun
-            4246, // 854  - zh-tw_radstr
-            4258, // 855  - zu
-            4260, // 856  - zu-za
-            4265, // 857  -
-        };
-        
-        // s_nameIndexTolcids is mapping from index in s_localeNamesIndices to lcid
-        private static readonly int[] s_nameIndexTolcids = new int[]
-        {
-            // Lcid, index   - locale name 
-            0x1000 , // 0    - aa
-            0x1000 , // 1    - aa-dj
-            0x1000 , // 2    - aa-er
-            0x1000 , // 3    - aa-et
-            0x36   , // 4    - af
-            0x1000 , // 5    - af-na
-            0x436  , // 6    - af-za
-            0x1000 , // 7    - agq
-            0x1000 , // 8    - agq-cm
-            0x1000 , // 9    - ak
-            0x1000 , // 10   - ak-gh
-            0x5e   , // 11   - am
-            0x45e  , // 12   - am-et
-            0x1    , // 13   - ar
-            0x1000 , // 14   - ar-001
-            0x3801 , // 15   - ar-ae
-            0x3c01 , // 16   - ar-bh
-            0x1000 , // 17   - ar-dj
-            0x1401 , // 18   - ar-dz
-            0xc01  , // 19   - ar-eg
-            0x1000 , // 20   - ar-er
-            0x1000 , // 21   - ar-il
-            0x801  , // 22   - ar-iq
-            0x2c01 , // 23   - ar-jo
-            0x1000 , // 24   - ar-km
-            0x3401 , // 25   - ar-kw
-            0x3001 , // 26   - ar-lb
-            0x1001 , // 27   - ar-ly
-            0x1801 , // 28   - ar-ma
-            0x1000 , // 29   - ar-mr
-            0x2001 , // 30   - ar-om
-            0x1000 , // 31   - ar-ps
-            0x4001 , // 32   - ar-qa
-            0x401  , // 33   - ar-sa
-            0x1000 , // 34   - ar-sd
-            0x1000 , // 35   - ar-so
-            0x1000 , // 36   - ar-ss
-            0x2801 , // 37   - ar-sy
-            0x1000 , // 38   - ar-td
-            0x1c01 , // 39   - ar-tn
-            0x2401 , // 40   - ar-ye
-            0x7a   , // 41   - arn
-            0x47a  , // 42   - arn-cl
-            0x4d   , // 43   - as
-            0x44d  , // 44   - as-in
-            0x1000 , // 45   - asa
-            0x1000 , // 46   - asa-tz
-            0x1000 , // 47   - ast
-            0x1000 , // 48   - ast-es
-            0x2c   , // 49   - az
-            0x742c , // 50   - az-cyrl
-            0x82c  , // 51   - az-cyrl-az
-            0x782c , // 52   - az-latn
-            0x42c  , // 53   - az-latn-az
-            0x6d   , // 54   - ba
-            0x46d  , // 55   - ba-ru
-            0x1000 , // 56   - bas
-            0x1000 , // 57   - bas-cm
-            0x23   , // 58   - be
-            0x423  , // 59   - be-by
-            0x1000 , // 60   - bem
-            0x1000 , // 61   - bem-zm
-            0x1000 , // 62   - bez
-            0x1000 , // 63   - bez-tz
-            0x2    , // 64   - bg
-            0x402  , // 65   - bg-bg
-            0x66   , // 66   - bin
-            0x466  , // 67   - bin-ng
-            0x1000 , // 68   - bm
-            0x1000 , // 69   - bm-latn
-            0x1000 , // 70   - bm-latn-ml
-            0x45   , // 71   - bn
-            0x845  , // 72   - bn-bd
-            0x445  , // 73   - bn-in
-            0x51   , // 74   - bo
-            0x451  , // 75   - bo-cn
-            0x1000 , // 76   - bo-in
-            0x7e   , // 77   - br
-            0x47e  , // 78   - br-fr
-            0x1000 , // 79   - brx
-            0x1000 , // 80   - brx-in
-            0x781a , // 81   - bs
-            0x641a , // 82   - bs-cyrl
-            0x201a , // 83   - bs-cyrl-ba
-            0x681a , // 84   - bs-latn
-            0x141a , // 85   - bs-latn-ba
-            0x1000 , // 86   - byn
-            0x1000 , // 87   - byn-er
-            0x3    , // 88   - ca
-            0x1000 , // 89   - ca-ad
-            0x403  , // 90   - ca-es
-            0x803  , // 91   - ca-es-valencia
-            0x1000 , // 92   - ca-fr
-            0x1000 , // 93   - ca-it
-            0x1000 , // 94   - ce-ru
-            0x1000 , // 95   - cgg
-            0x1000 , // 96   - cgg-ug
-            0x5c   , // 97   - chr
-            0x7c5c , // 98   - chr-cher
-            0x45c  , // 99   - chr-cher-us
-            0x83   , // 100  - co
-            0x483  , // 101  - co-fr
-            0x5    , // 102  - cs
-            0x405  , // 103  - cs-cz
-            0x1000 , // 104  - cu-ru
-            0x52   , // 105  - cy
-            0x452  , // 106  - cy-gb
-            0x6    , // 107  - da
-            0x406  , // 108  - da-dk
-            0x1000 , // 109  - da-gl
-            0x1000 , // 110  - dav
-            0x1000 , // 111  - dav-ke
-            0x7    , // 112  - de
-            0xc07  , // 113  - de-at
-            0x1000 , // 114  - de-be
-            0x807  , // 115  - de-ch
-            0x407  , // 116  - de-de
-            0x10407, // 117  - de-de_phoneb
-            0x1000 , // 118  - de-it
-            0x1407 , // 119  - de-li
-            0x1007 , // 120  - de-lu
-            0x1000 , // 121  - dje
-            0x1000 , // 122  - dje-ne
-            0x7c2e , // 123  - dsb
-            0x82e  , // 124  - dsb-de
-            0x1000 , // 125  - dua
-            0x1000 , // 126  - dua-cm
-            0x65   , // 127  - dv
-            0x465  , // 128  - dv-mv
-            0x1000 , // 129  - dyo
-            0x1000 , // 130  - dyo-sn
-            0x1000 , // 131  - dz
-            0xc51  , // 132  - dz-bt
-            0x1000 , // 133  - ebu
-            0x1000 , // 134  - ebu-ke
-            0x1000 , // 135  - ee
-            0x1000 , // 136  - ee-gh
-            0x1000 , // 137  - ee-tg
-            0x8    , // 138  - el
-            0x1000 , // 139  - el-cy
-            0x408  , // 140  - el-gr
-            0x9    , // 141  - en
-            0x1000 , // 142  - en-001
-            0x2409 , // 143  - en-029
-            0x1000 , // 144  - en-150
-            0x1000 , // 145  - en-ag
-            0x1000 , // 146  - en-ai
-            0x1000 , // 147  - en-as
-            0x1000 , // 148  - en-at
-            0xc09  , // 149  - en-au
-            0x1000 , // 150  - en-bb
-            0x1000 , // 151  - en-be
-            0x1000 , // 152  - en-bi
-            0x1000 , // 153  - en-bm
-            0x1000 , // 154  - en-bs
-            0x1000 , // 155  - en-bw
-            0x2809 , // 156  - en-bz
-            0x1009 , // 157  - en-ca
-            0x1000 , // 158  - en-cc
-            0x1000 , // 159  - en-ch
-            0x1000 , // 160  - en-ck
-            0x1000 , // 161  - en-cm
-            0x1000 , // 162  - en-cx
-            0x1000 , // 163  - en-cy
-            0x1000 , // 164  - en-de
-            0x1000 , // 165  - en-dk
-            0x1000 , // 166  - en-dm
-            0x1000 , // 167  - en-er
-            0x1000 , // 168  - en-fi
-            0x1000 , // 169  - en-fj
-            0x1000 , // 170  - en-fk
-            0x1000 , // 171  - en-fm
-            0x809  , // 172  - en-gb
-            0x1000 , // 173  - en-gd
-            0x1000 , // 174  - en-gg
-            0x1000 , // 175  - en-gh
-            0x1000 , // 176  - en-gi
-            0x1000 , // 177  - en-gm
-            0x1000 , // 178  - en-gu
-            0x1000 , // 179  - en-gy
-            0x3c09 , // 180  - en-hk
-            0x3809 , // 181  - en-id
-            0x1809 , // 182  - en-ie
-            0x1000 , // 183  - en-il
-            0x1000 , // 184  - en-im
-            0x4009 , // 185  - en-in
-            0x1000 , // 186  - en-io
-            0x1000 , // 187  - en-je
-            0x2009 , // 188  - en-jm
-            0x1000 , // 189  - en-ke
-            0x1000 , // 190  - en-ki
-            0x1000 , // 191  - en-kn
-            0x1000 , // 192  - en-ky
-            0x1000 , // 193  - en-lc
-            0x1000 , // 194  - en-lr
-            0x1000 , // 195  - en-ls
-            0x1000 , // 196  - en-mg
-            0x1000 , // 197  - en-mh
-            0x1000 , // 198  - en-mo
-            0x1000 , // 199  - en-mp
-            0x1000 , // 200  - en-ms
-            0x1000 , // 201  - en-mt
-            0x1000 , // 202  - en-mu
-            0x1000 , // 203  - en-mw
-            0x4409 , // 204  - en-my
-            0x1000 , // 205  - en-na
-            0x1000 , // 206  - en-nf
-            0x1000 , // 207  - en-ng
-            0x1000 , // 208  - en-nl
-            0x1000 , // 209  - en-nr
-            0x1000 , // 210  - en-nu
-            0x1409 , // 211  - en-nz
-            0x1000 , // 212  - en-pg
-            0x3409 , // 213  - en-ph
-            0x1000 , // 214  - en-pk
-            0x1000 , // 215  - en-pn
-            0x1000 , // 216  - en-pr
-            0x1000 , // 217  - en-pw
-            0x1000 , // 218  - en-rw
-            0x1000 , // 219  - en-sb
-            0x1000 , // 220  - en-sc
-            0x1000 , // 221  - en-sd
-            0x1000 , // 222  - en-se
-            0x4809 , // 223  - en-sg
-            0x1000 , // 224  - en-sh
-            0x1000 , // 225  - en-si
-            0x1000 , // 226  - en-sl
-            0x1000 , // 227  - en-ss
-            0x1000 , // 228  - en-sx
-            0x1000 , // 229  - en-sz
-            0x1000 , // 230  - en-tc
-            0x1000 , // 231  - en-tk
-            0x1000 , // 232  - en-to
-            0x2c09 , // 233  - en-tt
-            0x1000 , // 234  - en-tv
-            0x1000 , // 235  - en-tz
-            0x1000 , // 236  - en-ug
-            0x1000 , // 237  - en-um
-            0x409  , // 238  - en-us
-            0x1000 , // 239  - en-vc
-            0x1000 , // 240  - en-vg
-            0x1000 , // 241  - en-vi
-            0x1000 , // 242  - en-vu
-            0x1000 , // 243  - en-ws
-            0x1c09 , // 244  - en-za
-            0x1000 , // 245  - en-zm
-            0x3009 , // 246  - en-zw
-            0x1000 , // 247  - eo
-            0x1000 , // 248  - eo-001
-            0xa    , // 249  - es
-            0x580a , // 250  - es-419
-            0x2c0a , // 251  - es-ar
-            0x400a , // 252  - es-bo
-            0x1000 , // 253  - es-br
-            0x340a , // 254  - es-cl
-            0x240a , // 255  - es-co
-            0x140a , // 256  - es-cr
-            0x5c0a , // 257  - es-cu
-            0x1c0a , // 258  - es-do
-            0x300a , // 259  - es-ec
-            0xc0a  , // 260  - es-es
-            0x40a  , // 261  - es-es_tradnl
-            0x1000 , // 262  - es-gq
-            0x100a , // 263  - es-gt
-            0x480a , // 264  - es-hn
-            0x80a  , // 265  - es-mx
-            0x4c0a , // 266  - es-ni
-            0x180a , // 267  - es-pa
-            0x280a , // 268  - es-pe
-            0x1000 , // 269  - es-ph
-            0x500a , // 270  - es-pr
-            0x3c0a , // 271  - es-py
-            0x440a , // 272  - es-sv
-            0x540a , // 273  - es-us
-            0x380a , // 274  - es-uy
-            0x200a , // 275  - es-ve
-            0x25   , // 276  - et
-            0x425  , // 277  - et-ee
-            0x2d   , // 278  - eu
-            0x42d  , // 279  - eu-es
-            0x1000 , // 280  - ewo
-            0x1000 , // 281  - ewo-cm
-            0x29   , // 282  - fa
-            0x429  , // 283  - fa-ir
-            0x67   , // 284  - ff
-            0x1000 , // 285  - ff-cm
-            0x1000 , // 286  - ff-gn
-            0x7c67 , // 287  - ff-latn
-            0x867  , // 288  - ff-latn-sn
-            0x1000 , // 289  - ff-mr
-            0x467  , // 290  - ff-ng
-            0xb    , // 291  - fi
-            0x40b  , // 292  - fi-fi
-            0x64   , // 293  - fil
-            0x464  , // 294  - fil-ph
-            0x38   , // 295  - fo
-            0x1000 , // 296  - fo-dk
-            0x438  , // 297  - fo-fo
-            0xc    , // 298  - fr
-            0x1c0c , // 299  - fr-029
-            0x80c  , // 300  - fr-be
-            0x1000 , // 301  - fr-bf
-            0x1000 , // 302  - fr-bi
-            0x1000 , // 303  - fr-bj
-            0x1000 , // 304  - fr-bl
-            0xc0c  , // 305  - fr-ca
-            0x240c , // 306  - fr-cd
-            0x1000 , // 307  - fr-cf
-            0x1000 , // 308  - fr-cg
-            0x100c , // 309  - fr-ch
-            0x300c , // 310  - fr-ci
-            0x2c0c , // 311  - fr-cm
-            0x1000 , // 312  - fr-dj
-            0x1000 , // 313  - fr-dz
-            0x40c  , // 314  - fr-fr
-            0x1000 , // 315  - fr-ga
-            0x1000 , // 316  - fr-gf
-            0x1000 , // 317  - fr-gn
-            0x1000 , // 318  - fr-gp
-            0x1000 , // 319  - fr-gq
-            0x3c0c , // 320  - fr-ht
-            0x1000 , // 321  - fr-km
-            0x140c , // 322  - fr-lu
-            0x380c , // 323  - fr-ma
-            0x180c , // 324  - fr-mc
-            0x1000 , // 325  - fr-mf
-            0x1000 , // 326  - fr-mg
-            0x340c , // 327  - fr-ml
-            0x1000 , // 328  - fr-mq
-            0x1000 , // 329  - fr-mr
-            0x1000 , // 330  - fr-mu
-            0x1000 , // 331  - fr-nc
-            0x1000 , // 332  - fr-ne
-            0x1000 , // 333  - fr-pf
-            0x1000 , // 334  - fr-pm
-            0x200c , // 335  - fr-re
-            0x1000 , // 336  - fr-rw
-            0x1000 , // 337  - fr-sc
-            0x280c , // 338  - fr-sn
-            0x1000 , // 339  - fr-sy
-            0x1000 , // 340  - fr-td
-            0x1000 , // 341  - fr-tg
-            0x1000 , // 342  - fr-tn
-            0x1000 , // 343  - fr-vu
-            0x1000 , // 344  - fr-wf
-            0x1000 , // 345  - fr-yt
-            0x1000 , // 346  - fur
-            0x1000 , // 347  - fur-it
-            0x62   , // 348  - fy
-            0x462  , // 349  - fy-nl
-            0x3c   , // 350  - ga
-            0x83c  , // 351  - ga-ie
-            0x91   , // 352  - gd
-            0x491  , // 353  - gd-gb
-            0x56   , // 354  - gl
-            0x456  , // 355  - gl-es
-            0x74   , // 356  - gn
-            0x474  , // 357  - gn-py
-            0x84   , // 358  - gsw
-            0x1000 , // 359  - gsw-ch
-            0x484  , // 360  - gsw-fr
-            0x1000 , // 361  - gsw-li
-            0x47   , // 362  - gu
-            0x447  , // 363  - gu-in
-            0x1000 , // 364  - guz
-            0x1000 , // 365  - guz-ke
-            0x1000 , // 366  - gv
-            0x1000 , // 367  - gv-im
-            0x68   , // 368  - ha
-            0x7c68 , // 369  - ha-latn
-            0x1000 , // 370  - ha-latn-gh
-            0x1000 , // 371  - ha-latn-ne
-            0x468  , // 372  - ha-latn-ng
-            0x75   , // 373  - haw
-            0x475  , // 374  - haw-us
-            0xd    , // 375  - he
-            0x40d  , // 376  - he-il
-            0x39   , // 377  - hi
-            0x439  , // 378  - hi-in
-            0x1a   , // 379  - hr
-            0x101a , // 380  - hr-ba
-            0x41a  , // 381  - hr-hr
-            0x2e   , // 382  - hsb
-            0x42e  , // 383  - hsb-de
-            0xe    , // 384  - hu
-            0x40e  , // 385  - hu-hu
-            0x1040e, // 386  - hu-hu_technl
-            0x2b   , // 387  - hy
-            0x42b  , // 388  - hy-am
-            0x1000 , // 389  - ia
-            0x1000 , // 390  - ia-001
-            0x1000 , // 391  - ia-fr
-            0x69   , // 392  - ibb
-            0x469  , // 393  - ibb-ng
-            0x21   , // 394  - id
-            0x421  , // 395  - id-id
-            0x70   , // 396  - ig
-            0x470  , // 397  - ig-ng
-            0x78   , // 398  - ii
-            0x478  , // 399  - ii-cn
-            0xf    , // 400  - is
-            0x40f  , // 401  - is-is
-            0x10   , // 402  - it
-            0x810  , // 403  - it-ch
-            0x410  , // 404  - it-it
-            0x1000 , // 405  - it-sm
-            0x5d   , // 406  - iu
-            0x785d , // 407  - iu-cans
-            0x45d  , // 408  - iu-cans-ca
-            0x7c5d , // 409  - iu-latn
-            0x85d  , // 410  - iu-latn-ca
-            0x11   , // 411  - ja
-            0x411  , // 412  - ja-jp
-            0x40411, // 413  - ja-jp_radstr
-            0x1000 , // 414  - jgo
-            0x1000 , // 415  - jgo-cm
-            0x1000 , // 416  - jmc
-            0x1000 , // 417  - jmc-tz
-            0x1000 , // 418  - jv
-            0x1000 , // 419  - jv-java
-            0x1000 , // 420  - jv-java-id
-            0x1000 , // 421  - jv-latn
-            0x1000 , // 422  - jv-latn-id
-            0x37   , // 423  - ka
-            0x437  , // 424  - ka-ge
-            0x10437, // 425  - ka-ge_modern
-            0x1000 , // 426  - kab
-            0x1000 , // 427  - kab-dz
-            0x1000 , // 428  - kam
-            0x1000 , // 429  - kam-ke
-            0x1000 , // 430  - kde
-            0x1000 , // 431  - kde-tz
-            0x1000 , // 432  - kea
-            0x1000 , // 433  - kea-cv
-            0x1000 , // 434  - khq
-            0x1000 , // 435  - khq-ml
-            0x1000 , // 436  - ki
-            0x1000 , // 437  - ki-ke
-            0x3f   , // 438  - kk
-            0x43f  , // 439  - kk-kz
-            0x1000 , // 440  - kkj
-            0x1000 , // 441  - kkj-cm
-            0x6f   , // 442  - kl
-            0x46f  , // 443  - kl-gl
-            0x1000 , // 444  - kln
-            0x1000 , // 445  - kln-ke
-            0x53   , // 446  - km
-            0x453  , // 447  - km-kh
-            0x4b   , // 448  - kn
-            0x44b  , // 449  - kn-in
-            0x12   , // 450  - ko
-            0x1000 , // 451  - ko-kp
-            0x412  , // 452  - ko-kr
-            0x57   , // 453  - kok
-            0x457  , // 454  - kok-in
-            0x71   , // 455  - kr
-            0x471  , // 456  - kr-ng
-            0x60   , // 457  - ks
-            0x460  , // 458  - ks-arab
-            0x1000 , // 459  - ks-arab-in
-            0x1000 , // 460  - ks-deva
-            0x860  , // 461  - ks-deva-in
-            0x1000 , // 462  - ksb
-            0x1000 , // 463  - ksb-tz
-            0x1000 , // 464  - ksf
-            0x1000 , // 465  - ksf-cm
-            0x1000 , // 466  - ksh
-            0x1000 , // 467  - ksh-de
-            0x92   , // 468  - ku
-            0x7c92 , // 469  - ku-arab
-            0x492  , // 470  - ku-arab-iq
-            0x1000 , // 471  - ku-arab-ir
-            0x1000 , // 472  - kw
-            0x1000 , // 473  - kw-gb
-            0x40   , // 474  - ky
-            0x440  , // 475  - ky-kg
-            0x76   , // 476  - la
-            0x476  , // 477  - la-001
-            0x1000 , // 478  - lag
-            0x1000 , // 479  - lag-tz
-            0x6e   , // 480  - lb
-            0x46e  , // 481  - lb-lu
-            0x1000 , // 482  - lg
-            0x1000 , // 483  - lg-ug
-            0x1000 , // 484  - lkt
-            0x1000 , // 485  - lkt-us
-            0x1000 , // 486  - ln
-            0x1000 , // 487  - ln-ao
-            0x1000 , // 488  - ln-cd
-            0x1000 , // 489  - ln-cf
-            0x1000 , // 490  - ln-cg
-            0x54   , // 491  - lo
-            0x454  , // 492  - lo-la
-            0x1000 , // 493  - lrc-iq
-            0x1000 , // 494  - lrc-ir
-            0x27   , // 495  - lt
-            0x427  , // 496  - lt-lt
-            0x1000 , // 497  - lu
-            0x1000 , // 498  - lu-cd
-            0x1000 , // 499  - luo
-            0x1000 , // 500  - luo-ke
-            0x1000 , // 501  - luy
-            0x1000 , // 502  - luy-ke
-            0x26   , // 503  - lv
-            0x426  , // 504  - lv-lv
-            0x1000 , // 505  - mas
-            0x1000 , // 506  - mas-ke
-            0x1000 , // 507  - mas-tz
-            0x1000 , // 508  - mer
-            0x1000 , // 509  - mer-ke
-            0x1000 , // 510  - mfe
-            0x1000 , // 511  - mfe-mu
-            0x1000 , // 512  - mg
-            0x1000 , // 513  - mg-mg
-            0x1000 , // 514  - mgh
-            0x1000 , // 515  - mgh-mz
-            0x1000 , // 516  - mgo
-            0x1000 , // 517  - mgo-cm
-            0x81   , // 518  - mi
-            0x481  , // 519  - mi-nz
-            0x2f   , // 520  - mk
-            0x42f  , // 521  - mk-mk
-            0x4c   , // 522  - ml
-            0x44c  , // 523  - ml-in
-            0x50   , // 524  - mn
-            0x7850 , // 525  - mn-cyrl
-            0x450  , // 526  - mn-mn
-            0x7c50 , // 527  - mn-mong
-            0x850  , // 528  - mn-mong-cn
-            0xc50  , // 529  - mn-mong-mn
-            0x58   , // 530  - mni
-            0x458  , // 531  - mni-in
-            0x7c   , // 532  - moh
-            0x47c  , // 533  - moh-ca
-            0x4e   , // 534  - mr
-            0x44e  , // 535  - mr-in
-            0x3e   , // 536  - ms
-            0x83e  , // 537  - ms-bn
-            0x43e  , // 538  - ms-my
-            0x1000 , // 539  - ms-sg
-            0x3a   , // 540  - mt
-            0x43a  , // 541  - mt-mt
-            0x1000 , // 542  - mua
-            0x1000 , // 543  - mua-cm
-            0x55   , // 544  - my
-            0x455  , // 545  - my-mm
-            0x1000 , // 546  - mzn-ir
-            0x1000 , // 547  - naq
-            0x1000 , // 548  - naq-na
-            0x7c14 , // 549  - nb
-            0x414  , // 550  - nb-no
-            0x1000 , // 551  - nb-sj
-            0x1000 , // 552  - nd
-            0x1000 , // 553  - nd-zw
-            0x1000 , // 554  - nds-de
-            0x1000 , // 555  - nds-nl
-            0x61   , // 556  - ne
-            0x861  , // 557  - ne-in
-            0x461  , // 558  - ne-np
-            0x13   , // 559  - nl
-            0x1000 , // 560  - nl-aw
-            0x813  , // 561  - nl-be
-            0x1000 , // 562  - nl-bq
-            0x1000 , // 563  - nl-cw
-            0x413  , // 564  - nl-nl
-            0x1000 , // 565  - nl-sr
-            0x1000 , // 566  - nl-sx
-            0x1000 , // 567  - nmg
-            0x1000 , // 568  - nmg-cm
-            0x7814 , // 569  - nn
-            0x814  , // 570  - nn-no
-            0x1000 , // 571  - nnh
-            0x1000 , // 572  - nnh-cm
-            0x14   , // 573  - no
-            0x1000 , // 574  - nqo
-            0x1000 , // 575  - nqo-gn
-            0x1000 , // 576  - nr
-            0x1000 , // 577  - nr-za
-            0x6c   , // 578  - nso
-            0x46c  , // 579  - nso-za
-            0x1000 , // 580  - nus
-            0x1000 , // 581  - nus-ss
-            0x1000 , // 582  - nyn
-            0x1000 , // 583  - nyn-ug
-            0x82   , // 584  - oc
-            0x482  , // 585  - oc-fr
-            0x72   , // 586  - om
-            0x472  , // 587  - om-et
-            0x1000 , // 588  - om-ke
-            0x48   , // 589  - or
-            0x448  , // 590  - or-in
-            0x1000 , // 591  - os
-            0x1000 , // 592  - os-ge
-            0x1000 , // 593  - os-ru
-            0x46   , // 594  - pa
-            0x7c46 , // 595  - pa-arab
-            0x846  , // 596  - pa-arab-pk
-            0x446  , // 597  - pa-in
-            0x79   , // 598  - pap
-            0x479  , // 599  - pap-029
-            0x15   , // 600  - pl
-            0x415  , // 601  - pl-pl
-            0x1000 , // 602  - prg-001
-            0x8c   , // 603  - prs
-            0x48c  , // 604  - prs-af
-            0x63   , // 605  - ps
-            0x463  , // 606  - ps-af
-            0x16   , // 607  - pt
-            0x1000 , // 608  - pt-ao
-            0x416  , // 609  - pt-br
-            0x1000 , // 610  - pt-ch
-            0x1000 , // 611  - pt-cv
-            0x1000 , // 612  - pt-gq
-            0x1000 , // 613  - pt-gw
-            0x1000 , // 614  - pt-lu
-            0x1000 , // 615  - pt-mo
-            0x1000 , // 616  - pt-mz
-            0x816  , // 617  - pt-pt
-            0x1000 , // 618  - pt-st
-            0x1000 , // 619  - pt-tl
-            0x901  , // 620  - qps-latn-x-sh
-            0x501  , // 621  - qps-ploc
-            0x5fe  , // 622  - qps-ploca
-            0x9ff  , // 623  - qps-plocm
-            0x86   , // 624  - quc
-            0x7c86 , // 625  - quc-latn
-            0x486  , // 626  - quc-latn-gt
-            0x6b   , // 627  - quz
-            0x46b  , // 628  - quz-bo
-            0x86b  , // 629  - quz-ec
-            0xc6b  , // 630  - quz-pe
-            0x17   , // 631  - rm
-            0x417  , // 632  - rm-ch
-            0x1000 , // 633  - rn
-            0x1000 , // 634  - rn-bi
-            0x18   , // 635  - ro
-            0x818  , // 636  - ro-md
-            0x418  , // 637  - ro-ro
-            0x1000 , // 638  - rof
-            0x1000 , // 639  - rof-tz
-            0x19   , // 640  - ru
-            0x1000 , // 641  - ru-by
-            0x1000 , // 642  - ru-kg
-            0x1000 , // 643  - ru-kz
-            0x819  , // 644  - ru-md
-            0x419  , // 645  - ru-ru
-            0x1000 , // 646  - ru-ua
-            0x87   , // 647  - rw
-            0x487  , // 648  - rw-rw
-            0x1000 , // 649  - rwk
-            0x1000 , // 650  - rwk-tz
-            0x4f   , // 651  - sa
-            0x44f  , // 652  - sa-in
-            0x85   , // 653  - sah
-            0x485  , // 654  - sah-ru
-            0x1000 , // 655  - saq
-            0x1000 , // 656  - saq-ke
-            0x1000 , // 657  - sbp
-            0x1000 , // 658  - sbp-tz
-            0x59   , // 659  - sd
-            0x7c59 , // 660  - sd-arab
-            0x859  , // 661  - sd-arab-pk
-            0x1000 , // 662  - sd-deva
-            0x459  , // 663  - sd-deva-in
-            0x3b   , // 664  - se
-            0xc3b  , // 665  - se-fi
-            0x43b  , // 666  - se-no
-            0x83b  , // 667  - se-se
-            0x1000 , // 668  - seh
-            0x1000 , // 669  - seh-mz
-            0x1000 , // 670  - ses
-            0x1000 , // 671  - ses-ml
-            0x1000 , // 672  - sg
-            0x1000 , // 673  - sg-cf
-            0x1000 , // 674  - shi
-            0x1000 , // 675  - shi-latn
-            0x1000 , // 676  - shi-latn-ma
-            0x1000 , // 677  - shi-tfng
-            0x1000 , // 678  - shi-tfng-ma
-            0x5b   , // 679  - si
-            0x45b  , // 680  - si-lk
-            0x1b   , // 681  - sk
-            0x41b  , // 682  - sk-sk
-            0x24   , // 683  - sl
-            0x424  , // 684  - sl-si
-            0x783b , // 685  - sma
-            0x183b , // 686  - sma-no
-            0x1c3b , // 687  - sma-se
-            0x7c3b , // 688  - smj
-            0x103b , // 689  - smj-no
-            0x143b , // 690  - smj-se
-            0x703b , // 691  - smn
-            0x243b , // 692  - smn-fi
-            0x743b , // 693  - sms
-            0x203b , // 694  - sms-fi
-            0x1000 , // 695  - sn
-            0x1000 , // 696  - sn-latn
-            0x1000 , // 697  - sn-latn-zw
-            0x77   , // 698  - so
-            0x1000 , // 699  - so-dj
-            0x1000 , // 700  - so-et
-            0x1000 , // 701  - so-ke
-            0x477  , // 702  - so-so
-            0x1c   , // 703  - sq
-            0x41c  , // 704  - sq-al
-            0x1000 , // 705  - sq-mk
-            0x1000 , // 706  - sq-xk
-            0x7c1a , // 707  - sr
-            0x6c1a , // 708  - sr-cyrl
-            0x1c1a , // 709  - sr-cyrl-ba
-            0xc1a  , // 710  - sr-cyrl-cs
-            0x301a , // 711  - sr-cyrl-me
-            0x281a , // 712  - sr-cyrl-rs
-            0x1000 , // 713  - sr-cyrl-xk
-            0x701a , // 714  - sr-latn
-            0x181a , // 715  - sr-latn-ba
-            0x81a  , // 716  - sr-latn-cs
-            0x2c1a , // 717  - sr-latn-me
-            0x241a , // 718  - sr-latn-rs
-            0x1000 , // 719  - sr-latn-xk
-            0x1000 , // 720  - ss
-            0x1000 , // 721  - ss-sz
-            0x1000 , // 722  - ss-za
-            0x1000 , // 723  - ssy
-            0x1000 , // 724  - ssy-er
-            0x30   , // 725  - st
-            0x1000 , // 726  - st-ls
-            0x430  , // 727  - st-za
-            0x1d   , // 728  - sv
-            0x1000 , // 729  - sv-ax
-            0x81d  , // 730  - sv-fi
-            0x41d  , // 731  - sv-se
-            0x41   , // 732  - sw
-            0x1000 , // 733  - sw-cd
-            0x441  , // 734  - sw-ke
-            0x1000 , // 735  - sw-tz
-            0x1000 , // 736  - sw-ug
-            0x1000 , // 737  - swc
-            0x1000 , // 738  - swc-cd
-            0x5a   , // 739  - syr
-            0x45a  , // 740  - syr-sy
-            0x49   , // 741  - ta
-            0x449  , // 742  - ta-in
-            0x849  , // 743  - ta-lk
-            0x1000 , // 744  - ta-my
-            0x1000 , // 745  - ta-sg
-            0x4a   , // 746  - te
-            0x44a  , // 747  - te-in
-            0x1000 , // 748  - teo
-            0x1000 , // 749  - teo-ke
-            0x1000 , // 750  - teo-ug
-            0x28   , // 751  - tg
-            0x7c28 , // 752  - tg-cyrl
-            0x428  , // 753  - tg-cyrl-tj
-            0x1e   , // 754  - th
-            0x41e  , // 755  - th-th
-            0x73   , // 756  - ti
-            0x873  , // 757  - ti-er
-            0x473  , // 758  - ti-et
-            0x1000 , // 759  - tig
-            0x1000 , // 760  - tig-er
-            0x42   , // 761  - tk
-            0x442  , // 762  - tk-tm
-            0x32   , // 763  - tn
-            0x832  , // 764  - tn-bw
-            0x432  , // 765  - tn-za
-            0x1000 , // 766  - to
-            0x1000 , // 767  - to-to
-            0x1f   , // 768  - tr
-            0x1000 , // 769  - tr-cy
-            0x41f  , // 770  - tr-tr
-            0x31   , // 771  - ts
-            0x431  , // 772  - ts-za
-            0x44   , // 773  - tt
-            0x444  , // 774  - tt-ru
-            0x1000 , // 775  - twq
-            0x1000 , // 776  - twq-ne
-            0x5f   , // 777  - tzm
-            0x1000 , // 778  - tzm-arab
-            0x45f  , // 779  - tzm-arab-ma
-            0x7c5f , // 780  - tzm-latn
-            0x85f  , // 781  - tzm-latn-dz
-            0x1000 , // 782  - tzm-latn-ma
-            0x785f , // 783  - tzm-tfng
-            0x105f , // 784  - tzm-tfng-ma
-            0x80   , // 785  - ug
-            0x480  , // 786  - ug-cn
-            0x22   , // 787  - uk
-            0x422  , // 788  - uk-ua
-            0x20   , // 789  - ur
-            0x820  , // 790  - ur-in
-            0x420  , // 791  - ur-pk
-            0x43   , // 792  - uz
-            0x1000 , // 793  - uz-arab
-            0x1000 , // 794  - uz-arab-af
-            0x7843 , // 795  - uz-cyrl
-            0x843  , // 796  - uz-cyrl-uz
-            0x7c43 , // 797  - uz-latn
-            0x443  , // 798  - uz-latn-uz
-            0x1000 , // 799  - vai
-            0x1000 , // 800  - vai-latn
-            0x1000 , // 801  - vai-latn-lr
-            0x1000 , // 802  - vai-vaii
-            0x1000 , // 803  - vai-vaii-lr
-            0x33   , // 804  - ve
-            0x433  , // 805  - ve-za
-            0x2a   , // 806  - vi
-            0x42a  , // 807  - vi-vn
-            0x1000 , // 808  - vo
-            0x1000 , // 809  - vo-001
-            0x1000 , // 810  - vun
-            0x1000 , // 811  - vun-tz
-            0x1000 , // 812  - wae
-            0x1000 , // 813  - wae-ch
-            0x1000 , // 814  - wal
-            0x1000 , // 815  - wal-et
-            0x88   , // 816  - wo
-            0x488  , // 817  - wo-sn
-            0x1007f, // 818  - x-iv_mathan
-            0x34   , // 819  - xh
-            0x434  , // 820  - xh-za
-            0x1000 , // 821  - xog
-            0x1000 , // 822  - xog-ug
-            0x1000 , // 823  - yav
-            0x1000 , // 824  - yav-cm
-            0x3d   , // 825  - yi
-            0x43d  , // 826  - yi-001
-            0x6a   , // 827  - yo
-            0x1000 , // 828  - yo-bj
-            0x46a  , // 829  - yo-ng
-            0x1000 , // 830  - yue-hk
-            0x1000 , // 831  - zgh
-            0x1000 , // 832  - zgh-tfng
-            0x1000 , // 833  - zgh-tfng-ma
-            0x7804 , // 834  - zh
-            0x4    , // 835  - zh-chs
-            0x7c04 , // 836  - zh-cht
-            0x804  , // 837  - zh-cn
-            0x50804, // 838  - zh-cn_phoneb
-            0x20804, // 839  - zh-cn_stroke
-            0x4    , // 840  - zh-hans
-            0x1000 , // 841  - zh-hans-hk
-            0x1000 , // 842  - zh-hans-mo
-            0x7c04 , // 843  - zh-hant
-            0xc04  , // 844  - zh-hk
-            0x40c04, // 845  - zh-hk_radstr
-            0x1404 , // 846  - zh-mo
-            0x41404, // 847  - zh-mo_radstr
-            0x21404, // 848  - zh-mo_stroke
-            0x1004 , // 849  - zh-sg
-            0x51004, // 850  - zh-sg_phoneb
-            0x21004, // 851  - zh-sg_stroke
-            0x404  , // 852  - zh-tw
-            0x30404, // 853  - zh-tw_pronun
-            0x40404, // 854  - zh-tw_radstr
-            0x35   , // 855  - zu
-            0x435  , // 856  - zu-za
-            0x0    , // 857  -        
-        };
-        
-        
-        // s_lcids list all supported lcids. used to binary search and we use the index of the matched lcid to 
-        // get the index in s_localeNamesIndices using s_lcidToCultureNameIndecis
-        private static readonly int[] s_lcids = new int[]
-        {
-           // Lcid , index   - index in  
-            0x1    , // 0    - 52
-            0x2    , // 1    - 301
-            0x3    , // 2    - 421
-            0x4    , // 3    - 4120
-            0x5    , // 4    - 500
-            0x6    , // 5    - 519
-            0x7    , // 6    - 540
-            0x8    , // 7    - 660
-            0x9    , // 8    - 672
-            0xa    , // 9    - 1210
-            0xb    , // 10   - 1419
-            0xc    , // 11   - 1447
-            0xd    , // 12   - 1821
-            0xe    , // 13   - 1856
-            0xf    , // 14   - 1925
-            0x10   , // 15   - 1932
-            0x11   , // 16   - 1985
-            0x12   , // 17   - 2175
-            0x13   , // 18   - 2672
-            0x14   , // 19   - 2734
-            0x15   , // 20   - 2851
-            0x16   , // 21   - 2881
-            0x17   , // 22   - 3025
-            0x18   , // 23   - 3039
-            0x19   , // 24   - 3060
-            0x1a   , // 25   - 1835
-            0x1b   , // 26   - 3268
-            0x1c   , // 27   - 3371
-            0x1d   , // 28   - 3537
-            0x1e   , // 29   - 3657
-            0x1f   , // 30   - 3711
-            0x20   , // 31   - 3831
-            0x21   , // 32   - 1904
-            0x22   , // 33   - 3824
-            0x23   , // 34   - 276
-            0x24   , // 35   - 3275
-            0x25   , // 36   - 1350
-            0x26   , // 37   - 2422
-            0x27   , // 38   - 2390
-            0x28   , // 39   - 3638
-            0x29   , // 40   - 1373
-            0x2a   , // 41   - 3944
-            0x2b   , // 42   - 1875
-            0x2c   , // 43   - 224
-            0x2d   , // 44   - 1357
-            0x2e   , // 45   - 1847
-            0x2f   , // 46   - 2494
-            0x30   , // 47   - 3525
-            0x31   , // 48   - 3723
-            0x32   , // 49   - 3692
-            0x33   , // 50   - 3937
-            0x34   , // 51   - 4004
-            0x35   , // 52   - 4258
-            0x36   , // 53   - 17
-            0x37   , // 54   - 2058
-            0x38   , // 55   - 1435
-            0x39   , // 56   - 1828
-            0x3a   , // 57   - 2591
-            0x3b   , // 58   - 3178
-            0x3c   , // 59   - 1701
-            0x3d   , // 60   - 4029
-            0x3e   , // 61   - 2574
-            0x3f   , // 62   - 2129
-            0x40   , // 63   - 2302
-            0x41   , // 64   - 3554
-            0x42   , // 65   - 3685
-            0x43   , // 66   - 3843
-            0x44   , // 67   - 3730
-            0x45   , // 68   - 336
-            0x46   , // 69   - 2817
-            0x47   , // 70   - 1750
-            0x48   , // 71   - 2798
-            0x49   , // 72   - 3594
-            0x4a   , // 73   - 3616
-            0x4b   , // 74   - 2168
-            0x4c   , // 75   - 2501
-            0x4d   , // 76   - 199
-            0x4e   , // 77   - 2567
-            0x4f   , // 78   - 3108
-            0x50   , // 79   - 2508
-            0x51   , // 80   - 348
-            0x52   , // 81   - 512
-            0x53   , // 82   - 2161
-            0x54   , // 83   - 2371
-            0x55   , // 84   - 2607
-            0x56   , // 85   - 1715
-            0x57   , // 86   - 2187
-            0x58   , // 87   - 2549
-            0x59   , // 88   - 3142
-            0x5a   , // 89   - 3585
-            0x5b   , // 90   - 3261
-            0x5c   , // 91   - 471
-            0x5d   , // 92   - 1949
-            0x5e   , // 93   - 45
-            0x5f   , // 94   - 3746
-            0x60   , // 95   - 2203
-            0x61   , // 96   - 2660
-            0x62   , // 97   - 1694
-            0x63   , // 98   - 2874
-            0x64   , // 99   - 1426
-            0x65   , // 100  - 616
-            0x66   , // 101  - 308
-            0x67   , // 102  - 1380
-            0x68   , // 103  - 1773
-            0x69   , // 104  - 1895
-            0x6a   , // 105  - 4037
-            0x6b   , // 106  - 3004
-            0x6c   , // 107  - 2752
-            0x6d   , // 108  - 260
-            0x6e   , // 109  - 2326
-            0x6f   , // 110  - 2145
-            0x70   , // 111  - 1911
-            0x71   , // 112  - 2196
-            0x72   , // 113  - 2786
-            0x73   , // 114  - 3664
-            0x74   , // 115  - 1722
-            0x75   , // 116  - 1812
-            0x76   , // 117  - 2309
-            0x77   , // 118  - 3349
-            0x78   , // 119  - 1918
-            0x79   , // 120  - 2841
-            0x7a   , // 121  - 190
-            0x7c   , // 122  - 2558
-            0x7e   , // 123  - 360
-            0x80   , // 124  - 3817
-            0x81   , // 125  - 2487
-            0x82   , // 126  - 2779
-            0x83   , // 127  - 493
-            0x84   , // 128  - 1729
-            0x85   , // 129  - 3115
-            0x86   , // 130  - 2982
-            0x87   , // 131  - 3092
-            0x88   , // 132  - 3986
-            0x8c   , // 133  - 2865
-            0x91   , // 134  - 1708
-            0x92   , // 135  - 2266
-            0x401  , // 136  - 150
-            0x402  , // 137  - 303
-            0x403  , // 138  - 428
-            0x404  , // 139  - 4229
-            0x405  , // 140  - 502
-            0x406  , // 141  - 521
-            0x407  , // 142  - 557
-            0x408  , // 143  - 667
-            0x409  , // 144  - 1157
-            0x40a  , // 145  - 1268
-            0x40b  , // 146  - 1421
-            0x40c  , // 147  - 1525
-            0x40d  , // 148  - 1823
-            0x40e  , // 149  - 1858
-            0x40f  , // 150  - 1927
-            0x410  , // 151  - 1939
-            0x411  , // 152  - 1987
-            0x412  , // 153  - 2182
-            0x413  , // 154  - 2694
-            0x414  , // 155  - 2631
-            0x415  , // 156  - 2853
-            0x416  , // 157  - 2888
-            0x417  , // 158  - 3027
-            0x418  , // 159  - 3046
-            0x419  , // 160  - 3082
-            0x41a  , // 161  - 1842
-            0x41b  , // 162  - 3270
-            0x41c  , // 163  - 3373
-            0x41d  , // 164  - 3549
-            0x41e  , // 165  - 3659
-            0x41f  , // 166  - 3718
-            0x420  , // 167  - 3838
-            0x421  , // 168  - 1906
-            0x422  , // 169  - 3826
-            0x423  , // 170  - 278
-            0x424  , // 171  - 3277
-            0x425  , // 172  - 1352
-            0x426  , // 173  - 2424
-            0x427  , // 174  - 2392
-            0x428  , // 175  - 3647
-            0x429  , // 176  - 1375
-            0x42a  , // 177  - 3946
-            0x42b  , // 178  - 1877
-            0x42c  , // 179  - 250
-            0x42d  , // 180  - 1359
-            0x42e  , // 181  - 1850
-            0x42f  , // 182  - 2496
-            0x430  , // 183  - 3532
-            0x431  , // 184  - 3725
-            0x432  , // 185  - 3699
-            0x433  , // 186  - 3939
-            0x434  , // 187  - 4006
-            0x435  , // 188  - 4260
-            0x436  , // 189  - 24
-            0x437  , // 190  - 2060
-            0x438  , // 191  - 1442
-            0x439  , // 192  - 1830
-            0x43a  , // 193  - 2593
-            0x43b  , // 194  - 3185
-            0x43d  , // 195  - 4031
-            0x43e  , // 196  - 2581
-            0x43f  , // 197  - 2131
-            0x440  , // 198  - 2304
-            0x441  , // 199  - 3561
-            0x442  , // 200  - 3687
-            0x443  , // 201  - 3886
-            0x444  , // 202  - 3732
-            0x445  , // 203  - 343
-            0x446  , // 204  - 2836
-            0x447  , // 205  - 1752
-            0x448  , // 206  - 2800
-            0x449  , // 207  - 3596
-            0x44a  , // 208  - 3618
-            0x44b  , // 209  - 2170
-            0x44c  , // 210  - 2503
-            0x44d  , // 211  - 201
-            0x44e  , // 212  - 2569
-            0x44f  , // 213  - 3110
-            0x450  , // 214  - 2517
-            0x451  , // 215  - 350
-            0x452  , // 216  - 514
-            0x453  , // 217  - 2163
-            0x454  , // 218  - 2373
-            0x455  , // 219  - 2609
-            0x456  , // 220  - 1717
-            0x457  , // 221  - 2190
-            0x458  , // 222  - 2552
-            0x459  , // 223  - 3168
-            0x45a  , // 224  - 3588
-            0x45b  , // 225  - 3263
-            0x45c  , // 226  - 482
-            0x45d  , // 227  - 1958
-            0x45e  , // 228  - 47
-            0x45f  , // 229  - 3757
-            0x460  , // 230  - 2205
-            0x461  , // 231  - 2667
-            0x462  , // 232  - 1696
-            0x463  , // 233  - 2876
-            0x464  , // 234  - 1429
-            0x465  , // 235  - 618
-            0x466  , // 236  - 311
-            0x467  , // 237  - 1414
-            0x468  , // 238  - 1802
-            0x469  , // 239  - 1898
-            0x46a  , // 240  - 4044
-            0x46b  , // 241  - 3007
-            0x46c  , // 242  - 2755
-            0x46d  , // 243  - 262
-            0x46e  , // 244  - 2328
-            0x46f  , // 245  - 2147
-            0x470  , // 246  - 1913
-            0x471  , // 247  - 2198
-            0x472  , // 248  - 2788
-            0x473  , // 249  - 3671
-            0x474  , // 250  - 1724
-            0x475  , // 251  - 1815
-            0x476  , // 252  - 2311
-            0x477  , // 253  - 3366
-            0x478  , // 254  - 1920
-            0x479  , // 255  - 2844
-            0x47a  , // 256  - 193
-            0x47c  , // 257  - 2561
-            0x47e  , // 258  - 362
-            0x480  , // 259  - 3819
-            0x481  , // 260  - 2489
-            0x482  , // 261  - 2781
-            0x483  , // 262  - 495
-            0x484  , // 263  - 1738
-            0x485  , // 264  - 3118
-            0x486  , // 265  - 2993
-            0x487  , // 266  - 3094
-            0x488  , // 267  - 3988
-            0x48c  , // 268  - 2868
-            0x491  , // 269  - 1710
-            0x492  , // 270  - 2275
-            0x501  , // 271  - 2956
-            0x5fe  , // 272  - 2964
-            0x801  , // 273  - 95
-            0x803  , // 274  - 433
-            0x804  , // 275  - 4091
-            0x807  , // 276  - 552
-            0x809  , // 277  - 827
-            0x80a  , // 278  - 1295
-            0x80c  , // 279  - 1455
-            0x810  , // 280  - 1934
-            0x813  , // 281  - 2679
-            0x814  , // 282  - 2720
-            0x816  , // 283  - 2928
-            0x818  , // 284  - 3041
-            0x819  , // 285  - 3077
-            0x81a  , // 286  - 3464
-            0x81d  , // 287  - 3544
-            0x820  , // 288  - 3833
-            0x82c  , // 289  - 233
-            0x82e  , // 290  - 601
-            0x832  , // 291  - 3694
-            0x83b  , // 292  - 3190
-            0x83c  , // 293  - 1703
-            0x83e  , // 294  - 2576
-            0x843  , // 295  - 3869
-            0x845  , // 296  - 338
-            0x846  , // 297  - 2826
-            0x849  , // 298  - 3601
-            0x850  , // 299  - 2529
-            0x859  , // 300  - 3151
-            0x85d  , // 301  - 1975
-            0x85f  , // 302  - 3776
-            0x860  , // 303  - 2229
-            0x861  , // 304  - 2662
-            0x867  , // 305  - 1399
-            0x86b  , // 306  - 3013
-            0x873  , // 307  - 3666
-            0x901  , // 308  - 2943
-            0x9ff  , // 309  - 2973
-            0xc01  , // 310  - 80
-            0xc04  , // 311  - 4154
-            0xc07  , // 312  - 542
-            0xc09  , // 313  - 712
-            0xc0a  , // 314  - 1263
-            0xc0c  , // 315  - 1480
-            0xc1a  , // 316  - 3407
-            0xc3b  , // 317  - 3180
-            0xc50  , // 318  - 2539
-            0xc51  , // 319  - 634
-            0xc6b  , // 320  - 3019
-            0x1001 , // 321  - 120
-            0x1004 , // 322  - 4200
-            0x1007 , // 323  - 584
-            0x1009 , // 324  - 752
-            0x100a , // 325  - 1285
-            0x100c , // 326  - 1500
-            0x101a , // 327  - 1837
-            0x103b , // 328  - 3300
-            0x105f , // 329  - 3806
-            0x1401 , // 330  - 75
-            0x1404 , // 331  - 4171
-            0x1407 , // 332  - 579
-            0x1409 , // 333  - 1022
-            0x140a , // 334  - 1243
-            0x140c , // 335  - 1565
-            0x141a , // 336  - 402
-            0x143b , // 337  - 3306
-            0x1801 , // 338  - 125
-            0x1809 , // 339  - 877
-            0x180a , // 340  - 1305
-            0x180c , // 341  - 1575
-            0x181a , // 342  - 3454
-            0x183b , // 343  - 3285
-            0x1c01 , // 344  - 180
-            0x1c09 , // 345  - 1187
-            0x1c0a , // 346  - 1253
-            0x1c0c , // 347  - 1449
-            0x1c1a , // 348  - 3397
-            0x1c3b , // 349  - 3291
-            0x2001 , // 350  - 135
-            0x2009 , // 351  - 907
-            0x200a , // 352  - 1345
-            0x200c , // 353  - 1630
-            0x201a , // 354  - 385
-            0x203b , // 355  - 3324
-            0x2401 , // 356  - 185
-            0x2409 , // 357  - 680
-            0x240a , // 358  - 1238
-            0x240c , // 359  - 1485
-            0x241a , // 360  - 3484
-            0x243b , // 361  - 3315
-            0x2801 , // 362  - 170
-            0x2809 , // 363  - 747
-            0x280a , // 364  - 1310
-            0x280c , // 365  - 1645
-            0x281a , // 366  - 3427
-            0x2c01 , // 367  - 100
-            0x2c09 , // 368  - 1132
-            0x2c0a , // 369  - 1218
-            0x2c0c , // 370  - 1510
-            0x2c1a , // 371  - 3474
-            0x3001 , // 372  - 115
-            0x3009 , // 373  - 1197
-            0x300a , // 374  - 1258
-            0x300c , // 375  - 1505
-            0x301a , // 376  - 3417
-            0x3401 , // 377  - 110
-            0x3409 , // 378  - 1032
-            0x340a , // 379  - 1233
-            0x340c , // 380  - 1590
-            0x3801 , // 381  - 60
-            0x3809 , // 382  - 872
-            0x380a , // 383  - 1340
-            0x380c , // 384  - 1570
-            0x3c01 , // 385  - 65
-            0x3c09 , // 386  - 867
-            0x3c0a , // 387  - 1325
-            0x3c0c , // 388  - 1555
-            0x4001 , // 389  - 145
-            0x4009 , // 390  - 892
-            0x400a , // 391  - 1223
-            0x4409 , // 392  - 987
-            0x440a , // 393  - 1330
-            0x4809 , // 394  - 1082
-            0x480a , // 395  - 1290
-            0x4c0a , // 396  - 1300
-            0x500a , // 397  - 1320
-            0x540a , // 398  - 1335
-            0x580a , // 399  - 1212
-            0x5c0a , // 400  - 1248
-            0x641a , // 401  - 378
-            0x681a , // 402  - 395
-            0x6c1a , // 403  - 3390
-            0x701a , // 404  - 3447
-            0x703b , // 405  - 3312
-            0x742c , // 406  - 226
-            0x743b , // 407  - 3321
-            0x7804 , // 408  - 4077
-            0x7814 , // 409  - 2718
-            0x781a , // 410  - 376
-            0x782c , // 411  - 243
-            0x783b , // 412  - 3282
-            0x7843 , // 413  - 3862
-            0x7850 , // 414  - 2510
-            0x785d , // 415  - 1951
-            0x785f , // 416  - 3798
-            0x7c04 , // 417  - 4147
-            0x7c14 , // 418  - 2629
-            0x7c1a , // 419  - 3388
-            0x7c28 , // 420  - 3640
-            0x7c2e , // 421  - 598
-            0x7c3b , // 422  - 3297
-            0x7c43 , // 423  - 3879
-            0x7c46 , // 424  - 2819
-            0x7c50 , // 425  - 2522
-            0x7c59 , // 426  - 3144
-            0x7c5c , // 427  - 474
-            0x7c5d , // 428  - 1968
-            0x7c5f , // 429  - 3768
-            0x7c67 , // 430  - 1392
-            0x7c68 , // 431  - 1775
-            0x7c86 , // 432  - 2985
-            0x7c92 , // 433  - 2268
-            0x1007f, // 434  - 3993
-            0x10407, // 435  - 562
-            0x1040e, // 436  - 1863
-            0x10437, // 437  - 2065
-            0x20804, // 438  - 4108
-            0x21004, // 439  - 4217
-            0x21404, // 440  - 4188
-            0x30404, // 441  - 4234
-            0x40404, // 442  - 4246
-            0x40411, // 443  - 1992
-            0x40c04, // 444  - 4159
-            0x41404, // 445  - 4176
-            0x50804, // 446  - 4096
-            0x51004, // 447  - 4205
-        };        
-        
-        // each element in s_lcidToCultureNameIndecis is index to s_localeNamesIndices
-        private static readonly int[] s_lcidToCultureNameIndecis = new int[]
-        {
-        // Index to s_localeNamesIndices, index to this array - lcid  - index to the c_localeNames    
-            13   , // 0    - 1     - 52
-            64   , // 1    - 2     - 301
-            88   , // 2    - 3     - 421
-            840  , // 3    - 4     - 4120
-            102  , // 4    - 5     - 500
-            107  , // 5    - 6     - 519
-            112  , // 6    - 7     - 540
-            138  , // 7    - 8     - 660
-            141  , // 8    - 9     - 672
-            249  , // 9    - a     - 1210
-            291  , // 10   - b     - 1419
-            298  , // 11   - c     - 1447
-            375  , // 12   - d     - 1821
-            384  , // 13   - e     - 1856
-            400  , // 14   - f     - 1925
-            402  , // 15   - 10    - 1932
-            411  , // 16   - 11    - 1985
-            450  , // 17   - 12    - 2175
-            559  , // 18   - 13    - 2672
-            573  , // 19   - 14    - 2734
-            600  , // 20   - 15    - 2851
-            607  , // 21   - 16    - 2881
-            631  , // 22   - 17    - 3025
-            635  , // 23   - 18    - 3039
-            640  , // 24   - 19    - 3060
-            379  , // 25   - 1a    - 1835
-            681  , // 26   - 1b    - 3268
-            703  , // 27   - 1c    - 3371
-            728  , // 28   - 1d    - 3537
-            754  , // 29   - 1e    - 3657
-            768  , // 30   - 1f    - 3711
-            789  , // 31   - 20    - 3831
-            394  , // 32   - 21    - 1904
-            787  , // 33   - 22    - 3824
-            58   , // 34   - 23    - 276
-            683  , // 35   - 24    - 3275
-            276  , // 36   - 25    - 1350
-            503  , // 37   - 26    - 2422
-            495  , // 38   - 27    - 2390
-            751  , // 39   - 28    - 3638
-            282  , // 40   - 29    - 1373
-            806  , // 41   - 2a    - 3944
-            387  , // 42   - 2b    - 1875
-            49   , // 43   - 2c    - 224
-            278  , // 44   - 2d    - 1357
-            382  , // 45   - 2e    - 1847
-            520  , // 46   - 2f    - 2494
-            725  , // 47   - 30    - 3525
-            771  , // 48   - 31    - 3723
-            763  , // 49   - 32    - 3692
-            804  , // 50   - 33    - 3937
-            819  , // 51   - 34    - 4004
-            855  , // 52   - 35    - 4258
-            4    , // 53   - 36    - 17
-            423  , // 54   - 37    - 2058
-            295  , // 55   - 38    - 1435
-            377  , // 56   - 39    - 1828
-            540  , // 57   - 3a    - 2591
-            664  , // 58   - 3b    - 3178
-            350  , // 59   - 3c    - 1701
-            825  , // 60   - 3d    - 4029
-            536  , // 61   - 3e    - 2574
-            438  , // 62   - 3f    - 2129
-            474  , // 63   - 40    - 2302
-            732  , // 64   - 41    - 3554
-            761  , // 65   - 42    - 3685
-            792  , // 66   - 43    - 3843
-            773  , // 67   - 44    - 3730
-            71   , // 68   - 45    - 336
-            594  , // 69   - 46    - 2817
-            362  , // 70   - 47    - 1750
-            589  , // 71   - 48    - 2798
-            741  , // 72   - 49    - 3594
-            746  , // 73   - 4a    - 3616
-            448  , // 74   - 4b    - 2168
-            522  , // 75   - 4c    - 2501
-            43   , // 76   - 4d    - 199
-            534  , // 77   - 4e    - 2567
-            651  , // 78   - 4f    - 3108
-            524  , // 79   - 50    - 2508
-            74   , // 80   - 51    - 348
-            105  , // 81   - 52    - 512
-            446  , // 82   - 53    - 2161
-            491  , // 83   - 54    - 2371
-            544  , // 84   - 55    - 2607
-            354  , // 85   - 56    - 1715
-            453  , // 86   - 57    - 2187
-            530  , // 87   - 58    - 2549
-            659  , // 88   - 59    - 3142
-            739  , // 89   - 5a    - 3585
-            679  , // 90   - 5b    - 3261
-            97   , // 91   - 5c    - 471
-            406  , // 92   - 5d    - 1949
-            11   , // 93   - 5e    - 45
-            777  , // 94   - 5f    - 3746
-            457  , // 95   - 60    - 2203
-            556  , // 96   - 61    - 2660
-            348  , // 97   - 62    - 1694
-            605  , // 98   - 63    - 2874
-            293  , // 99   - 64    - 1426
-            127  , // 100  - 65    - 616
-            66   , // 101  - 66    - 308
-            284  , // 102  - 67    - 1380
-            368  , // 103  - 68    - 1773
-            392  , // 104  - 69    - 1895
-            827  , // 105  - 6a    - 4037
-            627  , // 106  - 6b    - 3004
-            578  , // 107  - 6c    - 2752
-            54   , // 108  - 6d    - 260
-            480  , // 109  - 6e    - 2326
-            442  , // 110  - 6f    - 2145
-            396  , // 111  - 70    - 1911
-            455  , // 112  - 71    - 2196
-            586  , // 113  - 72    - 2786
-            756  , // 114  - 73    - 3664
-            356  , // 115  - 74    - 1722
-            373  , // 116  - 75    - 1812
-            476  , // 117  - 76    - 2309
-            698  , // 118  - 77    - 3349
-            398  , // 119  - 78    - 1918
-            598  , // 120  - 79    - 2841
-            41   , // 121  - 7a    - 190
-            532  , // 122  - 7c    - 2558
-            77   , // 123  - 7e    - 360
-            785  , // 124  - 80    - 3817
-            518  , // 125  - 81    - 2487
-            584  , // 126  - 82    - 2779
-            100  , // 127  - 83    - 493
-            358  , // 128  - 84    - 1729
-            653  , // 129  - 85    - 3115
-            624  , // 130  - 86    - 2982
-            647  , // 131  - 87    - 3092
-            816  , // 132  - 88    - 3986
-            603  , // 133  - 8c    - 2865
-            352  , // 134  - 91    - 1708
-            468  , // 135  - 92    - 2266
-            33   , // 136  - 401   - 150
-            65   , // 137  - 402   - 303
-            90   , // 138  - 403   - 428
-            852  , // 139  - 404   - 4229
-            103  , // 140  - 405   - 502
-            108  , // 141  - 406   - 521
-            116  , // 142  - 407   - 557
-            140  , // 143  - 408   - 667
-            238  , // 144  - 409   - 1157
-            261  , // 145  - 40a   - 1268
-            292  , // 146  - 40b   - 1421
-            314  , // 147  - 40c   - 1525
-            376  , // 148  - 40d   - 1823
-            385  , // 149  - 40e   - 1858
-            401  , // 150  - 40f   - 1927
-            404  , // 151  - 410   - 1939
-            412  , // 152  - 411   - 1987
-            452  , // 153  - 412   - 2182
-            564  , // 154  - 413   - 2694
-            550  , // 155  - 414   - 2631
-            601  , // 156  - 415   - 2853
-            609  , // 157  - 416   - 2888
-            632  , // 158  - 417   - 3027
-            637  , // 159  - 418   - 3046
-            645  , // 160  - 419   - 3082
-            381  , // 161  - 41a   - 1842
-            682  , // 162  - 41b   - 3270
-            704  , // 163  - 41c   - 3373
-            731  , // 164  - 41d   - 3549
-            755  , // 165  - 41e   - 3659
-            770  , // 166  - 41f   - 3718
-            791  , // 167  - 420   - 3838
-            395  , // 168  - 421   - 1906
-            788  , // 169  - 422   - 3826
-            59   , // 170  - 423   - 278
-            684  , // 171  - 424   - 3277
-            277  , // 172  - 425   - 1352
-            504  , // 173  - 426   - 2424
-            496  , // 174  - 427   - 2392
-            753  , // 175  - 428   - 3647
-            283  , // 176  - 429   - 1375
-            807  , // 177  - 42a   - 3946
-            388  , // 178  - 42b   - 1877
-            53   , // 179  - 42c   - 250
-            279  , // 180  - 42d   - 1359
-            383  , // 181  - 42e   - 1850
-            521  , // 182  - 42f   - 2496
-            727  , // 183  - 430   - 3532
-            772  , // 184  - 431   - 3725
-            765  , // 185  - 432   - 3699
-            805  , // 186  - 433   - 3939
-            820  , // 187  - 434   - 4006
-            856  , // 188  - 435   - 4260
-            6    , // 189  - 436   - 24
-            424  , // 190  - 437   - 2060
-            297  , // 191  - 438   - 1442
-            378  , // 192  - 439   - 1830
-            541  , // 193  - 43a   - 2593
-            666  , // 194  - 43b   - 3185
-            826  , // 195  - 43d   - 4031
-            538  , // 196  - 43e   - 2581
-            439  , // 197  - 43f   - 2131
-            475  , // 198  - 440   - 2304
-            734  , // 199  - 441   - 3561
-            762  , // 200  - 442   - 3687
-            798  , // 201  - 443   - 3886
-            774  , // 202  - 444   - 3732
-            73   , // 203  - 445   - 343
-            597  , // 204  - 446   - 2836
-            363  , // 205  - 447   - 1752
-            590  , // 206  - 448   - 2800
-            742  , // 207  - 449   - 3596
-            747  , // 208  - 44a   - 3618
-            449  , // 209  - 44b   - 2170
-            523  , // 210  - 44c   - 2503
-            44   , // 211  - 44d   - 201
-            535  , // 212  - 44e   - 2569
-            652  , // 213  - 44f   - 3110
-            526  , // 214  - 450   - 2517
-            75   , // 215  - 451   - 350
-            106  , // 216  - 452   - 514
-            447  , // 217  - 453   - 2163
-            492  , // 218  - 454   - 2373
-            545  , // 219  - 455   - 2609
-            355  , // 220  - 456   - 1717
-            454  , // 221  - 457   - 2190
-            531  , // 222  - 458   - 2552
-            663  , // 223  - 459   - 3168
-            740  , // 224  - 45a   - 3588
-            680  , // 225  - 45b   - 3263
-            99   , // 226  - 45c   - 482
-            408  , // 227  - 45d   - 1958
-            12   , // 228  - 45e   - 47
-            779  , // 229  - 45f   - 3757
-            458  , // 230  - 460   - 2205
-            558  , // 231  - 461   - 2667
-            349  , // 232  - 462   - 1696
-            606  , // 233  - 463   - 2876
-            294  , // 234  - 464   - 1429
-            128  , // 235  - 465   - 618
-            67   , // 236  - 466   - 311
-            290  , // 237  - 467   - 1414
-            372  , // 238  - 468   - 1802
-            393  , // 239  - 469   - 1898
-            829  , // 240  - 46a   - 4044
-            628  , // 241  - 46b   - 3007
-            579  , // 242  - 46c   - 2755
-            55   , // 243  - 46d   - 262
-            481  , // 244  - 46e   - 2328
-            443  , // 245  - 46f   - 2147
-            397  , // 246  - 470   - 1913
-            456  , // 247  - 471   - 2198
-            587  , // 248  - 472   - 2788
-            758  , // 249  - 473   - 3671
-            357  , // 250  - 474   - 1724
-            374  , // 251  - 475   - 1815
-            477  , // 252  - 476   - 2311
-            702  , // 253  - 477   - 3366
-            399  , // 254  - 478   - 1920
-            599  , // 255  - 479   - 2844
-            42   , // 256  - 47a   - 193
-            533  , // 257  - 47c   - 2561
-            78   , // 258  - 47e   - 362
-            786  , // 259  - 480   - 3819
-            519  , // 260  - 481   - 2489
-            585  , // 261  - 482   - 2781
-            101  , // 262  - 483   - 495
-            360  , // 263  - 484   - 1738
-            654  , // 264  - 485   - 3118
-            626  , // 265  - 486   - 2993
-            648  , // 266  - 487   - 3094
-            817  , // 267  - 488   - 3988
-            604  , // 268  - 48c   - 2868
-            353  , // 269  - 491   - 1710
-            470  , // 270  - 492   - 2275
-            621  , // 271  - 501   - 2956
-            622  , // 272  - 5fe   - 2964
-            22   , // 273  - 801   - 95
-            91   , // 274  - 803   - 433
-            837  , // 275  - 804   - 4091
-            115  , // 276  - 807   - 552
-            172  , // 277  - 809   - 827
-            265  , // 278  - 80a   - 1295
-            300  , // 279  - 80c   - 1455
-            403  , // 280  - 810   - 1934
-            561  , // 281  - 813   - 2679
-            570  , // 282  - 814   - 2720
-            617  , // 283  - 816   - 2928
-            636  , // 284  - 818   - 3041
-            644  , // 285  - 819   - 3077
-            716  , // 286  - 81a   - 3464
-            730  , // 287  - 81d   - 3544
-            790  , // 288  - 820   - 3833
-            51   , // 289  - 82c   - 233
-            124  , // 290  - 82e   - 601
-            764  , // 291  - 832   - 3694
-            667  , // 292  - 83b   - 3190
-            351  , // 293  - 83c   - 1703
-            537  , // 294  - 83e   - 2576
-            796  , // 295  - 843   - 3869
-            72   , // 296  - 845   - 338
-            596  , // 297  - 846   - 2826
-            743  , // 298  - 849   - 3601
-            528  , // 299  - 850   - 2529
-            661  , // 300  - 859   - 3151
-            410  , // 301  - 85d   - 1975
-            781  , // 302  - 85f   - 3776
-            461  , // 303  - 860   - 2229
-            557  , // 304  - 861   - 2662
-            288  , // 305  - 867   - 1399
-            629  , // 306  - 86b   - 3013
-            757  , // 307  - 873   - 3666
-            620  , // 308  - 901   - 2943
-            623  , // 309  - 9ff   - 2973
-            19   , // 310  - c01   - 80
-            844  , // 311  - c04   - 4154
-            113  , // 312  - c07   - 542
-            149  , // 313  - c09   - 712
-            260  , // 314  - c0a   - 1263
-            305  , // 315  - c0c   - 1480
-            710  , // 316  - c1a   - 3407
-            665  , // 317  - c3b   - 3180
-            529  , // 318  - c50   - 2539
-            132  , // 319  - c51   - 634
-            630  , // 320  - c6b   - 3019
-            27   , // 321  - 1001  - 120
-            849  , // 322  - 1004  - 4200
-            120  , // 323  - 1007  - 584
-            157  , // 324  - 1009  - 752
-            263  , // 325  - 100a  - 1285
-            309  , // 326  - 100c  - 1500
-            380  , // 327  - 101a  - 1837
-            689  , // 328  - 103b  - 3300
-            784  , // 329  - 105f  - 3806
-            18   , // 330  - 1401  - 75
-            846  , // 331  - 1404  - 4171
-            119  , // 332  - 1407  - 579
-            211  , // 333  - 1409  - 1022
-            256  , // 334  - 140a  - 1243
-            322  , // 335  - 140c  - 1565
-            85   , // 336  - 141a  - 402
-            690  , // 337  - 143b  - 3306
-            28   , // 338  - 1801  - 125
-            182  , // 339  - 1809  - 877
-            267  , // 340  - 180a  - 1305
-            324  , // 341  - 180c  - 1575
-            715  , // 342  - 181a  - 3454
-            686  , // 343  - 183b  - 3285
-            39   , // 344  - 1c01  - 180
-            244  , // 345  - 1c09  - 1187
-            258  , // 346  - 1c0a  - 1253
-            299  , // 347  - 1c0c  - 1449
-            709  , // 348  - 1c1a  - 3397
-            687  , // 349  - 1c3b  - 3291
-            30   , // 350  - 2001  - 135
-            188  , // 351  - 2009  - 907
-            275  , // 352  - 200a  - 1345
-            335  , // 353  - 200c  - 1630
-            83   , // 354  - 201a  - 385
-            694  , // 355  - 203b  - 3324
-            40   , // 356  - 2401  - 185
-            143  , // 357  - 2409  - 680
-            255  , // 358  - 240a  - 1238
-            306  , // 359  - 240c  - 1485
-            718  , // 360  - 241a  - 3484
-            692  , // 361  - 243b  - 3315
-            37   , // 362  - 2801  - 170
-            156  , // 363  - 2809  - 747
-            268  , // 364  - 280a  - 1310
-            338  , // 365  - 280c  - 1645
-            712  , // 366  - 281a  - 3427
-            23   , // 367  - 2c01  - 100
-            233  , // 368  - 2c09  - 1132
-            251  , // 369  - 2c0a  - 1218
-            311  , // 370  - 2c0c  - 1510
-            717  , // 371  - 2c1a  - 3474
-            26   , // 372  - 3001  - 115
-            246  , // 373  - 3009  - 1197
-            259  , // 374  - 300a  - 1258
-            310  , // 375  - 300c  - 1505
-            711  , // 376  - 301a  - 3417
-            25   , // 377  - 3401  - 110
-            213  , // 378  - 3409  - 1032
-            254  , // 379  - 340a  - 1233
-            327  , // 380  - 340c  - 1590
-            15   , // 381  - 3801  - 60
-            181  , // 382  - 3809  - 872
-            274  , // 383  - 380a  - 1340
-            323  , // 384  - 380c  - 1570
-            16   , // 385  - 3c01  - 65
-            180  , // 386  - 3c09  - 867
-            271  , // 387  - 3c0a  - 1325
-            320  , // 388  - 3c0c  - 1555
-            32   , // 389  - 4001  - 145
-            185  , // 390  - 4009  - 892
-            252  , // 391  - 400a  - 1223
-            204  , // 392  - 4409  - 987
-            272  , // 393  - 440a  - 1330
-            223  , // 394  - 4809  - 1082
-            264  , // 395  - 480a  - 1290
-            266  , // 396  - 4c0a  - 1300
-            270  , // 397  - 500a  - 1320
-            273  , // 398  - 540a  - 1335
-            250  , // 399  - 580a  - 1212
-            257  , // 400  - 5c0a  - 1248
-            82   , // 401  - 641a  - 378
-            84   , // 402  - 681a  - 395
-            708  , // 403  - 6c1a  - 3390
-            714  , // 404  - 701a  - 3447
-            691  , // 405  - 703b  - 3312
-            50   , // 406  - 742c  - 226
-            693  , // 407  - 743b  - 3321
-            834  , // 408  - 7804  - 4077
-            569  , // 409  - 7814  - 2718
-            81   , // 410  - 781a  - 376
-            52   , // 411  - 782c  - 243
-            685  , // 412  - 783b  - 3282
-            795  , // 413  - 7843  - 3862
-            525  , // 414  - 7850  - 2510
-            407  , // 415  - 785d  - 1951
-            783  , // 416  - 785f  - 3798
-            843  , // 417  - 7c04  - 4147
-            549  , // 418  - 7c14  - 2629
-            707  , // 419  - 7c1a  - 3388
-            752  , // 420  - 7c28  - 3640
-            123  , // 421  - 7c2e  - 598
-            688  , // 422  - 7c3b  - 3297
-            797  , // 423  - 7c43  - 3879
-            595  , // 424  - 7c46  - 2819
-            527  , // 425  - 7c50  - 2522
-            660  , // 426  - 7c59  - 3144
-            98   , // 427  - 7c5c  - 474
-            409  , // 428  - 7c5d  - 1968
-            780  , // 429  - 7c5f  - 3768
-            287  , // 430  - 7c67  - 1392
-            369  , // 431  - 7c68  - 1775
-            625  , // 432  - 7c86  - 2985
-            469  , // 433  - 7c92  - 2268
-            818  , // 434  - 1007f - 3993
-            117  , // 435  - 10407 - 562
-            386  , // 436  - 1040e - 1863
-            425  , // 437  - 10437 - 2065
-            839  , // 438  - 20804 - 4108
-            851  , // 439  - 21004 - 4217
-            848  , // 440  - 21404 - 4188
-            853  , // 441  - 30404 - 4234
-            854  , // 442  - 40404 - 4246
-            413  , // 443  - 40411 - 1992
-            845  , // 444  - 40c04 - 4159
-            847  , // 445  - 41404 - 4176
-            838  , // 446  - 50804 - 4096
-            850  , // 447  - 51004 - 4205            
-        };
         
         /// <summary>
         /// This method uses the sRealName field (which is initialized by the constructor before this is called) to
@@ -3806,116 +301,37 @@ namespace System.Globalization
         
         private static string LCIDToLocaleName(int culture)
         {
-            int left = 0;
-            int right = s_lcids.Length - 1;
-            int index;
-
-            Contract.Assert(s_lcids.Length == s_lcidToCultureNameIndecis.Length);
-
-            while (left <= right)
-            {
-                index = (right + left) / 2;
-
-                if (culture == s_lcids[index])
-                {
-                    int indexToLocaleNamesIndices = s_lcidToCultureNameIndecis[index];
-                    Contract.Assert(indexToLocaleNamesIndices < s_localeNamesIndices.Length - 1);
-                    
-                    return c_localeNames.Substring(s_localeNamesIndices[indexToLocaleNamesIndices], 
-                                                                         s_localeNamesIndices[indexToLocaleNamesIndices + 1] - 
-                                                                         s_localeNamesIndices[indexToLocaleNamesIndices]);
-                }
-                else if (culture < s_lcids[index])
-                {
-                    right = index - 1;
-                }
-                else
-                {
-                    left = index + 1;
-                }
-            }
-
-            return null;
+            return LocaleData.LCIDToLocaleName(culture);
         }
 
         private static int LocaleNameToLCID(string cultureName)
         {
-            int index = SearchCultureName(cultureName);
-            if (index < 0)
-            {
-                return CultureInfo.LOCALE_CUSTOM_UNSPECIFIED; 
-            }
-            
-            Contract.Assert(s_localeNamesIndices.Length == s_nameIndexTolcids.Length && index < s_localeNamesIndices.Length);
-            
-            return s_nameIndexTolcids[index];
+            int lcid = LocaleData.GetLocaleDataNumericPart(cultureName, LocaleDataParts.Lcid);
+            return lcid == -1 ? CultureInfo.LOCALE_CUSTOM_UNSPECIFIED : lcid; 
         }
         
-        
-        // SearchCultureName will binary search c_localeNames using s_localeNamesIndices.
-        // return index in s_localeNamesIndices, or -1 if it fail finding any match   
-        private static int SearchCultureName(string name)
+        private static int GetAnsiCodePage(string cultureName)
         {
-            int left = 0;
-            int right = s_localeNamesIndices.Length - 2;
-            int index;
-            int result;
-
-            Contract.Assert(s_localeNamesIndices[s_localeNamesIndices.Length - 1] == c_localeNames.Length);
-
-            name = AnsiToLower(name);
-
-            // Binary search the array until we have only a couple of elements left and then
-            // just walk those elements.
-            while ((right - left) > 3)
-            {
-                index = ((right - left) / 2) + left;
-
-                Contract.Assert(index < s_localeNamesIndices.Length - 1);
-                result = CompareOrdinal(name, c_localeNames, s_localeNamesIndices[index], s_localeNamesIndices[index + 1] - s_localeNamesIndices[index]);
-                if (result == 0)
-                {
-                    return index;
-                }
-                else if (result < 0)
-                {
-                    right = index;
-                }
-                else
-                {
-                    left = index;
-                }
-            }
-
-            // Walk the remaining elements (it'll be 3 or fewer).
-            for (; left <= right; left++)
-            {
-                Contract.Assert(left < s_localeNamesIndices.Length - 1);
-                if (CompareOrdinal(name, c_localeNames, s_localeNamesIndices[left], s_localeNamesIndices[left + 1] - s_localeNamesIndices[left]) == 0)
-                {
-                    return (left);
-                }
-            }
-
-            // The encoding name is not valid.
-            return -1;
+            int ansiCodePage = LocaleData.GetLocaleDataNumericPart(cultureName, LocaleDataParts.AnsiCodePage);
+            return ansiCodePage == -1 ? CultureData.Invariant.IDEFAULTANSICODEPAGE : ansiCodePage; 
         }
-        
-        // optimized to avoid parameters checking
-        private static int CompareOrdinal(string s1, string s2, int index, int length)
-        {
-            int count = s1.Length;
-            if (count > length)
-                count = length;
 
-            int i = 0;
-            while (i < count && s1[i] == s2[index + i])
-                i++;
+        private static int GetOemCodePage(string cultureName)
+        {
+            int oemCodePage = LocaleData.GetLocaleDataNumericPart(cultureName, LocaleDataParts.OemCodePage);
+            return oemCodePage == -1 ? CultureData.Invariant.IDEFAULTOEMCODEPAGE : oemCodePage; 
+        }
 
-            if (i < count)
-                return (int)(s1[i] - s2[index + i]);
+        private static int GetMacCodePage(string cultureName)
+        {
+            int macCodePage = LocaleData.GetLocaleDataNumericPart(cultureName, LocaleDataParts.MacCodePage);
+            return macCodePage == -1 ? CultureData.Invariant.IDEFAULTMACCODEPAGE : macCodePage; 
+        }
 
-            return s1.Length - length;
+        private static int GetEbcdicCodePage(string cultureName)
+        {
+            int ebcdicCodePage = LocaleData.GetLocaleDataNumericPart(cultureName, LocaleDataParts.EbcdicCodePage);
+            return ebcdicCodePage == -1 ? CultureData.Invariant.IDEFAULTEBCDICCODEPAGE : ebcdicCodePage; 
         }
     }
 }
index 2f7fbca..a00568c 100644 (file)
@@ -567,5 +567,25 @@ namespace System.Globalization
         {
             throw new NotImplementedException();
         }
+        
+        private static int GetAnsiCodePage(string cultureName)
+        {
+            throw new NotImplementedException();
+        }
+
+        private static int GetOemCodePage(string cultureName)
+        {
+            throw new NotImplementedException();
+        }
+
+        private static int GetMacCodePage(string cultureName)
+        {
+            throw new NotImplementedException();
+        }
+
+        private static int GetEbcdicCodePage(string cultureName)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
index 2d2708b..5d31ce7 100644 (file)
@@ -145,6 +145,11 @@ namespace System.Globalization
 
         // CoreCLR depends on this even though its not exposed publicly.
 
+        private int _iDefaultAnsiCodePage = undef; // default ansi code page ID (ACP)
+        private int _iDefaultOemCodePage = undef; // default oem code page ID (OCP or OEM)
+        private int _iDefaultMacCodePage = undef; // default macintosh code page
+        private int _iDefaultEbcdicCodePage = undef; // default EBCDIC code page
+
         private int _iLanguage; // locale ID (0409) - NO sort information
         private bool _bUseOverrides; // use user overrides?
         private bool _bNeutral; // Flags for the culture (ie: neutral or not right now)
@@ -488,6 +493,10 @@ namespace System.Globalization
                     // These are desktop only, not coreclr
 
                     invariant._iLanguage = 0x007f;                 // locale ID (0409) - NO sort information
+                    invariant._iDefaultAnsiCodePage = 1252;         // default ansi code page ID (ACP)
+                    invariant._iDefaultOemCodePage = 437;           // default oem code page ID (OCP or OEM)
+                    invariant._iDefaultMacCodePage = 10000;         // default macintosh code page
+                    invariant._iDefaultEbcdicCodePage = 037;        // default EBCDIC code page
                     // Remember it
                     s_Invariant = invariant;
                 }
@@ -1717,6 +1726,54 @@ namespace System.Globalization
             }
         }
 
+        internal int IDEFAULTANSICODEPAGE   // default ansi code page ID (ACP)
+        {
+            get
+            {
+                if (_iDefaultAnsiCodePage == undef)
+                {
+                    _iDefaultAnsiCodePage = GetAnsiCodePage(_sRealName);
+                }
+                return _iDefaultAnsiCodePage;
+            }
+        }
+
+        internal int IDEFAULTOEMCODEPAGE   // default oem code page ID (OCP or OEM)
+        {
+            get
+            {
+                if (_iDefaultOemCodePage == undef)
+                {
+                    _iDefaultOemCodePage = GetOemCodePage(_sRealName);
+                }
+                return _iDefaultOemCodePage;
+            }
+        }
+
+        internal int IDEFAULTMACCODEPAGE   // default macintosh code page
+        {
+            get
+            {
+                if (_iDefaultMacCodePage == undef)
+                {
+                    _iDefaultMacCodePage = GetMacCodePage(_sRealName);
+                }
+                return _iDefaultMacCodePage;
+            }
+        }
+
+        internal int IDEFAULTEBCDICCODEPAGE   // default EBCDIC code page
+        {
+            get
+            {
+                if (_iDefaultEbcdicCodePage == undef)
+                {
+                    _iDefaultEbcdicCodePage = GetEbcdicCodePage(_sRealName);
+                }
+                return _iDefaultEbcdicCodePage;
+            }
+        }
+
         internal int ILANGUAGE
         {
             get
diff --git a/src/mscorlib/corefx/System/Globalization/LocaleData.Unix.cs b/src/mscorlib/corefx/System/Globalization/LocaleData.Unix.cs
new file mode 100644 (file)
index 0000000..916ed42
--- /dev/null
@@ -0,0 +1,3660 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Diagnostics.Contracts;
+
+// This file contains the handling of Windows OS specific culture features.  
+
+namespace System.Globalization
+{
+    internal enum LocaleDataParts
+    {
+        Lcid = 0, 
+        AnsiCodePage = 1, 
+        OemCodePage = 2, 
+        MacCodePage = 3, 
+        EbcdicCodePage = 4,
+        GeoId = 5    
+    }
+    
+    internal partial class LocaleData
+    {
+        // this is done rather than using a large readonly array of strings to avoid
+        // generating a large amount of code in the static constructor.
+        // Using indices from s_localeNamesIndices, we binary search this string when mapping
+        // an culture name to Lcid. Note that these names are all lowercase and are
+        // sorted alphabetically (ordinal).
+        private const string c_localeNames =
+        //  culture name                    Lcid
+            "aa"                      + //  01000 - 0
+            "aa-dj"                   + //  01000 - 2
+            "aa-er"                   + //  01000 - 7
+            "aa-et"                   + //  01000 - 12
+            "af"                      + //  00036 - 17
+            "af-na"                   + //  01000 - 19
+            "af-za"                   + //  00436 - 24
+            "agq"                     + //  01000 - 29
+            "agq-cm"                  + //  01000 - 32
+            "ak"                      + //  01000 - 38
+            "ak-gh"                   + //  01000 - 40
+            "am"                      + //  0005e - 45
+            "am-et"                   + //  0045e - 47
+            "ar"                      + //  00001 - 52
+            "ar-001"                  + //  01000 - 54
+            "ar-ae"                   + //  03801 - 60
+            "ar-bh"                   + //  03c01 - 65
+            "ar-dj"                   + //  01000 - 70
+            "ar-dz"                   + //  01401 - 75
+            "ar-eg"                   + //  00c01 - 80
+            "ar-er"                   + //  01000 - 85
+            "ar-il"                   + //  01000 - 90
+            "ar-iq"                   + //  00801 - 95
+            "ar-jo"                   + //  02c01 - 100
+            "ar-km"                   + //  01000 - 105
+            "ar-kw"                   + //  03401 - 110
+            "ar-lb"                   + //  03001 - 115
+            "ar-ly"                   + //  01001 - 120
+            "ar-ma"                   + //  01801 - 125
+            "ar-mr"                   + //  01000 - 130
+            "ar-om"                   + //  02001 - 135
+            "ar-ps"                   + //  01000 - 140
+            "ar-qa"                   + //  04001 - 145
+            "ar-sa"                   + //  00401 - 150
+            "ar-sd"                   + //  01000 - 155
+            "ar-so"                   + //  01000 - 160
+            "ar-ss"                   + //  01000 - 165
+            "ar-sy"                   + //  02801 - 170
+            "ar-td"                   + //  01000 - 175
+            "ar-tn"                   + //  01c01 - 180
+            "ar-ye"                   + //  02401 - 185
+            "arn"                     + //  0007a - 190
+            "arn-cl"                  + //  0047a - 193
+            "as"                      + //  0004d - 199
+            "as-in"                   + //  0044d - 201
+            "asa"                     + //  01000 - 206
+            "asa-tz"                  + //  01000 - 209
+            "ast"                     + //  01000 - 215
+            "ast-es"                  + //  01000 - 218
+            "az"                      + //  0002c - 224
+            "az-cyrl"                 + //  0742c - 226
+            "az-cyrl-az"              + //  0082c - 233
+            "az-latn"                 + //  0782c - 243
+            "az-latn-az"              + //  0042c - 250
+            "ba"                      + //  0006d - 260
+            "ba-ru"                   + //  0046d - 262
+            "bas"                     + //  01000 - 267
+            "bas-cm"                  + //  01000 - 270
+            "be"                      + //  00023 - 276
+            "be-by"                   + //  00423 - 278
+            "bem"                     + //  01000 - 283
+            "bem-zm"                  + //  01000 - 286
+            "bez"                     + //  01000 - 292
+            "bez-tz"                  + //  01000 - 295
+            "bg"                      + //  00002 - 301
+            "bg-bg"                   + //  00402 - 303
+            "bin"                     + //  00066 - 308
+            "bin-ng"                  + //  00466 - 311
+            "bm"                      + //  01000 - 317
+            "bm-latn"                 + //  01000 - 319
+            "bm-latn-ml"              + //  01000 - 326
+            "bn"                      + //  00045 - 336
+            "bn-bd"                   + //  00845 - 338
+            "bn-in"                   + //  00445 - 343
+            "bo"                      + //  00051 - 348
+            "bo-cn"                   + //  00451 - 350
+            "bo-in"                   + //  01000 - 355
+            "br"                      + //  0007e - 360
+            "br-fr"                   + //  0047e - 362
+            "brx"                     + //  01000 - 367
+            "brx-in"                  + //  01000 - 370
+            "bs"                      + //  0781a - 376
+            "bs-cyrl"                 + //  0641a - 378
+            "bs-cyrl-ba"              + //  0201a - 385
+            "bs-latn"                 + //  0681a - 395
+            "bs-latn-ba"              + //  0141a - 402
+            "byn"                     + //  01000 - 412
+            "byn-er"                  + //  01000 - 415
+            "ca"                      + //  00003 - 421
+            "ca-ad"                   + //  01000 - 423
+            "ca-es"                   + //  00403 - 428
+            "ca-es-valencia"          + //  00803 - 433
+            "ca-fr"                   + //  01000 - 447
+            "ca-it"                   + //  01000 - 452
+            "ce"                      + //  01000 - 457
+            "ce-ru"                   + //  01000 - 459
+            "cgg"                     + //  01000 - 464
+            "cgg-ug"                  + //  01000 - 467
+            "chr"                     + //  0005c - 473
+            "chr-cher"                + //  07c5c - 476
+            "chr-cher-us"             + //  0045c - 484
+            "co"                      + //  00083 - 495
+            "co-fr"                   + //  00483 - 497
+            "cs"                      + //  00005 - 502
+            "cs-cz"                   + //  00405 - 504
+            "cu"                      + //  01000 - 509
+            "cu-ru"                   + //  01000 - 511
+            "cy"                      + //  00052 - 516
+            "cy-gb"                   + //  00452 - 518
+            "da"                      + //  00006 - 523
+            "da-dk"                   + //  00406 - 525
+            "da-gl"                   + //  01000 - 530
+            "dav"                     + //  01000 - 535
+            "dav-ke"                  + //  01000 - 538
+            "de"                      + //  00007 - 544
+            "de-at"                   + //  00c07 - 546
+            "de-be"                   + //  01000 - 551
+            "de-ch"                   + //  00807 - 556
+            "de-de"                   + //  00407 - 561
+            "de-de_phoneb"            + //  10407 - 566
+            "de-it"                   + //  01000 - 578
+            "de-li"                   + //  01407 - 583
+            "de-lu"                   + //  01007 - 588
+            "dje"                     + //  01000 - 593
+            "dje-ne"                  + //  01000 - 596
+            "dsb"                     + //  07c2e - 602
+            "dsb-de"                  + //  0082e - 605
+            "dua"                     + //  01000 - 611
+            "dua-cm"                  + //  01000 - 614
+            "dv"                      + //  00065 - 620
+            "dv-mv"                   + //  00465 - 622
+            "dyo"                     + //  01000 - 627
+            "dyo-sn"                  + //  01000 - 630
+            "dz"                      + //  01000 - 636
+            "dz-bt"                   + //  00c51 - 638
+            "ebu"                     + //  01000 - 643
+            "ebu-ke"                  + //  01000 - 646
+            "ee"                      + //  01000 - 652
+            "ee-gh"                   + //  01000 - 654
+            "ee-tg"                   + //  01000 - 659
+            "el"                      + //  00008 - 664
+            "el-cy"                   + //  01000 - 666
+            "el-gr"                   + //  00408 - 671
+            "en"                      + //  00009 - 676
+            "en-001"                  + //  01000 - 678
+            "en-029"                  + //  02409 - 684
+            "en-150"                  + //  01000 - 690
+            "en-ag"                   + //  01000 - 696
+            "en-ai"                   + //  01000 - 701
+            "en-as"                   + //  01000 - 706
+            "en-at"                   + //  01000 - 711
+            "en-au"                   + //  00c09 - 716
+            "en-bb"                   + //  01000 - 721
+            "en-be"                   + //  01000 - 726
+            "en-bi"                   + //  01000 - 731
+            "en-bm"                   + //  01000 - 736
+            "en-bs"                   + //  01000 - 741
+            "en-bw"                   + //  01000 - 746
+            "en-bz"                   + //  02809 - 751
+            "en-ca"                   + //  01009 - 756
+            "en-cc"                   + //  01000 - 761
+            "en-ch"                   + //  01000 - 766
+            "en-ck"                   + //  01000 - 771
+            "en-cm"                   + //  01000 - 776
+            "en-cx"                   + //  01000 - 781
+            "en-cy"                   + //  01000 - 786
+            "en-de"                   + //  01000 - 791
+            "en-dk"                   + //  01000 - 796
+            "en-dm"                   + //  01000 - 801
+            "en-er"                   + //  01000 - 806
+            "en-fi"                   + //  01000 - 811
+            "en-fj"                   + //  01000 - 816
+            "en-fk"                   + //  01000 - 821
+            "en-fm"                   + //  01000 - 826
+            "en-gb"                   + //  00809 - 831
+            "en-gd"                   + //  01000 - 836
+            "en-gg"                   + //  01000 - 841
+            "en-gh"                   + //  01000 - 846
+            "en-gi"                   + //  01000 - 851
+            "en-gm"                   + //  01000 - 856
+            "en-gu"                   + //  01000 - 861
+            "en-gy"                   + //  01000 - 866
+            "en-hk"                   + //  03c09 - 871
+            "en-id"                   + //  03809 - 876
+            "en-ie"                   + //  01809 - 881
+            "en-il"                   + //  01000 - 886
+            "en-im"                   + //  01000 - 891
+            "en-in"                   + //  04009 - 896
+            "en-io"                   + //  01000 - 901
+            "en-je"                   + //  01000 - 906
+            "en-jm"                   + //  02009 - 911
+            "en-ke"                   + //  01000 - 916
+            "en-ki"                   + //  01000 - 921
+            "en-kn"                   + //  01000 - 926
+            "en-ky"                   + //  01000 - 931
+            "en-lc"                   + //  01000 - 936
+            "en-lr"                   + //  01000 - 941
+            "en-ls"                   + //  01000 - 946
+            "en-mg"                   + //  01000 - 951
+            "en-mh"                   + //  01000 - 956
+            "en-mo"                   + //  01000 - 961
+            "en-mp"                   + //  01000 - 966
+            "en-ms"                   + //  01000 - 971
+            "en-mt"                   + //  01000 - 976
+            "en-mu"                   + //  01000 - 981
+            "en-mw"                   + //  01000 - 986
+            "en-my"                   + //  04409 - 991
+            "en-na"                   + //  01000 - 996
+            "en-nf"                   + //  01000 - 1001
+            "en-ng"                   + //  01000 - 1006
+            "en-nl"                   + //  01000 - 1011
+            "en-nr"                   + //  01000 - 1016
+            "en-nu"                   + //  01000 - 1021
+            "en-nz"                   + //  01409 - 1026
+            "en-pg"                   + //  01000 - 1031
+            "en-ph"                   + //  03409 - 1036
+            "en-pk"                   + //  01000 - 1041
+            "en-pn"                   + //  01000 - 1046
+            "en-pr"                   + //  01000 - 1051
+            "en-pw"                   + //  01000 - 1056
+            "en-rw"                   + //  01000 - 1061
+            "en-sb"                   + //  01000 - 1066
+            "en-sc"                   + //  01000 - 1071
+            "en-sd"                   + //  01000 - 1076
+            "en-se"                   + //  01000 - 1081
+            "en-sg"                   + //  04809 - 1086
+            "en-sh"                   + //  01000 - 1091
+            "en-si"                   + //  01000 - 1096
+            "en-sl"                   + //  01000 - 1101
+            "en-ss"                   + //  01000 - 1106
+            "en-sx"                   + //  01000 - 1111
+            "en-sz"                   + //  01000 - 1116
+            "en-tc"                   + //  01000 - 1121
+            "en-tk"                   + //  01000 - 1126
+            "en-to"                   + //  01000 - 1131
+            "en-tt"                   + //  02c09 - 1136
+            "en-tv"                   + //  01000 - 1141
+            "en-tz"                   + //  01000 - 1146
+            "en-ug"                   + //  01000 - 1151
+            "en-um"                   + //  01000 - 1156
+            "en-us"                   + //  00409 - 1161
+            "en-vc"                   + //  01000 - 1166
+            "en-vg"                   + //  01000 - 1171
+            "en-vi"                   + //  01000 - 1176
+            "en-vu"                   + //  01000 - 1181
+            "en-ws"                   + //  01000 - 1186
+            "en-za"                   + //  01c09 - 1191
+            "en-zm"                   + //  01000 - 1196
+            "en-zw"                   + //  03009 - 1201
+            "eo"                      + //  01000 - 1206
+            "eo-001"                  + //  01000 - 1208
+            "es"                      + //  0000a - 1214
+            "es-419"                  + //  0580a - 1216
+            "es-ar"                   + //  02c0a - 1222
+            "es-bo"                   + //  0400a - 1227
+            "es-br"                   + //  01000 - 1232
+            "es-cl"                   + //  0340a - 1237
+            "es-co"                   + //  0240a - 1242
+            "es-cr"                   + //  0140a - 1247
+            "es-cu"                   + //  05c0a - 1252
+            "es-do"                   + //  01c0a - 1257
+            "es-ec"                   + //  0300a - 1262
+            "es-es"                   + //  00c0a - 1267
+            "es-es_tradnl"            + //  0040a - 1272
+            "es-gq"                   + //  01000 - 1284
+            "es-gt"                   + //  0100a - 1289
+            "es-hn"                   + //  0480a - 1294
+            "es-mx"                   + //  0080a - 1299
+            "es-ni"                   + //  04c0a - 1304
+            "es-pa"                   + //  0180a - 1309
+            "es-pe"                   + //  0280a - 1314
+            "es-ph"                   + //  01000 - 1319
+            "es-pr"                   + //  0500a - 1324
+            "es-py"                   + //  03c0a - 1329
+            "es-sv"                   + //  0440a - 1334
+            "es-us"                   + //  0540a - 1339
+            "es-uy"                   + //  0380a - 1344
+            "es-ve"                   + //  0200a - 1349
+            "et"                      + //  00025 - 1354
+            "et-ee"                   + //  00425 - 1356
+            "eu"                      + //  0002d - 1361
+            "eu-es"                   + //  0042d - 1363
+            "ewo"                     + //  01000 - 1368
+            "ewo-cm"                  + //  01000 - 1371
+            "fa"                      + //  00029 - 1377
+            "fa-ir"                   + //  00429 - 1379
+            "ff"                      + //  00067 - 1384
+            "ff-cm"                   + //  01000 - 1386
+            "ff-gn"                   + //  01000 - 1391
+            "ff-latn"                 + //  07c67 - 1396
+            "ff-latn-sn"              + //  00867 - 1403
+            "ff-mr"                   + //  01000 - 1413
+            "ff-ng"                   + //  00467 - 1418
+            "fi"                      + //  0000b - 1423
+            "fi-fi"                   + //  0040b - 1425
+            "fil"                     + //  00064 - 1430
+            "fil-ph"                  + //  00464 - 1433
+            "fo"                      + //  00038 - 1439
+            "fo-dk"                   + //  01000 - 1441
+            "fo-fo"                   + //  00438 - 1446
+            "fr"                      + //  0000c - 1451
+            "fr-029"                  + //  01c0c - 1453
+            "fr-be"                   + //  0080c - 1459
+            "fr-bf"                   + //  01000 - 1464
+            "fr-bi"                   + //  01000 - 1469
+            "fr-bj"                   + //  01000 - 1474
+            "fr-bl"                   + //  01000 - 1479
+            "fr-ca"                   + //  00c0c - 1484
+            "fr-cd"                   + //  0240c - 1489
+            "fr-cf"                   + //  01000 - 1494
+            "fr-cg"                   + //  01000 - 1499
+            "fr-ch"                   + //  0100c - 1504
+            "fr-ci"                   + //  0300c - 1509
+            "fr-cm"                   + //  02c0c - 1514
+            "fr-dj"                   + //  01000 - 1519
+            "fr-dz"                   + //  01000 - 1524
+            "fr-fr"                   + //  0040c - 1529
+            "fr-ga"                   + //  01000 - 1534
+            "fr-gf"                   + //  01000 - 1539
+            "fr-gn"                   + //  01000 - 1544
+            "fr-gp"                   + //  01000 - 1549
+            "fr-gq"                   + //  01000 - 1554
+            "fr-ht"                   + //  03c0c - 1559
+            "fr-km"                   + //  01000 - 1564
+            "fr-lu"                   + //  0140c - 1569
+            "fr-ma"                   + //  0380c - 1574
+            "fr-mc"                   + //  0180c - 1579
+            "fr-mf"                   + //  01000 - 1584
+            "fr-mg"                   + //  01000 - 1589
+            "fr-ml"                   + //  0340c - 1594
+            "fr-mq"                   + //  01000 - 1599
+            "fr-mr"                   + //  01000 - 1604
+            "fr-mu"                   + //  01000 - 1609
+            "fr-nc"                   + //  01000 - 1614
+            "fr-ne"                   + //  01000 - 1619
+            "fr-pf"                   + //  01000 - 1624
+            "fr-pm"                   + //  01000 - 1629
+            "fr-re"                   + //  0200c - 1634
+            "fr-rw"                   + //  01000 - 1639
+            "fr-sc"                   + //  01000 - 1644
+            "fr-sn"                   + //  0280c - 1649
+            "fr-sy"                   + //  01000 - 1654
+            "fr-td"                   + //  01000 - 1659
+            "fr-tg"                   + //  01000 - 1664
+            "fr-tn"                   + //  01000 - 1669
+            "fr-vu"                   + //  01000 - 1674
+            "fr-wf"                   + //  01000 - 1679
+            "fr-yt"                   + //  01000 - 1684
+            "fur"                     + //  01000 - 1689
+            "fur-it"                  + //  01000 - 1692
+            "fy"                      + //  00062 - 1698
+            "fy-nl"                   + //  00462 - 1700
+            "ga"                      + //  0003c - 1705
+            "ga-ie"                   + //  0083c - 1707
+            "gd"                      + //  00091 - 1712
+            "gd-gb"                   + //  00491 - 1714
+            "gl"                      + //  00056 - 1719
+            "gl-es"                   + //  00456 - 1721
+            "gn"                      + //  00074 - 1726
+            "gn-py"                   + //  00474 - 1728
+            "gsw"                     + //  00084 - 1733
+            "gsw-ch"                  + //  01000 - 1736
+            "gsw-fr"                  + //  00484 - 1742
+            "gsw-li"                  + //  01000 - 1748
+            "gu"                      + //  00047 - 1754
+            "gu-in"                   + //  00447 - 1756
+            "guz"                     + //  01000 - 1761
+            "guz-ke"                  + //  01000 - 1764
+            "gv"                      + //  01000 - 1770
+            "gv-im"                   + //  01000 - 1772
+            "ha"                      + //  00068 - 1777
+            "ha-latn"                 + //  07c68 - 1779
+            "ha-latn-gh"              + //  01000 - 1786
+            "ha-latn-ne"              + //  01000 - 1796
+            "ha-latn-ng"              + //  00468 - 1806
+            "haw"                     + //  00075 - 1816
+            "haw-us"                  + //  00475 - 1819
+            "he"                      + //  0000d - 1825
+            "he-il"                   + //  0040d - 1827
+            "hi"                      + //  00039 - 1832
+            "hi-in"                   + //  00439 - 1834
+            "hr"                      + //  0001a - 1839
+            "hr-ba"                   + //  0101a - 1841
+            "hr-hr"                   + //  0041a - 1846
+            "hsb"                     + //  0002e - 1851
+            "hsb-de"                  + //  0042e - 1854
+            "hu"                      + //  0000e - 1860
+            "hu-hu"                   + //  0040e - 1862
+            "hu-hu_technl"            + //  1040e - 1867
+            "hy"                      + //  0002b - 1879
+            "hy-am"                   + //  0042b - 1881
+            "ia"                      + //  01000 - 1886
+            "ia-001"                  + //  01000 - 1888
+            "ia-fr"                   + //  01000 - 1894
+            "ibb"                     + //  00069 - 1899
+            "ibb-ng"                  + //  00469 - 1902
+            "id"                      + //  00021 - 1908
+            "id-id"                   + //  00421 - 1910
+            "ig"                      + //  00070 - 1915
+            "ig-ng"                   + //  00470 - 1917
+            "ii"                      + //  00078 - 1922
+            "ii-cn"                   + //  00478 - 1924
+            "is"                      + //  0000f - 1929
+            "is-is"                   + //  0040f - 1931
+            "it"                      + //  00010 - 1936
+            "it-ch"                   + //  00810 - 1938
+            "it-it"                   + //  00410 - 1943
+            "it-sm"                   + //  01000 - 1948
+            "iu"                      + //  0005d - 1953
+            "iu-cans"                 + //  0785d - 1955
+            "iu-cans-ca"              + //  0045d - 1962
+            "iu-latn"                 + //  07c5d - 1972
+            "iu-latn-ca"              + //  0085d - 1979
+            "ja"                      + //  00011 - 1989
+            "ja-jp"                   + //  00411 - 1991
+            "ja-jp_radstr"            + //  40411 - 1996
+            "jgo"                     + //  01000 - 2008
+            "jgo-cm"                  + //  01000 - 2011
+            "jmc"                     + //  01000 - 2017
+            "jmc-tz"                  + //  01000 - 2020
+            "jv"                      + //  01000 - 2026
+            "jv-java"                 + //  01000 - 2028
+            "jv-java-id"              + //  01000 - 2035
+            "jv-latn"                 + //  01000 - 2045
+            "jv-latn-id"              + //  01000 - 2052
+            "ka"                      + //  00037 - 2062
+            "ka-ge"                   + //  00437 - 2064
+            "ka-ge_modern"            + //  10437 - 2069
+            "kab"                     + //  01000 - 2081
+            "kab-dz"                  + //  01000 - 2084
+            "kam"                     + //  01000 - 2090
+            "kam-ke"                  + //  01000 - 2093
+            "kde"                     + //  01000 - 2099
+            "kde-tz"                  + //  01000 - 2102
+            "kea"                     + //  01000 - 2108
+            "kea-cv"                  + //  01000 - 2111
+            "khq"                     + //  01000 - 2117
+            "khq-ml"                  + //  01000 - 2120
+            "ki"                      + //  01000 - 2126
+            "ki-ke"                   + //  01000 - 2128
+            "kk"                      + //  0003f - 2133
+            "kk-kz"                   + //  0043f - 2135
+            "kkj"                     + //  01000 - 2140
+            "kkj-cm"                  + //  01000 - 2143
+            "kl"                      + //  0006f - 2149
+            "kl-gl"                   + //  0046f - 2151
+            "kln"                     + //  01000 - 2156
+            "kln-ke"                  + //  01000 - 2159
+            "km"                      + //  00053 - 2165
+            "km-kh"                   + //  00453 - 2167
+            "kn"                      + //  0004b - 2172
+            "kn-in"                   + //  0044b - 2174
+            "ko"                      + //  00012 - 2179
+            "ko-kp"                   + //  01000 - 2181
+            "ko-kr"                   + //  00412 - 2186
+            "kok"                     + //  00057 - 2191
+            "kok-in"                  + //  00457 - 2194
+            "kr"                      + //  00071 - 2200
+            "kr-ng"                   + //  00471 - 2202
+            "ks"                      + //  00060 - 2207
+            "ks-arab"                 + //  00460 - 2209
+            "ks-arab-in"              + //  01000 - 2216
+            "ks-deva"                 + //  01000 - 2226
+            "ks-deva-in"              + //  00860 - 2233
+            "ksb"                     + //  01000 - 2243
+            "ksb-tz"                  + //  01000 - 2246
+            "ksf"                     + //  01000 - 2252
+            "ksf-cm"                  + //  01000 - 2255
+            "ksh"                     + //  01000 - 2261
+            "ksh-de"                  + //  01000 - 2264
+            "ku"                      + //  00092 - 2270
+            "ku-arab"                 + //  07c92 - 2272
+            "ku-arab-iq"              + //  00492 - 2279
+            "ku-arab-ir"              + //  01000 - 2289
+            "kw"                      + //  01000 - 2299
+            "kw-gb"                   + //  01000 - 2301
+            "ky"                      + //  00040 - 2306
+            "ky-kg"                   + //  00440 - 2308
+            "la"                      + //  00076 - 2313
+            "la-001"                  + //  00476 - 2315
+            "lag"                     + //  01000 - 2321
+            "lag-tz"                  + //  01000 - 2324
+            "lb"                      + //  0006e - 2330
+            "lb-lu"                   + //  0046e - 2332
+            "lg"                      + //  01000 - 2337
+            "lg-ug"                   + //  01000 - 2339
+            "lkt"                     + //  01000 - 2344
+            "lkt-us"                  + //  01000 - 2347
+            "ln"                      + //  01000 - 2353
+            "ln-ao"                   + //  01000 - 2355
+            "ln-cd"                   + //  01000 - 2360
+            "ln-cf"                   + //  01000 - 2365
+            "ln-cg"                   + //  01000 - 2370
+            "lo"                      + //  00054 - 2375
+            "lo-la"                   + //  00454 - 2377
+            "lrc"                     + //  01000 - 2382
+            "lrc-iq"                  + //  01000 - 2385
+            "lrc-ir"                  + //  01000 - 2391
+            "lt"                      + //  00027 - 2397
+            "lt-lt"                   + //  00427 - 2399
+            "lu"                      + //  01000 - 2404
+            "lu-cd"                   + //  01000 - 2406
+            "luo"                     + //  01000 - 2411
+            "luo-ke"                  + //  01000 - 2414
+            "luy"                     + //  01000 - 2420
+            "luy-ke"                  + //  01000 - 2423
+            "lv"                      + //  00026 - 2429
+            "lv-lv"                   + //  00426 - 2431
+            "mas"                     + //  01000 - 2436
+            "mas-ke"                  + //  01000 - 2439
+            "mas-tz"                  + //  01000 - 2445
+            "mer"                     + //  01000 - 2451
+            "mer-ke"                  + //  01000 - 2454
+            "mfe"                     + //  01000 - 2460
+            "mfe-mu"                  + //  01000 - 2463
+            "mg"                      + //  01000 - 2469
+            "mg-mg"                   + //  01000 - 2471
+            "mgh"                     + //  01000 - 2476
+            "mgh-mz"                  + //  01000 - 2479
+            "mgo"                     + //  01000 - 2485
+            "mgo-cm"                  + //  01000 - 2488
+            "mi"                      + //  00081 - 2494
+            "mi-nz"                   + //  00481 - 2496
+            "mk"                      + //  0002f - 2501
+            "mk-mk"                   + //  0042f - 2503
+            "ml"                      + //  0004c - 2508
+            "ml-in"                   + //  0044c - 2510
+            "mn"                      + //  00050 - 2515
+            "mn-cyrl"                 + //  07850 - 2517
+            "mn-mn"                   + //  00450 - 2524
+            "mn-mong"                 + //  07c50 - 2529
+            "mn-mong-cn"              + //  00850 - 2536
+            "mn-mong-mn"              + //  00c50 - 2546
+            "mni"                     + //  00058 - 2556
+            "mni-in"                  + //  00458 - 2559
+            "moh"                     + //  0007c - 2565
+            "moh-ca"                  + //  0047c - 2568
+            "mr"                      + //  0004e - 2574
+            "mr-in"                   + //  0044e - 2576
+            "ms"                      + //  0003e - 2581
+            "ms-bn"                   + //  0083e - 2583
+            "ms-my"                   + //  0043e - 2588
+            "ms-sg"                   + //  01000 - 2593
+            "mt"                      + //  0003a - 2598
+            "mt-mt"                   + //  0043a - 2600
+            "mua"                     + //  01000 - 2605
+            "mua-cm"                  + //  01000 - 2608
+            "my"                      + //  00055 - 2614
+            "my-mm"                   + //  00455 - 2616
+            "mzn"                     + //  01000 - 2621
+            "mzn-ir"                  + //  01000 - 2624
+            "naq"                     + //  01000 - 2630
+            "naq-na"                  + //  01000 - 2633
+            "nb"                      + //  07c14 - 2639
+            "nb-no"                   + //  00414 - 2641
+            "nb-sj"                   + //  01000 - 2646
+            "nd"                      + //  01000 - 2651
+            "nd-zw"                   + //  01000 - 2653
+            "nds"                     + //  01000 - 2658
+            "nds-de"                  + //  01000 - 2661
+            "nds-nl"                  + //  01000 - 2667
+            "ne"                      + //  00061 - 2673
+            "ne-in"                   + //  00861 - 2675
+            "ne-np"                   + //  00461 - 2680
+            "nl"                      + //  00013 - 2685
+            "nl-aw"                   + //  01000 - 2687
+            "nl-be"                   + //  00813 - 2692
+            "nl-bq"                   + //  01000 - 2697
+            "nl-cw"                   + //  01000 - 2702
+            "nl-nl"                   + //  00413 - 2707
+            "nl-sr"                   + //  01000 - 2712
+            "nl-sx"                   + //  01000 - 2717
+            "nmg"                     + //  01000 - 2722
+            "nmg-cm"                  + //  01000 - 2725
+            "nn"                      + //  07814 - 2731
+            "nn-no"                   + //  00814 - 2733
+            "nnh"                     + //  01000 - 2738
+            "nnh-cm"                  + //  01000 - 2741
+            "no"                      + //  00014 - 2747
+            "nqo"                     + //  01000 - 2749
+            "nqo-gn"                  + //  01000 - 2752
+            "nr"                      + //  01000 - 2758
+            "nr-za"                   + //  01000 - 2760
+            "nso"                     + //  0006c - 2765
+            "nso-za"                  + //  0046c - 2768
+            "nus"                     + //  01000 - 2774
+            "nus-ss"                  + //  01000 - 2777
+            "nyn"                     + //  01000 - 2783
+            "nyn-ug"                  + //  01000 - 2786
+            "oc"                      + //  00082 - 2792
+            "oc-fr"                   + //  00482 - 2794
+            "om"                      + //  00072 - 2799
+            "om-et"                   + //  00472 - 2801
+            "om-ke"                   + //  01000 - 2806
+            "or"                      + //  00048 - 2811
+            "or-in"                   + //  00448 - 2813
+            "os"                      + //  01000 - 2818
+            "os-ge"                   + //  01000 - 2820
+            "os-ru"                   + //  01000 - 2825
+            "pa"                      + //  00046 - 2830
+            "pa-arab"                 + //  07c46 - 2832
+            "pa-arab-pk"              + //  00846 - 2839
+            "pa-in"                   + //  00446 - 2849
+            "pap"                     + //  00079 - 2854
+            "pap-029"                 + //  00479 - 2857
+            "pl"                      + //  00015 - 2864
+            "pl-pl"                   + //  00415 - 2866
+            "prg"                     + //  01000 - 2871
+            "prg-001"                 + //  01000 - 2874
+            "prs"                     + //  0008c - 2881
+            "prs-af"                  + //  0048c - 2884
+            "ps"                      + //  00063 - 2890
+            "ps-af"                   + //  00463 - 2892
+            "pt"                      + //  00016 - 2897
+            "pt-ao"                   + //  01000 - 2899
+            "pt-br"                   + //  00416 - 2904
+            "pt-ch"                   + //  01000 - 2909
+            "pt-cv"                   + //  01000 - 2914
+            "pt-gq"                   + //  01000 - 2919
+            "pt-gw"                   + //  01000 - 2924
+            "pt-lu"                   + //  01000 - 2929
+            "pt-mo"                   + //  01000 - 2934
+            "pt-mz"                   + //  01000 - 2939
+            "pt-pt"                   + //  00816 - 2944
+            "pt-st"                   + //  01000 - 2949
+            "pt-tl"                   + //  01000 - 2954
+            "qps-latn-x-sh"           + //  00901 - 2959
+            "qps-ploc"                + //  00501 - 2972
+            "qps-ploca"               + //  005fe - 2980
+            "qps-plocm"               + //  009ff - 2989
+            "quc"                     + //  00086 - 2998
+            "quc-latn"                + //  07c86 - 3001
+            "quc-latn-gt"             + //  00486 - 3009
+            "quz"                     + //  0006b - 3020
+            "quz-bo"                  + //  0046b - 3023
+            "quz-ec"                  + //  0086b - 3029
+            "quz-pe"                  + //  00c6b - 3035
+            "rm"                      + //  00017 - 3041
+            "rm-ch"                   + //  00417 - 3043
+            "rn"                      + //  01000 - 3048
+            "rn-bi"                   + //  01000 - 3050
+            "ro"                      + //  00018 - 3055
+            "ro-md"                   + //  00818 - 3057
+            "ro-ro"                   + //  00418 - 3062
+            "rof"                     + //  01000 - 3067
+            "rof-tz"                  + //  01000 - 3070
+            "ru"                      + //  00019 - 3076
+            "ru-by"                   + //  01000 - 3078
+            "ru-kg"                   + //  01000 - 3083
+            "ru-kz"                   + //  01000 - 3088
+            "ru-md"                   + //  00819 - 3093
+            "ru-ru"                   + //  00419 - 3098
+            "ru-ua"                   + //  01000 - 3103
+            "rw"                      + //  00087 - 3108
+            "rw-rw"                   + //  00487 - 3110
+            "rwk"                     + //  01000 - 3115
+            "rwk-tz"                  + //  01000 - 3118
+            "sa"                      + //  0004f - 3124
+            "sa-in"                   + //  0044f - 3126
+            "sah"                     + //  00085 - 3131
+            "sah-ru"                  + //  00485 - 3134
+            "saq"                     + //  01000 - 3140
+            "saq-ke"                  + //  01000 - 3143
+            "sbp"                     + //  01000 - 3149
+            "sbp-tz"                  + //  01000 - 3152
+            "sd"                      + //  00059 - 3158
+            "sd-arab"                 + //  07c59 - 3160
+            "sd-arab-pk"              + //  00859 - 3167
+            "sd-deva"                 + //  01000 - 3177
+            "sd-deva-in"              + //  00459 - 3184
+            "se"                      + //  0003b - 3194
+            "se-fi"                   + //  00c3b - 3196
+            "se-no"                   + //  0043b - 3201
+            "se-se"                   + //  0083b - 3206
+            "seh"                     + //  01000 - 3211
+            "seh-mz"                  + //  01000 - 3214
+            "ses"                     + //  01000 - 3220
+            "ses-ml"                  + //  01000 - 3223
+            "sg"                      + //  01000 - 3229
+            "sg-cf"                   + //  01000 - 3231
+            "shi"                     + //  01000 - 3236
+            "shi-latn"                + //  01000 - 3239
+            "shi-latn-ma"             + //  01000 - 3247
+            "shi-tfng"                + //  01000 - 3258
+            "shi-tfng-ma"             + //  01000 - 3266
+            "si"                      + //  0005b - 3277
+            "si-lk"                   + //  0045b - 3279
+            "sk"                      + //  0001b - 3284
+            "sk-sk"                   + //  0041b - 3286
+            "sl"                      + //  00024 - 3291
+            "sl-si"                   + //  00424 - 3293
+            "sma"                     + //  0783b - 3298
+            "sma-no"                  + //  0183b - 3301
+            "sma-se"                  + //  01c3b - 3307
+            "smj"                     + //  07c3b - 3313
+            "smj-no"                  + //  0103b - 3316
+            "smj-se"                  + //  0143b - 3322
+            "smn"                     + //  0703b - 3328
+            "smn-fi"                  + //  0243b - 3331
+            "sms"                     + //  0743b - 3337
+            "sms-fi"                  + //  0203b - 3340
+            "sn"                      + //  01000 - 3346
+            "sn-latn"                 + //  01000 - 3348
+            "sn-latn-zw"              + //  01000 - 3355
+            "so"                      + //  00077 - 3365
+            "so-dj"                   + //  01000 - 3367
+            "so-et"                   + //  01000 - 3372
+            "so-ke"                   + //  01000 - 3377
+            "so-so"                   + //  00477 - 3382
+            "sq"                      + //  0001c - 3387
+            "sq-al"                   + //  0041c - 3389
+            "sq-mk"                   + //  01000 - 3394
+            "sq-xk"                   + //  01000 - 3399
+            "sr"                      + //  07c1a - 3404
+            "sr-cyrl"                 + //  06c1a - 3406
+            "sr-cyrl-ba"              + //  01c1a - 3413
+            "sr-cyrl-cs"              + //  00c1a - 3423
+            "sr-cyrl-me"              + //  0301a - 3433
+            "sr-cyrl-rs"              + //  0281a - 3443
+            "sr-cyrl-xk"              + //  01000 - 3453
+            "sr-latn"                 + //  0701a - 3463
+            "sr-latn-ba"              + //  0181a - 3470
+            "sr-latn-cs"              + //  0081a - 3480
+            "sr-latn-me"              + //  02c1a - 3490
+            "sr-latn-rs"              + //  0241a - 3500
+            "sr-latn-xk"              + //  01000 - 3510
+            "ss"                      + //  01000 - 3520
+            "ss-sz"                   + //  01000 - 3522
+            "ss-za"                   + //  01000 - 3527
+            "ssy"                     + //  01000 - 3532
+            "ssy-er"                  + //  01000 - 3535
+            "st"                      + //  00030 - 3541
+            "st-ls"                   + //  01000 - 3543
+            "st-za"                   + //  00430 - 3548
+            "sv"                      + //  0001d - 3553
+            "sv-ax"                   + //  01000 - 3555
+            "sv-fi"                   + //  0081d - 3560
+            "sv-se"                   + //  0041d - 3565
+            "sw"                      + //  00041 - 3570
+            "sw-cd"                   + //  01000 - 3572
+            "sw-ke"                   + //  00441 - 3577
+            "sw-tz"                   + //  01000 - 3582
+            "sw-ug"                   + //  01000 - 3587
+            "swc"                     + //  01000 - 3592
+            "swc-cd"                  + //  01000 - 3595
+            "syr"                     + //  0005a - 3601
+            "syr-sy"                  + //  0045a - 3604
+            "ta"                      + //  00049 - 3610
+            "ta-in"                   + //  00449 - 3612
+            "ta-lk"                   + //  00849 - 3617
+            "ta-my"                   + //  01000 - 3622
+            "ta-sg"                   + //  01000 - 3627
+            "te"                      + //  0004a - 3632
+            "te-in"                   + //  0044a - 3634
+            "teo"                     + //  01000 - 3639
+            "teo-ke"                  + //  01000 - 3642
+            "teo-ug"                  + //  01000 - 3648
+            "tg"                      + //  00028 - 3654
+            "tg-cyrl"                 + //  07c28 - 3656
+            "tg-cyrl-tj"              + //  00428 - 3663
+            "th"                      + //  0001e - 3673
+            "th-th"                   + //  0041e - 3675
+            "ti"                      + //  00073 - 3680
+            "ti-er"                   + //  00873 - 3682
+            "ti-et"                   + //  00473 - 3687
+            "tig"                     + //  01000 - 3692
+            "tig-er"                  + //  01000 - 3695
+            "tk"                      + //  00042 - 3701
+            "tk-tm"                   + //  00442 - 3703
+            "tn"                      + //  00032 - 3708
+            "tn-bw"                   + //  00832 - 3710
+            "tn-za"                   + //  00432 - 3715
+            "to"                      + //  01000 - 3720
+            "to-to"                   + //  01000 - 3722
+            "tr"                      + //  0001f - 3727
+            "tr-cy"                   + //  01000 - 3729
+            "tr-tr"                   + //  0041f - 3734
+            "ts"                      + //  00031 - 3739
+            "ts-za"                   + //  00431 - 3741
+            "tt"                      + //  00044 - 3746
+            "tt-ru"                   + //  00444 - 3748
+            "twq"                     + //  01000 - 3753
+            "twq-ne"                  + //  01000 - 3756
+            "tzm"                     + //  0005f - 3762
+            "tzm-arab"                + //  01000 - 3765
+            "tzm-arab-ma"             + //  0045f - 3773
+            "tzm-latn"                + //  07c5f - 3784
+            "tzm-latn-dz"             + //  0085f - 3792
+            "tzm-latn-ma"             + //  01000 - 3803
+            "tzm-tfng"                + //  0785f - 3814
+            "tzm-tfng-ma"             + //  0105f - 3822
+            "ug"                      + //  00080 - 3833
+            "ug-cn"                   + //  00480 - 3835
+            "uk"                      + //  00022 - 3840
+            "uk-ua"                   + //  00422 - 3842
+            "ur"                      + //  00020 - 3847
+            "ur-in"                   + //  00820 - 3849
+            "ur-pk"                   + //  00420 - 3854
+            "uz"                      + //  00043 - 3859
+            "uz-arab"                 + //  01000 - 3861
+            "uz-arab-af"              + //  01000 - 3868
+            "uz-cyrl"                 + //  07843 - 3878
+            "uz-cyrl-uz"              + //  00843 - 3885
+            "uz-latn"                 + //  07c43 - 3895
+            "uz-latn-uz"              + //  00443 - 3902
+            "vai"                     + //  01000 - 3912
+            "vai-latn"                + //  01000 - 3915
+            "vai-latn-lr"             + //  01000 - 3923
+            "vai-vaii"                + //  01000 - 3934
+            "vai-vaii-lr"             + //  01000 - 3942
+            "ve"                      + //  00033 - 3953
+            "ve-za"                   + //  00433 - 3955
+            "vi"                      + //  0002a - 3960
+            "vi-vn"                   + //  0042a - 3962
+            "vo"                      + //  01000 - 3967
+            "vo-001"                  + //  01000 - 3969
+            "vun"                     + //  01000 - 3975
+            "vun-tz"                  + //  01000 - 3978
+            "wae"                     + //  01000 - 3984
+            "wae-ch"                  + //  01000 - 3987
+            "wal"                     + //  01000 - 3993
+            "wal-et"                  + //  01000 - 3996
+            "wo"                      + //  00088 - 4002
+            "wo-sn"                   + //  00488 - 4004
+            "x-iv_mathan"             + //  1007f - 4009
+            "xh"                      + //  00034 - 4020
+            "xh-za"                   + //  00434 - 4022
+            "xog"                     + //  01000 - 4027
+            "xog-ug"                  + //  01000 - 4030
+            "yav"                     + //  01000 - 4036
+            "yav-cm"                  + //  01000 - 4039
+            "yi"                      + //  0003d - 4045
+            "yi-001"                  + //  0043d - 4047
+            "yo"                      + //  0006a - 4053
+            "yo-bj"                   + //  01000 - 4055
+            "yo-ng"                   + //  0046a - 4060
+            "yue"                     + //  01000 - 4065
+            "yue-hk"                  + //  01000 - 4068
+            "zgh"                     + //  01000 - 4074
+            "zgh-tfng"                + //  01000 - 4077
+            "zgh-tfng-ma"             + //  01000 - 4085
+            "zh"                      + //  07804 - 4096
+            "zh-chs"                  + //  00004 - 4098
+            "zh-cht"                  + //  07c04 - 4104
+            "zh-cn"                   + //  00804 - 4110
+            "zh-cn_phoneb"            + //  50804 - 4115
+            "zh-cn_stroke"            + //  20804 - 4127
+            "zh-hans"                 + //  00004 - 4139
+            "zh-hans-hk"              + //  01000 - 4146
+            "zh-hans-mo"              + //  01000 - 4156
+            "zh-hant"                 + //  07c04 - 4166
+            "zh-hk"                   + //  00c04 - 4173
+            "zh-hk_radstr"            + //  40c04 - 4178
+            "zh-mo"                   + //  01404 - 4190
+            "zh-mo_radstr"            + //  41404 - 4195
+            "zh-mo_stroke"            + //  21404 - 4207
+            "zh-sg"                   + //  01004 - 4219
+            "zh-sg_phoneb"            + //  51004 - 4224
+            "zh-sg_stroke"            + //  21004 - 4236
+            "zh-tw"                   + //  00404 - 4248
+            "zh-tw_pronun"            + //  30404 - 4253
+            "zh-tw_radstr"            + //  40404 - 4265
+            "zu"                      + //  00035 - 4277
+            "zu-za";                    //  00435 - 4279
+        // s_localeNamesIndices contains the start index of every culture name in the string
+        // s_localeNames. We infer the length of each string by looking at the start index
+        // of the next string.
+        private static readonly int[] s_localeNamesIndices = new int[]
+        {
+            // c_localeNames index, // index to this array - culture name
+            0   , // 0    - aa
+            2   , // 1    - aa-dj
+            7   , // 2    - aa-er
+            12  , // 3    - aa-et
+            17  , // 4    - af
+            19  , // 5    - af-na
+            24  , // 6    - af-za
+            29  , // 7    - agq
+            32  , // 8    - agq-cm
+            38  , // 9    - ak
+            40  , // 10   - ak-gh
+            45  , // 11   - am
+            47  , // 12   - am-et
+            52  , // 13   - ar
+            54  , // 14   - ar-001
+            60  , // 15   - ar-ae
+            65  , // 16   - ar-bh
+            70  , // 17   - ar-dj
+            75  , // 18   - ar-dz
+            80  , // 19   - ar-eg
+            85  , // 20   - ar-er
+            90  , // 21   - ar-il
+            95  , // 22   - ar-iq
+            100 , // 23   - ar-jo
+            105 , // 24   - ar-km
+            110 , // 25   - ar-kw
+            115 , // 26   - ar-lb
+            120 , // 27   - ar-ly
+            125 , // 28   - ar-ma
+            130 , // 29   - ar-mr
+            135 , // 30   - ar-om
+            140 , // 31   - ar-ps
+            145 , // 32   - ar-qa
+            150 , // 33   - ar-sa
+            155 , // 34   - ar-sd
+            160 , // 35   - ar-so
+            165 , // 36   - ar-ss
+            170 , // 37   - ar-sy
+            175 , // 38   - ar-td
+            180 , // 39   - ar-tn
+            185 , // 40   - ar-ye
+            190 , // 41   - arn
+            193 , // 42   - arn-cl
+            199 , // 43   - as
+            201 , // 44   - as-in
+            206 , // 45   - asa
+            209 , // 46   - asa-tz
+            215 , // 47   - ast
+            218 , // 48   - ast-es
+            224 , // 49   - az
+            226 , // 50   - az-cyrl
+            233 , // 51   - az-cyrl-az
+            243 , // 52   - az-latn
+            250 , // 53   - az-latn-az
+            260 , // 54   - ba
+            262 , // 55   - ba-ru
+            267 , // 56   - bas
+            270 , // 57   - bas-cm
+            276 , // 58   - be
+            278 , // 59   - be-by
+            283 , // 60   - bem
+            286 , // 61   - bem-zm
+            292 , // 62   - bez
+            295 , // 63   - bez-tz
+            301 , // 64   - bg
+            303 , // 65   - bg-bg
+            308 , // 66   - bin
+            311 , // 67   - bin-ng
+            317 , // 68   - bm
+            319 , // 69   - bm-latn
+            326 , // 70   - bm-latn-ml
+            336 , // 71   - bn
+            338 , // 72   - bn-bd
+            343 , // 73   - bn-in
+            348 , // 74   - bo
+            350 , // 75   - bo-cn
+            355 , // 76   - bo-in
+            360 , // 77   - br
+            362 , // 78   - br-fr
+            367 , // 79   - brx
+            370 , // 80   - brx-in
+            376 , // 81   - bs
+            378 , // 82   - bs-cyrl
+            385 , // 83   - bs-cyrl-ba
+            395 , // 84   - bs-latn
+            402 , // 85   - bs-latn-ba
+            412 , // 86   - byn
+            415 , // 87   - byn-er
+            421 , // 88   - ca
+            423 , // 89   - ca-ad
+            428 , // 90   - ca-es
+            433 , // 91   - ca-es-valencia
+            447 , // 92   - ca-fr
+            452 , // 93   - ca-it
+            457 , // 94   - ce
+            459 , // 95   - ce-ru
+            464 , // 96   - cgg
+            467 , // 97   - cgg-ug
+            473 , // 98   - chr
+            476 , // 99   - chr-cher
+            484 , // 100  - chr-cher-us
+            495 , // 101  - co
+            497 , // 102  - co-fr
+            502 , // 103  - cs
+            504 , // 104  - cs-cz
+            509 , // 105  - cu
+            511 , // 106  - cu-ru
+            516 , // 107  - cy
+            518 , // 108  - cy-gb
+            523 , // 109  - da
+            525 , // 110  - da-dk
+            530 , // 111  - da-gl
+            535 , // 112  - dav
+            538 , // 113  - dav-ke
+            544 , // 114  - de
+            546 , // 115  - de-at
+            551 , // 116  - de-be
+            556 , // 117  - de-ch
+            561 , // 118  - de-de
+            566 , // 119  - de-de_phoneb
+            578 , // 120  - de-it
+            583 , // 121  - de-li
+            588 , // 122  - de-lu
+            593 , // 123  - dje
+            596 , // 124  - dje-ne
+            602 , // 125  - dsb
+            605 , // 126  - dsb-de
+            611 , // 127  - dua
+            614 , // 128  - dua-cm
+            620 , // 129  - dv
+            622 , // 130  - dv-mv
+            627 , // 131  - dyo
+            630 , // 132  - dyo-sn
+            636 , // 133  - dz
+            638 , // 134  - dz-bt
+            643 , // 135  - ebu
+            646 , // 136  - ebu-ke
+            652 , // 137  - ee
+            654 , // 138  - ee-gh
+            659 , // 139  - ee-tg
+            664 , // 140  - el
+            666 , // 141  - el-cy
+            671 , // 142  - el-gr
+            676 , // 143  - en
+            678 , // 144  - en-001
+            684 , // 145  - en-029
+            690 , // 146  - en-150
+            696 , // 147  - en-ag
+            701 , // 148  - en-ai
+            706 , // 149  - en-as
+            711 , // 150  - en-at
+            716 , // 151  - en-au
+            721 , // 152  - en-bb
+            726 , // 153  - en-be
+            731 , // 154  - en-bi
+            736 , // 155  - en-bm
+            741 , // 156  - en-bs
+            746 , // 157  - en-bw
+            751 , // 158  - en-bz
+            756 , // 159  - en-ca
+            761 , // 160  - en-cc
+            766 , // 161  - en-ch
+            771 , // 162  - en-ck
+            776 , // 163  - en-cm
+            781 , // 164  - en-cx
+            786 , // 165  - en-cy
+            791 , // 166  - en-de
+            796 , // 167  - en-dk
+            801 , // 168  - en-dm
+            806 , // 169  - en-er
+            811 , // 170  - en-fi
+            816 , // 171  - en-fj
+            821 , // 172  - en-fk
+            826 , // 173  - en-fm
+            831 , // 174  - en-gb
+            836 , // 175  - en-gd
+            841 , // 176  - en-gg
+            846 , // 177  - en-gh
+            851 , // 178  - en-gi
+            856 , // 179  - en-gm
+            861 , // 180  - en-gu
+            866 , // 181  - en-gy
+            871 , // 182  - en-hk
+            876 , // 183  - en-id
+            881 , // 184  - en-ie
+            886 , // 185  - en-il
+            891 , // 186  - en-im
+            896 , // 187  - en-in
+            901 , // 188  - en-io
+            906 , // 189  - en-je
+            911 , // 190  - en-jm
+            916 , // 191  - en-ke
+            921 , // 192  - en-ki
+            926 , // 193  - en-kn
+            931 , // 194  - en-ky
+            936 , // 195  - en-lc
+            941 , // 196  - en-lr
+            946 , // 197  - en-ls
+            951 , // 198  - en-mg
+            956 , // 199  - en-mh
+            961 , // 200  - en-mo
+            966 , // 201  - en-mp
+            971 , // 202  - en-ms
+            976 , // 203  - en-mt
+            981 , // 204  - en-mu
+            986 , // 205  - en-mw
+            991 , // 206  - en-my
+            996 , // 207  - en-na
+            1001, // 208  - en-nf
+            1006, // 209  - en-ng
+            1011, // 210  - en-nl
+            1016, // 211  - en-nr
+            1021, // 212  - en-nu
+            1026, // 213  - en-nz
+            1031, // 214  - en-pg
+            1036, // 215  - en-ph
+            1041, // 216  - en-pk
+            1046, // 217  - en-pn
+            1051, // 218  - en-pr
+            1056, // 219  - en-pw
+            1061, // 220  - en-rw
+            1066, // 221  - en-sb
+            1071, // 222  - en-sc
+            1076, // 223  - en-sd
+            1081, // 224  - en-se
+            1086, // 225  - en-sg
+            1091, // 226  - en-sh
+            1096, // 227  - en-si
+            1101, // 228  - en-sl
+            1106, // 229  - en-ss
+            1111, // 230  - en-sx
+            1116, // 231  - en-sz
+            1121, // 232  - en-tc
+            1126, // 233  - en-tk
+            1131, // 234  - en-to
+            1136, // 235  - en-tt
+            1141, // 236  - en-tv
+            1146, // 237  - en-tz
+            1151, // 238  - en-ug
+            1156, // 239  - en-um
+            1161, // 240  - en-us
+            1166, // 241  - en-vc
+            1171, // 242  - en-vg
+            1176, // 243  - en-vi
+            1181, // 244  - en-vu
+            1186, // 245  - en-ws
+            1191, // 246  - en-za
+            1196, // 247  - en-zm
+            1201, // 248  - en-zw
+            1206, // 249  - eo
+            1208, // 250  - eo-001
+            1214, // 251  - es
+            1216, // 252  - es-419
+            1222, // 253  - es-ar
+            1227, // 254  - es-bo
+            1232, // 255  - es-br
+            1237, // 256  - es-cl
+            1242, // 257  - es-co
+            1247, // 258  - es-cr
+            1252, // 259  - es-cu
+            1257, // 260  - es-do
+            1262, // 261  - es-ec
+            1267, // 262  - es-es
+            1272, // 263  - es-es_tradnl
+            1284, // 264  - es-gq
+            1289, // 265  - es-gt
+            1294, // 266  - es-hn
+            1299, // 267  - es-mx
+            1304, // 268  - es-ni
+            1309, // 269  - es-pa
+            1314, // 270  - es-pe
+            1319, // 271  - es-ph
+            1324, // 272  - es-pr
+            1329, // 273  - es-py
+            1334, // 274  - es-sv
+            1339, // 275  - es-us
+            1344, // 276  - es-uy
+            1349, // 277  - es-ve
+            1354, // 278  - et
+            1356, // 279  - et-ee
+            1361, // 280  - eu
+            1363, // 281  - eu-es
+            1368, // 282  - ewo
+            1371, // 283  - ewo-cm
+            1377, // 284  - fa
+            1379, // 285  - fa-ir
+            1384, // 286  - ff
+            1386, // 287  - ff-cm
+            1391, // 288  - ff-gn
+            1396, // 289  - ff-latn
+            1403, // 290  - ff-latn-sn
+            1413, // 291  - ff-mr
+            1418, // 292  - ff-ng
+            1423, // 293  - fi
+            1425, // 294  - fi-fi
+            1430, // 295  - fil
+            1433, // 296  - fil-ph
+            1439, // 297  - fo
+            1441, // 298  - fo-dk
+            1446, // 299  - fo-fo
+            1451, // 300  - fr
+            1453, // 301  - fr-029
+            1459, // 302  - fr-be
+            1464, // 303  - fr-bf
+            1469, // 304  - fr-bi
+            1474, // 305  - fr-bj
+            1479, // 306  - fr-bl
+            1484, // 307  - fr-ca
+            1489, // 308  - fr-cd
+            1494, // 309  - fr-cf
+            1499, // 310  - fr-cg
+            1504, // 311  - fr-ch
+            1509, // 312  - fr-ci
+            1514, // 313  - fr-cm
+            1519, // 314  - fr-dj
+            1524, // 315  - fr-dz
+            1529, // 316  - fr-fr
+            1534, // 317  - fr-ga
+            1539, // 318  - fr-gf
+            1544, // 319  - fr-gn
+            1549, // 320  - fr-gp
+            1554, // 321  - fr-gq
+            1559, // 322  - fr-ht
+            1564, // 323  - fr-km
+            1569, // 324  - fr-lu
+            1574, // 325  - fr-ma
+            1579, // 326  - fr-mc
+            1584, // 327  - fr-mf
+            1589, // 328  - fr-mg
+            1594, // 329  - fr-ml
+            1599, // 330  - fr-mq
+            1604, // 331  - fr-mr
+            1609, // 332  - fr-mu
+            1614, // 333  - fr-nc
+            1619, // 334  - fr-ne
+            1624, // 335  - fr-pf
+            1629, // 336  - fr-pm
+            1634, // 337  - fr-re
+            1639, // 338  - fr-rw
+            1644, // 339  - fr-sc
+            1649, // 340  - fr-sn
+            1654, // 341  - fr-sy
+            1659, // 342  - fr-td
+            1664, // 343  - fr-tg
+            1669, // 344  - fr-tn
+            1674, // 345  - fr-vu
+            1679, // 346  - fr-wf
+            1684, // 347  - fr-yt
+            1689, // 348  - fur
+            1692, // 349  - fur-it
+            1698, // 350  - fy
+            1700, // 351  - fy-nl
+            1705, // 352  - ga
+            1707, // 353  - ga-ie
+            1712, // 354  - gd
+            1714, // 355  - gd-gb
+            1719, // 356  - gl
+            1721, // 357  - gl-es
+            1726, // 358  - gn
+            1728, // 359  - gn-py
+            1733, // 360  - gsw
+            1736, // 361  - gsw-ch
+            1742, // 362  - gsw-fr
+            1748, // 363  - gsw-li
+            1754, // 364  - gu
+            1756, // 365  - gu-in
+            1761, // 366  - guz
+            1764, // 367  - guz-ke
+            1770, // 368  - gv
+            1772, // 369  - gv-im
+            1777, // 370  - ha
+            1779, // 371  - ha-latn
+            1786, // 372  - ha-latn-gh
+            1796, // 373  - ha-latn-ne
+            1806, // 374  - ha-latn-ng
+            1816, // 375  - haw
+            1819, // 376  - haw-us
+            1825, // 377  - he
+            1827, // 378  - he-il
+            1832, // 379  - hi
+            1834, // 380  - hi-in
+            1839, // 381  - hr
+            1841, // 382  - hr-ba
+            1846, // 383  - hr-hr
+            1851, // 384  - hsb
+            1854, // 385  - hsb-de
+            1860, // 386  - hu
+            1862, // 387  - hu-hu
+            1867, // 388  - hu-hu_technl
+            1879, // 389  - hy
+            1881, // 390  - hy-am
+            1886, // 391  - ia
+            1888, // 392  - ia-001
+            1894, // 393  - ia-fr
+            1899, // 394  - ibb
+            1902, // 395  - ibb-ng
+            1908, // 396  - id
+            1910, // 397  - id-id
+            1915, // 398  - ig
+            1917, // 399  - ig-ng
+            1922, // 400  - ii
+            1924, // 401  - ii-cn
+            1929, // 402  - is
+            1931, // 403  - is-is
+            1936, // 404  - it
+            1938, // 405  - it-ch
+            1943, // 406  - it-it
+            1948, // 407  - it-sm
+            1953, // 408  - iu
+            1955, // 409  - iu-cans
+            1962, // 410  - iu-cans-ca
+            1972, // 411  - iu-latn
+            1979, // 412  - iu-latn-ca
+            1989, // 413  - ja
+            1991, // 414  - ja-jp
+            1996, // 415  - ja-jp_radstr
+            2008, // 416  - jgo
+            2011, // 417  - jgo-cm
+            2017, // 418  - jmc
+            2020, // 419  - jmc-tz
+            2026, // 420  - jv
+            2028, // 421  - jv-java
+            2035, // 422  - jv-java-id
+            2045, // 423  - jv-latn
+            2052, // 424  - jv-latn-id
+            2062, // 425  - ka
+            2064, // 426  - ka-ge
+            2069, // 427  - ka-ge_modern
+            2081, // 428  - kab
+            2084, // 429  - kab-dz
+            2090, // 430  - kam
+            2093, // 431  - kam-ke
+            2099, // 432  - kde
+            2102, // 433  - kde-tz
+            2108, // 434  - kea
+            2111, // 435  - kea-cv
+            2117, // 436  - khq
+            2120, // 437  - khq-ml
+            2126, // 438  - ki
+            2128, // 439  - ki-ke
+            2133, // 440  - kk
+            2135, // 441  - kk-kz
+            2140, // 442  - kkj
+            2143, // 443  - kkj-cm
+            2149, // 444  - kl
+            2151, // 445  - kl-gl
+            2156, // 446  - kln
+            2159, // 447  - kln-ke
+            2165, // 448  - km
+            2167, // 449  - km-kh
+            2172, // 450  - kn
+            2174, // 451  - kn-in
+            2179, // 452  - ko
+            2181, // 453  - ko-kp
+            2186, // 454  - ko-kr
+            2191, // 455  - kok
+            2194, // 456  - kok-in
+            2200, // 457  - kr
+            2202, // 458  - kr-ng
+            2207, // 459  - ks
+            2209, // 460  - ks-arab
+            2216, // 461  - ks-arab-in
+            2226, // 462  - ks-deva
+            2233, // 463  - ks-deva-in
+            2243, // 464  - ksb
+            2246, // 465  - ksb-tz
+            2252, // 466  - ksf
+            2255, // 467  - ksf-cm
+            2261, // 468  - ksh
+            2264, // 469  - ksh-de
+            2270, // 470  - ku
+            2272, // 471  - ku-arab
+            2279, // 472  - ku-arab-iq
+            2289, // 473  - ku-arab-ir
+            2299, // 474  - kw
+            2301, // 475  - kw-gb
+            2306, // 476  - ky
+            2308, // 477  - ky-kg
+            2313, // 478  - la
+            2315, // 479  - la-001
+            2321, // 480  - lag
+            2324, // 481  - lag-tz
+            2330, // 482  - lb
+            2332, // 483  - lb-lu
+            2337, // 484  - lg
+            2339, // 485  - lg-ug
+            2344, // 486  - lkt
+            2347, // 487  - lkt-us
+            2353, // 488  - ln
+            2355, // 489  - ln-ao
+            2360, // 490  - ln-cd
+            2365, // 491  - ln-cf
+            2370, // 492  - ln-cg
+            2375, // 493  - lo
+            2377, // 494  - lo-la
+            2382, // 495  - lrc
+            2385, // 496  - lrc-iq
+            2391, // 497  - lrc-ir
+            2397, // 498  - lt
+            2399, // 499  - lt-lt
+            2404, // 500  - lu
+            2406, // 501  - lu-cd
+            2411, // 502  - luo
+            2414, // 503  - luo-ke
+            2420, // 504  - luy
+            2423, // 505  - luy-ke
+            2429, // 506  - lv
+            2431, // 507  - lv-lv
+            2436, // 508  - mas
+            2439, // 509  - mas-ke
+            2445, // 510  - mas-tz
+            2451, // 511  - mer
+            2454, // 512  - mer-ke
+            2460, // 513  - mfe
+            2463, // 514  - mfe-mu
+            2469, // 515  - mg
+            2471, // 516  - mg-mg
+            2476, // 517  - mgh
+            2479, // 518  - mgh-mz
+            2485, // 519  - mgo
+            2488, // 520  - mgo-cm
+            2494, // 521  - mi
+            2496, // 522  - mi-nz
+            2501, // 523  - mk
+            2503, // 524  - mk-mk
+            2508, // 525  - ml
+            2510, // 526  - ml-in
+            2515, // 527  - mn
+            2517, // 528  - mn-cyrl
+            2524, // 529  - mn-mn
+            2529, // 530  - mn-mong
+            2536, // 531  - mn-mong-cn
+            2546, // 532  - mn-mong-mn
+            2556, // 533  - mni
+            2559, // 534  - mni-in
+            2565, // 535  - moh
+            2568, // 536  - moh-ca
+            2574, // 537  - mr
+            2576, // 538  - mr-in
+            2581, // 539  - ms
+            2583, // 540  - ms-bn
+            2588, // 541  - ms-my
+            2593, // 542  - ms-sg
+            2598, // 543  - mt
+            2600, // 544  - mt-mt
+            2605, // 545  - mua
+            2608, // 546  - mua-cm
+            2614, // 547  - my
+            2616, // 548  - my-mm
+            2621, // 549  - mzn
+            2624, // 550  - mzn-ir
+            2630, // 551  - naq
+            2633, // 552  - naq-na
+            2639, // 553  - nb
+            2641, // 554  - nb-no
+            2646, // 555  - nb-sj
+            2651, // 556  - nd
+            2653, // 557  - nd-zw
+            2658, // 558  - nds
+            2661, // 559  - nds-de
+            2667, // 560  - nds-nl
+            2673, // 561  - ne
+            2675, // 562  - ne-in
+            2680, // 563  - ne-np
+            2685, // 564  - nl
+            2687, // 565  - nl-aw
+            2692, // 566  - nl-be
+            2697, // 567  - nl-bq
+            2702, // 568  - nl-cw
+            2707, // 569  - nl-nl
+            2712, // 570  - nl-sr
+            2717, // 571  - nl-sx
+            2722, // 572  - nmg
+            2725, // 573  - nmg-cm
+            2731, // 574  - nn
+            2733, // 575  - nn-no
+            2738, // 576  - nnh
+            2741, // 577  - nnh-cm
+            2747, // 578  - no
+            2749, // 579  - nqo
+            2752, // 580  - nqo-gn
+            2758, // 581  - nr
+            2760, // 582  - nr-za
+            2765, // 583  - nso
+            2768, // 584  - nso-za
+            2774, // 585  - nus
+            2777, // 586  - nus-ss
+            2783, // 587  - nyn
+            2786, // 588  - nyn-ug
+            2792, // 589  - oc
+            2794, // 590  - oc-fr
+            2799, // 591  - om
+            2801, // 592  - om-et
+            2806, // 593  - om-ke
+            2811, // 594  - or
+            2813, // 595  - or-in
+            2818, // 596  - os
+            2820, // 597  - os-ge
+            2825, // 598  - os-ru
+            2830, // 599  - pa
+            2832, // 600  - pa-arab
+            2839, // 601  - pa-arab-pk
+            2849, // 602  - pa-in
+            2854, // 603  - pap
+            2857, // 604  - pap-029
+            2864, // 605  - pl
+            2866, // 606  - pl-pl
+            2871, // 607  - prg
+            2874, // 608  - prg-001
+            2881, // 609  - prs
+            2884, // 610  - prs-af
+            2890, // 611  - ps
+            2892, // 612  - ps-af
+            2897, // 613  - pt
+            2899, // 614  - pt-ao
+            2904, // 615  - pt-br
+            2909, // 616  - pt-ch
+            2914, // 617  - pt-cv
+            2919, // 618  - pt-gq
+            2924, // 619  - pt-gw
+            2929, // 620  - pt-lu
+            2934, // 621  - pt-mo
+            2939, // 622  - pt-mz
+            2944, // 623  - pt-pt
+            2949, // 624  - pt-st
+            2954, // 625  - pt-tl
+            2959, // 626  - qps-latn-x-sh
+            2972, // 627  - qps-ploc
+            2980, // 628  - qps-ploca
+            2989, // 629  - qps-plocm
+            2998, // 630  - quc
+            3001, // 631  - quc-latn
+            3009, // 632  - quc-latn-gt
+            3020, // 633  - quz
+            3023, // 634  - quz-bo
+            3029, // 635  - quz-ec
+            3035, // 636  - quz-pe
+            3041, // 637  - rm
+            3043, // 638  - rm-ch
+            3048, // 639  - rn
+            3050, // 640  - rn-bi
+            3055, // 641  - ro
+            3057, // 642  - ro-md
+            3062, // 643  - ro-ro
+            3067, // 644  - rof
+            3070, // 645  - rof-tz
+            3076, // 646  - ru
+            3078, // 647  - ru-by
+            3083, // 648  - ru-kg
+            3088, // 649  - ru-kz
+            3093, // 650  - ru-md
+            3098, // 651  - ru-ru
+            3103, // 652  - ru-ua
+            3108, // 653  - rw
+            3110, // 654  - rw-rw
+            3115, // 655  - rwk
+            3118, // 656  - rwk-tz
+            3124, // 657  - sa
+            3126, // 658  - sa-in
+            3131, // 659  - sah
+            3134, // 660  - sah-ru
+            3140, // 661  - saq
+            3143, // 662  - saq-ke
+            3149, // 663  - sbp
+            3152, // 664  - sbp-tz
+            3158, // 665  - sd
+            3160, // 666  - sd-arab
+            3167, // 667  - sd-arab-pk
+            3177, // 668  - sd-deva
+            3184, // 669  - sd-deva-in
+            3194, // 670  - se
+            3196, // 671  - se-fi
+            3201, // 672  - se-no
+            3206, // 673  - se-se
+            3211, // 674  - seh
+            3214, // 675  - seh-mz
+            3220, // 676  - ses
+            3223, // 677  - ses-ml
+            3229, // 678  - sg
+            3231, // 679  - sg-cf
+            3236, // 680  - shi
+            3239, // 681  - shi-latn
+            3247, // 682  - shi-latn-ma
+            3258, // 683  - shi-tfng
+            3266, // 684  - shi-tfng-ma
+            3277, // 685  - si
+            3279, // 686  - si-lk
+            3284, // 687  - sk
+            3286, // 688  - sk-sk
+            3291, // 689  - sl
+            3293, // 690  - sl-si
+            3298, // 691  - sma
+            3301, // 692  - sma-no
+            3307, // 693  - sma-se
+            3313, // 694  - smj
+            3316, // 695  - smj-no
+            3322, // 696  - smj-se
+            3328, // 697  - smn
+            3331, // 698  - smn-fi
+            3337, // 699  - sms
+            3340, // 700  - sms-fi
+            3346, // 701  - sn
+            3348, // 702  - sn-latn
+            3355, // 703  - sn-latn-zw
+            3365, // 704  - so
+            3367, // 705  - so-dj
+            3372, // 706  - so-et
+            3377, // 707  - so-ke
+            3382, // 708  - so-so
+            3387, // 709  - sq
+            3389, // 710  - sq-al
+            3394, // 711  - sq-mk
+            3399, // 712  - sq-xk
+            3404, // 713  - sr
+            3406, // 714  - sr-cyrl
+            3413, // 715  - sr-cyrl-ba
+            3423, // 716  - sr-cyrl-cs
+            3433, // 717  - sr-cyrl-me
+            3443, // 718  - sr-cyrl-rs
+            3453, // 719  - sr-cyrl-xk
+            3463, // 720  - sr-latn
+            3470, // 721  - sr-latn-ba
+            3480, // 722  - sr-latn-cs
+            3490, // 723  - sr-latn-me
+            3500, // 724  - sr-latn-rs
+            3510, // 725  - sr-latn-xk
+            3520, // 726  - ss
+            3522, // 727  - ss-sz
+            3527, // 728  - ss-za
+            3532, // 729  - ssy
+            3535, // 730  - ssy-er
+            3541, // 731  - st
+            3543, // 732  - st-ls
+            3548, // 733  - st-za
+            3553, // 734  - sv
+            3555, // 735  - sv-ax
+            3560, // 736  - sv-fi
+            3565, // 737  - sv-se
+            3570, // 738  - sw
+            3572, // 739  - sw-cd
+            3577, // 740  - sw-ke
+            3582, // 741  - sw-tz
+            3587, // 742  - sw-ug
+            3592, // 743  - swc
+            3595, // 744  - swc-cd
+            3601, // 745  - syr
+            3604, // 746  - syr-sy
+            3610, // 747  - ta
+            3612, // 748  - ta-in
+            3617, // 749  - ta-lk
+            3622, // 750  - ta-my
+            3627, // 751  - ta-sg
+            3632, // 752  - te
+            3634, // 753  - te-in
+            3639, // 754  - teo
+            3642, // 755  - teo-ke
+            3648, // 756  - teo-ug
+            3654, // 757  - tg
+            3656, // 758  - tg-cyrl
+            3663, // 759  - tg-cyrl-tj
+            3673, // 760  - th
+            3675, // 761  - th-th
+            3680, // 762  - ti
+            3682, // 763  - ti-er
+            3687, // 764  - ti-et
+            3692, // 765  - tig
+            3695, // 766  - tig-er
+            3701, // 767  - tk
+            3703, // 768  - tk-tm
+            3708, // 769  - tn
+            3710, // 770  - tn-bw
+            3715, // 771  - tn-za
+            3720, // 772  - to
+            3722, // 773  - to-to
+            3727, // 774  - tr
+            3729, // 775  - tr-cy
+            3734, // 776  - tr-tr
+            3739, // 777  - ts
+            3741, // 778  - ts-za
+            3746, // 779  - tt
+            3748, // 780  - tt-ru
+            3753, // 781  - twq
+            3756, // 782  - twq-ne
+            3762, // 783  - tzm
+            3765, // 784  - tzm-arab
+            3773, // 785  - tzm-arab-ma
+            3784, // 786  - tzm-latn
+            3792, // 787  - tzm-latn-dz
+            3803, // 788  - tzm-latn-ma
+            3814, // 789  - tzm-tfng
+            3822, // 790  - tzm-tfng-ma
+            3833, // 791  - ug
+            3835, // 792  - ug-cn
+            3840, // 793  - uk
+            3842, // 794  - uk-ua
+            3847, // 795  - ur
+            3849, // 796  - ur-in
+            3854, // 797  - ur-pk
+            3859, // 798  - uz
+            3861, // 799  - uz-arab
+            3868, // 800  - uz-arab-af
+            3878, // 801  - uz-cyrl
+            3885, // 802  - uz-cyrl-uz
+            3895, // 803  - uz-latn
+            3902, // 804  - uz-latn-uz
+            3912, // 805  - vai
+            3915, // 806  - vai-latn
+            3923, // 807  - vai-latn-lr
+            3934, // 808  - vai-vaii
+            3942, // 809  - vai-vaii-lr
+            3953, // 810  - ve
+            3955, // 811  - ve-za
+            3960, // 812  - vi
+            3962, // 813  - vi-vn
+            3967, // 814  - vo
+            3969, // 815  - vo-001
+            3975, // 816  - vun
+            3978, // 817  - vun-tz
+            3984, // 818  - wae
+            3987, // 819  - wae-ch
+            3993, // 820  - wal
+            3996, // 821  - wal-et
+            4002, // 822  - wo
+            4004, // 823  - wo-sn
+            4009, // 824  - x-iv_mathan
+            4020, // 825  - xh
+            4022, // 826  - xh-za
+            4027, // 827  - xog
+            4030, // 828  - xog-ug
+            4036, // 829  - yav
+            4039, // 830  - yav-cm
+            4045, // 831  - yi
+            4047, // 832  - yi-001
+            4053, // 833  - yo
+            4055, // 834  - yo-bj
+            4060, // 835  - yo-ng
+            4065, // 836  - yue
+            4068, // 837  - yue-hk
+            4074, // 838  - zgh
+            4077, // 839  - zgh-tfng
+            4085, // 840  - zgh-tfng-ma
+            4096, // 841  - zh
+            4098, // 842  - zh-chs
+            4104, // 843  - zh-cht
+            4110, // 844  - zh-cn
+            4115, // 845  - zh-cn_phoneb
+            4127, // 846  - zh-cn_stroke
+            4139, // 847  - zh-hans
+            4146, // 848  - zh-hans-hk
+            4156, // 849  - zh-hans-mo
+            4166, // 850  - zh-hant
+            4173, // 851  - zh-hk
+            4178, // 852  - zh-hk_radstr
+            4190, // 853  - zh-mo
+            4195, // 854  - zh-mo_radstr
+            4207, // 855  - zh-mo_stroke
+            4219, // 856  - zh-sg
+            4224, // 857  - zh-sg_phoneb
+            4236, // 858  - zh-sg_stroke
+            4248, // 859  - zh-tw
+            4253, // 860  - zh-tw_pronun
+            4265, // 861  - zh-tw_radstr
+            4277, // 862  - zu
+            4279,  // 863  - zu-za
+            4284
+        };
+               
+        private const int NUMERIC_LOCALE_DATA_COUNT_PER_ROW = 6;  
+        // s_nameIndexToNumericData is mapping from index in s_localeNamesIndices to locale data: 
+        //      Lcid, Ansi codepage, Oem codepage, MAC codepage, EBCDIC codepage, Geo Id
+        private static readonly int[] s_nameIndexToNumericData = new int[]
+        {
+         // Lcid,   Ansi cp, Oem CP, MAC CP, Ebcdi CP, Geo Id, // index - locale name
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 0    - aa
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3e  , // 1    - aa-dj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 2    - aa-er
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 3    - aa-et
+            0x36   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 4    - af
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfe  , // 5    - af-na
+            0x436  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 6    - af-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 7    - agq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 8    - agq-cm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , // 9    - ak
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , // 10   - ak-gh
+            0x5e   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 11   - am
+            0x45e  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 12   - am-et
+            0x1    , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , // 13   - ar
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x989e, // 14   - ar-001
+            0x3801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xe0  , // 15   - ar-ae
+            0x3c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x11  , // 16   - ar-bh
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3e  , // 17   - ar-dj
+            0x1401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x4   , // 18   - ar-dz
+            0xc01  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x43  , // 19   - ar-eg
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x47  , // 20   - ar-er
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x75  , // 21   - ar-il
+            0x801  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , // 22   - ar-iq
+            0x2c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x7e  , // 23   - ar-jo
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x32  , // 24   - ar-km
+            0x3401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x88  , // 25   - ar-kw
+            0x3001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x8b  , // 26   - ar-lb
+            0x1001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x94  , // 27   - ar-ly
+            0x1801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , // 28   - ar-ma
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xa2  , // 29   - ar-mr
+            0x2001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xa4  , // 30   - ar-om
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xb8  , // 31   - ar-ps
+            0x4001 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xc5  , // 32   - ar-qa
+            0x401  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , // 33   - ar-sa
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xdb  , // 34   - ar-sd
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xd8  , // 35   - ar-so
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x114 , // 36   - ar-ss
+            0x2801 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xde  , // 37   - ar-sy
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x29  , // 38   - ar-td
+            0x1c01 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xea  , // 39   - ar-tn
+            0x2401 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x105 , // 40   - ar-ye
+            0x7a   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , // 41   - arn
+            0x47a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , // 42   - arn-cl
+            0x4d   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 43   - as
+            0x44d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 44   - as-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 45   - asa
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 46   - asa-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd9  , // 47   - ast
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd9  , // 48   - ast-es
+            0x2c   , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , // 49   - az
+            0x742c , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x5   , // 50   - az-cyrl
+            0x82c  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x5   , // 51   - az-cyrl-az
+            0x782c , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , // 52   - az-latn
+            0x42c  , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x5   , // 53   - az-latn-az
+            0x6d   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 54   - ba
+            0x46d  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 55   - ba-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 56   - bas
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 57   - bas-cm
+            0x23   , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x1d  , // 58   - be
+            0x423  , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x1d  , // 59   - be-by
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x107 , // 60   - bem
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x107 , // 61   - bem-zm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 62   - bez
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 63   - bez-tz
+            0x2    , 0x4e3 , 0x362 , 0x2717, 0x5221, 0x23  , // 64   - bg
+            0x402  , 0x4e3 , 0x362 , 0x2717, 0x5221, 0x23  , // 65   - bg-bg
+            0x66   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 66   - bin
+            0x466  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 67   - bin-ng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 68   - bm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 69   - bm-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 70   - bm-latn-ml
+            0x45   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x17  , // 71   - bn
+            0x845  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x17  , // 72   - bn-bd
+            0x445  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 73   - bn-in
+            0x51   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , // 74   - bo
+            0x451  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , // 75   - bo-cn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 76   - bo-in
+            0x7e   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 77   - br
+            0x47e  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 78   - br-fr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 79   - brx
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 80   - brx-in
+            0x781a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , // 81   - bs
+            0x641a , 0x4e3 , 0x357 , 0x2762, 0x366 , 0x19  , // 82   - bs-cyrl
+            0x201a , 0x4e3 , 0x357 , 0x2762, 0x366 , 0x19  , // 83   - bs-cyrl-ba
+            0x681a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , // 84   - bs-latn
+            0x141a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , // 85   - bs-latn-ba
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 86   - byn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 87   - byn-er
+            0x3    , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , // 88   - ca
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x8   , // 89   - ca-ad
+            0x403  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , // 90   - ca-es
+            0x803  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , // 91   - ca-es-valencia
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x54  , // 92   - ca-fr
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x76  , // 93   - ca-it
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , // 94   - ce
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , // 95   - ce-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 96   - cgg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 97   - cgg-ug
+            0x5c   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , // 98   - chr
+            0x7c5c , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , // 99   - chr-cher
+            0x45c  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , // 100  - chr-cher-us
+            0x83   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 101  - co
+            0x483  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 102  - co-fr
+            0x5    , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x4b  , // 103  - cs
+            0x405  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x4b  , // 104  - cs-cz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , // 105  - cu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , // 106  - cu-ru
+            0x52   , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , // 107  - cy
+            0x452  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , // 108  - cy-gb
+            0x6    , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x3d  , // 109  - da
+            0x406  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x3d  , // 110  - da-dk
+            0x1000 , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0x5d  , // 111  - da-gl
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 112  - dav
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 113  - dav-ke
+            0x7    , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , // 114  - de
+            0xc07  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xe   , // 115  - de-at
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x15  , // 116  - de-be
+            0x807  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , // 117  - de-ch
+            0x407  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , // 118  - de-de
+            0x10407, 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x5e  , // 119  - de-de_phoneb
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , // 120  - de-it
+            0x1407 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x91  , // 121  - de-li
+            0x1007 , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0x93  , // 122  - de-lu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , // 123  - dje
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , // 124  - dje-ne
+            0x7c2e , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , // 125  - dsb
+            0x82e  , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , // 126  - dsb-de
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 127  - dua
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 128  - dua-cm
+            0x65   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa5  , // 129  - dv
+            0x465  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa5  , // 130  - dv-mv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd2  , // 131  - dyo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd2  , // 132  - dyo-sn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x22  , // 133  - dz
+            0xc51  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x22  , // 134  - dz-bt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 135  - ebu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 136  - ebu-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , // 137  - ee
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x59  , // 138  - ee-gh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe8  , // 139  - ee-tg
+            0x8    , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x62  , // 140  - el
+            0x1000 , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x3b  , // 141  - el-cy
+            0x408  , 0x4e5 , 0x2e1 , 0x2716, 0x4f31, 0x62  , // 142  - el-gr
+            0x9    , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , // 143  - en
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x989e, // 144  - en-001
+            0x2409 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, // 145  - en-029
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x292d, // 146  - en-150
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x2   , // 147  - en-ag
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12c , // 148  - en-ai
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa   , // 149  - en-as
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe   , // 150  - en-at
+            0xc09  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc   , // 151  - en-au
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12  , // 152  - en-bb
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15  , // 153  - en-be
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , // 154  - en-bi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14  , // 155  - en-bm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x16  , // 156  - en-bs
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13  , // 157  - en-bw
+            0x2809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x18  , // 158  - en-bz
+            0x1009 , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , // 159  - en-ca
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x137 , // 160  - en-cc
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , // 161  - en-ch
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x138 , // 162  - en-ck
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x31  , // 163  - en-cm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x135 , // 164  - en-cx
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b  , // 165  - en-cy
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , // 166  - en-de
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3d  , // 167  - en-dk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x3f  , // 168  - en-dm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x47  , // 169  - en-er
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4d  , // 170  - en-fi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x4e  , // 171  - en-fj
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13b , // 172  - en-fk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x50  , // 173  - en-fm
+            0x809  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , // 174  - en-gb
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x5b  , // 175  - en-gd
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x144 , // 176  - en-gg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x59  , // 177  - en-gh
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x5a  , // 178  - en-gi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x56  , // 179  - en-gm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x142 , // 180  - en-gu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x65  , // 181  - en-gy
+            0x3c09 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x68  , // 182  - en-hk
+            0x3809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 183  - en-id
+            0x1809 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , // 184  - en-ie
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x75  , // 185  - en-il
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x3b16, // 186  - en-im
+            0x4009 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x71  , // 187  - en-in
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x72  , // 188  - en-io
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x148 , // 189  - en-je
+            0x2009 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x7c  , // 190  - en-jm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x81  , // 191  - en-ke
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x85  , // 192  - en-ki
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xcf  , // 193  - en-kn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x133 , // 194  - en-ky
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xda  , // 195  - en-lc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x8e  , // 196  - en-lr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x92  , // 197  - en-ls
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x95  , // 198  - en-mg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc7  , // 199  - en-mh
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x97  , // 200  - en-mo
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x151 , // 201  - en-mp
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14c , // 202  - en-ms
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa3  , // 203  - en-mt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa0  , // 204  - en-mu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9c  , // 205  - en-mw
+            0x4409 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xa7  , // 206  - en-my
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfe  , // 207  - en-na
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x150 , // 208  - en-nf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 209  - en-ng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb0  , // 210  - en-nl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb4  , // 211  - en-nr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x14f , // 212  - en-nu
+            0x1409 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb7  , // 213  - en-nz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc2  , // 214  - en-pg
+            0x3409 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , // 215  - en-ph
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xbe  , // 216  - en-pk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x153 , // 217  - en-pn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xca  , // 218  - en-pr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc3  , // 219  - en-pw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xcc  , // 220  - en-rw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x1e  , // 221  - en-sb
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd0  , // 222  - en-sc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xdb  , // 223  - en-sd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdd  , // 224  - en-se
+            0x4809 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xd7  , // 225  - en-sg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x157 , // 226  - en-sh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd4  , // 227  - en-si
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd5  , // 228  - en-sl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x114 , // 229  - en-ss
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x78f7, // 230  - en-sx
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x104 , // 231  - en-sz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15d , // 232  - en-tc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15b , // 233  - en-tk
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe7  , // 234  - en-to
+            0x2c09 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe1  , // 235  - en-tt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xec  , // 236  - en-tv
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xef  , // 237  - en-tz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xf0  , // 238  - en-ug
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9a55d40, // 239  - en-um
+            0x409  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , // 240  - en-us
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xf8  , // 241  - en-vc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15f , // 242  - en-vg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xfc  , // 243  - en-vi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xae  , // 244  - en-vu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x103 , // 245  - en-ws
+            0x1c09 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xd1  , // 246  - en-za
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x107 , // 247  - en-zm
+            0x3009 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x108 , // 248  - en-zw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 249  - eo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 250  - eo-001
+            0xa    , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , // 251  - es
+            0x580a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x9a55d41, // 252  - es-419
+            0x2c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb   , // 253  - es-ar
+            0x400a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , // 254  - es-bo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x20  , // 255  - es-br
+            0x340a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x2e  , // 256  - es-cl
+            0x240a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x33  , // 257  - es-co
+            0x140a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x36  , // 258  - es-cr
+            0x5c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x38  , // 259  - es-cu
+            0x1c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x41  , // 260  - es-do
+            0x300a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x42  , // 261  - es-ec
+            0xc0a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , // 262  - es-es
+            0x40a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xd9  , // 263  - es-es_tradnl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x45  , // 264  - es-gq
+            0x100a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , // 265  - es-gt
+            0x480a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x6a  , // 266  - es-hn
+            0x80a  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xa6  , // 267  - es-mx
+            0x4c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb6  , // 268  - es-ni
+            0x180a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xc0  , // 269  - es-pa
+            0x280a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xbb  , // 270  - es-pe
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xc9  , // 271  - es-ph
+            0x500a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xca  , // 272  - es-pr
+            0x3c0a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , // 273  - es-py
+            0x440a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x48  , // 274  - es-sv
+            0x540a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf4  , // 275  - es-us
+            0x380a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf6  , // 276  - es-uy
+            0x200a , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xf9  , // 277  - es-ve
+            0x25   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x46  , // 278  - et
+            0x425  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x46  , // 279  - et-ee
+            0x2d   , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0xd9  , // 280  - eu
+            0x42d  , 0x4e4 , 0x352 , 0x2   , 0x1f4 , 0xd9  , // 281  - eu-es
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 282  - ewo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 283  - ewo-cm
+            0x29   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x74  , // 284  - fa
+            0x429  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x74  , // 285  - fa-ir
+            0x67   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , // 286  - ff
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x31  , // 287  - ff-cm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x64  , // 288  - ff-gn
+            0x7c67 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , // 289  - ff-latn
+            0x867  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , // 290  - ff-latn-sn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa2  , // 291  - ff-mr
+            0x467  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xaf  , // 292  - ff-ng
+            0xb    , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 293  - fi
+            0x40b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 294  - fi-fi
+            0x64   , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , // 295  - fil
+            0x464  , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xc9  , // 296  - fil-ph
+            0x38   , 0x4e4 , 0x352 , 0x275f, 0x4f35, 0x51  , // 297  - fo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3d  , // 298  - fo-dk
+            0x438  , 0x4e4 , 0x352 , 0x275f, 0x4f35, 0x51  , // 299  - fo-fo
+            0xc    , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 300  - fr
+            0x1c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x993248, // 301  - fr-029
+            0x80c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x15  , // 302  - fr-be
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xf5  , // 303  - fr-bf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x26  , // 304  - fr-bi
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x1c  , // 305  - fr-bj
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9a55c4f, // 306  - fr-bl
+            0xc0c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x27  , // 307  - fr-ca
+            0x240c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x2c  , // 308  - fr-cd
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x37  , // 309  - fr-cf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x2b  , // 310  - fr-cg
+            0x100c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , // 311  - fr-ch
+            0x300c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x77  , // 312  - fr-ci
+            0x2c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x31  , // 313  - fr-cm
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x3e  , // 314  - fr-dj
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , // 315  - fr-dz
+            0x40c  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 316  - fr-fr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x57  , // 317  - fr-ga
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x13d , // 318  - fr-gf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x64  , // 319  - fr-gn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x141 , // 320  - fr-gp
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x45  , // 321  - fr-gq
+            0x3c0c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x67  , // 322  - fr-ht
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x32  , // 323  - fr-km
+            0x140c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , // 324  - fr-lu
+            0x380c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9f  , // 325  - fr-ma
+            0x180c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9e  , // 326  - fr-mc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x7bda, // 327  - fr-mf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x95  , // 328  - fr-mg
+            0x340c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x9d  , // 329  - fr-ml
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14a , // 330  - fr-mq
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa2  , // 331  - fr-mr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xa0  , // 332  - fr-mu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14e , // 333  - fr-nc
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xad  , // 334  - fr-ne
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x13e , // 335  - fr-pf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xce  , // 336  - fr-pm
+            0x200c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xc6  , // 337  - fr-re
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xcc  , // 338  - fr-rw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd0  , // 339  - fr-sc
+            0x280c , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , // 340  - fr-sn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xde  , // 341  - fr-sy
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x29  , // 342  - fr-td
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xe8  , // 343  - fr-tg
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xea  , // 344  - fr-tn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xae  , // 345  - fr-vu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x160 , // 346  - fr-wf
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x14b , // 347  - fr-yt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , // 348  - fur
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x76  , // 349  - fur-it
+            0x62   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , // 350  - fy
+            0x462  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , // 351  - fy-nl
+            0x3c   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , // 352  - ga
+            0x83c  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x44  , // 353  - ga-ie
+            0x91   , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , // 354  - gd
+            0x491  , 0x4e4 , 0x352 , 0x2710, 0x4f3d, 0xf2  , // 355  - gd-gb
+            0x56   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , // 356  - gl
+            0x456  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd9  , // 357  - gl-es
+            0x74   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , // 358  - gn
+            0x474  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xb9  , // 359  - gn-py
+            0x84   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , // 360  - gsw
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xdf  , // 361  - gsw-ch
+            0x484  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 362  - gsw-fr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x91  , // 363  - gsw-li
+            0x47   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 364  - gu
+            0x447  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 365  - gu-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 366  - guz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 367  - guz-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b16, // 368  - gv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3b16, // 369  - gv-im
+            0x68   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 370  - ha
+            0x7c68 , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 371  - ha-latn
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x59  , // 372  - ha-latn-gh
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xad  , // 373  - ha-latn-ne
+            0x468  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 374  - ha-latn-ng
+            0x75   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , // 375  - haw
+            0x475  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , // 376  - haw-us
+            0xd    , 0x4e7 , 0x35e , 0x2715, 0x1f4 , 0x75  , // 377  - he
+            0x40d  , 0x4e7 , 0x35e , 0x2715, 0x1f4 , 0x75  , // 378  - he-il
+            0x39   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 379  - hi
+            0x439  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 380  - hi-in
+            0x1a   , 0x4e2 , 0x354 , 0x2762, 0x1f4 , 0x6c  , // 381  - hr
+            0x101a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , // 382  - hr-ba
+            0x41a  , 0x4e2 , 0x354 , 0x2762, 0x1f4 , 0x6c  , // 383  - hr-hr
+            0x2e   , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , // 384  - hsb
+            0x42e  , 0x4e4 , 0x352 , 0x2710, 0x366 , 0x5e  , // 385  - hsb-de
+            0xe    , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , // 386  - hu
+            0x40e  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , // 387  - hu-hu
+            0x1040e, 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x6d  , // 388  - hu-hu_technl
+            0x2b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x7   , // 389  - hy
+            0x42b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x7   , // 390  - hy-am
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x54  , // 391  - ia
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 392  - ia-001
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x54  , // 393  - ia-fr
+            0x69   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 394  - ibb
+            0x469  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 395  - ibb-ng
+            0x21   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 396  - id
+            0x421  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 397  - id-id
+            0x70   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 398  - ig
+            0x470  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 399  - ig-ng
+            0x78   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , // 400  - ii
+            0x478  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , // 401  - ii-cn
+            0xf    , 0x4e4 , 0x352 , 0x275f, 0x5187, 0x6e  , // 402  - is
+            0x40f  , 0x4e4 , 0x352 , 0x275f, 0x5187, 0x6e  , // 403  - is-is
+            0x10   , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0x76  , // 404  - it
+            0x810  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xdf  , // 405  - it-ch
+            0x410  , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0x76  , // 406  - it-it
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f38, 0xd6  , // 407  - it-sm
+            0x5d   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , // 408  - iu
+            0x785d , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x27  , // 409  - iu-cans
+            0x45d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x27  , // 410  - iu-cans-ca
+            0x7c5d , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , // 411  - iu-latn
+            0x85d  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x27  , // 412  - iu-latn-ca
+            0x11   , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , // 413  - ja
+            0x411  , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , // 414  - ja-jp
+            0x40411, 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , // 415  - ja-jp_radstr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 416  - jgo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 417  - jgo-cm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 418  - jmc
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 419  - jmc-tz
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 420  - jv
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 421  - jv-java
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 422  - jv-java-id
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 423  - jv-latn
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f  , // 424  - jv-latn-id
+            0x37   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , // 425  - ka
+            0x437  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , // 426  - ka-ge
+            0x10437, 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , // 427  - ka-ge_modern
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4   , // 428  - kab
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x4   , // 429  - kab-dz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 430  - kam
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 431  - kam-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 432  - kde
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 433  - kde-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x39  , // 434  - kea
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x39  , // 435  - kea-cv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 436  - khq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 437  - khq-ml
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 438  - ki
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 439  - ki-ke
+            0x3f   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x89  , // 440  - kk
+            0x43f  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x89  , // 441  - kk-kz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 442  - kkj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 443  - kkj-cm
+            0x6f   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x5d  , // 444  - kl
+            0x46f  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0x5d  , // 445  - kl-gl
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 446  - kln
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 447  - kln-ke
+            0x53   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x28  , // 448  - km
+            0x453  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x28  , // 449  - km-kh
+            0x4b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 450  - kn
+            0x44b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 451  - kn-in
+            0x12   , 0x3b5 , 0x3b5 , 0x2713, 0x5161, 0x86  , // 452  - ko
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x83  , // 453  - ko-kp
+            0x412  , 0x3b5 , 0x3b5 , 0x2713, 0x5161, 0x86  , // 454  - ko-kr
+            0x57   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 455  - kok
+            0x457  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 456  - kok-in
+            0x71   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 457  - kr
+            0x471  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xaf  , // 458  - kr-ng
+            0x60   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 459  - ks
+            0x460  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 460  - ks-arab
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 461  - ks-arab-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 462  - ks-deva
+            0x860  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 463  - ks-deva-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 464  - ksb
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 465  - ksb-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 466  - ksf
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 467  - ksf-cm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , // 468  - ksh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , // 469  - ksh-de
+            0x92   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , // 470  - ku
+            0x7c92 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , // 471  - ku-arab
+            0x492  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x79  , // 472  - ku-arab-iq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , // 473  - ku-arab-ir
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf2  , // 474  - kw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf2  , // 475  - kw-gb
+            0x40   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x82  , // 476  - ky
+            0x440  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x82  , // 477  - ky-kg
+            0x76   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x989e, // 478  - la
+            0x476  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0x989e, // 479  - la-001
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 480  - lag
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 481  - lag-tz
+            0x6e   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , // 482  - lb
+            0x46e  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x93  , // 483  - lb-lu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 484  - lg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 485  - lg-ug
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , // 486  - lkt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf4  , // 487  - lkt-us
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , // 488  - ln
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9   , // 489  - ln-ao
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , // 490  - ln-cd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , // 491  - ln-cf
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2b  , // 492  - ln-cg
+            0x54   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8a  , // 493  - lo
+            0x454  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8a  , // 494  - lo-la
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , // 495  - lrc
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x79  , // 496  - lrc-iq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , // 497  - lrc-ir
+            0x27   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8d  , // 498  - lt
+            0x427  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8d  , // 499  - lt-lt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , // 500  - lu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2c  , // 501  - lu-cd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 502  - luo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 503  - luo-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 504  - luy
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 505  - luy-ke
+            0x26   , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8c  , // 506  - lv
+            0x426  , 0x4e9 , 0x307 , 0x272d, 0x1f4 , 0x8c  , // 507  - lv-lv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 508  - mas
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 509  - mas-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 510  - mas-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 511  - mer
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 512  - mer-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa0  , // 513  - mfe
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa0  , // 514  - mfe-mu
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x95  , // 515  - mg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x95  , // 516  - mg-mg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , // 517  - mgh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , // 518  - mgh-mz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 519  - mgo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 520  - mgo-cm
+            0x81   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb7  , // 521  - mi
+            0x481  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb7  , // 522  - mi-nz
+            0x2f   , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x4ca2, // 523  - mk
+            0x42f  , 0x4e3 , 0x362 , 0x2717, 0x1f4 , 0x4ca2, // 524  - mk-mk
+            0x4c   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 525  - ml
+            0x44c  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 526  - ml-in
+            0x50   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , // 527  - mn
+            0x7850 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , // 528  - mn-cyrl
+            0x450  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0x9a  , // 529  - mn-mn
+            0x7c50 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , // 530  - mn-mong
+            0x850  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2d  , // 531  - mn-mong-cn
+            0xc50  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9a  , // 532  - mn-mong-mn
+            0x58   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 533  - mni
+            0x458  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 534  - mni-in
+            0x7c   , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , // 535  - moh
+            0x47c  , 0x4e4 , 0x352 , 0x2710, 0x25  , 0x27  , // 536  - moh-ca
+            0x4e   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 537  - mr
+            0x44e  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 538  - mr-in
+            0x3e   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa7  , // 539  - ms
+            0x83e  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x25  , // 540  - ms-bn
+            0x43e  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa7  , // 541  - ms-my
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd7  , // 542  - ms-sg
+            0x3a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa3  , // 543  - mt
+            0x43a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa3  , // 544  - mt-mt
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 545  - mua
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 546  - mua-cm
+            0x55   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x1b  , // 547  - my
+            0x455  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x1b  , // 548  - my-mm
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , // 549  - mzn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x74  , // 550  - mzn-ir
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xfe  , // 551  - naq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xfe  , // 552  - naq-na
+            0x7c14 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 553  - nb
+            0x414  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 554  - nb-no
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xdc  , // 555  - nb-sj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , // 556  - nd
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , // 557  - nd-zw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , // 558  - nds
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x5e  , // 559  - nds-de
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb0  , // 560  - nds-nl
+            0x61   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb2  , // 561  - ne
+            0x861  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 562  - ne-in
+            0x461  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xb2  , // 563  - ne-np
+            0x13   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , // 564  - nl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x12e , // 565  - nl-aw
+            0x813  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x15  , // 566  - nl-be
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9a55d42, // 567  - nl-bq
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x111 , // 568  - nl-cw
+            0x413  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb0  , // 569  - nl-nl
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xb5  , // 570  - nl-sr
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x78f7, // 571  - nl-sx
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 572  - nmg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 573  - nmg-cm
+            0x7814 , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 574  - nn
+            0x814  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 575  - nn-no
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 576  - nnh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 577  - nnh-cm
+            0x14   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 578  - no
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x64  , // 579  - nqo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x64  , // 580  - nqo-gn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 581  - nr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 582  - nr-za
+            0x6c   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 583  - nso
+            0x46c  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 584  - nso-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x114 , // 585  - nus
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x114 , // 586  - nus-ss
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 587  - nyn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 588  - nyn-ug
+            0x82   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 589  - oc
+            0x482  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x54  , // 590  - oc-fr
+            0x72   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 591  - om
+            0x472  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 592  - om-et
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 593  - om-ke
+            0x48   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 594  - or
+            0x448  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 595  - or-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , // 596  - os
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x58  , // 597  - os-ge
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xcb  , // 598  - os-ru
+            0x46   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 599  - pa
+            0x7c46 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 600  - pa-arab
+            0x846  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 601  - pa-arab-pk
+            0x446  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 602  - pa-in
+            0x79   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, // 603  - pap
+            0x479  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x993248, // 604  - pap-029
+            0x15   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xbf  , // 605  - pl
+            0x415  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xbf  , // 606  - pl-pl
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 607  - prg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 608  - prg-001
+            0x8c   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3   , // 609  - prs
+            0x48c  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x3   , // 610  - prs-af
+            0x63   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , // 611  - ps
+            0x463  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , // 612  - ps-af
+            0x16   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x20  , // 613  - pt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x9   , // 614  - pt-ao
+            0x416  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x20  , // 615  - pt-br
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , // 616  - pt-ch
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x39  , // 617  - pt-cv
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x45  , // 618  - pt-gq
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc4  , // 619  - pt-gw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x93  , // 620  - pt-lu
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x97  , // 621  - pt-mo
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xa8  , // 622  - pt-mz
+            0x816  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xc1  , // 623  - pt-pt
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xe9  , // 624  - pt-st
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x6f60e7, // 625  - pt-tl
+            0x901  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x7c  , // 626  - qps-latn-x-sh
+            0x501  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xf4  , // 627  - qps-ploc
+            0x5fe  , 0x3a4 , 0x3a4 , 0x2711, 0x4f42, 0x7a  , // 628  - qps-ploca
+            0x9ff  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xcd  , // 629  - qps-plocm
+            0x86   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , // 630  - quc
+            0x7c86 , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , // 631  - quc-latn
+            0x486  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x63  , // 632  - quc-latn-gt
+            0x6b   , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , // 633  - quz
+            0x46b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x1a  , // 634  - quz-bo
+            0x86b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0x42  , // 635  - quz-ec
+            0xc6b  , 0x4e4 , 0x352 , 0x2710, 0x4f3c, 0xbb  , // 636  - quz-pe
+            0x17   , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , // 637  - rm
+            0x417  , 0x4e4 , 0x352 , 0x2710, 0x4f31, 0xdf  , // 638  - rm-ch
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , // 639  - rn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x26  , // 640  - rn-bi
+            0x18   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xc8  , // 641  - ro
+            0x818  , 0x4e2 , 0x354 , 0x2   , 0x1f4 , 0x98  , // 642  - ro-md
+            0x418  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xc8  , // 643  - ro-ro
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 644  - rof
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 645  - rof-tz
+            0x19   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 646  - ru
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x1d  , // 647  - ru-by
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x82  , // 648  - ru-kg
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x89  , // 649  - ru-kz
+            0x819  , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0x98  , // 650  - ru-md
+            0x419  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 651  - ru-ru
+            0x1000 , 0x4e3 , 0x362 , 0x2   , 0x1f4 , 0xf1  , // 652  - ru-ua
+            0x87   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xcc  , // 653  - rw
+            0x487  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xcc  , // 654  - rw-rw
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 655  - rwk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 656  - rwk-tz
+            0x4f   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 657  - sa
+            0x44f  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 658  - sa-in
+            0x85   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 659  - sah
+            0x485  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 660  - sah-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 661  - saq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 662  - saq-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 663  - sbp
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 664  - sbp-tz
+            0x59   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 665  - sd
+            0x7c59 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 666  - sd-arab
+            0x859  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 667  - sd-arab-pk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 668  - sd-deva
+            0x459  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 669  - sd-deva-in
+            0x3b   , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 670  - se
+            0xc3b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 671  - se-fi
+            0x43b  , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 672  - se-no
+            0x83b  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 673  - se-se
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , // 674  - seh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa8  , // 675  - seh-mz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 676  - ses
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9d  , // 677  - ses-ml
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , // 678  - sg
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x37  , // 679  - sg-cf
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 680  - shi
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 681  - shi-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 682  - shi-latn-ma
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 683  - shi-tfng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 684  - shi-tfng-ma
+            0x5b   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , // 685  - si
+            0x45b  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , // 686  - si-lk
+            0x1b   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x8f  , // 687  - sk
+            0x41b  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x8f  , // 688  - sk-sk
+            0x24   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xd4  , // 689  - sl
+            0x424  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xd4  , // 690  - sl-si
+            0x783b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 691  - sma
+            0x183b , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 692  - sma-no
+            0x1c3b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 693  - sma-se
+            0x7c3b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 694  - smj
+            0x103b , 0x4e4 , 0x352 , 0x2710, 0x4f35, 0xb1  , // 695  - smj-no
+            0x143b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 696  - smj-se
+            0x703b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 697  - smn
+            0x243b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 698  - smn-fi
+            0x743b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 699  - sms
+            0x203b , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 700  - sms-fi
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , // 701  - sn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , // 702  - sn-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x108 , // 703  - sn-latn-zw
+            0x77   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd8  , // 704  - so
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3e  , // 705  - so-dj
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 706  - so-et
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 707  - so-ke
+            0x477  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd8  , // 708  - so-so
+            0x1c   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x6   , // 709  - sq
+            0x41c  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x6   , // 710  - sq-al
+            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x4ca2, // 711  - sq-mk
+            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x5190, 0x974941, // 712  - sq-xk
+            0x7c1a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , // 713  - sr
+            0x6c1a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10f , // 714  - sr-cyrl
+            0x1c1a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x19  , // 715  - sr-cyrl-ba
+            0xc1a  , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10d , // 716  - sr-cyrl-cs
+            0x301a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10e , // 717  - sr-cyrl-me
+            0x281a , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x10f , // 718  - sr-cyrl-rs
+            0x1000 , 0x4e3 , 0x357 , 0x2717, 0x5221, 0x974941, // 719  - sr-cyrl-xk
+            0x701a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , // 720  - sr-latn
+            0x181a , 0x4e2 , 0x354 , 0x2762, 0x366 , 0x19  , // 721  - sr-latn-ba
+            0x81a  , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10d , // 722  - sr-latn-cs
+            0x2c1a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10e , // 723  - sr-latn-me
+            0x241a , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x10f , // 724  - sr-latn-rs
+            0x1000 , 0x4e2 , 0x354 , 0x272d, 0x1f4 , 0x974941, // 725  - sr-latn-xk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 726  - ss
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x104 , // 727  - ss-sz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 728  - ss-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 729  - ssy
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 730  - ssy-er
+            0x30   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 731  - st
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x92  , // 732  - st-ls
+            0x430  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 733  - st-za
+            0x1d   , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 734  - sv
+            0x1000 , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x9906f5, // 735  - sv-ax
+            0x81d  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0x4d  , // 736  - sv-fi
+            0x41d  , 0x4e4 , 0x352 , 0x2710, 0x4f36, 0xdd  , // 737  - sv-se
+            0x41   , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x81  , // 738  - sw
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x2c  , // 739  - sw-cd
+            0x441  , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x81  , // 740  - sw-ke
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xef  , // 741  - sw-tz
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0xf0  , // 742  - sw-ug
+            0x1000 , 0x0   , 0x1   , 0x0   , 0x1f4 , 0x2c  , // 743  - swc
+            0x1000 , 0x0   , 0x1   , 0x0   , 0x1f4 , 0x2c  , // 744  - swc-cd
+            0x5a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xde  , // 745  - syr
+            0x45a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xde  , // 746  - syr-sy
+            0x49   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 747  - ta
+            0x449  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 748  - ta-in
+            0x849  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x2a  , // 749  - ta-lk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xa7  , // 750  - ta-my
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd7  , // 751  - ta-sg
+            0x4a   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 752  - te
+            0x44a  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x71  , // 753  - te-in
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 754  - teo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x81  , // 755  - teo-ke
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 756  - teo-ug
+            0x28   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , // 757  - tg
+            0x7c28 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , // 758  - tg-cyrl
+            0x428  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xe4  , // 759  - tg-cyrl-tj
+            0x1e   , 0x36a , 0x36a , 0x2725, 0x5166, 0xe3  , // 760  - th
+            0x41e  , 0x36a , 0x36a , 0x2725, 0x5166, 0xe3  , // 761  - th-th
+            0x73   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 762  - ti
+            0x873  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 763  - ti-er
+            0x473  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 764  - ti-et
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 765  - tig
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x47  , // 766  - tig-er
+            0x42   , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xee  , // 767  - tk
+            0x442  , 0x4e2 , 0x354 , 0x272d, 0x5190, 0xee  , // 768  - tk-tm
+            0x32   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 769  - tn
+            0x832  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0x13  , // 770  - tn-bw
+            0x432  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 771  - tn-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe7  , // 772  - to
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xe7  , // 773  - to-to
+            0x1f   , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0xeb  , // 774  - tr
+            0x1000 , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0x3b  , // 775  - tr-cy
+            0x41f  , 0x4e6 , 0x359 , 0x2761, 0x51a9, 0xeb  , // 776  - tr-tr
+            0x31   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 777  - ts
+            0x431  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 778  - ts-za
+            0x44   , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 779  - tt
+            0x444  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xcb  , // 780  - tt-ru
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , // 781  - twq
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xad  , // 782  - twq-ne
+            0x5f   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , // 783  - tzm
+            0x1000 , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , // 784  - tzm-arab
+            0x45f  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x9f  , // 785  - tzm-arab-ma
+            0x7c5f , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , // 786  - tzm-latn
+            0x85f  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0x4   , // 787  - tzm-latn-dz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 788  - tzm-latn-ma
+            0x785f , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 789  - tzm-tfng
+            0x105f , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 790  - tzm-tfng-ma
+            0x80   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x2d  , // 791  - ug
+            0x480  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0x2d  , // 792  - ug-cn
+            0x22   , 0x4e3 , 0x362 , 0x2721, 0x1f4 , 0xf1  , // 793  - uk
+            0x422  , 0x4e3 , 0x362 , 0x2721, 0x1f4 , 0xf1  , // 794  - uk-ua
+            0x20   , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 795  - ur
+            0x820  , 0x4e8 , 0x2d0 , 0x2   , 0x1f4 , 0x71  , // 796  - ur-in
+            0x420  , 0x4e8 , 0x2d0 , 0x2714, 0x4fc4, 0xbe  , // 797  - ur-pk
+            0x43   , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , // 798  - uz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , // 799  - uz-arab
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x3   , // 800  - uz-arab-af
+            0x7843 , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xf7  , // 801  - uz-cyrl
+            0x843  , 0x4e3 , 0x362 , 0x2717, 0x5190, 0xf7  , // 802  - uz-cyrl-uz
+            0x7c43 , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , // 803  - uz-latn
+            0x443  , 0x4e6 , 0x359 , 0x272d, 0x1f4 , 0xf7  , // 804  - uz-latn-uz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , // 805  - vai
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , // 806  - vai-latn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , // 807  - vai-latn-lr
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , // 808  - vai-vaii
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x8e  , // 809  - vai-vaii-lr
+            0x33   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 810  - ve
+            0x433  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xd1  , // 811  - ve-za
+            0x2a   , 0x4ea , 0x4ea , 0x2710, 0x1f4 , 0xfb  , // 812  - vi
+            0x42a  , 0x4ea , 0x4ea , 0x2710, 0x1f4 , 0xfb  , // 813  - vi-vn
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 814  - vo
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 815  - vo-001
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 816  - vun
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xef  , // 817  - vun-tz
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , // 818  - wae
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xdf  , // 819  - wae-ch
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 820  - wal
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x49  , // 821  - wal-et
+            0x88   , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , // 822  - wo
+            0x488  , 0x4e4 , 0x352 , 0x2710, 0x4f49, 0xd2  , // 823  - wo-sn
+            0x1007f, 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xf4  , // 824  - x-iv_mathan
+            0x34   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 825  - xh
+            0x434  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 826  - xh-za
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 827  - xog
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0xf0  , // 828  - xog-ug
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 829  - yav
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x31  , // 830  - yav-cm
+            0x3d   , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 831  - yi
+            0x43d  , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x989e, // 832  - yi-001
+            0x6a   , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 833  - yo
+            0x1000 , 0x4e4 , 0x1b5 , 0x2710, 0x1f4 , 0x1c  , // 834  - yo-bj
+            0x46a  , 0x4e4 , 0x1b5 , 0x2710, 0x25  , 0xaf  , // 835  - yo-ng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x68  , // 836  - yue
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x68  , // 837  - yue-hk
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 838  - zgh
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 839  - zgh-tfng
+            0x1000 , 0x0   , 0x1   , 0x2   , 0x1f4 , 0x9f  , // 840  - zgh-tfng-ma
+            0x7804 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , // 841  - zh
+            0x4    , 0x3a8 , 0x3a8 , 0x0   , 0x1f4 , 0x2d  , // 842  - zh-chs
+            0x7c04 , 0x3b6 , 0x3b6 , 0x0   , 0x1f4 , 0x68  , // 843  - zh-cht
+            0x804  , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , // 844  - zh-cn
+            0x50804, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , // 845  - zh-cn_phoneb
+            0x20804, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , // 846  - zh-cn_stroke
+            0x4    , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x2d  , // 847  - zh-hans
+            0x1000 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x68  , // 848  - zh-hans-hk
+            0x1000 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0x97  , // 849  - zh-hans-mo
+            0x7c04 , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , // 850  - zh-hant
+            0xc04  , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , // 851  - zh-hk
+            0x40c04, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x68  , // 852  - zh-hk_radstr
+            0x1404 , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , // 853  - zh-mo
+            0x41404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , // 854  - zh-mo_radstr
+            0x21404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0x97  , // 855  - zh-mo_stroke
+            0x1004 , 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , // 856  - zh-sg
+            0x51004, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , // 857  - zh-sg_phoneb
+            0x21004, 0x3a8 , 0x3a8 , 0x2718, 0x1f4 , 0xd7  , // 858  - zh-sg_stroke
+            0x404  , 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , // 859  - zh-tw
+            0x30404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , // 860  - zh-tw_pronun
+            0x40404, 0x3b6 , 0x3b6 , 0x2712, 0x1f4 , 0xed  , // 861  - zh-tw_radstr
+            0x35   , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 862  - zu
+            0x435  , 0x4e4 , 0x352 , 0x2710, 0x1f4 , 0xd1  , // 863  - zu-za
+        };        
+        // s_lcids list all supported lcids. used to binary search and we use the index of the matched lcid to 
+        // get the index in s_localeNamesIndices using s_lcidToCultureNameIndecis
+        private static readonly int[] s_lcids = new int[]
+        {
+            // Lcid , index   - index in c_localeNames
+            0x1    , // 0    - 52
+            0x2    , // 1    - 301
+            0x3    , // 2    - 421
+            0x4    , // 3    - 4139
+            0x5    , // 4    - 502
+            0x6    , // 5    - 523
+            0x7    , // 6    - 544
+            0x8    , // 7    - 664
+            0x9    , // 8    - 676
+            0xa    , // 9    - 1214
+            0xb    , // 10   - 1423
+            0xc    , // 11   - 1451
+            0xd    , // 12   - 1825
+            0xe    , // 13   - 1860
+            0xf    , // 14   - 1929
+            0x10   , // 15   - 1936
+            0x11   , // 16   - 1989
+            0x12   , // 17   - 2179
+            0x13   , // 18   - 2685
+            0x14   , // 19   - 2747
+            0x15   , // 20   - 2864
+            0x16   , // 21   - 2897
+            0x17   , // 22   - 3041
+            0x18   , // 23   - 3055
+            0x19   , // 24   - 3076
+            0x1a   , // 25   - 1839
+            0x1b   , // 26   - 3284
+            0x1c   , // 27   - 3387
+            0x1d   , // 28   - 3553
+            0x1e   , // 29   - 3673
+            0x1f   , // 30   - 3727
+            0x20   , // 31   - 3847
+            0x21   , // 32   - 1908
+            0x22   , // 33   - 3840
+            0x23   , // 34   - 276
+            0x24   , // 35   - 3291
+            0x25   , // 36   - 1354
+            0x26   , // 37   - 2429
+            0x27   , // 38   - 2397
+            0x28   , // 39   - 3654
+            0x29   , // 40   - 1377
+            0x2a   , // 41   - 3960
+            0x2b   , // 42   - 1879
+            0x2c   , // 43   - 224
+            0x2d   , // 44   - 1361
+            0x2e   , // 45   - 1851
+            0x2f   , // 46   - 2501
+            0x30   , // 47   - 3541
+            0x31   , // 48   - 3739
+            0x32   , // 49   - 3708
+            0x33   , // 50   - 3953
+            0x34   , // 51   - 4020
+            0x35   , // 52   - 4277
+            0x36   , // 53   - 17
+            0x37   , // 54   - 2062
+            0x38   , // 55   - 1439
+            0x39   , // 56   - 1832
+            0x3a   , // 57   - 2598
+            0x3b   , // 58   - 3194
+            0x3c   , // 59   - 1705
+            0x3d   , // 60   - 4045
+            0x3e   , // 61   - 2581
+            0x3f   , // 62   - 2133
+            0x40   , // 63   - 2306
+            0x41   , // 64   - 3570
+            0x42   , // 65   - 3701
+            0x43   , // 66   - 3859
+            0x44   , // 67   - 3746
+            0x45   , // 68   - 336
+            0x46   , // 69   - 2830
+            0x47   , // 70   - 1754
+            0x48   , // 71   - 2811
+            0x49   , // 72   - 3610
+            0x4a   , // 73   - 3632
+            0x4b   , // 74   - 2172
+            0x4c   , // 75   - 2508
+            0x4d   , // 76   - 199
+            0x4e   , // 77   - 2574
+            0x4f   , // 78   - 3124
+            0x50   , // 79   - 2515
+            0x51   , // 80   - 348
+            0x52   , // 81   - 516
+            0x53   , // 82   - 2165
+            0x54   , // 83   - 2375
+            0x55   , // 84   - 2614
+            0x56   , // 85   - 1719
+            0x57   , // 86   - 2191
+            0x58   , // 87   - 2556
+            0x59   , // 88   - 3158
+            0x5a   , // 89   - 3601
+            0x5b   , // 90   - 3277
+            0x5c   , // 91   - 473
+            0x5d   , // 92   - 1953
+            0x5e   , // 93   - 45
+            0x5f   , // 94   - 3762
+            0x60   , // 95   - 2207
+            0x61   , // 96   - 2673
+            0x62   , // 97   - 1698
+            0x63   , // 98   - 2890
+            0x64   , // 99   - 1430
+            0x65   , // 100  - 620
+            0x66   , // 101  - 308
+            0x67   , // 102  - 1384
+            0x68   , // 103  - 1777
+            0x69   , // 104  - 1899
+            0x6a   , // 105  - 4053
+            0x6b   , // 106  - 3020
+            0x6c   , // 107  - 2765
+            0x6d   , // 108  - 260
+            0x6e   , // 109  - 2330
+            0x6f   , // 110  - 2149
+            0x70   , // 111  - 1915
+            0x71   , // 112  - 2200
+            0x72   , // 113  - 2799
+            0x73   , // 114  - 3680
+            0x74   , // 115  - 1726
+            0x75   , // 116  - 1816
+            0x76   , // 117  - 2313
+            0x77   , // 118  - 3365
+            0x78   , // 119  - 1922
+            0x79   , // 120  - 2854
+            0x7a   , // 121  - 190
+            0x7c   , // 122  - 2565
+            0x7e   , // 123  - 360
+            0x80   , // 124  - 3833
+            0x81   , // 125  - 2494
+            0x82   , // 126  - 2792
+            0x83   , // 127  - 495
+            0x84   , // 128  - 1733
+            0x85   , // 129  - 3131
+            0x86   , // 130  - 2998
+            0x87   , // 131  - 3108
+            0x88   , // 132  - 4002
+            0x8c   , // 133  - 2881
+            0x91   , // 134  - 1712
+            0x92   , // 135  - 2270
+            0x401  , // 136  - 150
+            0x402  , // 137  - 303
+            0x403  , // 138  - 428
+            0x404  , // 139  - 4248
+            0x405  , // 140  - 504
+            0x406  , // 141  - 525
+            0x407  , // 142  - 561
+            0x408  , // 143  - 671
+            0x409  , // 144  - 1161
+            0x40a  , // 145  - 1272
+            0x40b  , // 146  - 1425
+            0x40c  , // 147  - 1529
+            0x40d  , // 148  - 1827
+            0x40e  , // 149  - 1862
+            0x40f  , // 150  - 1931
+            0x410  , // 151  - 1943
+            0x411  , // 152  - 1991
+            0x412  , // 153  - 2186
+            0x413  , // 154  - 2707
+            0x414  , // 155  - 2641
+            0x415  , // 156  - 2866
+            0x416  , // 157  - 2904
+            0x417  , // 158  - 3043
+            0x418  , // 159  - 3062
+            0x419  , // 160  - 3098
+            0x41a  , // 161  - 1846
+            0x41b  , // 162  - 3286
+            0x41c  , // 163  - 3389
+            0x41d  , // 164  - 3565
+            0x41e  , // 165  - 3675
+            0x41f  , // 166  - 3734
+            0x420  , // 167  - 3854
+            0x421  , // 168  - 1910
+            0x422  , // 169  - 3842
+            0x423  , // 170  - 278
+            0x424  , // 171  - 3293
+            0x425  , // 172  - 1356
+            0x426  , // 173  - 2431
+            0x427  , // 174  - 2399
+            0x428  , // 175  - 3663
+            0x429  , // 176  - 1379
+            0x42a  , // 177  - 3962
+            0x42b  , // 178  - 1881
+            0x42c  , // 179  - 250
+            0x42d  , // 180  - 1363
+            0x42e  , // 181  - 1854
+            0x42f  , // 182  - 2503
+            0x430  , // 183  - 3548
+            0x431  , // 184  - 3741
+            0x432  , // 185  - 3715
+            0x433  , // 186  - 3955
+            0x434  , // 187  - 4022
+            0x435  , // 188  - 4279
+            0x436  , // 189  - 24
+            0x437  , // 190  - 2064
+            0x438  , // 191  - 1446
+            0x439  , // 192  - 1834
+            0x43a  , // 193  - 2600
+            0x43b  , // 194  - 3201
+            0x43d  , // 195  - 4047
+            0x43e  , // 196  - 2588
+            0x43f  , // 197  - 2135
+            0x440  , // 198  - 2308
+            0x441  , // 199  - 3577
+            0x442  , // 200  - 3703
+            0x443  , // 201  - 3902
+            0x444  , // 202  - 3748
+            0x445  , // 203  - 343
+            0x446  , // 204  - 2849
+            0x447  , // 205  - 1756
+            0x448  , // 206  - 2813
+            0x449  , // 207  - 3612
+            0x44a  , // 208  - 3634
+            0x44b  , // 209  - 2174
+            0x44c  , // 210  - 2510
+            0x44d  , // 211  - 201
+            0x44e  , // 212  - 2576
+            0x44f  , // 213  - 3126
+            0x450  , // 214  - 2524
+            0x451  , // 215  - 350
+            0x452  , // 216  - 518
+            0x453  , // 217  - 2167
+            0x454  , // 218  - 2377
+            0x455  , // 219  - 2616
+            0x456  , // 220  - 1721
+            0x457  , // 221  - 2194
+            0x458  , // 222  - 2559
+            0x459  , // 223  - 3184
+            0x45a  , // 224  - 3604
+            0x45b  , // 225  - 3279
+            0x45c  , // 226  - 484
+            0x45d  , // 227  - 1962
+            0x45e  , // 228  - 47
+            0x45f  , // 229  - 3773
+            0x460  , // 230  - 2209
+            0x461  , // 231  - 2680
+            0x462  , // 232  - 1700
+            0x463  , // 233  - 2892
+            0x464  , // 234  - 1433
+            0x465  , // 235  - 622
+            0x466  , // 236  - 311
+            0x467  , // 237  - 1418
+            0x468  , // 238  - 1806
+            0x469  , // 239  - 1902
+            0x46a  , // 240  - 4060
+            0x46b  , // 241  - 3023
+            0x46c  , // 242  - 2768
+            0x46d  , // 243  - 262
+            0x46e  , // 244  - 2332
+            0x46f  , // 245  - 2151
+            0x470  , // 246  - 1917
+            0x471  , // 247  - 2202
+            0x472  , // 248  - 2801
+            0x473  , // 249  - 3687
+            0x474  , // 250  - 1728
+            0x475  , // 251  - 1819
+            0x476  , // 252  - 2315
+            0x477  , // 253  - 3382
+            0x478  , // 254  - 1924
+            0x479  , // 255  - 2857
+            0x47a  , // 256  - 193
+            0x47c  , // 257  - 2568
+            0x47e  , // 258  - 362
+            0x480  , // 259  - 3835
+            0x481  , // 260  - 2496
+            0x482  , // 261  - 2794
+            0x483  , // 262  - 497
+            0x484  , // 263  - 1742
+            0x485  , // 264  - 3134
+            0x486  , // 265  - 3009
+            0x487  , // 266  - 3110
+            0x488  , // 267  - 4004
+            0x48c  , // 268  - 2884
+            0x491  , // 269  - 1714
+            0x492  , // 270  - 2279
+            0x501  , // 271  - 2972
+            0x5fe  , // 272  - 2980
+            0x801  , // 273  - 95
+            0x803  , // 274  - 433
+            0x804  , // 275  - 4110
+            0x807  , // 276  - 556
+            0x809  , // 277  - 831
+            0x80a  , // 278  - 1299
+            0x80c  , // 279  - 1459
+            0x810  , // 280  - 1938
+            0x813  , // 281  - 2692
+            0x814  , // 282  - 2733
+            0x816  , // 283  - 2944
+            0x818  , // 284  - 3057
+            0x819  , // 285  - 3093
+            0x81a  , // 286  - 3480
+            0x81d  , // 287  - 3560
+            0x820  , // 288  - 3849
+            0x82c  , // 289  - 233
+            0x82e  , // 290  - 605
+            0x832  , // 291  - 3710
+            0x83b  , // 292  - 3206
+            0x83c  , // 293  - 1707
+            0x83e  , // 294  - 2583
+            0x843  , // 295  - 3885
+            0x845  , // 296  - 338
+            0x846  , // 297  - 2839
+            0x849  , // 298  - 3617
+            0x850  , // 299  - 2536
+            0x859  , // 300  - 3167
+            0x85d  , // 301  - 1979
+            0x85f  , // 302  - 3792
+            0x860  , // 303  - 2233
+            0x861  , // 304  - 2675
+            0x867  , // 305  - 1403
+            0x86b  , // 306  - 3029
+            0x873  , // 307  - 3682
+            0x901  , // 308  - 2959
+            0x9ff  , // 309  - 2989
+            0xc01  , // 310  - 80
+            0xc04  , // 311  - 4173
+            0xc07  , // 312  - 546
+            0xc09  , // 313  - 716
+            0xc0a  , // 314  - 1267
+            0xc0c  , // 315  - 1484
+            0xc1a  , // 316  - 3423
+            0xc3b  , // 317  - 3196
+            0xc50  , // 318  - 2546
+            0xc51  , // 319  - 638
+            0xc6b  , // 320  - 3035
+            0x1001 , // 321  - 120
+            0x1004 , // 322  - 4219
+            0x1007 , // 323  - 588
+            0x1009 , // 324  - 756
+            0x100a , // 325  - 1289
+            0x100c , // 326  - 1504
+            0x101a , // 327  - 1841
+            0x103b , // 328  - 3316
+            0x105f , // 329  - 3822
+            0x1401 , // 330  - 75
+            0x1404 , // 331  - 4190
+            0x1407 , // 332  - 583
+            0x1409 , // 333  - 1026
+            0x140a , // 334  - 1247
+            0x140c , // 335  - 1569
+            0x141a , // 336  - 402
+            0x143b , // 337  - 3322
+            0x1801 , // 338  - 125
+            0x1809 , // 339  - 881
+            0x180a , // 340  - 1309
+            0x180c , // 341  - 1579
+            0x181a , // 342  - 3470
+            0x183b , // 343  - 3301
+            0x1c01 , // 344  - 180
+            0x1c09 , // 345  - 1191
+            0x1c0a , // 346  - 1257
+            0x1c0c , // 347  - 1453
+            0x1c1a , // 348  - 3413
+            0x1c3b , // 349  - 3307
+            0x2001 , // 350  - 135
+            0x2009 , // 351  - 911
+            0x200a , // 352  - 1349
+            0x200c , // 353  - 1634
+            0x201a , // 354  - 385
+            0x203b , // 355  - 3340
+            0x2401 , // 356  - 185
+            0x2409 , // 357  - 684
+            0x240a , // 358  - 1242
+            0x240c , // 359  - 1489
+            0x241a , // 360  - 3500
+            0x243b , // 361  - 3331
+            0x2801 , // 362  - 170
+            0x2809 , // 363  - 751
+            0x280a , // 364  - 1314
+            0x280c , // 365  - 1649
+            0x281a , // 366  - 3443
+            0x2c01 , // 367  - 100
+            0x2c09 , // 368  - 1136
+            0x2c0a , // 369  - 1222
+            0x2c0c , // 370  - 1514
+            0x2c1a , // 371  - 3490
+            0x3001 , // 372  - 115
+            0x3009 , // 373  - 1201
+            0x300a , // 374  - 1262
+            0x300c , // 375  - 1509
+            0x301a , // 376  - 3433
+            0x3401 , // 377  - 110
+            0x3409 , // 378  - 1036
+            0x340a , // 379  - 1237
+            0x340c , // 380  - 1594
+            0x3801 , // 381  - 60
+            0x3809 , // 382  - 876
+            0x380a , // 383  - 1344
+            0x380c , // 384  - 1574
+            0x3c01 , // 385  - 65
+            0x3c09 , // 386  - 871
+            0x3c0a , // 387  - 1329
+            0x3c0c , // 388  - 1559
+            0x4001 , // 389  - 145
+            0x4009 , // 390  - 896
+            0x400a , // 391  - 1227
+            0x4409 , // 392  - 991
+            0x440a , // 393  - 1334
+            0x4809 , // 394  - 1086
+            0x480a , // 395  - 1294
+            0x4c0a , // 396  - 1304
+            0x500a , // 397  - 1324
+            0x540a , // 398  - 1339
+            0x580a , // 399  - 1216
+            0x5c0a , // 400  - 1252
+            0x641a , // 401  - 378
+            0x681a , // 402  - 395
+            0x6c1a , // 403  - 3406
+            0x701a , // 404  - 3463
+            0x703b , // 405  - 3328
+            0x742c , // 406  - 226
+            0x743b , // 407  - 3337
+            0x7804 , // 408  - 4096
+            0x7814 , // 409  - 2731
+            0x781a , // 410  - 376
+            0x782c , // 411  - 243
+            0x783b , // 412  - 3298
+            0x7843 , // 413  - 3878
+            0x7850 , // 414  - 2517
+            0x785d , // 415  - 1955
+            0x785f , // 416  - 3814
+            0x7c04 , // 417  - 4166
+            0x7c14 , // 418  - 2639
+            0x7c1a , // 419  - 3404
+            0x7c28 , // 420  - 3656
+            0x7c2e , // 421  - 602
+            0x7c3b , // 422  - 3313
+            0x7c43 , // 423  - 3895
+            0x7c46 , // 424  - 2832
+            0x7c50 , // 425  - 2529
+            0x7c59 , // 426  - 3160
+            0x7c5c , // 427  - 476
+            0x7c5d , // 428  - 1972
+            0x7c5f , // 429  - 3784
+            0x7c67 , // 430  - 1396
+            0x7c68 , // 431  - 1779
+            0x7c86 , // 432  - 3001
+            0x7c92 , // 433  - 2272
+            0x1007f, // 434  - 4009
+            0x10407, // 435  - 566
+            0x1040e, // 436  - 1867
+            0x10437, // 437  - 2069
+            0x20804, // 438  - 4127
+            0x21004, // 439  - 4236
+            0x21404, // 440  - 4207
+            0x30404, // 441  - 4253
+            0x40404, // 442  - 4265
+            0x40411, // 443  - 1996
+            0x40c04, // 444  - 4178
+            0x41404, // 445  - 4195
+            0x50804, // 446  - 4115
+            0x51004  // 447  - 4224
+        };        
+        // each element in s_lcidToCultureNameIndecis is index to s_localeNamesIndices
+        private static readonly int[] s_lcidToCultureNameIndecis = new int[]
+        {
+        // Index to s_localeNamesIndices, index to this array - lcid  - index to the c_localeNames
+            13   , // 0    - 1     - 52
+            64   , // 1    - 2     - 301
+            88   , // 2    - 3     - 421
+            847  , // 3    - 4     - 4139
+            103  , // 4    - 5     - 502
+            109  , // 5    - 6     - 523
+            114  , // 6    - 7     - 544
+            140  , // 7    - 8     - 664
+            143  , // 8    - 9     - 676
+            251  , // 9    - a     - 1214
+            293  , // 10   - b     - 1423
+            300  , // 11   - c     - 1451
+            377  , // 12   - d     - 1825
+            386  , // 13   - e     - 1860
+            402  , // 14   - f     - 1929
+            404  , // 15   - 10    - 1936
+            413  , // 16   - 11    - 1989
+            452  , // 17   - 12    - 2179
+            564  , // 18   - 13    - 2685
+            578  , // 19   - 14    - 2747
+            605  , // 20   - 15    - 2864
+            613  , // 21   - 16    - 2897
+            637  , // 22   - 17    - 3041
+            641  , // 23   - 18    - 3055
+            646  , // 24   - 19    - 3076
+            381  , // 25   - 1a    - 1839
+            687  , // 26   - 1b    - 3284
+            709  , // 27   - 1c    - 3387
+            734  , // 28   - 1d    - 3553
+            760  , // 29   - 1e    - 3673
+            774  , // 30   - 1f    - 3727
+            795  , // 31   - 20    - 3847
+            396  , // 32   - 21    - 1908
+            793  , // 33   - 22    - 3840
+            58   , // 34   - 23    - 276
+            689  , // 35   - 24    - 3291
+            278  , // 36   - 25    - 1354
+            506  , // 37   - 26    - 2429
+            498  , // 38   - 27    - 2397
+            757  , // 39   - 28    - 3654
+            284  , // 40   - 29    - 1377
+            812  , // 41   - 2a    - 3960
+            389  , // 42   - 2b    - 1879
+            49   , // 43   - 2c    - 224
+            280  , // 44   - 2d    - 1361
+            384  , // 45   - 2e    - 1851
+            523  , // 46   - 2f    - 2501
+            731  , // 47   - 30    - 3541
+            777  , // 48   - 31    - 3739
+            769  , // 49   - 32    - 3708
+            810  , // 50   - 33    - 3953
+            825  , // 51   - 34    - 4020
+            862  , // 52   - 35    - 4277
+            4    , // 53   - 36    - 17
+            425  , // 54   - 37    - 2062
+            297  , // 55   - 38    - 1439
+            379  , // 56   - 39    - 1832
+            543  , // 57   - 3a    - 2598
+            670  , // 58   - 3b    - 3194
+            352  , // 59   - 3c    - 1705
+            831  , // 60   - 3d    - 4045
+            539  , // 61   - 3e    - 2581
+            440  , // 62   - 3f    - 2133
+            476  , // 63   - 40    - 2306
+            738  , // 64   - 41    - 3570
+            767  , // 65   - 42    - 3701
+            798  , // 66   - 43    - 3859
+            779  , // 67   - 44    - 3746
+            71   , // 68   - 45    - 336
+            599  , // 69   - 46    - 2830
+            364  , // 70   - 47    - 1754
+            594  , // 71   - 48    - 2811
+            747  , // 72   - 49    - 3610
+            752  , // 73   - 4a    - 3632
+            450  , // 74   - 4b    - 2172
+            525  , // 75   - 4c    - 2508
+            43   , // 76   - 4d    - 199
+            537  , // 77   - 4e    - 2574
+            657  , // 78   - 4f    - 3124
+            527  , // 79   - 50    - 2515
+            74   , // 80   - 51    - 348
+            107  , // 81   - 52    - 516
+            448  , // 82   - 53    - 2165
+            493  , // 83   - 54    - 2375
+            547  , // 84   - 55    - 2614
+            356  , // 85   - 56    - 1719
+            455  , // 86   - 57    - 2191
+            533  , // 87   - 58    - 2556
+            665  , // 88   - 59    - 3158
+            745  , // 89   - 5a    - 3601
+            685  , // 90   - 5b    - 3277
+            98   , // 91   - 5c    - 473
+            408  , // 92   - 5d    - 1953
+            11   , // 93   - 5e    - 45
+            783  , // 94   - 5f    - 3762
+            459  , // 95   - 60    - 2207
+            561  , // 96   - 61    - 2673
+            350  , // 97   - 62    - 1698
+            611  , // 98   - 63    - 2890
+            295  , // 99   - 64    - 1430
+            129  , // 100  - 65    - 620
+            66   , // 101  - 66    - 308
+            286  , // 102  - 67    - 1384
+            370  , // 103  - 68    - 1777
+            394  , // 104  - 69    - 1899
+            833  , // 105  - 6a    - 4053
+            633  , // 106  - 6b    - 3020
+            583  , // 107  - 6c    - 2765
+            54   , // 108  - 6d    - 260
+            482  , // 109  - 6e    - 2330
+            444  , // 110  - 6f    - 2149
+            398  , // 111  - 70    - 1915
+            457  , // 112  - 71    - 2200
+            591  , // 113  - 72    - 2799
+            762  , // 114  - 73    - 3680
+            358  , // 115  - 74    - 1726
+            375  , // 116  - 75    - 1816
+            478  , // 117  - 76    - 2313
+            704  , // 118  - 77    - 3365
+            400  , // 119  - 78    - 1922
+            603  , // 120  - 79    - 2854
+            41   , // 121  - 7a    - 190
+            535  , // 122  - 7c    - 2565
+            77   , // 123  - 7e    - 360
+            791  , // 124  - 80    - 3833
+            521  , // 125  - 81    - 2494
+            589  , // 126  - 82    - 2792
+            101  , // 127  - 83    - 495
+            360  , // 128  - 84    - 1733
+            659  , // 129  - 85    - 3131
+            630  , // 130  - 86    - 2998
+            653  , // 131  - 87    - 3108
+            822  , // 132  - 88    - 4002
+            609  , // 133  - 8c    - 2881
+            354  , // 134  - 91    - 1712
+            470  , // 135  - 92    - 2270
+            33   , // 136  - 401   - 150
+            65   , // 137  - 402   - 303
+            90   , // 138  - 403   - 428
+            859  , // 139  - 404   - 4248
+            104  , // 140  - 405   - 504
+            110  , // 141  - 406   - 525
+            118  , // 142  - 407   - 561
+            142  , // 143  - 408   - 671
+            240  , // 144  - 409   - 1161
+            263  , // 145  - 40a   - 1272
+            294  , // 146  - 40b   - 1425
+            316  , // 147  - 40c   - 1529
+            378  , // 148  - 40d   - 1827
+            387  , // 149  - 40e   - 1862
+            403  , // 150  - 40f   - 1931
+            406  , // 151  - 410   - 1943
+            414  , // 152  - 411   - 1991
+            454  , // 153  - 412   - 2186
+            569  , // 154  - 413   - 2707
+            554  , // 155  - 414   - 2641
+            606  , // 156  - 415   - 2866
+            615  , // 157  - 416   - 2904
+            638  , // 158  - 417   - 3043
+            643  , // 159  - 418   - 3062
+            651  , // 160  - 419   - 3098
+            383  , // 161  - 41a   - 1846
+            688  , // 162  - 41b   - 3286
+            710  , // 163  - 41c   - 3389
+            737  , // 164  - 41d   - 3565
+            761  , // 165  - 41e   - 3675
+            776  , // 166  - 41f   - 3734
+            797  , // 167  - 420   - 3854
+            397  , // 168  - 421   - 1910
+            794  , // 169  - 422   - 3842
+            59   , // 170  - 423   - 278
+            690  , // 171  - 424   - 3293
+            279  , // 172  - 425   - 1356
+            507  , // 173  - 426   - 2431
+            499  , // 174  - 427   - 2399
+            759  , // 175  - 428   - 3663
+            285  , // 176  - 429   - 1379
+            813  , // 177  - 42a   - 3962
+            390  , // 178  - 42b   - 1881
+            53   , // 179  - 42c   - 250
+            281  , // 180  - 42d   - 1363
+            385  , // 181  - 42e   - 1854
+            524  , // 182  - 42f   - 2503
+            733  , // 183  - 430   - 3548
+            778  , // 184  - 431   - 3741
+            771  , // 185  - 432   - 3715
+            811  , // 186  - 433   - 3955
+            826  , // 187  - 434   - 4022
+            863  , // 188  - 435   - 4279
+            6    , // 189  - 436   - 24
+            426  , // 190  - 437   - 2064
+            299  , // 191  - 438   - 1446
+            380  , // 192  - 439   - 1834
+            544  , // 193  - 43a   - 2600
+            672  , // 194  - 43b   - 3201
+            832  , // 195  - 43d   - 4047
+            541  , // 196  - 43e   - 2588
+            441  , // 197  - 43f   - 2135
+            477  , // 198  - 440   - 2308
+            740  , // 199  - 441   - 3577
+            768  , // 200  - 442   - 3703
+            804  , // 201  - 443   - 3902
+            780  , // 202  - 444   - 3748
+            73   , // 203  - 445   - 343
+            602  , // 204  - 446   - 2849
+            365  , // 205  - 447   - 1756
+            595  , // 206  - 448   - 2813
+            748  , // 207  - 449   - 3612
+            753  , // 208  - 44a   - 3634
+            451  , // 209  - 44b   - 2174
+            526  , // 210  - 44c   - 2510
+            44   , // 211  - 44d   - 201
+            538  , // 212  - 44e   - 2576
+            658  , // 213  - 44f   - 3126
+            529  , // 214  - 450   - 2524
+            75   , // 215  - 451   - 350
+            108  , // 216  - 452   - 518
+            449  , // 217  - 453   - 2167
+            494  , // 218  - 454   - 2377
+            548  , // 219  - 455   - 2616
+            357  , // 220  - 456   - 1721
+            456  , // 221  - 457   - 2194
+            534  , // 222  - 458   - 2559
+            669  , // 223  - 459   - 3184
+            746  , // 224  - 45a   - 3604
+            686  , // 225  - 45b   - 3279
+            100  , // 226  - 45c   - 484
+            410  , // 227  - 45d   - 1962
+            12   , // 228  - 45e   - 47
+            785  , // 229  - 45f   - 3773
+            460  , // 230  - 460   - 2209
+            563  , // 231  - 461   - 2680
+            351  , // 232  - 462   - 1700
+            612  , // 233  - 463   - 2892
+            296  , // 234  - 464   - 1433
+            130  , // 235  - 465   - 622
+            67   , // 236  - 466   - 311
+            292  , // 237  - 467   - 1418
+            374  , // 238  - 468   - 1806
+            395  , // 239  - 469   - 1902
+            835  , // 240  - 46a   - 4060
+            634  , // 241  - 46b   - 3023
+            584  , // 242  - 46c   - 2768
+            55   , // 243  - 46d   - 262
+            483  , // 244  - 46e   - 2332
+            445  , // 245  - 46f   - 2151
+            399  , // 246  - 470   - 1917
+            458  , // 247  - 471   - 2202
+            592  , // 248  - 472   - 2801
+            764  , // 249  - 473   - 3687
+            359  , // 250  - 474   - 1728
+            376  , // 251  - 475   - 1819
+            479  , // 252  - 476   - 2315
+            708  , // 253  - 477   - 3382
+            401  , // 254  - 478   - 1924
+            604  , // 255  - 479   - 2857
+            42   , // 256  - 47a   - 193
+            536  , // 257  - 47c   - 2568
+            78   , // 258  - 47e   - 362
+            792  , // 259  - 480   - 3835
+            522  , // 260  - 481   - 2496
+            590  , // 261  - 482   - 2794
+            102  , // 262  - 483   - 497
+            362  , // 263  - 484   - 1742
+            660  , // 264  - 485   - 3134
+            632  , // 265  - 486   - 3009
+            654  , // 266  - 487   - 3110
+            823  , // 267  - 488   - 4004
+            610  , // 268  - 48c   - 2884
+            355  , // 269  - 491   - 1714
+            472  , // 270  - 492   - 2279
+            627  , // 271  - 501   - 2972
+            628  , // 272  - 5fe   - 2980
+            22   , // 273  - 801   - 95
+            91   , // 274  - 803   - 433
+            844  , // 275  - 804   - 4110
+            117  , // 276  - 807   - 556
+            174  , // 277  - 809   - 831
+            267  , // 278  - 80a   - 1299
+            302  , // 279  - 80c   - 1459
+            405  , // 280  - 810   - 1938
+            566  , // 281  - 813   - 2692
+            575  , // 282  - 814   - 2733
+            623  , // 283  - 816   - 2944
+            642  , // 284  - 818   - 3057
+            650  , // 285  - 819   - 3093
+            722  , // 286  - 81a   - 3480
+            736  , // 287  - 81d   - 3560
+            796  , // 288  - 820   - 3849
+            51   , // 289  - 82c   - 233
+            126  , // 290  - 82e   - 605
+            770  , // 291  - 832   - 3710
+            673  , // 292  - 83b   - 3206
+            353  , // 293  - 83c   - 1707
+            540  , // 294  - 83e   - 2583
+            802  , // 295  - 843   - 3885
+            72   , // 296  - 845   - 338
+            601  , // 297  - 846   - 2839
+            749  , // 298  - 849   - 3617
+            531  , // 299  - 850   - 2536
+            667  , // 300  - 859   - 3167
+            412  , // 301  - 85d   - 1979
+            787  , // 302  - 85f   - 3792
+            463  , // 303  - 860   - 2233
+            562  , // 304  - 861   - 2675
+            290  , // 305  - 867   - 1403
+            635  , // 306  - 86b   - 3029
+            763  , // 307  - 873   - 3682
+            626  , // 308  - 901   - 2959
+            629  , // 309  - 9ff   - 2989
+            19   , // 310  - c01   - 80
+            851  , // 311  - c04   - 4173
+            115  , // 312  - c07   - 546
+            151  , // 313  - c09   - 716
+            262  , // 314  - c0a   - 1267
+            307  , // 315  - c0c   - 1484
+            716  , // 316  - c1a   - 3423
+            671  , // 317  - c3b   - 3196
+            532  , // 318  - c50   - 2546
+            134  , // 319  - c51   - 638
+            636  , // 320  - c6b   - 3035
+            27   , // 321  - 1001  - 120
+            856  , // 322  - 1004  - 4219
+            122  , // 323  - 1007  - 588
+            159  , // 324  - 1009  - 756
+            265  , // 325  - 100a  - 1289
+            311  , // 326  - 100c  - 1504
+            382  , // 327  - 101a  - 1841
+            695  , // 328  - 103b  - 3316
+            790  , // 329  - 105f  - 3822
+            18   , // 330  - 1401  - 75
+            853  , // 331  - 1404  - 4190
+            121  , // 332  - 1407  - 583
+            213  , // 333  - 1409  - 1026
+            258  , // 334  - 140a  - 1247
+            324  , // 335  - 140c  - 1569
+            85   , // 336  - 141a  - 402
+            696  , // 337  - 143b  - 3322
+            28   , // 338  - 1801  - 125
+            184  , // 339  - 1809  - 881
+            269  , // 340  - 180a  - 1309
+            326  , // 341  - 180c  - 1579
+            721  , // 342  - 181a  - 3470
+            692  , // 343  - 183b  - 3301
+            39   , // 344  - 1c01  - 180
+            246  , // 345  - 1c09  - 1191
+            260  , // 346  - 1c0a  - 1257
+            301  , // 347  - 1c0c  - 1453
+            715  , // 348  - 1c1a  - 3413
+            693  , // 349  - 1c3b  - 3307
+            30   , // 350  - 2001  - 135
+            190  , // 351  - 2009  - 911
+            277  , // 352  - 200a  - 1349
+            337  , // 353  - 200c  - 1634
+            83   , // 354  - 201a  - 385
+            700  , // 355  - 203b  - 3340
+            40   , // 356  - 2401  - 185
+            145  , // 357  - 2409  - 684
+            257  , // 358  - 240a  - 1242
+            308  , // 359  - 240c  - 1489
+            724  , // 360  - 241a  - 3500
+            698  , // 361  - 243b  - 3331
+            37   , // 362  - 2801  - 170
+            158  , // 363  - 2809  - 751
+            270  , // 364  - 280a  - 1314
+            340  , // 365  - 280c  - 1649
+            718  , // 366  - 281a  - 3443
+            23   , // 367  - 2c01  - 100
+            235  , // 368  - 2c09  - 1136
+            253  , // 369  - 2c0a  - 1222
+            313  , // 370  - 2c0c  - 1514
+            723  , // 371  - 2c1a  - 3490
+            26   , // 372  - 3001  - 115
+            248  , // 373  - 3009  - 1201
+            261  , // 374  - 300a  - 1262
+            312  , // 375  - 300c  - 1509
+            717  , // 376  - 301a  - 3433
+            25   , // 377  - 3401  - 110
+            215  , // 378  - 3409  - 1036
+            256  , // 379  - 340a  - 1237
+            329  , // 380  - 340c  - 1594
+            15   , // 381  - 3801  - 60
+            183  , // 382  - 3809  - 876
+            276  , // 383  - 380a  - 1344
+            325  , // 384  - 380c  - 1574
+            16   , // 385  - 3c01  - 65
+            182  , // 386  - 3c09  - 871
+            273  , // 387  - 3c0a  - 1329
+            322  , // 388  - 3c0c  - 1559
+            32   , // 389  - 4001  - 145
+            187  , // 390  - 4009  - 896
+            254  , // 391  - 400a  - 1227
+            206  , // 392  - 4409  - 991
+            274  , // 393  - 440a  - 1334
+            225  , // 394  - 4809  - 1086
+            266  , // 395  - 480a  - 1294
+            268  , // 396  - 4c0a  - 1304
+            272  , // 397  - 500a  - 1324
+            275  , // 398  - 540a  - 1339
+            252  , // 399  - 580a  - 1216
+            259  , // 400  - 5c0a  - 1252
+            82   , // 401  - 641a  - 378
+            84   , // 402  - 681a  - 395
+            714  , // 403  - 6c1a  - 3406
+            720  , // 404  - 701a  - 3463
+            697  , // 405  - 703b  - 3328
+            50   , // 406  - 742c  - 226
+            699  , // 407  - 743b  - 3337
+            841  , // 408  - 7804  - 4096
+            574  , // 409  - 7814  - 2731
+            81   , // 410  - 781a  - 376
+            52   , // 411  - 782c  - 243
+            691  , // 412  - 783b  - 3298
+            801  , // 413  - 7843  - 3878
+            528  , // 414  - 7850  - 2517
+            409  , // 415  - 785d  - 1955
+            789  , // 416  - 785f  - 3814
+            850  , // 417  - 7c04  - 4166
+            553  , // 418  - 7c14  - 2639
+            713  , // 419  - 7c1a  - 3404
+            758  , // 420  - 7c28  - 3656
+            125  , // 421  - 7c2e  - 602
+            694  , // 422  - 7c3b  - 3313
+            803  , // 423  - 7c43  - 3895
+            600  , // 424  - 7c46  - 2832
+            530  , // 425  - 7c50  - 2529
+            666  , // 426  - 7c59  - 3160
+            99   , // 427  - 7c5c  - 476
+            411  , // 428  - 7c5d  - 1972
+            786  , // 429  - 7c5f  - 3784
+            289  , // 430  - 7c67  - 1396
+            371  , // 431  - 7c68  - 1779
+            631  , // 432  - 7c86  - 3001
+            471  , // 433  - 7c92  - 2272
+            824  , // 434  - 1007f - 4009
+            119  , // 435  - 10407 - 566
+            388  , // 436  - 1040e - 1867
+            427  , // 437  - 10437 - 2069
+            846  , // 438  - 20804 - 4127
+            858  , // 439  - 21004 - 4236
+            855  , // 440  - 21404 - 4207
+            860  , // 441  - 30404 - 4253
+            861  , // 442  - 40404 - 4265
+            415  , // 443  - 40411 - 1996
+            852  , // 444  - 40c04 - 4178
+            854  , // 445  - 41404 - 4195
+            845  , // 446  - 50804 - 4115
+            857    // 447  - 51004 - 4224
+        };
+          
+        internal static string LCIDToLocaleName(int culture)
+        {
+            int left = 0;
+            int right = s_lcids.Length - 1;
+            int index;
+
+            Contract.Assert(s_lcids.Length == s_lcidToCultureNameIndecis.Length);
+
+            while (left <= right)
+            {
+                index = (right + left) / 2;
+
+                if (culture == s_lcids[index])
+                {
+                    int indexToLocaleNamesIndices = s_lcidToCultureNameIndecis[index];
+                    Contract.Assert(indexToLocaleNamesIndices < s_localeNamesIndices.Length - 1);
+                    
+                    return c_localeNames.Substring(s_localeNamesIndices[indexToLocaleNamesIndices], 
+                                                                         s_localeNamesIndices[indexToLocaleNamesIndices + 1] - 
+                                                                         s_localeNamesIndices[indexToLocaleNamesIndices]);
+                }
+                else if (culture < s_lcids[index])
+                {
+                    right = index - 1;
+                }
+                else
+                {
+                    left = index + 1;
+                }
+            }
+
+            return null;
+        }
+
+        internal static int GetLocaleDataNumericPart(string cultureName, LocaleDataParts part)
+        {
+            int index = SearchCultureName(cultureName);
+            if (index < 0)
+            {
+                return -1; 
+            }
+            
+            Contract.Assert((s_localeNamesIndices.Length-1 == (s_nameIndexToNumericData.Length/NUMERIC_LOCALE_DATA_COUNT_PER_ROW)) && 
+                            index < s_localeNamesIndices.Length);
+            
+            return s_nameIndexToNumericData[index * NUMERIC_LOCALE_DATA_COUNT_PER_ROW + (int) part];
+        }
+        
+        // SearchCultureName will binary search c_localeNames using s_localeNamesIndices.
+        // return index in s_localeNamesIndices, or -1 if it fail finding any match   
+        private static int SearchCultureName(string name)
+        {
+            int left = 0;
+            int right = s_localeNamesIndices.Length - 2;
+            int index;
+            int result;
+
+            Contract.Assert(s_localeNamesIndices[s_localeNamesIndices.Length - 1] == c_localeNames.Length);
+
+            name = CultureData.AnsiToLower(name);
+
+            // Binary search the array until we have only a couple of elements left and then
+            // just walk those elements.
+            while ((right - left) > 3)
+            {
+                index = ((right - left) / 2) + left;
+
+                Contract.Assert(index < s_localeNamesIndices.Length - 1);
+                result = CompareOrdinal(name, c_localeNames, s_localeNamesIndices[index], s_localeNamesIndices[index + 1] - s_localeNamesIndices[index]);
+                if (result == 0)
+                {
+                    return index;
+                }
+                else if (result < 0)
+                {
+                    right = index;
+                }
+                else
+                {
+                    left = index;
+                }
+            }
+
+            // Walk the remaining elements (it'll be 3 or fewer).
+            for (; left <= right; left++)
+            {
+                Contract.Assert(left < s_localeNamesIndices.Length - 1);
+                if (CompareOrdinal(name, c_localeNames, s_localeNamesIndices[left], s_localeNamesIndices[left + 1] - s_localeNamesIndices[left]) == 0)
+                {
+                    return (left);
+                }
+            }
+
+            // couldn't find culture name
+            return -1;
+        }
+        
+        // optimized to avoid parameters checking
+        private static int CompareOrdinal(string s1, string s2, int index, int length)
+        {
+            int count = s1.Length;
+            if (count > length)
+                count = length;
+
+            int i = 0;
+            while (i < count && s1[i] == s2[index + i])
+                i++;
+
+            if (i < count)
+                return (int)(s1[i] - s2[index + i]);
+
+            return s1.Length - length;
+        }
+    }
+}
index bddd05e..7c0b3ef 100644 (file)
@@ -80,15 +80,4 @@ namespace System.Globalization
         public virtual string ThreeLetterISORegionName { get { throw new NotImplementedException(); } }
         public virtual string ThreeLetterWindowsRegionName { get { throw new NotImplementedException(); } }
     }
-
-    public partial class TextInfo : System.ICloneable, System.Runtime.Serialization.IDeserializationCallback 
-    {
-        public virtual int ANSICodePage { get { throw new NotImplementedException(); } }
-        public virtual int EBCDICCodePage { get { throw new NotImplementedException(); } }
-        [System.Runtime.InteropServices.ComVisibleAttribute(false)]
-        public int LCID { get { throw new NotImplementedException(); } }
-        public virtual int MacCodePage { get { throw new NotImplementedException(); } }
-        public virtual int OEMCodePage { get { throw new NotImplementedException(); } }
-        public string ToTitleCase(string str) { throw new NotImplementedException(); }
-    }
 }
\ No newline at end of file
index 6dadb58..f241600 100644 (file)
@@ -145,6 +145,64 @@ namespace System.Globalization
             return CompareInfo.LastIndexOfOrdinal(source, value, startIndex, count, ignoreCase: true);
         }
 
+        ////////////////////////////////////////////////////////////////////////
+        //
+        //  CodePage
+        //
+        //  Returns the number of the code page used by this writing system.
+        //  The type parameter can be any of the following values:
+        //      ANSICodePage
+        //      OEMCodePage
+        //      MACCodePage
+        //
+        ////////////////////////////////////////////////////////////////////////
+
+
+        public virtual int ANSICodePage 
+        {
+            get 
+            {
+                return (_cultureData.IDEFAULTANSICODEPAGE);
+            }
+        }
+
+        public virtual int OEMCodePage 
+        {
+            get 
+            {
+                return (_cultureData.IDEFAULTOEMCODEPAGE);
+            }
+        }
+
+
+        public virtual int MacCodePage 
+        {
+            get 
+            {
+                return (_cultureData.IDEFAULTMACCODEPAGE);
+            }
+        }
+
+
+        public virtual int EBCDICCodePage 
+        {
+            get 
+            {
+                return (_cultureData.IDEFAULTEBCDICCODEPAGE);
+            }
+        }
+
+        [System.Runtime.InteropServices.ComVisible(false)]
+        public int LCID 
+        {
+            get 
+            {
+                // Just use the LCID from our text info name
+                return CultureInfo.GetCultureInfo(_textInfoName).LCID;
+            }
+        }
+
         //////////////////////////////////////////////////////////////////////////
         ////
         ////  CultureName
@@ -196,7 +254,7 @@ namespace System.Globalization
         //
         ////////////////////////////////////////////////////////////////////////
         [System.Runtime.InteropServices.ComVisible(false)]
-        internal static TextInfo ReadOnly(TextInfo textInfo)
+        public static TextInfo ReadOnly(TextInfo textInfo)
         {
             if (textInfo == null) { throw new ArgumentNullException("textInfo"); }
             Contract.EndContractBlock();
@@ -396,6 +454,245 @@ namespace System.Globalization
         }
 
         //
+        // Titlecasing:
+        // -----------
+        // Titlecasing refers to a casing practice wherein the first letter of a word is an uppercase letter
+        // and the rest of the letters are lowercase.  The choice of which words to titlecase in headings
+        // and titles is dependent on language and local conventions.  For example, "The Merry Wives of Windor"
+        // is the appropriate titlecasing of that play's name in English, with the word "of" not titlecased.
+        // In German, however, the title is "Die lustigen Weiber von Windsor," and both "lustigen" and "von"
+        // are not titlecased.  In French even fewer words are titlecased: "Les joyeuses commeres de Windsor."
+        //
+        // Moreover, the determination of what actually constitutes a word is language dependent, and this can
+        // influence which letter or letters of a "word" are uppercased when titlecasing strings.  For example
+        // "l'arbre" is considered two words in French, whereas "can't" is considered one word in English.
+        //
+        public unsafe String ToTitleCase(String str)
+        {
+            if (str == null)  
+            {
+                throw new ArgumentNullException("str");
+            }
+            Contract.EndContractBlock();
+            if (str.Length == 0) 
+            {
+                return (str);
+            }
+
+            StringBuilder result = new StringBuilder();
+            string lowercaseData = null;
+
+            for (int i = 0; i < str.Length; i++)
+            {
+                UnicodeCategory charType;
+                int charLen;
+
+                charType = CharUnicodeInfo.InternalGetUnicodeCategory(str, i, out charLen);
+                if (Char.CheckLetter(charType))
+                {
+                    // Do the titlecasing for the first character of the word.
+                    i = AddTitlecaseLetter(ref result, ref str, i, charLen) + 1;
+                     
+                    //
+                    // Convert the characters until the end of the this word
+                    // to lowercase.
+                    //
+                    int lowercaseStart = i;
+
+                    //
+                    // Use hasLowerCase flag to prevent from lowercasing acronyms (like "URT", "USA", etc)
+                    // This is in line with Word 2000 behavior of titlecasing.
+                    //
+                    bool hasLowerCase = (charType == UnicodeCategory.LowercaseLetter);
+                    // Use a loop to find all of the other letters following this letter.
+                    while (i < str.Length)
+                    {
+                        charType = CharUnicodeInfo.InternalGetUnicodeCategory(str, i, out charLen);
+                        if (IsLetterCategory(charType))
+                        {
+                            if (charType == UnicodeCategory.LowercaseLetter)
+                            {
+                                hasLowerCase = true;
+                            }
+                            i += charLen;
+                        }
+                        else if (str[i] == '\'')
+                        {
+                            i++;
+                            if (hasLowerCase)
+                            {
+                                if (lowercaseData == null)
+                                {
+                                    lowercaseData = this.ToLower(str);
+                                }
+                                result.Append(lowercaseData, lowercaseStart, i - lowercaseStart);
+                            }
+                            else
+                            {
+                                result.Append(str, lowercaseStart, i - lowercaseStart);
+                            }
+                            lowercaseStart = i;
+                            hasLowerCase = true;
+                        }
+                        else if (!IsWordSeparator(charType))
+                        {
+                            // This category is considered to be part of the word.
+                            // This is any category that is marked as false in wordSeprator array.
+                            i+= charLen;
+                        }
+                        else
+                        {
+                            // A word separator. Break out of the loop.
+                            break;
+                        }
+                    }
+
+                    int count = i - lowercaseStart;
+
+                    if (count > 0)
+                    {
+                        if (hasLowerCase)
+                        {
+                            if (lowercaseData == null)
+                            {
+                                lowercaseData = this.ToLower(str);
+                            }
+                            result.Append(lowercaseData, lowercaseStart, count);
+                        }
+                        else
+                        {
+                            result.Append(str, lowercaseStart, count);
+                        }
+                    }
+
+                    if (i < str.Length)
+                    {
+                        // not a letter, just append it
+                        i = AddNonLetter(ref result, ref str, i, charLen);
+                    }
+                }
+                else
+                {
+                    // not a letter, just append it
+                    i = AddNonLetter(ref result, ref str, i, charLen);
+                }
+            }
+            return (result.ToString());
+        }
+
+        private static int AddNonLetter(ref StringBuilder result, ref String input, int inputIndex, int charLen)
+        {
+            Contract.Assert(charLen == 1 || charLen == 2, "[TextInfo.AddNonLetter] CharUnicodeInfo.InternalGetUnicodeCategory returned an unexpected charLen!");
+            if (charLen == 2)
+            {
+                // Surrogate pair
+                result.Append(input[inputIndex++]);
+                result.Append(input[inputIndex]);
+            }
+            else
+            {
+                result.Append(input[inputIndex]);
+            }
+            return inputIndex;
+        }
+
+        private int AddTitlecaseLetter(ref StringBuilder result, ref String input, int inputIndex, int charLen)
+        {
+            Contract.Assert(charLen == 1 || charLen == 2, "[TextInfo.AddTitlecaseLetter] CharUnicodeInfo.InternalGetUnicodeCategory returned an unexpected charLen!");
+
+            // for surrogate pairs do a simple ToUpper operation on the substring
+            if (charLen == 2) 
+            {
+                // Surrogate pair
+                result.Append(ToUpper(input.Substring(inputIndex, charLen)));
+                inputIndex++;
+            }
+            else
+            {
+                switch (input[inputIndex])
+                {
+                    //
+                    // For AppCompat, the Titlecase Case Mapping data from NDP 2.0 is used below.
+                    case (char) 0x01C4:  // DZ with Caron -> Dz with Caron
+                    case (char) 0x01C5:  // Dz with Caron -> Dz with Caron
+                    case (char) 0x01C6:  // dz with Caron -> Dz with Caron
+                        result.Append((char) 0x01C5);
+                        break;
+                    case (char) 0x01C7:  // LJ -> Lj
+                    case (char) 0x01C8:  // Lj -> Lj
+                    case (char) 0x01C9:  // lj -> Lj
+                        result.Append((char) 0x01C8);
+                        break;
+                    case (char) 0x01CA:  // NJ -> Nj
+                    case (char) 0x01CB:  // Nj -> Nj
+                    case (char) 0x01CC:  // nj -> Nj
+                        result.Append((char) 0x01CB);
+                        break;
+                    case (char) 0x01F1:  // DZ -> Dz
+                    case (char) 0x01F2:  // Dz -> Dz
+                    case (char) 0x01F3:  // dz -> Dz
+                        result.Append((char) 0x01F2);
+                        break;
+                    default:
+                        result.Append(ToUpper(input[inputIndex]));
+                        break;
+                }
+            }                   
+            return inputIndex;
+        }
+
+        //
+        // Used in ToTitleCase():
+        // When we find a starting letter, the following array decides if a category should be
+        // considered as word seprator or not.
+        //
+        private const int c_wordSeparatorMask = 
+            /* false */ (0 <<  0) | // UppercaseLetter = 0,
+            /* false */ (0 <<  1) | // LowercaseLetter = 1,
+            /* false */ (0 <<  2) | // TitlecaseLetter = 2,
+            /* false */ (0 <<  3) | // ModifierLetter = 3,
+            /* false */ (0 <<  4) | // OtherLetter = 4,
+            /* false */ (0 <<  5) | // NonSpacingMark = 5,
+            /* false */ (0 <<  6) | // SpacingCombiningMark = 6,
+            /* false */ (0 <<  7) | // EnclosingMark = 7,
+            /* false */ (0 <<  8) | // DecimalDigitNumber = 8,
+            /* false */ (0 <<  9) | // LetterNumber = 9,
+            /* false */ (0 << 10) | // OtherNumber = 10,
+            /* true  */ (1 << 11) | // SpaceSeparator = 11,
+            /* true  */ (1 << 12) | // LineSeparator = 12,
+            /* true  */ (1 << 13) | // ParagraphSeparator = 13,
+            /* true  */ (1 << 14) | // Control = 14,
+            /* true  */ (1 << 15) | // Format = 15,
+            /* false */ (0 << 16) | // Surrogate = 16,
+            /* false */ (0 << 17) | // PrivateUse = 17,
+            /* true  */ (1 << 18) | // ConnectorPunctuation = 18,
+            /* true  */ (1 << 19) | // DashPunctuation = 19,
+            /* true  */ (1 << 20) | // OpenPunctuation = 20,
+            /* true  */ (1 << 21) | // ClosePunctuation = 21,
+            /* true  */ (1 << 22) | // InitialQuotePunctuation = 22,
+            /* true  */ (1 << 23) | // FinalQuotePunctuation = 23,
+            /* true  */ (1 << 24) | // OtherPunctuation = 24,
+            /* true  */ (1 << 25) | // MathSymbol = 25,
+            /* true  */ (1 << 26) | // CurrencySymbol = 26,
+            /* true  */ (1 << 27) | // ModifierSymbol = 27,
+            /* true  */ (1 << 28) | // OtherSymbol = 28,
+            /* false */ (0 << 29);  // OtherNotAssigned = 29;
+        
+        private static bool IsWordSeparator(UnicodeCategory category) 
+        {
+            return (c_wordSeparatorMask & (1 << (int) category)) != 0;
+        }
+
+        private static bool IsLetterCategory(UnicodeCategory uc) 
+        {
+            return (uc == UnicodeCategory.UppercaseLetter
+                 || uc == UnicodeCategory.LowercaseLetter
+                 || uc == UnicodeCategory.TitlecaseLetter
+                 || uc == UnicodeCategory.ModifierLetter
+                 || uc == UnicodeCategory.OtherLetter);
+        }
+
+        //
         // Get case-insensitive hash code for the specified string.
         //
         internal unsafe int GetCaseInsensitiveHashCode(String str)
index 68a06ff..066e670 100644 (file)
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\CultureInfo.Unix.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\HijriCalendar.Unix.cs" />
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\JapaneseCalendar.Unix.cs" />
+    <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\LocaleData.Unix.cs" />    
     <GlobalizationSources Include="$(CoreFxSourcesRoot)\System\Globalization\TextInfo.Unix.cs" />
   </ItemGroup>
   <ItemGroup>