Copyright test
[jalview.git] / src / com / stevesoft / pat / CaseMgr.java
1 /*******************************************************************************
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $(date) The Jalview Authors
4  *
5  * This file is part of Jalview.
6  *  
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *   
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  *******************************************************************************/
21 //
22 // This software is now distributed according to
23 // the Lesser Gnu Public License.  Please see
24 // http://www.gnu.org/copyleft/lesser.txt for
25 // the details.
26 //    -- Happy Computing!
27 //
28 package com.stevesoft.pat;
29
30 /**
31  * Encapsulates the Unicode definitions of Upper, Lower, and Title case as
32  * defined by <a href="http://www.unicode.org"> unicode.org</a>.
33  * <p>
34  * The performance of the methods found in String and Character is better, but
35  * these methods work both in java 1.0 and 1.1. If it is desirable, either to
36  * gain a slight performance increase or to accomodate application specific
37  * modifications to the definitions of upper, lower, and title case then it
38  * should be a straightforward task to substitute your own methods for these.
39  */
40 final public class CaseMgr
41 {
42   final static boolean java_1_0 = false;
43
44   /** Convert a character to upper case . */
45   public static char toUpperCase(char c)
46   {
47     if (java_1_0)
48     {
49       int ret = (int) c;
50       switch (c)
51       {
52       case 97:
53         ret = 65;
54         break;
55       case 98:
56         ret = 66;
57         break;
58       case 99:
59         ret = 67;
60         break;
61       case 100:
62         ret = 68;
63         break;
64       case 101:
65         ret = 69;
66         break;
67       case 102:
68         ret = 70;
69         break;
70       case 103:
71         ret = 71;
72         break;
73       case 104:
74         ret = 72;
75         break;
76       case 105:
77         ret = 73;
78         break;
79       case 106:
80         ret = 74;
81         break;
82       case 107:
83         ret = 75;
84         break;
85       case 108:
86         ret = 76;
87         break;
88       case 109:
89         ret = 77;
90         break;
91       case 110:
92         ret = 78;
93         break;
94       case 111:
95         ret = 79;
96         break;
97       case 112:
98         ret = 80;
99         break;
100       case 113:
101         ret = 81;
102         break;
103       case 114:
104         ret = 82;
105         break;
106       case 115:
107         ret = 83;
108         break;
109       case 116:
110         ret = 84;
111         break;
112       case 117:
113         ret = 85;
114         break;
115       case 118:
116         ret = 86;
117         break;
118       case 119:
119         ret = 87;
120         break;
121       case 120:
122         ret = 88;
123         break;
124       case 121:
125         ret = 89;
126         break;
127       case 122:
128         ret = 90;
129         break;
130       case 224:
131         ret = 192;
132         break;
133       case 225:
134         ret = 193;
135         break;
136       case 226:
137         ret = 194;
138         break;
139       case 227:
140         ret = 195;
141         break;
142       case 228:
143         ret = 196;
144         break;
145       case 229:
146         ret = 197;
147         break;
148       case 230:
149         ret = 198;
150         break;
151       case 231:
152         ret = 199;
153         break;
154       case 232:
155         ret = 200;
156         break;
157       case 233:
158         ret = 201;
159         break;
160       case 234:
161         ret = 202;
162         break;
163       case 235:
164         ret = 203;
165         break;
166       case 236:
167         ret = 204;
168         break;
169       case 237:
170         ret = 205;
171         break;
172       case 238:
173         ret = 206;
174         break;
175       case 239:
176         ret = 207;
177         break;
178       case 240:
179         ret = 208;
180         break;
181       case 241:
182         ret = 209;
183         break;
184       case 242:
185         ret = 210;
186         break;
187       case 243:
188         ret = 211;
189         break;
190       case 244:
191         ret = 212;
192         break;
193       case 245:
194         ret = 213;
195         break;
196       case 246:
197         ret = 214;
198         break;
199       case 248:
200         ret = 216;
201         break;
202       case 249:
203         ret = 217;
204         break;
205       case 250:
206         ret = 218;
207         break;
208       case 251:
209         ret = 219;
210         break;
211       case 252:
212         ret = 220;
213         break;
214       case 253:
215         ret = 221;
216         break;
217       case 254:
218         ret = 222;
219         break;
220       case 255:
221         ret = 376;
222         break;
223       case 257:
224         ret = 256;
225         break;
226       case 259:
227         ret = 258;
228         break;
229       case 261:
230         ret = 260;
231         break;
232       case 263:
233         ret = 262;
234         break;
235       case 265:
236         ret = 264;
237         break;
238       case 267:
239         ret = 266;
240         break;
241       case 269:
242         ret = 268;
243         break;
244       case 271:
245         ret = 270;
246         break;
247       case 273:
248         ret = 272;
249         break;
250       case 275:
251         ret = 274;
252         break;
253       case 277:
254         ret = 276;
255         break;
256       case 279:
257         ret = 278;
258         break;
259       case 281:
260         ret = 280;
261         break;
262       case 283:
263         ret = 282;
264         break;
265       case 285:
266         ret = 284;
267         break;
268       case 287:
269         ret = 286;
270         break;
271       case 289:
272         ret = 288;
273         break;
274       case 291:
275         ret = 290;
276         break;
277       case 293:
278         ret = 292;
279         break;
280       case 295:
281         ret = 294;
282         break;
283       case 297:
284         ret = 296;
285         break;
286       case 299:
287         ret = 298;
288         break;
289       case 301:
290         ret = 300;
291         break;
292       case 303:
293         ret = 302;
294         break;
295       case 305:
296         ret = 73;
297         break;
298       case 307:
299         ret = 306;
300         break;
301       case 309:
302         ret = 308;
303         break;
304       case 311:
305         ret = 310;
306         break;
307       case 314:
308         ret = 313;
309         break;
310       case 316:
311         ret = 315;
312         break;
313       case 318:
314         ret = 317;
315         break;
316       case 320:
317         ret = 319;
318         break;
319       case 322:
320         ret = 321;
321         break;
322       case 324:
323         ret = 323;
324         break;
325       case 326:
326         ret = 325;
327         break;
328       case 328:
329         ret = 327;
330         break;
331       case 331:
332         ret = 330;
333         break;
334       case 333:
335         ret = 332;
336         break;
337       case 335:
338         ret = 334;
339         break;
340       case 337:
341         ret = 336;
342         break;
343       case 339:
344         ret = 338;
345         break;
346       case 341:
347         ret = 340;
348         break;
349       case 343:
350         ret = 342;
351         break;
352       case 345:
353         ret = 344;
354         break;
355       case 347:
356         ret = 346;
357         break;
358       case 349:
359         ret = 348;
360         break;
361       case 351:
362         ret = 350;
363         break;
364       case 353:
365         ret = 352;
366         break;
367       case 355:
368         ret = 354;
369         break;
370       case 357:
371         ret = 356;
372         break;
373       case 359:
374         ret = 358;
375         break;
376       case 361:
377         ret = 360;
378         break;
379       case 363:
380         ret = 362;
381         break;
382       case 365:
383         ret = 364;
384         break;
385       case 367:
386         ret = 366;
387         break;
388       case 369:
389         ret = 368;
390         break;
391       case 371:
392         ret = 370;
393         break;
394       case 373:
395         ret = 372;
396         break;
397       case 375:
398         ret = 374;
399         break;
400       case 378:
401         ret = 377;
402         break;
403       case 380:
404         ret = 379;
405         break;
406       case 382:
407         ret = 381;
408         break;
409       case 383:
410         ret = 83;
411         break;
412       case 387:
413         ret = 386;
414         break;
415       case 389:
416         ret = 388;
417         break;
418       case 392:
419         ret = 391;
420         break;
421       case 396:
422         ret = 395;
423         break;
424       case 402:
425         ret = 401;
426         break;
427       case 409:
428         ret = 408;
429         break;
430       case 417:
431         ret = 416;
432         break;
433       case 419:
434         ret = 418;
435         break;
436       case 421:
437         ret = 420;
438         break;
439       case 424:
440         ret = 423;
441         break;
442       case 429:
443         ret = 428;
444         break;
445       case 432:
446         ret = 431;
447         break;
448       case 436:
449         ret = 435;
450         break;
451       case 438:
452         ret = 437;
453         break;
454       case 441:
455         ret = 440;
456         break;
457       case 445:
458         ret = 444;
459         break;
460       case 453:
461         ret = 452;
462         break;
463       case 454:
464         ret = 452;
465         break;
466       case 456:
467         ret = 455;
468         break;
469       case 457:
470         ret = 455;
471         break;
472       case 459:
473         ret = 458;
474         break;
475       case 460:
476         ret = 458;
477         break;
478       case 462:
479         ret = 461;
480         break;
481       case 464:
482         ret = 463;
483         break;
484       case 466:
485         ret = 465;
486         break;
487       case 468:
488         ret = 467;
489         break;
490       case 470:
491         ret = 469;
492         break;
493       case 472:
494         ret = 471;
495         break;
496       case 474:
497         ret = 473;
498         break;
499       case 476:
500         ret = 475;
501         break;
502       case 479:
503         ret = 478;
504         break;
505       case 481:
506         ret = 480;
507         break;
508       case 483:
509         ret = 482;
510         break;
511       case 485:
512         ret = 484;
513         break;
514       case 487:
515         ret = 486;
516         break;
517       case 489:
518         ret = 488;
519         break;
520       case 491:
521         ret = 490;
522         break;
523       case 493:
524         ret = 492;
525         break;
526       case 495:
527         ret = 494;
528         break;
529       case 498:
530         ret = 497;
531         break;
532       case 499:
533         ret = 497;
534         break;
535       case 501:
536         ret = 500;
537         break;
538       case 507:
539         ret = 506;
540         break;
541       case 509:
542         ret = 508;
543         break;
544       case 511:
545         ret = 510;
546         break;
547       case 513:
548         ret = 512;
549         break;
550       case 515:
551         ret = 514;
552         break;
553       case 517:
554         ret = 516;
555         break;
556       case 519:
557         ret = 518;
558         break;
559       case 521:
560         ret = 520;
561         break;
562       case 523:
563         ret = 522;
564         break;
565       case 525:
566         ret = 524;
567         break;
568       case 527:
569         ret = 526;
570         break;
571       case 529:
572         ret = 528;
573         break;
574       case 531:
575         ret = 530;
576         break;
577       case 533:
578         ret = 532;
579         break;
580       case 535:
581         ret = 534;
582         break;
583       case 595:
584         ret = 385;
585         break;
586       case 596:
587         ret = 390;
588         break;
589       case 598:
590         ret = 393;
591         break;
592       case 599:
593         ret = 394;
594         break;
595       case 600:
596         ret = 398;
597         break;
598       case 601:
599         ret = 399;
600         break;
601       case 603:
602         ret = 400;
603         break;
604       case 608:
605         ret = 403;
606         break;
607       case 611:
608         ret = 404;
609         break;
610       case 616:
611         ret = 407;
612         break;
613       case 617:
614         ret = 406;
615         break;
616       case 623:
617         ret = 412;
618         break;
619       case 626:
620         ret = 413;
621         break;
622       case 643:
623         ret = 425;
624         break;
625       case 648:
626         ret = 430;
627         break;
628       case 650:
629         ret = 433;
630         break;
631       case 651:
632         ret = 434;
633         break;
634       case 658:
635         ret = 439;
636         break;
637       case 940:
638         ret = 902;
639         break;
640       case 941:
641         ret = 904;
642         break;
643       case 942:
644         ret = 905;
645         break;
646       case 943:
647         ret = 906;
648         break;
649       case 945:
650         ret = 913;
651         break;
652       case 946:
653         ret = 914;
654         break;
655       case 947:
656         ret = 915;
657         break;
658       case 948:
659         ret = 916;
660         break;
661       case 949:
662         ret = 917;
663         break;
664       case 950:
665         ret = 918;
666         break;
667       case 951:
668         ret = 919;
669         break;
670       case 952:
671         ret = 920;
672         break;
673       case 953:
674         ret = 921;
675         break;
676       case 954:
677         ret = 922;
678         break;
679       case 955:
680         ret = 923;
681         break;
682       case 956:
683         ret = 924;
684         break;
685       case 957:
686         ret = 925;
687         break;
688       case 958:
689         ret = 926;
690         break;
691       case 959:
692         ret = 927;
693         break;
694       case 960:
695         ret = 928;
696         break;
697       case 961:
698         ret = 929;
699         break;
700       case 963:
701         ret = 931;
702         break;
703       case 964:
704         ret = 932;
705         break;
706       case 965:
707         ret = 933;
708         break;
709       case 966:
710         ret = 934;
711         break;
712       case 967:
713         ret = 935;
714         break;
715       case 968:
716         ret = 936;
717         break;
718       case 969:
719         ret = 937;
720         break;
721       case 970:
722         ret = 938;
723         break;
724       case 971:
725         ret = 939;
726         break;
727       case 972:
728         ret = 908;
729         break;
730       case 973:
731         ret = 910;
732         break;
733       case 974:
734         ret = 911;
735         break;
736       case 976:
737         ret = 914;
738         break;
739       case 977:
740         ret = 920;
741         break;
742       case 981:
743         ret = 934;
744         break;
745       case 982:
746         ret = 928;
747         break;
748       case 995:
749         ret = 994;
750         break;
751       case 997:
752         ret = 996;
753         break;
754       case 999:
755         ret = 998;
756         break;
757       case 1001:
758         ret = 1000;
759         break;
760       case 1003:
761         ret = 1002;
762         break;
763       case 1005:
764         ret = 1004;
765         break;
766       case 1007:
767         ret = 1006;
768         break;
769       case 1008:
770         ret = 922;
771         break;
772       case 1009:
773         ret = 929;
774         break;
775       case 1072:
776         ret = 1040;
777         break;
778       case 1073:
779         ret = 1041;
780         break;
781       case 1074:
782         ret = 1042;
783         break;
784       case 1075:
785         ret = 1043;
786         break;
787       case 1076:
788         ret = 1044;
789         break;
790       case 1077:
791         ret = 1045;
792         break;
793       case 1078:
794         ret = 1046;
795         break;
796       case 1079:
797         ret = 1047;
798         break;
799       case 1080:
800         ret = 1048;
801         break;
802       case 1081:
803         ret = 1049;
804         break;
805       case 1082:
806         ret = 1050;
807         break;
808       case 1083:
809         ret = 1051;
810         break;
811       case 1084:
812         ret = 1052;
813         break;
814       case 1085:
815         ret = 1053;
816         break;
817       case 1086:
818         ret = 1054;
819         break;
820       case 1087:
821         ret = 1055;
822         break;
823       case 1088:
824         ret = 1056;
825         break;
826       case 1089:
827         ret = 1057;
828         break;
829       case 1090:
830         ret = 1058;
831         break;
832       case 1091:
833         ret = 1059;
834         break;
835       case 1092:
836         ret = 1060;
837         break;
838       case 1093:
839         ret = 1061;
840         break;
841       case 1094:
842         ret = 1062;
843         break;
844       case 1095:
845         ret = 1063;
846         break;
847       case 1096:
848         ret = 1064;
849         break;
850       case 1097:
851         ret = 1065;
852         break;
853       case 1098:
854         ret = 1066;
855         break;
856       case 1099:
857         ret = 1067;
858         break;
859       case 1100:
860         ret = 1068;
861         break;
862       case 1101:
863         ret = 1069;
864         break;
865       case 1102:
866         ret = 1070;
867         break;
868       case 1103:
869         ret = 1071;
870         break;
871       case 1105:
872         ret = 1025;
873         break;
874       case 1106:
875         ret = 1026;
876         break;
877       case 1107:
878         ret = 1027;
879         break;
880       case 1108:
881         ret = 1028;
882         break;
883       case 1109:
884         ret = 1029;
885         break;
886       case 1110:
887         ret = 1030;
888         break;
889       case 1111:
890         ret = 1031;
891         break;
892       case 1112:
893         ret = 1032;
894         break;
895       case 1113:
896         ret = 1033;
897         break;
898       case 1114:
899         ret = 1034;
900         break;
901       case 1115:
902         ret = 1035;
903         break;
904       case 1116:
905         ret = 1036;
906         break;
907       case 1118:
908         ret = 1038;
909         break;
910       case 1119:
911         ret = 1039;
912         break;
913       case 1121:
914         ret = 1120;
915         break;
916       case 1123:
917         ret = 1122;
918         break;
919       case 1125:
920         ret = 1124;
921         break;
922       case 1127:
923         ret = 1126;
924         break;
925       case 1129:
926         ret = 1128;
927         break;
928       case 1131:
929         ret = 1130;
930         break;
931       case 1133:
932         ret = 1132;
933         break;
934       case 1135:
935         ret = 1134;
936         break;
937       case 1137:
938         ret = 1136;
939         break;
940       case 1139:
941         ret = 1138;
942         break;
943       case 1141:
944         ret = 1140;
945         break;
946       case 1143:
947         ret = 1142;
948         break;
949       case 1145:
950         ret = 1144;
951         break;
952       case 1147:
953         ret = 1146;
954         break;
955       case 1149:
956         ret = 1148;
957         break;
958       case 1151:
959         ret = 1150;
960         break;
961       case 1153:
962         ret = 1152;
963         break;
964       case 1169:
965         ret = 1168;
966         break;
967       case 1171:
968         ret = 1170;
969         break;
970       case 1173:
971         ret = 1172;
972         break;
973       case 1175:
974         ret = 1174;
975         break;
976       case 1177:
977         ret = 1176;
978         break;
979       case 1179:
980         ret = 1178;
981         break;
982       case 1181:
983         ret = 1180;
984         break;
985       case 1183:
986         ret = 1182;
987         break;
988       case 1185:
989         ret = 1184;
990         break;
991       case 1187:
992         ret = 1186;
993         break;
994       case 1189:
995         ret = 1188;
996         break;
997       case 1191:
998         ret = 1190;
999         break;
1000       case 1193:
1001         ret = 1192;
1002         break;
1003       case 1195:
1004         ret = 1194;
1005         break;
1006       case 1197:
1007         ret = 1196;
1008         break;
1009       case 1199:
1010         ret = 1198;
1011         break;
1012       case 1201:
1013         ret = 1200;
1014         break;
1015       case 1203:
1016         ret = 1202;
1017         break;
1018       case 1205:
1019         ret = 1204;
1020         break;
1021       case 1207:
1022         ret = 1206;
1023         break;
1024       case 1209:
1025         ret = 1208;
1026         break;
1027       case 1211:
1028         ret = 1210;
1029         break;
1030       case 1213:
1031         ret = 1212;
1032         break;
1033       case 1215:
1034         ret = 1214;
1035         break;
1036       case 1218:
1037         ret = 1217;
1038         break;
1039       case 1220:
1040         ret = 1219;
1041         break;
1042       case 1224:
1043         ret = 1223;
1044         break;
1045       case 1228:
1046         ret = 1227;
1047         break;
1048       case 1233:
1049         ret = 1232;
1050         break;
1051       case 1235:
1052         ret = 1234;
1053         break;
1054       case 1237:
1055         ret = 1236;
1056         break;
1057       case 1239:
1058         ret = 1238;
1059         break;
1060       case 1241:
1061         ret = 1240;
1062         break;
1063       case 1243:
1064         ret = 1242;
1065         break;
1066       case 1245:
1067         ret = 1244;
1068         break;
1069       case 1247:
1070         ret = 1246;
1071         break;
1072       case 1249:
1073         ret = 1248;
1074         break;
1075       case 1251:
1076         ret = 1250;
1077         break;
1078       case 1253:
1079         ret = 1252;
1080         break;
1081       case 1255:
1082         ret = 1254;
1083         break;
1084       case 1257:
1085         ret = 1256;
1086         break;
1087       case 1259:
1088         ret = 1258;
1089         break;
1090       case 1263:
1091         ret = 1262;
1092         break;
1093       case 1265:
1094         ret = 1264;
1095         break;
1096       case 1267:
1097         ret = 1266;
1098         break;
1099       case 1269:
1100         ret = 1268;
1101         break;
1102       case 1273:
1103         ret = 1272;
1104         break;
1105       case 1377:
1106         ret = 1329;
1107         break;
1108       case 1378:
1109         ret = 1330;
1110         break;
1111       case 1379:
1112         ret = 1331;
1113         break;
1114       case 1380:
1115         ret = 1332;
1116         break;
1117       case 1381:
1118         ret = 1333;
1119         break;
1120       case 1382:
1121         ret = 1334;
1122         break;
1123       case 1383:
1124         ret = 1335;
1125         break;
1126       case 1384:
1127         ret = 1336;
1128         break;
1129       case 1385:
1130         ret = 1337;
1131         break;
1132       case 1386:
1133         ret = 1338;
1134         break;
1135       case 1387:
1136         ret = 1339;
1137         break;
1138       case 1388:
1139         ret = 1340;
1140         break;
1141       case 1389:
1142         ret = 1341;
1143         break;
1144       case 1390:
1145         ret = 1342;
1146         break;
1147       case 1391:
1148         ret = 1343;
1149         break;
1150       case 1392:
1151         ret = 1344;
1152         break;
1153       case 1393:
1154         ret = 1345;
1155         break;
1156       case 1394:
1157         ret = 1346;
1158         break;
1159       case 1395:
1160         ret = 1347;
1161         break;
1162       case 1396:
1163         ret = 1348;
1164         break;
1165       case 1397:
1166         ret = 1349;
1167         break;
1168       case 1398:
1169         ret = 1350;
1170         break;
1171       case 1399:
1172         ret = 1351;
1173         break;
1174       case 1400:
1175         ret = 1352;
1176         break;
1177       case 1401:
1178         ret = 1353;
1179         break;
1180       case 1402:
1181         ret = 1354;
1182         break;
1183       case 1403:
1184         ret = 1355;
1185         break;
1186       case 1404:
1187         ret = 1356;
1188         break;
1189       case 1405:
1190         ret = 1357;
1191         break;
1192       case 1406:
1193         ret = 1358;
1194         break;
1195       case 1407:
1196         ret = 1359;
1197         break;
1198       case 1408:
1199         ret = 1360;
1200         break;
1201       case 1409:
1202         ret = 1361;
1203         break;
1204       case 1410:
1205         ret = 1362;
1206         break;
1207       case 1411:
1208         ret = 1363;
1209         break;
1210       case 1412:
1211         ret = 1364;
1212         break;
1213       case 1413:
1214         ret = 1365;
1215         break;
1216       case 1414:
1217         ret = 1366;
1218         break;
1219       case 7681:
1220         ret = 7680;
1221         break;
1222       case 7683:
1223         ret = 7682;
1224         break;
1225       case 7685:
1226         ret = 7684;
1227         break;
1228       case 7687:
1229         ret = 7686;
1230         break;
1231       case 7689:
1232         ret = 7688;
1233         break;
1234       case 7691:
1235         ret = 7690;
1236         break;
1237       case 7693:
1238         ret = 7692;
1239         break;
1240       case 7695:
1241         ret = 7694;
1242         break;
1243       case 7697:
1244         ret = 7696;
1245         break;
1246       case 7699:
1247         ret = 7698;
1248         break;
1249       case 7701:
1250         ret = 7700;
1251         break;
1252       case 7703:
1253         ret = 7702;
1254         break;
1255       case 7705:
1256         ret = 7704;
1257         break;
1258       case 7707:
1259         ret = 7706;
1260         break;
1261       case 7709:
1262         ret = 7708;
1263         break;
1264       case 7711:
1265         ret = 7710;
1266         break;
1267       case 7713:
1268         ret = 7712;
1269         break;
1270       case 7715:
1271         ret = 7714;
1272         break;
1273       case 7717:
1274         ret = 7716;
1275         break;
1276       case 7719:
1277         ret = 7718;
1278         break;
1279       case 7721:
1280         ret = 7720;
1281         break;
1282       case 7723:
1283         ret = 7722;
1284         break;
1285       case 7725:
1286         ret = 7724;
1287         break;
1288       case 7727:
1289         ret = 7726;
1290         break;
1291       case 7729:
1292         ret = 7728;
1293         break;
1294       case 7731:
1295         ret = 7730;
1296         break;
1297       case 7733:
1298         ret = 7732;
1299         break;
1300       case 7735:
1301         ret = 7734;
1302         break;
1303       case 7737:
1304         ret = 7736;
1305         break;
1306       case 7739:
1307         ret = 7738;
1308         break;
1309       case 7741:
1310         ret = 7740;
1311         break;
1312       case 7743:
1313         ret = 7742;
1314         break;
1315       case 7745:
1316         ret = 7744;
1317         break;
1318       case 7747:
1319         ret = 7746;
1320         break;
1321       case 7749:
1322         ret = 7748;
1323         break;
1324       case 7751:
1325         ret = 7750;
1326         break;
1327       case 7753:
1328         ret = 7752;
1329         break;
1330       case 7755:
1331         ret = 7754;
1332         break;
1333       case 7757:
1334         ret = 7756;
1335         break;
1336       case 7759:
1337         ret = 7758;
1338         break;
1339       case 7761:
1340         ret = 7760;
1341         break;
1342       case 7763:
1343         ret = 7762;
1344         break;
1345       case 7765:
1346         ret = 7764;
1347         break;
1348       case 7767:
1349         ret = 7766;
1350         break;
1351       case 7769:
1352         ret = 7768;
1353         break;
1354       case 7771:
1355         ret = 7770;
1356         break;
1357       case 7773:
1358         ret = 7772;
1359         break;
1360       case 7775:
1361         ret = 7774;
1362         break;
1363       case 7777:
1364         ret = 7776;
1365         break;
1366       case 7779:
1367         ret = 7778;
1368         break;
1369       case 7781:
1370         ret = 7780;
1371         break;
1372       case 7783:
1373         ret = 7782;
1374         break;
1375       case 7785:
1376         ret = 7784;
1377         break;
1378       case 7787:
1379         ret = 7786;
1380         break;
1381       case 7789:
1382         ret = 7788;
1383         break;
1384       case 7791:
1385         ret = 7790;
1386         break;
1387       case 7793:
1388         ret = 7792;
1389         break;
1390       case 7795:
1391         ret = 7794;
1392         break;
1393       case 7797:
1394         ret = 7796;
1395         break;
1396       case 7799:
1397         ret = 7798;
1398         break;
1399       case 7801:
1400         ret = 7800;
1401         break;
1402       case 7803:
1403         ret = 7802;
1404         break;
1405       case 7805:
1406         ret = 7804;
1407         break;
1408       case 7807:
1409         ret = 7806;
1410         break;
1411       case 7809:
1412         ret = 7808;
1413         break;
1414       case 7811:
1415         ret = 7810;
1416         break;
1417       case 7813:
1418         ret = 7812;
1419         break;
1420       case 7815:
1421         ret = 7814;
1422         break;
1423       case 7817:
1424         ret = 7816;
1425         break;
1426       case 7819:
1427         ret = 7818;
1428         break;
1429       case 7821:
1430         ret = 7820;
1431         break;
1432       case 7823:
1433         ret = 7822;
1434         break;
1435       case 7825:
1436         ret = 7824;
1437         break;
1438       case 7827:
1439         ret = 7826;
1440         break;
1441       case 7829:
1442         ret = 7828;
1443         break;
1444       case 7841:
1445         ret = 7840;
1446         break;
1447       case 7843:
1448         ret = 7842;
1449         break;
1450       case 7845:
1451         ret = 7844;
1452         break;
1453       case 7847:
1454         ret = 7846;
1455         break;
1456       case 7849:
1457         ret = 7848;
1458         break;
1459       case 7851:
1460         ret = 7850;
1461         break;
1462       case 7853:
1463         ret = 7852;
1464         break;
1465       case 7855:
1466         ret = 7854;
1467         break;
1468       case 7857:
1469         ret = 7856;
1470         break;
1471       case 7859:
1472         ret = 7858;
1473         break;
1474       case 7861:
1475         ret = 7860;
1476         break;
1477       case 7863:
1478         ret = 7862;
1479         break;
1480       case 7865:
1481         ret = 7864;
1482         break;
1483       case 7867:
1484         ret = 7866;
1485         break;
1486       case 7869:
1487         ret = 7868;
1488         break;
1489       case 7871:
1490         ret = 7870;
1491         break;
1492       case 7873:
1493         ret = 7872;
1494         break;
1495       case 7875:
1496         ret = 7874;
1497         break;
1498       case 7877:
1499         ret = 7876;
1500         break;
1501       case 7879:
1502         ret = 7878;
1503         break;
1504       case 7881:
1505         ret = 7880;
1506         break;
1507       case 7883:
1508         ret = 7882;
1509         break;
1510       case 7885:
1511         ret = 7884;
1512         break;
1513       case 7887:
1514         ret = 7886;
1515         break;
1516       case 7889:
1517         ret = 7888;
1518         break;
1519       case 7891:
1520         ret = 7890;
1521         break;
1522       case 7893:
1523         ret = 7892;
1524         break;
1525       case 7895:
1526         ret = 7894;
1527         break;
1528       case 7897:
1529         ret = 7896;
1530         break;
1531       case 7899:
1532         ret = 7898;
1533         break;
1534       case 7901:
1535         ret = 7900;
1536         break;
1537       case 7903:
1538         ret = 7902;
1539         break;
1540       case 7905:
1541         ret = 7904;
1542         break;
1543       case 7907:
1544         ret = 7906;
1545         break;
1546       case 7909:
1547         ret = 7908;
1548         break;
1549       case 7911:
1550         ret = 7910;
1551         break;
1552       case 7913:
1553         ret = 7912;
1554         break;
1555       case 7915:
1556         ret = 7914;
1557         break;
1558       case 7917:
1559         ret = 7916;
1560         break;
1561       case 7919:
1562         ret = 7918;
1563         break;
1564       case 7921:
1565         ret = 7920;
1566         break;
1567       case 7923:
1568         ret = 7922;
1569         break;
1570       case 7925:
1571         ret = 7924;
1572         break;
1573       case 7927:
1574         ret = 7926;
1575         break;
1576       case 7929:
1577         ret = 7928;
1578         break;
1579       case 7936:
1580         ret = 7944;
1581         break;
1582       case 7937:
1583         ret = 7945;
1584         break;
1585       case 7938:
1586         ret = 7946;
1587         break;
1588       case 7939:
1589         ret = 7947;
1590         break;
1591       case 7940:
1592         ret = 7948;
1593         break;
1594       case 7941:
1595         ret = 7949;
1596         break;
1597       case 7942:
1598         ret = 7950;
1599         break;
1600       case 7943:
1601         ret = 7951;
1602         break;
1603       case 7952:
1604         ret = 7960;
1605         break;
1606       case 7953:
1607         ret = 7961;
1608         break;
1609       case 7954:
1610         ret = 7962;
1611         break;
1612       case 7955:
1613         ret = 7963;
1614         break;
1615       case 7956:
1616         ret = 7964;
1617         break;
1618       case 7957:
1619         ret = 7965;
1620         break;
1621       case 7968:
1622         ret = 7976;
1623         break;
1624       case 7969:
1625         ret = 7977;
1626         break;
1627       case 7970:
1628         ret = 7978;
1629         break;
1630       case 7971:
1631         ret = 7979;
1632         break;
1633       case 7972:
1634         ret = 7980;
1635         break;
1636       case 7973:
1637         ret = 7981;
1638         break;
1639       case 7974:
1640         ret = 7982;
1641         break;
1642       case 7975:
1643         ret = 7983;
1644         break;
1645       case 7984:
1646         ret = 7992;
1647         break;
1648       case 7985:
1649         ret = 7993;
1650         break;
1651       case 7986:
1652         ret = 7994;
1653         break;
1654       case 7987:
1655         ret = 7995;
1656         break;
1657       case 7988:
1658         ret = 7996;
1659         break;
1660       case 7989:
1661         ret = 7997;
1662         break;
1663       case 7990:
1664         ret = 7998;
1665         break;
1666       case 7991:
1667         ret = 7999;
1668         break;
1669       case 8000:
1670         ret = 8008;
1671         break;
1672       case 8001:
1673         ret = 8009;
1674         break;
1675       case 8002:
1676         ret = 8010;
1677         break;
1678       case 8003:
1679         ret = 8011;
1680         break;
1681       case 8004:
1682         ret = 8012;
1683         break;
1684       case 8005:
1685         ret = 8013;
1686         break;
1687       case 8017:
1688         ret = 8025;
1689         break;
1690       case 8019:
1691         ret = 8027;
1692         break;
1693       case 8021:
1694         ret = 8029;
1695         break;
1696       case 8023:
1697         ret = 8031;
1698         break;
1699       case 8032:
1700         ret = 8040;
1701         break;
1702       case 8033:
1703         ret = 8041;
1704         break;
1705       case 8034:
1706         ret = 8042;
1707         break;
1708       case 8035:
1709         ret = 8043;
1710         break;
1711       case 8036:
1712         ret = 8044;
1713         break;
1714       case 8037:
1715         ret = 8045;
1716         break;
1717       case 8038:
1718         ret = 8046;
1719         break;
1720       case 8039:
1721         ret = 8047;
1722         break;
1723       case 8048:
1724         ret = 8122;
1725         break;
1726       case 8049:
1727         ret = 8123;
1728         break;
1729       case 8050:
1730         ret = 8136;
1731         break;
1732       case 8051:
1733         ret = 8137;
1734         break;
1735       case 8052:
1736         ret = 8138;
1737         break;
1738       case 8053:
1739         ret = 8139;
1740         break;
1741       case 8054:
1742         ret = 8154;
1743         break;
1744       case 8055:
1745         ret = 8155;
1746         break;
1747       case 8056:
1748         ret = 8184;
1749         break;
1750       case 8057:
1751         ret = 8185;
1752         break;
1753       case 8058:
1754         ret = 8170;
1755         break;
1756       case 8059:
1757         ret = 8171;
1758         break;
1759       case 8060:
1760         ret = 8186;
1761         break;
1762       case 8061:
1763         ret = 8187;
1764         break;
1765       case 8064:
1766         ret = 8072;
1767         break;
1768       case 8065:
1769         ret = 8073;
1770         break;
1771       case 8066:
1772         ret = 8074;
1773         break;
1774       case 8067:
1775         ret = 8075;
1776         break;
1777       case 8068:
1778         ret = 8076;
1779         break;
1780       case 8069:
1781         ret = 8077;
1782         break;
1783       case 8070:
1784         ret = 8078;
1785         break;
1786       case 8071:
1787         ret = 8079;
1788         break;
1789       case 8080:
1790         ret = 8088;
1791         break;
1792       case 8081:
1793         ret = 8089;
1794         break;
1795       case 8082:
1796         ret = 8090;
1797         break;
1798       case 8083:
1799         ret = 8091;
1800         break;
1801       case 8084:
1802         ret = 8092;
1803         break;
1804       case 8085:
1805         ret = 8093;
1806         break;
1807       case 8086:
1808         ret = 8094;
1809         break;
1810       case 8087:
1811         ret = 8095;
1812         break;
1813       case 8096:
1814         ret = 8104;
1815         break;
1816       case 8097:
1817         ret = 8105;
1818         break;
1819       case 8098:
1820         ret = 8106;
1821         break;
1822       case 8099:
1823         ret = 8107;
1824         break;
1825       case 8100:
1826         ret = 8108;
1827         break;
1828       case 8101:
1829         ret = 8109;
1830         break;
1831       case 8102:
1832         ret = 8110;
1833         break;
1834       case 8103:
1835         ret = 8111;
1836         break;
1837       case 8112:
1838         ret = 8120;
1839         break;
1840       case 8113:
1841         ret = 8121;
1842         break;
1843       case 8115:
1844         ret = 8124;
1845         break;
1846       case 8131:
1847         ret = 8140;
1848         break;
1849       case 8144:
1850         ret = 8152;
1851         break;
1852       case 8145:
1853         ret = 8153;
1854         break;
1855       case 8160:
1856         ret = 8168;
1857         break;
1858       case 8161:
1859         ret = 8169;
1860         break;
1861       case 8165:
1862         ret = 8172;
1863         break;
1864       case 8179:
1865         ret = 8188;
1866         break;
1867       case 8560:
1868         ret = 8544;
1869         break;
1870       case 8561:
1871         ret = 8545;
1872         break;
1873       case 8562:
1874         ret = 8546;
1875         break;
1876       case 8563:
1877         ret = 8547;
1878         break;
1879       case 8564:
1880         ret = 8548;
1881         break;
1882       case 8565:
1883         ret = 8549;
1884         break;
1885       case 8566:
1886         ret = 8550;
1887         break;
1888       case 8567:
1889         ret = 8551;
1890         break;
1891       case 8568:
1892         ret = 8552;
1893         break;
1894       case 8569:
1895         ret = 8553;
1896         break;
1897       case 8570:
1898         ret = 8554;
1899         break;
1900       case 8571:
1901         ret = 8555;
1902         break;
1903       case 8572:
1904         ret = 8556;
1905         break;
1906       case 8573:
1907         ret = 8557;
1908         break;
1909       case 8574:
1910         ret = 8558;
1911         break;
1912       case 8575:
1913         ret = 8559;
1914         break;
1915       case 9424:
1916         ret = 9398;
1917         break;
1918       case 9425:
1919         ret = 9399;
1920         break;
1921       case 9426:
1922         ret = 9400;
1923         break;
1924       case 9427:
1925         ret = 9401;
1926         break;
1927       case 9428:
1928         ret = 9402;
1929         break;
1930       case 9429:
1931         ret = 9403;
1932         break;
1933       case 9430:
1934         ret = 9404;
1935         break;
1936       case 9431:
1937         ret = 9405;
1938         break;
1939       case 9432:
1940         ret = 9406;
1941         break;
1942       case 9433:
1943         ret = 9407;
1944         break;
1945       case 9434:
1946         ret = 9408;
1947         break;
1948       case 9435:
1949         ret = 9409;
1950         break;
1951       case 9436:
1952         ret = 9410;
1953         break;
1954       case 9437:
1955         ret = 9411;
1956         break;
1957       case 9438:
1958         ret = 9412;
1959         break;
1960       case 9439:
1961         ret = 9413;
1962         break;
1963       case 9440:
1964         ret = 9414;
1965         break;
1966       case 9441:
1967         ret = 9415;
1968         break;
1969       case 9442:
1970         ret = 9416;
1971         break;
1972       case 9443:
1973         ret = 9417;
1974         break;
1975       case 9444:
1976         ret = 9418;
1977         break;
1978       case 9445:
1979         ret = 9419;
1980         break;
1981       case 9446:
1982         ret = 9420;
1983         break;
1984       case 9447:
1985         ret = 9421;
1986         break;
1987       case 9448:
1988         ret = 9422;
1989         break;
1990       case 9449:
1991         ret = 9423;
1992         break;
1993       case 65345:
1994         ret = 65313;
1995         break;
1996       case 65346:
1997         ret = 65314;
1998         break;
1999       case 65347:
2000         ret = 65315;
2001         break;
2002       case 65348:
2003         ret = 65316;
2004         break;
2005       case 65349:
2006         ret = 65317;
2007         break;
2008       case 65350:
2009         ret = 65318;
2010         break;
2011       case 65351:
2012         ret = 65319;
2013         break;
2014       case 65352:
2015         ret = 65320;
2016         break;
2017       case 65353:
2018         ret = 65321;
2019         break;
2020       case 65354:
2021         ret = 65322;
2022         break;
2023       case 65355:
2024         ret = 65323;
2025         break;
2026       case 65356:
2027         ret = 65324;
2028         break;
2029       case 65357:
2030         ret = 65325;
2031         break;
2032       case 65358:
2033         ret = 65326;
2034         break;
2035       case 65359:
2036         ret = 65327;
2037         break;
2038       case 65360:
2039         ret = 65328;
2040         break;
2041       case 65361:
2042         ret = 65329;
2043         break;
2044       case 65362:
2045         ret = 65330;
2046         break;
2047       case 65363:
2048         ret = 65331;
2049         break;
2050       case 65364:
2051         ret = 65332;
2052         break;
2053       case 65365:
2054         ret = 65333;
2055         break;
2056       case 65366:
2057         ret = 65334;
2058         break;
2059       case 65367:
2060         ret = 65335;
2061         break;
2062       case 65368:
2063         ret = 65336;
2064         break;
2065       case 65369:
2066         ret = 65337;
2067         break;
2068       case 65370:
2069         ret = 65338;
2070         break;
2071       }
2072       return (char) ret;
2073     }
2074     return Character.toUpperCase(c);
2075   }
2076
2077   /** Convert a character to lower case. */
2078   public static char toLowerCase(char c)
2079   {
2080     if (java_1_0)
2081     {
2082       int ret = (int) c;
2083       switch (c)
2084       {
2085       case 65:
2086         ret = 97;
2087         break;
2088       case 66:
2089         ret = 98;
2090         break;
2091       case 67:
2092         ret = 99;
2093         break;
2094       case 68:
2095         ret = 100;
2096         break;
2097       case 69:
2098         ret = 101;
2099         break;
2100       case 70:
2101         ret = 102;
2102         break;
2103       case 71:
2104         ret = 103;
2105         break;
2106       case 72:
2107         ret = 104;
2108         break;
2109       case 73:
2110         ret = 105;
2111         break;
2112       case 74:
2113         ret = 106;
2114         break;
2115       case 75:
2116         ret = 107;
2117         break;
2118       case 76:
2119         ret = 108;
2120         break;
2121       case 77:
2122         ret = 109;
2123         break;
2124       case 78:
2125         ret = 110;
2126         break;
2127       case 79:
2128         ret = 111;
2129         break;
2130       case 80:
2131         ret = 112;
2132         break;
2133       case 81:
2134         ret = 113;
2135         break;
2136       case 82:
2137         ret = 114;
2138         break;
2139       case 83:
2140         ret = 115;
2141         break;
2142       case 84:
2143         ret = 116;
2144         break;
2145       case 85:
2146         ret = 117;
2147         break;
2148       case 86:
2149         ret = 118;
2150         break;
2151       case 87:
2152         ret = 119;
2153         break;
2154       case 88:
2155         ret = 120;
2156         break;
2157       case 89:
2158         ret = 121;
2159         break;
2160       case 90:
2161         ret = 122;
2162         break;
2163       case 192:
2164         ret = 224;
2165         break;
2166       case 193:
2167         ret = 225;
2168         break;
2169       case 194:
2170         ret = 226;
2171         break;
2172       case 195:
2173         ret = 227;
2174         break;
2175       case 196:
2176         ret = 228;
2177         break;
2178       case 197:
2179         ret = 229;
2180         break;
2181       case 198:
2182         ret = 230;
2183         break;
2184       case 199:
2185         ret = 231;
2186         break;
2187       case 200:
2188         ret = 232;
2189         break;
2190       case 201:
2191         ret = 233;
2192         break;
2193       case 202:
2194         ret = 234;
2195         break;
2196       case 203:
2197         ret = 235;
2198         break;
2199       case 204:
2200         ret = 236;
2201         break;
2202       case 205:
2203         ret = 237;
2204         break;
2205       case 206:
2206         ret = 238;
2207         break;
2208       case 207:
2209         ret = 239;
2210         break;
2211       case 208:
2212         ret = 240;
2213         break;
2214       case 209:
2215         ret = 241;
2216         break;
2217       case 210:
2218         ret = 242;
2219         break;
2220       case 211:
2221         ret = 243;
2222         break;
2223       case 212:
2224         ret = 244;
2225         break;
2226       case 213:
2227         ret = 245;
2228         break;
2229       case 214:
2230         ret = 246;
2231         break;
2232       case 216:
2233         ret = 248;
2234         break;
2235       case 217:
2236         ret = 249;
2237         break;
2238       case 218:
2239         ret = 250;
2240         break;
2241       case 219:
2242         ret = 251;
2243         break;
2244       case 220:
2245         ret = 252;
2246         break;
2247       case 221:
2248         ret = 253;
2249         break;
2250       case 222:
2251         ret = 254;
2252         break;
2253       case 256:
2254         ret = 257;
2255         break;
2256       case 258:
2257         ret = 259;
2258         break;
2259       case 260:
2260         ret = 261;
2261         break;
2262       case 262:
2263         ret = 263;
2264         break;
2265       case 264:
2266         ret = 265;
2267         break;
2268       case 266:
2269         ret = 267;
2270         break;
2271       case 268:
2272         ret = 269;
2273         break;
2274       case 270:
2275         ret = 271;
2276         break;
2277       case 272:
2278         ret = 273;
2279         break;
2280       case 274:
2281         ret = 275;
2282         break;
2283       case 276:
2284         ret = 277;
2285         break;
2286       case 278:
2287         ret = 279;
2288         break;
2289       case 280:
2290         ret = 281;
2291         break;
2292       case 282:
2293         ret = 283;
2294         break;
2295       case 284:
2296         ret = 285;
2297         break;
2298       case 286:
2299         ret = 287;
2300         break;
2301       case 288:
2302         ret = 289;
2303         break;
2304       case 290:
2305         ret = 291;
2306         break;
2307       case 292:
2308         ret = 293;
2309         break;
2310       case 294:
2311         ret = 295;
2312         break;
2313       case 296:
2314         ret = 297;
2315         break;
2316       case 298:
2317         ret = 299;
2318         break;
2319       case 300:
2320         ret = 301;
2321         break;
2322       case 302:
2323         ret = 303;
2324         break;
2325       case 304:
2326         ret = 105;
2327         break;
2328       case 306:
2329         ret = 307;
2330         break;
2331       case 308:
2332         ret = 309;
2333         break;
2334       case 310:
2335         ret = 311;
2336         break;
2337       case 313:
2338         ret = 314;
2339         break;
2340       case 315:
2341         ret = 316;
2342         break;
2343       case 317:
2344         ret = 318;
2345         break;
2346       case 319:
2347         ret = 320;
2348         break;
2349       case 321:
2350         ret = 322;
2351         break;
2352       case 323:
2353         ret = 324;
2354         break;
2355       case 325:
2356         ret = 326;
2357         break;
2358       case 327:
2359         ret = 328;
2360         break;
2361       case 330:
2362         ret = 331;
2363         break;
2364       case 332:
2365         ret = 333;
2366         break;
2367       case 334:
2368         ret = 335;
2369         break;
2370       case 336:
2371         ret = 337;
2372         break;
2373       case 338:
2374         ret = 339;
2375         break;
2376       case 340:
2377         ret = 341;
2378         break;
2379       case 342:
2380         ret = 343;
2381         break;
2382       case 344:
2383         ret = 345;
2384         break;
2385       case 346:
2386         ret = 347;
2387         break;
2388       case 348:
2389         ret = 349;
2390         break;
2391       case 350:
2392         ret = 351;
2393         break;
2394       case 352:
2395         ret = 353;
2396         break;
2397       case 354:
2398         ret = 355;
2399         break;
2400       case 356:
2401         ret = 357;
2402         break;
2403       case 358:
2404         ret = 359;
2405         break;
2406       case 360:
2407         ret = 361;
2408         break;
2409       case 362:
2410         ret = 363;
2411         break;
2412       case 364:
2413         ret = 365;
2414         break;
2415       case 366:
2416         ret = 367;
2417         break;
2418       case 368:
2419         ret = 369;
2420         break;
2421       case 370:
2422         ret = 371;
2423         break;
2424       case 372:
2425         ret = 373;
2426         break;
2427       case 374:
2428         ret = 375;
2429         break;
2430       case 376:
2431         ret = 255;
2432         break;
2433       case 377:
2434         ret = 378;
2435         break;
2436       case 379:
2437         ret = 380;
2438         break;
2439       case 381:
2440         ret = 382;
2441         break;
2442       case 385:
2443         ret = 595;
2444         break;
2445       case 386:
2446         ret = 387;
2447         break;
2448       case 388:
2449         ret = 389;
2450         break;
2451       case 390:
2452         ret = 596;
2453         break;
2454       case 391:
2455         ret = 392;
2456         break;
2457       case 393:
2458         ret = 598;
2459         break;
2460       case 394:
2461         ret = 599;
2462         break;
2463       case 395:
2464         ret = 396;
2465         break;
2466       case 398:
2467         ret = 600;
2468         break;
2469       case 399:
2470         ret = 601;
2471         break;
2472       case 400:
2473         ret = 603;
2474         break;
2475       case 401:
2476         ret = 402;
2477         break;
2478       case 403:
2479         ret = 608;
2480         break;
2481       case 404:
2482         ret = 611;
2483         break;
2484       case 406:
2485         ret = 617;
2486         break;
2487       case 407:
2488         ret = 616;
2489         break;
2490       case 408:
2491         ret = 409;
2492         break;
2493       case 412:
2494         ret = 623;
2495         break;
2496       case 413:
2497         ret = 626;
2498         break;
2499       case 416:
2500         ret = 417;
2501         break;
2502       case 418:
2503         ret = 419;
2504         break;
2505       case 420:
2506         ret = 421;
2507         break;
2508       case 423:
2509         ret = 424;
2510         break;
2511       case 425:
2512         ret = 643;
2513         break;
2514       case 428:
2515         ret = 429;
2516         break;
2517       case 430:
2518         ret = 648;
2519         break;
2520       case 431:
2521         ret = 432;
2522         break;
2523       case 433:
2524         ret = 650;
2525         break;
2526       case 434:
2527         ret = 651;
2528         break;
2529       case 435:
2530         ret = 436;
2531         break;
2532       case 437:
2533         ret = 438;
2534         break;
2535       case 439:
2536         ret = 658;
2537         break;
2538       case 440:
2539         ret = 441;
2540         break;
2541       case 444:
2542         ret = 445;
2543         break;
2544       case 452:
2545         ret = 454;
2546         break;
2547       case 453:
2548         ret = 454;
2549         break;
2550       case 455:
2551         ret = 457;
2552         break;
2553       case 456:
2554         ret = 457;
2555         break;
2556       case 458:
2557         ret = 460;
2558         break;
2559       case 459:
2560         ret = 460;
2561         break;
2562       case 461:
2563         ret = 462;
2564         break;
2565       case 463:
2566         ret = 464;
2567         break;
2568       case 465:
2569         ret = 466;
2570         break;
2571       case 467:
2572         ret = 468;
2573         break;
2574       case 469:
2575         ret = 470;
2576         break;
2577       case 471:
2578         ret = 472;
2579         break;
2580       case 473:
2581         ret = 474;
2582         break;
2583       case 475:
2584         ret = 476;
2585         break;
2586       case 478:
2587         ret = 479;
2588         break;
2589       case 480:
2590         ret = 481;
2591         break;
2592       case 482:
2593         ret = 483;
2594         break;
2595       case 484:
2596         ret = 485;
2597         break;
2598       case 486:
2599         ret = 487;
2600         break;
2601       case 488:
2602         ret = 489;
2603         break;
2604       case 490:
2605         ret = 491;
2606         break;
2607       case 492:
2608         ret = 493;
2609         break;
2610       case 494:
2611         ret = 495;
2612         break;
2613       case 497:
2614         ret = 499;
2615         break;
2616       case 498:
2617         ret = 499;
2618         break;
2619       case 500:
2620         ret = 501;
2621         break;
2622       case 506:
2623         ret = 507;
2624         break;
2625       case 508:
2626         ret = 509;
2627         break;
2628       case 510:
2629         ret = 511;
2630         break;
2631       case 512:
2632         ret = 513;
2633         break;
2634       case 514:
2635         ret = 515;
2636         break;
2637       case 516:
2638         ret = 517;
2639         break;
2640       case 518:
2641         ret = 519;
2642         break;
2643       case 520:
2644         ret = 521;
2645         break;
2646       case 522:
2647         ret = 523;
2648         break;
2649       case 524:
2650         ret = 525;
2651         break;
2652       case 526:
2653         ret = 527;
2654         break;
2655       case 528:
2656         ret = 529;
2657         break;
2658       case 530:
2659         ret = 531;
2660         break;
2661       case 532:
2662         ret = 533;
2663         break;
2664       case 534:
2665         ret = 535;
2666         break;
2667       case 902:
2668         ret = 940;
2669         break;
2670       case 904:
2671         ret = 941;
2672         break;
2673       case 905:
2674         ret = 942;
2675         break;
2676       case 906:
2677         ret = 943;
2678         break;
2679       case 908:
2680         ret = 972;
2681         break;
2682       case 910:
2683         ret = 973;
2684         break;
2685       case 911:
2686         ret = 974;
2687         break;
2688       case 913:
2689         ret = 945;
2690         break;
2691       case 914:
2692         ret = 946;
2693         break;
2694       case 915:
2695         ret = 947;
2696         break;
2697       case 916:
2698         ret = 948;
2699         break;
2700       case 917:
2701         ret = 949;
2702         break;
2703       case 918:
2704         ret = 950;
2705         break;
2706       case 919:
2707         ret = 951;
2708         break;
2709       case 920:
2710         ret = 952;
2711         break;
2712       case 921:
2713         ret = 953;
2714         break;
2715       case 922:
2716         ret = 954;
2717         break;
2718       case 923:
2719         ret = 955;
2720         break;
2721       case 924:
2722         ret = 956;
2723         break;
2724       case 925:
2725         ret = 957;
2726         break;
2727       case 926:
2728         ret = 958;
2729         break;
2730       case 927:
2731         ret = 959;
2732         break;
2733       case 928:
2734         ret = 960;
2735         break;
2736       case 929:
2737         ret = 961;
2738         break;
2739       case 931:
2740         ret = 963;
2741         break;
2742       case 932:
2743         ret = 964;
2744         break;
2745       case 933:
2746         ret = 965;
2747         break;
2748       case 934:
2749         ret = 966;
2750         break;
2751       case 935:
2752         ret = 967;
2753         break;
2754       case 936:
2755         ret = 968;
2756         break;
2757       case 937:
2758         ret = 969;
2759         break;
2760       case 938:
2761         ret = 970;
2762         break;
2763       case 939:
2764         ret = 971;
2765         break;
2766       case 994:
2767         ret = 995;
2768         break;
2769       case 996:
2770         ret = 997;
2771         break;
2772       case 998:
2773         ret = 999;
2774         break;
2775       case 1000:
2776         ret = 1001;
2777         break;
2778       case 1002:
2779         ret = 1003;
2780         break;
2781       case 1004:
2782         ret = 1005;
2783         break;
2784       case 1006:
2785         ret = 1007;
2786         break;
2787       case 1025:
2788         ret = 1105;
2789         break;
2790       case 1026:
2791         ret = 1106;
2792         break;
2793       case 1027:
2794         ret = 1107;
2795         break;
2796       case 1028:
2797         ret = 1108;
2798         break;
2799       case 1029:
2800         ret = 1109;
2801         break;
2802       case 1030:
2803         ret = 1110;
2804         break;
2805       case 1031:
2806         ret = 1111;
2807         break;
2808       case 1032:
2809         ret = 1112;
2810         break;
2811       case 1033:
2812         ret = 1113;
2813         break;
2814       case 1034:
2815         ret = 1114;
2816         break;
2817       case 1035:
2818         ret = 1115;
2819         break;
2820       case 1036:
2821         ret = 1116;
2822         break;
2823       case 1038:
2824         ret = 1118;
2825         break;
2826       case 1039:
2827         ret = 1119;
2828         break;
2829       case 1040:
2830         ret = 1072;
2831         break;
2832       case 1041:
2833         ret = 1073;
2834         break;
2835       case 1042:
2836         ret = 1074;
2837         break;
2838       case 1043:
2839         ret = 1075;
2840         break;
2841       case 1044:
2842         ret = 1076;
2843         break;
2844       case 1045:
2845         ret = 1077;
2846         break;
2847       case 1046:
2848         ret = 1078;
2849         break;
2850       case 1047:
2851         ret = 1079;
2852         break;
2853       case 1048:
2854         ret = 1080;
2855         break;
2856       case 1049:
2857         ret = 1081;
2858         break;
2859       case 1050:
2860         ret = 1082;
2861         break;
2862       case 1051:
2863         ret = 1083;
2864         break;
2865       case 1052:
2866         ret = 1084;
2867         break;
2868       case 1053:
2869         ret = 1085;
2870         break;
2871       case 1054:
2872         ret = 1086;
2873         break;
2874       case 1055:
2875         ret = 1087;
2876         break;
2877       case 1056:
2878         ret = 1088;
2879         break;
2880       case 1057:
2881         ret = 1089;
2882         break;
2883       case 1058:
2884         ret = 1090;
2885         break;
2886       case 1059:
2887         ret = 1091;
2888         break;
2889       case 1060:
2890         ret = 1092;
2891         break;
2892       case 1061:
2893         ret = 1093;
2894         break;
2895       case 1062:
2896         ret = 1094;
2897         break;
2898       case 1063:
2899         ret = 1095;
2900         break;
2901       case 1064:
2902         ret = 1096;
2903         break;
2904       case 1065:
2905         ret = 1097;
2906         break;
2907       case 1066:
2908         ret = 1098;
2909         break;
2910       case 1067:
2911         ret = 1099;
2912         break;
2913       case 1068:
2914         ret = 1100;
2915         break;
2916       case 1069:
2917         ret = 1101;
2918         break;
2919       case 1070:
2920         ret = 1102;
2921         break;
2922       case 1071:
2923         ret = 1103;
2924         break;
2925       case 1120:
2926         ret = 1121;
2927         break;
2928       case 1122:
2929         ret = 1123;
2930         break;
2931       case 1124:
2932         ret = 1125;
2933         break;
2934       case 1126:
2935         ret = 1127;
2936         break;
2937       case 1128:
2938         ret = 1129;
2939         break;
2940       case 1130:
2941         ret = 1131;
2942         break;
2943       case 1132:
2944         ret = 1133;
2945         break;
2946       case 1134:
2947         ret = 1135;
2948         break;
2949       case 1136:
2950         ret = 1137;
2951         break;
2952       case 1138:
2953         ret = 1139;
2954         break;
2955       case 1140:
2956         ret = 1141;
2957         break;
2958       case 1142:
2959         ret = 1143;
2960         break;
2961       case 1144:
2962         ret = 1145;
2963         break;
2964       case 1146:
2965         ret = 1147;
2966         break;
2967       case 1148:
2968         ret = 1149;
2969         break;
2970       case 1150:
2971         ret = 1151;
2972         break;
2973       case 1152:
2974         ret = 1153;
2975         break;
2976       case 1168:
2977         ret = 1169;
2978         break;
2979       case 1170:
2980         ret = 1171;
2981         break;
2982       case 1172:
2983         ret = 1173;
2984         break;
2985       case 1174:
2986         ret = 1175;
2987         break;
2988       case 1176:
2989         ret = 1177;
2990         break;
2991       case 1178:
2992         ret = 1179;
2993         break;
2994       case 1180:
2995         ret = 1181;
2996         break;
2997       case 1182:
2998         ret = 1183;
2999         break;
3000       case 1184:
3001         ret = 1185;
3002         break;
3003       case 1186:
3004         ret = 1187;
3005         break;
3006       case 1188:
3007         ret = 1189;
3008         break;
3009       case 1190:
3010         ret = 1191;
3011         break;
3012       case 1192:
3013         ret = 1193;
3014         break;
3015       case 1194:
3016         ret = 1195;
3017         break;
3018       case 1196:
3019         ret = 1197;
3020         break;
3021       case 1198:
3022         ret = 1199;
3023         break;
3024       case 1200:
3025         ret = 1201;
3026         break;
3027       case 1202:
3028         ret = 1203;
3029         break;
3030       case 1204:
3031         ret = 1205;
3032         break;
3033       case 1206:
3034         ret = 1207;
3035         break;
3036       case 1208:
3037         ret = 1209;
3038         break;
3039       case 1210:
3040         ret = 1211;
3041         break;
3042       case 1212:
3043         ret = 1213;
3044         break;
3045       case 1214:
3046         ret = 1215;
3047         break;
3048       case 1217:
3049         ret = 1218;
3050         break;
3051       case 1219:
3052         ret = 1220;
3053         break;
3054       case 1223:
3055         ret = 1224;
3056         break;
3057       case 1227:
3058         ret = 1228;
3059         break;
3060       case 1232:
3061         ret = 1233;
3062         break;
3063       case 1234:
3064         ret = 1235;
3065         break;
3066       case 1236:
3067         ret = 1237;
3068         break;
3069       case 1238:
3070         ret = 1239;
3071         break;
3072       case 1240:
3073         ret = 1241;
3074         break;
3075       case 1242:
3076         ret = 1243;
3077         break;
3078       case 1244:
3079         ret = 1245;
3080         break;
3081       case 1246:
3082         ret = 1247;
3083         break;
3084       case 1248:
3085         ret = 1249;
3086         break;
3087       case 1250:
3088         ret = 1251;
3089         break;
3090       case 1252:
3091         ret = 1253;
3092         break;
3093       case 1254:
3094         ret = 1255;
3095         break;
3096       case 1256:
3097         ret = 1257;
3098         break;
3099       case 1258:
3100         ret = 1259;
3101         break;
3102       case 1262:
3103         ret = 1263;
3104         break;
3105       case 1264:
3106         ret = 1265;
3107         break;
3108       case 1266:
3109         ret = 1267;
3110         break;
3111       case 1268:
3112         ret = 1269;
3113         break;
3114       case 1272:
3115         ret = 1273;
3116         break;
3117       case 1329:
3118         ret = 1377;
3119         break;
3120       case 1330:
3121         ret = 1378;
3122         break;
3123       case 1331:
3124         ret = 1379;
3125         break;
3126       case 1332:
3127         ret = 1380;
3128         break;
3129       case 1333:
3130         ret = 1381;
3131         break;
3132       case 1334:
3133         ret = 1382;
3134         break;
3135       case 1335:
3136         ret = 1383;
3137         break;
3138       case 1336:
3139         ret = 1384;
3140         break;
3141       case 1337:
3142         ret = 1385;
3143         break;
3144       case 1338:
3145         ret = 1386;
3146         break;
3147       case 1339:
3148         ret = 1387;
3149         break;
3150       case 1340:
3151         ret = 1388;
3152         break;
3153       case 1341:
3154         ret = 1389;
3155         break;
3156       case 1342:
3157         ret = 1390;
3158         break;
3159       case 1343:
3160         ret = 1391;
3161         break;
3162       case 1344:
3163         ret = 1392;
3164         break;
3165       case 1345:
3166         ret = 1393;
3167         break;
3168       case 1346:
3169         ret = 1394;
3170         break;
3171       case 1347:
3172         ret = 1395;
3173         break;
3174       case 1348:
3175         ret = 1396;
3176         break;
3177       case 1349:
3178         ret = 1397;
3179         break;
3180       case 1350:
3181         ret = 1398;
3182         break;
3183       case 1351:
3184         ret = 1399;
3185         break;
3186       case 1352:
3187         ret = 1400;
3188         break;
3189       case 1353:
3190         ret = 1401;
3191         break;
3192       case 1354:
3193         ret = 1402;
3194         break;
3195       case 1355:
3196         ret = 1403;
3197         break;
3198       case 1356:
3199         ret = 1404;
3200         break;
3201       case 1357:
3202         ret = 1405;
3203         break;
3204       case 1358:
3205         ret = 1406;
3206         break;
3207       case 1359:
3208         ret = 1407;
3209         break;
3210       case 1360:
3211         ret = 1408;
3212         break;
3213       case 1361:
3214         ret = 1409;
3215         break;
3216       case 1362:
3217         ret = 1410;
3218         break;
3219       case 1363:
3220         ret = 1411;
3221         break;
3222       case 1364:
3223         ret = 1412;
3224         break;
3225       case 1365:
3226         ret = 1413;
3227         break;
3228       case 1366:
3229         ret = 1414;
3230         break;
3231       case 4256:
3232         ret = 4304;
3233         break;
3234       case 4257:
3235         ret = 4305;
3236         break;
3237       case 4258:
3238         ret = 4306;
3239         break;
3240       case 4259:
3241         ret = 4307;
3242         break;
3243       case 4260:
3244         ret = 4308;
3245         break;
3246       case 4261:
3247         ret = 4309;
3248         break;
3249       case 4262:
3250         ret = 4310;
3251         break;
3252       case 4263:
3253         ret = 4311;
3254         break;
3255       case 4264:
3256         ret = 4312;
3257         break;
3258       case 4265:
3259         ret = 4313;
3260         break;
3261       case 4266:
3262         ret = 4314;
3263         break;
3264       case 4267:
3265         ret = 4315;
3266         break;
3267       case 4268:
3268         ret = 4316;
3269         break;
3270       case 4269:
3271         ret = 4317;
3272         break;
3273       case 4270:
3274         ret = 4318;
3275         break;
3276       case 4271:
3277         ret = 4319;
3278         break;
3279       case 4272:
3280         ret = 4320;
3281         break;
3282       case 4273:
3283         ret = 4321;
3284         break;
3285       case 4274:
3286         ret = 4322;
3287         break;
3288       case 4275:
3289         ret = 4323;
3290         break;
3291       case 4276:
3292         ret = 4324;
3293         break;
3294       case 4277:
3295         ret = 4325;
3296         break;
3297       case 4278:
3298         ret = 4326;
3299         break;
3300       case 4279:
3301         ret = 4327;
3302         break;
3303       case 4280:
3304         ret = 4328;
3305         break;
3306       case 4281:
3307         ret = 4329;
3308         break;
3309       case 4282:
3310         ret = 4330;
3311         break;
3312       case 4283:
3313         ret = 4331;
3314         break;
3315       case 4284:
3316         ret = 4332;
3317         break;
3318       case 4285:
3319         ret = 4333;
3320         break;
3321       case 4286:
3322         ret = 4334;
3323         break;
3324       case 4287:
3325         ret = 4335;
3326         break;
3327       case 4288:
3328         ret = 4336;
3329         break;
3330       case 4289:
3331         ret = 4337;
3332         break;
3333       case 4290:
3334         ret = 4338;
3335         break;
3336       case 4291:
3337         ret = 4339;
3338         break;
3339       case 4292:
3340         ret = 4340;
3341         break;
3342       case 4293:
3343         ret = 4341;
3344         break;
3345       case 7680:
3346         ret = 7681;
3347         break;
3348       case 7682:
3349         ret = 7683;
3350         break;
3351       case 7684:
3352         ret = 7685;
3353         break;
3354       case 7686:
3355         ret = 7687;
3356         break;
3357       case 7688:
3358         ret = 7689;
3359         break;
3360       case 7690:
3361         ret = 7691;
3362         break;
3363       case 7692:
3364         ret = 7693;
3365         break;
3366       case 7694:
3367         ret = 7695;
3368         break;
3369       case 7696:
3370         ret = 7697;
3371         break;
3372       case 7698:
3373         ret = 7699;
3374         break;
3375       case 7700:
3376         ret = 7701;
3377         break;
3378       case 7702:
3379         ret = 7703;
3380         break;
3381       case 7704:
3382         ret = 7705;
3383         break;
3384       case 7706:
3385         ret = 7707;
3386         break;
3387       case 7708:
3388         ret = 7709;
3389         break;
3390       case 7710:
3391         ret = 7711;
3392         break;
3393       case 7712:
3394         ret = 7713;
3395         break;
3396       case 7714:
3397         ret = 7715;
3398         break;
3399       case 7716:
3400         ret = 7717;
3401         break;
3402       case 7718:
3403         ret = 7719;
3404         break;
3405       case 7720:
3406         ret = 7721;
3407         break;
3408       case 7722:
3409         ret = 7723;
3410         break;
3411       case 7724:
3412         ret = 7725;
3413         break;
3414       case 7726:
3415         ret = 7727;
3416         break;
3417       case 7728:
3418         ret = 7729;
3419         break;
3420       case 7730:
3421         ret = 7731;
3422         break;
3423       case 7732:
3424         ret = 7733;
3425         break;
3426       case 7734:
3427         ret = 7735;
3428         break;
3429       case 7736:
3430         ret = 7737;
3431         break;
3432       case 7738:
3433         ret = 7739;
3434         break;
3435       case 7740:
3436         ret = 7741;
3437         break;
3438       case 7742:
3439         ret = 7743;
3440         break;
3441       case 7744:
3442         ret = 7745;
3443         break;
3444       case 7746:
3445         ret = 7747;
3446         break;
3447       case 7748:
3448         ret = 7749;
3449         break;
3450       case 7750:
3451         ret = 7751;
3452         break;
3453       case 7752:
3454         ret = 7753;
3455         break;
3456       case 7754:
3457         ret = 7755;
3458         break;
3459       case 7756:
3460         ret = 7757;
3461         break;
3462       case 7758:
3463         ret = 7759;
3464         break;
3465       case 7760:
3466         ret = 7761;
3467         break;
3468       case 7762:
3469         ret = 7763;
3470         break;
3471       case 7764:
3472         ret = 7765;
3473         break;
3474       case 7766:
3475         ret = 7767;
3476         break;
3477       case 7768:
3478         ret = 7769;
3479         break;
3480       case 7770:
3481         ret = 7771;
3482         break;
3483       case 7772:
3484         ret = 7773;
3485         break;
3486       case 7774:
3487         ret = 7775;
3488         break;
3489       case 7776:
3490         ret = 7777;
3491         break;
3492       case 7778:
3493         ret = 7779;
3494         break;
3495       case 7780:
3496         ret = 7781;
3497         break;
3498       case 7782:
3499         ret = 7783;
3500         break;
3501       case 7784:
3502         ret = 7785;
3503         break;
3504       case 7786:
3505         ret = 7787;
3506         break;
3507       case 7788:
3508         ret = 7789;
3509         break;
3510       case 7790:
3511         ret = 7791;
3512         break;
3513       case 7792:
3514         ret = 7793;
3515         break;
3516       case 7794:
3517         ret = 7795;
3518         break;
3519       case 7796:
3520         ret = 7797;
3521         break;
3522       case 7798:
3523         ret = 7799;
3524         break;
3525       case 7800:
3526         ret = 7801;
3527         break;
3528       case 7802:
3529         ret = 7803;
3530         break;
3531       case 7804:
3532         ret = 7805;
3533         break;
3534       case 7806:
3535         ret = 7807;
3536         break;
3537       case 7808:
3538         ret = 7809;
3539         break;
3540       case 7810:
3541         ret = 7811;
3542         break;
3543       case 7812:
3544         ret = 7813;
3545         break;
3546       case 7814:
3547         ret = 7815;
3548         break;
3549       case 7816:
3550         ret = 7817;
3551         break;
3552       case 7818:
3553         ret = 7819;
3554         break;
3555       case 7820:
3556         ret = 7821;
3557         break;
3558       case 7822:
3559         ret = 7823;
3560         break;
3561       case 7824:
3562         ret = 7825;
3563         break;
3564       case 7826:
3565         ret = 7827;
3566         break;
3567       case 7828:
3568         ret = 7829;
3569         break;
3570       case 7840:
3571         ret = 7841;
3572         break;
3573       case 7842:
3574         ret = 7843;
3575         break;
3576       case 7844:
3577         ret = 7845;
3578         break;
3579       case 7846:
3580         ret = 7847;
3581         break;
3582       case 7848:
3583         ret = 7849;
3584         break;
3585       case 7850:
3586         ret = 7851;
3587         break;
3588       case 7852:
3589         ret = 7853;
3590         break;
3591       case 7854:
3592         ret = 7855;
3593         break;
3594       case 7856:
3595         ret = 7857;
3596         break;
3597       case 7858:
3598         ret = 7859;
3599         break;
3600       case 7860:
3601         ret = 7861;
3602         break;
3603       case 7862:
3604         ret = 7863;
3605         break;
3606       case 7864:
3607         ret = 7865;
3608         break;
3609       case 7866:
3610         ret = 7867;
3611         break;
3612       case 7868:
3613         ret = 7869;
3614         break;
3615       case 7870:
3616         ret = 7871;
3617         break;
3618       case 7872:
3619         ret = 7873;
3620         break;
3621       case 7874:
3622         ret = 7875;
3623         break;
3624       case 7876:
3625         ret = 7877;
3626         break;
3627       case 7878:
3628         ret = 7879;
3629         break;
3630       case 7880:
3631         ret = 7881;
3632         break;
3633       case 7882:
3634         ret = 7883;
3635         break;
3636       case 7884:
3637         ret = 7885;
3638         break;
3639       case 7886:
3640         ret = 7887;
3641         break;
3642       case 7888:
3643         ret = 7889;
3644         break;
3645       case 7890:
3646         ret = 7891;
3647         break;
3648       case 7892:
3649         ret = 7893;
3650         break;
3651       case 7894:
3652         ret = 7895;
3653         break;
3654       case 7896:
3655         ret = 7897;
3656         break;
3657       case 7898:
3658         ret = 7899;
3659         break;
3660       case 7900:
3661         ret = 7901;
3662         break;
3663       case 7902:
3664         ret = 7903;
3665         break;
3666       case 7904:
3667         ret = 7905;
3668         break;
3669       case 7906:
3670         ret = 7907;
3671         break;
3672       case 7908:
3673         ret = 7909;
3674         break;
3675       case 7910:
3676         ret = 7911;
3677         break;
3678       case 7912:
3679         ret = 7913;
3680         break;
3681       case 7914:
3682         ret = 7915;
3683         break;
3684       case 7916:
3685         ret = 7917;
3686         break;
3687       case 7918:
3688         ret = 7919;
3689         break;
3690       case 7920:
3691         ret = 7921;
3692         break;
3693       case 7922:
3694         ret = 7923;
3695         break;
3696       case 7924:
3697         ret = 7925;
3698         break;
3699       case 7926:
3700         ret = 7927;
3701         break;
3702       case 7928:
3703         ret = 7929;
3704         break;
3705       case 7944:
3706         ret = 7936;
3707         break;
3708       case 7945:
3709         ret = 7937;
3710         break;
3711       case 7946:
3712         ret = 7938;
3713         break;
3714       case 7947:
3715         ret = 7939;
3716         break;
3717       case 7948:
3718         ret = 7940;
3719         break;
3720       case 7949:
3721         ret = 7941;
3722         break;
3723       case 7950:
3724         ret = 7942;
3725         break;
3726       case 7951:
3727         ret = 7943;
3728         break;
3729       case 7960:
3730         ret = 7952;
3731         break;
3732       case 7961:
3733         ret = 7953;
3734         break;
3735       case 7962:
3736         ret = 7954;
3737         break;
3738       case 7963:
3739         ret = 7955;
3740         break;
3741       case 7964:
3742         ret = 7956;
3743         break;
3744       case 7965:
3745         ret = 7957;
3746         break;
3747       case 7976:
3748         ret = 7968;
3749         break;
3750       case 7977:
3751         ret = 7969;
3752         break;
3753       case 7978:
3754         ret = 7970;
3755         break;
3756       case 7979:
3757         ret = 7971;
3758         break;
3759       case 7980:
3760         ret = 7972;
3761         break;
3762       case 7981:
3763         ret = 7973;
3764         break;
3765       case 7982:
3766         ret = 7974;
3767         break;
3768       case 7983:
3769         ret = 7975;
3770         break;
3771       case 7992:
3772         ret = 7984;
3773         break;
3774       case 7993:
3775         ret = 7985;
3776         break;
3777       case 7994:
3778         ret = 7986;
3779         break;
3780       case 7995:
3781         ret = 7987;
3782         break;
3783       case 7996:
3784         ret = 7988;
3785         break;
3786       case 7997:
3787         ret = 7989;
3788         break;
3789       case 7998:
3790         ret = 7990;
3791         break;
3792       case 7999:
3793         ret = 7991;
3794         break;
3795       case 8008:
3796         ret = 8000;
3797         break;
3798       case 8009:
3799         ret = 8001;
3800         break;
3801       case 8010:
3802         ret = 8002;
3803         break;
3804       case 8011:
3805         ret = 8003;
3806         break;
3807       case 8012:
3808         ret = 8004;
3809         break;
3810       case 8013:
3811         ret = 8005;
3812         break;
3813       case 8025:
3814         ret = 8017;
3815         break;
3816       case 8027:
3817         ret = 8019;
3818         break;
3819       case 8029:
3820         ret = 8021;
3821         break;
3822       case 8031:
3823         ret = 8023;
3824         break;
3825       case 8040:
3826         ret = 8032;
3827         break;
3828       case 8041:
3829         ret = 8033;
3830         break;
3831       case 8042:
3832         ret = 8034;
3833         break;
3834       case 8043:
3835         ret = 8035;
3836         break;
3837       case 8044:
3838         ret = 8036;
3839         break;
3840       case 8045:
3841         ret = 8037;
3842         break;
3843       case 8046:
3844         ret = 8038;
3845         break;
3846       case 8047:
3847         ret = 8039;
3848         break;
3849       case 8072:
3850         ret = 8064;
3851         break;
3852       case 8073:
3853         ret = 8065;
3854         break;
3855       case 8074:
3856         ret = 8066;
3857         break;
3858       case 8075:
3859         ret = 8067;
3860         break;
3861       case 8076:
3862         ret = 8068;
3863         break;
3864       case 8077:
3865         ret = 8069;
3866         break;
3867       case 8078:
3868         ret = 8070;
3869         break;
3870       case 8079:
3871         ret = 8071;
3872         break;
3873       case 8088:
3874         ret = 8080;
3875         break;
3876       case 8089:
3877         ret = 8081;
3878         break;
3879       case 8090:
3880         ret = 8082;
3881         break;
3882       case 8091:
3883         ret = 8083;
3884         break;
3885       case 8092:
3886         ret = 8084;
3887         break;
3888       case 8093:
3889         ret = 8085;
3890         break;
3891       case 8094:
3892         ret = 8086;
3893         break;
3894       case 8095:
3895         ret = 8087;
3896         break;
3897       case 8104:
3898         ret = 8096;
3899         break;
3900       case 8105:
3901         ret = 8097;
3902         break;
3903       case 8106:
3904         ret = 8098;
3905         break;
3906       case 8107:
3907         ret = 8099;
3908         break;
3909       case 8108:
3910         ret = 8100;
3911         break;
3912       case 8109:
3913         ret = 8101;
3914         break;
3915       case 8110:
3916         ret = 8102;
3917         break;
3918       case 8111:
3919         ret = 8103;
3920         break;
3921       case 8120:
3922         ret = 8112;
3923         break;
3924       case 8121:
3925         ret = 8113;
3926         break;
3927       case 8122:
3928         ret = 8048;
3929         break;
3930       case 8123:
3931         ret = 8049;
3932         break;
3933       case 8124:
3934         ret = 8115;
3935         break;
3936       case 8136:
3937         ret = 8050;
3938         break;
3939       case 8137:
3940         ret = 8051;
3941         break;
3942       case 8138:
3943         ret = 8052;
3944         break;
3945       case 8139:
3946         ret = 8053;
3947         break;
3948       case 8140:
3949         ret = 8131;
3950         break;
3951       case 8152:
3952         ret = 8144;
3953         break;
3954       case 8153:
3955         ret = 8145;
3956         break;
3957       case 8154:
3958         ret = 8054;
3959         break;
3960       case 8155:
3961         ret = 8055;
3962         break;
3963       case 8168:
3964         ret = 8160;
3965         break;
3966       case 8169:
3967         ret = 8161;
3968         break;
3969       case 8170:
3970         ret = 8058;
3971         break;
3972       case 8171:
3973         ret = 8059;
3974         break;
3975       case 8172:
3976         ret = 8165;
3977         break;
3978       case 8184:
3979         ret = 8056;
3980         break;
3981       case 8185:
3982         ret = 8057;
3983         break;
3984       case 8186:
3985         ret = 8060;
3986         break;
3987       case 8187:
3988         ret = 8061;
3989         break;
3990       case 8188:
3991         ret = 8179;
3992         break;
3993       case 8544:
3994         ret = 8560;
3995         break;
3996       case 8545:
3997         ret = 8561;
3998         break;
3999       case 8546:
4000         ret = 8562;
4001         break;
4002       case 8547:
4003         ret = 8563;
4004         break;
4005       case 8548:
4006         ret = 8564;
4007         break;
4008       case 8549:
4009         ret = 8565;
4010         break;
4011       case 8550:
4012         ret = 8566;
4013         break;
4014       case 8551:
4015         ret = 8567;
4016         break;
4017       case 8552:
4018         ret = 8568;
4019         break;
4020       case 8553:
4021         ret = 8569;
4022         break;
4023       case 8554:
4024         ret = 8570;
4025         break;
4026       case 8555:
4027         ret = 8571;
4028         break;
4029       case 8556:
4030         ret = 8572;
4031         break;
4032       case 8557:
4033         ret = 8573;
4034         break;
4035       case 8558:
4036         ret = 8574;
4037         break;
4038       case 8559:
4039         ret = 8575;
4040         break;
4041       case 9398:
4042         ret = 9424;
4043         break;
4044       case 9399:
4045         ret = 9425;
4046         break;
4047       case 9400:
4048         ret = 9426;
4049         break;
4050       case 9401:
4051         ret = 9427;
4052         break;
4053       case 9402:
4054         ret = 9428;
4055         break;
4056       case 9403:
4057         ret = 9429;
4058         break;
4059       case 9404:
4060         ret = 9430;
4061         break;
4062       case 9405:
4063         ret = 9431;
4064         break;
4065       case 9406:
4066         ret = 9432;
4067         break;
4068       case 9407:
4069         ret = 9433;
4070         break;
4071       case 9408:
4072         ret = 9434;
4073         break;
4074       case 9409:
4075         ret = 9435;
4076         break;
4077       case 9410:
4078         ret = 9436;
4079         break;
4080       case 9411:
4081         ret = 9437;
4082         break;
4083       case 9412:
4084         ret = 9438;
4085         break;
4086       case 9413:
4087         ret = 9439;
4088         break;
4089       case 9414:
4090         ret = 9440;
4091         break;
4092       case 9415:
4093         ret = 9441;
4094         break;
4095       case 9416:
4096         ret = 9442;
4097         break;
4098       case 9417:
4099         ret = 9443;
4100         break;
4101       case 9418:
4102         ret = 9444;
4103         break;
4104       case 9419:
4105         ret = 9445;
4106         break;
4107       case 9420:
4108         ret = 9446;
4109         break;
4110       case 9421:
4111         ret = 9447;
4112         break;
4113       case 9422:
4114         ret = 9448;
4115         break;
4116       case 9423:
4117         ret = 9449;
4118         break;
4119       case 65313:
4120         ret = 65345;
4121         break;
4122       case 65314:
4123         ret = 65346;
4124         break;
4125       case 65315:
4126         ret = 65347;
4127         break;
4128       case 65316:
4129         ret = 65348;
4130         break;
4131       case 65317:
4132         ret = 65349;
4133         break;
4134       case 65318:
4135         ret = 65350;
4136         break;
4137       case 65319:
4138         ret = 65351;
4139         break;
4140       case 65320:
4141         ret = 65352;
4142         break;
4143       case 65321:
4144         ret = 65353;
4145         break;
4146       case 65322:
4147         ret = 65354;
4148         break;
4149       case 65323:
4150         ret = 65355;
4151         break;
4152       case 65324:
4153         ret = 65356;
4154         break;
4155       case 65325:
4156         ret = 65357;
4157         break;
4158       case 65326:
4159         ret = 65358;
4160         break;
4161       case 65327:
4162         ret = 65359;
4163         break;
4164       case 65328:
4165         ret = 65360;
4166         break;
4167       case 65329:
4168         ret = 65361;
4169         break;
4170       case 65330:
4171         ret = 65362;
4172         break;
4173       case 65331:
4174         ret = 65363;
4175         break;
4176       case 65332:
4177         ret = 65364;
4178         break;
4179       case 65333:
4180         ret = 65365;
4181         break;
4182       case 65334:
4183         ret = 65366;
4184         break;
4185       case 65335:
4186         ret = 65367;
4187         break;
4188       case 65336:
4189         ret = 65368;
4190         break;
4191       case 65337:
4192         ret = 65369;
4193         break;
4194       case 65338:
4195         ret = 65370;
4196         break;
4197       }
4198       return (char) ret;
4199     }
4200     return Character.toLowerCase(c);
4201   }
4202
4203   /** Convert a String to title case. */
4204   public static String toTitleCase(String s)
4205   {
4206     StringBuffer sb = new StringBuffer();
4207     for (int i = 0; i < s.length(); i++)
4208     {
4209       sb.append(CaseMgr.toTitleCase(s.charAt(i)));
4210     }
4211     return sb.toString();
4212   }
4213
4214   /** Convert a String to upper case. */
4215   public static String toUpperCase(String s)
4216   {
4217     StringBuffer sb = new StringBuffer();
4218     for (int i = 0; i < s.length(); i++)
4219     {
4220       sb.append(CaseMgr.toUpperCase(s.charAt(i)));
4221     }
4222     return sb.toString();
4223   }
4224
4225   /** Convert a String to lower case. */
4226   public static String toLowerCase(String s)
4227   {
4228     StringBuffer sb = new StringBuffer();
4229     for (int i = 0; i < s.length(); i++)
4230     {
4231       sb.append(CaseMgr.toLowerCase(s.charAt(i)));
4232     }
4233     return sb.toString();
4234   }
4235
4236   /** Convert a character to title case. */
4237   public static char toTitleCase(char c)
4238   {
4239     if (java_1_0)
4240     {
4241       int ret = (int) toUpperCase(c);
4242       switch (c)
4243       {
4244       case 452:
4245         ret = 453;
4246         break;
4247       case 453:
4248         ret = 453;
4249         break;
4250       case 454:
4251         ret = 453;
4252         break;
4253       case 455:
4254         ret = 456;
4255         break;
4256       case 456:
4257         ret = 456;
4258         break;
4259       case 457:
4260         ret = 456;
4261         break;
4262       case 458:
4263         ret = 459;
4264         break;
4265       case 459:
4266         ret = 459;
4267         break;
4268       case 460:
4269         ret = 459;
4270         break;
4271       case 497:
4272         ret = 498;
4273         break;
4274       case 498:
4275         ret = 498;
4276         break;
4277       case 499:
4278         ret = 498;
4279         break;
4280       }
4281       return (char) ret;
4282     }
4283     return Character.toTitleCase(c);
4284   }
4285
4286   /**
4287    * Duplicates the regionMatches routine of String -- but makes use of the
4288    * definitions of upper, lower, and title case in this class when ignoreCase
4289    * is set.
4290    */
4291   public static boolean regionMatches(StringLike s1, boolean ign, int i1,
4292           StringLike s2, int i2, int i3)
4293   {
4294     int itot = i2 + i3;
4295     if (itot > s2.length() || i1 + i3 > s1.length())
4296     {
4297       return false;
4298     }
4299     if (!ign)
4300     {
4301       for (int i = i2; i < itot; i++)
4302       {
4303         if (s2.charAt(i) != s1.charAt(i1++))
4304         {
4305           return false;
4306         }
4307       }
4308     }
4309     else
4310     {
4311       for (int i = i2; i < itot; i++)
4312       {
4313         if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
4314         {
4315           return false;
4316         }
4317       }
4318     }
4319     return true;
4320   }
4321
4322   /**
4323    * Duplicates the regionMatches routine of String -- but makes use of the
4324    * definitions of upper, lower, and title case in this class when ignoreCase
4325    * is set.
4326    */
4327   public static boolean regionMatches(String s1, boolean ign, int i1,
4328           StringLike s2, int i2, int i3)
4329   {
4330     int itot = i2 + i3;
4331     if (itot > s2.length() || i1 + i3 > s1.length())
4332     {
4333       return false;
4334     }
4335     if (!ign)
4336     {
4337       for (int i = i2; i < itot; i++)
4338       {
4339         if (s2.charAt(i) != s1.charAt(i1++))
4340         {
4341           return false;
4342         }
4343       }
4344     }
4345     else
4346     {
4347       for (int i = i2; i < itot; i++)
4348       {
4349         if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
4350         {
4351           return false;
4352         }
4353       }
4354     }
4355     return true;
4356   }
4357
4358   /**
4359    * Duplicates the regionMatches routine of String -- but makes use of the
4360    * definitions of upper, lower, and title case in this class when ignoreCase
4361    * is set.
4362    */
4363   public static boolean regionMatches(StringLike s1, boolean ign, int i1,
4364           String s2, int i2, int i3)
4365   {
4366     int itot = i2 + i3;
4367     if (itot > s2.length() || i1 + i3 > s1.length())
4368     {
4369       return false;
4370     }
4371     if (!ign)
4372     {
4373       for (int i = i2; i < itot; i++)
4374       {
4375         if (s2.charAt(i) != s1.charAt(i1++))
4376         {
4377           return false;
4378         }
4379       }
4380     }
4381     else
4382     {
4383       for (int i = i2; i < itot; i++)
4384       {
4385         if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
4386         {
4387           return false;
4388         }
4389       }
4390     }
4391     return true;
4392   }
4393
4394   /**
4395    * Duplicates the regionMatches routine of String -- but makes use of the
4396    * definitions of upper, lower, and title case in this class when ignoreCase
4397    * is set.
4398    */
4399   public static boolean regionMatches(String s1, boolean ign, int i1,
4400           String s2, int i2, int i3)
4401   {
4402     int itot = i2 + i3;
4403     if (itot > s2.length() || i1 + i3 > s1.length())
4404     {
4405       return false;
4406     }
4407     if (!ign)
4408     {
4409       for (int i = i2; i < itot; i++)
4410       {
4411         if (s2.charAt(i) != s1.charAt(i1++))
4412         {
4413           return false;
4414         }
4415       }
4416     }
4417     else
4418     {
4419       for (int i = i2; i < itot; i++)
4420       {
4421         if (toLowerCase(s2.charAt(i)) != toLowerCase(s1.charAt(i1++)))
4422         {
4423           return false;
4424         }
4425       }
4426     }
4427     return true;
4428   }
4429 }