JAL-1355
[jalview.git] / src / com / stevesoft / pat / CaseMgr.java
index 2de70d4..393dac9 100755 (executable)
-//\r
-// This software is now distributed according to\r
-// the Lesser Gnu Public License.  Please see\r
-// http://www.gnu.org/copyleft/lesser.txt for\r
-// the details.\r
-//    -- Happy Computing!\r
-//\r
-package com.stevesoft.pat;\r
-\r
-/** Encapsulates the Unicode definitions of Upper,\r
-    Lower, and Title case as defined by <a href="http://www.unicode.org">\r
-    unicode.org</a>.\r
-    <p>\r
-    The performance of the methods found in String\r
-    and Character is better, but these methods work\r
-    both in java 1.0 and 1.1.  If it is desirable,\r
-    either to gain a slight performance increase or\r
-    to accomodate application specific modifications\r
-    to the definitions of upper, lower, and title case\r
-    then it should be a straightforward task to substitute\r
-    your own methods for these.\r
-    */\r
-final public class CaseMgr {\r
-    final static boolean java_1_0 = false;\r
-    /** Convert a character to upper case .*/\r
-    public static char toUpperCase(char c) {\r
-      if(java_1_0) {\r
-        int ret = (int)c;\r
-        switch(c) {\r
-        case 97: ret=65; break;\r
-        case 98: ret=66; break;\r
-        case 99: ret=67; break;\r
-        case 100: ret=68; break;\r
-        case 101: ret=69; break;\r
-        case 102: ret=70; break;\r
-        case 103: ret=71; break;\r
-        case 104: ret=72; break;\r
-        case 105: ret=73; break;\r
-        case 106: ret=74; break;\r
-        case 107: ret=75; break;\r
-        case 108: ret=76; break;\r
-        case 109: ret=77; break;\r
-        case 110: ret=78; break;\r
-        case 111: ret=79; break;\r
-        case 112: ret=80; break;\r
-        case 113: ret=81; break;\r
-        case 114: ret=82; break;\r
-        case 115: ret=83; break;\r
-        case 116: ret=84; break;\r
-        case 117: ret=85; break;\r
-        case 118: ret=86; break;\r
-        case 119: ret=87; break;\r
-        case 120: ret=88; break;\r
-        case 121: ret=89; break;\r
-        case 122: ret=90; break;\r
-        case 224: ret=192; break;\r
-        case 225: ret=193; break;\r
-        case 226: ret=194; break;\r
-        case 227: ret=195; break;\r
-        case 228: ret=196; break;\r
-        case 229: ret=197; break;\r
-        case 230: ret=198; break;\r
-        case 231: ret=199; break;\r
-        case 232: ret=200; break;\r
-        case 233: ret=201; break;\r
-        case 234: ret=202; break;\r
-        case 235: ret=203; break;\r
-        case 236: ret=204; break;\r
-        case 237: ret=205; break;\r
-        case 238: ret=206; break;\r
-        case 239: ret=207; break;\r
-        case 240: ret=208; break;\r
-        case 241: ret=209; break;\r
-        case 242: ret=210; break;\r
-        case 243: ret=211; break;\r
-        case 244: ret=212; break;\r
-        case 245: ret=213; break;\r
-        case 246: ret=214; break;\r
-        case 248: ret=216; break;\r
-        case 249: ret=217; break;\r
-        case 250: ret=218; break;\r
-        case 251: ret=219; break;\r
-        case 252: ret=220; break;\r
-        case 253: ret=221; break;\r
-        case 254: ret=222; break;\r
-        case 255: ret=376; break;\r
-        case 257: ret=256; break;\r
-        case 259: ret=258; break;\r
-        case 261: ret=260; break;\r
-        case 263: ret=262; break;\r
-        case 265: ret=264; break;\r
-        case 267: ret=266; break;\r
-        case 269: ret=268; break;\r
-        case 271: ret=270; break;\r
-        case 273: ret=272; break;\r
-        case 275: ret=274; break;\r
-        case 277: ret=276; break;\r
-        case 279: ret=278; break;\r
-        case 281: ret=280; break;\r
-        case 283: ret=282; break;\r
-        case 285: ret=284; break;\r
-        case 287: ret=286; break;\r
-        case 289: ret=288; break;\r
-        case 291: ret=290; break;\r
-        case 293: ret=292; break;\r
-        case 295: ret=294; break;\r
-        case 297: ret=296; break;\r
-        case 299: ret=298; break;\r
-        case 301: ret=300; break;\r
-        case 303: ret=302; break;\r
-        case 305: ret=73; break;\r
-        case 307: ret=306; break;\r
-        case 309: ret=308; break;\r
-        case 311: ret=310; break;\r
-        case 314: ret=313; break;\r
-        case 316: ret=315; break;\r
-        case 318: ret=317; break;\r
-        case 320: ret=319; break;\r
-        case 322: ret=321; break;\r
-        case 324: ret=323; break;\r
-        case 326: ret=325; break;\r
-        case 328: ret=327; break;\r
-        case 331: ret=330; break;\r
-        case 333: ret=332; break;\r
-        case 335: ret=334; break;\r
-        case 337: ret=336; break;\r
-        case 339: ret=338; break;\r
-        case 341: ret=340; break;\r
-        case 343: ret=342; break;\r
-        case 345: ret=344; break;\r
-        case 347: ret=346; break;\r
-        case 349: ret=348; break;\r
-        case 351: ret=350; break;\r
-        case 353: ret=352; break;\r
-        case 355: ret=354; break;\r
-        case 357: ret=356; break;\r
-        case 359: ret=358; break;\r
-        case 361: ret=360; break;\r
-        case 363: ret=362; break;\r
-        case 365: ret=364; break;\r
-        case 367: ret=366; break;\r
-        case 369: ret=368; break;\r
-        case 371: ret=370; break;\r
-        case 373: ret=372; break;\r
-        case 375: ret=374; break;\r
-        case 378: ret=377; break;\r
-        case 380: ret=379; break;\r
-        case 382: ret=381; break;\r
-        case 383: ret=83; break;\r
-        case 387: ret=386; break;\r
-        case 389: ret=388; break;\r
-        case 392: ret=391; break;\r
-        case 396: ret=395; break;\r
-        case 402: ret=401; break;\r
-        case 409: ret=408; break;\r
-        case 417: ret=416; break;\r
-        case 419: ret=418; break;\r
-        case 421: ret=420; break;\r
-        case 424: ret=423; break;\r
-        case 429: ret=428; break;\r
-        case 432: ret=431; break;\r
-        case 436: ret=435; break;\r
-        case 438: ret=437; break;\r
-        case 441: ret=440; break;\r
-        case 445: ret=444; break;\r
-        case 453: ret=452; break;\r
-        case 454: ret=452; break;\r
-        case 456: ret=455; break;\r
-        case 457: ret=455; break;\r
-        case 459: ret=458; break;\r
-        case 460: ret=458; break;\r
-        case 462: ret=461; break;\r
-        case 464: ret=463; break;\r
-        case 466: ret=465; break;\r
-        case 468: ret=467; break;\r
-        case 470: ret=469; break;\r
-        case 472: ret=471; break;\r
-        case 474: ret=473; break;\r
-        case 476: ret=475; break;\r
-        case 479: ret=478; break;\r
-        case 481: ret=480; break;\r
-        case 483: ret=482; break;\r
-        case 485: ret=484; break;\r
-        case 487: ret=486; break;\r
-        case 489: ret=488; break;\r
-        case 491: ret=490; break;\r
-        case 493: ret=492; break;\r
-        case 495: ret=494; break;\r
-        case 498: ret=497; break;\r
-        case 499: ret=497; break;\r
-        case 501: ret=500; break;\r
-        case 507: ret=506; break;\r
-        case 509: ret=508; break;\r
-        case 511: ret=510; break;\r
-        case 513: ret=512; break;\r
-        case 515: ret=514; break;\r
-        case 517: ret=516; break;\r
-        case 519: ret=518; break;\r
-        case 521: ret=520; break;\r
-        case 523: ret=522; break;\r
-        case 525: ret=524; break;\r
-        case 527: ret=526; break;\r
-        case 529: ret=528; break;\r
-        case 531: ret=530; break;\r
-        case 533: ret=532; break;\r
-        case 535: ret=534; break;\r
-        case 595: ret=385; break;\r
-        case 596: ret=390; break;\r
-        case 598: ret=393; break;\r
-        case 599: ret=394; break;\r
-        case 600: ret=398; break;\r
-        case 601: ret=399; break;\r
-        case 603: ret=400; break;\r
-        case 608: ret=403; break;\r
-        case 611: ret=404; break;\r
-        case 616: ret=407; break;\r
-        case 617: ret=406; break;\r
-        case 623: ret=412; break;\r
-        case 626: ret=413; break;\r
-        case 643: ret=425; break;\r
-        case 648: ret=430; break;\r
-        case 650: ret=433; break;\r
-        case 651: ret=434; break;\r
-        case 658: ret=439; break;\r
-        case 940: ret=902; break;\r
-        case 941: ret=904; break;\r
-        case 942: ret=905; break;\r
-        case 943: ret=906; break;\r
-        case 945: ret=913; break;\r
-        case 946: ret=914; break;\r
-        case 947: ret=915; break;\r
-        case 948: ret=916; break;\r
-        case 949: ret=917; break;\r
-        case 950: ret=918; break;\r
-        case 951: ret=919; break;\r
-        case 952: ret=920; break;\r
-        case 953: ret=921; break;\r
-        case 954: ret=922; break;\r
-        case 955: ret=923; break;\r
-        case 956: ret=924; break;\r
-        case 957: ret=925; break;\r
-        case 958: ret=926; break;\r
-        case 959: ret=927; break;\r
-        case 960: ret=928; break;\r
-        case 961: ret=929; break;\r
-        case 963: ret=931; break;\r
-        case 964: ret=932; break;\r
-        case 965: ret=933; break;\r
-        case 966: ret=934; break;\r
-        case 967: ret=935; break;\r
-        case 968: ret=936; break;\r
-        case 969: ret=937; break;\r
-        case 970: ret=938; break;\r
-        case 971: ret=939; break;\r
-        case 972: ret=908; break;\r
-        case 973: ret=910; break;\r
-        case 974: ret=911; break;\r
-        case 976: ret=914; break;\r
-        case 977: ret=920; break;\r
-        case 981: ret=934; break;\r
-        case 982: ret=928; break;\r
-        case 995: ret=994; break;\r
-        case 997: ret=996; break;\r
-        case 999: ret=998; break;\r
-        case 1001: ret=1000; break;\r
-        case 1003: ret=1002; break;\r
-        case 1005: ret=1004; break;\r
-        case 1007: ret=1006; break;\r
-        case 1008: ret=922; break;\r
-        case 1009: ret=929; break;\r
-        case 1072: ret=1040; break;\r
-        case 1073: ret=1041; break;\r
-        case 1074: ret=1042; break;\r
-        case 1075: ret=1043; break;\r
-        case 1076: ret=1044; break;\r
-        case 1077: ret=1045; break;\r
-        case 1078: ret=1046; break;\r
-        case 1079: ret=1047; break;\r
-        case 1080: ret=1048; break;\r
-        case 1081: ret=1049; break;\r
-        case 1082: ret=1050; break;\r
-        case 1083: ret=1051; break;\r
-        case 1084: ret=1052; break;\r
-        case 1085: ret=1053; break;\r
-        case 1086: ret=1054; break;\r
-        case 1087: ret=1055; break;\r
-        case 1088: ret=1056; break;\r
-        case 1089: ret=1057; break;\r
-        case 1090: ret=1058; break;\r
-        case 1091: ret=1059; break;\r
-        case 1092: ret=1060; break;\r
-        case 1093: ret=1061; break;\r
-        case 1094: ret=1062; break;\r
-        case 1095: ret=1063; break;\r
-        case 1096: ret=1064; break;\r
-        case 1097: ret=1065; break;\r
-        case 1098: ret=1066; break;\r
-        case 1099: ret=1067; break;\r
-        case 1100: ret=1068; break;\r
-        case 1101: ret=1069; break;\r
-        case 1102: ret=1070; break;\r
-        case 1103: ret=1071; break;\r
-        case 1105: ret=1025; break;\r
-        case 1106: ret=1026; break;\r
-        case 1107: ret=1027; break;\r
-        case 1108: ret=1028; break;\r
-        case 1109: ret=1029; break;\r
-        case 1110: ret=1030; break;\r
-        case 1111: ret=1031; break;\r
-        case 1112: ret=1032; break;\r
-        case 1113: ret=1033; break;\r
-        case 1114: ret=1034; break;\r
-        case 1115: ret=1035; break;\r
-        case 1116: ret=1036; break;\r
-        case 1118: ret=1038; break;\r
-        case 1119: ret=1039; break;\r
-        case 1121: ret=1120; break;\r
-        case 1123: ret=1122; break;\r
-        case 1125: ret=1124; break;\r
-        case 1127: ret=1126; break;\r
-        case 1129: ret=1128; break;\r
-        case 1131: ret=1130; break;\r
-        case 1133: ret=1132; break;\r
-        case 1135: ret=1134; break;\r
-        case 1137: ret=1136; break;\r
-        case 1139: ret=1138; break;\r
-        case 1141: ret=1140; break;\r
-        case 1143: ret=1142; break;\r
-        case 1145: ret=1144; break;\r
-        case 1147: ret=1146; break;\r
-        case 1149: ret=1148; break;\r
-        case 1151: ret=1150; break;\r
-        case 1153: ret=1152; break;\r
-        case 1169: ret=1168; break;\r
-        case 1171: ret=1170; break;\r
-        case 1173: ret=1172; break;\r
-        case 1175: ret=1174; break;\r
-        case 1177: ret=1176; break;\r
-        case 1179: ret=1178; break;\r
-        case 1181: ret=1180; break;\r
-        case 1183: ret=1182; break;\r
-        case 1185: ret=1184; break;\r
-        case 1187: ret=1186; break;\r
-        case 1189: ret=1188; break;\r
-        case 1191: ret=1190; break;\r
-        case 1193: ret=1192; break;\r
-        case 1195: ret=1194; break;\r
-        case 1197: ret=1196; break;\r
-        case 1199: ret=1198; break;\r
-        case 1201: ret=1200; break;\r
-        case 1203: ret=1202; break;\r
-        case 1205: ret=1204; break;\r
-        case 1207: ret=1206; break;\r
-        case 1209: ret=1208; break;\r
-        case 1211: ret=1210; break;\r
-        case 1213: ret=1212; break;\r
-        case 1215: ret=1214; break;\r
-        case 1218: ret=1217; break;\r
-        case 1220: ret=1219; break;\r
-        case 1224: ret=1223; break;\r
-        case 1228: ret=1227; break;\r
-        case 1233: ret=1232; break;\r
-        case 1235: ret=1234; break;\r
-        case 1237: ret=1236; break;\r
-        case 1239: ret=1238; break;\r
-        case 1241: ret=1240; break;\r
-        case 1243: ret=1242; break;\r
-        case 1245: ret=1244; break;\r
-        case 1247: ret=1246; break;\r
-        case 1249: ret=1248; break;\r
-        case 1251: ret=1250; break;\r
-        case 1253: ret=1252; break;\r
-        case 1255: ret=1254; break;\r
-        case 1257: ret=1256; break;\r
-        case 1259: ret=1258; break;\r
-        case 1263: ret=1262; break;\r
-        case 1265: ret=1264; break;\r
-        case 1267: ret=1266; break;\r
-        case 1269: ret=1268; break;\r
-        case 1273: ret=1272; break;\r
-        case 1377: ret=1329; break;\r
-        case 1378: ret=1330; break;\r
-        case 1379: ret=1331; break;\r
-        case 1380: ret=1332; break;\r
-        case 1381: ret=1333; break;\r
-        case 1382: ret=1334; break;\r
-        case 1383: ret=1335; break;\r
-        case 1384: ret=1336; break;\r
-        case 1385: ret=1337; break;\r
-        case 1386: ret=1338; break;\r
-        case 1387: ret=1339; break;\r
-        case 1388: ret=1340; break;\r
-        case 1389: ret=1341; break;\r
-        case 1390: ret=1342; break;\r
-        case 1391: ret=1343; break;\r
-        case 1392: ret=1344; break;\r
-        case 1393: ret=1345; break;\r
-        case 1394: ret=1346; break;\r
-        case 1395: ret=1347; break;\r
-        case 1396: ret=1348; break;\r
-        case 1397: ret=1349; break;\r
-        case 1398: ret=1350; break;\r
-        case 1399: ret=1351; break;\r
-        case 1400: ret=1352; break;\r
-        case 1401: ret=1353; break;\r
-        case 1402: ret=1354; break;\r
-        case 1403: ret=1355; break;\r
-        case 1404: ret=1356; break;\r
-        case 1405: ret=1357; break;\r
-        case 1406: ret=1358; break;\r
-        case 1407: ret=1359; break;\r
-        case 1408: ret=1360; break;\r
-        case 1409: ret=1361; break;\r
-        case 1410: ret=1362; break;\r
-        case 1411: ret=1363; break;\r
-        case 1412: ret=1364; break;\r
-        case 1413: ret=1365; break;\r
-        case 1414: ret=1366; break;\r
-        case 7681: ret=7680; break;\r
-        case 7683: ret=7682; break;\r
-        case 7685: ret=7684; break;\r
-        case 7687: ret=7686; break;\r
-        case 7689: ret=7688; break;\r
-        case 7691: ret=7690; break;\r
-        case 7693: ret=7692; break;\r
-        case 7695: ret=7694; break;\r
-        case 7697: ret=7696; break;\r
-        case 7699: ret=7698; break;\r
-        case 7701: ret=7700; break;\r
-        case 7703: ret=7702; break;\r
-        case 7705: ret=7704; break;\r
-        case 7707: ret=7706; break;\r
-        case 7709: ret=7708; break;\r
-        case 7711: ret=7710; break;\r
-        case 7713: ret=7712; break;\r
-        case 7715: ret=7714; break;\r
-        case 7717: ret=7716; break;\r
-        case 7719: ret=7718; break;\r
-        case 7721: ret=7720; break;\r
-        case 7723: ret=7722; break;\r
-        case 7725: ret=7724; break;\r
-        case 7727: ret=7726; break;\r
-        case 7729: ret=7728; break;\r
-        case 7731: ret=7730; break;\r
-        case 7733: ret=7732; break;\r
-        case 7735: ret=7734; break;\r
-        case 7737: ret=7736; break;\r
-        case 7739: ret=7738; break;\r
-        case 7741: ret=7740; break;\r
-        case 7743: ret=7742; break;\r
-        case 7745: ret=7744; break;\r
-        case 7747: ret=7746; break;\r
-        case 7749: ret=7748; break;\r
-        case 7751: ret=7750; break;\r
-        case 7753: ret=7752; break;\r
-        case 7755: ret=7754; break;\r
-        case 7757: ret=7756; break;\r
-        case 7759: ret=7758; break;\r
-        case 7761: ret=7760; break;\r
-        case 7763: ret=7762; break;\r
-        case 7765: ret=7764; break;\r
-        case 7767: ret=7766; break;\r
-        case 7769: ret=7768; break;\r
-        case 7771: ret=7770; break;\r
-        case 7773: ret=7772; break;\r
-        case 7775: ret=7774; break;\r
-        case 7777: ret=7776; break;\r
-        case 7779: ret=7778; break;\r
-        case 7781: ret=7780; break;\r
-        case 7783: ret=7782; break;\r
-        case 7785: ret=7784; break;\r
-        case 7787: ret=7786; break;\r
-        case 7789: ret=7788; break;\r
-        case 7791: ret=7790; break;\r
-        case 7793: ret=7792; break;\r
-        case 7795: ret=7794; break;\r
-        case 7797: ret=7796; break;\r
-        case 7799: ret=7798; break;\r
-        case 7801: ret=7800; break;\r
-        case 7803: ret=7802; break;\r
-        case 7805: ret=7804; break;\r
-        case 7807: ret=7806; break;\r
-        case 7809: ret=7808; break;\r
-        case 7811: ret=7810; break;\r
-        case 7813: ret=7812; break;\r
-        case 7815: ret=7814; break;\r
-        case 7817: ret=7816; break;\r
-        case 7819: ret=7818; break;\r
-        case 7821: ret=7820; break;\r
-        case 7823: ret=7822; break;\r
-        case 7825: ret=7824; break;\r
-        case 7827: ret=7826; break;\r
-        case 7829: ret=7828; break;\r
-        case 7841: ret=7840; break;\r
-        case 7843: ret=7842; break;\r
-        case 7845: ret=7844; break;\r
-        case 7847: ret=7846; break;\r
-        case 7849: ret=7848; break;\r
-        case 7851: ret=7850; break;\r
-        case 7853: ret=7852; break;\r
-        case 7855: ret=7854; break;\r
-        case 7857: ret=7856; break;\r
-        case 7859: ret=7858; break;\r
-        case 7861: ret=7860; break;\r
-        case 7863: ret=7862; break;\r
-        case 7865: ret=7864; break;\r
-        case 7867: ret=7866; break;\r
-        case 7869: ret=7868; break;\r
-        case 7871: ret=7870; break;\r
-        case 7873: ret=7872; break;\r
-        case 7875: ret=7874; break;\r
-        case 7877: ret=7876; break;\r
-        case 7879: ret=7878; break;\r
-        case 7881: ret=7880; break;\r
-        case 7883: ret=7882; break;\r
-        case 7885: ret=7884; break;\r
-        case 7887: ret=7886; break;\r
-        case 7889: ret=7888; break;\r
-        case 7891: ret=7890; break;\r
-        case 7893: ret=7892; break;\r
-        case 7895: ret=7894; break;\r
-        case 7897: ret=7896; break;\r
-        case 7899: ret=7898; break;\r
-        case 7901: ret=7900; break;\r
-        case 7903: ret=7902; break;\r
-        case 7905: ret=7904; break;\r
-        case 7907: ret=7906; break;\r
-        case 7909: ret=7908; break;\r
-        case 7911: ret=7910; break;\r
-        case 7913: ret=7912; break;\r
-        case 7915: ret=7914; break;\r
-        case 7917: ret=7916; break;\r
-        case 7919: ret=7918; break;\r
-        case 7921: ret=7920; break;\r
-        case 7923: ret=7922; break;\r
-        case 7925: ret=7924; break;\r
-        case 7927: ret=7926; break;\r
-        case 7929: ret=7928; break;\r
-        case 7936: ret=7944; break;\r
-        case 7937: ret=7945; break;\r
-        case 7938: ret=7946; break;\r
-        case 7939: ret=7947; break;\r
-        case 7940: ret=7948; break;\r
-        case 7941: ret=7949; break;\r
-        case 7942: ret=7950; break;\r
-        case 7943: ret=7951; break;\r
-        case 7952: ret=7960; break;\r
-        case 7953: ret=7961; break;\r
-        case 7954: ret=7962; break;\r
-        case 7955: ret=7963; break;\r
-        case 7956: ret=7964; break;\r
-        case 7957: ret=7965; break;\r
-        case 7968: ret=7976; break;\r
-        case 7969: ret=7977; break;\r
-        case 7970: ret=7978; break;\r
-        case 7971: ret=7979; break;\r
-        case 7972: ret=7980; break;\r
-        case 7973: ret=7981; break;\r
-        case 7974: ret=7982; break;\r
-        case 7975: ret=7983; break;\r
-        case 7984: ret=7992; break;\r
-        case 7985: ret=7993; break;\r
-        case 7986: ret=7994; break;\r
-        case 7987: ret=7995; break;\r
-        case 7988: ret=7996; break;\r
-        case 7989: ret=7997; break;\r
-        case 7990: ret=7998; break;\r
-        case 7991: ret=7999; break;\r
-        case 8000: ret=8008; break;\r
-        case 8001: ret=8009; break;\r
-        case 8002: ret=8010; break;\r
-        case 8003: ret=8011; break;\r
-        case 8004: ret=8012; break;\r
-        case 8005: ret=8013; break;\r
-        case 8017: ret=8025; break;\r
-        case 8019: ret=8027; break;\r
-        case 8021: ret=8029; break;\r
-        case 8023: ret=8031; break;\r
-        case 8032: ret=8040; break;\r
-        case 8033: ret=8041; break;\r
-        case 8034: ret=8042; break;\r
-        case 8035: ret=8043; break;\r
-        case 8036: ret=8044; break;\r
-        case 8037: ret=8045; break;\r
-        case 8038: ret=8046; break;\r
-        case 8039: ret=8047; break;\r
-        case 8048: ret=8122; break;\r
-        case 8049: ret=8123; break;\r
-        case 8050: ret=8136; break;\r
-        case 8051: ret=8137; break;\r
-        case 8052: ret=8138; break;\r
-        case 8053: ret=8139; break;\r
-        case 8054: ret=8154; break;\r
-        case 8055: ret=8155; break;\r
-        case 8056: ret=8184; break;\r
-        case 8057: ret=8185; break;\r
-        case 8058: ret=8170; break;\r
-        case 8059: ret=8171; break;\r
-        case 8060: ret=8186; break;\r
-        case 8061: ret=8187; break;\r
-        case 8064: ret=8072; break;\r
-        case 8065: ret=8073; break;\r
-        case 8066: ret=8074; break;\r
-        case 8067: ret=8075; break;\r
-        case 8068: ret=8076; break;\r
-        case 8069: ret=8077; break;\r
-        case 8070: ret=8078; break;\r
-        case 8071: ret=8079; break;\r
-        case 8080: ret=8088; break;\r
-        case 8081: ret=8089; break;\r
-        case 8082: ret=8090; break;\r
-        case 8083: ret=8091; break;\r
-        case 8084: ret=8092; break;\r
-        case 8085: ret=8093; break;\r
-        case 8086: ret=8094; break;\r
-        case 8087: ret=8095; break;\r
-        case 8096: ret=8104; break;\r
-        case 8097: ret=8105; break;\r
-        case 8098: ret=8106; break;\r
-        case 8099: ret=8107; break;\r
-        case 8100: ret=8108; break;\r
-        case 8101: ret=8109; break;\r
-        case 8102: ret=8110; break;\r
-        case 8103: ret=8111; break;\r
-        case 8112: ret=8120; break;\r
-        case 8113: ret=8121; break;\r
-        case 8115: ret=8124; break;\r
-        case 8131: ret=8140; break;\r
-        case 8144: ret=8152; break;\r
-        case 8145: ret=8153; break;\r
-        case 8160: ret=8168; break;\r
-        case 8161: ret=8169; break;\r
-        case 8165: ret=8172; break;\r
-        case 8179: ret=8188; break;\r
-        case 8560: ret=8544; break;\r
-        case 8561: ret=8545; break;\r
-        case 8562: ret=8546; break;\r
-        case 8563: ret=8547; break;\r
-        case 8564: ret=8548; break;\r
-        case 8565: ret=8549; break;\r
-        case 8566: ret=8550; break;\r
-        case 8567: ret=8551; break;\r
-        case 8568: ret=8552; break;\r
-        case 8569: ret=8553; break;\r
-        case 8570: ret=8554; break;\r
-        case 8571: ret=8555; break;\r
-        case 8572: ret=8556; break;\r
-        case 8573: ret=8557; break;\r
-        case 8574: ret=8558; break;\r
-        case 8575: ret=8559; break;\r
-        case 9424: ret=9398; break;\r
-        case 9425: ret=9399; break;\r
-        case 9426: ret=9400; break;\r
-        case 9427: ret=9401; break;\r
-        case 9428: ret=9402; break;\r
-        case 9429: ret=9403; break;\r
-        case 9430: ret=9404; break;\r
-        case 9431: ret=9405; break;\r
-        case 9432: ret=9406; break;\r
-        case 9433: ret=9407; break;\r
-        case 9434: ret=9408; break;\r
-        case 9435: ret=9409; break;\r
-        case 9436: ret=9410; break;\r
-        case 9437: ret=9411; break;\r
-        case 9438: ret=9412; break;\r
-        case 9439: ret=9413; break;\r
-        case 9440: ret=9414; break;\r
-        case 9441: ret=9415; break;\r
-        case 9442: ret=9416; break;\r
-        case 9443: ret=9417; break;\r
-        case 9444: ret=9418; break;\r
-        case 9445: ret=9419; break;\r
-        case 9446: ret=9420; break;\r
-        case 9447: ret=9421; break;\r
-        case 9448: ret=9422; break;\r
-        case 9449: ret=9423; break;\r
-        case 65345: ret=65313; break;\r
-        case 65346: ret=65314; break;\r
-        case 65347: ret=65315; break;\r
-        case 65348: ret=65316; break;\r
-        case 65349: ret=65317; break;\r
-        case 65350: ret=65318; break;\r
-        case 65351: ret=65319; break;\r
-        case 65352: ret=65320; break;\r
-        case 65353: ret=65321; break;\r
-        case 65354: ret=65322; break;\r
-        case 65355: ret=65323; break;\r
-        case 65356: ret=65324; break;\r
-        case 65357: ret=65325; break;\r
-        case 65358: ret=65326; break;\r
-        case 65359: ret=65327; break;\r
-        case 65360: ret=65328; break;\r
-        case 65361: ret=65329; break;\r
-        case 65362: ret=65330; break;\r
-        case 65363: ret=65331; break;\r
-        case 65364: ret=65332; break;\r
-        case 65365: ret=65333; break;\r
-        case 65366: ret=65334; break;\r
-        case 65367: ret=65335; break;\r
-        case 65368: ret=65336; break;\r
-        case 65369: ret=65337; break;\r
-        case 65370: ret=65338; break;\r
-        }\r
-        return (char)ret;\r
-      }\r
-      return Character.toUpperCase(c);\r
-    }\r
-    /** Convert a character to lower case. */\r
-    public static char toLowerCase(char c) {\r
-      if(java_1_0) {\r
-        int ret = (int)c;\r
-        switch(c) {\r
-        case 65: ret=97; break;\r
-        case 66: ret=98; break;\r
-        case 67: ret=99; break;\r
-        case 68: ret=100; break;\r
-        case 69: ret=101; break;\r
-        case 70: ret=102; break;\r
-        case 71: ret=103; break;\r
-        case 72: ret=104; break;\r
-        case 73: ret=105; break;\r
-        case 74: ret=106; break;\r
-        case 75: ret=107; break;\r
-        case 76: ret=108; break;\r
-        case 77: ret=109; break;\r
-        case 78: ret=110; break;\r
-        case 79: ret=111; break;\r
-        case 80: ret=112; break;\r
-        case 81: ret=113; break;\r
-        case 82: ret=114; break;\r
-        case 83: ret=115; break;\r
-        case 84: ret=116; break;\r
-        case 85: ret=117; break;\r
-        case 86: ret=118; break;\r
-        case 87: ret=119; break;\r
-        case 88: ret=120; break;\r
-        case 89: ret=121; break;\r
-        case 90: ret=122; break;\r
-        case 192: ret=224; break;\r
-        case 193: ret=225; break;\r
-        case 194: ret=226; break;\r
-        case 195: ret=227; break;\r
-        case 196: ret=228; break;\r
-        case 197: ret=229; break;\r
-        case 198: ret=230; break;\r
-        case 199: ret=231; break;\r
-        case 200: ret=232; break;\r
-        case 201: ret=233; break;\r
-        case 202: ret=234; break;\r
-        case 203: ret=235; break;\r
-        case 204: ret=236; break;\r
-        case 205: ret=237; break;\r
-        case 206: ret=238; break;\r
-        case 207: ret=239; break;\r
-        case 208: ret=240; break;\r
-        case 209: ret=241; break;\r
-        case 210: ret=242; break;\r
-        case 211: ret=243; break;\r
-        case 212: ret=244; break;\r
-        case 213: ret=245; break;\r
-        case 214: ret=246; break;\r
-        case 216: ret=248; break;\r
-        case 217: ret=249; break;\r
-        case 218: ret=250; break;\r
-        case 219: ret=251; break;\r
-        case 220: ret=252; break;\r
-        case 221: ret=253; break;\r
-        case 222: ret=254; break;\r
-        case 256: ret=257; break;\r
-        case 258: ret=259; break;\r
-        case 260: ret=261; break;\r
-        case 262: ret=263; break;\r
-        case 264: ret=265; break;\r
-        case 266: ret=267; break;\r
-        case 268: ret=269; break;\r
-        case 270: ret=271; break;\r
-        case 272: ret=273; break;\r
-        case 274: ret=275; break;\r
-        case 276: ret=277; break;\r
-        case 278: ret=279; break;\r
-        case 280: ret=281; break;\r
-        case 282: ret=283; break;\r
-        case 284: ret=285; break;\r
-        case 286: ret=287; break;\r
-        case 288: ret=289; break;\r
-        case 290: ret=291; break;\r
-        case 292: ret=293; break;\r
-        case 294: ret=295; break;\r
-        case 296: ret=297; break;\r
-        case 298: ret=299; break;\r
-        case 300: ret=301; break;\r
-        case 302: ret=303; break;\r
-        case 304: ret=105; break;\r
-        case 306: ret=307; break;\r
-        case 308: ret=309; break;\r
-        case 310: ret=311; break;\r
-        case 313: ret=314; break;\r
-        case 315: ret=316; break;\r
-        case 317: ret=318; break;\r
-        case 319: ret=320; break;\r
-        case 321: ret=322; break;\r
-        case 323: ret=324; break;\r
-        case 325: ret=326; break;\r
-        case 327: ret=328; break;\r
-        case 330: ret=331; break;\r
-        case 332: ret=333; break;\r
-        case 334: ret=335; break;\r
-        case 336: ret=337; break;\r
-        case 338: ret=339; break;\r
-        case 340: ret=341; break;\r
-        case 342: ret=343; break;\r
-        case 344: ret=345; break;\r
-        case 346: ret=347; break;\r
-        case 348: ret=349; break;\r
-        case 350: ret=351; break;\r
-        case 352: ret=353; break;\r
-        case 354: ret=355; break;\r
-        case 356: ret=357; break;\r
-        case 358: ret=359; break;\r
-        case 360: ret=361; break;\r
-        case 362: ret=363; break;\r
-        case 364: ret=365; break;\r
-        case 366: ret=367; break;\r
-        case 368: ret=369; break;\r
-        case 370: ret=371; break;\r
-        case 372: ret=373; break;\r
-        case 374: ret=375; break;\r
-        case 376: ret=255; break;\r
-        case 377: ret=378; break;\r
-        case 379: ret=380; break;\r
-        case 381: ret=382; break;\r
-        case 385: ret=595; break;\r
-        case 386: ret=387; break;\r
-        case 388: ret=389; break;\r
-        case 390: ret=596; break;\r
-        case 391: ret=392; break;\r
-        case 393: ret=598; break;\r
-        case 394: ret=599; break;\r
-        case 395: ret=396; break;\r
-        case 398: ret=600; break;\r
-        case 399: ret=601; break;\r
-        case 400: ret=603; break;\r
-        case 401: ret=402; break;\r
-        case 403: ret=608; break;\r
-        case 404: ret=611; break;\r
-        case 406: ret=617; break;\r
-        case 407: ret=616; break;\r
-        case 408: ret=409; break;\r
-        case 412: ret=623; break;\r
-        case 413: ret=626; break;\r
-        case 416: ret=417; break;\r
-        case 418: ret=419; break;\r
-        case 420: ret=421; break;\r
-        case 423: ret=424; break;\r
-        case 425: ret=643; break;\r
-        case 428: ret=429; break;\r
-        case 430: ret=648; break;\r
-        case 431: ret=432; break;\r
-        case 433: ret=650; break;\r
-        case 434: ret=651; break;\r
-        case 435: ret=436; break;\r
-        case 437: ret=438; break;\r
-        case 439: ret=658; break;\r
-        case 440: ret=441; break;\r
-        case 444: ret=445; break;\r
-        case 452: ret=454; break;\r
-        case 453: ret=454; break;\r
-        case 455: ret=457; break;\r
-        case 456: ret=457; break;\r
-        case 458: ret=460; break;\r
-        case 459: ret=460; break;\r
-        case 461: ret=462; break;\r
-        case 463: ret=464; break;\r
-        case 465: ret=466; break;\r
-        case 467: ret=468; break;\r
-        case 469: ret=470; break;\r
-        case 471: ret=472; break;\r
-        case 473: ret=474; break;\r
-        case 475: ret=476; break;\r
-        case 478: ret=479; break;\r
-        case 480: ret=481; break;\r
-        case 482: ret=483; break;\r
-        case 484: ret=485; break;\r
-        case 486: ret=487; break;\r
-        case 488: ret=489; break;\r
-        case 490: ret=491; break;\r
-        case 492: ret=493; break;\r
-        case 494: ret=495; break;\r
-        case 497: ret=499; break;\r
-        case 498: ret=499; break;\r
-        case 500: ret=501; break;\r
-        case 506: ret=507; break;\r
-        case 508: ret=509; break;\r
-        case 510: ret=511; break;\r
-        case 512: ret=513; break;\r
-        case 514: ret=515; break;\r
-        case 516: ret=517; break;\r
-        case 518: ret=519; break;\r
-        case 520: ret=521; break;\r
-        case 522: ret=523; break;\r
-        case 524: ret=525; break;\r
-        case 526: ret=527; break;\r
-        case 528: ret=529; break;\r
-        case 530: ret=531; break;\r
-        case 532: ret=533; break;\r
-        case 534: ret=535; break;\r
-        case 902: ret=940; break;\r
-        case 904: ret=941; break;\r
-        case 905: ret=942; break;\r
-        case 906: ret=943; break;\r
-        case 908: ret=972; break;\r
-        case 910: ret=973; break;\r
-        case 911: ret=974; break;\r
-        case 913: ret=945; break;\r
-        case 914: ret=946; break;\r
-        case 915: ret=947; break;\r
-        case 916: ret=948; break;\r
-        case 917: ret=949; break;\r
-        case 918: ret=950; break;\r
-        case 919: ret=951; break;\r
-        case 920: ret=952; break;\r
-        case 921: ret=953; break;\r
-        case 922: ret=954; break;\r
-        case 923: ret=955; break;\r
-        case 924: ret=956; break;\r
-        case 925: ret=957; break;\r
-        case 926: ret=958; break;\r
-        case 927: ret=959; break;\r
-        case 928: ret=960; break;\r
-        case 929: ret=961; break;\r
-        case 931: ret=963; break;\r
-        case 932: ret=964; break;\r
-        case 933: ret=965; break;\r
-        case 934: ret=966; break;\r
-        case 935: ret=967; break;\r
-        case 936: ret=968; break;\r
-        case 937: ret=969; break;\r
-        case 938: ret=970; break;\r
-        case 939: ret=971; break;\r
-        case 994: ret=995; break;\r
-        case 996: ret=997; break;\r
-        case 998: ret=999; break;\r
-        case 1000: ret=1001; break;\r
-        case 1002: ret=1003; break;\r
-        case 1004: ret=1005; break;\r
-        case 1006: ret=1007; break;\r
-        case 1025: ret=1105; break;\r
-        case 1026: ret=1106; break;\r
-        case 1027: ret=1107; break;\r
-        case 1028: ret=1108; break;\r
-        case 1029: ret=1109; break;\r
-        case 1030: ret=1110; break;\r
-        case 1031: ret=1111; break;\r
-        case 1032: ret=1112; break;\r
-        case 1033: ret=1113; break;\r
-        case 1034: ret=1114; break;\r
-        case 1035: ret=1115; break;\r
-        case 1036: ret=1116; break;\r
-        case 1038: ret=1118; break;\r
-        case 1039: ret=1119; break;\r
-        case 1040: ret=1072; break;\r
-        case 1041: ret=1073; break;\r
-        case 1042: ret=1074; break;\r
-        case 1043: ret=1075; break;\r
-        case 1044: ret=1076; break;\r
-        case 1045: ret=1077; break;\r
-        case 1046: ret=1078; break;\r
-        case 1047: ret=1079; break;\r
-        case 1048: ret=1080; break;\r
-        case 1049: ret=1081; break;\r
-        case 1050: ret=1082; break;\r
-        case 1051: ret=1083; break;\r
-        case 1052: ret=1084; break;\r
-        case 1053: ret=1085; break;\r
-        case 1054: ret=1086; break;\r
-        case 1055: ret=1087; break;\r
-        case 1056: ret=1088; break;\r
-        case 1057: ret=1089; break;\r
-        case 1058: ret=1090; break;\r
-        case 1059: ret=1091; break;\r
-        case 1060: ret=1092; break;\r
-        case 1061: ret=1093; break;\r
-        case 1062: ret=1094; break;\r
-        case 1063: ret=1095; break;\r
-        case 1064: ret=1096; break;\r
-        case 1065: ret=1097; break;\r
-        case 1066: ret=1098; break;\r
-        case 1067: ret=1099; break;\r
-        case 1068: ret=1100; break;\r
-        case 1069: ret=1101; break;\r
-        case 1070: ret=1102; break;\r
-        case 1071: ret=1103; break;\r
-        case 1120: ret=1121; break;\r
-        case 1122: ret=1123; break;\r
-        case 1124: ret=1125; break;\r
-        case 1126: ret=1127; break;\r
-        case 1128: ret=1129; break;\r
-        case 1130: ret=1131; break;\r
-        case 1132: ret=1133; break;\r
-        case 1134: ret=1135; break;\r
-        case 1136: ret=1137; break;\r
-        case 1138: ret=1139; break;\r
-        case 1140: ret=1141; break;\r
-        case 1142: ret=1143; break;\r
-        case 1144: ret=1145; break;\r
-        case 1146: ret=1147; break;\r
-        case 1148: ret=1149; break;\r
-        case 1150: ret=1151; break;\r
-        case 1152: ret=1153; break;\r
-        case 1168: ret=1169; break;\r
-        case 1170: ret=1171; break;\r
-        case 1172: ret=1173; break;\r
-        case 1174: ret=1175; break;\r
-        case 1176: ret=1177; break;\r
-        case 1178: ret=1179; break;\r
-        case 1180: ret=1181; break;\r
-        case 1182: ret=1183; break;\r
-        case 1184: ret=1185; break;\r
-        case 1186: ret=1187; break;\r
-        case 1188: ret=1189; break;\r
-        case 1190: ret=1191; break;\r
-        case 1192: ret=1193; break;\r
-        case 1194: ret=1195; break;\r
-        case 1196: ret=1197; break;\r
-        case 1198: ret=1199; break;\r
-        case 1200: ret=1201; break;\r
-        case 1202: ret=1203; break;\r
-        case 1204: ret=1205; break;\r
-        case 1206: ret=1207; break;\r
-        case 1208: ret=1209; break;\r
-        case 1210: ret=1211; break;\r
-        case 1212: ret=1213; break;\r
-        case 1214: ret=1215; break;\r
-        case 1217: ret=1218; break;\r
-        case 1219: ret=1220; break;\r
-        case 1223: ret=1224; break;\r
-        case 1227: ret=1228; break;\r
-        case 1232: ret=1233; break;\r
-        case 1234: ret=1235; break;\r
-        case 1236: ret=1237; break;\r
-        case 1238: ret=1239; break;\r
-        case 1240: ret=1241; break;\r
-        case 1242: ret=1243; break;\r
-        case 1244: ret=1245; break;\r
-        case 1246: ret=1247; break;\r
-        case 1248: ret=1249; break;\r
-        case 1250: ret=1251; break;\r
-        case 1252: ret=1253; break;\r
-        case 1254: ret=1255; break;\r
-        case 1256: ret=1257; break;\r
-        case 1258: ret=1259; break;\r
-        case 1262: ret=1263; break;\r
-        case 1264: ret=1265; break;\r
-        case 1266: ret=1267; break;\r
-        case 1268: ret=1269; break;\r
-        case 1272: ret=1273; break;\r
-        case 1329: ret=1377; break;\r
-        case 1330: ret=1378; break;\r
-        case 1331: ret=1379; break;\r
-        case 1332: ret=1380; break;\r
-        case 1333: ret=1381; break;\r
-        case 1334: ret=1382; break;\r
-        case 1335: ret=1383; break;\r
-        case 1336: ret=1384; break;\r
-        case 1337: ret=1385; break;\r
-        case 1338: ret=1386; break;\r
-        case 1339: ret=1387; break;\r
-        case 1340: ret=1388; break;\r
-        case 1341: ret=1389; break;\r
-        case 1342: ret=1390; break;\r
-        case 1343: ret=1391; break;\r
-        case 1344: ret=1392; break;\r
-        case 1345: ret=1393; break;\r
-        case 1346: ret=1394; break;\r
-        case 1347: ret=1395; break;\r
-        case 1348: ret=1396; break;\r
-        case 1349: ret=1397; break;\r
-        case 1350: ret=1398; break;\r
-        case 1351: ret=1399; break;\r
-        case 1352: ret=1400; break;\r
-        case 1353: ret=1401; break;\r
-        case 1354: ret=1402; break;\r
-        case 1355: ret=1403; break;\r
-        case 1356: ret=1404; break;\r
-        case 1357: ret=1405; break;\r
-        case 1358: ret=1406; break;\r
-        case 1359: ret=1407; break;\r
-        case 1360: ret=1408; break;\r
-        case 1361: ret=1409; break;\r
-        case 1362: ret=1410; break;\r
-        case 1363: ret=1411; break;\r
-        case 1364: ret=1412; break;\r
-        case 1365: ret=1413; break;\r
-        case 1366: ret=1414; break;\r
-        case 4256: ret=4304; break;\r
-        case 4257: ret=4305; break;\r
-        case 4258: ret=4306; break;\r
-        case 4259: ret=4307; break;\r
-        case 4260: ret=4308; break;\r
-        case 4261: ret=4309; break;\r
-        case 4262: ret=4310; break;\r
-        case 4263: ret=4311; break;\r
-        case 4264: ret=4312; break;\r
-        case 4265: ret=4313; break;\r
-        case 4266: ret=4314; break;\r
-        case 4267: ret=4315; break;\r
-        case 4268: ret=4316; break;\r
-        case 4269: ret=4317; break;\r
-        case 4270: ret=4318; break;\r
-        case 4271: ret=4319; break;\r
-        case 4272: ret=4320; break;\r
-        case 4273: ret=4321; break;\r
-        case 4274: ret=4322; break;\r
-        case 4275: ret=4323; break;\r
-        case 4276: ret=4324; break;\r
-        case 4277: ret=4325; break;\r
-        case 4278: ret=4326; break;\r
-        case 4279: ret=4327; break;\r
-        case 4280: ret=4328; break;\r
-        case 4281: ret=4329; break;\r
-        case 4282: ret=4330; break;\r
-        case 4283: ret=4331; break;\r
-        case 4284: ret=4332; break;\r
-        case 4285: ret=4333; break;\r
-        case 4286: ret=4334; break;\r
-        case 4287: ret=4335; break;\r
-        case 4288: ret=4336; break;\r
-        case 4289: ret=4337; break;\r
-        case 4290: ret=4338; break;\r
-        case 4291: ret=4339; break;\r
-        case 4292: ret=4340; break;\r
-        case 4293: ret=4341; break;\r
-        case 7680: ret=7681; break;\r
-        case 7682: ret=7683; break;\r
-        case 7684: ret=7685; break;\r
-        case 7686: ret=7687; break;\r
-        case 7688: ret=7689; break;\r
-        case 7690: ret=7691; break;\r
-        case 7692: ret=7693; break;\r
-        case 7694: ret=7695; break;\r
-        case 7696: ret=7697; break;\r
-        case 7698: ret=7699; break;\r
-        case 7700: ret=7701; break;\r
-        case 7702: ret=7703; break;\r
-        case 7704: ret=7705; break;\r
-        case 7706: ret=7707; break;\r
-        case 7708: ret=7709; break;\r
-        case 7710: ret=7711; break;\r
-        case 7712: ret=7713; break;\r
-        case 7714: ret=7715; break;\r
-        case 7716: ret=7717; break;\r
-        case 7718: ret=7719; break;\r
-        case 7720: ret=7721; break;\r
-        case 7722: ret=7723; break;\r
-        case 7724: ret=7725; break;\r
-        case 7726: ret=7727; break;\r
-        case 7728: ret=7729; break;\r
-        case 7730: ret=7731; break;\r
-        case 7732: ret=7733; break;\r
-        case 7734: ret=7735; break;\r
-        case 7736: ret=7737; break;\r
-        case 7738: ret=7739; break;\r
-        case 7740: ret=7741; break;\r
-        case 7742: ret=7743; break;\r
-        case 7744: ret=7745; break;\r
-        case 7746: ret=7747; break;\r
-        case 7748: ret=7749; break;\r
-        case 7750: ret=7751; break;\r
-        case 7752: ret=7753; break;\r
-        case 7754: ret=7755; break;\r
-        case 7756: ret=7757; break;\r
-        case 7758: ret=7759; break;\r
-        case 7760: ret=7761; break;\r
-        case 7762: ret=7763; break;\r
-        case 7764: ret=7765; break;\r
-        case 7766: ret=7767; break;\r
-        case 7768: ret=7769; break;\r
-        case 7770: ret=7771; break;\r
-        case 7772: ret=7773; break;\r
-        case 7774: ret=7775; break;\r
-        case 7776: ret=7777; break;\r
-        case 7778: ret=7779; break;\r
-        case 7780: ret=7781; break;\r
-        case 7782: ret=7783; break;\r
-        case 7784: ret=7785; break;\r
-        case 7786: ret=7787; break;\r
-        case 7788: ret=7789; break;\r
-        case 7790: ret=7791; break;\r
-        case 7792: ret=7793; break;\r
-        case 7794: ret=7795; break;\r
-        case 7796: ret=7797; break;\r
-        case 7798: ret=7799; break;\r
-        case 7800: ret=7801; break;\r
-        case 7802: ret=7803; break;\r
-        case 7804: ret=7805; break;\r
-        case 7806: ret=7807; break;\r
-        case 7808: ret=7809; break;\r
-        case 7810: ret=7811; break;\r
-        case 7812: ret=7813; break;\r
-        case 7814: ret=7815; break;\r
-        case 7816: ret=7817; break;\r
-        case 7818: ret=7819; break;\r
-        case 7820: ret=7821; break;\r
-        case 7822: ret=7823; break;\r
-        case 7824: ret=7825; break;\r
-        case 7826: ret=7827; break;\r
-        case 7828: ret=7829; break;\r
-        case 7840: ret=7841; break;\r
-        case 7842: ret=7843; break;\r
-        case 7844: ret=7845; break;\r
-        case 7846: ret=7847; break;\r
-        case 7848: ret=7849; break;\r
-        case 7850: ret=7851; break;\r
-        case 7852: ret=7853; break;\r
-        case 7854: ret=7855; break;\r
-        case 7856: ret=7857; break;\r
-        case 7858: ret=7859; break;\r
-        case 7860: ret=7861; break;\r
-        case 7862: ret=7863; break;\r
-        case 7864: ret=7865; break;\r
-        case 7866: ret=7867; break;\r
-        case 7868: ret=7869; break;\r
-        case 7870: ret=7871; break;\r
-        case 7872: ret=7873; break;\r
-        case 7874: ret=7875; break;\r
-        case 7876: ret=7877; break;\r
-        case 7878: ret=7879; break;\r
-        case 7880: ret=7881; break;\r
-        case 7882: ret=7883; break;\r
-        case 7884: ret=7885; break;\r
-        case 7886: ret=7887; break;\r
-        case 7888: ret=7889; break;\r
-        case 7890: ret=7891; break;\r
-        case 7892: ret=7893; break;\r
-        case 7894: ret=7895; break;\r
-        case 7896: ret=7897; break;\r
-        case 7898: ret=7899; break;\r
-        case 7900: ret=7901; break;\r
-        case 7902: ret=7903; break;\r
-        case 7904: ret=7905; break;\r
-        case 7906: ret=7907; break;\r
-        case 7908: ret=7909; break;\r
-        case 7910: ret=7911; break;\r
-        case 7912: ret=7913; break;\r
-        case 7914: ret=7915; break;\r
-        case 7916: ret=7917; break;\r
-        case 7918: ret=7919; break;\r
-        case 7920: ret=7921; break;\r
-        case 7922: ret=7923; break;\r
-        case 7924: ret=7925; break;\r
-        case 7926: ret=7927; break;\r
-        case 7928: ret=7929; break;\r
-        case 7944: ret=7936; break;\r
-        case 7945: ret=7937; break;\r
-        case 7946: ret=7938; break;\r
-        case 7947: ret=7939; break;\r
-        case 7948: ret=7940; break;\r
-        case 7949: ret=7941; break;\r
-        case 7950: ret=7942; break;\r
-        case 7951: ret=7943; break;\r
-        case 7960: ret=7952; break;\r
-        case 7961: ret=7953; break;\r
-        case 7962: ret=7954; break;\r
-        case 7963: ret=7955; break;\r
-        case 7964: ret=7956; break;\r
-        case 7965: ret=7957; break;\r
-        case 7976: ret=7968; break;\r
-        case 7977: ret=7969; break;\r
-        case 7978: ret=7970; break;\r
-        case 7979: ret=7971; break;\r
-        case 7980: ret=7972; break;\r
-        case 7981: ret=7973; break;\r
-        case 7982: ret=7974; break;\r
-        case 7983: ret=7975; break;\r
-        case 7992: ret=7984; break;\r
-        case 7993: ret=7985; break;\r
-        case 7994: ret=7986; break;\r
-        case 7995: ret=7987; break;\r
-        case 7996: ret=7988; break;\r
-        case 7997: ret=7989; break;\r
-        case 7998: ret=7990; break;\r
-        case 7999: ret=7991; break;\r
-        case 8008: ret=8000; break;\r
-        case 8009: ret=8001; break;\r
-        case 8010: ret=8002; break;\r
-        case 8011: ret=8003; break;\r
-        case 8012: ret=8004; break;\r
-        case 8013: ret=8005; break;\r
-        case 8025: ret=8017; break;\r
-        case 8027: ret=8019; break;\r
-        case 8029: ret=8021; break;\r
-        case 8031: ret=8023; break;\r
-        case 8040: ret=8032; break;\r
-        case 8041: ret=8033; break;\r
-        case 8042: ret=8034; break;\r
-        case 8043: ret=8035; break;\r
-        case 8044: ret=8036; break;\r
-        case 8045: ret=8037; break;\r
-        case 8046: ret=8038; break;\r
-        case 8047: ret=8039; break;\r
-        case 8072: ret=8064; break;\r
-        case 8073: ret=8065; break;\r
-        case 8074: ret=8066; break;\r
-        case 8075: ret=8067; break;\r
-        case 8076: ret=8068; break;\r
-        case 8077: ret=8069; break;\r
-        case 8078: ret=8070; break;\r
-        case 8079: ret=8071; break;\r
-        case 8088: ret=8080; break;\r
-        case 8089: ret=8081; break;\r
-        case 8090: ret=8082; break;\r
-        case 8091: ret=8083; break;\r
-        case 8092: ret=8084; break;\r
-        case 8093: ret=8085; break;\r
-        case 8094: ret=8086; break;\r
-        case 8095: ret=8087; break;\r
-        case 8104: ret=8096; break;\r
-        case 8105: ret=8097; break;\r
-        case 8106: ret=8098; break;\r
-        case 8107: ret=8099; break;\r
-        case 8108: ret=8100; break;\r
-        case 8109: ret=8101; break;\r
-        case 8110: ret=8102; break;\r
-        case 8111: ret=8103; break;\r
-        case 8120: ret=8112; break;\r
-        case 8121: ret=8113; break;\r
-        case 8122: ret=8048; break;\r
-        case 8123: ret=8049; break;\r
-        case 8124: ret=8115; break;\r
-        case 8136: ret=8050; break;\r
-        case 8137: ret=8051; break;\r
-        case 8138: ret=8052; break;\r
-        case 8139: ret=8053; break;\r
-        case 8140: ret=8131; break;\r
-        case 8152: ret=8144; break;\r
-        case 8153: ret=8145; break;\r
-        case 8154: ret=8054; break;\r
-        case 8155: ret=8055; break;\r
-        case 8168: ret=8160; break;\r
-        case 8169: ret=8161; break;\r
-        case 8170: ret=8058; break;\r
-        case 8171: ret=8059; break;\r
-        case 8172: ret=8165; break;\r
-        case 8184: ret=8056; break;\r
-        case 8185: ret=8057; break;\r
-        case 8186: ret=8060; break;\r
-        case 8187: ret=8061; break;\r
-        case 8188: ret=8179; break;\r
-        case 8544: ret=8560; break;\r
-        case 8545: ret=8561; break;\r
-        case 8546: ret=8562; break;\r
-        case 8547: ret=8563; break;\r
-        case 8548: ret=8564; break;\r
-        case 8549: ret=8565; break;\r
-        case 8550: ret=8566; break;\r
-        case 8551: ret=8567; break;\r
-        case 8552: ret=8568; break;\r
-        case 8553: ret=8569; break;\r
-        case 8554: ret=8570; break;\r
-        case 8555: ret=8571; break;\r
-        case 8556: ret=8572; break;\r
-        case 8557: ret=8573; break;\r
-        case 8558: ret=8574; break;\r
-        case 8559: ret=8575; break;\r
-        case 9398: ret=9424; break;\r
-        case 9399: ret=9425; break;\r
-        case 9400: ret=9426; break;\r
-        case 9401: ret=9427; break;\r
-        case 9402: ret=9428; break;\r
-        case 9403: ret=9429; break;\r
-        case 9404: ret=9430; break;\r
-        case 9405: ret=9431; break;\r
-        case 9406: ret=9432; break;\r
-        case 9407: ret=9433; break;\r
-        case 9408: ret=9434; break;\r
-        case 9409: ret=9435; break;\r
-        case 9410: ret=9436; break;\r
-        case 9411: ret=9437; break;\r
-        case 9412: ret=9438; break;\r
-        case 9413: ret=9439; break;\r
-        case 9414: ret=9440; break;\r
-        case 9415: ret=9441; break;\r
-        case 9416: ret=9442; break;\r
-        case 9417: ret=9443; break;\r
-        case 9418: ret=9444; break;\r
-        case 9419: ret=9445; break;\r
-        case 9420: ret=9446; break;\r
-        case 9421: ret=9447; break;\r
-        case 9422: ret=9448; break;\r
-        case 9423: ret=9449; break;\r
-        case 65313: ret=65345; break;\r
-        case 65314: ret=65346; break;\r
-        case 65315: ret=65347; break;\r
-        case 65316: ret=65348; break;\r
-        case 65317: ret=65349; break;\r
-        case 65318: ret=65350; break;\r
-        case 65319: ret=65351; break;\r
-        case 65320: ret=65352; break;\r
-        case 65321: ret=65353; break;\r
-        case 65322: ret=65354; break;\r
-        case 65323: ret=65355; break;\r
-        case 65324: ret=65356; break;\r
-        case 65325: ret=65357; break;\r
-        case 65326: ret=65358; break;\r
-        case 65327: ret=65359; break;\r
-        case 65328: ret=65360; break;\r
-        case 65329: ret=65361; break;\r
-        case 65330: ret=65362; break;\r
-        case 65331: ret=65363; break;\r
-        case 65332: ret=65364; break;\r
-        case 65333: ret=65365; break;\r
-        case 65334: ret=65366; break;\r
-        case 65335: ret=65367; break;\r
-        case 65336: ret=65368; break;\r
-        case 65337: ret=65369; break;\r
-        case 65338: ret=65370; break;\r
-        }\r
-        return (char)ret;\r
-      }\r
-      return Character.toLowerCase(c);\r
-    }\r
-    /** Convert a String to title case. */\r
-    public static String toTitleCase(String s) {\r
-        StringBuffer sb = new StringBuffer();\r
-        for(int i=0;i<s.length();i++)\r
-            sb.append(CaseMgr.toTitleCase(s.charAt(i)));\r
-        return sb.toString();\r
-    }\r
-    /** Convert a String to upper case. */\r
-    public static String toUpperCase(String s) {\r
-        StringBuffer sb = new StringBuffer();\r
-        for(int i=0;i<s.length();i++)\r
-            sb.append(CaseMgr.toUpperCase(s.charAt(i)));\r
-        return sb.toString();\r
-    }\r
-    /** Convert a String to lower case. */\r
-    public static String toLowerCase(String s) {\r
-        StringBuffer sb = new StringBuffer();\r
-        for(int i=0;i<s.length();i++)\r
-            sb.append(CaseMgr.toLowerCase(s.charAt(i)));\r
-        return sb.toString();\r
-    }\r
-    /** Convert a character to title case.*/\r
-    public static char toTitleCase(char c) {\r
-      if(java_1_0) {\r
-        int ret = (int)toUpperCase(c);\r
-        switch(c) {\r
-        case 452: ret=453; break;\r
-        case 453: ret=453; break;\r
-        case 454: ret=453; break;\r
-        case 455: ret=456; break;\r
-        case 456: ret=456; break;\r
-        case 457: ret=456; break;\r
-        case 458: ret=459; break;\r
-        case 459: ret=459; break;\r
-        case 460: ret=459; break;\r
-        case 497: ret=498; break;\r
-        case 498: ret=498; break;\r
-        case 499: ret=498; break;\r
-        }\r
-        return (char)ret;\r
-      }\r
-      return Character.toTitleCase(c);\r
-    }\r
-    /** Duplicates the regionMatches routine of String -- but\r
-        makes use of the definitions of upper, lower, and title\r
-        case in this class when ignoreCase is set. */\r
-    public static boolean regionMatches( StringLike s1,\r
-        boolean ign,int i1,StringLike s2,int i2,int i3) {\r
-        int itot=i2+i3;\r
-        if(itot>s2.length()||i1+i3>s1.length()) return false;\r
-        if(!ign) {\r
-            for(int i=i2;i<itot;i++)\r
-                if(s2.charAt(i) != s1.charAt(i1++))\r
-                    return false;\r
-        } else {\r
-            for(int i=i2;i<itot;i++)\r
-                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))\r
-                    return false;\r
-        }\r
-        return true;\r
-    }\r
-    /** Duplicates the regionMatches routine of String -- but\r
-        makes use of the definitions of upper, lower, and title\r
-        case in this class when ignoreCase is set. */\r
-    public static boolean regionMatches( String s1,\r
-        boolean ign,int i1,StringLike s2,int i2,int i3) {\r
-        int itot=i2+i3;\r
-        if(itot>s2.length()||i1+i3>s1.length()) return false;\r
-        if(!ign) {\r
-            for(int i=i2;i<itot;i++)\r
-                if(s2.charAt(i) != s1.charAt(i1++))\r
-                    return false;\r
-        } else {\r
-            for(int i=i2;i<itot;i++)\r
-                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))\r
-                    return false;\r
-        }\r
-        return true;\r
-    }\r
-    /** Duplicates the regionMatches routine of String -- but\r
-        makes use of the definitions of upper, lower, and title\r
-        case in this class when ignoreCase is set. */\r
-    public static boolean regionMatches( StringLike s1,\r
-        boolean ign,int i1,String s2,int i2,int i3) {\r
-        int itot=i2+i3;\r
-        if(itot>s2.length()||i1+i3>s1.length()) return false;\r
-        if(!ign) {\r
-            for(int i=i2;i<itot;i++)\r
-                if(s2.charAt(i) != s1.charAt(i1++))\r
-                    return false;\r
-        } else {\r
-            for(int i=i2;i<itot;i++)\r
-                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))\r
-                    return false;\r
-        }\r
-        return true;\r
-    }\r
-    /** Duplicates the regionMatches routine of String -- but\r
-        makes use of the definitions of upper, lower, and title\r
-        case in this class when ignoreCase is set. */\r
-    public static boolean regionMatches( String s1,\r
-        boolean ign,int i1,String s2,int i2,int i3) {\r
-        int itot=i2+i3;\r
-        if(itot>s2.length()||i1+i3>s1.length()) return false;\r
-        if(!ign) {\r
-            for(int i=i2;i<itot;i++)\r
-                if(s2.charAt(i) != s1.charAt(i1++))\r
-                    return false;\r
-        } else {\r
-            for(int i=i2;i<itot;i++)\r
-                if(toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))\r
-                    return false;\r
-        }\r
-        return true;\r
-    }\r
-}\r
+//
+// This software is now distributed according to
+// the Lesser Gnu Public License.  Please see
+// http://www.gnu.org/copyleft/lesser.txt for
+// the details.
+//    -- Happy Computing!
+//
+package com.stevesoft.pat;
+
+/**
+ * Encapsulates the Unicode definitions of Upper, Lower, and Title case as
+ * defined by <a href="http://www.unicode.org"> unicode.org</a>.
+ * <p>
+ * The performance of the methods found in String and Character is better, but
+ * these methods work both in java 1.0 and 1.1. If it is desirable, either to
+ * gain a slight performance increase or to accomodate application specific
+ * modifications to the definitions of upper, lower, and title case then it
+ * should be a straightforward task to substitute your own methods for these.
+ */
+final public class CaseMgr
+{
+  final static boolean java_1_0 = false;
+
+  /** Convert a character to upper case . */
+  public static char toUpperCase(char c)
+  {
+    if (java_1_0)
+    {
+      int ret = (int) c;
+      switch (c)
+      {
+      case 97:
+        ret = 65;
+        break;
+      case 98:
+        ret = 66;
+        break;
+      case 99:
+        ret = 67;
+        break;
+      case 100:
+        ret = 68;
+        break;
+      case 101:
+        ret = 69;
+        break;
+      case 102:
+        ret = 70;
+        break;
+      case 103:
+        ret = 71;
+        break;
+      case 104:
+        ret = 72;
+        break;
+      case 105:
+        ret = 73;
+        break;
+      case 106:
+        ret = 74;
+        break;
+      case 107:
+        ret = 75;
+        break;
+      case 108:
+        ret = 76;
+        break;
+      case 109:
+        ret = 77;
+        break;
+      case 110:
+        ret = 78;
+        break;
+      case 111:
+        ret = 79;
+        break;
+      case 112:
+        ret = 80;
+        break;
+      case 113:
+        ret = 81;
+        break;
+      case 114:
+        ret = 82;
+        break;
+      case 115:
+        ret = 83;
+        break;
+      case 116:
+        ret = 84;
+        break;
+      case 117:
+        ret = 85;
+        break;
+      case 118:
+        ret = 86;
+        break;
+      case 119:
+        ret = 87;
+        break;
+      case 120:
+        ret = 88;
+        break;
+      case 121:
+        ret = 89;
+        break;
+      case 122:
+        ret = 90;
+        break;
+      case 224:
+        ret = 192;
+        break;
+      case 225:
+        ret = 193;
+        break;
+      case 226:
+        ret = 194;
+        break;
+      case 227:
+        ret = 195;
+        break;
+      case 228:
+        ret = 196;
+        break;
+      case 229:
+        ret = 197;
+        break;
+      case 230:
+        ret = 198;
+        break;
+      case 231:
+        ret = 199;
+        break;
+      case 232:
+        ret = 200;
+        break;
+      case 233:
+        ret = 201;
+        break;
+      case 234:
+        ret = 202;
+        break;
+      case 235:
+        ret = 203;
+        break;
+      case 236:
+        ret = 204;
+        break;
+      case 237:
+        ret = 205;
+        break;
+      case 238:
+        ret = 206;
+        break;
+      case 239:
+        ret = 207;
+        break;
+      case 240:
+        ret = 208;
+        break;
+      case 241:
+        ret = 209;
+        break;
+      case 242:
+        ret = 210;
+        break;
+      case 243:
+        ret = 211;
+        break;
+      case 244:
+        ret = 212;
+        break;
+      case 245:
+        ret = 213;
+        break;
+      case 246:
+        ret = 214;
+        break;
+      case 248:
+        ret = 216;
+        break;
+      case 249:
+        ret = 217;
+        break;
+      case 250:
+        ret = 218;
+        break;
+      case 251:
+        ret = 219;
+        break;
+      case 252:
+        ret = 220;
+        break;
+      case 253:
+        ret = 221;
+        break;
+      case 254:
+        ret = 222;
+        break;
+      case 255:
+        ret = 376;
+        break;
+      case 257:
+        ret = 256;
+        break;
+      case 259:
+        ret = 258;
+        break;
+      case 261:
+        ret = 260;
+        break;
+      case 263:
+        ret = 262;
+        break;
+      case 265:
+        ret = 264;
+        break;
+      case 267:
+        ret = 266;
+        break;
+      case 269:
+        ret = 268;
+        break;
+      case 271:
+        ret = 270;
+        break;
+      case 273:
+        ret = 272;
+        break;
+      case 275:
+        ret = 274;
+        break;
+      case 277:
+        ret = 276;
+        break;
+      case 279:
+        ret = 278;
+        break;
+      case 281:
+        ret = 280;
+        break;
+      case 283:
+        ret = 282;
+        break;
+      case 285:
+        ret = 284;
+        break;
+      case 287:
+        ret = 286;
+        break;
+      case 289:
+        ret = 288;
+        break;
+      case 291:
+        ret = 290;
+        break;
+      case 293:
+        ret = 292;
+        break;
+      case 295:
+        ret = 294;
+        break;
+      case 297:
+        ret = 296;
+        break;
+      case 299:
+        ret = 298;
+        break;
+      case 301:
+        ret = 300;
+        break;
+      case 303:
+        ret = 302;
+        break;
+      case 305:
+        ret = 73;
+        break;
+      case 307:
+        ret = 306;
+        break;
+      case 309:
+        ret = 308;
+        break;
+      case 311:
+        ret = 310;
+        break;
+      case 314:
+        ret = 313;
+        break;
+      case 316:
+        ret = 315;
+        break;
+      case 318:
+        ret = 317;
+        break;
+      case 320:
+        ret = 319;
+        break;
+      case 322:
+        ret = 321;
+        break;
+      case 324:
+        ret = 323;
+        break;
+      case 326:
+        ret = 325;
+        break;
+      case 328:
+        ret = 327;
+        break;
+      case 331:
+        ret = 330;
+        break;
+      case 333:
+        ret = 332;
+        break;
+      case 335:
+        ret = 334;
+        break;
+      case 337:
+        ret = 336;
+        break;
+      case 339:
+        ret = 338;
+        break;
+      case 341:
+        ret = 340;
+        break;
+      case 343:
+        ret = 342;
+        break;
+      case 345:
+        ret = 344;
+        break;
+      case 347:
+        ret = 346;
+        break;
+      case 349:
+        ret = 348;
+        break;
+      case 351:
+        ret = 350;
+        break;
+      case 353:
+        ret = 352;
+        break;
+      case 355:
+        ret = 354;
+        break;
+      case 357:
+        ret = 356;
+        break;
+      case 359:
+        ret = 358;
+        break;
+      case 361:
+        ret = 360;
+        break;
+      case 363:
+        ret = 362;
+        break;
+      case 365:
+        ret = 364;
+        break;
+      case 367:
+        ret = 366;
+        break;
+      case 369:
+        ret = 368;
+        break;
+      case 371:
+        ret = 370;
+        break;
+      case 373:
+        ret = 372;
+        break;
+      case 375:
+        ret = 374;
+        break;
+      case 378:
+        ret = 377;
+        break;
+      case 380:
+        ret = 379;
+        break;
+      case 382:
+        ret = 381;
+        break;
+      case 383:
+        ret = 83;
+        break;
+      case 387:
+        ret = 386;
+        break;
+      case 389:
+        ret = 388;
+        break;
+      case 392:
+        ret = 391;
+        break;
+      case 396:
+        ret = 395;
+        break;
+      case 402:
+        ret = 401;
+        break;
+      case 409:
+        ret = 408;
+        break;
+      case 417:
+        ret = 416;
+        break;
+      case 419:
+        ret = 418;
+        break;
+      case 421:
+        ret = 420;
+        break;
+      case 424:
+        ret = 423;
+        break;
+      case 429:
+        ret = 428;
+        break;
+      case 432:
+        ret = 431;
+        break;
+      case 436:
+        ret = 435;
+        break;
+      case 438:
+        ret = 437;
+        break;
+      case 441:
+        ret = 440;
+        break;
+      case 445:
+        ret = 444;
+        break;
+      case 453:
+        ret = 452;
+        break;
+      case 454:
+        ret = 452;
+        break;
+      case 456:
+        ret = 455;
+        break;
+      case 457:
+        ret = 455;
+        break;
+      case 459:
+        ret = 458;
+        break;
+      case 460:
+        ret = 458;
+        break;
+      case 462:
+        ret = 461;
+        break;
+      case 464:
+        ret = 463;
+        break;
+      case 466:
+        ret = 465;
+        break;
+      case 468:
+        ret = 467;
+        break;
+      case 470:
+        ret = 469;
+        break;
+      case 472:
+        ret = 471;
+        break;
+      case 474:
+        ret = 473;
+        break;
+      case 476:
+        ret = 475;
+        break;
+      case 479:
+        ret = 478;
+        break;
+      case 481:
+        ret = 480;
+        break;
+      case 483:
+        ret = 482;
+        break;
+      case 485:
+        ret = 484;
+        break;
+      case 487:
+        ret = 486;
+        break;
+      case 489:
+        ret = 488;
+        break;
+      case 491:
+        ret = 490;
+        break;
+      case 493:
+        ret = 492;
+        break;
+      case 495:
+        ret = 494;
+        break;
+      case 498:
+        ret = 497;
+        break;
+      case 499:
+        ret = 497;
+        break;
+      case 501:
+        ret = 500;
+        break;
+      case 507:
+        ret = 506;
+        break;
+      case 509:
+        ret = 508;
+        break;
+      case 511:
+        ret = 510;
+        break;
+      case 513:
+        ret = 512;
+        break;
+      case 515:
+        ret = 514;
+        break;
+      case 517:
+        ret = 516;
+        break;
+      case 519:
+        ret = 518;
+        break;
+      case 521:
+        ret = 520;
+        break;
+      case 523:
+        ret = 522;
+        break;
+      case 525:
+        ret = 524;
+        break;
+      case 527:
+        ret = 526;
+        break;
+      case 529:
+        ret = 528;
+        break;
+      case 531:
+        ret = 530;
+        break;
+      case 533:
+        ret = 532;
+        break;
+      case 535:
+        ret = 534;
+        break;
+      case 595:
+        ret = 385;
+        break;
+      case 596:
+        ret = 390;
+        break;
+      case 598:
+        ret = 393;
+        break;
+      case 599:
+        ret = 394;
+        break;
+      case 600:
+        ret = 398;
+        break;
+      case 601:
+        ret = 399;
+        break;
+      case 603:
+        ret = 400;
+        break;
+      case 608:
+        ret = 403;
+        break;
+      case 611:
+        ret = 404;
+        break;
+      case 616:
+        ret = 407;
+        break;
+      case 617:
+        ret = 406;
+        break;
+      case 623:
+        ret = 412;
+        break;
+      case 626:
+        ret = 413;
+        break;
+      case 643:
+        ret = 425;
+        break;
+      case 648:
+        ret = 430;
+        break;
+      case 650:
+        ret = 433;
+        break;
+      case 651:
+        ret = 434;
+        break;
+      case 658:
+        ret = 439;
+        break;
+      case 940:
+        ret = 902;
+        break;
+      case 941:
+        ret = 904;
+        break;
+      case 942:
+        ret = 905;
+        break;
+      case 943:
+        ret = 906;
+        break;
+      case 945:
+        ret = 913;
+        break;
+      case 946:
+        ret = 914;
+        break;
+      case 947:
+        ret = 915;
+        break;
+      case 948:
+        ret = 916;
+        break;
+      case 949:
+        ret = 917;
+        break;
+      case 950:
+        ret = 918;
+        break;
+      case 951:
+        ret = 919;
+        break;
+      case 952:
+        ret = 920;
+        break;
+      case 953:
+        ret = 921;
+        break;
+      case 954:
+        ret = 922;
+        break;
+      case 955:
+        ret = 923;
+        break;
+      case 956:
+        ret = 924;
+        break;
+      case 957:
+        ret = 925;
+        break;
+      case 958:
+        ret = 926;
+        break;
+      case 959:
+        ret = 927;
+        break;
+      case 960:
+        ret = 928;
+        break;
+      case 961:
+        ret = 929;
+        break;
+      case 963:
+        ret = 931;
+        break;
+      case 964:
+        ret = 932;
+        break;
+      case 965:
+        ret = 933;
+        break;
+      case 966:
+        ret = 934;
+        break;
+      case 967:
+        ret = 935;
+        break;
+      case 968:
+        ret = 936;
+        break;
+      case 969:
+        ret = 937;
+        break;
+      case 970:
+        ret = 938;
+        break;
+      case 971:
+        ret = 939;
+        break;
+      case 972:
+        ret = 908;
+        break;
+      case 973:
+        ret = 910;
+        break;
+      case 974:
+        ret = 911;
+        break;
+      case 976:
+        ret = 914;
+        break;
+      case 977:
+        ret = 920;
+        break;
+      case 981:
+        ret = 934;
+        break;
+      case 982:
+        ret = 928;
+        break;
+      case 995:
+        ret = 994;
+        break;
+      case 997:
+        ret = 996;
+        break;
+      case 999:
+        ret = 998;
+        break;
+      case 1001:
+        ret = 1000;
+        break;
+      case 1003:
+        ret = 1002;
+        break;
+      case 1005:
+        ret = 1004;
+        break;
+      case 1007:
+        ret = 1006;
+        break;
+      case 1008:
+        ret = 922;
+        break;
+      case 1009:
+        ret = 929;
+        break;
+      case 1072:
+        ret = 1040;
+        break;
+      case 1073:
+        ret = 1041;
+        break;
+      case 1074:
+        ret = 1042;
+        break;
+      case 1075:
+        ret = 1043;
+        break;
+      case 1076:
+        ret = 1044;
+        break;
+      case 1077:
+        ret = 1045;
+        break;
+      case 1078:
+        ret = 1046;
+        break;
+      case 1079:
+        ret = 1047;
+        break;
+      case 1080:
+        ret = 1048;
+        break;
+      case 1081:
+        ret = 1049;
+        break;
+      case 1082:
+        ret = 1050;
+        break;
+      case 1083:
+        ret = 1051;
+        break;
+      case 1084:
+        ret = 1052;
+        break;
+      case 1085:
+        ret = 1053;
+        break;
+      case 1086:
+        ret = 1054;
+        break;
+      case 1087:
+        ret = 1055;
+        break;
+      case 1088:
+        ret = 1056;
+        break;
+      case 1089:
+        ret = 1057;
+        break;
+      case 1090:
+        ret = 1058;
+        break;
+      case 1091:
+        ret = 1059;
+        break;
+      case 1092:
+        ret = 1060;
+        break;
+      case 1093:
+        ret = 1061;
+        break;
+      case 1094:
+        ret = 1062;
+        break;
+      case 1095:
+        ret = 1063;
+        break;
+      case 1096:
+        ret = 1064;
+        break;
+      case 1097:
+        ret = 1065;
+        break;
+      case 1098:
+        ret = 1066;
+        break;
+      case 1099:
+        ret = 1067;
+        break;
+      case 1100:
+        ret = 1068;
+        break;
+      case 1101:
+        ret = 1069;
+        break;
+      case 1102:
+        ret = 1070;
+        break;
+      case 1103:
+        ret = 1071;
+        break;
+      case 1105:
+        ret = 1025;
+        break;
+      case 1106:
+        ret = 1026;
+        break;
+      case 1107:
+        ret = 1027;
+        break;
+      case 1108:
+        ret = 1028;
+        break;
+      case 1109:
+        ret = 1029;
+        break;
+      case 1110:
+        ret = 1030;
+        break;
+      case 1111:
+        ret = 1031;
+        break;
+      case 1112:
+        ret = 1032;
+        break;
+      case 1113:
+        ret = 1033;
+        break;
+      case 1114:
+        ret = 1034;
+        break;
+      case 1115:
+        ret = 1035;
+        break;
+      case 1116:
+        ret = 1036;
+        break;
+      case 1118:
+        ret = 1038;
+        break;
+      case 1119:
+        ret = 1039;
+        break;
+      case 1121:
+        ret = 1120;
+        break;
+      case 1123:
+        ret = 1122;
+        break;
+      case 1125:
+        ret = 1124;
+        break;
+      case 1127:
+        ret = 1126;
+        break;
+      case 1129:
+        ret = 1128;
+        break;
+      case 1131:
+        ret = 1130;
+        break;
+      case 1133:
+        ret = 1132;
+        break;
+      case 1135:
+        ret = 1134;
+        break;
+      case 1137:
+        ret = 1136;
+        break;
+      case 1139:
+        ret = 1138;
+        break;
+      case 1141:
+        ret = 1140;
+        break;
+      case 1143:
+        ret = 1142;
+        break;
+      case 1145:
+        ret = 1144;
+        break;
+      case 1147:
+        ret = 1146;
+        break;
+      case 1149:
+        ret = 1148;
+        break;
+      case 1151:
+        ret = 1150;
+        break;
+      case 1153:
+        ret = 1152;
+        break;
+      case 1169:
+        ret = 1168;
+        break;
+      case 1171:
+        ret = 1170;
+        break;
+      case 1173:
+        ret = 1172;
+        break;
+      case 1175:
+        ret = 1174;
+        break;
+      case 1177:
+        ret = 1176;
+        break;
+      case 1179:
+        ret = 1178;
+        break;
+      case 1181:
+        ret = 1180;
+        break;
+      case 1183:
+        ret = 1182;
+        break;
+      case 1185:
+        ret = 1184;
+        break;
+      case 1187:
+        ret = 1186;
+        break;
+      case 1189:
+        ret = 1188;
+        break;
+      case 1191:
+        ret = 1190;
+        break;
+      case 1193:
+        ret = 1192;
+        break;
+      case 1195:
+        ret = 1194;
+        break;
+      case 1197:
+        ret = 1196;
+        break;
+      case 1199:
+        ret = 1198;
+        break;
+      case 1201:
+        ret = 1200;
+        break;
+      case 1203:
+        ret = 1202;
+        break;
+      case 1205:
+        ret = 1204;
+        break;
+      case 1207:
+        ret = 1206;
+        break;
+      case 1209:
+        ret = 1208;
+        break;
+      case 1211:
+        ret = 1210;
+        break;
+      case 1213:
+        ret = 1212;
+        break;
+      case 1215:
+        ret = 1214;
+        break;
+      case 1218:
+        ret = 1217;
+        break;
+      case 1220:
+        ret = 1219;
+        break;
+      case 1224:
+        ret = 1223;
+        break;
+      case 1228:
+        ret = 1227;
+        break;
+      case 1233:
+        ret = 1232;
+        break;
+      case 1235:
+        ret = 1234;
+        break;
+      case 1237:
+        ret = 1236;
+        break;
+      case 1239:
+        ret = 1238;
+        break;
+      case 1241:
+        ret = 1240;
+        break;
+      case 1243:
+        ret = 1242;
+        break;
+      case 1245:
+        ret = 1244;
+        break;
+      case 1247:
+        ret = 1246;
+        break;
+      case 1249:
+        ret = 1248;
+        break;
+      case 1251:
+        ret = 1250;
+        break;
+      case 1253:
+        ret = 1252;
+        break;
+      case 1255:
+        ret = 1254;
+        break;
+      case 1257:
+        ret = 1256;
+        break;
+      case 1259:
+        ret = 1258;
+        break;
+      case 1263:
+        ret = 1262;
+        break;
+      case 1265:
+        ret = 1264;
+        break;
+      case 1267:
+        ret = 1266;
+        break;
+      case 1269:
+        ret = 1268;
+        break;
+      case 1273:
+        ret = 1272;
+        break;
+      case 1377:
+        ret = 1329;
+        break;
+      case 1378:
+        ret = 1330;
+        break;
+      case 1379:
+        ret = 1331;
+        break;
+      case 1380:
+        ret = 1332;
+        break;
+      case 1381:
+        ret = 1333;
+        break;
+      case 1382:
+        ret = 1334;
+        break;
+      case 1383:
+        ret = 1335;
+        break;
+      case 1384:
+        ret = 1336;
+        break;
+      case 1385:
+        ret = 1337;
+        break;
+      case 1386:
+        ret = 1338;
+        break;
+      case 1387:
+        ret = 1339;
+        break;
+      case 1388:
+        ret = 1340;
+        break;
+      case 1389:
+        ret = 1341;
+        break;
+      case 1390:
+        ret = 1342;
+        break;
+      case 1391:
+        ret = 1343;
+        break;
+      case 1392:
+        ret = 1344;
+        break;
+      case 1393:
+        ret = 1345;
+        break;
+      case 1394:
+        ret = 1346;
+        break;
+      case 1395:
+        ret = 1347;
+        break;
+      case 1396:
+        ret = 1348;
+        break;
+      case 1397:
+        ret = 1349;
+        break;
+      case 1398:
+        ret = 1350;
+        break;
+      case 1399:
+        ret = 1351;
+        break;
+      case 1400:
+        ret = 1352;
+        break;
+      case 1401:
+        ret = 1353;
+        break;
+      case 1402:
+        ret = 1354;
+        break;
+      case 1403:
+        ret = 1355;
+        break;
+      case 1404:
+        ret = 1356;
+        break;
+      case 1405:
+        ret = 1357;
+        break;
+      case 1406:
+        ret = 1358;
+        break;
+      case 1407:
+        ret = 1359;
+        break;
+      case 1408:
+        ret = 1360;
+        break;
+      case 1409:
+        ret = 1361;
+        break;
+      case 1410:
+        ret = 1362;
+        break;
+      case 1411:
+        ret = 1363;
+        break;
+      case 1412:
+        ret = 1364;
+        break;
+      case 1413:
+        ret = 1365;
+        break;
+      case 1414:
+        ret = 1366;
+        break;
+      case 7681:
+        ret = 7680;
+        break;
+      case 7683:
+        ret = 7682;
+        break;
+      case 7685:
+        ret = 7684;
+        break;
+      case 7687:
+        ret = 7686;
+        break;
+      case 7689:
+        ret = 7688;
+        break;
+      case 7691:
+        ret = 7690;
+        break;
+      case 7693:
+        ret = 7692;
+        break;
+      case 7695:
+        ret = 7694;
+        break;
+      case 7697:
+        ret = 7696;
+        break;
+      case 7699:
+        ret = 7698;
+        break;
+      case 7701:
+        ret = 7700;
+        break;
+      case 7703:
+        ret = 7702;
+        break;
+      case 7705:
+        ret = 7704;
+        break;
+      case 7707:
+        ret = 7706;
+        break;
+      case 7709:
+        ret = 7708;
+        break;
+      case 7711:
+        ret = 7710;
+        break;
+      case 7713:
+        ret = 7712;
+        break;
+      case 7715:
+        ret = 7714;
+        break;
+      case 7717:
+        ret = 7716;
+        break;
+      case 7719:
+        ret = 7718;
+        break;
+      case 7721:
+        ret = 7720;
+        break;
+      case 7723:
+        ret = 7722;
+        break;
+      case 7725:
+        ret = 7724;
+        break;
+      case 7727:
+        ret = 7726;
+        break;
+      case 7729:
+        ret = 7728;
+        break;
+      case 7731:
+        ret = 7730;
+        break;
+      case 7733:
+        ret = 7732;
+        break;
+      case 7735:
+        ret = 7734;
+        break;
+      case 7737:
+        ret = 7736;
+        break;
+      case 7739:
+        ret = 7738;
+        break;
+      case 7741:
+        ret = 7740;
+        break;
+      case 7743:
+        ret = 7742;
+        break;
+      case 7745:
+        ret = 7744;
+        break;
+      case 7747:
+        ret = 7746;
+        break;
+      case 7749:
+        ret = 7748;
+        break;
+      case 7751:
+        ret = 7750;
+        break;
+      case 7753:
+        ret = 7752;
+        break;
+      case 7755:
+        ret = 7754;
+        break;
+      case 7757:
+        ret = 7756;
+        break;
+      case 7759:
+        ret = 7758;
+        break;
+      case 7761:
+        ret = 7760;
+        break;
+      case 7763:
+        ret = 7762;
+        break;
+      case 7765:
+        ret = 7764;
+        break;
+      case 7767:
+        ret = 7766;
+        break;
+      case 7769:
+        ret = 7768;
+        break;
+      case 7771:
+        ret = 7770;
+        break;
+      case 7773:
+        ret = 7772;
+        break;
+      case 7775:
+        ret = 7774;
+        break;
+      case 7777:
+        ret = 7776;
+        break;
+      case 7779:
+        ret = 7778;
+        break;
+      case 7781:
+        ret = 7780;
+        break;
+      case 7783:
+        ret = 7782;
+        break;
+      case 7785:
+        ret = 7784;
+        break;
+      case 7787:
+        ret = 7786;
+        break;
+      case 7789:
+        ret = 7788;
+        break;
+      case 7791:
+        ret = 7790;
+        break;
+      case 7793:
+        ret = 7792;
+        break;
+      case 7795:
+        ret = 7794;
+        break;
+      case 7797:
+        ret = 7796;
+        break;
+      case 7799:
+        ret = 7798;
+        break;
+      case 7801:
+        ret = 7800;
+        break;
+      case 7803:
+        ret = 7802;
+        break;
+      case 7805:
+        ret = 7804;
+        break;
+      case 7807:
+        ret = 7806;
+        break;
+      case 7809:
+        ret = 7808;
+        break;
+      case 7811:
+        ret = 7810;
+        break;
+      case 7813:
+        ret = 7812;
+        break;
+      case 7815:
+        ret = 7814;
+        break;
+      case 7817:
+        ret = 7816;
+        break;
+      case 7819:
+        ret = 7818;
+        break;
+      case 7821:
+        ret = 7820;
+        break;
+      case 7823:
+        ret = 7822;
+        break;
+      case 7825:
+        ret = 7824;
+        break;
+      case 7827:
+        ret = 7826;
+        break;
+      case 7829:
+        ret = 7828;
+        break;
+      case 7841:
+        ret = 7840;
+        break;
+      case 7843:
+        ret = 7842;
+        break;
+      case 7845:
+        ret = 7844;
+        break;
+      case 7847:
+        ret = 7846;
+        break;
+      case 7849:
+        ret = 7848;
+        break;
+      case 7851:
+        ret = 7850;
+        break;
+      case 7853:
+        ret = 7852;
+        break;
+      case 7855:
+        ret = 7854;
+        break;
+      case 7857:
+        ret = 7856;
+        break;
+      case 7859:
+        ret = 7858;
+        break;
+      case 7861:
+        ret = 7860;
+        break;
+      case 7863:
+        ret = 7862;
+        break;
+      case 7865:
+        ret = 7864;
+        break;
+      case 7867:
+        ret = 7866;
+        break;
+      case 7869:
+        ret = 7868;
+        break;
+      case 7871:
+        ret = 7870;
+        break;
+      case 7873:
+        ret = 7872;
+        break;
+      case 7875:
+        ret = 7874;
+        break;
+      case 7877:
+        ret = 7876;
+        break;
+      case 7879:
+        ret = 7878;
+        break;
+      case 7881:
+        ret = 7880;
+        break;
+      case 7883:
+        ret = 7882;
+        break;
+      case 7885:
+        ret = 7884;
+        break;
+      case 7887:
+        ret = 7886;
+        break;
+      case 7889:
+        ret = 7888;
+        break;
+      case 7891:
+        ret = 7890;
+        break;
+      case 7893:
+        ret = 7892;
+        break;
+      case 7895:
+        ret = 7894;
+        break;
+      case 7897:
+        ret = 7896;
+        break;
+      case 7899:
+        ret = 7898;
+        break;
+      case 7901:
+        ret = 7900;
+        break;
+      case 7903:
+        ret = 7902;
+        break;
+      case 7905:
+        ret = 7904;
+        break;
+      case 7907:
+        ret = 7906;
+        break;
+      case 7909:
+        ret = 7908;
+        break;
+      case 7911:
+        ret = 7910;
+        break;
+      case 7913:
+        ret = 7912;
+        break;
+      case 7915:
+        ret = 7914;
+        break;
+      case 7917:
+        ret = 7916;
+        break;
+      case 7919:
+        ret = 7918;
+        break;
+      case 7921:
+        ret = 7920;
+        break;
+      case 7923:
+        ret = 7922;
+        break;
+      case 7925:
+        ret = 7924;
+        break;
+      case 7927:
+        ret = 7926;
+        break;
+      case 7929:
+        ret = 7928;
+        break;
+      case 7936:
+        ret = 7944;
+        break;
+      case 7937:
+        ret = 7945;
+        break;
+      case 7938:
+        ret = 7946;
+        break;
+      case 7939:
+        ret = 7947;
+        break;
+      case 7940:
+        ret = 7948;
+        break;
+      case 7941:
+        ret = 7949;
+        break;
+      case 7942:
+        ret = 7950;
+        break;
+      case 7943:
+        ret = 7951;
+        break;
+      case 7952:
+        ret = 7960;
+        break;
+      case 7953:
+        ret = 7961;
+        break;
+      case 7954:
+        ret = 7962;
+        break;
+      case 7955:
+        ret = 7963;
+        break;
+      case 7956:
+        ret = 7964;
+        break;
+      case 7957:
+        ret = 7965;
+        break;
+      case 7968:
+        ret = 7976;
+        break;
+      case 7969:
+        ret = 7977;
+        break;
+      case 7970:
+        ret = 7978;
+        break;
+      case 7971:
+        ret = 7979;
+        break;
+      case 7972:
+        ret = 7980;
+        break;
+      case 7973:
+        ret = 7981;
+        break;
+      case 7974:
+        ret = 7982;
+        break;
+      case 7975:
+        ret = 7983;
+        break;
+      case 7984:
+        ret = 7992;
+        break;
+      case 7985:
+        ret = 7993;
+        break;
+      case 7986:
+        ret = 7994;
+        break;
+      case 7987:
+        ret = 7995;
+        break;
+      case 7988:
+        ret = 7996;
+        break;
+      case 7989:
+        ret = 7997;
+        break;
+      case 7990:
+        ret = 7998;
+        break;
+      case 7991:
+        ret = 7999;
+        break;
+      case 8000:
+        ret = 8008;
+        break;
+      case 8001:
+        ret = 8009;
+        break;
+      case 8002:
+        ret = 8010;
+        break;
+      case 8003:
+        ret = 8011;
+        break;
+      case 8004:
+        ret = 8012;
+        break;
+      case 8005:
+        ret = 8013;
+        break;
+      case 8017:
+        ret = 8025;
+        break;
+      case 8019:
+        ret = 8027;
+        break;
+      case 8021:
+        ret = 8029;
+        break;
+      case 8023:
+        ret = 8031;
+        break;
+      case 8032:
+        ret = 8040;
+        break;
+      case 8033:
+        ret = 8041;
+        break;
+      case 8034:
+        ret = 8042;
+        break;
+      case 8035:
+        ret = 8043;
+        break;
+      case 8036:
+        ret = 8044;
+        break;
+      case 8037:
+        ret = 8045;
+        break;
+      case 8038:
+        ret = 8046;
+        break;
+      case 8039:
+        ret = 8047;
+        break;
+      case 8048:
+        ret = 8122;
+        break;
+      case 8049:
+        ret = 8123;
+        break;
+      case 8050:
+        ret = 8136;
+        break;
+      case 8051:
+        ret = 8137;
+        break;
+      case 8052:
+        ret = 8138;
+        break;
+      case 8053:
+        ret = 8139;
+        break;
+      case 8054:
+        ret = 8154;
+        break;
+      case 8055:
+        ret = 8155;
+        break;
+      case 8056:
+        ret = 8184;
+        break;
+      case 8057:
+        ret = 8185;
+        break;
+      case 8058:
+        ret = 8170;
+        break;
+      case 8059:
+        ret = 8171;
+        break;
+      case 8060:
+        ret = 8186;
+        break;
+      case 8061:
+        ret = 8187;
+        break;
+      case 8064:
+        ret = 8072;
+        break;
+      case 8065:
+        ret = 8073;
+        break;
+      case 8066:
+        ret = 8074;
+        break;
+      case 8067:
+        ret = 8075;
+        break;
+      case 8068:
+        ret = 8076;
+        break;
+      case 8069:
+        ret = 8077;
+        break;
+      case 8070:
+        ret = 8078;
+        break;
+      case 8071:
+        ret = 8079;
+        break;
+      case 8080:
+        ret = 8088;
+        break;
+      case 8081:
+        ret = 8089;
+        break;
+      case 8082:
+        ret = 8090;
+        break;
+      case 8083:
+        ret = 8091;
+        break;
+      case 8084:
+        ret = 8092;
+        break;
+      case 8085:
+        ret = 8093;
+        break;
+      case 8086:
+        ret = 8094;
+        break;
+      case 8087:
+        ret = 8095;
+        break;
+      case 8096:
+        ret = 8104;
+        break;
+      case 8097:
+        ret = 8105;
+        break;
+      case 8098:
+        ret = 8106;
+        break;
+      case 8099:
+        ret = 8107;
+        break;
+      case 8100:
+        ret = 8108;
+        break;
+      case 8101:
+        ret = 8109;
+        break;
+      case 8102:
+        ret = 8110;
+        break;
+      case 8103:
+        ret = 8111;
+        break;
+      case 8112:
+        ret = 8120;
+        break;
+      case 8113:
+        ret = 8121;
+        break;
+      case 8115:
+        ret = 8124;
+        break;
+      case 8131:
+        ret = 8140;
+        break;
+      case 8144:
+        ret = 8152;
+        break;
+      case 8145:
+        ret = 8153;
+        break;
+      case 8160:
+        ret = 8168;
+        break;
+      case 8161:
+        ret = 8169;
+        break;
+      case 8165:
+        ret = 8172;
+        break;
+      case 8179:
+        ret = 8188;
+        break;
+      case 8560:
+        ret = 8544;
+        break;
+      case 8561:
+        ret = 8545;
+        break;
+      case 8562:
+        ret = 8546;
+        break;
+      case 8563:
+        ret = 8547;
+        break;
+      case 8564:
+        ret = 8548;
+        break;
+      case 8565:
+        ret = 8549;
+        break;
+      case 8566:
+        ret = 8550;
+        break;
+      case 8567:
+        ret = 8551;
+        break;
+      case 8568:
+        ret = 8552;
+        break;
+      case 8569:
+        ret = 8553;
+        break;
+      case 8570:
+        ret = 8554;
+        break;
+      case 8571:
+        ret = 8555;
+        break;
+      case 8572:
+        ret = 8556;
+        break;
+      case 8573:
+        ret = 8557;
+        break;
+      case 8574:
+        ret = 8558;
+        break;
+      case 8575:
+        ret = 8559;
+        break;
+      case 9424:
+        ret = 9398;
+        break;
+      case 9425:
+        ret = 9399;
+        break;
+      case 9426:
+        ret = 9400;
+        break;
+      case 9427:
+        ret = 9401;
+        break;
+      case 9428:
+        ret = 9402;
+        break;
+      case 9429:
+        ret = 9403;
+        break;
+      case 9430:
+        ret = 9404;
+        break;
+      case 9431:
+        ret = 9405;
+        break;
+      case 9432:
+        ret = 9406;
+        break;
+      case 9433:
+        ret = 9407;
+        break;
+      case 9434:
+        ret = 9408;
+        break;
+      case 9435:
+        ret = 9409;
+        break;
+      case 9436:
+        ret = 9410;
+        break;
+      case 9437:
+        ret = 9411;
+        break;
+      case 9438:
+        ret = 9412;
+        break;
+      case 9439:
+        ret = 9413;
+        break;
+      case 9440:
+        ret = 9414;
+        break;
+      case 9441:
+        ret = 9415;
+        break;
+      case 9442:
+        ret = 9416;
+        break;
+      case 9443:
+        ret = 9417;
+        break;
+      case 9444:
+        ret = 9418;
+        break;
+      case 9445:
+        ret = 9419;
+        break;
+      case 9446:
+        ret = 9420;
+        break;
+      case 9447:
+        ret = 9421;
+        break;
+      case 9448:
+        ret = 9422;
+        break;
+      case 9449:
+        ret = 9423;
+        break;
+      case 65345:
+        ret = 65313;
+        break;
+      case 65346:
+        ret = 65314;
+        break;
+      case 65347:
+        ret = 65315;
+        break;
+      case 65348:
+        ret = 65316;
+        break;
+      case 65349:
+        ret = 65317;
+        break;
+      case 65350:
+        ret = 65318;
+        break;
+      case 65351:
+        ret = 65319;
+        break;
+      case 65352:
+        ret = 65320;
+        break;
+      case 65353:
+        ret = 65321;
+        break;
+      case 65354:
+        ret = 65322;
+        break;
+      case 65355:
+        ret = 65323;
+        break;
+      case 65356:
+        ret = 65324;
+        break;
+      case 65357:
+        ret = 65325;
+        break;
+      case 65358:
+        ret = 65326;
+        break;
+      case 65359:
+        ret = 65327;
+        break;
+      case 65360:
+        ret = 65328;
+        break;
+      case 65361:
+        ret = 65329;
+        break;
+      case 65362:
+        ret = 65330;
+        break;
+      case 65363:
+        ret = 65331;
+        break;
+      case 65364:
+        ret = 65332;
+        break;
+      case 65365:
+        ret = 65333;
+        break;
+      case 65366:
+        ret = 65334;
+        break;
+      case 65367:
+        ret = 65335;
+        break;
+      case 65368:
+        ret = 65336;
+        break;
+      case 65369:
+        ret = 65337;
+        break;
+      case 65370:
+        ret = 65338;
+        break;
+      }
+      return (char) ret;
+    }
+    return Character.toUpperCase(c);
+  }
+
+  /** Convert a character to lower case. */
+  public static char toLowerCase(char c)
+  {
+    if (java_1_0)
+    {
+      int ret = (int) c;
+      switch (c)
+      {
+      case 65:
+        ret = 97;
+        break;
+      case 66:
+        ret = 98;
+        break;
+      case 67:
+        ret = 99;
+        break;
+      case 68:
+        ret = 100;
+        break;
+      case 69:
+        ret = 101;
+        break;
+      case 70:
+        ret = 102;
+        break;
+      case 71:
+        ret = 103;
+        break;
+      case 72:
+        ret = 104;
+        break;
+      case 73:
+        ret = 105;
+        break;
+      case 74:
+        ret = 106;
+        break;
+      case 75:
+        ret = 107;
+        break;
+      case 76:
+        ret = 108;
+        break;
+      case 77:
+        ret = 109;
+        break;
+      case 78:
+        ret = 110;
+        break;
+      case 79:
+        ret = 111;
+        break;
+      case 80:
+        ret = 112;
+        break;
+      case 81:
+        ret = 113;
+        break;
+      case 82:
+        ret = 114;
+        break;
+      case 83:
+        ret = 115;
+        break;
+      case 84:
+        ret = 116;
+        break;
+      case 85:
+        ret = 117;
+        break;
+      case 86:
+        ret = 118;
+        break;
+      case 87:
+        ret = 119;
+        break;
+      case 88:
+        ret = 120;
+        break;
+      case 89:
+        ret = 121;
+        break;
+      case 90:
+        ret = 122;
+        break;
+      case 192:
+        ret = 224;
+        break;
+      case 193:
+        ret = 225;
+        break;
+      case 194:
+        ret = 226;
+        break;
+      case 195:
+        ret = 227;
+        break;
+      case 196:
+        ret = 228;
+        break;
+      case 197:
+        ret = 229;
+        break;
+      case 198:
+        ret = 230;
+        break;
+      case 199:
+        ret = 231;
+        break;
+      case 200:
+        ret = 232;
+        break;
+      case 201:
+        ret = 233;
+        break;
+      case 202:
+        ret = 234;
+        break;
+      case 203:
+        ret = 235;
+        break;
+      case 204:
+        ret = 236;
+        break;
+      case 205:
+        ret = 237;
+        break;
+      case 206:
+        ret = 238;
+        break;
+      case 207:
+        ret = 239;
+        break;
+      case 208:
+        ret = 240;
+        break;
+      case 209:
+        ret = 241;
+        break;
+      case 210:
+        ret = 242;
+        break;
+      case 211:
+        ret = 243;
+        break;
+      case 212:
+        ret = 244;
+        break;
+      case 213:
+        ret = 245;
+        break;
+      case 214:
+        ret = 246;
+        break;
+      case 216:
+        ret = 248;
+        break;
+      case 217:
+        ret = 249;
+        break;
+      case 218:
+        ret = 250;
+        break;
+      case 219:
+        ret = 251;
+        break;
+      case 220:
+        ret = 252;
+        break;
+      case 221:
+        ret = 253;
+        break;
+      case 222:
+        ret = 254;
+        break;
+      case 256:
+        ret = 257;
+        break;
+      case 258:
+        ret = 259;
+        break;
+      case 260:
+        ret = 261;
+        break;
+      case 262:
+        ret = 263;
+        break;
+      case 264:
+        ret = 265;
+        break;
+      case 266:
+        ret = 267;
+        break;
+      case 268:
+        ret = 269;
+        break;
+      case 270:
+        ret = 271;
+        break;
+      case 272:
+        ret = 273;
+        break;
+      case 274:
+        ret = 275;
+        break;
+      case 276:
+        ret = 277;
+        break;
+      case 278:
+        ret = 279;
+        break;
+      case 280:
+        ret = 281;
+        break;
+      case 282:
+        ret = 283;
+        break;
+      case 284:
+        ret = 285;
+        break;
+      case 286:
+        ret = 287;
+        break;
+      case 288:
+        ret = 289;
+        break;
+      case 290:
+        ret = 291;
+        break;
+      case 292:
+        ret = 293;
+        break;
+      case 294:
+        ret = 295;
+        break;
+      case 296:
+        ret = 297;
+        break;
+      case 298:
+        ret = 299;
+        break;
+      case 300:
+        ret = 301;
+        break;
+      case 302:
+        ret = 303;
+        break;
+      case 304:
+        ret = 105;
+        break;
+      case 306:
+        ret = 307;
+        break;
+      case 308:
+        ret = 309;
+        break;
+      case 310:
+        ret = 311;
+        break;
+      case 313:
+        ret = 314;
+        break;
+      case 315:
+        ret = 316;
+        break;
+      case 317:
+        ret = 318;
+        break;
+      case 319:
+        ret = 320;
+        break;
+      case 321:
+        ret = 322;
+        break;
+      case 323:
+        ret = 324;
+        break;
+      case 325:
+        ret = 326;
+        break;
+      case 327:
+        ret = 328;
+        break;
+      case 330:
+        ret = 331;
+        break;
+      case 332:
+        ret = 333;
+        break;
+      case 334:
+        ret = 335;
+        break;
+      case 336:
+        ret = 337;
+        break;
+      case 338:
+        ret = 339;
+        break;
+      case 340:
+        ret = 341;
+        break;
+      case 342:
+        ret = 343;
+        break;
+      case 344:
+        ret = 345;
+        break;
+      case 346:
+        ret = 347;
+        break;
+      case 348:
+        ret = 349;
+        break;
+      case 350:
+        ret = 351;
+        break;
+      case 352:
+        ret = 353;
+        break;
+      case 354:
+        ret = 355;
+        break;
+      case 356:
+        ret = 357;
+        break;
+      case 358:
+        ret = 359;
+        break;
+      case 360:
+        ret = 361;
+        break;
+      case 362:
+        ret = 363;
+        break;
+      case 364:
+        ret = 365;
+        break;
+      case 366:
+        ret = 367;
+        break;
+      case 368:
+        ret = 369;
+        break;
+      case 370:
+        ret = 371;
+        break;
+      case 372:
+        ret = 373;
+        break;
+      case 374:
+        ret = 375;
+        break;
+      case 376:
+        ret = 255;
+        break;
+      case 377:
+        ret = 378;
+        break;
+      case 379:
+        ret = 380;
+        break;
+      case 381:
+        ret = 382;
+        break;
+      case 385:
+        ret = 595;
+        break;
+      case 386:
+        ret = 387;
+        break;
+      case 388:
+        ret = 389;
+        break;
+      case 390:
+        ret = 596;
+        break;
+      case 391:
+        ret = 392;
+        break;
+      case 393:
+        ret = 598;
+        break;
+      case 394:
+        ret = 599;
+        break;
+      case 395:
+        ret = 396;
+        break;
+      case 398:
+        ret = 600;
+        break;
+      case 399:
+        ret = 601;
+        break;
+      case 400:
+        ret = 603;
+        break;
+      case 401:
+        ret = 402;
+        break;
+      case 403:
+        ret = 608;
+        break;
+      case 404:
+        ret = 611;
+        break;
+      case 406:
+        ret = 617;
+        break;
+      case 407:
+        ret = 616;
+        break;
+      case 408:
+        ret = 409;
+        break;
+      case 412:
+        ret = 623;
+        break;
+      case 413:
+        ret = 626;
+        break;
+      case 416:
+        ret = 417;
+        break;
+      case 418:
+        ret = 419;
+        break;
+      case 420:
+        ret = 421;
+        break;
+      case 423:
+        ret = 424;
+        break;
+      case 425:
+        ret = 643;
+        break;
+      case 428:
+        ret = 429;
+        break;
+      case 430:
+        ret = 648;
+        break;
+      case 431:
+        ret = 432;
+        break;
+      case 433:
+        ret = 650;
+        break;
+      case 434:
+        ret = 651;
+        break;
+      case 435:
+        ret = 436;
+        break;
+      case 437:
+        ret = 438;
+        break;
+      case 439:
+        ret = 658;
+        break;
+      case 440:
+        ret = 441;
+        break;
+      case 444:
+        ret = 445;
+        break;
+      case 452:
+        ret = 454;
+        break;
+      case 453:
+        ret = 454;
+        break;
+      case 455:
+        ret = 457;
+        break;
+      case 456:
+        ret = 457;
+        break;
+      case 458:
+        ret = 460;
+        break;
+      case 459:
+        ret = 460;
+        break;
+      case 461:
+        ret = 462;
+        break;
+      case 463:
+        ret = 464;
+        break;
+      case 465:
+        ret = 466;
+        break;
+      case 467:
+        ret = 468;
+        break;
+      case 469:
+        ret = 470;
+        break;
+      case 471:
+        ret = 472;
+        break;
+      case 473:
+        ret = 474;
+        break;
+      case 475:
+        ret = 476;
+        break;
+      case 478:
+        ret = 479;
+        break;
+      case 480:
+        ret = 481;
+        break;
+      case 482:
+        ret = 483;
+        break;
+      case 484:
+        ret = 485;
+        break;
+      case 486:
+        ret = 487;
+        break;
+      case 488:
+        ret = 489;
+        break;
+      case 490:
+        ret = 491;
+        break;
+      case 492:
+        ret = 493;
+        break;
+      case 494:
+        ret = 495;
+        break;
+      case 497:
+        ret = 499;
+        break;
+      case 498:
+        ret = 499;
+        break;
+      case 500:
+        ret = 501;
+        break;
+      case 506:
+        ret = 507;
+        break;
+      case 508:
+        ret = 509;
+        break;
+      case 510:
+        ret = 511;
+        break;
+      case 512:
+        ret = 513;
+        break;
+      case 514:
+        ret = 515;
+        break;
+      case 516:
+        ret = 517;
+        break;
+      case 518:
+        ret = 519;
+        break;
+      case 520:
+        ret = 521;
+        break;
+      case 522:
+        ret = 523;
+        break;
+      case 524:
+        ret = 525;
+        break;
+      case 526:
+        ret = 527;
+        break;
+      case 528:
+        ret = 529;
+        break;
+      case 530:
+        ret = 531;
+        break;
+      case 532:
+        ret = 533;
+        break;
+      case 534:
+        ret = 535;
+        break;
+      case 902:
+        ret = 940;
+        break;
+      case 904:
+        ret = 941;
+        break;
+      case 905:
+        ret = 942;
+        break;
+      case 906:
+        ret = 943;
+        break;
+      case 908:
+        ret = 972;
+        break;
+      case 910:
+        ret = 973;
+        break;
+      case 911:
+        ret = 974;
+        break;
+      case 913:
+        ret = 945;
+        break;
+      case 914:
+        ret = 946;
+        break;
+      case 915:
+        ret = 947;
+        break;
+      case 916:
+        ret = 948;
+        break;
+      case 917:
+        ret = 949;
+        break;
+      case 918:
+        ret = 950;
+        break;
+      case 919:
+        ret = 951;
+        break;
+      case 920:
+        ret = 952;
+        break;
+      case 921:
+        ret = 953;
+        break;
+      case 922:
+        ret = 954;
+        break;
+      case 923:
+        ret = 955;
+        break;
+      case 924:
+        ret = 956;
+        break;
+      case 925:
+        ret = 957;
+        break;
+      case 926:
+        ret = 958;
+        break;
+      case 927:
+        ret = 959;
+        break;
+      case 928:
+        ret = 960;
+        break;
+      case 929:
+        ret = 961;
+        break;
+      case 931:
+        ret = 963;
+        break;
+      case 932:
+        ret = 964;
+        break;
+      case 933:
+        ret = 965;
+        break;
+      case 934:
+        ret = 966;
+        break;
+      case 935:
+        ret = 967;
+        break;
+      case 936:
+        ret = 968;
+        break;
+      case 937:
+        ret = 969;
+        break;
+      case 938:
+        ret = 970;
+        break;
+      case 939:
+        ret = 971;
+        break;
+      case 994:
+        ret = 995;
+        break;
+      case 996:
+        ret = 997;
+        break;
+      case 998:
+        ret = 999;
+        break;
+      case 1000:
+        ret = 1001;
+        break;
+      case 1002:
+        ret = 1003;
+        break;
+      case 1004:
+        ret = 1005;
+        break;
+      case 1006:
+        ret = 1007;
+        break;
+      case 1025:
+        ret = 1105;
+        break;
+      case 1026:
+        ret = 1106;
+        break;
+      case 1027:
+        ret = 1107;
+        break;
+      case 1028:
+        ret = 1108;
+        break;
+      case 1029:
+        ret = 1109;
+        break;
+      case 1030:
+        ret = 1110;
+        break;
+      case 1031:
+        ret = 1111;
+        break;
+      case 1032:
+        ret = 1112;
+        break;
+      case 1033:
+        ret = 1113;
+        break;
+      case 1034:
+        ret = 1114;
+        break;
+      case 1035:
+        ret = 1115;
+        break;
+      case 1036:
+        ret = 1116;
+        break;
+      case 1038:
+        ret = 1118;
+        break;
+      case 1039:
+        ret = 1119;
+        break;
+      case 1040:
+        ret = 1072;
+        break;
+      case 1041:
+        ret = 1073;
+        break;
+      case 1042:
+        ret = 1074;
+        break;
+      case 1043:
+        ret = 1075;
+        break;
+      case 1044:
+        ret = 1076;
+        break;
+      case 1045:
+        ret = 1077;
+        break;
+      case 1046:
+        ret = 1078;
+        break;
+      case 1047:
+        ret = 1079;
+        break;
+      case 1048:
+        ret = 1080;
+        break;
+      case 1049:
+        ret = 1081;
+        break;
+      case 1050:
+        ret = 1082;
+        break;
+      case 1051:
+        ret = 1083;
+        break;
+      case 1052:
+        ret = 1084;
+        break;
+      case 1053:
+        ret = 1085;
+        break;
+      case 1054:
+        ret = 1086;
+        break;
+      case 1055:
+        ret = 1087;
+        break;
+      case 1056:
+        ret = 1088;
+        break;
+      case 1057:
+        ret = 1089;
+        break;
+      case 1058:
+        ret = 1090;
+        break;
+      case 1059:
+        ret = 1091;
+        break;
+      case 1060:
+        ret = 1092;
+        break;
+      case 1061:
+        ret = 1093;
+        break;
+      case 1062:
+        ret = 1094;
+        break;
+      case 1063:
+        ret = 1095;
+        break;
+      case 1064:
+        ret = 1096;
+        break;
+      case 1065:
+        ret = 1097;
+        break;
+      case 1066:
+        ret = 1098;
+        break;
+      case 1067:
+        ret = 1099;
+        break;
+      case 1068:
+        ret = 1100;
+        break;
+      case 1069:
+        ret = 1101;
+        break;
+      case 1070:
+        ret = 1102;
+        break;
+      case 1071:
+        ret = 1103;
+        break;
+      case 1120:
+        ret = 1121;
+        break;
+      case 1122:
+        ret = 1123;
+        break;
+      case 1124:
+        ret = 1125;
+        break;
+      case 1126:
+        ret = 1127;
+        break;
+      case 1128:
+        ret = 1129;
+        break;
+      case 1130:
+        ret = 1131;
+        break;
+      case 1132:
+        ret = 1133;
+        break;
+      case 1134:
+        ret = 1135;
+        break;
+      case 1136:
+        ret = 1137;
+        break;
+      case 1138:
+        ret = 1139;
+        break;
+      case 1140:
+        ret = 1141;
+        break;
+      case 1142:
+        ret = 1143;
+        break;
+      case 1144:
+        ret = 1145;
+        break;
+      case 1146:
+        ret = 1147;
+        break;
+      case 1148:
+        ret = 1149;
+        break;
+      case 1150:
+        ret = 1151;
+        break;
+      case 1152:
+        ret = 1153;
+        break;
+      case 1168:
+        ret = 1169;
+        break;
+      case 1170:
+        ret = 1171;
+        break;
+      case 1172:
+        ret = 1173;
+        break;
+      case 1174:
+        ret = 1175;
+        break;
+      case 1176:
+        ret = 1177;
+        break;
+      case 1178:
+        ret = 1179;
+        break;
+      case 1180:
+        ret = 1181;
+        break;
+      case 1182:
+        ret = 1183;
+        break;
+      case 1184:
+        ret = 1185;
+        break;
+      case 1186:
+        ret = 1187;
+        break;
+      case 1188:
+        ret = 1189;
+        break;
+      case 1190:
+        ret = 1191;
+        break;
+      case 1192:
+        ret = 1193;
+        break;
+      case 1194:
+        ret = 1195;
+        break;
+      case 1196:
+        ret = 1197;
+        break;
+      case 1198:
+        ret = 1199;
+        break;
+      case 1200:
+        ret = 1201;
+        break;
+      case 1202:
+        ret = 1203;
+        break;
+      case 1204:
+        ret = 1205;
+        break;
+      case 1206:
+        ret = 1207;
+        break;
+      case 1208:
+        ret = 1209;
+        break;
+      case 1210:
+        ret = 1211;
+        break;
+      case 1212:
+        ret = 1213;
+        break;
+      case 1214:
+        ret = 1215;
+        break;
+      case 1217:
+        ret = 1218;
+        break;
+      case 1219:
+        ret = 1220;
+        break;
+      case 1223:
+        ret = 1224;
+        break;
+      case 1227:
+        ret = 1228;
+        break;
+      case 1232:
+        ret = 1233;
+        break;
+      case 1234:
+        ret = 1235;
+        break;
+      case 1236:
+        ret = 1237;
+        break;
+      case 1238:
+        ret = 1239;
+        break;
+      case 1240:
+        ret = 1241;
+        break;
+      case 1242:
+        ret = 1243;
+        break;
+      case 1244:
+        ret = 1245;
+        break;
+      case 1246:
+        ret = 1247;
+        break;
+      case 1248:
+        ret = 1249;
+        break;
+      case 1250:
+        ret = 1251;
+        break;
+      case 1252:
+        ret = 1253;
+        break;
+      case 1254:
+        ret = 1255;
+        break;
+      case 1256:
+        ret = 1257;
+        break;
+      case 1258:
+        ret = 1259;
+        break;
+      case 1262:
+        ret = 1263;
+        break;
+      case 1264:
+        ret = 1265;
+        break;
+      case 1266:
+        ret = 1267;
+        break;
+      case 1268:
+        ret = 1269;
+        break;
+      case 1272:
+        ret = 1273;
+        break;
+      case 1329:
+        ret = 1377;
+        break;
+      case 1330:
+        ret = 1378;
+        break;
+      case 1331:
+        ret = 1379;
+        break;
+      case 1332:
+        ret = 1380;
+        break;
+      case 1333:
+        ret = 1381;
+        break;
+      case 1334:
+        ret = 1382;
+        break;
+      case 1335:
+        ret = 1383;
+        break;
+      case 1336:
+        ret = 1384;
+        break;
+      case 1337:
+        ret = 1385;
+        break;
+      case 1338:
+        ret = 1386;
+        break;
+      case 1339:
+        ret = 1387;
+        break;
+      case 1340:
+        ret = 1388;
+        break;
+      case 1341:
+        ret = 1389;
+        break;
+      case 1342:
+        ret = 1390;
+        break;
+      case 1343:
+        ret = 1391;
+        break;
+      case 1344:
+        ret = 1392;
+        break;
+      case 1345:
+        ret = 1393;
+        break;
+      case 1346:
+        ret = 1394;
+        break;
+      case 1347:
+        ret = 1395;
+        break;
+      case 1348:
+        ret = 1396;
+        break;
+      case 1349:
+        ret = 1397;
+        break;
+      case 1350:
+        ret = 1398;
+        break;
+      case 1351:
+        ret = 1399;
+        break;
+      case 1352:
+        ret = 1400;
+        break;
+      case 1353:
+        ret = 1401;
+        break;
+      case 1354:
+        ret = 1402;
+        break;
+      case 1355:
+        ret = 1403;
+        break;
+      case 1356:
+        ret = 1404;
+        break;
+      case 1357:
+        ret = 1405;
+        break;
+      case 1358:
+        ret = 1406;
+        break;
+      case 1359:
+        ret = 1407;
+        break;
+      case 1360:
+        ret = 1408;
+        break;
+      case 1361:
+        ret = 1409;
+        break;
+      case 1362:
+        ret = 1410;
+        break;
+      case 1363:
+        ret = 1411;
+        break;
+      case 1364:
+        ret = 1412;
+        break;
+      case 1365:
+        ret = 1413;
+        break;
+      case 1366:
+        ret = 1414;
+        break;
+      case 4256:
+        ret = 4304;
+        break;
+      case 4257:
+        ret = 4305;
+        break;
+      case 4258:
+        ret = 4306;
+        break;
+      case 4259:
+        ret = 4307;
+        break;
+      case 4260:
+        ret = 4308;
+        break;
+      case 4261:
+        ret = 4309;
+        break;
+      case 4262:
+        ret = 4310;
+        break;
+      case 4263:
+        ret = 4311;
+        break;
+      case 4264:
+        ret = 4312;
+        break;
+      case 4265:
+        ret = 4313;
+        break;
+      case 4266:
+        ret = 4314;
+        break;
+      case 4267:
+        ret = 4315;
+        break;
+      case 4268:
+        ret = 4316;
+        break;
+      case 4269:
+        ret = 4317;
+        break;
+      case 4270:
+        ret = 4318;
+        break;
+      case 4271:
+        ret = 4319;
+        break;
+      case 4272:
+        ret = 4320;
+        break;
+      case 4273:
+        ret = 4321;
+        break;
+      case 4274:
+        ret = 4322;
+        break;
+      case 4275:
+        ret = 4323;
+        break;
+      case 4276:
+        ret = 4324;
+        break;
+      case 4277:
+        ret = 4325;
+        break;
+      case 4278:
+        ret = 4326;
+        break;
+      case 4279:
+        ret = 4327;
+        break;
+      case 4280:
+        ret = 4328;
+        break;
+      case 4281:
+        ret = 4329;
+        break;
+      case 4282:
+        ret = 4330;
+        break;
+      case 4283:
+        ret = 4331;
+        break;
+      case 4284:
+        ret = 4332;
+        break;
+      case 4285:
+        ret = 4333;
+        break;
+      case 4286:
+        ret = 4334;
+        break;
+      case 4287:
+        ret = 4335;
+        break;
+      case 4288:
+        ret = 4336;
+        break;
+      case 4289:
+        ret = 4337;
+        break;
+      case 4290:
+        ret = 4338;
+        break;
+      case 4291:
+        ret = 4339;
+        break;
+      case 4292:
+        ret = 4340;
+        break;
+      case 4293:
+        ret = 4341;
+        break;
+      case 7680:
+        ret = 7681;
+        break;
+      case 7682:
+        ret = 7683;
+        break;
+      case 7684:
+        ret = 7685;
+        break;
+      case 7686:
+        ret = 7687;
+        break;
+      case 7688:
+        ret = 7689;
+        break;
+      case 7690:
+        ret = 7691;
+        break;
+      case 7692:
+        ret = 7693;
+        break;
+      case 7694:
+        ret = 7695;
+        break;
+      case 7696:
+        ret = 7697;
+        break;
+      case 7698:
+        ret = 7699;
+        break;
+      case 7700:
+        ret = 7701;
+        break;
+      case 7702:
+        ret = 7703;
+        break;
+      case 7704:
+        ret = 7705;
+        break;
+      case 7706:
+        ret = 7707;
+        break;
+      case 7708:
+        ret = 7709;
+        break;
+      case 7710:
+        ret = 7711;
+        break;
+      case 7712:
+        ret = 7713;
+        break;
+      case 7714:
+        ret = 7715;
+        break;
+      case 7716:
+        ret = 7717;
+        break;
+      case 7718:
+        ret = 7719;
+        break;
+      case 7720:
+        ret = 7721;
+        break;
+      case 7722:
+        ret = 7723;
+        break;
+      case 7724:
+        ret = 7725;
+        break;
+      case 7726:
+        ret = 7727;
+        break;
+      case 7728:
+        ret = 7729;
+        break;
+      case 7730:
+        ret = 7731;
+        break;
+      case 7732:
+        ret = 7733;
+        break;
+      case 7734:
+        ret = 7735;
+        break;
+      case 7736:
+        ret = 7737;
+        break;
+      case 7738:
+        ret = 7739;
+        break;
+      case 7740:
+        ret = 7741;
+        break;
+      case 7742:
+        ret = 7743;
+        break;
+      case 7744:
+        ret = 7745;
+        break;
+      case 7746:
+        ret = 7747;
+        break;
+      case 7748:
+        ret = 7749;
+        break;
+      case 7750:
+        ret = 7751;
+        break;
+      case 7752:
+        ret = 7753;
+        break;
+      case 7754:
+        ret = 7755;
+        break;
+      case 7756:
+        ret = 7757;
+        break;
+      case 7758:
+        ret = 7759;
+        break;
+      case 7760:
+        ret = 7761;
+        break;
+      case 7762:
+        ret = 7763;
+        break;
+      case 7764:
+        ret = 7765;
+        break;
+      case 7766:
+        ret = 7767;
+        break;
+      case 7768:
+        ret = 7769;
+        break;
+      case 7770:
+        ret = 7771;
+        break;
+      case 7772:
+        ret = 7773;
+        break;
+      case 7774:
+        ret = 7775;
+        break;
+      case 7776:
+        ret = 7777;
+        break;
+      case 7778:
+        ret = 7779;
+        break;
+      case 7780:
+        ret = 7781;
+        break;
+      case 7782:
+        ret = 7783;
+        break;
+      case 7784:
+        ret = 7785;
+        break;
+      case 7786:
+        ret = 7787;
+        break;
+      case 7788:
+        ret = 7789;
+        break;
+      case 7790:
+        ret = 7791;
+        break;
+      case 7792:
+        ret = 7793;
+        break;
+      case 7794:
+        ret = 7795;
+        break;
+      case 7796:
+        ret = 7797;
+        break;
+      case 7798:
+        ret = 7799;
+        break;
+      case 7800:
+        ret = 7801;
+        break;
+      case 7802:
+        ret = 7803;
+        break;
+      case 7804:
+        ret = 7805;
+        break;
+      case 7806:
+        ret = 7807;
+        break;
+      case 7808:
+        ret = 7809;
+        break;
+      case 7810:
+        ret = 7811;
+        break;
+      case 7812:
+        ret = 7813;
+        break;
+      case 7814:
+        ret = 7815;
+        break;
+      case 7816:
+        ret = 7817;
+        break;
+      case 7818:
+        ret = 7819;
+        break;
+      case 7820:
+        ret = 7821;
+        break;
+      case 7822:
+        ret = 7823;
+        break;
+      case 7824:
+        ret = 7825;
+        break;
+      case 7826:
+        ret = 7827;
+        break;
+      case 7828:
+        ret = 7829;
+        break;
+      case 7840:
+        ret = 7841;
+        break;
+      case 7842:
+        ret = 7843;
+        break;
+      case 7844:
+        ret = 7845;
+        break;
+      case 7846:
+        ret = 7847;
+        break;
+      case 7848:
+        ret = 7849;
+        break;
+      case 7850:
+        ret = 7851;
+        break;
+      case 7852:
+        ret = 7853;
+        break;
+      case 7854:
+        ret = 7855;
+        break;
+      case 7856:
+        ret = 7857;
+        break;
+      case 7858:
+        ret = 7859;
+        break;
+      case 7860:
+        ret = 7861;
+        break;
+      case 7862:
+        ret = 7863;
+        break;
+      case 7864:
+        ret = 7865;
+        break;
+      case 7866:
+        ret = 7867;
+        break;
+      case 7868:
+        ret = 7869;
+        break;
+      case 7870:
+        ret = 7871;
+        break;
+      case 7872:
+        ret = 7873;
+        break;
+      case 7874:
+        ret = 7875;
+        break;
+      case 7876:
+        ret = 7877;
+        break;
+      case 7878:
+        ret = 7879;
+        break;
+      case 7880:
+        ret = 7881;
+        break;
+      case 7882:
+        ret = 7883;
+        break;
+      case 7884:
+        ret = 7885;
+        break;
+      case 7886:
+        ret = 7887;
+        break;
+      case 7888:
+        ret = 7889;
+        break;
+      case 7890:
+        ret = 7891;
+        break;
+      case 7892:
+        ret = 7893;
+        break;
+      case 7894:
+        ret = 7895;
+        break;
+      case 7896:
+        ret = 7897;
+        break;
+      case 7898:
+        ret = 7899;
+        break;
+      case 7900:
+        ret = 7901;
+        break;
+      case 7902:
+        ret = 7903;
+        break;
+      case 7904:
+        ret = 7905;
+        break;
+      case 7906:
+        ret = 7907;
+        break;
+      case 7908:
+        ret = 7909;
+        break;
+      case 7910:
+        ret = 7911;
+        break;
+      case 7912:
+        ret = 7913;
+        break;
+      case 7914:
+        ret = 7915;
+        break;
+      case 7916:
+        ret = 7917;
+        break;
+      case 7918:
+        ret = 7919;
+        break;
+      case 7920:
+        ret = 7921;
+        break;
+      case 7922:
+        ret = 7923;
+        break;
+      case 7924:
+        ret = 7925;
+        break;
+      case 7926:
+        ret = 7927;
+        break;
+      case 7928:
+        ret = 7929;
+        break;
+      case 7944:
+        ret = 7936;
+        break;
+      case 7945:
+        ret = 7937;
+        break;
+      case 7946:
+        ret = 7938;
+        break;
+      case 7947:
+        ret = 7939;
+        break;
+      case 7948:
+        ret = 7940;
+        break;
+      case 7949:
+        ret = 7941;
+        break;
+      case 7950:
+        ret = 7942;
+        break;
+      case 7951:
+        ret = 7943;
+        break;
+      case 7960:
+        ret = 7952;
+        break;
+      case 7961:
+        ret = 7953;
+        break;
+      case 7962:
+        ret = 7954;
+        break;
+      case 7963:
+        ret = 7955;
+        break;
+      case 7964:
+        ret = 7956;
+        break;
+      case 7965:
+        ret = 7957;
+        break;
+      case 7976:
+        ret = 7968;
+        break;
+      case 7977:
+        ret = 7969;
+        break;
+      case 7978:
+        ret = 7970;
+        break;
+      case 7979:
+        ret = 7971;
+        break;
+      case 7980:
+        ret = 7972;
+        break;
+      case 7981:
+        ret = 7973;
+        break;
+      case 7982:
+        ret = 7974;
+        break;
+      case 7983:
+        ret = 7975;
+        break;
+      case 7992:
+        ret = 7984;
+        break;
+      case 7993:
+        ret = 7985;
+        break;
+      case 7994:
+        ret = 7986;
+        break;
+      case 7995:
+        ret = 7987;
+        break;
+      case 7996:
+        ret = 7988;
+        break;
+      case 7997:
+        ret = 7989;
+        break;
+      case 7998:
+        ret = 7990;
+        break;
+      case 7999:
+        ret = 7991;
+        break;
+      case 8008:
+        ret = 8000;
+        break;
+      case 8009:
+        ret = 8001;
+        break;
+      case 8010:
+        ret = 8002;
+        break;
+      case 8011:
+        ret = 8003;
+        break;
+      case 8012:
+        ret = 8004;
+        break;
+      case 8013:
+        ret = 8005;
+        break;
+      case 8025:
+        ret = 8017;
+        break;
+      case 8027:
+        ret = 8019;
+        break;
+      case 8029:
+        ret = 8021;
+        break;
+      case 8031:
+        ret = 8023;
+        break;
+      case 8040:
+        ret = 8032;
+        break;
+      case 8041:
+        ret = 8033;
+        break;
+      case 8042:
+        ret = 8034;
+        break;
+      case 8043:
+        ret = 8035;
+        break;
+      case 8044:
+        ret = 8036;
+        break;
+      case 8045:
+        ret = 8037;
+        break;
+      case 8046:
+        ret = 8038;
+        break;
+      case 8047:
+        ret = 8039;
+        break;
+      case 8072:
+        ret = 8064;
+        break;
+      case 8073:
+        ret = 8065;
+        break;
+      case 8074:
+        ret = 8066;
+        break;
+      case 8075:
+        ret = 8067;
+        break;
+      case 8076:
+        ret = 8068;
+        break;
+      case 8077:
+        ret = 8069;
+        break;
+      case 8078:
+        ret = 8070;
+        break;
+      case 8079:
+        ret = 8071;
+        break;
+      case 8088:
+        ret = 8080;
+        break;
+      case 8089:
+        ret = 8081;
+        break;
+      case 8090:
+        ret = 8082;
+        break;
+      case 8091:
+        ret = 8083;
+        break;
+      case 8092:
+        ret = 8084;
+        break;
+      case 8093:
+        ret = 8085;
+        break;
+      case 8094:
+        ret = 8086;
+        break;
+      case 8095:
+        ret = 8087;
+        break;
+      case 8104:
+        ret = 8096;
+        break;
+      case 8105:
+        ret = 8097;
+        break;
+      case 8106:
+        ret = 8098;
+        break;
+      case 8107:
+        ret = 8099;
+        break;
+      case 8108:
+        ret = 8100;
+        break;
+      case 8109:
+        ret = 8101;
+        break;
+      case 8110:
+        ret = 8102;
+        break;
+      case 8111:
+        ret = 8103;
+        break;
+      case 8120:
+        ret = 8112;
+        break;
+      case 8121:
+        ret = 8113;
+        break;
+      case 8122:
+        ret = 8048;
+        break;
+      case 8123:
+        ret = 8049;
+        break;
+      case 8124:
+        ret = 8115;
+        break;
+      case 8136:
+        ret = 8050;
+        break;
+      case 8137:
+        ret = 8051;
+        break;
+      case 8138:
+        ret = 8052;
+        break;
+      case 8139:
+        ret = 8053;
+        break;
+      case 8140:
+        ret = 8131;
+        break;
+      case 8152:
+        ret = 8144;
+        break;
+      case 8153:
+        ret = 8145;
+        break;
+      case 8154:
+        ret = 8054;
+        break;
+      case 8155:
+        ret = 8055;
+        break;
+      case 8168:
+        ret = 8160;
+        break;
+      case 8169:
+        ret = 8161;
+        break;
+      case 8170:
+        ret = 8058;
+        break;
+      case 8171:
+        ret = 8059;
+        break;
+      case 8172:
+        ret = 8165;
+        break;
+      case 8184:
+        ret = 8056;
+        break;
+      case 8185:
+        ret = 8057;
+        break;
+      case 8186:
+        ret = 8060;
+        break;
+      case 8187:
+        ret = 8061;
+        break;
+      case 8188:
+        ret = 8179;
+        break;
+      case 8544:
+        ret = 8560;
+        break;
+      case 8545:
+        ret = 8561;
+        break;
+      case 8546:
+        ret = 8562;
+        break;
+      case 8547:
+        ret = 8563;
+        break;
+      case 8548:
+        ret = 8564;
+        break;
+      case 8549:
+        ret = 8565;
+        break;
+      case 8550:
+        ret = 8566;
+        break;
+      case 8551:
+        ret = 8567;
+        break;
+      case 8552:
+        ret = 8568;
+        break;
+      case 8553:
+        ret = 8569;
+        break;
+      case 8554:
+        ret = 8570;
+        break;
+      case 8555:
+        ret = 8571;
+        break;
+      case 8556:
+        ret = 8572;
+        break;
+      case 8557:
+        ret = 8573;
+        break;
+      case 8558:
+        ret = 8574;
+        break;
+      case 8559:
+        ret = 8575;
+        break;
+      case 9398:
+        ret = 9424;
+        break;
+      case 9399:
+        ret = 9425;
+        break;
+      case 9400:
+        ret = 9426;
+        break;
+      case 9401:
+        ret = 9427;
+        break;
+      case 9402:
+        ret = 9428;
+        break;
+      case 9403:
+        ret = 9429;
+        break;
+      case 9404:
+        ret = 9430;
+        break;
+      case 9405:
+        ret = 9431;
+        break;
+      case 9406:
+        ret = 9432;
+        break;
+      case 9407:
+        ret = 9433;
+        break;
+      case 9408:
+        ret = 9434;
+        break;
+      case 9409:
+        ret = 9435;
+        break;
+      case 9410:
+        ret = 9436;
+        break;
+      case 9411:
+        ret = 9437;
+        break;
+      case 9412:
+        ret = 9438;
+        break;
+      case 9413:
+        ret = 9439;
+        break;
+      case 9414:
+        ret = 9440;
+        break;
+      case 9415:
+        ret = 9441;
+        break;
+      case 9416:
+        ret = 9442;
+        break;
+      case 9417:
+        ret = 9443;
+        break;
+      case 9418:
+        ret = 9444;
+        break;
+      case 9419:
+        ret = 9445;
+        break;
+      case 9420:
+        ret = 9446;
+        break;
+      case 9421:
+        ret = 9447;
+        break;
+      case 9422:
+        ret = 9448;
+        break;
+      case 9423:
+        ret = 9449;
+        break;
+      case 65313:
+        ret = 65345;
+        break;
+      case 65314:
+        ret = 65346;
+        break;
+      case 65315:
+        ret = 65347;
+        break;
+      case 65316:
+        ret = 65348;
+        break;
+      case 65317:
+        ret = 65349;
+        break;
+      case 65318:
+        ret = 65350;
+        break;
+      case 65319:
+        ret = 65351;
+        break;
+      case 65320:
+        ret = 65352;
+        break;
+      case 65321:
+        ret = 65353;
+        break;
+      case 65322:
+        ret = 65354;
+        break;
+      case 65323:
+        ret = 65355;
+        break;
+      case 65324:
+        ret = 65356;
+        break;
+      case 65325:
+        ret = 65357;
+        break;
+      case 65326:
+        ret = 65358;
+        break;
+      case 65327:
+        ret = 65359;
+        break;
+      case 65328:
+        ret = 65360;
+        break;
+      case 65329:
+        ret = 65361;
+        break;
+      case 65330:
+        ret = 65362;
+        break;
+      case 65331:
+        ret = 65363;
+        break;
+      case 65332:
+        ret = 65364;
+        break;
+      case 65333:
+        ret = 65365;
+        break;
+      case 65334:
+        ret = 65366;
+        break;
+      case 65335:
+        ret = 65367;
+        break;
+      case 65336:
+        ret = 65368;
+        break;
+      case 65337:
+        ret = 65369;
+        break;
+      case 65338:
+        ret = 65370;
+        break;
+      }
+      return (char) ret;
+    }
+    return Character.toLowerCase(c);
+  }
+
+  /** Convert a String to title case. */
+  public static String toTitleCase(String s)
+  {
+    StringBuffer sb = new StringBuffer();
+    for (int i = 0; i < s.length(); i++)
+    {
+      sb.append(CaseMgr.toTitleCase(s.charAt(i)));
+    }
+    return sb.toString();
+  }
+
+  /** Convert a String to upper case. */
+  public static String toUpperCase(String s)
+  {
+    StringBuffer sb = new StringBuffer();
+    for (int i = 0; i < s.length(); i++)
+    {
+      sb.append(CaseMgr.toUpperCase(s.charAt(i)));
+    }
+    return sb.toString();
+  }
+
+  /** Convert a String to lower case. */
+  public static String toLowerCase(String s)
+  {
+    StringBuffer sb = new StringBuffer();
+    for (int i = 0; i < s.length(); i++)
+    {
+      sb.append(CaseMgr.toLowerCase(s.charAt(i)));
+    }
+    return sb.toString();
+  }
+
+  /** Convert a character to title case. */
+  public static char toTitleCase(char c)
+  {
+    if (java_1_0)
+    {
+      int ret = (int) toUpperCase(c);
+      switch (c)
+      {
+      case 452:
+        ret = 453;
+        break;
+      case 453:
+        ret = 453;
+        break;
+      case 454:
+        ret = 453;
+        break;
+      case 455:
+        ret = 456;
+        break;
+      case 456:
+        ret = 456;
+        break;
+      case 457:
+        ret = 456;
+        break;
+      case 458:
+        ret = 459;
+        break;
+      case 459:
+        ret = 459;
+        break;
+      case 460:
+        ret = 459;
+        break;
+      case 497:
+        ret = 498;
+        break;
+      case 498:
+        ret = 498;
+        break;
+      case 499:
+        ret = 498;
+        break;
+      }
+      return (char) ret;
+    }
+    return Character.toTitleCase(c);
+  }
+
+  /**
+   * Duplicates the regionMatches routine of String -- but makes use of the
+   * definitions of upper, lower, and title case in this class when ignoreCase
+   * is set.
+   */
+  public static boolean regionMatches(StringLike s1, boolean ign, int i1,
+          StringLike s2, int i2, int i3)
+  {
+    int itot = i2 + i3;
+    if (itot > s2.length() || i1 + i3 > s1.length())
+    {
+      return false;
+    }
+    if (!ign)
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (s2.charAt(i) != s1.charAt(i1++))
+        {
+          return false;
+        }
+      }
+    }
+    else
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
+        {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Duplicates the regionMatches routine of String -- but makes use of the
+   * definitions of upper, lower, and title case in this class when ignoreCase
+   * is set.
+   */
+  public static boolean regionMatches(String s1, boolean ign, int i1,
+          StringLike s2, int i2, int i3)
+  {
+    int itot = i2 + i3;
+    if (itot > s2.length() || i1 + i3 > s1.length())
+    {
+      return false;
+    }
+    if (!ign)
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (s2.charAt(i) != s1.charAt(i1++))
+        {
+          return false;
+        }
+      }
+    }
+    else
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
+        {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Duplicates the regionMatches routine of String -- but makes use of the
+   * definitions of upper, lower, and title case in this class when ignoreCase
+   * is set.
+   */
+  public static boolean regionMatches(StringLike s1, boolean ign, int i1,
+          String s2, int i2, int i3)
+  {
+    int itot = i2 + i3;
+    if (itot > s2.length() || i1 + i3 > s1.length())
+    {
+      return false;
+    }
+    if (!ign)
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (s2.charAt(i) != s1.charAt(i1++))
+        {
+          return false;
+        }
+      }
+    }
+    else
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
+        {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Duplicates the regionMatches routine of String -- but makes use of the
+   * definitions of upper, lower, and title case in this class when ignoreCase
+   * is set.
+   */
+  public static boolean regionMatches(String s1, boolean ign, int i1,
+          String s2, int i2, int i3)
+  {
+    int itot = i2 + i3;
+    if (itot > s2.length() || i1 + i3 > s1.length())
+    {
+      return false;
+    }
+    if (!ign)
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (s2.charAt(i) != s1.charAt(i1++))
+        {
+          return false;
+        }
+      }
+    }
+    else
+    {
+      for (int i = i2; i < itot; i++)
+      {
+        if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
+        {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+}