home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / jbuilder / unsupported / JDK1.2beta3 / SOURCE / SRC.ZIP / java / lang / Character.java < prev    next >
Encoding:
Java Source  |  1998-03-20  |  129.2 KB  |  2,795 lines

  1. /*
  2.  * @(#)Character.java    1.47 98/03/18
  3.  *
  4.  * Copyright 1994-1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  *
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. package java.lang;
  16.  
  17. /**
  18.  * The Character class wraps a value of the primitive type <code>char</code> 
  19.  * in an object. An object of type <code>Character</code> contains a 
  20.  * single field whose type is <code>char</code>. 
  21.  * <p>
  22.  * In addition, this class provides several methods for determining 
  23.  * the type of a character and converting characters from uppercase 
  24.  * to lowercase and vice versa. 
  25.  * <p>
  26.  * Many of the methods of class <code>Character</code> are defined 
  27.  * in terms of a "Unicode attribute table" that specifies 
  28.  * a name for every defined Unicode code point. The table also 
  29.  * includes other attributes, such as a decimal value, an uppercase 
  30.  * equivalent, a lowercase equivalent, and/or a titlecase equivalent. 
  31.  * The Unicode attribute table is available on the World Wide Web as 
  32.  * the file:
  33.  * <blockquote><pre>
  34.  *   ftp://unicode.org/pub/MappingTables/UnicodeData1.1.5.txt
  35.  * </pre></blockquote>
  36.  * <p>
  37.  * For a more detailed specification of the <code>Character</code> 
  38.  * class, one that encompasses the exact behavior of methods such as 
  39.  * <code>isDigit</code>, <code>isLetter</code>, 
  40.  * <code>isLowerCase</code>, and <code>isUpperCase</code> over the 
  41.  * full range of Unicode values, see Gosling, Joy, and Steele, <i>The 
  42.  * Java Language Specification</i>. 
  43.  *
  44.  * @author  Lee Boynton
  45.  * @author  Guy Steele
  46.  * @author  Akira Tanaka
  47.  * @version 1.47 03/18/98
  48.  * @since   JDK1.0
  49.  */
  50. public final
  51. class Character extends Object implements java.io.Serializable, Comparable {
  52.     /**
  53.      * The minimum radix available for conversion to and from Strings.  
  54.      * The constant value of this field is the smallest value permitted 
  55.      * for the radix argument in radix-conversion methods such as the 
  56.      * <code>digit</code> method, the <code>forDigit</code>
  57.      * method, and the <code>toString</code> method of class 
  58.      * <code>Integer</code>. 
  59.      *
  60.      * @see     java.lang.Character#digit(char, int)
  61.      * @see     java.lang.Character#forDigit(int, int)
  62.      * @see     java.lang.Integer#toString(int, int)
  63.      * @see     java.lang.Integer#valueOf(java.lang.String)
  64.      */
  65.     public static final int MIN_RADIX = 2;
  66.  
  67.     /**
  68.      * The maximum radix available for conversion to and from Strings.
  69.      * The constant value of this field is the largest value permitted 
  70.      * for the radix argument in radix-conversion methods such as the 
  71.      * <code>digit</code> method, the <code>forDigit</code>
  72.      * method, and the <code>toString</code> method of class 
  73.      * <code>Integer</code>. 
  74.      *
  75.      * @see     java.lang.Character#digit(char, int)
  76.      * @see     java.lang.Character#forDigit(int, int)
  77.      * @see     java.lang.Integer#toString(int, int)
  78.      * @see     java.lang.Integer#valueOf(java.lang.String)
  79.      */
  80.     public static final int MAX_RADIX = 36;
  81.  
  82.     /**
  83.      * The constant value of this field is the smallest value of type 
  84.      * <code>char</code>.
  85.      *
  86.      * @since   JDK1.0.2
  87.      */
  88.     public static final char   MIN_VALUE = '\u0000';
  89.  
  90.     /**
  91.      * The constant value of this field is the largest value of type 
  92.      * <code>char</code>.
  93.      *
  94.      * @since   JDK1.0.2
  95.      */
  96.     public static final char   MAX_VALUE = '\uffff';
  97.     
  98.     /**
  99.      * The Class object representing the primitive type char.
  100.      *
  101.      * @since   JDK1.1
  102.      */
  103.     public static final Class    TYPE = Class.getPrimitiveClass("char");
  104.     
  105.     /*
  106.      * Public data for enumerated Unicode general category types
  107.      *
  108.      * @since   JDK1.1
  109.      */
  110.     public static final byte
  111.     UNASSIGNED        = 0,
  112.     UPPERCASE_LETTER    = 1,
  113.     LOWERCASE_LETTER    = 2,
  114.     TITLECASE_LETTER    = 3,
  115.     MODIFIER_LETTER        = 4,
  116.     OTHER_LETTER        = 5,
  117.     NON_SPACING_MARK    = 6,
  118.     ENCLOSING_MARK        = 7,
  119.     COMBINING_SPACING_MARK    = 8,
  120.     DECIMAL_DIGIT_NUMBER    = 9,
  121.     LETTER_NUMBER        = 10,
  122.     OTHER_NUMBER        = 11,
  123.     SPACE_SEPARATOR        = 12,
  124.     LINE_SEPARATOR        = 13,
  125.     PARAGRAPH_SEPARATOR    = 14,
  126.     CONTROL            = 15,
  127.     FORMAT            = 16,
  128.     PRIVATE_USE        = 18,
  129.     SURROGATE        = 19,
  130.     DASH_PUNCTUATION    = 20,
  131.     START_PUNCTUATION    = 21,
  132.     END_PUNCTUATION        = 22,
  133.     CONNECTOR_PUNCTUATION    = 23,
  134.     OTHER_PUNCTUATION    = 24,
  135.     MATH_SYMBOL        = 25,
  136.     CURRENCY_SYMBOL        = 26,
  137.     MODIFIER_SYMBOL        = 27,
  138.     OTHER_SYMBOL        = 28;
  139.  
  140.     /**
  141.      * Constants for subsets of the Unicode character set. The first set
  142.      * of constants corresponds strictly to Unicode character blocks as
  143.      * defined in The Unicode Standard Version 2.0. The second set is defined
  144.      * more losely and application-oriented, accounting in particular for
  145.      * subsets of the unified Han range and characters defined after Unicode 2.0.
  146.      */
  147.     public static class Subset {
  148.     
  149.         /* private constructor so that our constants are the only instances of this class */
  150.         private Subset() {
  151.         }
  152.         
  153.         /**
  154.          * Compares two objects for equality. This version only returns true
  155.          * for <code>x.equals(y)</code> if <code>x</code> and <code>y</code> refer
  156.          * to the same object, and guarantees this for all subclasses.
  157.          */
  158.         public final boolean equals(Object obj) {
  159.         return (this == obj);
  160.         }
  161.     
  162.         /** Constant for the Unicode character block of the same name. */
  163.         public static final Subset BASIC_LATIN = new Subset();
  164.         /** Constant for the Unicode character block of the same name. */
  165.         public static final Subset LATIN_1_SUPPLEMENT = new Subset();
  166.         /** Constant for the Unicode character block of the same name. */
  167.         public static final Subset LATIN_EXTENDED_A = new Subset();
  168.         /** Constant for the Unicode character block of the same name. */
  169.         public static final Subset LATIN_EXTENDED_B = new Subset();
  170.        /** Constant for the Unicode character block of the same name. */
  171.         public static final Subset IPA_EXTENSIONS = new Subset();
  172.         /** Constant for the Unicode character block of the same name. */
  173.         public static final Subset SPACING_MODIFIER_LETTERS = new Subset();
  174.         /** Constant for the Unicode character block of the same name. */
  175.         public static final Subset COMBINING_DIACRITICAL_MARKS = new Subset();
  176.         /** Constant for the Unicode character block of the same name. */
  177.         public static final Subset GREEK = new Subset();
  178.         /** Constant for the Unicode character block of the same name. */
  179.         public static final Subset CYRILLIC = new Subset();
  180.         /** Constant for the Unicode character block of the same name. */
  181.         public static final Subset ARMENIAN = new Subset();
  182.         /** Constant for the Unicode character block of the same name. */
  183.         public static final Subset HEBREW = new Subset();
  184.         /** Constant for the Unicode character block of the same name. */
  185.         public static final Subset ARABIC = new Subset();
  186.         /** Constant for the Unicode character block of the same name. */
  187.         public static final Subset DEVANAGARI = new Subset();
  188.         /** Constant for the Unicode character block of the same name. */
  189.         public static final Subset BENGALI = new Subset();
  190.         /** Constant for the Unicode character block of the same name. */
  191.         public static final Subset GURMUKHI = new Subset();
  192.         /** Constant for the Unicode character block of the same name. */
  193.         public static final Subset GUJARATI = new Subset();
  194.         /** Constant for the Unicode character block of the same name. */
  195.         public static final Subset ORIYA = new Subset();
  196.         /** Constant for the Unicode character block of the same name. */
  197.         public static final Subset TAMIL = new Subset();
  198.         /** Constant for the Unicode character block of the same name. */
  199.         public static final Subset TELUGU = new Subset();
  200.         /** Constant for the Unicode character block of the same name. */
  201.         public static final Subset KANNADA = new Subset();
  202.         /** Constant for the Unicode character block of the same name. */
  203.         public static final Subset MALAYALAM = new Subset();
  204.         /** Constant for the Unicode character block of the same name. */
  205.         public static final Subset THAI = new Subset();
  206.         /** Constant for the Unicode character block of the same name. */
  207.         public static final Subset LAO = new Subset();
  208.         /** Constant for the Unicode character block of the same name. */
  209.         public static final Subset TIBETAN = new Subset();
  210.         /** Constant for the Unicode character block of the same name. */
  211.         public static final Subset GEORGIAN = new Subset();
  212.         /** Constant for the Unicode character block of the same name. */
  213.         public static final Subset HANGUL_JAMO = new Subset();
  214.         /** Constant for the Unicode character block of the same name. */
  215.         public static final Subset LATIN_EXTENDED_ADDITIONAL = new Subset();
  216.         /** Constant for the Unicode character block of the same name. */
  217.         public static final Subset GREEK_EXTENDED = new Subset();
  218.         /** Constant for the Unicode character block of the same name. */
  219.         public static final Subset GENERAL_PUNCTUATION = new Subset();
  220.         /** Constant for the Unicode character block of the same name. */
  221.         public static final Subset SUPERSCRIPTS_AND_SUBSCRIPTS = new Subset();
  222.         /** Constant for the Unicode character block of the same name. */
  223.         public static final Subset CURRENCY_SYMBOLS = new Subset();
  224.         /** Constant for the Unicode character block of the same name. */
  225.         public static final Subset COMBINING_MARKS_FOR_SYMBOLS = new Subset();
  226.         /** Constant for the Unicode character block of the same name. */
  227.         public static final Subset LETTERLIKE_SYMBOLS = new Subset();
  228.         /** Constant for the Unicode character block of the same name. */
  229.         public static final Subset NUMBER_FORMS = new Subset();
  230.         /** Constant for the Unicode character block of the same name. */
  231.         public static final Subset ARROWS = new Subset();
  232.         /** Constant for the Unicode character block of the same name. */
  233.         public static final Subset MATHEMATICAL_OPERATORS = new Subset();
  234.         /** Constant for the Unicode character block of the same name. */
  235.         public static final Subset MISCELLANEOUS_TECHNICAL = new Subset();
  236.         /** Constant for the Unicode character block of the same name. */
  237.         public static final Subset CONTROL_PICTURES = new Subset();
  238.         /** Constant for the Unicode character block of the same name. */
  239.         public static final Subset OPTICAL_CHARACTER_RECOGNITION = new Subset();
  240.         /** Constant for the Unicode character block of the same name. */
  241.         public static final Subset ENCLOSED_ALPHANUMERICS = new Subset();
  242.         /** Constant for the Unicode character block of the same name. */
  243.         public static final Subset BOX_DRAWING = new Subset();
  244.         /** Constant for the Unicode character block of the same name. */
  245.         public static final Subset BLOCK_ELEMENTS = new Subset();
  246.         /** Constant for the Unicode character block of the same name. */
  247.         public static final Subset GEOMETRIC_SHAPES = new Subset();
  248.         /** Constant for the Unicode character block of the same name. */
  249.         public static final Subset MISCELLANEOUS_SYMBOLS = new Subset();
  250.         /** Constant for the Unicode character block of the same name. */
  251.         public static final Subset DINGBATS = new Subset();
  252.         /** Constant for the Unicode character block of the same name. */
  253.         public static final Subset CJK_SYMBOLS_AND_PUNCTUATION = new Subset();
  254.         /** Constant for the Unicode character block of the same name. */
  255.         public static final Subset HIRAGANA = new Subset();
  256.         /** Constant for the Unicode character block of the same name. */
  257.         public static final Subset KATAKANA = new Subset();
  258.         /** Constant for the Unicode character block of the same name. */
  259.         public static final Subset BOPOMOFO = new Subset();
  260.         /** Constant for the Unicode character block of the same name. */
  261.         public static final Subset HANGUL_COMPATIBILITY_JAMO = new Subset();
  262.         /** Constant for the Unicode character block of the same name. */
  263.         public static final Subset KANBUN = new Subset();
  264.         /** Constant for the Unicode character block of the same name. */
  265.         public static final Subset ENCLOSED_CJK_LETTERS_AND_MONTHS = new Subset();
  266.         /** Constant for the Unicode character block of the same name. */
  267.         public static final Subset CJK_COMPATIBILITY = new Subset();
  268.         /** Constant for the Unicode character block of the same name. */
  269.         public static final Subset CJK_UNIFIED_IDEOGRAPHS = new Subset();
  270.         /** Constant for the Unicode character block of the same name. */
  271.         public static final Subset HANGUL_SYLLABLES = new Subset();
  272.         /** Constant for the Unicode character block of the same name. */
  273.         public static final Subset SURROGATES_AREA = new Subset();
  274.         /** Constant for the Unicode character block of the same name. */
  275.         public static final Subset PRIVATE_USE_AREA = new Subset();
  276.         /** Constant for the Unicode character block of the same name. */
  277.         public static final Subset CJK_COMPATIBILITY_IDEOGRAPHS = new Subset();
  278.         /** Constant for the Unicode character block of the same name. */
  279.         public static final Subset ALPHABETIC_PRESENTATION_FORMS = new Subset();
  280.         /** Constant for the Unicode character block of the same name. */
  281.         public static final Subset ARABIC_PRESENTATION_FORMS_A = new Subset();
  282.         /** Constant for the Unicode character block of the same name. */
  283.         public static final Subset COMBINING_HALF_MARKS = new Subset();
  284.         /** Constant for the Unicode character block of the same name. */
  285.         public static final Subset CJK_COMPATIBILITY_FORMS = new Subset();
  286.         /** Constant for the Unicode character block of the same name. */
  287.         public static final Subset SMALL_FORM_VARIANTS = new Subset();
  288.         /** Constant for the Unicode character block of the same name. */
  289.         public static final Subset ARABIC_PRESENTATION_FORMS_B = new Subset();
  290.         /** Constant for the Unicode character block of the same name. */
  291.         public static final Subset HALFWIDTH_AND_FULLWIDTH_FORMS = new Subset();
  292.         /** Constant for the Unicode character block of the same name. */
  293.         public static final Subset SPECIALS = new Subset();
  294.     
  295.         /**
  296.          * Constant for all Latin characters, including the characters
  297.          * in the BASIC_LATIN, LATIN_1_SUPPLEMENT, LATIN_EXTENDED_A,
  298.          * LATIN_EXTENDED_B character blocks.
  299.          */
  300.         public static final Subset LATIN = new Subset();
  301.         
  302.         /**
  303.          * Constant for the digits included in the BASIC_LATIN character block.
  304.          */
  305.         public static final Subset LATIN_DIGITS = new Subset();
  306.         
  307.         /**
  308.          * Constant for all Han characters used in writing Traditional Chinese,
  309.          * including a subset of the CJK unified ideographs as well as
  310.          * Traditional Chinese Han characters that may be defined as
  311.          * surrogate characters.
  312.          */
  313.         public static final Subset TRADITIONAL_HANZI = new Subset();
  314.         
  315.         /**
  316.          * Constant for all Han characters used in writing Simplified Chinese,
  317.          * including a subset of the CJK unified ideographs as well as
  318.          * Simplified Chinese Han characters that may be defined as
  319.          * surrogate characters.
  320.          */
  321.         public static final Subset SIMPLIFIED_HANZI = new Subset();
  322.         
  323.         /**
  324.          * Constant for all Han characters used in writing Japanese,
  325.          * including a subset
  326.          * of the CJK unified ideographs as well as Japanese Han
  327.          * characters that may be defined as surrogate characters.
  328.          */
  329.         public static final Subset KANJI = new Subset();
  330.         
  331.         /**
  332.          * Constant for all Han characters used in writing Korean,
  333.          * including a subset
  334.          * of the CJK unified ideographs as well as Korean Han characters
  335.          * that may be defined as surrogate characters.
  336.          */
  337.         public static final Subset HANJA = new Subset();
  338.         
  339.         /**
  340.          * Constant for the halfwidth katakana subset of the Unicode
  341.          * halfwidth and fullwidth forms character block.
  342.          */
  343.         public static final Subset HALFWIDTH_KATAKANA = new Subset();
  344.         
  345.     }
  346.     
  347.     /**
  348.      * The value of the Character.
  349.      */
  350.     private char value;
  351.  
  352.     /** use serialVersionUID from JDK 1.0.2 for interoperability */
  353.     private static final long serialVersionUID = 3786198910865385080L;
  354.  
  355.     /**
  356.      * Constructs a <code>Character</code> object and initializes it so 
  357.      * that it represents the primitive <code>value</code> argument. 
  358.      *
  359.      * @param  value   value for the new <code>Character</code> object.
  360.      */
  361.     public Character(char value) {
  362.     this.value = value;
  363.     }
  364.  
  365.     /**
  366.      * Returns the value of this Character object.
  367.      * @return  the primitive <code>char</code> value represented by
  368.      *          this object.
  369.      */
  370.     public char charValue() {
  371.     return value;
  372.     }
  373.  
  374.     /**
  375.      * Returns a hash code for this Character.
  376.      * @return  a hash code value for this object. 
  377.      */
  378.     public int hashCode() {
  379.     return (int)value;
  380.     }
  381.  
  382.     /**
  383.      * Compares this object against the specified object.
  384.      * The result is <code>true</code> if and only if the argument is not 
  385.      * <code>null</code> and is a <code>Character</code> object that 
  386.      * represents the same <code>char</code> value as this object. 
  387.      *
  388.      * @param   obj   the object to compare with.
  389.      * @return  <code>true</code> if the objects are the same;
  390.      *          <code>false</code> otherwise.
  391.      */
  392.     public boolean equals(Object obj) {
  393.     if ((obj != null) && (obj instanceof Character)) {
  394.         return value == ((Character)obj).charValue();
  395.     } 
  396.     return false;
  397.     }
  398.  
  399.     /**
  400.      * Returns a String object representing this character's value.
  401.      * Converts this <code>Character</code> object to a string. The 
  402.      * result is a string whose length is <code>1</code>. The string's 
  403.      * sole component is the primitive <code>char</code> value represented 
  404.      * by this object. 
  405.      *
  406.      * @return  a string representation of this object.
  407.      */
  408.     public String toString() {
  409.     char buf[] = {value};
  410.     return String.valueOf(buf);
  411.     }
  412.  
  413.    /**
  414.      * Determines if the specified character is a lowercase character. 
  415.      * A character is lowercase if it is not in the range 
  416.      * <code>'\u2000'</code> through <code>'\u2FFF'</code>, the Unicode 
  417.      * attribute table does not specify a mapping to lowercase for the 
  418.      * character, and at least one of the following is true: 
  419.      * <ul>
  420.      * <li>The attribute table specifies a mapping to uppercase for the 
  421.      *     character. 
  422.      * <li>The name for the character contains the words "<code>SMALL 
  423.      *     LETTER</code>". 
  424.      * <li>The name for the character contains the words "<code>SMALL 
  425.      *     LIGATURE</code>". 
  426.      * </ul>
  427.      * <p> A character is considered to be lowercase if and only if
  428.      * it is specified to be lowercase by the Unicode 2.0 standard
  429.      * (category "Ll" in the Unicode specification data file).
  430.      * <p>
  431.      * Of the ISO-LATIN-1 characters (character codes 0x0000 through 0x00FF),
  432.      * the following are lowercase:
  433.      * <p><blockquote><pre>
  434.      * a b c d e f g h i j k l m n o p q r s t u v w x y z
  435.      * \u00DF \u00E0 \u00E1 \u00E2 \u00E3 \u00E4 \u00E5 \u00E6 \u00E7
  436.      * \u00E8 \u00E9 \u00EA \u00EB \u00EC \u00ED \u00EE \u00EF \u00F0
  437.      * \u00F1 \u00F2 \u00F3 \u00F4 \u00F5 \u00F6 \u00F8 \u00F9 \u00FA
  438.      * \u00FB \u00FC \u00FD \u00FE \u00FF
  439.      * </pre></blockquote>
  440.      * <p> Many other Unicode characters are lowercase, too.
  441.      *
  442.      * @param   ch   the character to be tested.
  443.      * @return  <code>true</code> if the character is lowercase;
  444.      *          <code>false</code> otherwise.
  445.      * @see     java.lang.Character#isLowerCase(char)
  446.      * @see     java.lang.Character#isTitleCase(char)
  447.      * @see     java.lang.Character#toLowerCase(char)
  448.      */
  449.     public static boolean isLowerCase(char ch) {
  450.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == LOWERCASE_LETTER;
  451.     }
  452.  
  453.    /**
  454.      * Determines if the specified character is an uppercase character. 
  455.      * A character is uppercase if it is not in the range 
  456.      * <code>'\u2000'</code> through <code>'\u2FFF'</code>, the Unicode 
  457.      * attribute table does not specify a mapping to uppercase for the 
  458.      * character, and at least one of the following is true: 
  459.      * <ul>
  460.      * <li>The attribute table specifies a mapping to lowercase for the
  461.      *     character. 
  462.      * <li>The name for the character contains the words 
  463.      *     "<code>CAPITAL LETTER</code>".
  464.      * <li>The name for the character contains the words
  465.      *     "<code>CAPITAL LIGATURE</code>".
  466.      * </ul>
  467.      * <p>
  468.      * Of the ISO-LATIN-1 characters (character codes 0x0000 through 0x00FF),
  469.      * the following are uppercase:
  470.      * <p><blockquote><pre>
  471.      * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  472.      * \u00C0 \u00C1 \u00C2 \u00C3 \u00C4 \u00C5 \u00C6 \u00C7
  473.      * \u00C8 \u00C9 \u00CA \u00CB \u00CC \u00CD \u00CE \u00CF \u00D0
  474.      * \u00D1 \u00D2 \u00D3 \u00D4 \u00D5 \u00D6 \u00D8 \u00D9 \u00DA
  475.      * \u00DB \u00DC \u00DD \u00DE
  476.      * </pre></blockquote>
  477.      * <p> Many other Unicode characters are uppercase, too.
  478.      *
  479.      * @param   ch   the character to be tested.
  480.      * @return  <code>true</code> if the character is uppercase;
  481.      *          <code>false</code> otherwise.
  482.      * @see     java.lang.Character#isLowerCase(char)
  483.      * @see     java.lang.Character#isTitleCase(char)
  484.      * @see     java.lang.Character#toUpperCase(char)
  485.      * @since   1.0
  486.      */
  487.     public static boolean isUpperCase(char ch) {
  488.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == UPPERCASE_LETTER;
  489.     }
  490.  
  491.     /**
  492.      * Determines if the specified character is a titlecase character.
  493.      * A character is considered to be titlecase if and only if
  494.      * it is specified to be titlecase by the Unicode 2.0 standard
  495.      * (category "Lt" in the Unicode specification data file).
  496.      * <p>
  497.      * The printed representations of four Unicode characters look like 
  498.      * pairs of Latin letters. For example, there is an uppercase letter 
  499.      * that looks like "LJ" and has a corresponding lowercase letter that 
  500.      * looks like "lj". A third form, which looks like "Lj", 
  501.      * is the appropriate form to use when rendering a word in lowercase 
  502.      * with initial capitals, as for a book title.
  503.      * <p>
  504.      * These are the Unicode characters for which this method returns 
  505.      * <code>true</code>: 
  506.      * <ul>
  507.      * <li><code>LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON</code> 
  508.      * <li><code>LATIN CAPITAL LETTER L WITH SMALL LETTER J</code> 
  509.      * <li><code>LATIN CAPITAL LETTER N WITH SMALL LETTER J</code> 
  510.      * <li><code>LATIN CAPITAL LETTER D WITH SMALL LETTER Z</code> 
  511.      * </ul>
  512.      *
  513.      * @param   ch   the character to be tested.
  514.      * @return  <code>true</code> if the character is titlecase;
  515.      *          <code>false</code> otherwise.
  516.      * @see     java.lang.Character#isLowerCase(char)
  517.      * @see     java.lang.Character#isUpperCase(char)
  518.      * @see     java.lang.Character#toTitleCase(char)
  519.      * @since   JDK1.0.2
  520.      */
  521.     public static boolean isTitleCase(char ch) {
  522.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == TITLECASE_LETTER;
  523.     }
  524.  
  525.     /**
  526.      * Determines if the specified character is a digit.
  527.      * A character is considered to be a digit if it is not in the range 
  528.      * <code>'\u2000' <= ch <= '\u2FFF'</code>
  529.      * and its Unicode name contains the word 
  530.      * "<code>DIGIT</code>". For a more complete 
  531.      * specification that encompasses all Unicode characters that are 
  532.      * defined as digits, see Gosling, Joy, and Steele, <i>The Java 
  533.      * Language Specification</i>.
  534.      * <p>
  535.      * These are the ranges of Unicode characters that are considered digits:
  536.      * <table>
  537.      * <tr><td>0x0030 through 0x0039</td>
  538.      *                        <td>ISO-LATIN-1 digits ('0' through '9')</td></tr>
  539.      * <tr><td>0x0660 through 0x0669</td>  <td>Arabic-Indic digits</td></tr>
  540.      * <tr><td>0x06F0 through 0x06F9</td>
  541.      *                                <td>Extended Arabic-Indic digits</td></tr>
  542.      * <tr><td>0x0966 through 0x096F</td>  <td>Devanagari digits</td></tr>
  543.      * <tr><td>0x09E6 through 0x09EF</td>  <td>Bengali digits</td></tr>
  544.      * <tr><td>0x0A66 through 0x0A6F</td>  <td>Gurmukhi digits</td></tr>
  545.      * <tr><td>0x0AE6 through 0x0AEF</td>  <td>Gujarati digits</td></tr>
  546.      * <tr><td>0x0B66 through 0x0B6F</td>  <td>Oriya digits</td></tr>
  547.      * <tr><td>0x0BE7 through 0x0BEF</td>  <td>Tamil digits</td></tr>
  548.      * <tr><td>0x0C66 through 0x0C6F</td>  <td>Telugu digits</td></tr>
  549.      * <tr><td>0x0CE6 through 0x0CEF</td>  <td>Kannada digits</td></tr>
  550.      * <tr><td>0x0D66 through 0x0D6F</td>  <td>Malayalam digits</td></tr>
  551.      * <tr><td>0x0E50 through 0x0E59</td>  <td>Thai digits</td></tr>
  552.      * <tr><td>0x0ED0 through 0x0ED9</td>  <td>Lao digits</td></tr>
  553.      * <tr><td>0x0F20 through 0x0F29</td>  <td>Tibetan digits</td></tr>
  554.      * <tr><td>0xFF10 through 0xFF19</td>  <td>Fullwidth digits</td></tr>
  555.      * </table>
  556.      *
  557.      * @param   ch   the character to be tested.
  558.      * @return  <code>true</code> if the character is a digit;
  559.      *          <code>false</code> otherwise.
  560.      * @see     java.lang.Character#digit(char, int)
  561.      * @see     java.lang.Character#forDigit(int, int)
  562.      */
  563.     public static boolean isDigit(char ch) {
  564.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) == DECIMAL_DIGIT_NUMBER;
  565.     }
  566.  
  567.     /**
  568.      * Determines if a character has a defined meaning in Unicode.
  569.      * A character is defined if at least one of the following is true: 
  570.      * <ul>
  571.      * <li>It has an entry in the Unicode attribute table. 
  572.      * <li>Its value is in the range 
  573.      *     <code>
  574.      *     '\u3040' <= ch <= '\u9FA5'</code>. 
  575.      * <li>Its value is in the range 
  576.      *     <code>
  577.      *     '\uF900' <= ch <= '\uFA2D'</code>. 
  578.      * </ul>
  579.      * 
  580.      * @param   ch   the character to be tested
  581.      * @return  <code>true</code> if the character has a defined meaning
  582.      *          in Unicode; <code>false</code> otherwise.
  583.      * @see     java.lang.Character#isDigit(char)
  584.      * @see     java.lang.Character#isLetter(char)
  585.      * @see     java.lang.Character#isLetterOrDigit(char)
  586.      * @see     java.lang.Character#isLowerCase(char)
  587.      * @see     java.lang.Character#isTitleCase(char)
  588.      * @see     java.lang.Character#isUpperCase(char)
  589.      * @since   JDK1.0.2
  590.      */
  591.     public static boolean isDefined(char ch) {
  592.     return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F) != UNASSIGNED;
  593.     }
  594.  
  595.     /**
  596.      * Determines if the specified character is a letter. For a 
  597.      * more complete specification that encompasses all Unicode 
  598.      * characters, see Gosling, Joy, and Steele, <i>The Java Language 
  599.      * Specification</i>. 
  600.      *
  601.      * <p> A character is considered to be a letter if and only if
  602.      * it is specified to be a letter by the Unicode 2.0 standard
  603.      * (category "Lu", "Ll", "Lt", "Lm", or "Lo" in the Unicode
  604.      * specification data file).
  605.      *
  606.      * <p> Note that most ideographic characters are considered
  607.      * to be letters (category "Lo") for this purpose.
  608.      *
  609.      * <p> Note also that not all letters have case: many Unicode characters are
  610.      * letters but are neither uppercase nor lowercase nor titlecase.
  611.      * 
  612.      * @param   ch   the character to be tested.
  613.      * @return  <code>true</code> if the character is a letter;
  614.      *          <code>false</code> otherwise.
  615.      * @see     java.lang.Character#isDigit(char)
  616.      * @see     java.lang.Character#isJavaIdentifierStart(char)
  617.      * @see     java.lang.Character#isJavaLetter(char)
  618.      * @see     java.lang.Character#isJavaLetterOrDigit(char)
  619.      * @see     java.lang.Character#isLetterOrDigit(char)
  620.      * @see     java.lang.Character#isLowerCase(char)
  621.      * @see     java.lang.Character#isTitleCase(char)
  622.      * @see     java.lang.Character#isUnicodeIdentifierStart(char)
  623.      * @see     java.lang.Character#isUpperCase(char)
  624.      */
  625.     public static boolean isLetter(char ch) {
  626.     return (((((1 << UPPERCASE_LETTER) |
  627.            (1 << LOWERCASE_LETTER) |
  628.            (1 << TITLECASE_LETTER) |
  629.            (1 << MODIFIER_LETTER) |
  630.            (1 << OTHER_LETTER))
  631.           >> (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F)) & 1) != 0);
  632.     }
  633.  
  634.     /**
  635.      * Determines if the specified character is a letter or digit. 
  636.      * For a more complete specification that encompasses all Unicode 
  637.      * characters, see Gosling, Joy, and Steele, <i>The Java Language 
  638.      * Specification</i>. 
  639.      *
  640.      * <p> A character is considered to be a letter if and only if
  641.      * it is specified to be a letter or a digit by the Unicode 2.0 standard
  642.      * (category "Lu", "Ll", "Lt", "Lm", "Lo", or "Nd" in the Unicode
  643.      * specification data file).  In other words, isLetterOrDigit is true
  644.      * of a character if and only if either isLetter is true of the character
  645.      * or isDigit is true of the character.
  646.      * 
  647.      * @param   ch   the character to be tested.
  648.      * @return  <code>true</code> if the character is a letter or digit;
  649.      *          <code>false</code> otherwise.
  650.      * @see     java.lang.Character#isDigit(char)
  651.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  652.      * @see     java.lang.Character#isJavaLetter(char)
  653.      * @see     java.lang.Character#isJavaLetterOrDigit(char)
  654.      * @see     java.lang.Character#isLetter(char)
  655.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  656.      * @since   JDK1.0.2
  657.      */
  658.     public static boolean isLetterOrDigit(char ch) {
  659.     return (((((1 << UPPERCASE_LETTER) |
  660.            (1 << LOWERCASE_LETTER) |
  661.            (1 << TITLECASE_LETTER) |
  662.            (1 << MODIFIER_LETTER) |
  663.            (1 << OTHER_LETTER) |
  664.            (1 << DECIMAL_DIGIT_NUMBER))
  665.           >> (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F)) & 1) != 0);
  666.     }
  667.  
  668.     /**
  669.      * Determines if the specified character is a 
  670.      * "Java" letter, that is, the character is permissible 
  671.      * as the first character in an identifier in the Java language. 
  672.      * <p>
  673.      * A character is considered to be a Java letter if and only if it 
  674.      * is a letter, the ASCII dollar sign character <code>'$'</code>, or 
  675.      * the underscore character <code>'_'</code>. 
  676.      *
  677.      * @param      ch   the character to be tested.
  678.      * @return     <code>true</code> if the character is a Java letter;
  679.      *             <code>false</code> otherwise.
  680.      * @see        java.lang.Character#isJavaIdentifierStart(char)
  681.      * @see        java.lang.Character#isJavaLetterOrDigit(char)
  682.      * @see        java.lang.Character#isLetter(char)
  683.      * @see        java.lang.Character#isLetterOrDigit(char)
  684.      * @see        java.lang.Character#isUnicodeIdentifierStart(char)
  685.      * @since      JDK1.0.2
  686.      * @deprecated Replaced by isJavaIdentifierStart(char).
  687.      */
  688.     public static boolean isJavaLetter(char ch) {
  689.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) >= 0x00050000;
  690.     }
  691.  
  692.     /**
  693.      * Determines if the specified character is a 
  694.      * "Java" letter or digit, that is, the character is 
  695.      * permissible as a non-initial character in an identifier in the 
  696.      * Java language. 
  697.      * <p>
  698.      * A character is considered to be a Java letter or digit if and 
  699.      * only if it is a letter, a digit, the ASCII dollar sign character 
  700.      * <code>'$'</code>, or the underscore character <code>'_'</code>. 
  701.      *
  702.      * @param      ch   the character to be tested.
  703.      * @return     <code>true</code> if the character is a Java letter or digit;
  704.      *             <code>false</code> otherwise.
  705.      * @see        java.lang.Character#isJavaIdentifierPart(char)
  706.      * @see        java.lang.Character#isJavaLetter(char)
  707.      * @see        java.lang.Character#isLetter(char)
  708.      * @see        java.lang.Character#isLetterOrDigit(char)
  709.      * @see        java.lang.Character#isUnicodeIdentifierPart(char)
  710.      * @since      JDK1.0.2
  711.      * @deprecated Replaced by isJavaIdentifierPart(char).
  712.      */
  713.     public static boolean isJavaLetterOrDigit(char ch) {
  714.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00030000) != 0;
  715.     }
  716.  
  717.     /**
  718.      * Determines if the specified character is
  719.      * permissible as the first character in a Java identifier.
  720.      * A character may start a Java identifier if and only if
  721.      * it is one of the following:
  722.      * <ul>
  723.      * <li>  a letter
  724.      * <li>  a currency symbol (such as "$")
  725.      * <li>  a connecting punctuation character (such as "_").
  726.      * </ul>
  727.      *
  728.      * @param   ch    the character to be tested.
  729.      * @return  true if the character may start a Java identifier;
  730.      *          false otherwise.
  731.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  732.      * @see     java.lang.Character#isLetter(char)
  733.      * @see     java.lang.Character#isUnicodeIdentifierStart(char)
  734.      * @since   JDK1.1
  735.      */
  736.     public static boolean isJavaIdentifierStart(char ch) {
  737.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) >= 0x00050000;
  738.     }
  739.  
  740.     /**
  741.      * Determines if the specified character may be part of a Java
  742.      * identifier as other than the first character.
  743.      * A character may be part of a Java identifier if and only if
  744.      * it is one of the following:
  745.      * <ul>
  746.      * <li>  a letter
  747.      * <li>  a currency symbol (such as "$")
  748.      * <li>  a connecting punctuation character (such as "_").
  749.      * <li>  a digit
  750.      * <li>  a numeric letter (such as a Roman numeral character)
  751.      * <li>  a combining mark
  752.      * <li>  a non-spacing mark
  753.      * <li>  an ignorable control character
  754.      * </ul>
  755.      * 
  756.      * @param   ch    the character to be tested.
  757.      * @return  true if the character may be part of a Unicode identifier; 
  758.      *          false otherwise.
  759.      * @see     java.lang.Character#isIdentifierIgnorable(char)
  760.      * @see     java.lang.Character#isJavaIdentifierStart(char)
  761.      * @see     java.lang.Character#isLetterOrDigit(char)
  762.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  763.      * @since   JDK1.1
  764.      */
  765.     public static boolean isJavaIdentifierPart(char ch) {
  766.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00030000) != 0;
  767.     }
  768.  
  769.     /**
  770.      * Determines if the specified character is
  771.      * permissible as the first character in a Unicode identifier.
  772.      * A character may start a Unicode identifier if and only if
  773.      * it is a letter.
  774.      *
  775.      * @param   ch    the character to be tested.
  776.      * @return  true if the character may start a Unicode identifier;
  777.      *          false otherwise.
  778.      * @see     java.lang.Character#isJavaIdentifierStart(char)
  779.      * @see     java.lang.Character#isLetter(char)
  780.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  781.      * @since   JDK1.1
  782.      */
  783.     public static boolean isUnicodeIdentifierStart(char ch) {
  784.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) == 0x00070000;
  785.     }
  786.  
  787.     /**
  788.      * Determines if the specified character may be part of a Unicode
  789.      * identifier as other than the first character.
  790.      * A character may be part of a Unicode identifier if and only if
  791.      * it is one of the following:
  792.      * <ul>
  793.      * <li>  a letter
  794.      * <li>  a connecting punctuation character (such as "_").
  795.      * <li>  a digit
  796.      * <li>  a numeric letter (such as a Roman numeral character)
  797.      * <li>  a combining mark
  798.      * <li>  a non-spacing mark
  799.      * <li>  an ignorable control character
  800.      * </ul>
  801.      * 
  802.      * @param   ch    the character to be tested.
  803.      * @return  true if the character may be part of a Unicode identifier;
  804.      *          false otherwise.
  805.      * @see     java.lang.Character#isIdentifierIgnorable(char)
  806.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  807.      * @see     java.lang.Character#isLetterOrDigit(char)
  808.      * @see     java.lang.Character#isUnicodeIdentifierStart(char)
  809.      * @since   JDK1.1
  810.      */
  811.     public static boolean isUnicodeIdentifierPart(char ch) {
  812.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00010000) != 0;
  813.     }
  814.  
  815.     /**
  816.      * Determines if the specified character should be regarded as
  817.      * an ignorable character in a Java identifier or a Unicode identifier.
  818.      * The following Unicode characters are ignorable in a Java identifier
  819.      * or a Unicode identifier:
  820.      * <table>
  821.      * <tr><td>0x0000 through 0x0008,</td>
  822.      *                                 <td>ISO control characters that</td></tr>
  823.      * <tr><td>0x000E through 0x001B,</td> <td>are not whitespace</td></tr>
  824.      * <tr><td>and 0x007F through 0x009F</td></tr>
  825.      * <tr><td>0x200C through 0x200F</td>  <td>join controls</td></tr>
  826.      * <tr><td>0x200A through 0x200E</td>  <td>bidirectional controls</td></tr>
  827.      * <tr><td>0x206A through 0x206F</td>  <td>format controls</td></tr>
  828.      * <tr><td>0xFEFF</td>               <td>zero-width no-break space</td></tr>
  829.      * </table>
  830.      * 
  831.      * @param   ch    the character to be tested.
  832.      * @return     true if the character may be part of a Unicode identifier;
  833.      *          false otherwise.
  834.      * @see     java.lang.Character#isJavaIdentifierPart(char)
  835.      * @see     java.lang.Character#isUnicodeIdentifierPart(char)
  836.      * @since   JDK1.1
  837.      */
  838.     public static boolean isIdentifierIgnorable(char ch) {
  839.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) == 0x00010000;
  840.     }
  841.  
  842.     /**
  843.      * The given character is mapped to its lowercase equivalent; if the 
  844.      * character has no lowercase equivalent, the character itself is 
  845.      * returned. 
  846.      * <p>
  847.      * A character has a lowercase equivalent if and only if a lowercase 
  848.      * mapping is specified for the character in the Unicode attribute 
  849.      * table. 
  850.      * <p>
  851.      * Note that some Unicode characters in the range 
  852.      * <code>'\u2000'</code> to <code>'\u2FFF'</code> have lowercase 
  853.      * mappings; this method does map such characters to their lowercase 
  854.      * equivalents even though the method <code>isUpperCase</code> does 
  855.      * not return <code>true</code> for such characters. 
  856.      *
  857.      * @param   ch   the character to be converted.
  858.      * @return  the lowercase equivalent of the character, if any;
  859.      *          otherwise the character itself.
  860.      * @see     java.lang.Character#isLowerCase(char)
  861.      * @see     java.lang.Character#isUpperCase(char)
  862.      * @see     java.lang.Character#toTitleCase(char)
  863.      * @see     java.lang.Character#toUpperCase(char)
  864.      */
  865.     public static char toLowerCase(char ch) {
  866.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  867.     if ((val & 0x00200000) != 0)
  868.       return (char)(ch + (val >> 22));
  869.     else
  870.       return ch;
  871.     }
  872.  
  873.     /**
  874.      * Converts the character argument to uppercase. A character has an 
  875.      * uppercase equivalent if and only if an uppercase mapping is 
  876.      * specified for the character in the Unicode attribute table. 
  877.      * <p>
  878.      * Note that some Unicode characters in the range 
  879.      * <code>'\u2000'</code> to <code>'\u2000FFF'</code> have uppercase 
  880.      * mappings; this method does map such characters to their titlecase 
  881.      * equivalents even though the method <code>isLowerCase</code> does 
  882.      * not return <code>true</code> for such characters. 
  883.      *
  884.      * @param   ch   the character to be converted.
  885.      * @return  the uppercase equivalent of the character, if any;
  886.      *          otherwise the character itself.
  887.      * @see     java.lang.Character#isLowerCase(char)
  888.      * @see     java.lang.Character#isUpperCase(char)
  889.      * @see     java.lang.Character#toLowerCase(char)
  890.      * @see     java.lang.Character#toTitleCase(char)
  891.      */
  892.     public static char toUpperCase(char ch) {
  893.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  894.     if ((val & 0x00100000) != 0)
  895.       return (char)(ch - (val >> 22));
  896.     else
  897.       return ch;
  898.     }
  899.  
  900.     /**
  901.      * Converts the character argument to titlecase. A character has a 
  902.      * titlecase equivalent if and only if a titlecase mapping is 
  903.      * specified for the character in the Unicode attribute table. 
  904.      * <p>
  905.      * Note that some Unicode characters in the range 
  906.      * <code>'\u2000'</code> through <code>'\u2FFF'</code> have titlecase 
  907.      * mappings; this method does map such characters to their titlecase 
  908.      * equivalents even though the method <code>isTitleCase</code> does 
  909.      * not return <code>true</code> for such characters.
  910.      * <p>
  911.      * There are only four Unicode characters that are truly titlecase forms
  912.      * that are distinct from uppercase forms.  As a rule, if a character has no
  913.      * true titlecase equivalent but does have an uppercase mapping, then the
  914.      * Unicode 2.0 attribute table specifies a titlecase mapping that is the
  915.      * same as the uppercase mapping.
  916.      *
  917.      * @param   ch   the character to be converted.
  918.      * @return  the titlecase equivalent of the character, if any;
  919.      *          otherwise the character itself.
  920.      * @see     java.lang.Character#isTitleCase(char)
  921.      * @see     java.lang.Character#toLowerCase(char)
  922.      * @see     java.lang.Character#toUpperCase(char)
  923.      * @since   JDK1.0.2
  924.      */
  925.     public static char toTitleCase(char ch) {
  926.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  927.     if ((val & 0x00080000) != 0) {
  928.       // There is a titlecase equivalent.  Perform further checks:
  929.       if ((val & 0x00100000) == 0) {
  930.         // The character does not have an uppercase equivalent, so it must
  931.         // already be uppercase; so add 1 to get the titlecase form.
  932.         return (char)(ch + 1);
  933.       }
  934.       else if ((val & 0x00200000) == 0) {
  935.         // The character does not have a lowercase equivalent, so it must
  936.         // already be lowercase; so subtract 1 to get the titlecase form.
  937.         return (char)(ch - 1);
  938.       }
  939.       else {
  940.         // The character has both an uppercase equivalent and a lowercase
  941.         // equivalent, so it must itself be a titlecase form; return it.
  942.         return ch;
  943.       }
  944.     }
  945.     else if ((val & 0x00100000) != 0) {
  946.       // This character has no titlecase equivalent but it does have an
  947.       // uppercase equivalent, so use that (subtract the signed case offset).
  948.       return (char)(ch - (val >> 22));
  949.     }
  950.     else
  951.       return ch;
  952.     }
  953.  
  954.     /**
  955.      * Returns the numeric value of the character <code>ch</code> in the 
  956.      * specified radix. 
  957.      * <p>
  958.      * If the radix is not in the range <code>MIN_RADIX</code> <= 
  959.      * <code>radix</code> <= <code>MAX_RADIX</code> or if the 
  960.      * value of <code>ch</code> is not a valid digit in the specified 
  961.      * radix, <code>-1</code> is returned. A character is a valid digit 
  962.      * if at least one of the following is true:
  963.      * <ul>
  964.      * <li>The method <code>isDigit</code> is true of the character 
  965.      *     and the Unicode decimal digit value of the character (or its 
  966.      *     single-character decomposition) is less than the specified radix. 
  967.      *     In this case the decimal digit value is returned. 
  968.      * <li>The character is one of the uppercase Latin letters 
  969.      *     <code>'A'</code> through <code>'Z'</code> and its code is less than
  970.      *     <code>radix + 'A' - 10</code>. 
  971.      *     In this case, <code>ch - 'A' + 10</code> 
  972.      *     is returned. 
  973.      * <li>The character is one of the lowercase Latin letters 
  974.      *     <code>'a'</code> through <code>'z'</code> and its code is less than
  975.      *     <code>radix + 'a' - 10</code>. 
  976.      *     In this case, <code>ch - 'a' + 10</code> 
  977.      *     is returned. 
  978.      * </ul>
  979.      *
  980.      * @param   ch      the character to be converted.
  981.      * @param   radix   the radix.
  982.      * @return  the numeric value represented by the character in the
  983.      *          specified radix.
  984.      * @see     java.lang.Character#forDigit(int, int)
  985.      * @see     java.lang.Character#isDigit(char)
  986.      */
  987.     public static int digit(char ch, int radix) {
  988.         int value = -1;
  989.     if (radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX) {
  990.       int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  991.       int kind = val & 0x1F;
  992.       if (kind == DECIMAL_DIGIT_NUMBER) {
  993.         value = ((ch + (val >> 9)) & 0x1F);
  994.       }
  995.       else if ((val & 0x0000C000) == 0x0000C000) {
  996.         // Java supradecimal digit
  997.         value = ((ch + (val >> 9)) & 0x1F) + 10;
  998.       }
  999.     }
  1000.     return (value < radix) ? value : -1;
  1001.     }
  1002.  
  1003.     /**
  1004.      * Returns the Unicode numeric value of the character as a
  1005.      * nonnegative integer.
  1006.      * If the character does not have a numeric value, then -1 is returned.
  1007.      * If the character has a numeric value that cannot be represented as a
  1008.      * nonnegative integer (for example, a fractional value), then -2
  1009.      * is returned.
  1010.      *
  1011.      * @param   ch    the character to be converted.
  1012.      * @param   radix     the radix.
  1013.      * @return  the numeric value of the character, as a nonnegative int value;
  1014.      *          -2 if the character has a numeric value that is not a
  1015.      *          nonnegative integer; -1 if the character has no numeric value.
  1016.      * @see     java.lang.Character#forDigit(char)
  1017.      * @see     java.lang.Character#isDigit(char)
  1018.      * @since   JDK1.1
  1019.      */
  1020.     public static int getNumericValue(char ch) {
  1021.     int val = A[Y[(X[ch>>6]<<6)|(ch&0x3F)]];
  1022.     switch ((val >> 14) & 0x3) {
  1023.     default: // cannot occur
  1024.     case (0x00000000 >> 14):        // not numeric
  1025.         return -1;
  1026.     case (0x00004000 >> 14):        // simple numeric
  1027.         return (ch + (val >> 9)) & 0x1F;
  1028.     case (0x00008000 >> 14)    :    // "strange" numeric
  1029.         switch (ch) {
  1030.         case '\u0BF1': return 100;        // TAMIL NUMBER ONE HUNDRED
  1031.         case '\u0BF2': return 1000;        // TAMIL NUMBER ONE THOUSAND
  1032.         case '\u216C': return 50;        // ROMAN NUMERAL FIFTY
  1033.         case '\u216D': return 100;        // ROMAN NUMERAL ONE HUNDRED
  1034.         case '\u216E': return 500;        // ROMAN NUMERAL FIVE HUNDRED
  1035.         case '\u216F': return 1000;        // ROMAN NUMERAL ONE THOUSAND
  1036.         case '\u217C': return 50;        // SMALL ROMAN NUMERAL FIFTY
  1037.         case '\u217D': return 100;        // SMALL ROMAN NUMERAL ONE HUNDRED
  1038.         case '\u217E': return 500;        // SMALL ROMAN NUMERAL FIVE HUNDRED
  1039.         case '\u217F': return 1000;        // SMALL ROMAN NUMERAL ONE THOUSAND
  1040.         case '\u2180': return 1000;        // ROMAN NUMERAL ONE THOUSAND C D
  1041.         case '\u2181': return 5000;        // ROMAN NUMERAL FIVE THOUSAND
  1042.         case '\u2182': return 10000;    // ROMAN NUMERAL TEN THOUSAND
  1043.         default:       return -2;
  1044.         }
  1045.     case (0x0000C000 >> 14):        // Java supradecimal
  1046.         return ((ch + (val >> 9)) & 0x1F) + 10;
  1047.     }
  1048.     }
  1049.  
  1050.     /**
  1051.      * Determines if the specified character is ISO-LATIN-1 white space. 
  1052.      * This method returns <code>true</code> for the following five 
  1053.      * characters only: 
  1054.      * <table>
  1055.      * <tr><td>'\t'</td>            <td>\u0009</td>
  1056.      *     <td><code>HORIZONTAL TABULATION</code></td></tr>
  1057.      * <tr><td>'\n'</td>            <td>\u000A</td>
  1058.      *     <td><code>NEW LINE</code></td></tr>
  1059.      * <tr><td>'\f'</td>            <td>\u000C</td>
  1060.      *     <td><code>FORM FEED</code></td></tr>
  1061.      * <tr><td>'\r'</td>            <td>\u000D</td>
  1062.      *     <td><code>CARRIAGE RETURN</code></td></tr>
  1063.      * <tr><td>'  '</td>  <td>\u0020</td>
  1064.      *     <td><code>SPACE</code></td></tr>
  1065.      * </table>
  1066.      *
  1067.      * @param      ch   the character to be tested.
  1068.      * @return     <code>true</code> if the character is ISO-LATIN-1 white
  1069.      *             space; <code>false</code> otherwise.
  1070.      * @see        java.lang.Character#isSpaceChar(char)
  1071.      * @see        java.lang.Character#isWhitespace(char)
  1072.      * @deprecated Replaced by isWhitespace(char).
  1073.      */
  1074.     public static boolean isSpace(char ch) {
  1075.       return (ch <= 0x0020) &&
  1076.          (((((1L << 0x0009) |
  1077.          (1L << 0x000A) |
  1078.          (1L << 0x000C) |
  1079.          (1L << 0x000D) |
  1080.          (1L << 0x0020)) >> ch) & 1L) != 0);
  1081.     }
  1082.  
  1083.     /**
  1084.      * Determines if the specified character is a Unicode space character.
  1085.      * A character is considered to be a space character if and only if
  1086.      * it is specified to be a space character by the Unicode 2.0 standard
  1087.      * (category "Zs", "Zl, or "Zp" in the Unicode specification data file).
  1088.      * 
  1089.      * @param   ch    the character to be tested.
  1090.      * @return     true if the character is a space character; false otherwise.
  1091.      * @see     java.lang.Character#isWhitespace(char)
  1092.      * @since   JDK1.1
  1093.      */
  1094.     public static boolean isSpaceChar(char ch) {
  1095.     return (((((1 << SPACE_SEPARATOR) |
  1096.            (1 << LINE_SEPARATOR) |
  1097.            (1 << PARAGRAPH_SEPARATOR))
  1098.           >> (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F)) & 1) != 0);
  1099.     }
  1100.  
  1101.     /**
  1102.      * Determines if the specified character is white space according to Java.
  1103.      * A character is considered to be a Java whitespace character if and only
  1104.      * if it satisfies one of the following criteria:
  1105.      * <ul>
  1106.      * <li> It is a Unicode space separator (category "Zs"), but is not
  1107.      *      a no-break space (\u00A0 or \uFEFF).
  1108.      * <li> It is a Unicode line separator (category "Zl").
  1109.      * <li> It is a Unicode paragraph separator (category "Zp").
  1110.      * <li> It is \u0009, HORIZONTAL TABULATION.
  1111.      * <li> It is \u000A, LINE FEED.
  1112.      * <li> It is \u000B, VERTICAL TABULATION.
  1113.      * <li> It is \u000C, FORM FEED.
  1114.      * <li> It is \u000D, CARRIAGE RETURN.
  1115.      * <li> It is \u001C, FILE SEPARATOR.
  1116.      * <li> It is \u001D, GROUP SEPARATOR.
  1117.      * <li> It is \u001E, RECORD SEPARATOR.
  1118.      * <li> It is \u001F, UNIT SEPARATOR.
  1119.      * </ul>
  1120.      *
  1121.      * @param   ch    the character to be tested.
  1122.      * @return  true if the character is a Java whitespace character;
  1123.      *          false otherwise.
  1124.      * @see     java.lang.Character#isSpaceChar(char)
  1125.      * @since   JDK1.1
  1126.      */
  1127.     public static boolean isWhitespace(char ch) {
  1128.       return (A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x00070000) == 0x00040000;
  1129.     }
  1130.  
  1131.     /**
  1132.      * Determines if the specified character is an ISO control character.
  1133.      * A character is considered to be an ISO control character if its
  1134.      * code is in the range \u0000 through \u001F or in the range
  1135.      * \u007F through \u009F.
  1136.      *
  1137.      * @param   ch    the character to be tested.
  1138.      * @return  true if the character is an ISO control character;
  1139.      *          false otherwise.
  1140.      *
  1141.      * @see     java.lang.Character#isSpaceChar(char)
  1142.      * @see     java.lang.Character#isWhitespace(char)
  1143.      * @since   JDK1.1
  1144.      */
  1145.     public static boolean isISOControl(char ch) {
  1146.       return (ch <= 0x009F) && ((ch <= 0x001F) || (ch >= 0x007F));
  1147.     }
  1148.  
  1149.     /**
  1150.      * Returns a value indicating a character category.
  1151.      *
  1152.      * @param   ch      the character to be tested.
  1153.      * @return  a value of type int, the character category.
  1154.      * @see     java.lang.Character#COMBINING_SPACING_MARK
  1155.      * @see     java.lang.Character#CONNECTOR_PUNCTUATION
  1156.      * @see     java.lang.Character#CONTROL
  1157.      * @see     java.lang.Character#CURRENCY_SYMBOL
  1158.      * @see     java.lang.Character#DASH_PUNCTUATION
  1159.      * @see     java.lang.Character#DECIMAL_DIGIT_NUMBER
  1160.      * @see     java.lang.Character#ENCLOSING_MARK
  1161.      * @see     java.lang.Character#END_PUNCTUATION
  1162.      * @see     java.lang.Character#FORMAT
  1163.      * @see     java.lang.Character#LETTER_NUMBER
  1164.      * @see     java.lang.Character#LINE_SEPARATOR
  1165.      * @see     java.lang.Character#LOWERCASE_LETTER
  1166.      * @see     java.lang.Character#MATH_SYMBOL
  1167.      * @see     java.lang.Character#MODIFIER_LETTER
  1168.      * @see     java.lang.Character#MODIFIER_SYMBOL
  1169.      * @see     java.lang.Character#NON_SPACING_MARK
  1170.      * @see     java.lang.Character#OTHER_LETTER
  1171.      * @see     java.lang.Character#OTHER_NUMBER
  1172.      * @see     java.lang.Character#OTHER_PUNCTUATION
  1173.      * @see     java.lang.Character#OTHER_SYMBOL
  1174.      * @see     java.lang.Character#PARAGRAPH_SEPARATOR
  1175.      * @see     java.lang.Character#PRIVATE_USE
  1176.      * @see     java.lang.Character#SPACE_SEPARATOR
  1177.      * @see     java.lang.Character#START_PUNCTUATION
  1178.      * @see     java.lang.Character#SURROGATE
  1179.      * @see     java.lang.Character#TITLECASE_LETTER
  1180.      * @see     java.lang.Character#UNASSIGNED
  1181.      * @see     java.lang.Character#UPPERCASE_LETTER
  1182.      * @since   JDK1.1
  1183.      */
  1184.     public static int getType(char ch) {
  1185.         return A[Y[(X[ch>>6]<<6)|(ch&0x3F)]] & 0x1F;
  1186.     }
  1187.  
  1188.     /**
  1189.      * Returns the constant representing the Unicode character block that this
  1190.      * character belongs to.
  1191.      *
  1192.      * @param    ch    the character whose Unicode character block is needed
  1193.      * @return    the constant representing the Unicode character block that ch
  1194.      *        belongs to, null if it's not member of any Unicode character block.
  1195.      * @see    java.lang.Character.Subset#
  1196.      * @see    java.lang.Character.Subset#BASIC_LATIN
  1197.      * @see    java.lang.Character.Subset#LATIN_1_SUPPLEMENT
  1198.      * @see    java.lang.Character.Subset#LATIN_EXTENDED_A
  1199.      * @see    java.lang.Character.Subset#LATIN_EXTENDED_B
  1200.      * @see    java.lang.Character.Subset#IPA_EXTENSIONS
  1201.      * @see    java.lang.Character.Subset#SPACING_MODIFIER_LETTERS
  1202.      * @see    java.lang.Character.Subset#COMBINING_DIACRITICAL_MARKS
  1203.      * @see    java.lang.Character.Subset#GREEK
  1204.      * @see    java.lang.Character.Subset#CYRILLIC
  1205.      * @see    java.lang.Character.Subset#ARMENIAN
  1206.      * @see    java.lang.Character.Subset#HEBREW
  1207.      * @see    java.lang.Character.Subset#ARABIC
  1208.      * @see    java.lang.Character.Subset#DEVANAGARI
  1209.      * @see    java.lang.Character.Subset#BENGALI
  1210.      * @see    java.lang.Character.Subset#GURMUKHI
  1211.      * @see    java.lang.Character.Subset#GUJARATI
  1212.      * @see    java.lang.Character.Subset#ORIYA
  1213.      * @see    java.lang.Character.Subset#TAMIL
  1214.      * @see    java.lang.Character.Subset#TELUGU
  1215.      * @see    java.lang.Character.Subset#KANNADA
  1216.      * @see    java.lang.Character.Subset#MALAYALAM
  1217.      * @see    java.lang.Character.Subset#THAI
  1218.      * @see    java.lang.Character.Subset#LAO
  1219.      * @see    java.lang.Character.Subset#TIBETAN
  1220.      * @see    java.lang.Character.Subset#GEORGIAN
  1221.      * @see    java.lang.Character.Subset#HANGUL_JAMO
  1222.      * @see    java.lang.Character.Subset#LATIN_EXTENDED_ADDITIONAL
  1223.      * @see    java.lang.Character.Subset#GREEK_EXTENDED
  1224.      * @see    java.lang.Character.Subset#GENERAL_PUNCTUATION
  1225.      * @see    java.lang.Character.Subset#SUPERSCRIPTS_AND_SUBSCRIPTS
  1226.      * @see    java.lang.Character.Subset#CURRENCY_SYMBOLS
  1227.      * @see    java.lang.Character.Subset#COMBINING_MARKS_FOR_SYMBOLS
  1228.      * @see    java.lang.Character.Subset#LETTERLIKE_SYMBOLS
  1229.      * @see    java.lang.Character.Subset#NUMBER_FORMS
  1230.      * @see    java.lang.Character.Subset#ARROWS
  1231.      * @see    java.lang.Character.Subset#MATHEMATICAL_OPERATORS
  1232.      * @see    java.lang.Character.Subset#MISCELLANEOUS_TECHNICAL
  1233.      * @see    java.lang.Character.Subset#CONTROL_PICTURES
  1234.      * @see    java.lang.Character.Subset#OPTICAL_CHARACTER_RECOGNITION
  1235.      * @see    java.lang.Character.Subset#ENCLOSED_ALPHANUMERICS
  1236.      * @see    java.lang.Character.Subset#BOX_DRAWING
  1237.      * @see    java.lang.Character.Subset#BLOCK_ELEMENTS
  1238.      * @see    java.lang.Character.Subset#GEOMETRIC_SHAPES
  1239.      * @see    java.lang.Character.Subset#MISCELLANEOUS_SYMBOLS
  1240.      * @see    java.lang.Character.Subset#DINGBATS
  1241.      * @see    java.lang.Character.Subset#CJK_SYMBOLS_AND_PUNCTUATION
  1242.      * @see    java.lang.Character.Subset#HIRAGANA
  1243.      * @see    java.lang.Character.Subset#KATAKANA
  1244.      * @see    java.lang.Character.Subset#BOPOMOFO
  1245.      * @see    java.lang.Character.Subset#HANGUL_COMPATIBILITY_JAMO
  1246.      * @see    java.lang.Character.Subset#KANBUN
  1247.      * @see    java.lang.Character.Subset#ENCLOSED_CJK_LETTERS_AND_MONTHS
  1248.      * @see    java.lang.Character.Subset#CJK_COMPATIBILITY
  1249.      * @see    java.lang.Character.Subset#CJK_UNIFIED_IDEOGRAPHS
  1250.      * @see    java.lang.Character.Subset#HANGUL_SYLLABLES
  1251.      * @see    java.lang.Character.Subset#SURROGATES_AREA
  1252.      * @see    java.lang.Character.Subset#PRIVATE_USE_AREA
  1253.      * @see    java.lang.Character.Subset#CJK_COMPATIBILITY_IDEOGRAPHS
  1254.      * @see    java.lang.Character.Subset#ALPHABETIC_PRESENTATION_FORMS
  1255.      * @see    java.lang.Character.Subset#ARABIC_PRESENTATION_FORMS_A
  1256.      * @see    java.lang.Character.Subset#COMBINING_HALF_MARKS
  1257.      * @see    java.lang.Character.Subset#CJK_COMPATIBILITY_FORMS
  1258.      * @see    java.lang.Character.Subset#SMALL_FORM_VARIANTS
  1259.      * @see    java.lang.Character.Subset#ARABIC_PRESENTATION_FORMS_B
  1260.      * @see    java.lang.Character.Subset#HALFWIDTH_AND_FULLWIDTH_FORMS
  1261.      * @see    java.lang.Character.Subset#SPECIALS
  1262.      * @since JDK1.2
  1263.      */
  1264.     public static Subset getUnicodeBlock(char ch) {
  1265.         int top, bottom, current;
  1266.         bottom = 0;
  1267.         top = unicodeBlockStarts.length;
  1268.         current = top/2;
  1269.         // invariant: top > current >= bottom && ch >= unicodeBlockStarts[bottom]
  1270.         while (top - bottom > 1) {
  1271.             if (ch >= unicodeBlockStarts[current]) {
  1272.                 bottom = current;
  1273.             } else {
  1274.                 top = current;
  1275.             }
  1276.             current = (top + bottom) / 2;
  1277.         }
  1278.         return unicodeBlocks[current];
  1279.     }
  1280.  
  1281.     private static final char unicodeBlockStarts[] = {
  1282.         '\u0000',
  1283.         '\u0080',
  1284.         '\u0100',
  1285.         '\u0180',
  1286.         '\u0250',
  1287.         '\u02B0',
  1288.         '\u0300',
  1289.         '\u0370',
  1290.         '\u0400',
  1291.         '\u0500', // unassigned
  1292.         '\u0530',
  1293.         '\u0590',
  1294.         '\u0600',
  1295.         '\u0700', // unassigned
  1296.         '\u0900',
  1297.         '\u0980',
  1298.         '\u0A00',
  1299.         '\u0A80',
  1300.         '\u0B00',
  1301.         '\u0B80',
  1302.         '\u0C00',
  1303.         '\u0C80',
  1304.         '\u0D00',
  1305.         '\u0D80', // unassigned
  1306.         '\u0E00',
  1307.         '\u0E80',
  1308.         '\u0F00',
  1309.         '\u0FC0', // unassigned
  1310.         '\u10A0',
  1311.         '\u1100',
  1312.         '\u1200', // unassigned
  1313.         '\u1E00',
  1314.         '\u1F00',
  1315.         '\u2000',
  1316.         '\u2070',
  1317.         '\u20A0',
  1318.         '\u20D0',
  1319.         '\u2100',
  1320.         '\u2150',
  1321.         '\u2190',
  1322.         '\u2200',
  1323.         '\u2300',
  1324.         '\u2400',
  1325.         '\u2440',
  1326.         '\u2460',
  1327.         '\u2500',
  1328.         '\u2580',
  1329.         '\u25A0',
  1330.         '\u2600',
  1331.         '\u2700',
  1332.         '\u27C0', // unassigned
  1333.         '\u3000',
  1334.         '\u3040',
  1335.         '\u30A0',
  1336.         '\u3100',
  1337.         '\u3130',
  1338.         '\u3190',
  1339.         '\u3200',
  1340.         '\u3300',
  1341.         '\u3400', // unassigned
  1342.         '\u4E00',
  1343.         '\uA000', // unassigned
  1344.         '\uAC00',
  1345.         '\uD7A4', // unassigned
  1346.         '\uD800',
  1347.         '\uE000',
  1348.         '\uF900',
  1349.         '\uFB00',
  1350.         '\uFB50',
  1351.         '\uFE00', // unassigned
  1352.         '\uFE20',
  1353.         '\uFE30',
  1354.         '\uFE50',
  1355.         '\uFE70',
  1356.         '\uFEFF', // special
  1357.         '\uFF00',
  1358.         '\uFFF0'
  1359.     };
  1360.     private static final Subset unicodeBlocks[] = {
  1361.         Subset.BASIC_LATIN,
  1362.         Subset.LATIN_1_SUPPLEMENT,
  1363.         Subset.LATIN_EXTENDED_A,
  1364.         Subset.LATIN_EXTENDED_B,
  1365.         Subset.IPA_EXTENSIONS,
  1366.         Subset.SPACING_MODIFIER_LETTERS,
  1367.         Subset.COMBINING_DIACRITICAL_MARKS,
  1368.         Subset.GREEK,
  1369.         Subset.CYRILLIC,
  1370.         null,
  1371.         Subset.ARMENIAN,
  1372.         Subset.HEBREW,
  1373.         Subset.ARABIC,
  1374.         null,
  1375.         Subset.DEVANAGARI,
  1376.         Subset.BENGALI,
  1377.         Subset.GURMUKHI,
  1378.         Subset.GUJARATI,
  1379.         Subset.ORIYA,
  1380.         Subset.TAMIL,
  1381.         Subset.TELUGU,
  1382.         Subset.KANNADA,
  1383.         Subset.MALAYALAM,
  1384.         null,
  1385.         Subset.THAI,
  1386.         Subset.LAO,
  1387.         Subset.TIBETAN,
  1388.         null,
  1389.         Subset.GEORGIAN,
  1390.         Subset.HANGUL_JAMO,
  1391.         null,
  1392.         Subset.LATIN_EXTENDED_ADDITIONAL,
  1393.         Subset.GREEK_EXTENDED,
  1394.         Subset.GENERAL_PUNCTUATION,
  1395.         Subset.SUPERSCRIPTS_AND_SUBSCRIPTS,
  1396.         Subset.CURRENCY_SYMBOLS,
  1397.         Subset.COMBINING_MARKS_FOR_SYMBOLS,
  1398.         Subset.LETTERLIKE_SYMBOLS,
  1399.         Subset.NUMBER_FORMS,
  1400.         Subset.ARROWS,
  1401.         Subset.MATHEMATICAL_OPERATORS,
  1402.         Subset.MISCELLANEOUS_TECHNICAL,
  1403.         Subset.CONTROL_PICTURES,
  1404.         Subset.OPTICAL_CHARACTER_RECOGNITION,
  1405.         Subset.ENCLOSED_ALPHANUMERICS,
  1406.         Subset.BOX_DRAWING,
  1407.         Subset.BLOCK_ELEMENTS,
  1408.         Subset.GEOMETRIC_SHAPES,
  1409.         Subset.MISCELLANEOUS_SYMBOLS,
  1410.         Subset.DINGBATS,
  1411.         null,
  1412.         Subset.CJK_SYMBOLS_AND_PUNCTUATION,
  1413.         Subset.HIRAGANA,
  1414.         Subset.KATAKANA,
  1415.         Subset.BOPOMOFO,
  1416.         Subset.HANGUL_COMPATIBILITY_JAMO,
  1417.         Subset.KANBUN,
  1418.         Subset.ENCLOSED_CJK_LETTERS_AND_MONTHS,
  1419.         Subset.CJK_COMPATIBILITY,
  1420.         null,
  1421.         Subset.CJK_UNIFIED_IDEOGRAPHS,
  1422.         null,
  1423.         Subset.HANGUL_SYLLABLES,
  1424.         null,
  1425.         Subset.SURROGATES_AREA,
  1426.         Subset.PRIVATE_USE_AREA,
  1427.         Subset.CJK_COMPATIBILITY_IDEOGRAPHS,
  1428.         Subset.ALPHABETIC_PRESENTATION_FORMS,
  1429.         Subset.ARABIC_PRESENTATION_FORMS_A,
  1430.         null,
  1431.         Subset.COMBINING_HALF_MARKS,
  1432.         Subset.CJK_COMPATIBILITY_FORMS,
  1433.         Subset.SMALL_FORM_VARIANTS,
  1434.         Subset.ARABIC_PRESENTATION_FORMS_B,
  1435.         Subset.SPECIALS,
  1436.         Subset.HALFWIDTH_AND_FULLWIDTH_FORMS,
  1437.         Subset.SPECIALS
  1438.     };    
  1439.   
  1440.     /**
  1441.      * Determines the character representation for a specific digit in 
  1442.      * the specified radix. If the value of <code>radix</code> is not a 
  1443.      * valid radix, or the value of <code>digit</code> is not a valid 
  1444.      * digit in the specified radix, the null character 
  1445.      * (<code>'\u0000'</code>) is returned. 
  1446.      * <p>
  1447.      * The <code>radix</code> argument is valid if it is greater than or 
  1448.      * equal to <code>MIN_RADIX</code> and less than or equal to 
  1449.      * <code>MAX_RADIX</code>. The <code>digit</code> argument is valid if
  1450.      * <code>0 <= digit <= radix</code>. 
  1451.      * <p>
  1452.      * If the digit is less than 10, then 
  1453.      * <code>'0' + digit</code> is returned. Otherwise, the value 
  1454.      * <code>'a' + digit - 10</code> is returned. 
  1455.      *
  1456.      * @param   digit   the number to convert to a character.
  1457.      * @param   radix   the radix.
  1458.      * @return  the <code>char</code> representation of the specified digit
  1459.      *          in the specified radix. 
  1460.      * @see     java.lang.Character#MIN_RADIX
  1461.      * @see     java.lang.Character#MAX_RADIX
  1462.      * @see     java.lang.Character#digit(char, int)
  1463.      */
  1464.     public static char forDigit(int digit, int radix) {
  1465.     if ((digit >= radix) || (digit < 0)) {
  1466.         return '\0';
  1467.     }
  1468.     if ((radix < MIN_RADIX) || (radix > MAX_RADIX)) {
  1469.         return '\0';
  1470.     }
  1471.     if (digit < 10) {
  1472.         return (char)('0' + digit);
  1473.     } 
  1474.     return (char)('a' - 10 + digit);
  1475.     }
  1476.  
  1477.     /**
  1478.      * Compares two Characters numerically.
  1479.      *
  1480.      * @param   anotherCharacter   the <code>Character</code> to be compared.
  1481.      * @return  the value <code>0</code> if the argument Character is equal to
  1482.      *          this Character; a value less than <code>0</code> if this
  1483.      *          Character is numerically less than the Character argument; and
  1484.      *          a value greater than <code>0</code> if this Character is
  1485.      *          numerically greater than the Character argument (unsigned
  1486.      *        comparison).  Note that this is strictly a numerical
  1487.      *        comparison; it is not locale-dependent.
  1488.      * @since   JDK1.2
  1489.      */
  1490.     public int compareTo(Character anotherCharacter) {
  1491.     return this.value - anotherCharacter.value;
  1492.     }
  1493.  
  1494.     /**
  1495.      * Compares this Character to another Object.  If the Object is
  1496.      * a Character, this function behaves like
  1497.      * <code>compareTo(Character)</code>.  Otherwise, it throws a
  1498.      * <code>ClassCastException</code> (as Characters are
  1499.      * comparable only to other Characters).
  1500.      *
  1501.      * @param   o the <code>Object</code> to be compared.
  1502.      * @return  the value <code>0</code> if the argument is a Character
  1503.      *        numerically equal to this Character; a value less than
  1504.      *        <code>0</code> if the argument is a Character numerically
  1505.      *        greater than this Character; and a value greater than
  1506.      *        <code>0</code> if the argument is a Character numerically
  1507.      *        less than this Character.
  1508.      * @exception <code>ClassCastException</code> if the argument is not a
  1509.      *          <code>Character</code>. 
  1510.      * @see     java.lang.Comparable
  1511.      * @since JDK1.2 */
  1512.     public int compareTo(Object o) {
  1513.     return compareTo((Character)o);
  1514.     }
  1515.  
  1516.     /* The character properties are currently encoded into 32 bits in the following manner:
  1517.        10 bits    signed offset used for converting case
  1518.     1 bit    if 1, adding the signed offset converts the character to lowercase
  1519.     1 bit    if 1, subtracting the signed offset converts the character to uppercase
  1520.     1 bit   if 1, this character has a titlecase equivalent (possibly itself)
  1521.     3 bits    0  may not be part of an identifier
  1522.         1  ignorable control; may continue a Unicode identifier or Java identifier
  1523.         2  may continue a Java identifier but not a Unicode identifier (unused)
  1524.         3  may continue a Unicode identifier or Java identifier
  1525.         4  is a Java whitespace character
  1526.         5  may start or continue a Java identifier;
  1527.            may continue but not start a Unicode identifier (underscores)
  1528.         6  may start or continue a Java identifier but not a Unicode identifier ($)
  1529.         7  may start or continue a Unicode identifier or Java identifier
  1530.         Thus:
  1531.            5, 6, 7 may start a Java identifier
  1532.            1, 2, 3, 5, 6, 7 may continue a Java identifier
  1533.            7 may start a Unicode identifier
  1534.            1, 3, 5, 7 may continue a Unicode identifier
  1535.            1 is ignorable within an identifier
  1536.            4 is Java whitespace
  1537.     2 bits    0  this character has no numeric property
  1538.         1  adding the digit offset to the character code and then
  1539.            masking with 0x1F will produce the desired numeric value
  1540.         2  this character has a "strange" numeric value
  1541.         3  a Java supradecimal digit: adding the digit offset to the
  1542.            character code, then masking with 0x1F, then adding 10
  1543.            will produce the desired numeric value
  1544.     5 bits  digit offset
  1545.     4 bits    reserved for future use
  1546.     5 bits    character type
  1547.      */
  1548.  
  1549.     // The X table has 1024 entries for a total of 1024 bytes.
  1550.  
  1551.   private static final byte X[] = {
  1552.       0,   1,   2,   3,   4,   5,   6,   7,  // 0x0000
  1553.       8,   9,  10,  11,  12,  13,  14,  15,  // 0x0200
  1554.      16,  17,  18,  19,  20,  21,  22,  23,  // 0x0400
  1555.      24,  25,  26,  27,  28,  28,  28,  28,  // 0x0600
  1556.      28,  28,  28,  28,  29,  30,  31,  32,  // 0x0800
  1557.      33,  34,  35,  36,  37,  38,  39,  40,  // 0x0A00
  1558.      41,  42,  43,  44,  45,  46,  28,  28,  // 0x0C00
  1559.      47,  48,  49,  50,  51,  52,  53,  28,  // 0x0E00
  1560.      28,  28,  54,  55,  56,  57,  58,  59,  // 0x1000
  1561.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1200
  1562.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1400
  1563.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1600
  1564.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1800
  1565.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1A00
  1566.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x1C00
  1567.      60,  60,  61,  62,  63,  64,  65,  66,  // 0x1E00
  1568.      67,  68,  69,  70,  71,  72,  73,  74,  // 0x2000
  1569.      75,  75,  75,  76,  77,  78,  28,  28,  // 0x2200
  1570.      79,  80,  81,  82,  83,  83,  84,  85,  // 0x2400
  1571.      86,  85,  28,  28,  87,  88,  89,  28,  // 0x2600
  1572.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2800
  1573.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2A00
  1574.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2C00
  1575.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x2E00
  1576.      90,  91,  92,  93,  94,  56,  95,  28,  // 0x3000
  1577.      96,  97,  98,  99,  83, 100,  83, 101,  // 0x3200
  1578.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3400
  1579.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3600
  1580.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3800
  1581.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3A00
  1582.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3C00
  1583.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x3E00
  1584.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4000
  1585.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4200
  1586.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4400
  1587.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4600
  1588.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4800
  1589.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4A00
  1590.      28,  28,  28,  28,  28,  28,  28,  28,  // 0x4C00
  1591.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x4E00
  1592.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5000
  1593.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5200
  1594.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5400
  1595.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5600
  1596.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5800
  1597.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5A00
  1598.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5C00
  1599.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x5E00
  1600.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6000
  1601.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6200
  1602.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6400
  1603.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6600
  1604.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6800
  1605.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6A00
  1606.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6C00
  1607.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x6E00
  1608.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7000
  1609.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7200
  1610.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7400
  1611.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7600
  1612.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7800
  1613.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7A00
  1614.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7C00
  1615.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x7E00
  1616.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8000
  1617.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8200
  1618.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8400
  1619.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8600
  1620.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8800
  1621.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8A00
  1622.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8C00
  1623.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x8E00
  1624.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9000
  1625.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9200
  1626.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9400
  1627.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9600
  1628.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9800
  1629.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9A00
  1630.      56,  56,  56,  56,  56,  56,  56,  56,  // 0x9C00
  1631.      56,  56,  56,  56,  56,  56, 102,  28,  // 0x9E00
  1632.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA000
  1633.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA200
  1634.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA400
  1635.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA600
  1636.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xA800
  1637.      28,  28,  28,  28,  28,  28,  28,  28,  // 0xAA00
  1638.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xAC00
  1639.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xAE00
  1640.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB000
  1641.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB200
  1642.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB400
  1643.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB600
  1644.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xB800
  1645.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xBA00
  1646.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xBC00
  1647.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xBE00
  1648.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC000
  1649.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC200
  1650.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC400
  1651.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC600
  1652.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xC800
  1653.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xCA00
  1654.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xCC00
  1655.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xCE00
  1656.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xD000
  1657.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xD200
  1658.      56,  56,  56,  56,  56,  56,  56,  56,  // 0xD400
  1659.      56,  56,  56,  56,  56,  56, 103,  28,  // 0xD600
  1660.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xD800
  1661.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xDA00
  1662.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xDC00
  1663.     104, 104, 104, 104, 104, 104, 104, 104,  // 0xDE00
  1664.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE000
  1665.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE200
  1666.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE400
  1667.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE600
  1668.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xE800
  1669.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xEA00
  1670.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xEC00
  1671.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xEE00
  1672.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF000
  1673.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF200
  1674.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF400
  1675.     105, 105, 105, 105, 105, 105, 105, 105,  // 0xF600
  1676.     105, 105, 105, 105,  56,  56,  56,  56,  // 0xF800
  1677.     106,  28,  28,  28, 107, 108, 109, 110,  // 0xFA00
  1678.      56,  56,  56,  56, 111, 112, 113, 114,  // 0xFC00
  1679.     115, 116,  56, 117, 118, 119, 120, 121   // 0xFE00
  1680.   };
  1681.  
  1682.   // The Y table has 7808 entries for a total of 7808 bytes.
  1683.  
  1684.   private static final byte Y[] = {
  1685.       0,   0,   0,   0,   0,   0,   0,   0,  //   0
  1686.       0,   1,   1,   1,   1,   1,   0,   0,  //   0
  1687.       0,   0,   0,   0,   0,   0,   0,   0,  //   0
  1688.       0,   0,   0,   0,   1,   1,   1,   1,  //   0
  1689.       2,   3,   3,   3,   4,   3,   3,   3,  //   0
  1690.       5,   6,   3,   7,   3,   8,   3,   3,  //   0
  1691.       9,   9,   9,   9,   9,   9,   9,   9,  //   0
  1692.       9,   9,   3,   3,   7,   7,   7,   3,  //   0
  1693.       3,  10,  10,  10,  10,  10,  10,  10,  //   1
  1694.      10,  10,  10,  10,  10,  10,  10,  10,  //   1
  1695.      10,  10,  10,  10,  10,  10,  10,  10,  //   1
  1696.      10,  10,  10,   5,   3,   6,  11,  12,  //   1
  1697.      11,  13,  13,  13,  13,  13,  13,  13,  //   1
  1698.      13,  13,  13,  13,  13,  13,  13,  13,  //   1
  1699.      13,  13,  13,  13,  13,  13,  13,  13,  //   1
  1700.      13,  13,  13,   5,   7,   6,   7,   0,  //   1
  1701.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1702.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1703.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1704.       0,   0,   0,   0,   0,   0,   0,   0,  //   2
  1705.      14,   3,   4,   4,   4,   4,  15,  15,  //   2
  1706.      11,  15,  16,   5,   7,   8,  15,  11,  //   2
  1707.      15,   7,  17,  17,  11,  16,  15,   3,  //   2
  1708.      11,  18,  16,   6,  19,  19,  19,   3,  //   2
  1709.      20,  20,  20,  20,  20,  20,  20,  20,  //   3
  1710.      20,  20,  20,  20,  20,  20,  20,  20,  //   3
  1711.      20,  20,  20,  20,  20,  20,  20,   7,  //   3
  1712.      20,  20,  20,  20,  20,  20,  20,  16,  //   3
  1713.      21,  21,  21,  21,  21,  21,  21,  21,  //   3
  1714.      21,  21,  21,  21,  21,  21,  21,  21,  //   3
  1715.      21,  21,  21,  21,  21,  21,  21,   7,  //   3
  1716.      21,  21,  21,  21,  21,  21,  21,  22,  //   3
  1717.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1718.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1719.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1720.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1721.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1722.      23,  24,  23,  24,  23,  24,  23,  24,  //   4
  1723.      25,  26,  23,  24,  23,  24,  23,  24,  //   4
  1724.      16,  23,  24,  23,  24,  23,  24,  23,  //   4
  1725.      24,  23,  24,  23,  24,  23,  24,  23,  //   5
  1726.      24,  16,  23,  24,  23,  24,  23,  24,  //   5
  1727.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1728.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1729.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1730.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1731.      23,  24,  23,  24,  23,  24,  23,  24,  //   5
  1732.      27,  23,  24,  23,  24,  23,  24,  28,  //   5
  1733.      16,  29,  23,  24,  23,  24,  30,  23,  //   6
  1734.      24,  31,  31,  23,  24,  16,  32,  32,  //   6
  1735.      33,  23,  24,  31,  34,  16,  35,  36,  //   6
  1736.      23,  24,  16,  16,  35,  37,  16,  38,  //   6
  1737.      23,  24,  23,  24,  23,  24,  38,  23,  //   6
  1738.      24,  39,  40,  16,  23,  24,  39,  23,  //   6
  1739.      24,  41,  41,  23,  24,  23,  24,  42,  //   6
  1740.      23,  24,  16,  40,  23,  24,  40,  40,  //   6
  1741.      40,  40,  40,  40,  43,  44,  45,  43,  //   7
  1742.      44,  45,  43,  44,  45,  23,  24,  23,  //   7
  1743.      24,  23,  24,  23,  24,  23,  24,  23,  //   7
  1744.      24,  23,  24,  23,  24,  16,  23,  24,  //   7
  1745.      23,  24,  23,  24,  23,  24,  23,  24,  //   7
  1746.      23,  24,  23,  24,  23,  24,  23,  24,  //   7
  1747.      16,  43,  44,  45,  23,  24,  46,  46,  //   7
  1748.      46,  46,  23,  24,  23,  24,  23,  24,  //   7
  1749.      23,  24,  23,  24,  23,  24,  23,  24,  //   8
  1750.      23,  24,  23,  24,  23,  24,  23,  24,  //   8
  1751.      23,  24,  23,  24,  23,  24,  23,  24,  //   8
  1752.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1753.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1754.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1755.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1756.      46,  46,  46,  46,  46,  46,  46,  46,  //   8
  1757.      46,  46,  46,  46,  46,  46,  46,  46,  //   9
  1758.      46,  46,  46,  46,  46,  46,  46,  46,  //   9
  1759.      16,  16,  16,  47,  48,  16,  49,  49,  //   9
  1760.      50,  50,  16,  51,  16,  16,  16,  16,  //   9
  1761.      49,  16,  16,  52,  16,  16,  16,  16,  //   9
  1762.      53,  54,  16,  16,  16,  16,  16,  54,  //   9
  1763.      16,  16,  55,  16,  16,  16,  16,  16,  //   9
  1764.      16,  16,  16,  16,  16,  16,  16,  16,  //   9
  1765.      16,  16,  16,  56,  16,  16,  16,  16,  //  10
  1766.      56,  16,  57,  57,  16,  16,  16,  16,  //  10
  1767.      16,  16,  58,  16,  16,  16,  16,  16,  //  10
  1768.      16,  16,  16,  16,  16,  16,  16,  16,  //  10
  1769.      16,  16,  16,  16,  16,  16,  16,  16,  //  10
  1770.      16,  46,  46,  46,  46,  46,  46,  46,  //  10
  1771.      59,  59,  59,  59,  59,  59,  59,  59,  //  10
  1772.      59,  11,  11,  59,  59,  59,  59,  59,  //  10
  1773.      59,  59,  11,  11,  11,  11,  11,  11,  //  11
  1774.      11,  11,  11,  11,  11,  11,  11,  11,  //  11
  1775.      59,  59,  11,  11,  11,  11,  11,  11,  //  11
  1776.      11,  11,  11,  11,  11,  11,  11,  46,  //  11
  1777.      59,  59,  59,  59,  59,  11,  11,  11,  //  11
  1778.      11,  11,  46,  46,  46,  46,  46,  46,  //  11
  1779.      46,  46,  46,  46,  46,  46,  46,  46,  //  11
  1780.      46,  46,  46,  46,  46,  46,  46,  46,  //  11
  1781.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1782.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1783.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1784.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1785.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1786.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1787.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1788.      60,  60,  60,  60,  60,  60,  60,  60,  //  12
  1789.      60,  60,  60,  60,  60,  60,  46,  46,  //  13
  1790.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1791.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1792.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1793.      60,  60,  46,  46,  46,  46,  46,  46,  //  13
  1794.      46,  46,  46,  46,  46,  46,  46,  46,  //  13
  1795.      46,  46,  46,  46,   3,   3,  46,  46,  //  13
  1796.      46,  46,  59,  46,  46,  46,   3,  46,  //  13
  1797.      46,  46,  46,  46,  11,  11,  61,   3,  //  14
  1798.      62,  62,  62,  46,  63,  46,  64,  64,  //  14
  1799.      16,  20,  20,  20,  20,  20,  20,  20,  //  14
  1800.      20,  20,  20,  20,  20,  20,  20,  20,  //  14
  1801.      20,  20,  46,  20,  20,  20,  20,  20,  //  14
  1802.      20,  20,  20,  20,  65,  66,  66,  66,  //  14
  1803.      16,  21,  21,  21,  21,  21,  21,  21,  //  14
  1804.      21,  21,  21,  21,  21,  21,  21,  21,  //  14
  1805.      21,  21,  16,  21,  21,  21,  21,  21,  //  15
  1806.      21,  21,  21,  21,  67,  68,  68,  46,  //  15
  1807.      69,  70,  38,  38,  38,  71,  72,  46,  //  15
  1808.      46,  46,  38,  46,  38,  46,  38,  46,  //  15
  1809.      38,  46,  23,  24,  23,  24,  23,  24,  //  15
  1810.      23,  24,  23,  24,  23,  24,  23,  24,  //  15
  1811.      73,  74,  16,  40,  46,  46,  46,  46,  //  15
  1812.      46,  46,  46,  46,  46,  46,  46,  46,  //  15
  1813.      46,  75,  75,  75,  75,  75,  75,  75,  //  16
  1814.      75,  75,  75,  75,  75,  46,  75,  75,  //  16
  1815.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1816.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1817.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1818.      20,  20,  20,  20,  20,  20,  20,  20,  //  16
  1819.      21,  21,  21,  21,  21,  21,  21,  21,  //  16
  1820.      21,  21,  21,  21,  21,  21,  21,  21,  //  16
  1821.      21,  21,  21,  21,  21,  21,  21,  21,  //  17
  1822.      21,  21,  21,  21,  21,  21,  21,  21,  //  17
  1823.      46,  74,  74,  74,  74,  74,  74,  74,  //  17
  1824.      74,  74,  74,  74,  74,  46,  74,  74,  //  17
  1825.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1826.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1827.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1828.      23,  24,  23,  24,  23,  24,  23,  24,  //  17
  1829.      23,  24,  15,  60,  60,  60,  60,  46,  //  18
  1830.      46,  46,  46,  46,  46,  46,  46,  46,  //  18
  1831.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1832.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1833.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1834.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1835.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1836.      23,  24,  23,  24,  23,  24,  23,  24,  //  18
  1837.      40,  23,  24,  23,  24,  46,  46,  23,  //  19
  1838.      24,  46,  46,  23,  24,  46,  46,  46,  //  19
  1839.      23,  24,  23,  24,  23,  24,  23,  24,  //  19
  1840.      23,  24,  23,  24,  23,  24,  23,  24,  //  19
  1841.      23,  24,  23,  24,  23,  24,  23,  24,  //  19
  1842.      23,  24,  23,  24,  46,  46,  23,  24,  //  19
  1843.      23,  24,  23,  24,  23,  24,  46,  46,  //  19
  1844.      23,  24,  46,  46,  46,  46,  46,  46,  //  19
  1845.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1846.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1847.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1848.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1849.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1850.      46,  46,  46,  46,  46,  46,  46,  46,  //  20
  1851.      46,  76,  76,  76,  76,  76,  76,  76,  //  20
  1852.      76,  76,  76,  76,  76,  76,  76,  76,  //  20
  1853.      76,  76,  76,  76,  76,  76,  76,  76,  //  21
  1854.      76,  76,  76,  76,  76,  76,  76,  76,  //  21
  1855.      76,  76,  76,  76,  76,  76,  76,  46,  //  21
  1856.      46,  59,   3,   3,   3,   3,   3,   3,  //  21
  1857.      46,  77,  77,  77,  77,  77,  77,  77,  //  21
  1858.      77,  77,  77,  77,  77,  77,  77,  77,  //  21
  1859.      77,  77,  77,  77,  77,  77,  77,  77,  //  21
  1860.      77,  77,  77,  77,  77,  77,  77,  77,  //  21
  1861.      77,  77,  77,  77,  77,  77,  77,  16,  //  22
  1862.      46,   3,  46,  46,  46,  46,  46,  46,  //  22
  1863.      46,  60,  60,  60,  60,  60,  60,  60,  //  22
  1864.      60,  60,  60,  60,  60,  60,  60,  60,  //  22
  1865.      60,  60,  46,  60,  60,  60,  60,  60,  //  22
  1866.      60,  60,  60,  60,  60,  60,  60,  60,  //  22
  1867.      60,  60,  60,  60,  60,  60,  60,  60,  //  22
  1868.      60,  60,  46,  60,  60,  60,   3,  60,  //  22
  1869.       3,  60,  60,   3,  60,  46,  46,  46,  //  23
  1870.      46,  46,  46,  46,  46,  46,  46,  46,  //  23
  1871.      40,  40,  40,  40,  40,  40,  40,  40,  //  23
  1872.      40,  40,  40,  40,  40,  40,  40,  40,  //  23
  1873.      40,  40,  40,  40,  40,  40,  40,  40,  //  23
  1874.      40,  40,  40,  46,  46,  46,  46,  46,  //  23
  1875.      40,  40,  40,   3,   3,  46,  46,  46,  //  23
  1876.      46,  46,  46,  46,  46,  46,  46,  46,  //  23
  1877.      46,  46,  46,  46,  46,  46,  46,  46,  //  24
  1878.      46,  46,  46,  46,   3,  46,  46,  46,  //  24
  1879.      46,  46,  46,  46,  46,  46,  46,  46,  //  24
  1880.      46,  46,  46,   3,  46,  46,  46,   3,  //  24
  1881.      46,  40,  40,  40,  40,  40,  40,  40,  //  24
  1882.      40,  40,  40,  40,  40,  40,  40,  40,  //  24
  1883.      40,  40,  40,  40,  40,  40,  40,  40,  //  24
  1884.      40,  40,  40,  46,  46,  46,  46,  46,  //  24
  1885.      59,  40,  40,  40,  40,  40,  40,  40,  //  25
  1886.      40,  40,  40,  60,  60,  60,  60,  60,  //  25
  1887.      60,  60,  60,  46,  46,  46,  46,  46,  //  25
  1888.      46,  46,  46,  46,  46,  46,  46,  46,  //  25
  1889.      78,  78,  78,  78,  78,  78,  78,  78,  //  25
  1890.      78,  78,   3,   3,   3,   3,  46,  46,  //  25
  1891.      60,  40,  40,  40,  40,  40,  40,  40,  //  25
  1892.      40,  40,  40,  40,  40,  40,  40,  40,  //  25
  1893.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1894.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1895.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1896.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1897.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1898.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1899.      40,  40,  40,  40,  40,  40,  40,  40,  //  26
  1900.      46,  46,  40,  40,  40,  40,  40,  46,  //  26
  1901.      40,  40,  40,  40,  40,  40,  40,  40,  //  27
  1902.      40,  40,  40,  40,  40,  40,  40,  46,  //  27
  1903.      40,  40,  40,  40,   3,  40,  60,  60,  //  27
  1904.      60,  60,  60,  60,  60,  79,  79,  60,  //  27
  1905.      60,  60,  60,  60,  60,  59,  59,  60,  //  27
  1906.      60,  15,  60,  60,  60,  60,  46,  46,  //  27
  1907.       9,   9,   9,   9,   9,   9,   9,   9,  //  27
  1908.       9,   9,  46,  46,  46,  46,  46,  46,  //  27
  1909.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1910.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1911.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1912.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1913.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1914.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1915.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1916.      46,  46,  46,  46,  46,  46,  46,  46,  //  28
  1917.      46,  60,  60,  80,  46,  40,  40,  40,  //  29
  1918.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1919.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1920.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1921.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1922.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1923.      40,  40,  40,  40,  40,  40,  40,  40,  //  29
  1924.      40,  40,  46,  46,  60,  40,  80,  80,  //  29
  1925.      80,  60,  60,  60,  60,  60,  60,  60,  //  30
  1926.      60,  80,  80,  80,  80,  60,  46,  46,  //  30
  1927.      15,  60,  60,  60,  60,  46,  46,  46,  //  30
  1928.      40,  40,  40,  40,  40,  40,  40,  40,  //  30
  1929.      40,  40,  60,  60,   3,   3,  81,  81,  //  30
  1930.      81,  81,  81,  81,  81,  81,  81,  81,  //  30
  1931.       3,  46,  46,  46,  46,  46,  46,  46,  //  30
  1932.      46,  46,  46,  46,  46,  46,  46,  46,  //  30
  1933.      46,  60,  80,  80,  46,  40,  40,  40,  //  31
  1934.      40,  40,  40,  40,  40,  46,  46,  40,  //  31
  1935.      40,  46,  46,  40,  40,  40,  40,  40,  //  31
  1936.      40,  40,  40,  40,  40,  40,  40,  40,  //  31
  1937.      40,  40,  40,  40,  40,  40,  40,  40,  //  31
  1938.      40,  46,  40,  40,  40,  40,  40,  40,  //  31
  1939.      40,  46,  40,  46,  46,  46,  40,  40,  //  31
  1940.      40,  40,  46,  46,  60,  46,  80,  80,  //  31
  1941.      80,  60,  60,  60,  60,  46,  46,  80,  //  32
  1942.      80,  46,  46,  80,  80,  60,  46,  46,  //  32
  1943.      46,  46,  46,  46,  46,  46,  46,  80,  //  32
  1944.      46,  46,  46,  46,  40,  40,  46,  40,  //  32
  1945.      40,  40,  60,  60,  46,  46,  81,  81,  //  32
  1946.      81,  81,  81,  81,  81,  81,  81,  81,  //  32
  1947.      40,  40,   4,   4,  82,  82,  82,  82,  //  32
  1948.      19,  83,  15,  46,  46,  46,  46,  46,  //  32
  1949.      46,  46,  60,  46,  46,  40,  40,  40,  //  33
  1950.      40,  40,  40,  46,  46,  46,  46,  40,  //  33
  1951.      40,  46,  46,  40,  40,  40,  40,  40,  //  33
  1952.      40,  40,  40,  40,  40,  40,  40,  40,  //  33
  1953.      40,  40,  40,  40,  40,  40,  40,  40,  //  33
  1954.      40,  46,  40,  40,  40,  40,  40,  40,  //  33
  1955.      40,  46,  40,  40,  46,  40,  40,  46,  //  33
  1956.      40,  40,  46,  46,  60,  46,  80,  80,  //  33
  1957.      80,  60,  60,  46,  46,  46,  46,  60,  //  34
  1958.      60,  46,  46,  60,  60,  60,  46,  46,  //  34
  1959.      46,  46,  46,  46,  46,  46,  46,  46,  //  34
  1960.      46,  40,  40,  40,  40,  46,  40,  46,  //  34
  1961.      46,  46,  46,  46,  46,  46,  81,  81,  //  34
  1962.      81,  81,  81,  81,  81,  81,  81,  81,  //  34
  1963.      60,  60,  40,  40,  40,  46,  46,  46,  //  34
  1964.      46,  46,  46,  46,  46,  46,  46,  46,  //  34
  1965.      46,  60,  60,  80,  46,  40,  40,  40,  //  35
  1966.      40,  40,  40,  40,  46,  40,  46,  40,  //  35
  1967.      40,  40,  46,  40,  40,  40,  40,  40,  //  35
  1968.      40,  40,  40,  40,  40,  40,  40,  40,  //  35
  1969.      40,  40,  40,  40,  40,  40,  40,  40,  //  35
  1970.      40,  46,  40,  40,  40,  40,  40,  40,  //  35
  1971.      40,  46,  40,  40,  46,  40,  40,  40,  //  35
  1972.      40,  40,  46,  46,  60,  40,  80,  80,  //  35
  1973.      80,  60,  60,  60,  60,  60,  46,  60,  //  36
  1974.      60,  80,  46,  80,  80,  60,  46,  46,  //  36
  1975.      15,  46,  46,  46,  46,  46,  46,  46,  //  36
  1976.      46,  46,  46,  46,  46,  46,  46,  46,  //  36
  1977.      40,  46,  46,  46,  46,  46,  81,  81,  //  36
  1978.      81,  81,  81,  81,  81,  81,  81,  81,  //  36
  1979.      46,  46,  46,  46,  46,  46,  46,  46,  //  36
  1980.      46,  46,  46,  46,  46,  46,  46,  46,  //  36
  1981.      46,  60,  80,  80,  46,  40,  40,  40,  //  37
  1982.      40,  40,  40,  40,  40,  46,  46,  40,  //  37
  1983.      40,  46,  46,  40,  40,  40,  40,  40,  //  37
  1984.      40,  40,  40,  40,  40,  40,  40,  40,  //  37
  1985.      40,  40,  40,  40,  40,  40,  40,  40,  //  37
  1986.      40,  46,  40,  40,  40,  40,  40,  40,  //  37
  1987.      40,  46,  40,  40,  46,  46,  40,  40,  //  37
  1988.      40,  40,  46,  46,  60,  40,  80,  60,  //  37
  1989.      80,  60,  60,  60,  46,  46,  46,  80,  //  38
  1990.      80,  46,  46,  80,  80,  60,  46,  46,  //  38
  1991.      46,  46,  46,  46,  46,  46,  60,  80,  //  38
  1992.      46,  46,  46,  46,  40,  40,  46,  40,  //  38
  1993.      40,  40,  46,  46,  46,  46,  81,  81,  //  38
  1994.      81,  81,  81,  81,  81,  81,  81,  81,  //  38
  1995.      15,  46,  46,  46,  46,  46,  46,  46,  //  38
  1996.      46,  46,  46,  46,  46,  46,  46,  46,  //  38
  1997.      46,  46,  60,  80,  46,  40,  40,  40,  //  39
  1998.      40,  40,  40,  46,  46,  46,  40,  40,  //  39
  1999.      40,  46,  40,  40,  40,  40,  46,  46,  //  39
  2000.      46,  40,  40,  46,  40,  46,  40,  40,  //  39
  2001.      46,  46,  46,  40,  40,  46,  46,  46,  //  39
  2002.      40,  40,  40,  46,  46,  46,  40,  40,  //  39
  2003.      40,  40,  40,  40,  40,  40,  46,  40,  //  39
  2004.      40,  40,  46,  46,  46,  46,  80,  80,  //  39
  2005.      60,  80,  80,  46,  46,  46,  80,  80,  //  40
  2006.      80,  46,  80,  80,  80,  60,  46,  46,  //  40
  2007.      46,  46,  46,  46,  46,  46,  46,  80,  //  40
  2008.      46,  46,  46,  46,  46,  46,  46,  46,  //  40
  2009.      46,  46,  46,  46,  46,  46,  46,  81,  //  40
  2010.      81,  81,  81,  81,  81,  81,  81,  81,  //  40
  2011.      84,  19,  19,  46,  46,  46,  46,  46,  //  40
  2012.      46,  46,  46,  46,  46,  46,  46,  46,  //  40
  2013.      46,  80,  80,  80,  46,  40,  40,  40,  //  41
  2014.      40,  40,  40,  40,  40,  46,  40,  40,  //  41
  2015.      40,  46,  40,  40,  40,  40,  40,  40,  //  41
  2016.      40,  40,  40,  40,  40,  40,  40,  40,  //  41
  2017.      40,  40,  40,  40,  40,  40,  40,  40,  //  41
  2018.      40,  46,  40,  40,  40,  40,  40,  40,  //  41
  2019.      40,  40,  40,  40,  46,  40,  40,  40,  //  41
  2020.      40,  40,  46,  46,  46,  46,  60,  60,  //  41
  2021.      60,  80,  80,  80,  80,  46,  60,  60,  //  42
  2022.      60,  46,  60,  60,  60,  60,  46,  46,  //  42
  2023.      46,  46,  46,  46,  46,  60,  60,  46,  //  42
  2024.      46,  46,  46,  46,  46,  46,  46,  46,  //  42
  2025.      40,  40,  46,  46,  46,  46,  81,  81,  //  42
  2026.      81,  81,  81,  81,  81,  81,  81,  81,  //  42
  2027.      46,  46,  46,  46,  46,  46,  46,  46,  //  42
  2028.      46,  46,  46,  46,  46,  46,  46,  46,  //  42
  2029.      46,  46,  80,  80,  46,  40,  40,  40,  //  43
  2030.      40,  40,  40,  40,  40,  46,  40,  40,  //  43
  2031.      40,  46,  40,  40,  40,  40,  40,  40,  //  43
  2032.      40,  40,  40,  40,  40,  40,  40,  40,  //  43
  2033.      40,  40,  40,  40,  40,  40,  40,  40,  //  43
  2034.      40,  46,  40,  40,  40,  40,  40,  40,  //  43
  2035.      40,  40,  40,  40,  46,  40,  40,  40,  //  43
  2036.      40,  40,  46,  46,  46,  46,  80,  60,  //  43
  2037.      80,  80,  80,  80,  80,  46,  60,  80,  //  44
  2038.      80,  46,  80,  80,  60,  60,  46,  46,  //  44
  2039.      46,  46,  46,  46,  46,  80,  80,  46,  //  44
  2040.      46,  46,  46,  46,  46,  46,  40,  46,  //  44
  2041.      40,  40,  46,  46,  46,  46,  81,  81,  //  44
  2042.      81,  81,  81,  81,  81,  81,  81,  81,  //  44
  2043.      46,  46,  46,  46,  46,  46,  46,  46,  //  44
  2044.      46,  46,  46,  46,  46,  46,  46,  46,  //  44
  2045.      46,  46,  80,  80,  46,  40,  40,  40,  //  45
  2046.      40,  40,  40,  40,  40,  46,  40,  40,  //  45
  2047.      40,  46,  40,  40,  40,  40,  40,  40,  //  45
  2048.      40,  40,  40,  40,  40,  40,  40,  40,  //  45
  2049.      40,  40,  40,  40,  40,  40,  40,  40,  //  45
  2050.      40,  46,  40,  40,  40,  40,  40,  40,  //  45
  2051.      40,  40,  40,  40,  40,  40,  40,  40,  //  45
  2052.      40,  40,  46,  46,  46,  46,  80,  80,  //  45
  2053.      80,  60,  60,  60,  46,  46,  80,  80,  //  46
  2054.      80,  46,  80,  80,  80,  60,  46,  46,  //  46
  2055.      46,  46,  46,  46,  46,  46,  46,  80,  //  46
  2056.      46,  46,  46,  46,  46,  46,  46,  46,  //  46
  2057.      40,  40,  46,  46,  46,  46,  81,  81,  //  46
  2058.      81,  81,  81,  81,  81,  81,  81,  81,  //  46
  2059.      46,  46,  46,  46,  46,  46,  46,  46,  //  46
  2060.      46,  46,  46,  46,  46,  46,  46,  46,  //  46
  2061.      46,  40,  40,  40,  40,  40,  40,  40,  //  47
  2062.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  2063.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  2064.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  2065.      40,  40,  40,  40,  40,  40,  40,  40,  //  47
  2066.      40,  40,  40,  40,  40,  40,  40,   3,  //  47
  2067.      40,  60,  40,  40,  60,  60,  60,  60,  //  47
  2068.      60,  60,  60,  46,  46,  46,  46,   4,  //  47
  2069.      40,  40,  40,  40,  40,  40,  59,  60,  //  48
  2070.      60,  60,  60,  60,  60,  60,  60,  15,  //  48
  2071.       9,   9,   9,   9,   9,   9,   9,   9,  //  48
  2072.       9,   9,   3,   3,  46,  46,  46,  46,  //  48
  2073.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  2074.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  2075.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  2076.      46,  46,  46,  46,  46,  46,  46,  46,  //  48
  2077.      46,  40,  40,  46,  40,  46,  46,  40,  //  49
  2078.      40,  46,  40,  46,  46,  40,  46,  46,  //  49
  2079.      46,  46,  46,  46,  40,  40,  40,  40,  //  49
  2080.      46,  40,  40,  40,  40,  40,  40,  40,  //  49
  2081.      46,  40,  40,  40,  46,  40,  46,  40,  //  49
  2082.      46,  46,  40,  40,  46,  40,  40,   3,  //  49
  2083.      40,  60,  40,  40,  60,  60,  60,  60,  //  49
  2084.      60,  60,  46,  60,  60,  40,  46,  46,  //  49
  2085.      40,  40,  40,  40,  40,  46,  59,  46,  //  50
  2086.      60,  60,  60,  60,  60,  60,  46,  46,  //  50
  2087.       9,   9,   9,   9,   9,   9,   9,   9,  //  50
  2088.       9,   9,  46,  46,  40,  40,  46,  46,  //  50
  2089.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  2090.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  2091.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  2092.      46,  46,  46,  46,  46,  46,  46,  46,  //  50
  2093.      15,  15,  15,  15,   3,   3,   3,   3,  //  51
  2094.       3,   3,   3,   3,   3,   3,   3,   3,  //  51
  2095.       3,   3,   3,  15,  15,  15,  15,  15,  //  51
  2096.      60,  60,  15,  15,  15,  15,  15,  15,  //  51
  2097.      78,  78,  78,  78,  78,  78,  78,  78,  //  51
  2098.      78,  78,  85,  85,  85,  85,  85,  85,  //  51
  2099.      85,  85,  85,  85,  15,  60,  15,  60,  //  51
  2100.      15,  60,   5,   6,   5,   6,  80,  80,  //  51
  2101.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  2102.      46,  40,  40,  40,  40,  40,  40,  40,  //  52
  2103.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  2104.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  2105.      40,  40,  40,  40,  40,  40,  40,  40,  //  52
  2106.      40,  40,  46,  46,  46,  46,  46,  46,  //  52
  2107.      46,  60,  60,  60,  60,  60,  60,  60,  //  52
  2108.      60,  60,  60,  60,  60,  60,  60,  80,  //  52
  2109.      60,  60,  60,  60,  60,   3,  60,  60,  //  53
  2110.      60,  60,  60,  60,  46,  46,  46,  46,  //  53
  2111.      60,  60,  60,  60,  60,  60,  46,  60,  //  53
  2112.      46,  60,  60,  60,  60,  60,  60,  60,  //  53
  2113.      60,  60,  60,  60,  60,  60,  60,  60,  //  53
  2114.      60,  60,  60,  60,  60,  60,  46,  46,  //  53
  2115.      46,  60,  60,  60,  60,  60,  60,  60,  //  53
  2116.      46,  60,  46,  46,  46,  46,  46,  46,  //  53
  2117.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  2118.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  2119.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  2120.      46,  46,  46,  46,  46,  46,  46,  46,  //  54
  2121.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  2122.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  2123.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  2124.      76,  76,  76,  76,  76,  76,  76,  76,  //  54
  2125.      76,  76,  76,  76,  76,  76,  46,  46,  //  55
  2126.      46,  46,  46,  46,  46,  46,  46,  46,  //  55
  2127.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  2128.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  2129.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  2130.      16,  16,  16,  16,  16,  16,  16,  16,  //  55
  2131.      16,  16,  16,  16,  16,  16,  16,  46,  //  55
  2132.      46,  46,  46,   3,  46,  46,  46,  46,  //  55
  2133.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2134.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2135.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2136.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2137.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2138.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2139.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2140.      40,  40,  40,  40,  40,  40,  40,  40,  //  56
  2141.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2142.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2143.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2144.      40,  40,  46,  46,  46,  46,  46,  40,  //  57
  2145.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2146.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2147.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2148.      40,  40,  40,  40,  40,  40,  40,  40,  //  57
  2149.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2150.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2151.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2152.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2153.      40,  40,  40,  46,  46,  46,  46,  46,  //  58
  2154.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2155.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2156.      40,  40,  40,  40,  40,  40,  40,  40,  //  58
  2157.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2158.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2159.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2160.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2161.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2162.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2163.      40,  40,  40,  40,  40,  40,  40,  40,  //  59
  2164.      40,  40,  46,  46,  46,  46,  46,  46,  //  59
  2165.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2166.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2167.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2168.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2169.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2170.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2171.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2172.      23,  24,  23,  24,  23,  24,  23,  24,  //  60
  2173.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  2174.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  2175.      23,  24,  23,  24,  23,  24,  16,  16,  //  61
  2176.      16,  16,  16,  16,  46,  46,  46,  46,  //  61
  2177.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  2178.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  2179.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  2180.      23,  24,  23,  24,  23,  24,  23,  24,  //  61
  2181.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2182.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2183.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2184.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2185.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2186.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2187.      23,  24,  23,  24,  23,  24,  23,  24,  //  62
  2188.      23,  24,  46,  46,  46,  46,  46,  46,  //  62
  2189.      86,  86,  86,  86,  86,  86,  86,  86,  //  63
  2190.      87,  87,  87,  87,  87,  87,  87,  87,  //  63
  2191.      86,  86,  86,  86,  86,  86,  46,  46,  //  63
  2192.      87,  87,  87,  87,  87,  87,  46,  46,  //  63
  2193.      86,  86,  86,  86,  86,  86,  86,  86,  //  63
  2194.      87,  87,  87,  87,  87,  87,  87,  87,  //  63
  2195.      86,  86,  86,  86,  86,  86,  86,  86,  //  63
  2196.      87,  87,  87,  87,  87,  87,  87,  87,  //  63
  2197.      86,  86,  86,  86,  86,  86,  46,  46,  //  64
  2198.      87,  87,  87,  87,  87,  87,  46,  46,  //  64
  2199.      16,  86,  16,  86,  16,  86,  16,  86,  //  64
  2200.      46,  87,  46,  87,  46,  87,  46,  87,  //  64
  2201.      86,  86,  86,  86,  86,  86,  86,  86,  //  64
  2202.      87,  87,  87,  87,  87,  87,  87,  87,  //  64
  2203.      88,  88,  89,  89,  89,  89,  90,  90,  //  64
  2204.      91,  91,  92,  92,  93,  93,  46,  46,  //  64
  2205.      86,  86,  86,  86,  86,  86,  86,  86,  //  65
  2206.      87,  87,  87,  87,  87,  87,  87,  87,  //  65
  2207.      86,  86,  86,  86,  86,  86,  86,  86,  //  65
  2208.      87,  87,  87,  87,  87,  87,  87,  87,  //  65
  2209.      86,  86,  86,  86,  86,  86,  86,  86,  //  65
  2210.      87,  87,  87,  87,  87,  87,  87,  87,  //  65
  2211.      86,  86,  16,  94,  16,  46,  16,  16,  //  65
  2212.      87,  87,  95,  95,  96,  11,  38,  11,  //  65
  2213.      11,  11,  16,  94,  16,  46,  16,  16,  //  66
  2214.      97,  97,  97,  97,  96,  11,  11,  11,  //  66
  2215.      86,  86,  16,  16,  46,  46,  16,  16,  //  66
  2216.      87,  87,  98,  98,  46,  11,  11,  11,  //  66
  2217.      86,  86,  16,  16,  16,  99,  16,  16,  //  66
  2218.      87,  87, 100, 100, 101,  11,  11,  11,  //  66
  2219.      46,  46,  16,  94,  16,  46,  16,  16,  //  66
  2220.     102, 102, 103, 103,  96,  11,  11,  46,  //  66
  2221.       2,   2,   2,   2,   2,   2,   2,   2,  //  67
  2222.       2,   2,   2,   2, 104, 104, 104, 104,  //  67
  2223.       8,   8,   8,   8,   8,   8,   3,   3,  //  67
  2224.       5,   6,   5,   5,   5,   6,   5,   5,  //  67
  2225.       3,   3,   3,   3,   3,   3,   3,   3,  //  67
  2226.     105, 106, 104, 104, 104, 104, 104,  46,  //  67
  2227.       3,   3,   3,   3,   3,   3,   3,   3,  //  67
  2228.       3,   5,   6,   3,   3,   3,   3,  12,  //  67
  2229.      12,   3,   3,   3,   7,   5,   6,  46,  //  68
  2230.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  2231.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  2232.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  2233.      46,  46,  46,  46,  46,  46,  46,  46,  //  68
  2234.      46,  46, 104, 104, 104, 104, 104, 104,  //  68
  2235.      17,  46,  46,  46,  17,  17,  17,  17,  //  68
  2236.      17,  17,   7,   7,   7,   5,   6,  16,  //  68
  2237.     107, 107, 107, 107, 107, 107, 107, 107,  //  69
  2238.     107, 107,   7,   7,   7,   5,   6,  46,  //  69
  2239.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  2240.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  2241.       4,   4,   4,   4,   4,   4,   4,   4,  //  69
  2242.       4,   4,   4,   4,  46,  46,  46,  46,  //  69
  2243.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  2244.      46,  46,  46,  46,  46,  46,  46,  46,  //  69
  2245.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  2246.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  2247.      60,  60,  60,  60,  60,  60,  60,  60,  //  70
  2248.      60,  60,  60,  60,  60,  79,  79,  79,  //  70
  2249.      79,  60,  46,  46,  46,  46,  46,  46,  //  70
  2250.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  2251.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  2252.      46,  46,  46,  46,  46,  46,  46,  46,  //  70
  2253.      15,  15,  38,  15,  15,  15,  15,  38,  //  71
  2254.      15,  15,  16,  38,  38,  38,  16,  16,  //  71
  2255.      38,  38,  38,  16,  15,  38,  15,  15,  //  71
  2256.      38,  38,  38,  38,  38,  38,  15,  15,  //  71
  2257.      15,  15,  15,  15,  38,  15,  38,  15,  //  71
  2258.      38,  15,  38,  38,  38,  38,  16,  16,  //  71
  2259.      38,  38,  15,  38,  16,  40,  40,  40,  //  71
  2260.      40,  46,  46,  46,  46,  46,  46,  46,  //  71
  2261.      46,  46,  46,  46,  46,  46,  46,  46,  //  72
  2262.      46,  46,  46,  46,  46,  46,  46,  46,  //  72
  2263.      46,  46,  46,  19,  19,  19,  19,  19,  //  72
  2264.      19,  19,  19,  19,  19,  19,  19, 108,  //  72
  2265.     109, 109, 109, 109, 109, 109, 109, 109,  //  72
  2266.     109, 109, 109, 109, 110, 110, 110, 110,  //  72
  2267.     111, 111, 111, 111, 111, 111, 111, 111,  //  72
  2268.     111, 111, 111, 111, 112, 112, 112, 112,  //  72
  2269.     113, 113, 113,  46,  46,  46,  46,  46,  //  73
  2270.      46,  46,  46,  46,  46,  46,  46,  46,  //  73
  2271.       7,   7,   7,   7,   7,  15,  15,  15,  //  73
  2272.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  2273.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  2274.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  2275.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  2276.      15,  15,  15,  15,  15,  15,  15,  15,  //  73
  2277.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  2278.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  2279.      15,  15,   7,  15,   7,  15,  15,  15,  //  74
  2280.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  2281.      15,  15,  15,  15,  15,  15,  15,  15,  //  74
  2282.      15,  15,  15,  46,  46,  46,  46,  46,  //  74
  2283.      46,  46,  46,  46,  46,  46,  46,  46,  //  74
  2284.      46,  46,  46,  46,  46,  46,  46,  46,  //  74
  2285.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2286.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2287.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2288.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2289.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2290.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2291.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2292.       7,   7,   7,   7,   7,   7,   7,   7,  //  75
  2293.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  2294.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  2295.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  2296.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  2297.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  2298.       7,   7,   7,   7,   7,   7,   7,   7,  //  76
  2299.       7,   7,  46,  46,  46,  46,  46,  46,  //  76
  2300.      46,  46,  46,  46,  46,  46,  46,  46,  //  76
  2301.      15,  46,  15,  15,  15,  15,  15,  15,  //  77
  2302.       7,   7,   7,   7,  15,  15,  15,  15,  //  77
  2303.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  2304.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  2305.       7,   7,  15,  15,  15,  15,  15,  15,  //  77
  2306.      15,   5,   6,  15,  15,  15,  15,  15,  //  77
  2307.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  2308.      15,  15,  15,  15,  15,  15,  15,  15,  //  77
  2309.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2310.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2311.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2312.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2313.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2314.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2315.      15,  15,  15,  15,  15,  15,  15,  15,  //  78
  2316.      15,  15,  15,  46,  46,  46,  46,  46,  //  78
  2317.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  2318.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  2319.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  2320.      15,  15,  15,  15,  15,  15,  15,  15,  //  79
  2321.      15,  15,  15,  15,  15,  46,  46,  46,  //  79
  2322.      46,  46,  46,  46,  46,  46,  46,  46,  //  79
  2323.      46,  46,  46,  46,  46,  46,  46,  46,  //  79
  2324.      46,  46,  46,  46,  46,  46,  46,  46,  //  79
  2325.      15,  15,  15,  15,  15,  15,  15,  15,  //  80
  2326.      15,  15,  15,  46,  46,  46,  46,  46,  //  80
  2327.      46,  46,  46,  46,  46,  46,  46,  46,  //  80
  2328.      46,  46,  46,  46,  46,  46,  46,  46,  //  80
  2329.     114, 114, 114, 114, 114, 114, 114, 114,  //  80
  2330.     114, 114, 114, 114, 114, 114, 114, 114,  //  80
  2331.     114, 114, 114, 114,  82,  82,  82,  82,  //  80
  2332.      82,  82,  82,  82,  82,  82,  82,  82,  //  80
  2333.      82,  82,  82,  82,  82,  82,  82,  82,  //  81
  2334.     115, 115, 115, 115, 115, 115, 115, 115,  //  81
  2335.     115, 115, 115, 115, 115, 115, 115, 115,  //  81
  2336.     115, 115, 115, 115,  15,  15,  15,  15,  //  81
  2337.      15,  15,  15,  15,  15,  15,  15,  15,  //  81
  2338.      15,  15,  15,  15,  15,  15,  15,  15,  //  81
  2339.      15,  15,  15,  15,  15,  15, 116, 116,  //  81
  2340.     116, 116, 116, 116, 116, 116, 116, 116,  //  81
  2341.     116, 116, 116, 116, 116, 116, 116, 116,  //  82
  2342.     116, 116, 116, 116, 116, 116, 116, 116,  //  82
  2343.     117, 117, 117, 117, 117, 117, 117, 117,  //  82
  2344.     117, 117, 117, 117, 117, 117, 117, 117,  //  82
  2345.     117, 117, 117, 117, 117, 117, 117, 117,  //  82
  2346.     117, 117, 118,  46,  46,  46,  46,  46,  //  82
  2347.      46,  46,  46,  46,  46,  46,  46,  46,  //  82
  2348.      46,  46,  46,  46,  46,  46,  46,  46,  //  82
  2349.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2350.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2351.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2352.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2353.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2354.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2355.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2356.      15,  15,  15,  15,  15,  15,  15,  15,  //  83
  2357.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  2358.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  2359.      15,  15,  15,  15,  15,  15,  46,  46,  //  84
  2360.      46,  46,  46,  46,  46,  46,  46,  46,  //  84
  2361.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  2362.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  2363.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  2364.      15,  15,  15,  15,  15,  15,  15,  15,  //  84
  2365.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  2366.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  2367.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  2368.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  2369.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  2370.      15,  15,  15,  15,  15,  15,  15,  15,  //  85
  2371.      46,  46,  46,  46,  46,  46,  46,  46,  //  85
  2372.      46,  46,  46,  46,  46,  46,  46,  46,  //  85
  2373.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  2374.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  2375.      15,  15,  15,  15,  46,  46,  46,  46,  //  86
  2376.      46,  46,  15,  15,  15,  15,  15,  15,  //  86
  2377.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  2378.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  2379.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  2380.      15,  15,  15,  15,  15,  15,  15,  15,  //  86
  2381.      46,  15,  15,  15,  15,  46,  15,  15,  //  87
  2382.      15,  15,  46,  46,  15,  15,  15,  15,  //  87
  2383.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  2384.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  2385.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  2386.      46,  15,  15,  15,  15,  15,  15,  15,  //  87
  2387.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  2388.      15,  15,  15,  15,  15,  15,  15,  15,  //  87
  2389.      15,  15,  15,  15,  15,  15,  15,  15,  //  88
  2390.      15,  15,  15,  15,  46,  15,  46,  15,  //  88
  2391.      15,  15,  15,  46,  46,  46,  15,  46,  //  88
  2392.      15,  15,  15,  15,  15,  15,  15,  46,  //  88
  2393.      46,  15,  15,  15,  15,  15,  15,  15,  //  88
  2394.      46,  46,  46,  46,  46,  46,  46,  46,  //  88
  2395.      46,  46,  46,  46,  46,  46, 119, 119,  //  88
  2396.     119, 119, 119, 119, 119, 119, 119, 119,  //  88
  2397.     114, 114, 114, 114, 114, 114, 114, 114,  //  89
  2398.     114, 114,  83,  83,  83,  83,  83,  83,  //  89
  2399.      83,  83,  83,  83,  15,  46,  46,  46,  //  89
  2400.      15,  15,  15,  15,  15,  15,  15,  15,  //  89
  2401.      15,  15,  15,  15,  15,  15,  15,  15,  //  89
  2402.      15,  15,  15,  15,  15,  15,  15,  15,  //  89
  2403.      46,  15,  15,  15,  15,  15,  15,  15,  //  89
  2404.      15,  15,  15,  15,  15,  15,  15,  46,  //  89
  2405.       2,   3,   3,   3,  15,  59,   3, 120,  //  90
  2406.       5,   6,   5,   6,   5,   6,   5,   6,  //  90
  2407.       5,   6,  15,  15,   5,   6,   5,   6,  //  90
  2408.       5,   6,   5,   6,   8,   5,   6,   5,  //  90
  2409.      15, 121, 121, 121, 121, 121, 121, 121,  //  90
  2410.     121, 121,  60,  60,  60,  60,  60,  60,  //  90
  2411.       8,  59,  59,  59,  59,  59,  15,  15,  //  90
  2412.      46,  46,  46,  46,  46,  46,  46,  15,  //  90
  2413.      46,  40,  40,  40,  40,  40,  40,  40,  //  91
  2414.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2415.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2416.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2417.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2418.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2419.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2420.      40,  40,  40,  40,  40,  40,  40,  40,  //  91
  2421.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  2422.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  2423.      40,  40,  40,  40,  40,  46,  46,  46,  //  92
  2424.      46,  60,  60,  59,  59,  59,  59,  46,  //  92
  2425.      46,  40,  40,  40,  40,  40,  40,  40,  //  92
  2426.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  2427.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  2428.      40,  40,  40,  40,  40,  40,  40,  40,  //  92
  2429.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2430.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2431.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2432.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2433.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2434.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2435.      40,  40,  40,  40,  40,  40,  40,  40,  //  93
  2436.      40,  40,  40,   3,  59,  59,  59,  46,  //  93
  2437.      46,  46,  46,  46,  46,  40,  40,  40,  //  94
  2438.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  2439.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  2440.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  2441.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  2442.      40,  40,  40,  40,  40,  46,  46,  46,  //  94
  2443.      46,  40,  40,  40,  40,  40,  40,  40,  //  94
  2444.      40,  40,  40,  40,  40,  40,  40,  40,  //  94
  2445.      40,  40,  40,  40,  40,  40,  40,  40,  //  95
  2446.      40,  40,  40,  40,  40,  40,  40,  46,  //  95
  2447.      15,  15,  85,  85,  85,  85,  15,  15,  //  95
  2448.      15,  15,  15,  15,  15,  15,  15,  15,  //  95
  2449.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  2450.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  2451.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  2452.      46,  46,  46,  46,  46,  46,  46,  46,  //  95
  2453.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  2454.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  2455.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  2456.      15,  15,  15,  15,  15,  46,  46,  46,  //  96
  2457.      85,  85,  85,  85,  85,  85,  85,  85,  //  96
  2458.      85,  85,  15,  15,  15,  15,  15,  15,  //  96
  2459.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  2460.      15,  15,  15,  15,  15,  15,  15,  15,  //  96
  2461.      15,  15,  15,  15,  46,  46,  46,  46,  //  97
  2462.      46,  46,  46,  46,  46,  46,  46,  46,  //  97
  2463.      46,  46,  46,  46,  46,  46,  46,  46,  //  97
  2464.      46,  46,  46,  46,  46,  46,  46,  46,  //  97
  2465.      15,  15,  15,  15,  15,  15,  15,  15,  //  97
  2466.      15,  15,  15,  15,  15,  15,  15,  15,  //  97
  2467.      15,  15,  15,  15,  15,  15,  15,  15,  //  97
  2468.      15,  15,  15,  15,  46,  46,  46,  15,  //  97
  2469.     114, 114, 114, 114, 114, 114, 114, 114,  //  98
  2470.     114, 114,  15,  15,  15,  15,  15,  15,  //  98
  2471.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  2472.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  2473.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  2474.      15,  15,  15,  15,  15,  15,  15,  15,  //  98
  2475.      15,  46,  46,  46,  46,  46,  46,  46,  //  98
  2476.      46,  46,  46,  46,  46,  46,  46,  46,  //  98
  2477.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2478.      15,  15,  15,  15,  46,  46,  46,  46,  //  99
  2479.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2480.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2481.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2482.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2483.      15,  15,  15,  15,  15,  15,  15,  15,  //  99
  2484.      15,  15,  15,  15,  15,  15,  15,  46,  //  99
  2485.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2486.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2487.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2488.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2489.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2490.      15,  15,  15,  15,  15,  15,  15,  15,  // 100
  2491.      15,  15,  15,  15,  15,  15,  15,  46,  // 100
  2492.      46,  46,  46,  15,  15,  15,  15,  15,  // 100
  2493.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2494.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2495.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2496.      15,  15,  15,  15,  15,  15,  46,  46,  // 101
  2497.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2498.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2499.      15,  15,  15,  15,  15,  15,  15,  15,  // 101
  2500.      15,  15,  15,  15,  15,  15,  15,  46,  // 101
  2501.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2502.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2503.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2504.      40,  40,  40,  40,  40,  40,  40,  40,  // 102
  2505.      40,  40,  40,  40,  40,  40,  46,  46,  // 102
  2506.      46,  46,  46,  46,  46,  46,  46,  46,  // 102
  2507.      46,  46,  46,  46,  46,  46,  46,  46,  // 102
  2508.      46,  46,  46,  46,  46,  46,  46,  46,  // 102
  2509.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2510.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2511.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2512.      40,  40,  40,  40,  40,  40,  40,  40,  // 103
  2513.      40,  40,  40,  40,  46,  46,  46,  46,  // 103
  2514.      46,  46,  46,  46,  46,  46,  46,  46,  // 103
  2515.      46,  46,  46,  46,  46,  46,  46,  46,  // 103
  2516.      46,  46,  46,  46,  46,  46,  46,  46,  // 103
  2517.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2518.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2519.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2520.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2521.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2522.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2523.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2524.     122, 122, 122, 122, 122, 122, 122, 122,  // 104
  2525.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2526.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2527.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2528.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2529.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2530.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2531.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2532.     123, 123, 123, 123, 123, 123, 123, 123,  // 105
  2533.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2534.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2535.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2536.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2537.      40,  40,  40,  40,  40,  40,  40,  40,  // 106
  2538.      40,  40,  40,  40,  40,  40,  46,  46,  // 106
  2539.      46,  46,  46,  46,  46,  46,  46,  46,  // 106
  2540.      46,  46,  46,  46,  46,  46,  46,  46,  // 106
  2541.      16,  16,  16,  16,  16,  16,  16,  46,  // 107
  2542.      46,  46,  46,  46,  46,  46,  46,  46,  // 107
  2543.      46,  46,  46,  16,  16,  16,  16,  16,  // 107
  2544.      46,  46,  46,  46,  46,  46,  60,  40,  // 107
  2545.      40,  40,  40,  40,  40,  40,  40,  40,  // 107
  2546.      40,   7,  40,  40,  40,  40,  40,  40,  // 107
  2547.      40,  40,  40,  40,  40,  40,  40,  46,  // 107
  2548.      40,  40,  40,  40,  40,  46,  40,  46,  // 107
  2549.      40,  40,  46,  40,  40,  46,  40,  40,  // 108
  2550.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2551.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2552.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2553.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2554.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2555.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2556.      40,  40,  40,  40,  40,  40,  40,  40,  // 108
  2557.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2558.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2559.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2560.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2561.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2562.      40,  40,  40,  40,  40,  40,  40,  40,  // 109
  2563.      40,  40,  46,  46,  46,  46,  46,  46,  // 109
  2564.      46,  46,  46,  46,  46,  46,  46,  46,  // 109
  2565.      46,  46,  46,  46,  46,  46,  46,  46,  // 110
  2566.      46,  46,  46,  46,  46,  46,  46,  46,  // 110
  2567.      46,  46,  46,  40,  40,  40,  40,  40,  // 110
  2568.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2569.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2570.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2571.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2572.      40,  40,  40,  40,  40,  40,  40,  40,  // 110
  2573.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2574.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2575.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2576.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2577.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2578.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2579.      40,  40,  40,  40,  40,  40,  40,  40,  // 111
  2580.      40,  40,  40,  40,  40,  40,   5,   6,  // 111
  2581.      46,  46,  46,  46,  46,  46,  46,  46,  // 112
  2582.      46,  46,  46,  46,  46,  46,  46,  46,  // 112
  2583.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2584.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2585.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2586.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2587.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2588.      40,  40,  40,  40,  40,  40,  40,  40,  // 112
  2589.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2590.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2591.      46,  46,  40,  40,  40,  40,  40,  40,  // 113
  2592.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2593.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2594.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2595.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2596.      40,  40,  40,  40,  40,  40,  40,  40,  // 113
  2597.      40,  40,  40,  40,  40,  40,  40,  40,  // 114
  2598.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2599.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2600.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2601.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2602.      46,  46,  46,  46,  46,  46,  46,  46,  // 114
  2603.      40,  40,  40,  40,  40,  40,  40,  40,  // 114
  2604.      40,  40,  40,  40,  46,  46,  46,  46,  // 114
  2605.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2606.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2607.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2608.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2609.      60,  60,  60,  60,  46,  46,  46,  46,  // 115
  2610.      46,  46,  46,  46,  46,  46,  46,  46,  // 115
  2611.       3,   8,   8,  12,  12,   5,   6,   5,  // 115
  2612.       6,   5,   6,   5,   6,   5,   6,   5,  // 115
  2613.       6,   5,   6,   5,   6,  46,  46,  46,  // 116
  2614.      46,   3,   3,   3,   3,  12,  12,  12,  // 116
  2615.       3,   3,   3,  46,   3,   3,   3,   3,  // 116
  2616.       8,   5,   6,   5,   6,   5,   6,   3,  // 116
  2617.       3,   3,   7,   8,   7,   7,   7,  46,  // 116
  2618.       3,   4,   3,   3,  46,  46,  46,  46,  // 116
  2619.      40,  40,  40,  46,  40,  46,  40,  40,  // 116
  2620.      40,  40,  40,  40,  40,  40,  40,  40,  // 116
  2621.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2622.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2623.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2624.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2625.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2626.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2627.      40,  40,  40,  40,  40,  40,  40,  40,  // 117
  2628.      40,  40,  40,  40,  40,  46,  46, 104,  // 117
  2629.      46,   3,   3,   3,   4,   3,   3,   3,  // 118
  2630.       5,   6,   3,   7,   3,   8,   3,   3,  // 118
  2631.       9,   9,   9,   9,   9,   9,   9,   9,  // 118
  2632.       9,   9,   3,   3,   7,   7,   7,   3,  // 118
  2633.       3,  10,  10,  10,  10,  10,  10,  10,  // 118
  2634.      10,  10,  10,  10,  10,  10,  10,  10,  // 118
  2635.      10,  10,  10,  10,  10,  10,  10,  10,  // 118
  2636.      10,  10,  10,   5,   3,   6,  11,  12,  // 118
  2637.      11,  13,  13,  13,  13,  13,  13,  13,  // 119
  2638.      13,  13,  13,  13,  13,  13,  13,  13,  // 119
  2639.      13,  13,  13,  13,  13,  13,  13,  13,  // 119
  2640.      13,  13,  13,   5,   7,   6,   7,  46,  // 119
  2641.      46,   3,   5,   6,   3,   3,  40,  40,  // 119
  2642.      40,  40,  40,  40,  40,  40,  40,  40,  // 119
  2643.      59,  40,  40,  40,  40,  40,  40,  40,  // 119
  2644.      40,  40,  40,  40,  40,  40,  40,  40,  // 119
  2645.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2646.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2647.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2648.      40,  40,  40,  40,  40,  40,  59,  59,  // 120
  2649.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2650.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2651.      40,  40,  40,  40,  40,  40,  40,  40,  // 120
  2652.      40,  40,  40,  40,  40,  40,  40,  46,  // 120
  2653.      46,  46,  40,  40,  40,  40,  40,  40,  // 121
  2654.      46,  46,  40,  40,  40,  40,  40,  40,  // 121
  2655.      46,  46,  40,  40,  40,  40,  40,  40,  // 121
  2656.      46,  46,  40,  40,  40,  46,  46,  46,  // 121
  2657.       4,   4,   7,  11,  15,   4,   4,  46,  // 121
  2658.       7,   7,   7,   7,   7,  15,  15,  46,  // 121
  2659.      46,  46,  46,  46,  46,  46,  46,  46,  // 121
  2660.      46,  46,  46,  46,  46,  15,  46,  46   // 121
  2661.   };
  2662.  
  2663.   // The A table has 124 entries for a total of 496 bytes.
  2664.  
  2665.   private static final int A[] = {
  2666.     0x0001000F,  //   0   Cc, ignorable
  2667.     0x0004000F,  //   1   Cc, whitespace
  2668.     0x0004000C,  //   2   Zs, whitespace
  2669.     0x00000018,  //   3   Po
  2670.     0x0006001A,  //   4   Sc, currency
  2671.     0x00000015,  //   5   Ps
  2672.     0x00000016,  //   6   Pe
  2673.     0x00000019,  //   7   Sm
  2674.     0x00000014,  //   8   Pd
  2675.     0x00036009,  //   9   Nd, identifier part, decimal 16
  2676.     0x0827FE01,  //  10   Lu, hasLower (add 32), identifier start, supradecimal 31
  2677.     0x0000001B,  //  11   Sk
  2678.     0x00050017,  //  12   Pc, underscore
  2679.     0x0817FE02,  //  13   Ll, hasUpper (subtract 32), identifier start, supradecimal 31
  2680.     0x0000000C,  //  14   Zs
  2681.     0x0000001C,  //  15   So
  2682.     0x00070002,  //  16   Ll, identifier start
  2683.     0x0000600B,  //  17   No, decimal 16
  2684.     0x0000500B,  //  18   No, decimal 8
  2685.     0x0000800B,  //  19   No, strange
  2686.     0x08270001,  //  20   Lu, hasLower (add 32), identifier start
  2687.     0x08170002,  //  21   Ll, hasUpper (subtract 32), identifier start
  2688.     0xE1D70002,  //  22   Ll, hasUpper (subtract -121), identifier start
  2689.     0x00670001,  //  23   Lu, hasLower (add 1), identifier start
  2690.     0x00570002,  //  24   Ll, hasUpper (subtract 1), identifier start
  2691.     0xCE670001,  //  25   Lu, hasLower (add -199), identifier start
  2692.     0x3A170002,  //  26   Ll, hasUpper (subtract 232), identifier start
  2693.     0xE1E70001,  //  27   Lu, hasLower (add -121), identifier start
  2694.     0x4B170002,  //  28   Ll, hasUpper (subtract 300), identifier start
  2695.     0x34A70001,  //  29   Lu, hasLower (add 210), identifier start
  2696.     0x33A70001,  //  30   Lu, hasLower (add 206), identifier start
  2697.     0x33670001,  //  31   Lu, hasLower (add 205), identifier start
  2698.     0x32A70001,  //  32   Lu, hasLower (add 202), identifier start
  2699.     0x32E70001,  //  33   Lu, hasLower (add 203), identifier start
  2700.     0x33E70001,  //  34   Lu, hasLower (add 207), identifier start
  2701.     0x34E70001,  //  35   Lu, hasLower (add 211), identifier start
  2702.     0x34670001,  //  36   Lu, hasLower (add 209), identifier start
  2703.     0x35670001,  //  37   Lu, hasLower (add 213), identifier start
  2704.     0x00070001,  //  38   Lu, identifier start
  2705.     0x36A70001,  //  39   Lu, hasLower (add 218), identifier start
  2706.     0x00070005,  //  40   Lo, identifier start
  2707.     0x36670001,  //  41   Lu, hasLower (add 217), identifier start
  2708.     0x36E70001,  //  42   Lu, hasLower (add 219), identifier start
  2709.     0x00AF0001,  //  43   Lu, hasLower (add 2), hasTitle, identifier start
  2710.     0x007F0003,  //  44   Lt, hasUpper (subtract 1), hasLower (add 1), hasTitle, identifier start
  2711.     0x009F0002,  //  45   Ll, hasUpper (subtract 2), hasTitle, identifier start
  2712.     0x00000000,  //  46   unassigned
  2713.     0x34970002,  //  47   Ll, hasUpper (subtract 210), identifier start
  2714.     0x33970002,  //  48   Ll, hasUpper (subtract 206), identifier start
  2715.     0x33570002,  //  49   Ll, hasUpper (subtract 205), identifier start
  2716.     0x32970002,  //  50   Ll, hasUpper (subtract 202), identifier start
  2717.     0x32D70002,  //  51   Ll, hasUpper (subtract 203), identifier start
  2718.     0x33D70002,  //  52   Ll, hasUpper (subtract 207), identifier start
  2719.     0x34570002,  //  53   Ll, hasUpper (subtract 209), identifier start
  2720.     0x34D70002,  //  54   Ll, hasUpper (subtract 211), identifier start
  2721.     0x35570002,  //  55   Ll, hasUpper (subtract 213), identifier start
  2722.     0x36970002,  //  56   Ll, hasUpper (subtract 218), identifier start
  2723.     0x36570002,  //  57   Ll, hasUpper (subtract 217), identifier start
  2724.     0x36D70002,  //  58   Ll, hasUpper (subtract 219), identifier start
  2725.     0x00070004,  //  59   Lm, identifier start
  2726.     0x00030006,  //  60   Mn, identifier part
  2727.     0x09A70001,  //  61   Lu, hasLower (add 38), identifier start
  2728.     0x09670001,  //  62   Lu, hasLower (add 37), identifier start
  2729.     0x10270001,  //  63   Lu, hasLower (add 64), identifier start
  2730.     0x0FE70001,  //  64   Lu, hasLower (add 63), identifier start
  2731.     0x09970002,  //  65   Ll, hasUpper (subtract 38), identifier start
  2732.     0x09570002,  //  66   Ll, hasUpper (subtract 37), identifier start
  2733.     0x10170002,  //  67   Ll, hasUpper (subtract 64), identifier start
  2734.     0x0FD70002,  //  68   Ll, hasUpper (subtract 63), identifier start
  2735.     0x0F970002,  //  69   Ll, hasUpper (subtract 62), identifier start
  2736.     0x0E570002,  //  70   Ll, hasUpper (subtract 57), identifier start
  2737.     0x0BD70002,  //  71   Ll, hasUpper (subtract 47), identifier start
  2738.     0x0D970002,  //  72   Ll, hasUpper (subtract 54), identifier start
  2739.     0x15970002,  //  73   Ll, hasUpper (subtract 86), identifier start
  2740.     0x14170002,  //  74   Ll, hasUpper (subtract 80), identifier start
  2741.     0x14270001,  //  75   Lu, hasLower (add 80), identifier start
  2742.     0x0C270001,  //  76   Lu, hasLower (add 48), identifier start
  2743.     0x0C170002,  //  77   Ll, hasUpper (subtract 48), identifier start
  2744.     0x00034009,  //  78   Nd, identifier part, decimal 0
  2745.     0x00000007,  //  79   Me
  2746.     0x00030008,  //  80   Mc, identifier part
  2747.     0x00037409,  //  81   Nd, identifier part, decimal 26
  2748.     0x00005A0B,  //  82   No, decimal 13
  2749.     0x00006E0B,  //  83   No, decimal 23
  2750.     0x0000740B,  //  84   No, decimal 26
  2751.     0x0000000B,  //  85   No
  2752.     0xFE170002,  //  86   Ll, hasUpper (subtract -8), identifier start
  2753.     0xFE270001,  //  87   Lu, hasLower (add -8), identifier start
  2754.     0xED970002,  //  88   Ll, hasUpper (subtract -74), identifier start
  2755.     0xEA970002,  //  89   Ll, hasUpper (subtract -86), identifier start
  2756.     0xE7170002,  //  90   Ll, hasUpper (subtract -100), identifier start
  2757.     0xE0170002,  //  91   Ll, hasUpper (subtract -128), identifier start
  2758.     0xE4170002,  //  92   Ll, hasUpper (subtract -112), identifier start
  2759.     0xE0970002,  //  93   Ll, hasUpper (subtract -126), identifier start
  2760.     0xFDD70002,  //  94   Ll, hasUpper (subtract -9), identifier start
  2761.     0xEDA70001,  //  95   Lu, hasLower (add -74), identifier start
  2762.     0xFDE70001,  //  96   Lu, hasLower (add -9), identifier start
  2763.     0xEAA70001,  //  97   Lu, hasLower (add -86), identifier start
  2764.     0xE7270001,  //  98   Lu, hasLower (add -100), identifier start
  2765.     0xFE570002,  //  99   Ll, hasUpper (subtract -7), identifier start
  2766.     0xE4270001,  // 100   Lu, hasLower (add -112), identifier start
  2767.     0xFE670001,  // 101   Lu, hasLower (add -7), identifier start
  2768.     0xE0270001,  // 102   Lu, hasLower (add -128), identifier start
  2769.     0xE0A70001,  // 103   Lu, hasLower (add -126), identifier start
  2770.     0x00010010,  // 104   Cf, ignorable
  2771.     0x0004000D,  // 105   Zl, whitespace
  2772.     0x0004000E,  // 106   Zp, whitespace
  2773.     0x0000400B,  // 107   No, decimal 0
  2774.     0x0000440B,  // 108   No, decimal 2
  2775.     0x0427420A,  // 109   Nl, hasLower (add 16), identifier start, decimal 1
  2776.     0x0427800A,  // 110   Nl, hasLower (add 16), identifier start, strange
  2777.     0x0417620A,  // 111   Nl, hasUpper (subtract 16), identifier start, decimal 17
  2778.     0x0417800A,  // 112   Nl, hasUpper (subtract 16), identifier start, strange
  2779.     0x0007800A,  // 113   Nl, identifier start, strange
  2780.     0x0000420B,  // 114   No, decimal 1
  2781.     0x0000720B,  // 115   No, decimal 25
  2782.     0x06A0001C,  // 116   So, hasLower (add 26)
  2783.     0x0690001C,  // 117   So, hasUpper (subtract 26)
  2784.     0x00006C0B,  // 118   No, decimal 22
  2785.     0x0000560B,  // 119   No, decimal 11
  2786.     0x0007720A,  // 120   Nl, identifier start, decimal 25
  2787.     0x0007400A,  // 121   Nl, identifier start, decimal 0
  2788.     0x00000013,  // 122   Cs
  2789.     0x00000012   // 123   Co
  2790.   };
  2791.  
  2792.   // In all, the character property tables require 9328 bytes.
  2793.  
  2794. }
  2795.