8343157: Examine large files for character encoding/decoding

Reviewed-by: alanb
This commit is contained in:
Naoto Sato 2025-04-14 16:09:35 +00:00
parent 313c34ae56
commit d748bb5cbb
55 changed files with 2 additions and 164679 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,74 +0,0 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*
* package private helper class which provides decoder (native->ucs)
* mapping capability for the benefit of compound encoders/decoders
* whose individual component submappings do not need an association with
* an enclosing charset
*
*/
public class DBCSDecoderMapping {
/* 1rst level index */
private short[] index1;
/*
* 2nd level index, provided by subclass
* every string has 0x10*(end-start+1) characters.
*/
private String[] index2;
protected int start;
protected int end;
protected static final char REPLACE_CHAR='\uFFFD';
public DBCSDecoderMapping(short[] index1, String[] index2,
int start, int end) {
this.index1 = index1;
this.index2 = index2;
this.start = start;
this.end = end;
}
/*
* Can be changed by subclass
*/
protected char decodeSingle(int b) {
if (b >= 0)
return (char) b;
return REPLACE_CHAR;
}
protected char decodeDouble(int byte1, int byte2) {
if (((byte1 < 0) || (byte1 > index1.length))
|| ((byte2 < start) || (byte2 > end)))
return REPLACE_CHAR;
int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
return index2[index1[byte1] >> 4].charAt(n);
}
}

View File

@ -1,162 +0,0 @@
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
/**
* An abstract base class for subclasses which decode
* IBM double byte host encodings such as ibm code
* pages 942,943,948, etc.
*
*/
abstract class DBCS_IBM_ASCII_Decoder extends CharsetDecoder
{
protected static final char REPLACE_CHAR='\uFFFD';
protected String singleByteToChar;
protected boolean leadByte[];
protected short index1[];
protected String index2;
protected int mask1;
protected int mask2;
protected int shift;
protected DBCS_IBM_ASCII_Decoder(Charset cs) {
super(cs, 0.5f, 1.0f);
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
int b1, b2;
b1 = sa[sp];
int inputSize = 1;
int v = 0;
char outputChar = REPLACE_CHAR;
if (b1 < 0)
b1 += 256;
if (!leadByte[b1])
{
outputChar = singleByteToChar.charAt(b1);
} else {
if (sl - sp < 2)
return CoderResult.UNDERFLOW;
b2 = sa[sp + 1];
if (b2 < 0)
b2 += 256;
inputSize++;
// Lookup in the two level index
v = b1 * 256 + b2;
outputChar = index2.charAt(index1[((v & mask1) >> shift)]
+ (v & mask2));
}
if (outputChar == '\uFFFD')
return CoderResult.unmappableForLength(inputSize);
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
char outputChar = REPLACE_CHAR;
int inputSize = 1;
int b1, b2;
int v = 0;
b1 = src.get();
if (b1 < 0)
b1 += 256;
if (!leadByte[b1])
{
outputChar = singleByteToChar.charAt(b1);
} else {
if (src.remaining() < 1)
return CoderResult.UNDERFLOW;
b2 = src.get();
if (b2 < 0)
b2 += 256;
inputSize++;
// Lookup in the two level index
v = b1 * 256 + b2;
outputChar = index2.charAt(index1[((v & mask1) >> shift)]
+ (v & mask2));
}
if (outputChar == REPLACE_CHAR)
return CoderResult.unmappableForLength(inputSize);
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
mark += inputSize;
dst.put(outputChar);
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
}

View File

@ -1,197 +0,0 @@
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.Surrogate;
/**
* An abstract base class for subclasses which encodes
* IBM double byte host encodings such as ibm code
* pages 942,943,948, etc.
*
*/
abstract class DBCS_IBM_ASCII_Encoder extends CharsetEncoder
{
protected static final char REPLACE_CHAR='\uFFFD';
private byte b1;
private byte b2;
protected short index1[];
protected String index2;
protected String index2a;
protected int mask1;
protected int mask2;
protected int shift;
private final Surrogate.Parser sgp = new Surrogate.Parser();
protected DBCS_IBM_ASCII_Encoder(Charset cs) {
super(cs, 2.0f, 2.0f);
}
/**
* Returns true if the given character can be converted to the
* target character encoding.
*/
public boolean canEncode(char ch) {
int index;
int theBytes;
index = index1[((ch & mask1) >> shift)] + (ch & mask2);
if (index < 15000)
theBytes = (int)(index2.charAt(index));
else
theBytes = (int)(index2a.charAt(index-15000));
if (theBytes != 0)
return (true);
// only return true if input char was unicode null - all others are
// undefined
return( ch == '\u0000');
}
private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
char[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
byte[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
int outputSize = 0; // size of output
try {
while (sp < sl) {
int index;
int theBytes;
char c = sa[sp];
if (Surrogate.is(c)) {
if (sgp.parse(c, sa, sp, sl) < 0)
return sgp.error();
return sgp.unmappableResult();
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
index = index1[((c & mask1) >> shift)]
+ (c & mask2);
if (index < 15000)
theBytes = (int)(index2.charAt(index));
else
theBytes = (int)(index2a.charAt(index-15000));
b1 = (byte)((theBytes & 0x0000ff00)>>8);
b2 = (byte)(theBytes & 0x000000ff);
if (b1 == 0x00 && b2 == 0x00
&& c != '\u0000') {
return CoderResult.unmappableForLength(1);
}
if (b1 == 0) {
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = (byte) b2;
} else {
if (dl - dp < 2)
return CoderResult.OVERFLOW;
da[dp++] = (byte) b1;
da[dp++] = (byte) b2;
}
sp++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
int mark = src.position();
int outputSize = 0; // size of output
try {
while (src.hasRemaining()) {
int index;
int theBytes;
char c = src.get();
if (Surrogate.is(c)) {
if (sgp.parse(c, src) < 0)
return sgp.error();
return sgp.unmappableResult();
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
index = index1[((c & mask1) >> shift)]
+ (c & mask2);
if (index < 15000)
theBytes = (int)(index2.charAt(index));
else
theBytes = (int)(index2a.charAt(index-15000));
b1 = (byte)((theBytes & 0x0000ff00)>>8);
b2 = (byte)(theBytes & 0x000000ff);
if (b1 == 0x00 && b2 == 0x00
&& c != '\u0000') {
return CoderResult.unmappableForLength(1);
}
if (b1 == 0) {
if (dst.remaining() < 1)
return CoderResult.OVERFLOW;
dst.put((byte) b2);
} else {
if (dst.remaining() < 2)
return CoderResult.OVERFLOW;
dst.put((byte) b1);
dst.put((byte) b2);
}
mark++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
if (true && src.hasArray() && dst.hasArray())
return encodeArrayLoop(src, dst);
else
return encodeBufferLoop(src, dst);
}
}

View File

@ -1,223 +0,0 @@
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
/**
* An abstract base class for subclasses which decode
* IBM double byte ebcdic host encodings such as ibm code
* pages 933, 935, 937,... etc
*
*/
public abstract class DBCS_IBM_EBCDIC_Decoder extends CharsetDecoder
{
private DBCSDecoderMapping decoderMapping;
protected static final char REPLACE_CHAR='\uFFFD';
protected String singleByteToChar;
protected short index1[];
protected String index2;
protected int mask1;
protected int mask2;
protected int shift;
private static final int SBCS = 0;
private static final int DBCS = 1;
private static final int SO = 0x0e;
private static final int SI = 0x0f;
private int currentState;
protected DBCS_IBM_EBCDIC_Decoder(Charset cs) {
super(cs, 0.5f, 1.0f);
}
protected void implReset() {
currentState = SBCS;
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
int b1, b2;
b1 = sa[sp];
int inputSize = 1;
int v = 0;
char outputChar = REPLACE_CHAR;
if (b1 < 0)
b1 += 256;
if (b1 == SO) { // Shift out
// For SO characters - simply validate the state and if OK
// update the state and go to the next byte
if (currentState != SBCS)
return CoderResult.malformedForLength(1);
else
currentState = DBCS;
} else if (b1 == SI) {
// For SI characters - simply validate the state and if OK
// update the state and go to the next byte
if (currentState != DBCS) {
return CoderResult.malformedForLength(1);
} else {
currentState = SBCS;
}
} else {
if (currentState == SBCS) {
outputChar = singleByteToChar.charAt(b1);
} else {
if (sl - sp < 2)
return CoderResult.UNDERFLOW;
b2 = sa[sp + 1];
if (b2 < 0)
b2 += 256;
inputSize++;
// Check validity of dbcs ebcdic byte pair values
if ((b1 != 0x40 || b2 != 0x40) &&
(b2 < 0x41 || b2 > 0xfe)) {
return CoderResult.malformedForLength(2);
}
// Lookup in the two level index
v = b1 * 256 + b2;
outputChar = index2.charAt(index1[((v & mask1) >> shift)]
+ (v & mask2));
}
if (outputChar == '\uFFFD')
return CoderResult.unmappableForLength(inputSize);
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
}
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
int b1, b2;
int v = 0;
b1 = src.get();
int inputSize = 1;
char outputChar = REPLACE_CHAR;
if (b1 < 0)
b1 += 256;
if (b1 == SO) { // Shift out
// For SO characters - simply validate the state and if OK
// update the state and go to the next byte
if (currentState != SBCS)
return CoderResult.malformedForLength(1);
else
currentState = DBCS;
} else if (b1 == SI) {
// For SI characters - simply validate the state and if OK
// update the state and go to the next byte
if (currentState != DBCS) {
return CoderResult.malformedForLength(1);
} else {
currentState = SBCS;
}
} else {
if (currentState == SBCS) {
outputChar = singleByteToChar.charAt(b1);
} else {
if (src.remaining() < 1)
return CoderResult.UNDERFLOW;
b2 = src.get();
if (b2 < 0)
b2 += 256;
inputSize++;
// Check validity of dbcs ebcdic byte pair values
if ((b1 != 0x40 || b2 != 0x40) &&
(b2 < 0x41 || b2 > 0xfe)) {
return CoderResult.malformedForLength(2);
}
// Lookup in the two level index
v = b1 * 256 + b2;
outputChar = index2.charAt(index1[((v & mask1) >> shift)]
+ (v & mask2));
}
if (outputChar == REPLACE_CHAR)
return CoderResult.unmappableForLength(inputSize);
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
dst.put(outputChar);
}
mark += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
}

View File

@ -1,251 +0,0 @@
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.Surrogate;
/**
* An abstract base class for subclasses which encodes
* IBM double byte host encodings such as ibm code
* pages 942,943,948, etc.
*
*/
public abstract class DBCS_IBM_EBCDIC_Encoder extends CharsetEncoder
{
protected static final char REPLACE_CHAR='\uFFFD';
private byte b1;
private byte b2;
protected short index1[];
protected String index2;
protected String index2a;
protected int mask1;
protected int mask2;
protected int shift;
private static final int SBCS = 0;
private static final int DBCS = 1;
private static final byte SO = 0x0e;
private static final byte SI = 0x0f;
private int currentState;
private final Surrogate.Parser sgp = new Surrogate.Parser();
protected DBCS_IBM_EBCDIC_Encoder(Charset cs) {
super(cs, 4.0f, 5.0f, new byte[] {(byte)0x6f});
}
protected void implReset() {
currentState = SBCS;
}
protected CoderResult implFlush(ByteBuffer out) {
if (currentState == DBCS) {
if (out.remaining() < 1)
return CoderResult.OVERFLOW;
out.put(SI);
}
implReset();
return CoderResult.UNDERFLOW;
}
/**
* Returns true if the given character can be converted to the
* target character encoding.
*/
public boolean canEncode(char ch) {
int index;
int theBytes;
index = index1[((ch & mask1) >> shift)] + (ch & mask2);
if (index < 15000)
theBytes = (int)(index2.charAt(index));
else
theBytes = (int)(index2a.charAt(index-15000));
if (theBytes != 0)
return (true);
// only return true if input char was unicode null - all others are
// undefined
return( ch == '\u0000');
}
private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
char[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
byte[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
int outputSize = 0; // size of output
int spaceNeeded;
try {
while (sp < sl) {
int index;
int theBytes;
char c = sa[sp];
if (Surrogate.is(c)) {
if (sgp.parse(c, sa, sp, sl) < 0)
return sgp.error();
return sgp.unmappableResult();
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
index = index1[((c & mask1) >> shift)]
+ (c & mask2);
if (index < 15000)
theBytes = (int)(index2.charAt(index));
else
theBytes = (int)(index2a.charAt(index-15000));
b1= (byte)((theBytes & 0x0000ff00)>>8);
b2 = (byte)(theBytes & 0x000000ff);
if (b1 == 0x00 && b2 == 0x00
&& c != '\u0000') {
return CoderResult.unmappableForLength(1);
}
if (currentState == DBCS && b1 == 0x00) {
if (dl - dp < 1)
return CoderResult.OVERFLOW;
currentState = SBCS;
da[dp++] = SI;
} else if (currentState == SBCS && b1 != 0x00) {
if (dl - dp < 1)
return CoderResult.OVERFLOW;
currentState = DBCS;
da[dp++] = SO;
}
if (currentState == DBCS)
spaceNeeded = 2;
else
spaceNeeded = 1;
if (dl - dp < spaceNeeded)
return CoderResult.OVERFLOW;
if (currentState == SBCS)
da[dp++] = b2;
else {
da[dp++] = b1;
da[dp++] = b2;
}
sp++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
int mark = src.position();
int outputSize = 0; // size of output
int spaceNeeded;
try {
while (src.hasRemaining()) {
int index;
int theBytes;
char c = src.get();
if (Surrogate.is(c)) {
if (sgp.parse(c, src) < 0)
return sgp.error();
return sgp.unmappableResult();
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
index = index1[((c & mask1) >> shift)]
+ (c & mask2);
if (index < 15000)
theBytes = (int)(index2.charAt(index));
else
theBytes = (int)(index2a.charAt(index-15000));
b1 = (byte)((theBytes & 0x0000ff00)>>8);
b2 = (byte)(theBytes & 0x000000ff);
if (b1== 0x00 && b2 == 0x00
&& c != '\u0000') {
return CoderResult.unmappableForLength(1);
}
if (currentState == DBCS && b1 == 0x00) {
if (dst.remaining() < 1)
return CoderResult.OVERFLOW;
currentState = SBCS;
dst.put(SI);
} else if (currentState == SBCS && b1 != 0x00) {
if (dst.remaining() < 1)
return CoderResult.OVERFLOW;
currentState = DBCS;
dst.put(SO);
}
if (currentState == DBCS)
spaceNeeded = 2;
else
spaceNeeded = 1;
if (dst.remaining() < spaceNeeded)
return CoderResult.OVERFLOW;
if (currentState == SBCS)
dst.put(b2);
else {
dst.put(b1);
dst.put(b2);
}
mark++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
if (true && src.hasArray() && dst.hasArray())
return encodeArrayLoop(src, dst);
else
return encodeBufferLoop(src, dst);
}
}

View File

@ -1,136 +0,0 @@
/*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
/**
* An abstract base class for subclasses which decode
* IBM double byte only ebcdic host encodings such as ibm
* code pages 834 835 837 300,... etc
*
* The structure of IBM DBCS-only charsets is defined by the
* IBM Character Data Representation Architecture (CDRA) document
*
* http://www-306.ibm.com/software/globalization/cdra/appendix_a.jsp#HDRHEBDBST
*
*/
public abstract class DBCS_ONLY_IBM_EBCDIC_Decoder extends CharsetDecoder
{
protected static final char REPLACE_CHAR='\uFFFD';
protected short index1[];
protected String index2;
protected int mask1;
protected int mask2;
protected int shift;
protected DBCS_ONLY_IBM_EBCDIC_Decoder(Charset cs) {
super(cs, 0.5f, 1.0f);
}
// Check validity of dbcs ebcdic byte pair values
private static boolean isValidDoubleByte(int b1, int b2) {
return (b1 == 0x40 && b2 == 0x40) // DBCS-HOST SPACE
|| (0x41 <= b1 && b1 <= 0xfe &&
0x41 <= b2 && b2 <= 0xfe);
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp + 1 < sl) {
int b1 = sa[sp] & 0xff;
int b2 = sa[sp + 1] & 0xff;
if (!isValidDoubleByte(b1, b2)) {
return CoderResult.malformedForLength(2);
}
// Lookup in the two level index
int v = b1 * 256 + b2;
char outputChar = index2.charAt(index1[((v & mask1) >> shift)]
+ (v & mask2));
if (outputChar == REPLACE_CHAR)
return CoderResult.unmappableForLength(2);
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
sp += 2;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
try {
while (src.remaining() > 1) {
int b1 = src.get() & 0xff;
int b2 = src.get() & 0xff;
if (!isValidDoubleByte(b1, b2)) {
return CoderResult.malformedForLength(2);
}
// Lookup in the two level index
int v = b1 * 256 + b2;
char outputChar = index2.charAt(index1[((v & mask1) >> shift)]
+ (v & mask2));
if (outputChar == REPLACE_CHAR)
return CoderResult.unmappableForLength(2);
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
dst.put(outputChar);
mark += 2;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
}

View File

@ -1,179 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
abstract class DoubleByteDecoder
extends CharsetDecoder
{
private short index1[];
/*
* 2nd level index, provided by subclass
* every string has 0x10*(end-start+1) characters.
*/
private String index2[];
protected int start;
protected int end;
protected static final char REPLACE_CHAR = '\uFFFD';
protected char highSurrogate;
protected char lowSurrogate;
protected DoubleByteDecoder(Charset cs, short[] index1, String[] index2,
int start, int end ) {
super(cs, 0.5f, 1.0f);
this.index1 = index1;
this.index2 = index2;
this.start = start;
this.end = end;
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
int b1, b2;
b1 = sa[sp];
int inputSize = 1;
int outputSize = 1;
highSurrogate = lowSurrogate = 0;
char c = decodeSingle(b1);
if (c == REPLACE_CHAR) {
b1 &= 0xff;
if (sl - sp < 2)
return CoderResult.UNDERFLOW;
b2 = sa[sp + 1] & 0xff;
c = decodeDouble(b1, b2);
inputSize = 2;
if (c == REPLACE_CHAR)
return CoderResult.unmappableForLength(inputSize);
outputSize = (highSurrogate > 0) ? 2: 1;
}
if (dl - dp < outputSize)
return CoderResult.OVERFLOW;
if (outputSize == 2) {
da[dp++] = highSurrogate;
da[dp++] = lowSurrogate;
} else {
da[dp++] = c;
}
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
int inputSize = 0;
int outputSize = 0;
try {
while (src.hasRemaining()) {
int b1 = src.get();
inputSize = 1;
outputSize = 1;
highSurrogate = lowSurrogate = 0;
char c = decodeSingle(b1);
if (c == REPLACE_CHAR) {
if (src.remaining() < 1)
return CoderResult.UNDERFLOW;
b1 &= 0xff;
int b2 = src.get() & 0xff;
inputSize = 2;
c = decodeDouble(b1, b2);
if (c == REPLACE_CHAR)
return CoderResult.unmappableForLength(2);
outputSize = (highSurrogate > 0) ? 2: 1;
}
if (dst.remaining() < outputSize)
return CoderResult.OVERFLOW;
mark += inputSize;
if (outputSize == 2) {
dst.put(highSurrogate);
dst.put(lowSurrogate);
} else {
dst.put(c);
}
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
/*
* Can be changed by subclass
*/
protected char decodeSingle(int b) {
if (b >= 0)
return (char) b;
return REPLACE_CHAR;
}
protected char decodeDouble(int byte1, int byte2) {
if (((byte1 < 0) || (byte1 > index1.length))
|| ((byte2 < start) || (byte2 > end)))
return REPLACE_CHAR;
int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start);
return index2[index1[byte1] >> 4].charAt(n);
}
}

View File

@ -1,238 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.Surrogate;
public abstract class DoubleByteEncoder
extends CharsetEncoder
{
private short index1[];
private String index2[];
private final Surrogate.Parser sgp = new Surrogate.Parser();
protected DoubleByteEncoder(Charset cs,
short[] index1, String[] index2)
{
super(cs, 2.0f, 2.0f);
this.index1 = index1;
this.index2 = index2;
}
protected DoubleByteEncoder(Charset cs,
short[] index1, String[] index2,
float avg, float max)
{
super(cs, avg, max);
this.index1 = index1;
this.index2 = index2;
}
protected DoubleByteEncoder(Charset cs,
short[] index1, String[] index2, byte[] repl)
{
super(cs, 2.0f, 2.0f, repl);
this.index1 = index1;
this.index2 = index2;
}
protected DoubleByteEncoder(Charset cs,
short[] index1, String[] index2,
byte[] repl, float avg, float max)
{
super(cs, avg, max,repl);
this.index1 = index1;
this.index2 = index2;
}
public boolean canEncode(char c) {
return (encodeSingle(c) != -1 ||
encodeDouble(c) != 0);
}
private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
char[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
byte[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
try {
while (sp < sl) {
char c = sa[sp];
if (Character.isSurrogate(c)) {
if (sgp.parse(c, sa, sp, sl) < 0)
return sgp.error();
if (sl - sp < 2)
return CoderResult.UNDERFLOW;
char c2 = sa[sp + 1];
byte[] outputBytes = new byte[2];
outputBytes = encodeSurrogate(c, c2);
if (outputBytes == null) {
return sgp.unmappableResult();
}
else {
if (dl - dp < 2)
return CoderResult.OVERFLOW;
da[dp++] = outputBytes[0];
da[dp++] = outputBytes[1];
sp += 2;
continue;
}
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
int b = encodeSingle(c);
if (b != -1) { // Single Byte
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = (byte)b;
sp++;
continue;
}
int ncode = encodeDouble(c);
if (ncode != 0 && c != '\u0000' ) {
if (dl - dp < 2)
return CoderResult.OVERFLOW;
da[dp++] = (byte) ((ncode & 0xff00) >> 8);
da[dp++] = (byte) (ncode & 0xff);
sp++;
continue;
}
return CoderResult.unmappableForLength(1);
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
char c = src.get();
if (Character.isSurrogate(c)) {
int surr;
if ((surr = sgp.parse(c, src)) < 0)
return sgp.error();
char c2 = Surrogate.low(surr);
byte[] outputBytes = new byte[2];
outputBytes = encodeSurrogate(c, c2);
if (outputBytes == null) {
return sgp.unmappableResult();
} else {
if (dst.remaining() < 2)
return CoderResult.OVERFLOW;
mark += 2;
dst.put(outputBytes[0]);
dst.put(outputBytes[1]);
continue;
}
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
int b = encodeSingle(c);
if (b != -1) { // Single-byte character
if (dst.remaining() < 1)
return CoderResult.OVERFLOW;
mark++;
dst.put((byte)b);
continue;
}
// Double Byte character
int ncode = encodeDouble(c);
if (ncode != 0 && c != '\u0000') {
if (dst.remaining() < 2)
return CoderResult.OVERFLOW;
mark++;
dst.put((byte) ((ncode & 0xff00) >> 8));
dst.put((byte) ncode);
continue;
}
return CoderResult.unmappableForLength(1);
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
if (true && src.hasArray() && dst.hasArray())
return encodeArrayLoop(src, dst);
else
return encodeBufferLoop(src, dst);
}
/*
* Can be changed by subclass
*/
protected int encodeDouble(char ch) {
int offset = index1[((ch & 0xff00) >> 8 )] << 8;
return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
}
/*
* Can be changed by subclass
*/
protected int encodeSingle(char inputChar) {
if (inputChar < 0x80)
return (byte)inputChar;
else
return -1;
}
/**
* Protected method which should be overridden by concrete DBCS
* CharsetEncoder classes which included supplementary characters
* within their mapping coverage.
* null return value indicates surrogate values could not be
* handled or encoded.
*/
protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
return null;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,365 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.*;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
import sun.nio.cs.Surrogate;
public class EUC_JP_LINUX_OLD
extends Charset
implements HistoricallyNamedCharset
{
public EUC_JP_LINUX_OLD() {
super("x-euc-jp-linux_OLD", null);
}
public String historicalName() {
return "EUC_JP_LINUX";
}
public boolean contains(Charset cs) {
return ((cs instanceof JIS_X_0201_OLD)
|| (cs.name().equals("US-ASCII"))
|| (cs instanceof EUC_JP_LINUX_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
private static class Decoder extends CharsetDecoder {
JIS_X_0201_OLD.Decoder decoderJ0201;
protected final char REPLACE_CHAR='\uFFFD';
private static final int start = 0xa1;
private static final int end = 0xfe;
private static final short[] jis0208Index1 =
JIS_X_0208_Decoder.getIndex1();
private static final String[] jis0208Index2 =
JIS_X_0208_Decoder.getIndex2();
private Decoder(Charset cs) {
super(cs, 1.0f, 1.0f);
decoderJ0201 = new JIS_X_0201_OLD.Decoder(cs);
}
protected char convSingleByte(int b) {
if (b < 0 || b > 0x7f)
return REPLACE_CHAR;
return decoderJ0201.decode(b);
}
protected char decodeDouble(int byte1, int byte2) {
if (byte1 == 0x8e) {
return decoderJ0201.decode(byte2 - 256);
}
if (((byte1 < 0) || (byte1 > jis0208Index1.length))
|| ((byte2 < start) || (byte2 > end)))
return REPLACE_CHAR;
int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
+ (byte2 - start);
return jis0208Index2[jis0208Index1[byte1 - 0x80] >> 4].charAt(n);
}
private CoderResult decodeArrayLoop(ByteBuffer src,
CharBuffer dst)
{
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
int b1 = 0, b2 = 0;
int inputSize = 0;
char outputChar = REPLACE_CHAR; // U+FFFD;
try {
while (sp < sl) {
b1 = sa[sp] & 0xff;
inputSize = 1;
if ((b1 & 0x80) == 0) {
outputChar = (char)b1;
}
else { // Multibyte char
if ((b1 & 0xff) == 0x8f) { // JIS0212
if (sp + 3 > sl)
return CoderResult.UNDERFLOW;
inputSize = 3;
return CoderResult.unmappableForLength(inputSize); // substitute
} else {
// JIS0208
if (sp + 2 > sl)
return CoderResult.UNDERFLOW;
b2 = sa[sp + 1] & 0xff;
inputSize = 2;
outputChar = decodeDouble(b1, b2);
}
}
if (outputChar == REPLACE_CHAR) { // can't be decoded
return CoderResult.unmappableForLength(inputSize);
}
if (dp + 1 > dl)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src,
CharBuffer dst)
{
int mark = src.position();
char outputChar = REPLACE_CHAR; // U+FFFD;
try {
while (src.hasRemaining()) {
int b1 = src.get() & 0xff;
int inputSize = 1;
if ((b1 & 0x80) == 0) {
outputChar = (char)b1;
} else { // Multibyte char
if ((b1 & 0xff) == 0x8f) { // JIS0212 not supported
if (src.remaining() < 2)
return CoderResult.UNDERFLOW;
return CoderResult.unmappableForLength(3);
} else {
// JIS0208
if (src.remaining() < 1)
return CoderResult.UNDERFLOW;
int b2 = src.get() & 0xff;
inputSize++;
outputChar = decodeDouble(b1, b2);
}
}
if (outputChar == REPLACE_CHAR)
return CoderResult.unmappableForLength(inputSize);
if (dst.remaining() < 1)
return CoderResult.OVERFLOW;
dst.put(outputChar);
mark += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src,
CharBuffer dst)
{
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
}
private static class Encoder extends CharsetEncoder {
JIS_X_0201_OLD.Encoder encoderJ0201;
private final Surrogate.Parser sgp = new Surrogate.Parser();
private static final short[] jis0208Index1 =
JIS_X_0208_Encoder.getIndex1();
private static final String[] jis0208Index2 =
JIS_X_0208_Encoder.getIndex2();
private Encoder(Charset cs) {
super(cs, 2.0f, 2.0f);
encoderJ0201 = new JIS_X_0201_OLD.Encoder(cs);
}
public boolean canEncode(char c) {
byte[] encodedBytes = new byte[2];
if (encodeSingle(c, encodedBytes) == 0) { //doublebyte
if (encodeDouble(c) == 0)
return false;
}
return true;
}
protected int encodeSingle(char inputChar, byte[] outputByte) {
byte b;
if (inputChar == 0) {
outputByte[0] = (byte)0;
return 1;
}
if ((b = encoderJ0201.encode(inputChar)) == 0)
return 0;
if (b > 0 && b < 128) {
outputByte[0] = b;
return 1;
}
outputByte[0] = (byte)0x8e;
outputByte[1] = b;
return 2;
}
protected int encodeDouble(char ch) {
int offset = jis0208Index1[((ch & 0xff00) >> 8 )] << 8;
int r = jis0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
if (r != 0)
return r + 0x8080;
return r;
}
private CoderResult encodeArrayLoop(CharBuffer src,
ByteBuffer dst)
{
char[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
byte[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
final byte[] outputByte = new byte[2];
try {
while (sp < sl) {
char c = sa[sp];
if (Character.isSurrogate(c)) {
if (sgp.parse(c, sa, sp, sl) < 0)
return sgp.error();
return sgp.unmappableResult();
}
int outputSize = encodeSingle(c, outputByte);
if (outputSize == 0) { // DoubleByte
int ncode = encodeDouble(c);
if (ncode != 0 && ((ncode & 0xFF0000) == 0)) {
outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
outputByte[1] = (byte) (ncode & 0xff);
outputSize = 2;
} else {
return CoderResult.unmappableForLength(1);
}
}
if (dl - dp < outputSize)
return CoderResult.OVERFLOW;
// Put the byte in the output buffer
for (int i = 0; i < outputSize; i++) {
da[dp++] = outputByte[i];
}
sp++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult encodeBufferLoop(CharBuffer src,
ByteBuffer dst)
{
final byte[] outputByte = new byte[4];
int mark = src.position();
try {
while (src.hasRemaining()) {
char c = src.get();
if (Character.isSurrogate(c)) {
if (sgp.parse(c, src) < 0)
return sgp.error();
return sgp.unmappableResult();
}
int outputSize = encodeSingle(c, outputByte);
if (outputSize == 0) { // DoubleByte
int ncode = encodeDouble(c);
if (ncode != 0 ) {
if ((ncode & 0xFF0000) == 0) {
outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
outputByte[1] = (byte) (ncode & 0xff);
outputSize = 2;
}
} else {
return CoderResult.unmappableForLength(1);
}
}
if (dst.remaining() < outputSize)
return CoderResult.OVERFLOW;
// Put the byte in the output buffer
for (int i = 0; i < outputSize; i++) {
dst.put(outputByte[i]);
}
mark++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult encodeLoop(CharBuffer src,
ByteBuffer dst)
{
if (src.hasArray() && dst.hasArray())
return encodeArrayLoop(src, dst);
else
return encodeBufferLoop(src, dst);
}
}
}

View File

@ -1,418 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
import sun.nio.cs.Surrogate;
public class EUC_JP_OLD
extends Charset
implements HistoricallyNamedCharset
{
public EUC_JP_OLD() {
super("EUC-JP_OLD", null);
}
public String historicalName() {
return "EUC_JP";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof JIS_X_0201_OLD)
|| (cs instanceof JIS_X_0208_OLD)
|| (cs instanceof JIS_X_0212_OLD)
|| (cs instanceof EUC_JP_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
// Need to force the replacement byte to 0x3f
// because JIS_X_0208_Encoder defines its own
// alternative 2 byte substitution to permit it
// to exist as a self-standing Encoder
byte[] replacementBytes = { (byte)0x3f };
return new Encoder(this).replaceWith(replacementBytes);
}
static class Decoder extends JIS_X_0208_Decoder {
JIS_X_0201_OLD.Decoder decoderJ0201;
JIS_X_0212_Decoder decoderJ0212;
private static final short[] j0208Index1 =
JIS_X_0208_Decoder.getIndex1();
private static final String[] j0208Index2 =
JIS_X_0208_Decoder.getIndex2();
protected Decoder(Charset cs) {
super(cs);
decoderJ0201 = new JIS_X_0201_OLD.Decoder(cs);
decoderJ0212 = new JIS_X_0212_Decoder(cs);
start = 0xa1;
end = 0xfe;
}
protected char decode0212(int byte1, int byte2) {
return decoderJ0212.decodeDouble(byte1, byte2);
}
protected char decodeDouble(int byte1, int byte2) {
if (byte1 == 0x8e) {
return decoderJ0201.decode(byte2 - 256);
}
// Fix for bug 4121358 - similar fix for bug 4117820 put
// into ByteToCharDoubleByte.getUnicode()
if (((byte1 < 0) || (byte1 > getIndex1().length))
|| ((byte2 < start) || (byte2 > end)))
return REPLACE_CHAR;
int n = (j0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1)
+ (byte2 - start);
return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n);
}
private CoderResult decodeArrayLoop(ByteBuffer src,
CharBuffer dst)
{
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
int b1 = 0, b2 = 0;
int inputSize = 0;
char outputChar = REPLACE_CHAR; // U+FFFD;
try {
while (sp < sl) {
b1 = sa[sp] & 0xff;
inputSize = 1;
if ((b1 & 0x80) == 0) {
outputChar = (char)b1;
}
else { // Multibyte char
if ((b1 & 0xff) == 0x8f) { // JIS0212
if (sp + 3 > sl)
return CoderResult.UNDERFLOW;
b1 = sa[sp + 1] & 0xff;
b2 = sa[sp + 2] & 0xff;
inputSize += 2;
outputChar = decode0212(b1-0x80, b2-0x80);
} else {
// JIS0208
if (sp + 2 > sl)
return CoderResult.UNDERFLOW;
b2 = sa[sp + 1] & 0xff;
inputSize++;
outputChar = decodeDouble(b1, b2);
}
}
if (outputChar == REPLACE_CHAR) { // can't be decoded
return CoderResult.unmappableForLength(inputSize);
}
if (dp + 1 > dl)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src,
CharBuffer dst)
{
int mark = src.position();
int b1 = 0, b2 = 0;
int inputSize = 0;
char outputChar = REPLACE_CHAR; // U+FFFD;
try {
while (src.hasRemaining()) {
b1 = src.get() & 0xff;
inputSize = 1;
if ((b1 & 0x80) == 0) {
outputChar = (char)b1;
} else { // Multibyte char
if ((b1 & 0xff) == 0x8f) { // JIS0212
if (src.remaining() < 2)
return CoderResult.UNDERFLOW;
b1 = src.get() & 0xff;
b2 = src.get() & 0xff;
inputSize += 2;
outputChar = decode0212(b1-0x80, b2-0x80);
} else {
// JIS0208
if (src.remaining() < 1)
return CoderResult.UNDERFLOW;
b2 = src.get() & 0xff;
inputSize++;
outputChar = decodeDouble(b1, b2);
}
}
if (outputChar == REPLACE_CHAR) {
return CoderResult.unmappableForLength(inputSize);
}
if (dst.remaining() < 1)
return CoderResult.OVERFLOW;
dst.put(outputChar);
mark += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
// Make some protected methods public for use by JISAutoDetect
public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
public void implReset() {
super.implReset();
}
public CoderResult implFlush(CharBuffer out) {
return super.implFlush(out);
}
}
static class Encoder extends JIS_X_0208_Encoder {
JIS_X_0201_OLD.Encoder encoderJ0201;
JIS_X_0212_Encoder encoderJ0212;
private static final short[] j0208Index1 =
JIS_X_0208_Encoder.getIndex1();
private static final String[] j0208Index2 =
JIS_X_0208_Encoder.getIndex2();
private final Surrogate.Parser sgp = new Surrogate.Parser();
protected Encoder(Charset cs) {
super(cs, 3.0f, 3.0f);
encoderJ0201 = new JIS_X_0201_OLD.Encoder(cs);
encoderJ0212 = new JIS_X_0212_Encoder(cs);
}
public boolean canEncode(char c) {
byte[] encodedBytes = new byte[3];
if (encodeSingle(c, encodedBytes) == 0) { //doublebyte
if (encodeDouble(c) == 0)
return false;
}
return true;
}
protected int encodeSingle(char inputChar, byte[] outputByte) {
byte b;
if (inputChar == 0) {
outputByte[0] = (byte)0;
return 1;
}
if ((b = encoderJ0201.encode(inputChar)) == 0)
return 0;
if (b > 0 && b < 128) {
outputByte[0] = b;
return 1;
}
outputByte[0] = (byte)0x8e;
outputByte[1] = b;
return 2;
}
protected int encodeDouble(char ch) {
int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8;
int r = j0208Index2[offset >> 12].charAt((offset & 0xfff) +
(ch & 0xff));
if (r != 0)
return r + 0x8080;
r = encoderJ0212.encodeDouble(ch);
if (r == 0)
return r;
return r + 0x8F8080;
}
private CoderResult encodeArrayLoop(CharBuffer src,
ByteBuffer dst)
{
char[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
byte[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
int outputSize = 0;
byte[] outputByte;
int inputSize = 0; // Size of input
byte[] tmpBuf = new byte[3];
try {
while (sp < sl) {
outputByte = tmpBuf;
char c = sa[sp];
if (Character.isSurrogate(c)) {
if (sgp.parse(c, sa, sp, sl) < 0)
return sgp.error();
return sgp.unmappableResult();
}
outputSize = encodeSingle(c, outputByte);
if (outputSize == 0) { // DoubleByte
int ncode = encodeDouble(c);
if (ncode != 0 ) {
if ((ncode & 0xFF0000) == 0) {
outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
outputByte[1] = (byte) (ncode & 0xff);
outputSize = 2;
} else {
outputByte[0] = (byte) 0x8f;
outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
outputByte[2] = (byte) (ncode & 0xff);
outputSize = 3;
}
} else {
return CoderResult.unmappableForLength(1);
}
}
if (dl - dp < outputSize)
return CoderResult.OVERFLOW;
// Put the byte in the output buffer
for (int i = 0; i < outputSize; i++) {
da[dp++] = outputByte[i];
}
sp++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult encodeBufferLoop(CharBuffer src,
ByteBuffer dst)
{
int outputSize = 0;
byte[] outputByte;
int inputSize = 0; // Size of input
byte[] tmpBuf = new byte[3];
int mark = src.position();
try {
while (src.hasRemaining()) {
outputByte = tmpBuf;
char c = src.get();
if (Character.isSurrogate(c)) {
if (sgp.parse(c, src) < 0)
return sgp.error();
return sgp.unmappableResult();
}
outputSize = encodeSingle(c, outputByte);
if (outputSize == 0) { // DoubleByte
int ncode = encodeDouble(c);
if (ncode != 0 ) {
if ((ncode & 0xFF0000) == 0) {
outputByte[0] = (byte) ((ncode & 0xff00) >> 8);
outputByte[1] = (byte) (ncode & 0xff);
outputSize = 2;
} else {
outputByte[0] = (byte) 0x8f;
outputByte[1] = (byte) ((ncode & 0xff00) >> 8);
outputByte[2] = (byte) (ncode & 0xff);
outputSize = 3;
}
} else {
return CoderResult.unmappableForLength(1);
}
}
if (dst.remaining() < outputSize)
return CoderResult.OVERFLOW;
// Put the byte in the output buffer
for (int i = 0; i < outputSize; i++) {
dst.put(outputByte[i]);
}
mark++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult encodeLoop(CharBuffer src,
ByteBuffer dst)
{
if (src.hasArray() && dst.hasArray())
return encodeArrayLoop(src, dst);
else
return encodeBufferLoop(src, dst);
}
}
}

View File

@ -1,173 +0,0 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
import sun.nio.cs.Surrogate;
public class EUC_JP_Open_OLD
extends Charset
implements HistoricallyNamedCharset
{
public EUC_JP_Open_OLD() {
super("x-eucJP-Open_OLD", null);
}
public String historicalName() {
return "EUC_JP_Solaris";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof JIS_X_0201_OLD)
|| (cs instanceof EUC_JP_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
// Need to force the replacement byte to 0x3f
// because JIS_X_0208_Encoder defines its own
// alternative 2 byte substitution to permit it
// to exist as a self-standing Encoder
byte[] replacementBytes = { (byte)0x3f };
return new Encoder(this).replaceWith(replacementBytes);
}
private static class Decoder extends EUC_JP_OLD.Decoder {
JIS_X_0201_OLD.Decoder decoderJ0201;
JIS_X_0212_Solaris_Decoder decodeMappingJ0212;
JIS_X_0208_Solaris_Decoder decodeMappingJ0208;
private static final short[] j0208Index1 =
JIS_X_0208_Solaris_Decoder.getIndex1();
private static final String[] j0208Index2 =
JIS_X_0208_Solaris_Decoder.getIndex2();
private static final int start = 0xa1;
private static final int end = 0xfe;
protected final char REPLACE_CHAR='\uFFFD';
private Decoder(Charset cs) {
super(cs);
decoderJ0201 = new JIS_X_0201_OLD.Decoder(cs);
decodeMappingJ0212 = new JIS_X_0212_Solaris_Decoder(cs);
}
protected char decode0212(int byte1, int byte2) {
return decodeMappingJ0212.decodeDouble(byte1, byte2);
}
protected char decodeDouble(int byte1, int byte2) {
if (byte1 == 0x8e) {
return decoderJ0201.decode(byte2 - 256);
}
if (((byte1 < 0)
|| (byte1 > j0208Index1.length))
|| ((byte2 < start)
|| (byte2 > end)))
return REPLACE_CHAR;
char result = super.decodeDouble(byte1, byte2);
if (result != '\uFFFD') {
return result;
} else {
int n = (j0208Index1[byte1 - 0x80] & 0xf) *
(end - start + 1)
+ (byte2 - start);
return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n);
}
}
}
private static class Encoder extends EUC_JP_OLD.Encoder {
JIS_X_0201_OLD.Encoder encoderJ0201;
JIS_X_0212_Solaris_Encoder encoderJ0212;
private static final short[] j0208Index1 =
JIS_X_0208_Solaris_Encoder.getIndex1();
private static final String[] j0208Index2 =
JIS_X_0208_Solaris_Encoder.getIndex2();
private final Surrogate.Parser sgp = new Surrogate.Parser();
private Encoder(Charset cs) {
super(cs);
encoderJ0201 = new JIS_X_0201_OLD.Encoder(cs);
encoderJ0212 = new JIS_X_0212_Solaris_Encoder(cs);
}
protected int encodeSingle(char inputChar, byte[] outputByte) {
byte b;
if (inputChar == 0) {
outputByte[0] = (byte)0;
return 1;
}
if ((b = encoderJ0201.encode(inputChar)) == 0)
return 0;
if (b > 0 && b < 128) {
outputByte[0] = b;
return 1;
}
outputByte[0] = (byte)0x8e;
outputByte[1] = b;
return 2;
}
protected int encodeDouble(char ch) {
int r = super.encodeDouble(ch);
if (r != 0) {
return r;
}
else {
int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8;
r = j0208Index2[offset >> 12].charAt((offset & 0xfff) +
(ch & 0xFF));
if (r > 0x7500)
return 0x8F8080 + encoderJ0212.encodeDouble(ch);
}
return (r==0 ? 0: r + 0x8080);
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,102 +0,0 @@
/*
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharacterCodingException;
import sun.nio.cs.HistoricallyNamedCharset;
public class IBM942C_OLD extends Charset implements HistoricallyNamedCharset
{
public IBM942C_OLD() {
super("x-IBM942C_OLD", null);
}
public String historicalName() {
return "Cp942C";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof IBM942C_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
private static class Decoder extends IBM942_OLD.Decoder {
protected static final String singleByteToChar;
static {
String indexs = "";
for (char c = '\0'; c < '\u0080'; ++c) indexs += c;
singleByteToChar = indexs +
IBM942_OLD.Decoder.singleByteToChar.substring(indexs.length());
}
public Decoder(Charset cs) {
super(cs, singleByteToChar);
}
}
private static class Encoder extends IBM942_OLD.Encoder {
protected static final short index1[];
protected static final String index2a;
protected static final int shift = 5;
static {
String indexs = "";
for (char c = '\0'; c < '\u0080'; ++c) indexs += c;
index2a = IBM942_OLD.Encoder.index2a + indexs;
int o = IBM942_OLD.Encoder.index2a.length() + 15000;
index1 = new short[IBM942_OLD.Encoder.index1.length];
System.arraycopy(IBM942_OLD.Encoder.index1,
0,
index1,
0,
IBM942_OLD.Encoder.index1.length);
for (int i = 0; i * (1<<shift) < 128; ++i) {
index1[i] = (short)(o + i * (1<<shift));
}
}
public Encoder(Charset cs) {
super(cs, index1, index2a);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,101 +0,0 @@
/*
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharacterCodingException;
import sun.nio.cs.HistoricallyNamedCharset;
public class IBM943C_OLD extends Charset implements HistoricallyNamedCharset
{
public IBM943C_OLD() {
super("x-IBM943C_OLD", null);
}
public String historicalName() {
return "Cp943_OLDC";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof IBM943C_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
private static class Decoder extends IBM943_OLD.Decoder {
protected static final String singleByteToChar;
static {
String indexs = "";
for (char c = '\0'; c < '\u0080'; ++c) indexs += c;
singleByteToChar = indexs +
IBM943_OLD.Decoder.singleByteToChar.substring(indexs.length());
}
public Decoder(Charset cs) {
super(cs, singleByteToChar);
}
}
private static class Encoder extends IBM943_OLD.Encoder {
protected static final short index1[];
protected static final String index2a;
protected static final int shift = 6;
static {
String indexs = "";
for (char c = '\0'; c < '\u0080'; ++c) indexs += c;
index2a = IBM943_OLD.Encoder.index2a + indexs;
int o = IBM943_OLD.Encoder.index2a.length() + 15000;
index1 = new short[IBM943_OLD.Encoder.index1.length];
System.arraycopy(IBM943_OLD.Encoder.index1,
0,
index1,
0,
IBM943_OLD.Encoder.index1.length);
for (int i = 0; i * (1<<shift) < 128; ++i) {
index1[i] = (short)(o + i * (1<<shift));
}
}
public Encoder(Charset cs) {
super(cs, index1, index2a);
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,882 +0,0 @@
/*
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharacterCodingException;
import sun.nio.cs.HistoricallyNamedCharset;
public class IBM949C_OLD extends Charset implements HistoricallyNamedCharset
{
public IBM949C_OLD() {
super("x-IBM949C_OLD", null);
}
public String historicalName() {
return "Cp949C";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof IBM949C_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
public short[] getEncoderIndex1() {
return Encoder.index1;
}
public String getEncoderIndex2() {
return Encoder.index2;
}
public String getEncoderIndex2a() {
return Encoder.index2a;
}
private static class Decoder extends IBM949_OLD.Decoder {
protected static final String singleByteToChar;
static {
String indexs = "";
for (char c = '\0'; c < '\u0080'; ++c) indexs += c;
singleByteToChar = indexs +
IBM949_OLD.Decoder.singleByteToChar.substring(indexs.length());
}
public Decoder(Charset cs) {
super(cs, singleByteToChar);
}
}
private static class Encoder extends IBM949_OLD.Encoder {
protected static String index2a =
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA8A1\u0000\uD2A6" + // 15000 - 15009
"\u0000\u0000\uE7F4\uD1D6\u0000\u0000\uE6C2\uB5C7\u0000\u0000" + // 15010 - 15019
"\u0000\uB5C8\u0000\u0000\u0000\uFCD2\u0000\uEBC8\u0000\u9AFD" + // 15020 - 15029
"\u0000\uE6C1\u0000\u0000\uECD8\u0000\u0000\u0000\uEDAC\uB5C6" + // 15030 - 15039
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uC8B1\u9EE8\u0000" + // 15040 - 15049
"\u0000\u0000\u0000\u0000\u0000\u0000\uA0E0\uB5C4\u0000\u0000" + // 15050 - 15059
"\u0000\u0000\u0000\u0000\u0000\uC5F2\uB5C2\u0000\u0000\u0000" + // 15060 - 15069
"\uB5C3\u0000\u0000\u0000\uDBB5\u0000\uF3E7\uD8FE\u0000\u0000" + // 15070 - 15079
"\uE9A9\u0000\uD3C7\u0000\u0000\uDCDD\uF8AE\uB5BB\u0000\u0000" + // 15080 - 15089
"\u9EE7\uB5BC\uB5BD\u0000\uB5BE\uB5B7\u0000\u0000\uB5B8\uB5B9" + // 15090 - 15099
"\u0000\uB5BA\u0000\uECA9\u0000\uF2EB\u0000\uFDEF\u0000\uF9F3" + // 15100 - 15109
"\u0000\uA2A3\u0000\uA1D3\uA2A4\u0000\u0000\u0000\uA1D4\uB5B3" + // 15110 - 15119
"\u0000\u0000\u0000\uB5B4\u0000\u0000\u0000\uD2FC\u0000\u0000" + // 15120 - 15129
"\u0000\u0000\u0000\uB4BA\uB4BB\u0000\u0000\uD7EB\u0000\u0000" + // 15130 - 15139
"\u0000\u0000\u0000\u0000\uF7F7\uDCAC\u0000\u0000\uF5E9\u0000" + // 15140 - 15149
"\u9DFA\u9EA9\u0000\u0000\u0000\uA8AB\uA9AB\u0000\u0000\u0000" + // 15150 - 15159
"\u0000\uBFB0\uBFB1\uBFB2\uBFB3\uB5B1\uB5B2\u0000\u0000\u0000" + // 15160 - 15169
"\u0000\u0000\u0000\uD1A5\uDCB8\u0000\u0000\uCFD9\u0000\u0000" + // 15170 - 15179
"\uDCCD\uEDFB\u0000\uDEF0\uB5AF\u0000\u0000\u0000\uB5B0\u0000" + // 15180 - 15189
"\u0000\u0000\uCDA2\uE8AE\u0000\u0000\u0000\uE1BD\uB5A9\uB5AA" + // 15190 - 15199
"\u0000\uB5AB\uB5AC\uB5AD\u0000\u0000\uEEAE\uD6AE\u0000\u0000" + // 15200 - 15209
"\u9DA1\u0000\u0000\uDFD5\u0000\u0000\uEDD7\u0000\u0000\u0000" + // 15210 - 15219
"\u9AAC\u9AB0\u9AB8\u9AC9\u9AD3\uB5A8\u0000\u0000\u0000\u0000" + // 15220 - 15229
"\u0000\u0000\u0000\uA0D9\uB5A5\uB5A6\u0000\u0000\uB5A7\u0000" + // 15230 - 15239
"\u0000\u0000\uECEE\u0000\u0000\uDDAA\u0000\u0000\uEABE\uD9B1" + // 15240 - 15249
"\u0000\u0000\u0000\u0000\u0000\uB8A3\uB8A4\u0000\u0000\uD4F5" + // 15250 - 15259
"\u0000\uD0C9\uEFA7\uE2EC\u0000\uDBEA\u9EE4\uB5A2\u9EE5\uB5A3" + // 15260 - 15269
"\u0000\u0000\uB5A4\u0000\uEEBB\uCDB4\u9BF2\uE0F3\uEACD\u0000" + // 15270 - 15279
"\u0000\u0000\uDCEE\u0000\u0000\uF5EA\uE6E0\uB4F8\u0000\u0000" + // 15280 - 15289
"\uB4F9\uB4FA\u0000\uB4FB\uB4FC\u9EE3\u0000\u0000\u0000\u0000" + // 15290 - 15299
"\u0000\u0000\u0000\uA0BE\uB4EF\uB4F0\u0000\uB4F1\uB4F2\uB4F3" + // 15300 - 15309
"\u0000\u0000\uFBAC\uCFC3\uEBFD\u0000\u0000\u0000\u0000\uCCF6" + // 15310 - 15319
"\u0000\u0000\uD3BA\u0000\uDBAA\u0000\u0000\u0000\uF7E0\u0000" + // 15320 - 15329
"\u0000\u0000\uDADA\u0000\uF2DC\uFBD6\uE9B2\uB4EE\u0000\u0000" + // 15330 - 15339
"\u0000\u0000\u0000\u0000\u0000\u9FC7\uB4EB\uB4EC\u0000\u0000" + // 15340 - 15349
"\uB4ED\u0000\u0000\u0000\uEAB8\uD1F9\u0000\u0000\u0000\u0000" + // 15350 - 15359
"\uC6A1\u0000\u0000\u0000\uF9DB\u0000\u0000\u0000\u0000\uF4E6" + // 15360 - 15369
"\u0000\u0000\uE6C5\uEFD5\uB4E6\uB4E7\uB4E8\uB4E9\u0000\u0000" + // 15370 - 15379
"\u0000\uB4EA\uB4DC\u0000\u0000\uB4DD\uB4DE\uB4DF\uB4E0\uB4E1" + // 15380 - 15389
"\u9EE1\u0000\uB4D8\u0000\uB4D9\uB4DA\uB4DB\u0000\uCACC\u0000" + // 15390 - 15399
"\u0000\u0000\u0000\uFBBF\u0000\u0000\uE3BD\u0000\uCFE1\uF0C0" + // 15400 - 15409
"\uECDA\u0000\uDDD7\uB4D4\uB4D5\u0000\uB4D6\u0000\uB4D7\u0000" + // 15410 - 15419
"\u0000\uE4B7\u0000\uEADB\u0000\uF5FA\u9CE8\u0000\uEEF5\u0000" + // 15420 - 15429
"\uDECE\u0000\u0000\u0000\u0000\uE7F3\uB4D2\u9EE0\uB4D3\u0000" + // 15430 - 15439
"\u0000\u0000\u0000\u0000\uBDB0\uBDB1\u0000\uBDB2\uB4CF\uB4D0" + // 15440 - 15449
"\u0000\u0000\uB4D1\u0000\u0000\u0000\uF1BE\u0000\u0000\uD3AC" + // 15450 - 15459
"\u0000\u0000\uCDCC\u0000\u0000\u0000\u0000\uEDD9\u0000\uFCB1" + // 15460 - 15469
"\uCCF8\u0000\u0000\uDDC6\uFAD1\u0000\uF7DF\uB4CD\u0000\u0000" + // 15470 - 15479
"\u0000\uB4CE\u0000\u0000\u0000\uE0C2\u0000\uCAE4\u0000\uE7B7" + // 15480 - 15489
"\u0000\uD2AF\uDCE5\u0000\u0000\u0000\u0000\uD0A5\uF1B4\uB4C6" + // 15490 - 15499
"\uB4C7\u0000\uB4C8\u0000\uB4C9\uB4CA\u9EDE\uB4C3\uB4C4\uB4C5" + // 15500 - 15509
"\u0000\u0000\u0000\u0000\u0000\uBDAC\uBDAD\u0000\u0000\u9AF5" + // 15510 - 15519
"\uF1E3\uD5EE\u0000\u0000\u0000\u0000\uE3E2\uFBBC\uD9A4\u0000" + // 15520 - 15529
"\u0000\uDFE9\u0000\uEEDE\u0000\u0000\uF7C2\u0000\uD7A4\uCEC5" + // 15530 - 15539
"\u0000\u0000\u0000\u0000\uCED5\uD6E6\uB4C0\uB4C1\u0000\u0000" + // 15540 - 15549
"\uB4C2\u0000\u0000\u0000\uF1BD\u0000\u0000\uE2E7\uFDD7\u0000" + // 15550 - 15559
"\uD9F8\uD4C2\u0000\u0000\u0000\u0000\uF6E5\u0000\uA2D9\uA2D7" + // 15560 - 15569
"\u0000\u0000\u0000\u0000\u0000\u0000\uCBCA\u0000\u0000\uD6B7" + // 15570 - 15579
"\uCDB3\u0000\u0000\u0000\u0000\u9CE9\uB4B8\uB4B9\u0000\u0000" + // 15580 - 15589
"\u0000\u0000\u0000\u0000\uE7A5\u0000\uD5F5\uD3BE\uB4B7\u0000" + // 15590 - 15599
"\u0000\u0000\u0000\u0000\u0000\u0000\u9EFE\uB4B5\u0000\u0000" + // 15600 - 15609
"\u0000\uB4B6\u0000\u0000\u0000\uCCBD\u0000\u0000\uD1A9\uDDCC" + // 15610 - 15619
"\u0000\uD3D2\u0000\uF5C0\u0000\u0000\u0000\uDFDD\u0000\uA1E7" + // 15620 - 15629
"\uA1E8\uA1E6\uA1E9\uA1EA\uA2D5\uA2D8\uA2D6\uB4B2\u0000\u0000" + // 15630 - 15639
"\u0000\u0000\u0000\u0000\u0000\uB7AD\uB4AB\u0000\u0000\uB4AC" + // 15640 - 15649
"\uB4AD\u0000\u0000\u0000\uE7FD\u0000\u0000\uE6A3\uFBF1\uCBB0" + // 15650 - 15659
"\uB4A5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9EEC\uB4A2" + // 15660 - 15669
"\uB4A3\u0000\u0000\uB4A4\u0000\u0000\u0000\uD4B8\uEBBE\uDDEF" + // 15670 - 15679
"\u0000\uDDF0\uDDF1\uB3FB\u0000\u0000\u0000\uB3FC\u0000\u0000" + // 15680 - 15689
"\u0000\uDFAF\u0000\uCAC3\u0000\u0000\uEEFC\u9EDC\u0000\u0000" + // 15690 - 15699
"\u0000\u0000\u0000\u0000\u0000\u9EE9\uB3F9\u0000\u0000\u0000" + // 15700 - 15709
"\u0000\u0000\u0000\u0000\u9EDB\uB3F7\u0000\u0000\u0000\uB3F8" + // 15710 - 15719
"\u0000\u0000\u0000\uE0E8\u0000\u0000\uD3AB\u0000\uEBDC\uB3F0" + // 15720 - 15729
"\uB3F1\u0000\uB3F2\u0000\uB3F3\u0000\u0000\u9DEB\u0000\u0000" + // 15730 - 15739
"\u0000\u0000\u0000\uEADA\uB3EE\u0000\uB3EF\u0000\u0000\u0000" + // 15740 - 15749
"\u0000\u0000\uBCF2\uBCF3\u0000\uBCF4\uB3EB\uB3EC\u9EDA\u0000" + // 15750 - 15759
"\uB3ED\u0000\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000" + // 15760 - 15769
"\uB3FA\u0000\u0000\u0000\uE7A2\uE4D9\u0000\u0000\u0000\uF0E6" + // 15770 - 15779
"\u0000\u0000\u0000\uE4B9\uB3EA\u0000\u0000\u0000\u0000\u0000" + // 15780 - 15789
"\u0000\u0000\u9ED9\uB3E8\u9ED8\u0000\u0000\uB3E9\u0000\u0000" + // 15790 - 15799
"\u0000\uE9B0\u0000\u0000\u0000\u0000\u0000\uB3DB\uB3DC\u0000" + // 15800 - 15809
"\uB3DD\uB3E4\uB3E5\u0000\u9ED7\uB3E6\uB3E7\u0000\u0000\u9CE3" + // 15810 - 15819
"\u0000\u0000\u0000\u0000\uE4B6\u0000\uE5E8\uDCC3\u0000\u0000" + // 15820 - 15829
"\uEDDE\uD3F2\u0000\u0000\uDCA7\u0000\u0000\uD6E7\u0000\u0000" + // 15830 - 15839
"\u0000\uFBD9\uEDF7\u0000\u0000\uE5B5\uB3E3\u0000\u0000\u0000" + // 15840 - 15849
"\u0000\u0000\u0000\u0000\u9ECD\uB3E0\uB3E1\u0000\u0000\uB3E2" + // 15850 - 15859
"\u0000\u0000\u9ED6\uB3DE\uB3DF\u0000\u0000\u0000\u0000\u0000" + // 15860 - 15869
"\u0000\uDEB0\u0000\u0000\u0000\uD5B2\u0000\u0000\u0000\uD5BC" + // 15870 - 15879
"\u0000\uCBA8\uEBBC\uE4BE\u0000\u0000\u0000\u0000\u0000\uCFCF" + // 15880 - 15889
"\u0000\u0000\u0000\uEDB9\uF1C5\u0000\uF3CF\uD7AB\uB3D9\u0000" + // 15890 - 15899
"\u0000\u0000\uB3DA\u0000\u0000\u0000\uCFED\u0000\uEDEB\u0000" + // 15900 - 15909
"\u0000\u0000\uF0EC\u0000\u0000\u0000\u0000\uDCB3\u0000\u0000" + // 15910 - 15919
"\u0000\u0000\uC2EA\u0000\u0000\u0000\uEFB2\u0000\u0000\u0000" + // 15920 - 15929
"\u0000\uF1DA\u0000\uFAF2\u0000\u0000\uE8C3\u0000\uF1C8\u0000" + // 15930 - 15939
"\u0000\u0000\uCEF1\uB3D1\uB3D2\u0000\uB3D3\uB3D4\uB3D5\u9ED5" + // 15940 - 15949
"\u0000\uCFDC\u0000\uD3D1\u0000\u0000\uCCB1\uF7D8\u0000\uA5A9" + // 15950 - 15959
"\uA5AA\u0000\u0000\u0000\u0000\u0000\u0000\uDFA8\u0000\u0000" + // 15960 - 15969
"\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\uD6EC\uEBD3" + // 15970 - 15979
"\uB3CE\u0000\uB3CF\uB3D0\u0000\u0000\u0000\u0000\uD8D0\u0000" + // 15980 - 15989
"\uF0C8\uD1A1\uD1A2\uB3CA\uB3CB\u0000\uB3CC\uB3CD\u0000\u0000" + // 15990 - 15999
"\u9ED4\uB3C8\u0000\u0000\u0000\u0000\uB3C9\u0000\u0000\u9AFC" + // 16000 - 16009
"\u0000\uD3B1\u0000\u0000\u0000\u0000\uDAE4\u0000\u0000\u0000" + // 16010 - 16019
"\u9CB1\uB3C7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9EBD" + // 16020 - 16029
"\uB3C4\uB3C5\u0000\u0000\uB3C6\u0000\u0000\u0000\u9BC7\u0000" + // 16030 - 16039
"\uD5B1\u0000\u0000\u0000\uFBAF\u0000\u0000\u0000\uCBD1\uB3C2" + // 16040 - 16049
"\uB3C3\u0000\u0000\u0000\u0000\u0000\u0000\uCCD7\uE5C2\u0000" + // 16050 - 16059
"\u0000\uF6C9\u9AE9\u0000\u0000\u0000\u0000\u0000\u9EFD\uB7E4" + // 16060 - 16069
"\u0000\uB7E5\uB3BD\u0000\u0000\u9ED2\uB3BE\u0000\u0000\u0000" + // 16070 - 16079
"\uD5EA\uF1EE\u0000\u0000\u0000\u9AF7\uB3B2\uB3B3\u0000\uB3B4" + // 16080 - 16089
"\uB3B5\uB3B6\uB3B7\uB3B8\uB3AF\uB3B0\uB3B1\u0000\u0000\u0000" + // 16090 - 16099
"\u0000\u0000\uBCEE\uBCEF\u0000\u0000\u9CB8\u0000\u0000\u0000" + // 16100 - 16109
"\u0000\u0000\u0000\uDAE1\u0000\uD6B6\u0000\uF3F1\u0000\u0000" + // 16110 - 16119
"\u0000\uE3D0\u0000\u0000\uF2FB\uB3AA\uB3AB\uB3AC\u0000\uB3AD" + // 16120 - 16129
"\u0000\u0000\uB3AE\u9ED1\uB3A9\u0000\u0000\u0000\u0000\u0000" + // 16130 - 16139
"\u0000\uEBF4\u0000\u0000\u9BED\uB3A4\u0000\u0000\u0000\uB3A5" + // 16140 - 16149
"\u0000\u0000\u0000\uD4A2\uCFF6\u0000\u0000\u0000\u0000\uC5B4" + // 16150 - 16159
"\uC5B5\u0000\uC5B6\u9ED0\u0000\u0000\u0000\u0000\u0000\u0000" + // 16160 - 16169
"\u0000\uB1CC\uB2F6\u0000\uB2F7\u0000\uB2F8\u0000\uB2F9\u0000" + // 16170 - 16179
"\uDCFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1B0\uB2F3" + // 16180 - 16189
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4CB\uB2EF\u0000" + // 16190 - 16199
"\u0000\u0000\uB2F0\u0000\u0000\u0000\uDBE0\u0000\u0000\u0000" + // 16200 - 16209
"\u0000\u0000\u9ED3\u0000\u0000\u0000\uE6E7\u0000\u0000\uEAC7" + // 16210 - 16219
"\u0000\uF1D8\u0000\u0000\uD8D8\u0000\u0000\uE0F2\u0000\uA5A1" + // 16220 - 16229
"\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7\uA5A8\uB2EB\uB2EC\u0000" + // 16230 - 16239
"\u0000\uB2ED\u0000\u0000\u0000\uE4C5\u0000\u0000\u9DB9\u0000" + // 16240 - 16249
"\u0000\uCDCB\u0000\u0000\u0000\u0000\u0000\u0000\uEDA8\uDEC2" + // 16250 - 16259
"\uF6E2\uEDDC\uB2EA\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16260 - 16269
"\uEED2\uB2E7\uB2E8\u0000\u0000\uB2E9\u0000\u0000\u0000\u9BF7" + // 16270 - 16279
"\uCFB0\uF7D9\uF3E6\u9BF5\u0000\uEBD9\u0000\uCFA7\uEAAF\u0000" + // 16280 - 16289
"\u0000\u0000\u0000\uC2BC\uC2BD\u0000\u0000\uF2ED\u0000\uDBD9" + // 16290 - 16299
"\u0000\uF0A8\u0000\u0000\uDBDF\uD3D3\uF8C7\u0000\u0000\u0000" + // 16300 - 16309
"\u0000\uC2EE\uC2EF\u0000\u0000\u9AEE\uCACE\uF8C1\uD2B4\u0000" + // 16310 - 16319
"\u0000\uDCB4\uB2E5\uB2E6\u0000\u0000\u0000\u0000\u0000\u0000" + // 16320 - 16329
"\uDAE6\uF7B3\u0000\u0000\uCBB9\u0000\u0000\uEDF9\u0000\u0000" + // 16330 - 16339
"\u0000\uD1D3\u0000\uE5F0\u0000\u0000\u0000\uD8ED\uE3C4\uF0F1" + // 16340 - 16349
"\u0000\u0000\uD4CD\u0000\u9DAB\uF3B8\u0000\u0000\u0000\uA0CF" + // 16350 - 16359
"\uC3E8\u0000\u0000\u0000\uC8B6\u0000\uC8B7\u0000\u0000\uDAC8" + // 16360 - 16369
"\uDFA6\u0000\uF9B3\uF2D2\u0000\uCAC4\u9ECC\u0000\u0000\u0000" + // 16370 - 16379
"\uB2E4\u0000\u0000\u0000\uE5C5\u0000\u0000\u0000\u0000\u0000" + // 16380 - 16389
"\uB3A6\uB3A7\u0000\uB3A8\uB2DE\uB2DF\u0000\uB2E0\u0000\uB2E1" + // 16390 - 16399
"\uB2E2\u0000\uD3DC\u0000\u0000\uFAFE\u9AE7\u0000\u0000\u0000" + // 16400 - 16409
"\uDDFB\u0000\u0000\u0000\u0000\uA7A4\u0000\u0000\uA2E0\u0000" + // 16410 - 16419
"\uA5B8\uA5B9\u0000\u0000\u0000\u0000\u0000\u0000\uF9C2\u0000" + // 16420 - 16429
"\uEABC\uB2DC\u0000\u0000\u0000\u0000\u0000\u0000\uB2DD\uB2D9" + // 16430 - 16439
"\uB2DA\u0000\u0000\uB2DB\u0000\u0000\u9ECB\uB2D5\uB2D6\u0000" + // 16440 - 16449
"\u9EC9\u0000\uB2D7\u0000\u0000\u9BE1\u0000\uE2F2\u9CEB\u0000" + // 16450 - 16459
"\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uD5E3\uB2D4\u0000" + // 16460 - 16469
"\u0000\u0000\u0000\u0000\u0000\u0000\uE8A8\uB2D2\u0000\u0000" + // 16470 - 16479
"\u0000\uB2D3\u0000\u0000\u0000\u9BF4\u0000\u0000\u0000\u0000" + // 16480 - 16489
"\u0000\uB3A2\uB3A3\u0000\u0000\uF5AF\u0000\u9CDC\u0000\u0000" + // 16490 - 16499
"\uCEF0\u0000\uCCD0\u0000\u0000\u0000\u0000\uCFA6\u0000\u0000" + // 16500 - 16509
"\uF7B6\u0000\u0000\u0000\u0000\uF4DE\u0000\uA5B0\uA5B1\uA5B2" + // 16510 - 16519
"\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7\u9EC8\u0000\u0000\u0000\u0000" + // 16520 - 16529
"\u0000\u0000\u0000\uCFCE\u9EC6\u0000\u0000\u9EC7\uB2CD\uB2CE" + // 16530 - 16539
"\u0000\u0000\uF3F9\u0000\uEDF8\u0000\uF5C7\u0000\u0000\uF6C4" + // 16540 - 16549
"\u0000\u0000\u0000\uEEDD\uE7C4\u0000\uF1A6\uCBD5\u0000\u0000" + // 16550 - 16559
"\u0000\u0000\u0000\u0000\uE1A3\uD2E0\u0000\uA2B6\u0000\uA1C7" + // 16560 - 16569
"\uA1C8\u0000\u0000\u0000\u0000\uBFC0\uBFC1\u0000\u0000\uCAA9" + // 16570 - 16579
"\u0000\u0000\u0000\u0000\u0000\u0000\uF7B0\u0000\uCCEA\uB2CC" + // 16580 - 16589
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9BD5\uB2CA\uB2CB" + // 16590 - 16599
"\u0000\u0000\u9EC5\u0000\u0000\u0000\uDFF8\u0000\u0000\u0000" + // 16600 - 16609
"\u0000\u0000\uB2EE\u9ECE\u0000\u0000\uD9A1\u0000\uD8C0\uDCDB" + // 16610 - 16619
"\u0000\u0000\uEDBD\uB2C1\u0000\uB2C2\u9EC4\uB2C3\u0000\u0000" + // 16620 - 16629
"\u0000\uDCEA\u0000\u0000\uF0F7\u0000\uF0CA\uB2BE\u0000\u0000" + // 16630 - 16639
"\u0000\u0000\u0000\u0000\u0000\uD7F7\uB2BC\u0000\u0000\u0000" + // 16640 - 16649
"\u0000\uB2BD\u0000\u0000\uDEEE\u0000\u0000\u0000\u0000\u9DF2" + // 16650 - 16659
"\u0000\uF2A3\u0000\uF7F8\u0000\u0000\u0000\u0000\uD0B3\uB2B9" + // 16660 - 16669
"\u0000\u0000\u0000\uB2BA\u0000\u0000\u0000\uF1BB\u0000\u0000" + // 16670 - 16679
"\u0000\u9CF2\uE9F1\uB2B5\u0000\u0000\uB2B6\u0000\uB2B7\u0000" + // 16680 - 16689
"\u0000\uE9C8\u0000\uCBCF\u0000\uE3C9\u0000\u0000\uF6E0\u0000" + // 16690 - 16699
"\u0000\u0000\u0000\uE9F3\uF2C3\uB2B2\uB2B3\u0000\u0000\uB2B4" + // 16700 - 16709
"\u0000\u0000\u0000\uE2E3\uEEFB\u0000\u0000\uDFF7\uD7CA\uB2B0" + // 16710 - 16719
"\uB2B1\u0000\u0000\u0000\u0000\u0000\u0000\uE1B8\u0000\uE8F4" + // 16720 - 16729
"\uD3FD\uB2AB\u0000\u0000\u0000\uB2AC\u0000\u0000\u0000\u9DA3" + // 16730 - 16739
"\u0000\u0000\u0000\u0000\u0000\uB2D8\u0000\u0000\u0000\uF1CD" + // 16740 - 16749
"\u0000\u0000\u0000\u0000\uD2B3\uD2BF\u0000\u0000\u0000\uE3F4" + // 16750 - 16759
"\uCDD0\u0000\u0000\u9BCE\u9EC2\u0000\u0000\u0000\u0000\u0000" + // 16760 - 16769
"\u0000\u0000\uCBBE\uB1FE\uB2A1\u0000\uB2A2\uB2A3\uB2A4\u0000" + // 16770 - 16779
"\u0000\uDBBC\u0000\u0000\u0000\u0000\u0000\u0000\uA2D0\u0000" + // 16780 - 16789
"\uA2D1\u0000\uF2A2\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 16790 - 16799
"\uFDBD\uB1FD\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE4D5" + // 16800 - 16809
"\uB1FA\uB1FB\u0000\u0000\uB1FC\u0000\u0000\u0000\uEAF6\u0000" + // 16810 - 16819
"\u0000\uF6F9\u9CFA\u0000\uEEA4\u0000\u0000\u0000\u0000\uD0A4" + // 16820 - 16829
"\u0000\u0000\u9ACF\u0000\u0000\u0000\uE1DE\uCBEE\u0000\uA2D3" + // 16830 - 16839
"\uA2D4\u0000\u0000\u0000\uA1A5\uA1A6\u0000\uA3A1\uA3A2\uA3A3" + // 16840 - 16849
"\uA3A4\uA3A5\uA3A6\uA3A7\uB1F7\uB1F8\u9EC1\u0000\u0000\uB1F9" + // 16850 - 16859
"\u0000\u0000\uD9D5\u0000\u0000\uDFAA\u0000\u0000\u0000\uEAE3" + // 16860 - 16869
"\u0000\u0000\u0000\u0000\u0000\u9CD8\u0000\u0000\u0000\uDCB9" + // 16870 - 16879
"\u0000\u0000\u0000\uF1C0\uB1F1\u0000\u0000\u0000\uB1F2\u0000" + // 16880 - 16889
"\uB1F3\u0000\uD3A5\u0000\u0000\u0000\u9EA2\u0000\u0000\uF7CF" + // 16890 - 16899
"\uB1E8\uB1E9\u0000\uB1EA\u9EBF\uB1EB\uB1EC\u0000\uCFEA\u0000" + // 16900 - 16909
"\u0000\uCFD0\u0000\uEACC\u0000\u0000\uD0F9\uECAB\uDED3\uF7E9" + // 16910 - 16919
"\u9DE3\u0000\uF9F5\uB1E6\u0000\uB1E7\u0000\u9EBE\u0000\u0000" + // 16920 - 16929
"\u0000\uD8DD\u0000\uCDFD\uF2AB\u0000\u0000\u9DD6\u0000\u0000" + // 16930 - 16939
"\u0000\uD0AD\u0000\u0000\uF2C2\uF6C3\u0000\uD7D2\u0000\u0000" + // 16940 - 16949
"\uF9A2\uB1E2\uB1E3\u0000\u0000\uB1E4\u0000\u0000\uB1E5\uB1DD" + // 16950 - 16959
"\uB1DE\u0000\uB1DF\u0000\uB1E0\u0000\u9EBB\uB1DB\uB1DC\u9EBA" + // 16960 - 16969
"\u0000\u0000\u0000\u0000\u0000\uBCE2\u0000\u0000\u0000\uEDE7" + // 16970 - 16979
"\uFBB5\uF8EC\u0000\u0000\u0000\uCEF2\u0000\uD6D9\u0000\u0000" + // 16980 - 16989
"\u9BD9\u0000\u0000\u0000\u0000\u0000\uEECA\uB1D7\uB1D8\u0000" + // 16990 - 16999
"\u0000\uB1D9\u0000\u0000\uB1DA\uB1D5\u0000\u0000\u0000\uB1D6" + // 17000 - 17009
"\u0000\u0000\u0000\u9DAE\u0000\uE7FB\uFCB7\uFCE4\uFBC5\uB1D1" + // 17010 - 17019
"\uB1D2\u0000\uB1D3\u0000\u9EB8\u0000\u0000\uE7A8\u0000\u0000" + // 17020 - 17029
"\u0000\u0000\u0000\u0000\uA1E5\uA1E4\u0000\u0000\uF2F1\u0000" + // 17030 - 17039
"\u0000\u0000\u0000\u0000\u0000\uB8D2\u0000\u0000\uE0FA\uEEC4" + // 17040 - 17049
"\uD9DE\u0000\u0000\u0000\u0000\uC6DB\uC6DC\u0000\u0000\uFCC1" + // 17050 - 17059
"\u0000\uEEAB\uD4A5\u9AEA\u0000\u0000\uFDC3\u0000\u0000\u0000" + // 17060 - 17069
"\uEBF6\uCFB2\u0000\uCDDD\u0000\u0000\u0000\u0000\u0000\u0000" + // 17070 - 17079
"\u0000\uD9FD\uB1D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 17080 - 17089
"\uD6DB\uB1CD\uB1CE\u0000\u0000\uB1CF\u0000\u0000\u0000\uDCB6" + // 17090 - 17099
"\uE4E9\u0000\u0000\u0000\u0000\uC4BF\uC4C0\u0000\u0000\uFDC0" + // 17100 - 17109
"\u0000\u0000\u0000\u0000\u0000\u0000\uA6A3\uA6C8\uA6C7\uA6AE" + // 17110 - 17119
"\uB1C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9BAA\uB1C5" + // 17120 - 17129
"\uB1C6\u0000\u0000\uB1C7\u0000\u0000\u0000\uE8DA\uDAC3\uDAC4" + // 17130 - 17139
"\uD4C5\u0000\uE7FA\uB1BA\u0000\u0000\uB1BB\uB1BC\uB1BD\uB1BE" + // 17140 - 17149
"\u0000\uECD7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAE6" + // 17150 - 17159
"\uB1B5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1E7\uB1B3" + // 17160 - 17169
"\u0000\u0000\u0000\uB1B4\u0000\u0000\u0000\uD7B2\u0000\u0000" + // 17170 - 17179
"\u0000\u0000\uD0FD\uB1AD\u0000\u0000\u0000\uB1AE\u0000\u0000" + // 17180 - 17189
"\u0000\uD6B0\uF8CA\u0000\uFCFA\u0000\uD9FE\u9EB5\uB1A8\u0000" + // 17190 - 17199
"\u9EB6\uB1A9\uB1AA\u0000\u0000\uF5D7\u0000\u0000\uD8BF\u0000" + // 17200 - 17209
"\u0000\u0000\u9BA9\u0000\u0000\uD0C1\u0000\u0000\uDCBC\uD2B6" + // 17210 - 17219
"\uF5D5\u0000\u0000\u0000\u0000\uC8C4\uC8C5\u0000\u0000\uCEEA" + // 17220 - 17229
"\u0000\u0000\u0000\u0000\u0000\u0000\u9BBA\u9AF2\uEAE0\uB1A7" + // 17230 - 17239
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9F6\uB1A5\u9EB4" + // 17240 - 17249
"\u0000\u0000\uB1A6\u0000\u0000\u0000\uCDBB\u0000\uEFDA\uEED8" + // 17250 - 17259
"\u0000\uDDA7\uB0FC\u0000\u0000\u0000\uB0FD\u0000\uB0FE\u0000" + // 17260 - 17269
"\u9DA7\u0000\u9EA7\u0000\u0000\u0000\u0000\u0000\uCFD5\uD8FD" + // 17270 - 17279
"\u0000\u0000\uE2DE\uE1B5\u0000\u0000\uCDEF\uF1A7\uCEE5\uB0F5" + // 17280 - 17289
"\uB0F6\u0000\uB0F7\u0000\uB0F8\uB0F9\u0000\uD0EF\u0000\u9DB2" + // 17290 - 17299
"\uFDED\u9BFE\u0000\u0000\u0000\uD5BE\u0000\u0000\u0000\u0000" + // 17300 - 17309
"\uA1D8\u0000\u0000\u0083\u0000\uA1AE\uA1AF\u0000\u0000\uA1B0" + // 17310 - 17319
"\uA1B1\u0000\u0000\uF7A2\u0000\u0000\u0000\u0000\u0000\u0000" + // 17320 - 17329
"\uD4FE\u0000\u0000\uCDB2\u0000\uDAAB\u0000\uCAA7\u0000\u0000" + // 17330 - 17339
"\uEAAC\u0000\u0000\u0000\uCAA8\u0000\u0000\uF3DD\u0000\u0000" + // 17340 - 17349
"\u0000\uE4DA\u0000\u0000\uFDAA\uF9E2\u0000\u0000\u0000\u0000" + // 17350 - 17359
"\u0000\u9DDD\uD8EA\u0000\u0000\uEAE7\uDFC3\uD1D2\uCEE2\u0000" + // 17360 - 17369
"\uD3A4\u0000\uC8F0\u0000\u0000\uC8F1\uA0FE\u0000\u0000\uC7F3" + // 17370 - 17379
"\u0000\u0000\u0000\u0000\u0000\u0000\uF6DD\u0000\uF1A3\u0000" + // 17380 - 17389
"\uC8F6\u0000\u0000\u0000\u0000\u0000\u0000\uCEBC\u0000\u0000" + // 17390 - 17399
"\u0000\uD8F5\u0000\u0000\u0000\uCCCE\u0000\u0000\uC8AC\u0000" + // 17400 - 17409
"\u0000\uC8AD\uC8AE\u0000\u0000\uC5B7\u0000\u0000\u0000\u0000" + // 17410 - 17419
"\u0000\u0000\u9BA7\uF1CA\u0000\uCEA3\uB0F1\u9EB2\uB0F2\u0000" + // 17420 - 17429
"\uB0F3\u0000\u0000\uB0F4\uB0ED\uB0EE\u0000\u0000\uB0EF\u0000" + // 17430 - 17439
"\u0000\uB0F0\uB0E9\u0000\u0000\u0000\uB0EA\u0000\u0000\u0000" + // 17440 - 17449
"\uCAF2\uDFA4\u0000\u0000\uD4C4\u0000\uF4B7\uFDC2\uFCB0\u0000" + // 17450 - 17459
"\uFDEC\uCAE2\u0000\u0000\uD7C4\u0000\u0000\u0000\u0000\u0000" + // 17460 - 17469
"\u0000\uE7E2\u0000\u0000\uDDDA\u0000\u0000\u0000\u0000\u0000" + // 17470 - 17479
"\u0000\uE3CE\u0000\u0000\uE3A1\u0000\u0000\uE8E3\u0000\u0000" + // 17480 - 17489
"\uF3AB\uB0E2\uB0E3\u0000\uB0E4\uB0E5\uB0E6\u0000\u0000\uEEC9" + // 17490 - 17499
"\u0000\u0000\u0000\uE2DD\u0000\u0000\uE9E0\u0000\u9BB0\u0000" + // 17500 - 17509
"\uD0D8\uFCA2\uD4BE\uB0E1\u0000\u0000\u0000\u0000\u0000\u0000" + // 17510 - 17519
"\u0000\uE4E1\uB0DC\uB0DD\uB0DE\u0000\uB0DF\u0000\u0000\uB0E0" + // 17520 - 17529
"\uB0DA\uB0DB\u0000\u0000\u0000\u0000\u0000\u0000\uDDC9\u0000" + // 17530 - 17539
"\u0000\uD4D3\uB0D5\u0000\u0000\u9EB1\uB0D6\u0000\u0000\u0000" + // 17540 - 17549
"\uF7EC\u0000\u0000\u0000\uE8F6\u0000\uCBD3\u0000\u0000\u9AD7" + // 17550 - 17559
"\uE0BC\u0000\uF4CA\uD4FA\uB0CB\uB0CC\u0000\uB0CD\uB0CE\uB0CF" + // 17560 - 17569
"\uB0D0\u9EB0\uB0C9\u9EAF\uB0CA\u0000\u0000\u0000\u0000\u0000" + // 17570 - 17579
"\uBCD2\uBCD3\uBCD4\u0000\uD3D0\u0000\u0000\u0000\u0000\u0000" + // 17580 - 17589
"\u0000\u0000\uDFC1\uB0C5\uB0C6\u0000\u0000\uB0C7\u0000\u0000" + // 17590 - 17599
"\uB0C8\uB0C3\u0000\u0000\u0000\uB0C4\u0000\u0000\u0000\uCCAA" + // 17600 - 17609
"\u0000\u0000\uF0C3\uCCD6\u0000\uF4FA\u0000\u0000\u0000\u0000" + // 17610 - 17619
"\uCDD6\uFCF6\u0000\uA1A9\u0000\u0000\u0000\uA1AA\u0000\u0000" + // 17620 - 17629
"\u0000\uDBF2\u0000\u0000\u0000\u0000\uC5F5\uC5F6\u0000\u0000" + // 17630 - 17639
"\uDDC3\u0000\uF9DF\u0000\u0000\u0000\u0000\uC1DC\uC1DD\u0000" + // 17640 - 17649
"\uC1DE\uB0BF\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDFE" + // 17650 - 17659
"\uB0BC\uB0BD\u0000\u0000\uB0BE\u0000\u0000\u0000\uD2B5\u0000" + // 17660 - 17669
"\u0000\u0000\uD3D5\u0000\uF9EB\uEEA3\u0000\u0000\u0000\u0000" + // 17670 - 17679
"\u0000\u0000\uD1BE\u0000\u0000\uF6B9\u0000\u0000\u0000\u0000" + // 17680 - 17689
"\u0000\u0000\uE9B3\u0000\u0000\uCDDF\u0000\u0000\uF5CB\u0000" + // 17690 - 17699
"\uE4F0\uCBAB\uB0BA\uB0BB\u0000\u0000\u0000\u0000\u0000\u0000" + // 17700 - 17709
"\uE3E5\u0000\uCBC5\uEAB4\uB0B5\u0000\u0000\u0000\uB0B6\u0000" + // 17710 - 17719
"\u0000\u0000\uFDCD\u0000\u0000\u0000\uF3B6\u0000\uE4EE\uF9A1" + // 17720 - 17729
"\u0000\u0000\uFBEF\u0000\u0000\u0000\uEFA8\u0000\u0000\u0000" + // 17730 - 17739
"\uEEB4\uB0A8\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0A5" + // 17740 - 17749
"\uB0A6\uB0A7\u9EAE\u0000\u0000\u0000\u0000\uE0C1\uEFDB\u0000" + // 17750 - 17759
"\u0000\uF0E9\uB0A1\uB0A2\u9EAD\u0000\uB0A3\u0000\u0000\uB0A4" + // 17760 - 17769
"\uDBC2\u0000\u0000\u0000\u0000\uCAFE\u0000\u0000\uF4EA\u0000" + // 17770 - 17779
"\u0000\u0000\uCEB9\u0000\u0000\uD4AA\u0000\uE5CC\u0000\u0000" + // 17780 - 17789
"\u0000\u0000\uC8B8\uC8B9\u0000\u0000\uF7E5\u0000\u0000\u0000" + // 17790 - 17799
"\uCCB2\u0000\u0000\uD3BF\u0000\u0000\u0000\u0000\u0000\u0000" + // 17800 - 17809
"\uF0E7\uE2CC\u0000\uF9E0\u0000\u0000\u0000\u0000\uECD6\u0000" + // 17810 - 17819
"\u0000\uD3E0\u0000\uE4BF\u0000\uFBC0\u0000\uDABE\uE0A9\u0000" + // 17820 - 17829
"\u0000\u0000\u0000\u0000\u0000\u0000\uCCC6\uDCAF\u0000\u0000" + // 17830 - 17839
"\u0000\u0000\u0000\uF0A3\u0000\uEDAA\u0000\u0000\uF2A1\uCEE1" + // 17840 - 17849
"\u0000\u0000\u0000\uD4AB\uCAB3\uCDA6\u0000\uCDC3\uD3DA\u0000" + // 17850 - 17859
"\u0000\u0000\u0000\u0000\u0000\u9CC5\uD9F9\u0000\u0000\uD3EA" + // 17860 - 17869
"\uF5F5\u9CEC\uEFC7\u0000\uDCFB\u0000\u0000\u0000\u0000\u0000" + // 17870 - 17879
"\u0000\u0000\uF8B5\uFDD3\uEBED\uD6DC\u0000\u0000\u0000\u0000" + // 17880 - 17889
"\u0000\uBCB6\uBCB7\u0000\uBCB8\uCDDC\uD9F7\u0000\u0000\u0000" + // 17890 - 17899
"\u0000\u0000\u0000\u9DE4\uF3A3\u0000\uD3EC\uE4E5\u0000\u0000" + // 17900 - 17909
"\u0000\u0000\u0000\u0000\u0000\uE2F5\u9CC0\uE4BC\u0000\u0000" + // 17910 - 17919
"\u0000\u0000\u0000\u0000\uFCC6\u0000\u0000\u0000\uDBC9\u0000" + // 17920 - 17929
"\u0000\u0000\uE4FA\u0000\uEEBA\u0000\u0000\u0000\u9AE6\u0000" + // 17930 - 17939
"\uF8D3\u0000\uACEA\uACEB\uACEC\uACED\uACEE\uACEF\uACF0\uACF1" + // 17940 - 17949
"\uE4CA\u0000\uDCE1\u9BFD\u0000\uF9C8\u0000\u0000\uD7E9\uEDF6" + // 17950 - 17959
"\u0000\u0000\u0000\uDEED\u0000\uF1B2\u0000\uF1B1\u0000\u0000" + // 17960 - 17969
"\u0000\u0000\u0000\uF9CD\u0000\u0000\u0000\uECB9\u0000\u0000" + // 17970 - 17979
"\u0000\u0000\uC8D1\uC8D2\u0000\u0000\uE4DB\u0000\uE1FB\uCBA2" + // 17980 - 17989
"\u0000\u0000\u0000\uE9E3\u0000\uEDCB\uCFE4\u0000\uACE2\uACE3" + // 17990 - 17999
"\uACE4\uACE5\uACE6\uACE7\uACE8\uACE9\uCCF4\u0000\u0000\u0000" + // 18000 - 18009
"\u0000\u0000\u0000\u0000\uD4F8\u9BB9\u0000\uE2D1\u0000\u0000" + // 18010 - 18019
"\u0000\u0000\u9EA4\uCDD4\u0000\u0000\u0000\u0000\u0000\u0000" + // 18020 - 18029
"\u0000\uE6E3\u9BEC\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 18030 - 18039
"\uCDAC\uFAB5\u0000\u0000\u0000\u9AB1\u0000\u0000\u0000\uD3BC" + // 18040 - 18049
"\u0000\u0000\u0000\uCAF0\u0000\uEFD0\u0000\uCDB1\u0000\u0000" + // 18050 - 18059
"\u0000\u0000\u0000\uDDDF\u0000\u0000\u0000\uDAF2\u0000\u0000" + // 18060 - 18069
"\u0000\u0000\uA0F9\uC8A2\u0000\u0000\uF6A6\u0000\u0000\u0000" + // 18070 - 18079
"\u0000\u0000\u0000\uEBD7\u0000\u0000\uE0DA\u0000\u0000\u0000" + // 18080 - 18089
"\uEEF7\u0000\u0000\uDFA3\u0000\u0000\u0000\u0000\u0000\u0000" + // 18090 - 18099
"\u9BB1\u0000\u0000\uFDDF\u0000\u0000\u0000\u0000\u0000\u0000" + // 18100 - 18109
"\uE3B2\u0000\u0000\uCBAA\u0000\u0000\u0000\u0000\u9BB4\u0000" + // 18110 - 18119
"\uACDA\uACDB\uACDC\uACDD\uACDE\uACDF\uACE0\uACE1\uCDE9\u0000" + // 18120 - 18129
"\u0000\u0000\u0000\u0000\u0000\u0000\uCDDB\uD8E9\u0000\u0000" + // 18130 - 18139
"\uF8FE\u0000\uCFCC\u0000\u0000\uE2BC\u0000\u0000\uFCED\uECE0" + // 18140 - 18149
"\uD2FE\u0000\uFDE5\uF6A3\u0000\uD9FC\uFDA9\u0000\uE7EE\u0000" + // 18150 - 18159
"\uACD1\uACD2\uACD3\uACD4\uACD5\uACD6\uACD8\uACD9\uD4F9\u0000" + // 18160 - 18169
"\u0000\u0000\u0000\u0000\uF5E2\uE1D3\uDCC0\u0000\u0000\u0000" + // 18170 - 18179
"\u0000\u0000\uD1C8\uD1C9\uF1D2\uD2CC\uCFCB\u0000\u0000\uCABD" + // 18180 - 18189
"\u0000\u0000\uD8C9\u0000\u0000\u0000\u0000\u0000\u0000\uA9E7" + // 18190 - 18199
"\uA9E8\uA9E9\uA9EA\uFBB0\u0000\u0000\u0000\uD8A9\uE5DF\uF9A7" + // 18200 - 18209
"\u0000\uF8C5\u0000\u0000\u0000\u0000\u0000\uDCFA\u0000\uACBA" + // 18210 - 18219
"\uACBB\uACBC\uACBD\uACBE\uACBF\uACC0\uACC1\uCEBD\u0000\u0000" + // 18220 - 18229
"\u0000\u0000\u0000\u0000\u0000\uE0A4\uDCBF\u0000\u0000\u0000" + // 18230 - 18239
"\u0000\u0000\u0000\u0000\uD0DC\uE6AE\u0000\u0000\u0000\u0000" + // 18240 - 18249
"\u0000\uEFB6\u0000\uF7CE\uFABE\u0000\u0000\u0000\u0000\u0000" + // 18250 - 18259
"\u0000\uF5C5\uEEE0\u0000\uACB2\uACB3\uACB4\uACB5\uACB6\uACB7" + // 18260 - 18269
"\uACB8\uACB9\uF3C9\u0000\u0000\uE4BB\u0000\u0000\u0000\u0000" + // 18270 - 18279
"\u9ADF\uD6BB\uDED6\u0000\u0000\uECBE\u0000\u0000\u0000\uE5B4" + // 18280 - 18289
"\uCDC8\uEEC8\uF9A6\u0000\u0000\u0000\u0000\u0000\u0000\uDFBD" + // 18290 - 18299
"\u9BF0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDCDC\uEAC3" + // 18300 - 18309
"\u0000\uEFB4\u0000\u0000\u0000\uD7BE\u0000\uF9EA\uD1CE\uEED4" + // 18310 - 18319
"\u0000\uD4D2\uD9A3\uFDA8\uD7D9\uCCF2\uF7DD\u0000\uDEBA\u0000" + // 18320 - 18329
"\u0000\u0000\u0000\uF6E1\u0000\u0000\u0000\u0000\uC3BC\uC3BD" + // 18330 - 18339
"\u0000\u0000\uEABD\uE6FE\u9AFB\uF7C4\uF5AD\u0000\uD9E0\uFAFA" + // 18340 - 18349
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD7EA\uD6C5\u0000" + // 18350 - 18359
"\u0000\u0000\u0000\u0000\u0000\u0000\uD5C5\uE7E8\uE8D7\uDAF8" + // 18360 - 18369
"\uD4CB\u0000\u0000\u0000\uF7F6\uE2CE\u0000\uE9F5\u0000\uE1EB" + // 18370 - 18379
"\u0000\u0000\u0000\uFCE1\uEDB0\uFDD1\uF6BB\u0000\u0000\uD0D9" + // 18380 - 18389
"\u0000\u0000\uDDD2\uF7F4\uE7DC\uE4A5\uFBE1\uFAED\uF0A2\uCCF1" + // 18390 - 18399
"\u0000\uFAA3\uE2F7\u0000\uDEC9\u0000\u0000\u0000\u0000\u0000" + // 18400 - 18409
"\u0000\u0000\uDBD7\uCAEA\u0000\u0000\uCFD4\u0000\uF8BD\u0000" + // 18410 - 18419
"\u0000\uDDB3\uD4EC\u0000\u0000\uF2B9\u0000\uDFB7\uCFD3\u0000" + // 18420 - 18429
"\u0000\u0000\u0000\u0000\u9DDB\u0000\uF7BB\uF2EA\uDEC8\uE9D3" + // 18430 - 18439
"\u0000\u0000\u0000\u0000\uC1D6\uC1D7\u0000\u0000\uDFC6\u0000" + // 18440 - 18449
"\u0000\u0000\u0000\u0000\u0000\uE3DA\u0000\uFCD9\u9DD1\u0000" + // 18450 - 18459
"\u0000\u0000\u0000\u0000\u0000\u0000\uD9AD\uD6C4\u9CCA\u0000" + // 18460 - 18469
"\u0000\u0000\u0000\u0000\u0000\uE5F2\u0000\u0000\uD0F4\uDFAC" + // 18470 - 18479
"\u0000\uD6DA\u0000\u0000\u0000\u0000\u0000\uBBCE\u0000\u0000" + // 18480 - 18489
"\u0000\uFCE0\uD7C8\uFDAD\u0000\u0000\u0000\uECE2\u0000\u9CFC" + // 18490 - 18499
"\u0000\u0000\uF3EC\u0000\u0000\u0000\u0000\uDEA1\u0000\uE9D1" + // 18500 - 18509
"\uF3A9\uD0E0\uE9D2\u0000\uDAE3\u0000\u0000\uE1B4\u0000\u0000" + // 18510 - 18519
"\u0000\u0000\uF4D3\u0000\uACAA\uACAB\uACAC\uACAD\uACAE\uACAF" + // 18520 - 18529
"\uACB0\uACB1\uE2CD\u0000\u0000\u0000\u9CAE\u0000\uEFFD\uF2E8" + // 18530 - 18539
"\uDDD4\u0000\uEAA3\u0000\u0000\u0000\uD6C3\uD6F4\uE9EB\uE9EC" + // 18540 - 18549
"\uE0E4\u0000\u0000\u0000\u0000\uDAA7\uEDCD\uE4D2\u0000\u0000" + // 18550 - 18559
"\uEAA9\uE4BA\uF3A2\uCDD2\uE2CB\u0000\uFACF\u0000\u0000\u0000" + // 18560 - 18569
"\u0000\u0000\u9FC9\u0000\u0000\u0000\uFBA1\u0000\u0000\u0000" + // 18570 - 18579
"\uE5E9\uE9EE\uE4F6\uD0C0\u0000\uF0B7\uEEA1\u0000\u0000\u0000" + // 18580 - 18589
"\uCBAD\u0000\uF9B0\u0000\u0000\u0000\uE9FE\u0000\u0000\u0000" + // 18590 - 18599
"\u0000\uE4ED\u0000\u0000\u0000\u0000\uA0AF\uC1C5\u0000\uC1C6" + // 18600 - 18609
"\uD7C1\u0000\u0000\u0000\u0000\uE5D5\u0000\u0000\uE2BB\u0000" + // 18610 - 18619
"\uF7AD\u0000\u0000\u0000\uF8E1\uEBE4\u0000\u0000\uF2E7\u0000" + // 18620 - 18629
"\uD7D5\uD4B6\uF9E8\uF9DA\u0000\u0000\u0000\u0000\u0000\u0000" + // 18630 - 18639
"\u0000\uFDD0\uF6ED\u0000\uF9AE\u0000\uDDBE\u0000\u0000\u0000" + // 18640 - 18649
"\uF1B7\uEEF8\u0000\u0000\u0000\uD9D9\u9CCB\u0000\uF8A1\u0000" + // 18650 - 18659
"\u0000\u0000\uE8D6\u0000\uF6B2\u0000\u0000\u0000\u0000\uCFF0" + // 18660 - 18669
"\uF9BD\u0000\uACA1\uACA2\uACA3\uACA4\uACA5\uACA6\uACA8\uACA9" + // 18670 - 18679
"\uD0B1\u9BC5\u0000\u0000\u0000\uD5EF\u0000\u0000\uCEDD\uEBC0" + // 18680 - 18689
"\u0000\uFDA2\u0000\u0000\u0000\uEEED\u0000\u0000\u0000\uECEB" + // 18690 - 18699
"\uDEC5\uCBA6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD5A1" + // 18700 - 18709
"\uDAA6\u0000\u0000\uE0EC\u0000\u0000\u0000\u0000\uD3F7\u0000" + // 18710 - 18719
"\u0000\u0000\u0000\uC2EB\uA0C3\u0000\uC2EC\u9BF8\u0000\u9AF6" + // 18720 - 18729
"\u0000\u0000\u0000\u0000\u0000\uBBAD\uBBAE\u0000\uBBAF\uF7A1" + // 18730 - 18739
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEECB\uF1A4\u9AEC" + // 18740 - 18749
"\u0000\u0000\u0000\u0000\u0000\u0000\uF5CD\u0000\uF1F2\uFAC7" + // 18750 - 18759
"\uECF0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBFB\uE7CC" + // 18760 - 18769
"\u0000\uD6A8\uCEA7\u0000\uD4B5\u0000\u0000\uCCB7\uDBB8\u0000" + // 18770 - 18779
"\u0000\u0000\u0000\uD0E9\uD9E1\u0000\u0000\uE0B8\u0000\u0000" + // 18780 - 18789
"\uCDD1\uF3B9\uEFFC\uD1C4\uEFB1\u0000\uD1C5\u0000\uD0DE\u0000" + // 18790 - 18799
"\uD7D8\u0000\uFDA7\u0000\u0000\u0000\u0000\uEAAB\uF5DF\u0000" + // 18800 - 18809
"\uEEB6\u0000\u0000\u0000\uE2F6\uD3CA\uF5DE\u0000\u0000\u0000" + // 18810 - 18819
"\u0000\u0000\u0000\u0000\uD9AB\uCBEA\u0000\u0000\u0000\uCBBC" + // 18820 - 18829
"\u0000\u0000\u0000\uE5F5\u0000\u0000\u0000\u0000\u0000\uB1D4" + // 18830 - 18839
"\u0000\u0000\u0000\uD4E5\u0000\u0000\u0000\uF9C3\uD9AF\u0000" + // 18840 - 18849
"\u0000\u0000\uF9E7\u0000\u0000\u0000\uDEAE\u0000\u0000\u0000" + // 18850 - 18859
"\u0000\u0000\uB1AB\uB1AC\u0000\u0000\uCDC6\uF2B6\u0000\u0000" + // 18860 - 18869
"\uDDFE\u0000\u0000\uD4A9\u0000\u0000\u0000\u0000\uCDC2\uE7DA" + // 18870 - 18879
"\uEBDE\u0000\u0000\uF5C8\u0000\uD4DE\u0000\u0000\uEBBF\u0000" + // 18880 - 18889
"\uD7CE\uD1BF\u0000\u0000\u0000\uD0D1\uCBBF\u0000\uEDA4\u0000" + // 18890 - 18899
"\u0000\uFADF\u0000\u0000\u0000\u0000\u0000\u0000\uE4BD\u0000" + // 18900 - 18909
"\u0000\uDBE1\u0000\u0000\uE5C9\u0000\uEDB4\u0000\uECD4\uEACB" + // 18910 - 18919
"\u0000\u0000\uCABF\uD5B0\u0000\uCFE9\u9AC4\u0000\u0000\u0000" + // 18920 - 18929
"\u0000\u0000\u9BC0\u0000\uE0D9\u0000\u0000\u0000\u0000\u0000" + // 18930 - 18939
"\u0000\uD9D6\uCBA5\u0000\u0000\u0000\u0000\uCBE9\u0000\u0000" + // 18940 - 18949
"\uCEEE\u0000\u9BCD\uECCF\u0000\u0000\u0000\uE7D1\uD2AC\u0000" + // 18950 - 18959
"\uCEF9\u0000\u0000\uE0FD\u0000\u0000\uD8F8\u0000\u0000\u0000" + // 18960 - 18969
"\uBDD7\uBDD8\uBDD9\u0000\u0000\uD6A1\uFDBF\u0000\uFCD3\u0000" + // 18970 - 18979
"\uEFA1\u0000\uEFBF\u0000\u0000\u0000\u0000\u0000\uCECF\u0000" + // 18980 - 18989
"\uA5F7\uA5F8\u0000\u0000\u0000\u0000\u0000\u0000\uCCDD\u0000" + // 18990 - 18999
"\u0000\u9CE4\u0000\uFDDE\uCAC0\u0000\u0000\u0000\uD9C3\uD0E8" + // 19000 - 19009
"\u0000\u0000\u0000\uE0B4\u0000\u0000\u0000\u0000\uC7FD\u0000" + // 19010 - 19019
"\u0000\u0000\uD7BC\uCCE3\u0000\u0000\uE6DB\uCCA2\uF7FE\uDFBC" + // 19020 - 19029
"\u0000\u9DD0\u0000\u0000\uEBCD\uEFF9\u0000\u0000\u0000\uDDBC" + // 19030 - 19039
"\uF6DC\u0000\u0000\uF8BB\u0000\uE8D1\u0000\u0000\u0000\u0000" + // 19040 - 19049
"\uECF2\u0000\u0000\u0000\u0000\uC0CC\uC0CD\u0000\u0000\uF2D7" + // 19050 - 19059
"\u0000\uCAF8\uDAEF\u9AC2\u0000\uD6D4\uD7ED\uD1D1\u0000\u0000" + // 19060 - 19069
"\u0000\u0000\u0000\uE1F2\uE5D4\u0000\u0000\u0000\u0000\u0000" + // 19070 - 19079
"\u0000\uF3FA\u9DFD\u0000\uE1A5\u0000\u0000\u0000\u0000\u0000" + // 19080 - 19089
"\uBAC4\u0000\u0000\u0000\uD8DA\u9EA5\u0000\u0000\u0000\u0000" + // 19090 - 19099
"\uC2D6\u0000\u0000\u0000\uECBC\u0000\u0000\uE5AD\u0000\uE7ED" + // 19100 - 19109
"\uFDC1\uDAE2\u0000\u0000\uD8B3\u0000\u0000\uDCE6\u0000\u0000" + // 19110 - 19119
"\uDED2\u0000\u0000\uEDE2\uDFAB\u0000\u0000\u0000\u0000\u0000" + // 19120 - 19129
"\u0000\u0000\uD6A4\uDDBB\u0000\u0000\u0000\u0000\uCEAC\u0000" + // 19130 - 19139
"\u0000\uE6BA\u0000\u0000\uCDA9\u0000\u0000\u0000\uA1F8\uA1F9" + // 19140 - 19149
"\u0000\u0000\uA1F6\uA1F7\uEED0\u0000\u0000\u0000\u0000\u0000" + // 19150 - 19159
"\u0000\u0000\uEEE1\uF7C6\uCFC8\u0000\u0000\u0000\uE1D0\u0000" + // 19160 - 19169
"\u0000\uE3B1\uFCEB\uCDA8\u0000\uCCB6\u0000\u0000\uEBF7\u0000" + // 19170 - 19179
"\u0000\u0000\u0000\u0000\u0000\uF0E8\u0000\uDDC0\uF5BE\u0000" + // 19180 - 19189
"\uDEF7\u0000\u0000\u0000\u0000\uCAFB\uD8B1\u0000\uDCAB\u0000" + // 19190 - 19199
"\u0000\u0000\u0000\uD5A4\uE9AD\uD8E4\uFAB3\uE2C5\uFCBD\u0000" + // 19200 - 19209
"\u0000\uECC4\uE0D4\u0000\uEBB6\u0000\uD7A1\uCBE8\u0000\uF9AD" + // 19210 - 19219
"\u9CDD\uEEEA\u0000\u0000\u0000\uF0E4\uF3B4\uD4EE\uEAC0\uE1CF" + // 19220 - 19229
"\u0000\uCCBA\u0000\u0000\u0000\u0000\u9BE5\u0000\uF6E6\u0000" + // 19230 - 19239
"\u0000\uDBE5\u0000\uDDDE\u0000\u0000\uD9F0\uE9A3\uF9C6\uFCDA" + // 19240 - 19249
"\u0000\uD4B3\uD3B9\uEADE\u0000\u0000\uF0FD\u0000\u0000\u0000" + // 19250 - 19259
"\u0000\u0000\uD7AC\uECEF\u0000\u0000\u0000\uF9BA\u0000\uEBB5" + // 19260 - 19269
"\u0000\uCFA1\uE4A8\u0000\uF4B6\uECFE\u0000\u0000\uE3AE\uF0E3" + // 19270 - 19279
"\uF1E4\uDCF1\uD6A7\u0000\u0000\u0000\u0000\uD0F5\u0000\u0000" + // 19280 - 19289
"\uE8ED\uD0D2\uF5EF\uCFC7\u0000\u0000\uD4B2\uCCEF\u0000\uD4E8" + // 19290 - 19299
"\uFBAD\u0000\u0000\uF8E7\u0000\uE1CE\u0000\uF7E2\uF7DC\uE1EA" + // 19300 - 19309
"\uCEC1\uD4B1\u0000\uFDB1\uE6BD\u0000\uEDDD\uCEC4\u0000\uCBA1" + // 19310 - 19319
"\u0000\u0000\u0000\u0000\uC1B5\u0000\u0000\u0000\uF4D7\uCCA1" + // 19320 - 19329
"\u9ABB\u0000\uCFBA\u9BD4\uEEE9\u9AD9\u0000\u0000\uF5DA\u0000" + // 19330 - 19339
"\u0000\uF2DB\uE4FC\u0000\u0000\u0000\u0000\u0000\uB6CF\u0000" + // 19340 - 19349
"\u0000\u0000\uA1EC\uA1ED\u0000\u0000\u0000\u0000\uBFE4\uBFE5" + // 19350 - 19359
"\u0000\u0000\uF1F7\u0000\u0000\u0000\uE8B8\u0000\u0000\uDEB4" + // 19360 - 19369
"\u0000\u0000\u0000\u0000\u0000\u0000\uFBE2\u0000\uCDD3\uE2FB" + // 19370 - 19379
"\u0000\uCCA6\u0000\u0000\u0000\u0000\uDABB\uF2E3\uE9B4\uD2DC" + // 19380 - 19389
"\u0000\u0000\u0000\u0000\u0000\uB9F6\uB9F7\u0000\u0000\uCBB5" + // 19390 - 19399
"\uD8D1\u0000\uF4CE\uF3F7\u0000\u0000\uDCBA\u0000\u9DD9\uCCB4" + // 19400 - 19409
"\u0000\u0000\u0000\uB2FA\uB2FB\uB2FC\u0000\uB2FD\uDCA9\u0000" + // 19410 - 19419
"\u0000\u0000\u0000\uDEF6\u9BD0\uDCAA\uE2C3\uDCDE\u0000\uDCDF" + // 19420 - 19429
"\u0000\u0000\uEFAD\uE6AB\uF5EE\u0000\u0000\uCABB\u0000\u0000" + // 19430 - 19439
"\uE3DC\u0000\uDCD3\u0000\u0000\u0000\u0000\uDDE2\uFBF9\uDDC1" + // 19440 - 19449
"\uCFC6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\uF4B2" + // 19450 - 19459
"\u0000\u0000\u0000\u9DBA\u0000\u0000\u0000\uE7F2\uEDDF\u0000" + // 19460 - 19469
"\u0000\uCACB\u0000\uFDD6\u0000\u0000\u0000\u0000\uF8D1\u0000" + // 19470 - 19479
"\uF8D2\uD4B0\uF3B2\uFBB7\u0000\u0000\u0000\u0000\u0000\uB9E3" + // 19480 - 19489
"\uB9E4\u0000\uB9E5\uEBB2\u0000\u0000\u0000\u0000\uF1A2\u9DB0" + // 19490 - 19499
"\u0000\uCFE8\u0000\uEDC3\uD0B2\u0000\u0000\uCEFE\uDAA8\uF4C2" + // 19500 - 19509
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9AD6\uCEA5\u0000" + // 19510 - 19519
"\u9ACE\u0000\u0000\u0000\u0000\uD6D8\uF5D9\u0000\u0000\u0000" + // 19520 - 19529
"\u0000\u0000\u0000\u0000\u9BA5\uF1CB\u0000\u0000\uD0AF\uDDB9" + // 19530 - 19539
"\u0000\u0000\uD1C3\uF1FC\u0000\uF3C7\u9CBF\u0000\uE0EB\u0000" + // 19540 - 19549
"\u0000\uCCB5\u0000\u0000\u0000\u0000\u0000\uCFBD\uDBD3\u0000" + // 19550 - 19559
"\uFAE7\uD8E3\uF4C1\u0000\uDDB7\u0000\uCAEB\uD9E2\u0000\uFDB2" + // 19560 - 19569
"\u0000\uE3AD\uD6CC\uD9B4\uCAB9\u0000\uEEE4\u0000\u0000\u0000" + // 19570 - 19579
"\u0000\u0000\uB9C2\u0000\u0000\u0000\uE1F7\u0000\u0000\u0000" + // 19580 - 19589
"\u0000\u0000\uDABD\u0000\u0000\u0000\uDAB7\u0000\u0000\u0000" + // 19590 - 19599
"\u0000\uA1C9\u0000\u0000\u0000\u0000\uBFD6\uBFD7\u0000\u0000" + // 19600 - 19609
"\uF7D6\uDEEA\uCBB4\u0000\u0000\uEFBE\u0000\uCAA5\u0000\u0000" + // 19610 - 19619
"\uD6AB\uD0C2\u0000\u0000\u0000\uEFEC\u0000\u0000\u0000\u0000" + // 19620 - 19629
"\uC7DC\uC7DD\u0000\uC7DE\uF9C5\uDDD3\uD6F1\uECFC\uFCF0\u0000" + // 19630 - 19639
"\u0000\uEDC0\uD3E8\u0000\u0000\uDEA8\uF4E4\uECC2\u0000\uD9F5" + // 19640 - 19649
"\uE1AE\u0000\u0000\uECC3\uCFFE\u0000\uF8BF\uD8E2\uFCA7\uF7FC" + // 19650 - 19659
"\uF7B1\uCEBB\uF4A1\u0000\u0000\uEECD\uDDB6\uEEAF\uCDF8\u0000" + // 19660 - 19669
"\u0000\u0000\u0000\uDEB8\uD1C2\u0000\uF9A5\u0000\uE8D5\u0000" + // 19670 - 19679
"\u0000\u0000\uE1F6\uDECC\u0000\u0000\uFCDE\u0000\uDBF9\uD7B1" + // 19680 - 19689
"\u0000\u0000\u0000\uCBFC\u0000\u0000\uCDFB\uF6D6\u0000\uE7F5" + // 19690 - 19699
"\uE8EF\uE3F9\uD2BB\uE2C2\u0000\uF3D8\uE5D3\u0000\u0000\uF3D9" + // 19700 - 19709
"\u0000\uCFE7\uF3CB\uEDA9\uCABE\u0000\u0000\u0000\u0000\uC0F7" + // 19710 - 19719
"\u0000\u0000\u0000\uE0FC\uD4A8\u0000\uEDD3\uD8EF\uD4C1\u0000" + // 19720 - 19729
"\u0000\u0000\u0000\u0000\u0000\u0000\u9DCA\uECA1\u0000\u0000" + // 19730 - 19739
"\u0000\uCCB9\u0000\u0000\uFBDE\uE3DB\u0000\uD3C9\u0000\uDCCF" + // 19740 - 19749
"\u0000\u0000\u0000\uE7F0\u0000\uD0EE\u0000\u0000\uF3AA\uD9C8" + // 19750 - 19759
"\u0000\u0000\uEEE3\uD7BD\u0000\u0000\u0000\uF4C9\u0000\u0000" + // 19760 - 19769
"\u0000\u0000\u0000\uCDAE\u0000\u0000\u0000\u9CCD\u0000\u0000" + // 19770 - 19779
"\u0000\u0000\uC8E2\u0000\u0000\uC8E3\uE9AA\u0000\u0000\u0000" + // 19780 - 19789
"\u0000\u0000\u0000\u0000\uCBCD\uDACD\u0000\u0000\u0000\uF9CC" + // 19790 - 19799
"\u0000\uE1DA\uDBBF\uD9C7\uE4D7\uEADD\u0000\uD4F7\u0000\u0000" + // 19800 - 19809
"\u0000\uD5E5\u0000\u0000\u0000\u0000\u0000\u9DE5\u0000\u0000" + // 19810 - 19819
"\u0000\uCAE5\u0000\u0000\u0000\uDCA1\uF0B3\u0000\uE5EC\u0000" + // 19820 - 19829
"\u0000\u0000\uD1E7\u0000\uD3F0\u9DC3\u0000\u0000\u0000\u0000" + // 19830 - 19839
"\uF0A4\uE1EC\uE2C1\u0000\uCEA4\u0000\u0000\u0000\u0000\u0000" + // 19840 - 19849
"\uB8EF\u0000\u0000\u0000\uDACF\u0000\uDCD4\u0000\uDCA6\u0000" + // 19850 - 19859
"\uE7D4\u0000\uCACA\u0000\u0000\u0000\uD9FB\u0000\uA5F0\uA5F1" + // 19860 - 19869
"\u0000\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\uFCEF\u0000\uE0E3\u0000" + // 19870 - 19879
"\u0000\u0000\u0000\u0000\uB8E2\uB8E3\u0000\uB8E4\uE1A4\uCDAB" + // 19880 - 19889
"\u0000\uD9F4\uE8A6\uCDCE\uE1E9\u0000\uD3EF\u0000\u0000\uECD3" + // 19890 - 19899
"\u0000\u0000\uDDC2\uEFB7\uEBAF\u0000\u0000\u0000\u0000\u0000" + // 19900 - 19909
"\uE5DE\u0000\uF4C8\uE8EA\uF5F3\u0000\u0000\uF9DE\u0000\u0000" + // 19910 - 19919
"\uFAA9\u0000\uE1DD\u0000\u0000\u0000\u0000\uC2E8\u0000\u0000" + // 19920 - 19929
"\u0000\uE3ED\u0000\uE8C2\u0000\uEDF5\uFDFE\uFCA5\uFAB1\uDFD9" + // 19930 - 19939
"\u0000\uE0D2\u0000\u0000\uE2B6\u0000\u0000\u0000\u0000\uEFF1" + // 19940 - 19949
"\u0000\uFCC5\uCBC2\u0000\u0000\u0000\u0000\uFDD5\u0000\uA5E8" + // 19950 - 19959
"\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF\uE7C9\u0000\uE2F3" + // 19960 - 19969
"\uE7E1\u0000\u0000\uE3CB\u0000\uCEAE\u0000\u0000\u0000\u0000" + // 19970 - 19979
"\uD9A2\u0000\u0000\uD2EC\u0000\u0000\u0000\u0000\u0000\u0000" + // 19980 - 19989
"\uF2F4\u0000\u0000\uFDF0\u0000\uE0BD\uCEE3\u0000\u0000\u0000" + // 19990 - 19999
"\uF0FE\u0000\u0000\u0000\u0000\u9BAC\uD7CF\uEBEA\uFDEB\u0000" + // 20000 - 20009
"\uA5D7\uA5D8\u0000\u0000\u0000\u0000\u0000\u0000\uE3A5\u0000" + // 20010 - 20019
"\u0000\uE7D5\uF5BF\uCFA2\uCDAF\uCFA3\u0000\u0000\uCDB0\uF1FE" + // 20020 - 20029
"\uD0A3\uE1AF\uF8A3\u0000\uCAA6\uDEF1\u0000\u0000\u0000\uF0DF" + // 20030 - 20039
"\uF8C4\u0000\u0000\uD5DC\uF3C4\uCBD7\u0000\u0000\u0000\u0000" + // 20040 - 20049
"\uA8F7\uA8F8\u0000\u0000\u0000\u9AAB\u0000\u0000\u0000\u0000" + // 20050 - 20059
"\u0000\uF0A1\u0000\uDEAA\u0000\uD0ED\u0000\u0000\u0000\u0000" + // 20060 - 20069
"\u0000\uE5F7\u0000\uA5D0\uA5D1\u0000\uA5D2\uA5D3\uA5D4\uA5D5" + // 20070 - 20079
"\uA5D6\uD1C0\u0000\u0000\uE8C5\u0000\uE4B8\u0000\uE1E8\uCDAA" + // 20080 - 20089
"\u0000\uE3F2\u0000\uFBF7\u0000\uF7D0\u0000\uEEF0\u0000\u0000" + // 20090 - 20099
"\u0000\uCCC2\u0000\u0000\u0000\uEAD4\u0000\u0000\u0000\u0000" + // 20100 - 20109
"\uA0EB\u0000\u0000\u0000\uDFA7\u0000\uDFE7\uE1C1\u0000\uA5C8" + // 20110 - 20119
"\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uE5EB\u0000\uEFF4" + // 20120 - 20129
"\uDDB5\u0000\u0000\u0000\u0000\uD0F0\u0000\u0000\u0000\u0000" + // 20130 - 20139
"\uC2AB\uC2AC\u0000\uC2AD\uF5BA\u0000\u0000\u0000\u0000\u0000" + // 20140 - 20149
"\u0000\u0000\uD9DF\uCEBA\u0000\u0000\u0000\u0000\u0000\u0000" + // 20150 - 20159
"\u0000\uE2B4\uD7AE\u0000\u0000\uE0E1\u0000\u0000\u0000\u0000" + // 20160 - 20169
"\uFAC6\u0000\u0000\u0000\u0000\uA0B9\u0000\u0000\u0000\uDEFB" + // 20170 - 20179
"\uD0BB\uD5B7\uEEF1\u0000\u0000\uCADB\u0000\u0000\u0000\u0000" + // 20180 - 20189
"\u0000\uFCD7\uEADC\uDBD2\u0000\u0000\u0000\u0000\u0000\u0000" + // 20190 - 20199
"\uF4A8\u0000\uDCF8\u0000\uEEEF\uD5D7\uEAE4\uF8A2\uCDEB\uD7BF" + // 20200 - 20209
"\uFBB1\u0000\uA2A8\uA2AB\uA2AA\uA2AD\uA2A6\uA2A9\u0000\u0000" + // 20210 - 20219
"\uDDE4\uF0EF\uF6F1\uFAF0\u0000\u0000\uD1F5\uCAE8\u0000\uF8E6" + // 20220 - 20229
"\uDCCE\u0000\u0000\u0000\u0000\uDECB\uF6B8\u0000\u0000\u0000" + // 20230 - 20239
"\u9DE0\u0000\u0000\u0000\uE5A7\uD5D2\uD5A3\u0000\u0000\u0000" + // 20240 - 20249
"\u0000\uF0B2\u0000\u0000\uDEE8\u0000\u0000\u0000\u0000\u0000" + // 20250 - 20259
"\u0000\uA0DB\u0000\u0000\uD7B8\u0000\u0000\u0000\u0000\u0000" + // 20260 - 20269
"\u0000\u9AD4\u9CE0\u0000\uE0BB\uCEC3\u0000\uD0BA\uF7BA\uD8F3" + // 20270 - 20279
"\uF7CD\u0000\uA2B0\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20280 - 20289
"\u0000\uA2A7\uDEA5\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20290 - 20299
"\uE6DA\uCAB7\u0000\u0000\uD3E7\u0000\uF8E5\u0000\u0000\uCEB7" + // 20300 - 20309
"\u0000\u0000\u0000\u0000\u0000\u0000\uC2C6\u0000\u0000\uE0C4" + // 20310 - 20319
"\u0000\uCFB9\u0000\uD5CA\uD7E2\uE2AF\uE1F1\u0000\uD2A4\u0000" + // 20320 - 20329
"\u0000\u0000\u0000\uF5FB\uF8FA\u0000\u0000\uDFB9\u0000\u0000" + // 20330 - 20339
"\u0000\u0000\uF9E1\u0000\u0000\u0000\u0000\uC1ED\u0000\u0000" + // 20340 - 20349
"\u0000\uD8F1\u0000\uD4CF\u0000\u0000\u0000\uE6B9\u0000\u0000" + // 20350 - 20359
"\u0000\u0000\uC7B4\u0000\u0000\u0000\uD7AA\u0000\u0000\u0000" + // 20360 - 20369
"\u0000\uC7C1\uA0EE\u0000\u0000\uE1AB\u0000\u0000\u0000\u0000" + // 20370 - 20379
"\u0000\u0000\uBCD1\u0000\u0000\uE0FB\u0000\u0000\u0000\uEFEA" + // 20380 - 20389
"\uFADE\u0000\uE8B4\uEBC3\u0000\uEAAA\uFAFC\uF5F6\uF0BC\uFDD4" + // 20390 - 20399
"\uFAEC\u0000\u0000\u0000\u0000\u0000\uF1EB\u0000\uEBF0\uF1D6" + // 20400 - 20409
"\u0000\u0000\uE5E2\u0000\uCCCC\u0000\uA9A8\uA8A9\uA9A9\u0000" + // 20410 - 20419
"\u0000\u0000\u0000\u0000\uDDBD\u0000\u0000\u0000\uF9C1\u0000" + // 20420 - 20429
"\u0000\u0000\u0000\uC5F0\u0000\u0000\u0000\uFBF2\u0000\uDBF6" + // 20430 - 20439
"\u0000\uDEDF\uDAF6\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 20440 - 20449
"\uF5B8\u9CAF\u0000\u0000\u0000\uF6DE\u0000\u0000\u9BB6\uE8C4" + // 20450 - 20459
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9BC2\uE3A4\u0000" + // 20460 - 20469
"\u0000\u0000\u0000\u0000\u0000\u0000\uCFEF\u9BD7\u0000\u0000" + // 20470 - 20479
"\u0000\u0000\u0000\uF9C4\u0000\uDFA1\uDDE1\u0000\u0000\u0000" + // 20480 - 20489
"\u0000\u0000\u0000\uFCA1\uEFEE\uDCD8\uF2BB\u0000\uDEA4\u0000" + // 20490 - 20499
"\uDACC\u0000\u0000\u0000\uF3FC\u0000\u0000\uEEA2\u0000\u0000" + // 20500 - 20509
"\uE1C5\u0000\u0000\u0000\u0000\u0000\u0000\uB9A3\u0000\uB9A4" + // 20510 - 20519
"\uE8A5\u9BDD\u0000\u0000\u0000\u0000\u0000\u0000\uF4A2\u0000" + // 20520 - 20529
"\uF1D7\u0000\uCED3\u0000\u0000\u0000\u0000\uDCF7\u0000\u0000" + // 20530 - 20539
"\uEED5\u0000\u0000\u0000\u0000\uF9F4\u0000\uA9A7\u0000\u0000" + // 20540 - 20549
"\u0000\u0000\u0000\u0000\uA8A8\uF5B9\u0000\uDCF0\uE3F1\u0000" + // 20550 - 20559
"\u0000\u0000\u0000\uCFD6\u0000\uD7F0\u0000\uEBE1\uF9CB\u0000" + // 20560 - 20569
"\u0000\u0000\uCBF3\uF4A5\u0000\u0000\uF3D7\u0000\u0000\u0000" + // 20570 - 20579
"\uDCBD\u0000\uCCE5\uFDB9\u0000\u0000\u0000\u0000\u0000\u0000" + // 20580 - 20589
"\u0000\uD0B4\uFDBC\uDFB1\uE3EF\u0000\u0000\u0000\u0000\uE0A3" + // 20590 - 20599
"\u9CDF\u0000\u0000\u0000\uDADD\u0000\u0000\uDAB9\uCFF2\uF7B9" + // 20600 - 20609
"\uD9F3\u0000\u0000\uE1CB\u0000\u0000\uCFE2\uCDF6\u0000\u0000" + // 20610 - 20619
"\uEFF0\u0000\uF4BE\u9CE1\uFBB6\u0000\u0000\u0000\u0000\u0000" + // 20620 - 20629
"\u0000\uA1AD\u0000\u0000\u0000\uE9D0\u0000\u0000\u0000\u0000" + // 20630 - 20639
"\u0000\u9BE3\u0000\u0000\u0000\uD5B4\u0000\u0000\u0000\u0000" + // 20640 - 20649
"\uC6D9\uC6DA\u0000\u0000\uE8B1\u0000\uFCAE\u0000\u0000\u0000" + // 20650 - 20659
"\u0000\uA0FD\u0000\u0000\u0000\uA0B7\uC1E1\u0000\u0000\u0000" + // 20660 - 20669
"\uA0CC\uC3C6\uA0CD\u0000\u0000\uFADD\u0000\u0000\u0000\u0000" + // 20670 - 20679
"\u0000\u0000\uFCBF\u0000\u0000\uE2AB\uF3E8\u0000\u0000\u0000" + // 20680 - 20689
"\u0000\u0000\uB4BC\u0000\u0000\u0000\u9BDE\u0000\uD4E9\u0000" + // 20690 - 20699
"\u0000\uE3FE\uD1AA\uE8AA\u0000\uEAB6\uF9FA\uE6CC\uDFB8\u0000" + // 20700 - 20709
"\uEAA5\u0000\u0000\u0000\uD7AD\u9DBB\uE1E0\u0000\uD9AC\u0000" + // 20710 - 20719
"\uF5EB\u0000\uE0B6\u0000\uF7DE\u0000\u0000\u0000\u0000\u0000" + // 20720 - 20729
"\u0000\u0000\uA9FA\uF1FA\u9AB2\u0000\uE5B6\uF3EF\u0000\u0000" + // 20730 - 20739
"\uFBDA\uE2BD\u0000\u0000\u0000\uE3C8\u0000\u0000\u0000\uD6F6" + // 20740 - 20749
"\u0000\u0000\u0000\uEACA\u0000\u9CAA\u0000\u0000\u0000\uF6B0" + // 20750 - 20759
"\uEFCF\uE9CF\u0000\uA9AA\u0000\u0000\u0000\u0000\u0000\uA9AD" + // 20760 - 20769
"\u0000\uC8E4\u0000\u0000\u0000\u0000\u0000\u0000\uF1D1\u0000" + // 20770 - 20779
"\u0000\u0000\uF0BE\uD2BD\uCCA4\u0000\u0000\u0000\u0000\uC1AA" + // 20780 - 20789
"\uC1AB\u0000\uC1AC\uEBAD\u0000\u0000\u0000\u9CBE\uD5AA\u0000" + // 20790 - 20799
"\u0000\uCEA1\uF5A9\u0000\u0000\uDDF9\u0000\u0000\uE2AD\u0000" + // 20800 - 20809
"\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000\uF2D1\u9CB4" + // 20810 - 20819
"\u0000\u0000\u0000\uE9C1\u0000\uCCA7\uEAC9\u0000\u0000\u0000" + // 20820 - 20829
"\u0000\u0000\uF8B6\uCDCA\uD7D4\uDEA3\u0000\uE4E0\u0000\u0000" + // 20830 - 20839
"\u0000\uE7EC\uEEEE\u9AC6\uF3F0\u0000\uDFBF\uE3EE\u0000\u0000" + // 20840 - 20849
"\u0000\u0000\u0000\uE8D4\u0000\uCBDA\u0000\uE7D2\uD7C3\uF6F0" + // 20850 - 20859
"\uE8DE\u0000\u0000\uF2EC\u0000\u0000\uFAEE\u0000\u0000\u0000" + // 20860 - 20869
"\uE4FD\u0000\u0000\uE3EC\u0000\uA9A3\u0000\u0000\u0000\u0000" + // 20870 - 20879
"\u0000\u0000\uA1C0\uE2F0\u0000\u0000\u0000\u0000\u0000\u0000" + // 20880 - 20889
"\uFABB\uE9C7\uE6AA\u0000\u0000\u0000\u0000\u0000\u0000\uA9CD" + // 20890 - 20899
"\uA9CE\uA9CF\uA9D0\uEDBC\u0000\u0000\uD8D4\u0000\u0000\u0000" + // 20900 - 20909
"\uDCDA\uE9FD\uD0CA\u0000\uF5D6\uD9C5\uE4B4\u0000\uEDA7\uF5AC" + // 20910 - 20919
"\u0000\u0000\u0000\u0000\u0000\uE4F5\u0000\uDCE4\u0000\uE5EF" + // 20920 - 20929
"\u0000\u0000\u0000\u0000\u0000\uDEF8\uF8E9\uE3DE\u0000\uA8AA" + // 20930 - 20939
"\u0000\u0000\u0000\u0000\u0000\uA8AD\uA9AC\u9CAD\uF3ED\u0000" + // 20940 - 20949
"\u0000\u0000\u0000\u0000\u0000\uA9F9\u0000\u0000\u0000\uDCB1" + // 20950 - 20959
"\u0000\u0000\u0000\uD5D6\u0000\uFAEF\uE3E1\u0000\u0000\u0000" + // 20960 - 20969
"\u0000\u0000\u0000\uF5A6\u0000\u0000\uE8C6\u0000\u0000\u0000" + // 20970 - 20979
"\u0000\u0000\u0000\uD5B5\u0000\u0000\uCAAA\uE1F9\u0000\uEAB1" + // 20980 - 20989
"\u0000\u0000\u0000\uEAD6\uF1B0\u0000\u0000\u0000\uE2EE\u0000" + // 20990 - 20999
"\u0000\u0000\u0000\uE5E7\u0000\u0000\u0000\uCAA3\uDDB2\u0000" + // 21000 - 21009
"\u0000\u0000\u0000\uE6A9\u0000\uEFF3\uFDE9\u0000\uCFC1\u0000" + // 21010 - 21019
"\uE0DF\uDEEC\u0000\u0000\uEDB8\u0000\u0000\u0000\uDBB6\u0000" + // 21020 - 21029
"\u0000\uE6F0\u9AB6\u0000\u0000\u0000\u0000\u0000\uB4FD\uB4FE" + // 21030 - 21039
"\u0000\uB5A1\uD7FC\u0000\uEDBB\u0000\u0000\uF6AB\u0000\u0000" + // 21040 - 21049
"\uE0B5\u0000\u0000\u0000\u0000\u0000\u0000\uDEFA\u0000\uD7F8" + // 21050 - 21059
"\uD5C4\u9CD4\u0000\u0000\u0000\u0000\u0000\uEDF4\uD4EB\u0000" + // 21060 - 21069
"\uDEA2\u0000\u0000\u0000\uE5E6\u0000\uF3A7\u0000\u0000\uCDEA" + // 21070 - 21079
"\u0000\uEBEE\u0000\u0000\uD8B4\u0000\u0000\u0000\u0000\u0000" + // 21080 - 21089
"\u0000\uE9E4\u0000\u0000\uD7A5\u0000\u0000\u0000\u0000\uF7E8" + // 21090 - 21099
"\u0000\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000\uA1BF\uF8B3" + // 21100 - 21109
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEDB6\uCEEF\u0000" + // 21110 - 21119
"\u0000\uF2F3\u0000\u0000\u0000\u0000\uF4EF\u0000\u0000\u0000" + // 21120 - 21129
"\uF6CE\uCCAE\u0000\uDADB\u0000\u0000\u0000\u0000\uCDC7\uDBB9" + // 21130 - 21139
"\u0000\u9AF4\u0000\u0000\u0000\u0000\u0000\uB6F7\uB6F8\u0000" + // 21140 - 21149
"\uB6F9\uEDF3\uDCD9\uE0CD\u0000\u0000\u0000\u0000\uF7DA\uE9A6" + // 21150 - 21159
"\uCBF2\u0000\u0000\u0000\u0000\u0000\u0000\uC7A8\u0000\uC7A9" + // 21160 - 21169
"\uDDAF\uDDB0\u0000\u9BEA\uCBB7\uE8D3\u0000\u0000\uDDF8\u0000" + // 21170 - 21179
"\u9AE4\u0000\u0000\u0000\uE8CF\uE8D2\u0000\uCAC5\uCCEB\u0000" + // 21180 - 21189
"\u0000\u0000\u0000\uE5A6\u0000\u0000\u0000\u0000\uC0EB\uC0EC" + // 21190 - 21199
"\u0000\uC0ED\uD8E6\u9BBD\uF4B1\u0000\u0000\u0000\u0000\u0000" + // 21200 - 21209
"\uB6F3\uB6F4\u0000\u0000\uD1B3\u0000\u0000\u0000\u0000\u0000" + // 21210 - 21219
"\uEFED\uFDD8\u0000\u0000\u0000\u0000\uD2F6\u0000\u0000\uCFBB" + // 21220 - 21229
"\u0000\u0000\u0000\uD3AD\uE8E1\uCEEC\u9DBC\u0000\u9AE8\uF9FD" + // 21230 - 21239
"\u0000\uCADC\u0000\u0000\uE2B2\u0000\uD4BD\u0000\u9BE8\uD9CE" + // 21240 - 21249
"\u0000\uF6B6\u0000\uCEC2\uD6C7\u0000\uE3B4\u0000\uF1AD\uF5C6" + // 21250 - 21259
"\u0000\uE1A2\uE9C6\u0000\u0000\u0000\uF2C5\uDEBD\u0000\uF6A9" + // 21260 - 21269
"\u0000\u0000\u0000\uDAA4\u0000\uDBD8\u0000\u0000\uCAA2\u0000" + // 21270 - 21279
"\u0000\uD1CD\u0000\uA2AC\uA9F6\uA8AC\u0000\uA8F9\uA8F6\uA8FA" + // 21280 - 21289
"\uA2AF\uE9FC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9EE" + // 21290 - 21299
"\uD2B1\u0000\u0000\u0000\u9CF7\uCCE9\u0000\uD9C4\uE9A5\uD6D5" + // 21300 - 21309
"\u0000\uCDC5\u9BBF\uEDBA\uD1BD\u0000\uF1A5\uE9CE\u0000\u0000" + // 21310 - 21319
"\u0000\uF9BC\u0000\u0000\uDECF\u0000\u0000\u0000\u0000\u0000" + // 21320 - 21329
"\u0000\uF8CC\u0000\uEAD9\uF9D7\u0000\u0000\u9CDB\u0000\u0000" + // 21330 - 21339
"\u0000\u0000\uEEEC\u0000\u0000\uD3A3\uEEB7\uF6A8\uDDFD\u0000" + // 21340 - 21349
"\u0000\u0000\u0000\u9DAA\u0000\uF8CF\u0000\u0000\u0000\u0000" + // 21350 - 21359
"\uEAC8\uEEB8\uF1AC\uD7E8\uCBD8\u0000\u0000\u0000\uE9E2\u0000" + // 21360 - 21369
"\u0000\uD4FD\u0000\u0000\uE0C8\u0000\u0000\u0000\u9FE0\uBDBF" + // 21370 - 21379
"\uBDC0\u0000\uBDC1\uE0CC\uEBF9\u0000\u0000\u0000\u0000\u0000" + // 21380 - 21389
"\u9AAE\u9CCF\u0000\uD6BE\u0000\u0000\u0000\uE2BA\u0000\uE3DF" + // 21390 - 21399
"\u0000\uDEC3\u0000\uDEC4\uCAA1\u0000\u0000\uECF5\uE8EE\u0000" + // 21400 - 21409
"\uCBA9\uF1AF\u0000\u0000\uEACE\u0000\uE8DF\u0000\u0000\u0000" + // 21410 - 21419
"\u0000\uC2D5\u0000\u0000\u0000\uE7C5\u9DA2\u0000\uE0E9\u0000" + // 21420 - 21429
"\uA1C6\uA1BE\uA9F7\uA9F8\uA2A5\u0000\uA2D2\u0000\uC8D5\u0000" + // 21430 - 21439
"\u0000\u0000\u0000\u0000\u0000\uFCF5\u0000\u0000\u0000\uE0E6" + // 21440 - 21449
"\u0000\u0000\u0000\u0000\u0000\u0000\uF4D8\uD6B3\uDDAD\uD1BC" + // 21450 - 21459
"\u0000\uE5CF\u0000\uCBB6\u0000\uDAB8\u0000\uDBE9\uFDCC\u0000" + // 21460 - 21469
"\u0000\u0000\u0000\u0000\u0000\uD0A9\u0000\u0000\uEDAB\u0000" + // 21470 - 21479
"\uE3B7\u0000\u0000\u0000\u0000\uC2CD\uC2CE\u0000\uC2CF\uDBEB" + // 21480 - 21489
"\u0000\uDFFE\u0000\u0000\uD8E1\u0000\uF7F3\u9BDB\u0000\u0000" + // 21490 - 21499
"\u0000\u0000\u0000\u0000\u0000\uEBC9\uCEB8\u0000\u0000\u0000" + // 21500 - 21509
"\uD8D2\uF9D6\u0000\u0000\uE1C4\u0000\u0000\u0000\u0000\u0000" + // 21510 - 21519
"\uE8B0\uF9FC\u0000\uCCC0\u0000\u0000\u0000\u0000\u0000\uB6D8" + // 21520 - 21529
"\u0000\u0000\u0000\uA2C6\u0000\u0000\u0000\u0000\u0000\uF0B9" + // 21530 - 21539
"\uE4FE\uE4C9\u0000\uE4E6\u0000\uF1EA\u0000\u0000\u0000\uCBEC" + // 21540 - 21549
"\uCBC0\uF3C5\u0000\u0000\uD4C0\uD5BF\u0000\u0000\u0000\uA1D2" + // 21550 - 21559
"\u0000\u0000\u0000\u0000\u0000\u9DF0\u9CC6\u0000\u0000\uF8DE" + // 21560 - 21569
"\uF9AA\uCAF7\u0000\uEDB7\u0000\u0000\uEFE8\u0000\u0000\uE1BF" + // 21570 - 21579
"\u0000\u0000\u0000\u9CED\uD0A1\u0000\u0000\u0000\uCEF7\u0000" + // 21580 - 21589
"\u0000\uE0D8\u0000\uDCF5\uE0B9\u0000\u0000\u0000\uD4CE\u9CF4" + // 21590 - 21599
"\uF4B5\uF0DB\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7BD" + // 21600 - 21609
"\uF8BA\uE8D0\u0000\u0000\uD8FB\u0000\u0000\uEAD5\uF4F3\uDAC9" + // 21610 - 21619
"\u0000\uE6DE\u0000\u0000\u9CBB\u0000\uE4A7\uECD2\u0000\u0000" + // 21620 - 21629
"\uF6B1\u0000\u9BDA\uCEFB\uF9E5\u0000\uE0CA\u0000\u0000\uF2FD" + // 21630 - 21639
"\uD3B0\u0000\uFAFB\u0000\u0000\uFABD\uCCC8\uEFCD\uD5D5\u0000" + // 21640 - 21649
"\uA1A7\u0000\uA8A3\u0000\u0081\u0000\u0000\u0000\uD1A8\u0000" + // 21650 - 21659
"\u0000\u0000\u0000\uC5E1\u0000\u0000\u0000\uD8C8\u0000\u0000" + // 21660 - 21669
"\uEEC1\u0000\uC8CB\u0000\u0000\u0000\u0000\u0000\u0000\uFBE0" + // 21670 - 21679
"\uF2E5\u0000\u0000\uC6FE\u0000\u0000\u0000\u0000\u0000\u0000" + // 21680 - 21689
"\uEFFB\u0000\u0000\uFAF9\uD7C6\u0000\uD1BB\uF7AA\u0000\uEDCA" + // 21690 - 21699
"\uD7D3\uD8FA\uD6E0\u0000\uF1C6\u0000\u0000\u0000\u0000\u0000" + // 21700 - 21709
"\uB6CD\u0000\u0000\u0000\uA1D6\u0000\u0000\u0000\u0000\u0000" + // 21710 - 21719
"\uFCA8\u0000\u0000\uECE6\uEBD6\u0000\uECDF\u0000\u0000\u0000" + // 21720 - 21729
"\uDFFC\u0000\uD0E6\u0000\u0000\uDEC1\u0000\u0000\uE4AC\u0000" + // 21730 - 21739
"\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F\uCCBF\u0000" + // 21740 - 21749
"\u0000\u0000\u0000\u0000\u0000\u0000\uFDC8\uE1AC\u0000\u0000" + // 21750 - 21759
"\uE3EB\u0000\uEEC7\u0000\u0000\uE2DB\u0000\u0000\u0000\uDFDE" + // 21760 - 21769
"\u0000\uE0C7\uE1C8\uDBB7\uDFE3\u0000\u0000\u0000\u0000\u0000" + // 21770 - 21779
"\u9EF6\u0000\u0000\u0000\uA2A1\u0000\uA2A2\u0000\u0000\u0000" + // 21780 - 21789
"\uD7FA\u0000\u0000\u0000\uFBC8\uCEDC\uF2B5\uD0E4\uDDD1\u0000" + // 21790 - 21799
"\u0000\u0000\u0000\uA8FB\uA8FC\uA8FD\uA8FE\u0000\uEAA7\uE9F6" + // 21800 - 21809
"\uFBBB\u0000\uE7E9\uEFCC\u0000\u0000\uD9D8\u0000\u0000\u0000" + // 21810 - 21819
"\u0000\u0000\u0000\uD8D5\u0000\u0000\uD8D9\u0000\uF4A3\u0000" + // 21820 - 21829
"\u0000\uF4DD\u0000\u0070\u0071\u0072\u0073\u0074\u0075\u0076" + // 21830 - 21839
"\u0077\uD2EF\u0000\u0000\u0000\uE2ED\u0000\u0000\uDEE9\uFCBC" + // 21840 - 21849
"\u0000\uDAA2\uDAA3\u0000\uD2A1\u0000\u0000\uF2D4\u0000\uD1B0" + // 21850 - 21859
"\u0000\uCCE0\u0000\uDBFD\uD1BA\u0000\uF1C4\u0000\uE5B3\uFBF5" + // 21860 - 21869
"\uE9E1\uFDE0\uCBB3\u0000\u0000\u0000\u0000\u0000\u0000\uD5DD" + // 21870 - 21879
"\uEFC4\u0000\u0000\u0000\u0000\u0000\u0000\uE1D8\uD6EB\u0000" + // 21880 - 21889
"\u0000\u0000\uF4D9\u9CCE\u0000\u0000\uD2C5\uFBD1\uE7C0\uEBA5" + // 21890 - 21899
"\u0000\uDFFA\uE3A2\u9DC6\u0000\u0000\u0000\u0000\u0000\u0000" + // 21900 - 21909
"\uF0EA\uE1C6\u0000\u0000\u0000\uD4BF\u0000\u9BE9\u0000\uE5F8" + // 21910 - 21919
"\u0000\u0000\uDEC0\uECA3\u0000\uE9CD\u0000\u0068\u0069\u006A" + // 21920 - 21929
"\u006B\u006C\u006D\u006E\u006F\uEFBD\uFCD6\u0000\u0000\uDBF4" + // 21930 - 21939
"\u0000\uEFAA\uF8B9\uEEC6\u0000\u0000\u0000\u0000\u0000\u0000" + // 21940 - 21949
"\u0000\uF4F2\uD0B5\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 21950 - 21959
"\uE9C0\uCECC\uF5E8\uF7D5\u0000\uD3CD\u0000\uF3FE\u0000\uE3AB" + // 21960 - 21969
"\uEBE0\u0000\u0000\u0000\uCEFA\uCBF7\uE5A5\uD8A2\u0000\u0000" + // 21970 - 21979
"\u0000\u0000\u9BF6\uDDAC\u0000\uFCAF\uD3A1\u0000\uF1AB\u0000" + // 21980 - 21989
"\u0000\u0000\u0000\uC0B8\uC0B9\u0000\u0000\uE3F7\u0000\u0000" + // 21990 - 21999
"\u0000\u0000\u0000\uECA8\u9AD2\u0000\u9DB5\u0000\u0000\u0000" + // 22000 - 22009
"\u0000\uFBEE\uEDF1\u0000\u0000\uF1E2\u0000\uD4DB\u0000\u0000" + // 22010 - 22019
"\uFBA8\uD0A8\u0000\u0000\uDAEC\u0000\u0000\uE7B8\u0000\u0000" + // 22020 - 22029
"\u0000\u0000\u0000\u0000\u9AC1\u9BFB\u0000\u9BD8\u0000\uCDFA" + // 22030 - 22039
"\u0000\u0000\u0000\u0000\u0000\uF8FD\u0000\u0000\uF8FC\u9DB4" + // 22040 - 22049
"\u0000\uEFBC\uD8A1\u0000\u0000\u0000\u0000\uC8DE\uC8DF\u0000" + // 22050 - 22059
"\u0000\uCDF5\u0000\u0000\u0000\uFDB0\uD5A8\u0000\uCEF8\uDCB0" + // 22060 - 22069
"\u0000\u0000\u0000\u0000\uE3AA\u0000\u0060\u0061\u0062\u0063" + // 22070 - 22079
"\u0064\u0065\u0066\u0067\uCFD7\u0000\u0000\u0000\u0000\u0000" + // 22080 - 22089
"\u0000\uCFDF\uE9A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000" + // 22090 - 22099
"\uDFB6\uE5CD\u0000\u0000\u0000\uFAEB\u0000\uCFBC\u0000\uEDDB" + // 22100 - 22109
"\uDFB2\uDFBE\uF9BB\u0000\uDCF4\u0000\u0000\uF4B8\uF7BC\uDCFD" + // 22110 - 22119
"\u0000\uE8EC\uE4E7\u0000\u0058\u0059\u005A\u005B\\\u005D" + // 22120 - 22129 // Modified to map U-005C to 0x5C
"\u005E\u005F\uCDDA\u0000\u0000\u0000\u0000\u0000\uD9CF\u0000" + // 22130 - 22139
"\uECE9\uEFCB\u0000\uF6D2\u0000\u0000\u0000\uD8B2\uF0D6\u0000" + // 22140 - 22149
"\u0000\u0000\u0000\u0000\u0000\u0000\uE4F3\uCAD9\u0000\u0000" + // 22150 - 22159
"\uEFEF\u0000\uF5AA\u0000\u0000\uE8CC\u0000\u0000\u0000\uDEB7" + // 22160 - 22169
"\u0000\u0000\uCBC9\u0000\u9BAF\uE6D1\uF0CC\u0000\u0000\uDAC5" + // 22170 - 22179
"\u0000\uD8EC\u0000\u0000\u0000\u0000\uC5DB\uC5DC\u0000\uC5DD" + // 22180 - 22189
"\uFDFC\u0000\u0000\u0000\u0000\uE1AA\u0000\u0000\uE8AC\u0000" + // 22190 - 22199
"\uE8DD\u0000\u0000\uEFE9\u0000\uA2E4\u0000\u0000\uA7E4\uA7EE" + // 22200 - 22209
"\uA7E9\u0000\u0000\uF9C9\u0000\uE4E2\u0000\uFBBD\u0000\u0000" + // 22210 - 22219
"\uECEC\uFBBE\uDFEB\u0000\uE1F8\u0000\u0000\uE2D4\uD2FD\u0000" + // 22220 - 22229
"\uE5A8\u0000\u0000\u0000\u9DCF\u0000\u0000\u0000\u0000\uA1A4" + // 22230 - 22239
"\u0000\u0000\u0000\u0000\uC0AB\uC0AC\u0000\uC0AD\uDDFA\u0000" + // 22240 - 22249
"\u0000\u0000\u0000\u0000\u0000\uF0D5\uE2B3\uDEE7\u0000\u0000" + // 22250 - 22259
"\u0000\u0000\u0000\u0000\uB7D8\u0000\u0000\uEEC3\u0000\u0000" + // 22260 - 22269
"\u0000\u0000\u0000\u0000\uCEF6\u0000\uFAD0\uF8F9\u0000\u0000" + // 22270 - 22279
"\u0000\u0000\uF0AE\u0000\u0000\u9CA8\u0000\uFDB8\uE3E8\u0000" + // 22280 - 22289
"\uD4A7\uE8FC\uDEE6\u0000\u0000\u0000\u0000\uDFD4\u0000\u0000" + // 22290 - 22299
"\uE7A7\u0000\uE6D7\u0000\u0000\u0000\u0000\uC6CA\uC6CB\u0000" + // 22300 - 22309
"\uC6CC\uE9DE\u0000\u0000\u0000\u0000\u0000\uF0D3\uF2B4\uD1B7" + // 22310 - 22319
"\uF2B3\u0000\u0000\u0000\u0000\u0000\u0000\uB0EB\u0000\uB0EC" + // 22320 - 22329
"\uDEE5\uD1B5\u0000\u0000\u0000\u0000\u0000\uD1B6\uD8A8\u0000" + // 22330 - 22339
"\u0000\u0000\uCCE4\u0000\u0000\uD1B4\uDAF1\u0000\u0000\u0000" + // 22340 - 22349
"\u0000\u0000\u0000\u0000\uE6A2\uCAF9\u0000\u0000\uD4DA\u0000" + // 22350 - 22359
"\u0000\u0000\u0000\uC7F0\uC7F1\u0000\uC7F2\u9CDA\u0000\u0000" + // 22360 - 22369
"\uF4E2\u0000\u0000\u0000\u0000\uA0F7\u0000\u0000\u0000\u9FF1" + // 22370 - 22379
"\uBEAD\u0000\u0000\u0000\u9FF2\u9FF3\u0000\u0000\u0000\uBECE" + // 22380 - 22389
"\uBECF\uBED0\u0000\uBED1\uF3B7\u0000\u0000\u0000\u0000\u0000" + // 22390 - 22399
"\u0000\u0000\uDBFC\uD9C2\u0000\uF0D2\u0000\uE4D1\u0000\u0000" + // 22400 - 22409
"\u0000\u9FE7\u0000\uBDE0\u0000\u0000\uE9FB\uEAA8\u0000\u0000" + // 22410 - 22419
"\u0000\u0000\uFDB7\uD8F9\u0000\u0000\u0000\u0000\u9CF5\u0000" + // 22420 - 22429
"\u0000\uE6D5\u0000\u0000\uE9F2\u0000\uDFB0\u0000\uA7EA\u0000" + // 22430 - 22439
"\u0000\uA7EB\u0000\u0000\uA7DF\u0000\u0050\u0051\u0052\u0053" + // 22440 - 22449
"\u0054\u0055\u0056\u0057\uF7AF\uDAB6\u0000\uCAD7\u0000\u0000" + // 22450 - 22459
"\u0000\u0000\uC7CB\uC7CC\u0000\uC7CD\uDFD3\u0000\u0000\u0000" + // 22460 - 22469
"\uDAF0\u0000\uE2EA\u0000\uA7BC\uA7ED\uA7B5\u0000\u0000\u0000" + // 22470 - 22479
"\u0000\uA7B9\uE7C3\u0000\uECCC\u0000\u0000\u0000\u0000\u0000" + // 22480 - 22489
"\uB5E5\uB5E6\u0000\u0000\uD9ED\u0000\u0000\u0000\u0000\uF5A5" + // 22490 - 22499
"\u0000\uA7DA\uA7DB\uA2E3\uA7EC\uA7A6\uA7E0\uA7EF\uA2E1\uCDC1" + // 22500 - 22509
"\u0000\u0000\uFBD3\u0000\u0000\u0000\u0000\uC7C7\uC7C8\u0000" + // 22510 - 22519
"\u0000\uDBCC\uDDCD\u0000\u0000\u0000\uD4C8\u0000\uA7C7\uA7C8" + // 22520 - 22529
"\uA7CE\uA7CF\uA7D0\uA7D1\uA7D2\uA7D3\uCDA4\u0000\u0000\uD4F4" + // 22530 - 22539
"\uDBA1\uDBDC\uDBDD\u0000\uA7BF\uA7C0\uA7C1\uA7C2\uA7C3\uA7C4" + // 22540 - 22549
"\uA7C5\uA7C6\uE8B9\u0000\uEFA6\u0000\u0000\u0000\u0000\u0000" + // 22550 - 22559
"\u9EED\uB5DD\u0000\uB5DE\u9AF3\u0000\u0000\u0000\u0000\u0000" + // 22560 - 22569
"\u0000\u0000\uD9A7\uF4B0\uF3EA\uDAEE\u0000\uD7BB\u0000\uE2B1" + // 22570 - 22579
"\u9DF4\uE5DC\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uCDD9" + // 22580 - 22589
"\uD3C3\u0000\uD8A6\u9BB3\uF6C1\u0000\u0000\u0000\uB6D5\uB6D6" + // 22590 - 22599
"\u0000\u0000\u0000\uB8DD\uB8DE\uB8DF\u0000\u0000\uF8B2\u0000" + // 22600 - 22609
"\u0000\u0000\uDCEB\u0000\u0000\uFBC7\uD5C8\u0000\uD7DF\u0000" + // 22610 - 22619
"\uDDA9\u0000\uA7BE\uA7E5\uA7E6\uA7E7\uA7E8\uA7E1\uA7E2\uA7E3" + // 22620 - 22629
"\uD4E3\uCCE2\u0000\uF7D4\u0000\u0000\u0000\u0000\uC7B6\u0000" + // 22630 - 22639
"\u0000\u0000\uB6BB\uB6BC\uB6BD\u0000\u0000\uCCDE\u0000\u0000" + // 22640 - 22649
"\u0000\u0000\u0000\u0000\uDCE0\u0000\u0000\uEFBA\uF1DD\u0000" + // 22650 - 22659
"\uDEB3\u0000\u0000\u0000\u9AE1\u0000\u0000\uF4C7\u0000\uA7B2" + // 22660 - 22669
"\uA7B3\uA7B4\uA7A7\uA7A8\uA7A9\uA7AA\uA7BD\uD3B8\uF2D6\u0000" + // 22670 - 22679
"\u0000\uD4D9\uEEC5\uF2F0\u0000\uA7A5\uA7AB\uA7AC\uA7AD\uA7AE" + // 22680 - 22689
"\uA7AF\uA7B0\uA7B1\uD1B1\u0000\uCBB1\u0000\u0000\u0000\u0000" + // 22690 - 22699
"\uD1B2\uECB6\u0000\u0000\u0000\u0000\uFBFE\uD3D7\u0000\uA7D4" + // 22700 - 22709
"\uA7D5\uA7D6\uA7D7\uA7D8\uA7A1\uA7A2\uA7A3\uEFA4\u0000\uEFEB" + // 22710 - 22719
"\u0000\u0000\u0000\u0000\u0000\uB5D6\u0000\u0000\u0000\u9EDD" + // 22720 - 22729
"\uB4B3\u0000\u0000\u0000\uB4E2\uB4E3\uB4E4\u0000\uB4E5\uEFA3" + // 22730 - 22739
"\uEBA6\uCBA3\uE3E9\u0000\u0000\u0000\uD1FB\uE9C4\u0000\u0000" + // 22740 - 22749
"\uDCCB\uE9C5\u0000\u0000\u0000\uB3D6\uB3D7\uB3D8\u0000\u0000" + // 22750 - 22759
"\uE5C8\u0000\u0000\u0000\uFBA4\uD4B9\u0000\uA7BA\uA7BB\uA7DC" + // 22760 - 22769
"\uA7DD\uA7DE\uA7B6\uA7B7\uA7B8\uCAF6\u0000\uE4A4\uF4D6\u0000" + // 22770 - 22779
"\u0000\u0000\uDFE6\uFBD2\u0000\uF8F8\uF7FB\u0000\u0000\uE8BF" + // 22780 - 22789
"\u0000\uA7C9\uA7CA\uA7CB\uA7CC\uA7CD\u0000\u0000\u0000\uFAAE" + // 22790 - 22799
"\u0000\u0000\u0000\uD6E9\uCEB6\u0000\uF3C0\u0000\uCDFE\u0000" + // 22800 - 22809
"\u0000\u0000\u9EB7\uB1C9\uB1CA\u0000\u0000\uFBCD\u0000\uD5BD" + // 22810 - 22819
"\uF1DF\u0000\u0000\uF6FB\uFCBB\u0000\uE2B0\u0000\u0000\uE6A5" + // 22820 - 22829
"\u0000\u0000\uD3C2\u0000\u0000\u0000\u0000\uD3B6\u0000\uA8C9" + // 22830 - 22839
"\uA8CA\uA8CB\uA8CC\u0000\u0000\u0000\uA2DE\uF3BF\u0000\uF0D1" + // 22840 - 22849
"\u0000\u0000\u0000\u0000\u0000\uB5CD\u0000\u0000\u0000\uB1BF" + // 22850 - 22859
"\uB1C0\uB1C1\u0000\uB1C2\uD7F3\u0000\u0000\u0000\uFCD4\u0000" + // 22860 - 22869
"\uDAD7\uCCDF\uF2D3\uFBA9\uD8A5\u0000\u0000\u0000\u0000\uD5CB"
;
public Encoder(Charset cs) {
super(cs, index2a);
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,221 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class JIS_X_0201_OLD
extends Charset
{
public JIS_X_0201_OLD() {
super("JIS_X0201_OLD", null);
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof JIS_X_0201_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
public static class Decoder extends SingleByteDecoder {
public Decoder(Charset cs) {
super(cs, byteToCharTable);
}
private final static String byteToCharTable =
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0x80 - 0x87
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0x88 - 0x8F
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0x90 - 0x97
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0x98 - 0x9F
"\uFFFD\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67" + // 0xA0 - 0xA7
"\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F" + // 0xA8 - 0xAF
"\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77" + // 0xB0 - 0xB7
"\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F" + // 0xB8 - 0xBF
"\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87" + // 0xC0 - 0xC7
"\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F" + // 0xC8 - 0xCF
"\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97" + // 0xD0 - 0xD7
"\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F" + // 0xD8 - 0xDF
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0xE0 - 0xE7
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0xE8 - 0xEF
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0xF0 - 0xF7
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + // 0xF8 - 0xFF
"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" + // 0x00 - 0x07
"\b\t\n\u000B\f\r\u000E\u000F" + // 0x08 - 0x0F
"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" + // 0x10 - 0x17
"\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" + // 0x18 - 0x1F
"\u0020\u0021\"\u0023\u0024\u0025\u0026\'" + // 0x20 - 0x27
"\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" + // 0x28 - 0x2F
"\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" + // 0x30 - 0x37
"\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" + // 0x38 - 0x3F
"\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" + // 0x40 - 0x47
"\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" + // 0x48 - 0x4F
"\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" + // 0x50 - 0x57
"\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" + // 0x58 - 0x5F
"\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" + // 0x60 - 0x67
"\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" + // 0x68 - 0x6F
"\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" + // 0x70 - 0x77
"\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F"; // 0x78 - 0x7F
}
public static class Encoder extends SingleByteEncoder {
public Encoder(Charset cs) {
super(cs, index1, index2, 0xFF00, 0x00FF, 8);
}
private final static String index2 =
"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" +
"\b\t\n\u000B\f\r\u000E\u000F" +
"\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" +
"\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" +
"\u0020\u0021\"\u0023\u0024\u0025\u0026\'" +
"\u0028\u0029\u002A\u002B\u002C\u002D\u002E\u002F" +
"\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" +
"\u0038\u0039\u003A\u003B\u003C\u003D\u003E\u003F" +
"\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" +
"\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F" +
"\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" +
"\u0058\u0059\u005A\u005B\\\u005D\u005E\u005F" +
"\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" +
"\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F" +
"\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" +
"\u0078\u0079\u007A\u007B\u007C\u007D\u007E\u007F" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\\\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u007E\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8" +
"\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0" +
"\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8" +
"\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0" +
"\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8" +
"\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0" +
"\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8" +
"\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" +
"\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
private final static short index1[] = {
0, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
360, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 519,
};
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,61 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class JIS_X_0208_OLD
extends Charset
{
public JIS_X_0208_OLD() {
super("x-JIS0208_OLD", null);
}
public boolean contains(Charset cs) {
return (cs instanceof JIS_X_0208_OLD);
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new JIS_X_0208_Encoder(this);
}
private static class Decoder extends JIS_X_0208_Decoder {
protected char decodeSingle(int b) {
return DoubleByteDecoder.REPLACE_CHAR;
}
public Decoder(Charset cs) {
super(cs);
}
}
}

View File

@ -1,208 +0,0 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class JIS_X_0208_Solaris_Decoder extends DoubleByteDecoder
{
public JIS_X_0208_Solaris_Decoder(Charset cs) {
super(cs,
index1,
index2,
0x21,
0x7E);
}
private final static String innerIndex0=
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461"+
"\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+
"\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+
"\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165"+
"\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322"+
"\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D"+
"\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E"+
"\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u337B\u301D\u301F\u2116"+
"\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231"+
"\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B"+
"\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235"+
"\u2229\u222A\uFFFD\uFFFD\u7E8A\u891C\u9348\u9288"+
"\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45"+
"\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92"+
"\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E"+
"\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164"+
"\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB"+
"\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E"+
"\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC"+
"\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953"+
"\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F"+
"\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53"+
"\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34"+
"\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5"+
"\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6"+
"\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B"+
"\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12"+
"\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929"+
"\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13"+
"\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73"+
"\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F"+
"\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8"+
"\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88"+
"\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F"+
"\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"+
"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3"+
"\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462"+
"\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B"+
"\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A"+
"\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1"+
"\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7"+
"\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362"+
"\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B"+
"\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37"+
"\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F"+
"\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25"+
"\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE"+
"\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A"+
"\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7"+
"\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5"+
"\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF"+
"\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8"+
"\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF"+
"\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857"+
"\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"+
"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70"+
"\u9D6B\uFA2D\u9E19\u9ED1\uFFFD\uFFFD\u2170\u2171"+
"\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179"+
"\u3052\u00A6\uFF07\uFF02\u2170\u2171\u2172\u2173"+
"\u2174\u2175\u2176\u2177\u2178\u2179\u2160\u2161"+
"\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169"+
"\u3052\u00A6\uFF07\uFF02\u3231\u2116\u2121\u306E"+
"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631"+
"\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00"+
"\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD"+
"\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094"+
"\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215"+
"\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372"+
"\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF"+
"\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10"+
"\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4"+
"\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6"+
"\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8"+
"\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D"+
"\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137"+
"\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE"+
"\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624"+
"\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2"+
"\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0"+
"\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2"+
"\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6"+
"\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"+
"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C"+
"\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007"+
"\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147"+
"\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377"+
"\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426"+
"\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F"+
"\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF"+
"\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A"+
"\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E"+
"\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47"+
"\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448"+
"\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21"+
"\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF"+
"\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76"+
"\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115"+
"\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5"+
"\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259"+
"\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7"+
"\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321"+
"\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357"+
"\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592"+
"\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D"+
"\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927"+
"\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F"+
"\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD";
private static final short index1[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
private final static String index2[] = {
innerIndex0
};
protected char convSingleByte(int b) {
return REPLACE_CHAR;
}
static short[] getIndex1() {
return index1;
}
static String[] getIndex2() {
return index2;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,893 +0,0 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class JIS_X_0212_Decoder extends DoubleByteDecoder
{
public JIS_X_0212_Decoder(Charset cs) {
super(cs,
index1,
index2,
0x21,
0x7E);
}
private final static String innerIndex0=
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u02D8\u02C7\u00B8\u02D9"+
"\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A1"+
"\u00A6\u00BF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u0386\u0388\u0389\u038A"+
"\u03AA\uFFFD\u038C\uFFFD\u038E\u03AB\uFFFD\u038F"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u03AC\u03AD\u03AE\u03AF"+
"\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\u0402\u0403\u0404\u0405\u0406"+
"\u0407\u0408\u0409\u040A\u040B\u040C\u040E\u040F"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\u0452\u0453\u0454\u0455\u0456"+
"\u0457\u0458\u0459\u045A\u045B\u045C\u045E\u045F"+
"\u00C6\u0110\uFFFD\u0126\uFFFD\u0132\uFFFD\u0141"+
"\u013F\uFFFD\u014A\u00D8\u0152\uFFFD\u0166\u00DE"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142"+
"\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00C1\u00C0"+
"\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3"+
"\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8"+
"\u00CB\u00CA\u011A\u0116\u0112\u0118\uFFFD\u011C"+
"\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE"+
"\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139"+
"\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2"+
"\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158"+
"\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA"+
"\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172"+
"\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD"+
"\u0178\u0176\u0179\u017D\u017B\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u00E1\u00E0\u00E4\u00E2"+
"\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109"+
"\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA"+
"\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\uFFFD"+
"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\uFFFD"+
"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C"+
"\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4"+
"\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B"+
"\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC"+
"\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169"+
"\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177"+
"\u017A\u017E\u017C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F"+
"\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35"+
"\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63"+
"\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96"+
"\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB"+
"\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5"+
"\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B"+
"\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31"+
"\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40"+
"\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56"+
"\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77"+
"\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"+
"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93"+
"\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7"+
"\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5"+
"\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2"+
"\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF"+
"\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010"+
"\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022"+
"\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041"+
"\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052"+
"\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066"+
"\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083"+
"\u5084\u5086\u508A\u508E\u508F\u5090\u5092\u5093"+
"\u5094\u5096\u509B\u509C\u509E\u509F\u50A0\u50A1"+
"\u50A2\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0"+
"\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4"+
"\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8"+
"\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106"+
"\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110"+
"\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127"+
"\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135"+
"\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157"+
"\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B"+
"\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA"+
"\u51BC\u51BE\u51BF\u51C2\u51C8\u51CF\u51D1\u51D2"+
"\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2"+
"\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213"+
"\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235"+
"\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C"+
"\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279"+
"\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296"+
"\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7"+
"\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD"+
"\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4"+
"\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA"+
"\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303"+
"\u530A\u530B\u530C\u5311\u5313\u5318\u531B\u531C"+
"\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C"+
"\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342"+
"\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C"+
"\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E"+
"\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB"+
"\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD"+
"\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD"+
"\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A"+
"\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435"+
"\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464"+
"\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"+
"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495"+
"\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA"+
"\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF"+
"\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF"+
"\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508"+
"\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532"+
"\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549"+
"\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E"+
"\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586"+
"\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597"+
"\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6"+
"\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\u55D3\u55D7"+
"\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605"+
"\u5608\u560A\u560D\u560E\u560F\u5610\u5611\u5612"+
"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B"+
"\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646"+
"\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661"+
"\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672"+
"\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699"+
"\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9"+
"\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5"+
"\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9"+
"\u56DC\u56DD\u56DF\u56E1\u56E4\u56E5\u56E6\u56E7"+
"\u56E8\u56F1\u56EB\u56ED\u56F6\u56F7\u5701\u5702"+
"\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D"+
"\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C"+
"\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745"+
"\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768"+
"\u576B\u576D\u576E\u576F\u5770\u5771\u5773\u5774"+
"\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781"+
"\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D"+
"\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC"+
"\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD"+
"\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5"+
"\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808"+
"\u5809\u57E1\u580C\u580D\u581B\u581E\u581F\u5820"+
"\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C"+
"\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867"+
"\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888"+
"\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896"+
"\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2"+
"\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2"+
"\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3"+
"\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641"+
"\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933"+
"\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959"+
"\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D";
private final static String innerIndex1=
"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B"+
"\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7"+
"\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC"+
"\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD"+
"\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1"+
"\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E"+
"\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A"+
"\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50"+
"\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A"+
"\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C"+
"\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2"+
"\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\u5AC4\u5AC6"+
"\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE"+
"\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34"+
"\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41"+
"\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F"+
"\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A"+
"\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9"+
"\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC"+
"\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\u5BD7\u5BD8\u5BD9"+
"\u5BDA\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17"+
"\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E"+
"\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62"+
"\u5C63\u5C67\u5C68\u5C69\u5C6D\u5C70\u5C74\u5C75"+
"\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F"+
"\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA"+
"\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD"+
"\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D"+
"\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34"+
"\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55"+
"\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64"+
"\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81"+
"\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99"+
"\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8"+
"\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9"+
"\u5DE0\u5DE4\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D"+
"\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28"+
"\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56"+
"\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\u5E6B\u5E6C"+
"\u5E6D\u5E6E\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4"+
"\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE"+
"\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4"+
"\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07"+
"\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23"+
"\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36"+
"\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D"+
"\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"+
"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E"+
"\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7"+
"\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4"+
"\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\u5FD1\u5FD2\u5FD3"+
"\u5FD4\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC"+
"\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC"+
"\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A"+
"\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048"+
"\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061"+
"\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A"+
"\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2"+
"\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\u60BB\u60BE"+
"\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF"+
"\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5"+
"\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A"+
"\u610C\u6110\u6111\u6112\u6113\u6114\u6116\u6117"+
"\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131"+
"\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149"+
"\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F"+
"\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193"+
"\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8"+
"\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2"+
"\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1"+
"\u61E2\u61E7\u61E9\u61E5\u61EC\u61ED\u61EF\u6201"+
"\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222"+
"\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243"+
"\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256"+
"\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D"+
"\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6"+
"\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6"+
"\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304"+
"\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329"+
"\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342"+
"\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353"+
"\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371"+
"\u6374\u6375\u6378\u637C\u637D\u637F\u6382\u6384"+
"\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E"+
"\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5"+
"\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0"+
"\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9"+
"\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420"+
"\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435"+
"\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454"+
"\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463"+
"\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F"+
"\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1"+
"\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"+
"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1"+
"\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0"+
"\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509"+
"\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E"+
"\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C"+
"\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F"+
"\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A"+
"\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE"+
"\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE"+
"\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4"+
"\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609"+
"\u660D\u6611\u6612\u6615\u6616\u661D\u661E\u6621"+
"\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C"+
"\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645"+
"\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659"+
"\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C"+
"\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B"+
"\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699"+
"\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1"+
"\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8"+
"\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB"+
"\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719"+
"\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748"+
"\u674C\u6754\u6755\u675D\u6766\u676C\u676E\u6774"+
"\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793"+
"\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5"+
"\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5"+
"\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6"+
"\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D"+
"\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831"+
"\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855"+
"\u6857\u6858\u685B\u686B\u686E\u686F\u6870\u6871"+
"\u6872\u6875\u6879\u687A\u687B\u687C\u6882\u6884"+
"\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3"+
"\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8"+
"\u68CC\u68CF\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC"+
"\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0"+
"\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909"+
"\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933"+
"\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957"+
"\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C"+
"\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D"+
"\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB"+
"\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8"+
"\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1"+
"\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11"+
"\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"+
"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49"+
"\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B"+
"\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83"+
"\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E"+
"\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD"+
"\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4"+
"\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0"+
"\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07"+
"\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24"+
"\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F"+
"\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60"+
"\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\u6B7E\u6B82"+
"\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8"+
"\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD"+
"\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1"+
"\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF"+
"\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12"+
"\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33"+
"\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D"+
"\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D"+
"\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86"+
"\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F"+
"\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0"+
"\u6CD1\u6CD2\u6CD4\u6CD6\u6CDA\u6CDC\u6CE0\u6CE7"+
"\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07"+
"\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27"+
"\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F"+
"\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70"+
"\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97"+
"\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF"+
"\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD"+
"\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4"+
"\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32"+
"\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49"+
"\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C"+
"\u6E5D\u6E5E\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D"+
"\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1"+
"\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8"+
"\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9"+
"\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16"+
"\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30"+
"\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52"+
"\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62"+
"\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B"+
"\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A"+
"\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF"+
"\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA";
private final static String innerIndex2=
"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC"+
"\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020"+
"\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044"+
"\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E"+
"\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E"+
"\u7081\u7085\u7086\u7094\u7095\u7096\u7097\u7098"+
"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA"+
"\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4"+
"\u70FA\u7103\u7104\u7105\u7106\u7107\u710B\u710C"+
"\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131"+
"\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150"+
"\u7152\u7157\u715A\u715C\u715E\u7160\u7168\u7179"+
"\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0"+
"\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0"+
"\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA"+
"\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213"+
"\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234"+
"\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F"+
"\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260"+
"\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278"+
"\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293"+
"\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1"+
"\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5"+
"\u72F3\u72F4\u72FA\u72FB\u72FE\u7302\u7304\u7305"+
"\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E"+
"\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335"+
"\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356"+
"\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369"+
"\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C"+
"\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393"+
"\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2"+
"\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9"+
"\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC"+
"\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3"+
"\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA"+
"\u73FB\u73FD\u73FF\u7400\u7401\u7404\u7407\u740A"+
"\u7411\u741A\u741B\u7424\u7426\u7428\u7429\u742A"+
"\u742B\u742C\u742D\u742E\u742F\u7430\u7431\u7439"+
"\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451"+
"\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B"+
"\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486"+
"\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499"+
"\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8"+
"\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5"+
"\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3"+
"\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA"+
"\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"+
"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529"+
"\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540"+
"\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E"+
"\u755F\u7561\u756F\u7571\u7579\u757A\u757B\u757C"+
"\u757D\u757E\u7581\u7585\u7590\u7592\u7593\u7595"+
"\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0"+
"\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC"+
"\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF"+
"\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608"+
"\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619"+
"\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629"+
"\u762D\u7632\u7633\u7635\u7638\u7639\u763A\u763C"+
"\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B"+
"\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F"+
"\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B"+
"\u769C\u769D\u769F\u76A0\u76A2\u76A3\u76A4\u76A5"+
"\u76A6\u76A7\u76A8\u76AA\u76AD\u76BD\u76C1\u76C5"+
"\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6"+
"\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700"+
"\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719"+
"\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734"+
"\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746"+
"\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C"+
"\u775E\u775F\u7760\u7762\u7764\u7767\u776A\u776C"+
"\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784"+
"\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2"+
"\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3"+
"\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0"+
"\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8"+
"\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D"+
"\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837"+
"\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C"+
"\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E"+
"\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D"+
"\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1"+
"\u78B2\u78B3\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9"+
"\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB"+
"\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900"+
"\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910"+
"\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929"+
"\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944"+
"\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958"+
"\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B"+
"\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995"+
"\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB"+
"\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7"+
"\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"+
"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8"+
"\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11"+
"\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F"+
"\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45"+
"\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D"+
"\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78"+
"\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90"+
"\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5"+
"\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1"+
"\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB"+
"\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29"+
"\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B34"+
"\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60"+
"\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73"+
"\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B"+
"\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5"+
"\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8"+
"\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8"+
"\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC"+
"\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B"+
"\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26"+
"\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A"+
"\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\u7C5A"+
"\u7C5B\u7C5C\u7C5D\u7C5E\u7C61\u7C63\u7C67\u7C69"+
"\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86"+
"\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6"+
"\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8"+
"\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9"+
"\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07"+
"\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D"+
"\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D"+
"\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53"+
"\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A"+
"\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83"+
"\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96"+
"\u7D97\u7D9D\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6"+
"\u7DB7\u7DB9\u7DC2\u7DC3\u7DC4\u7DC5\u7DC6\u7DCC"+
"\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6"+
"\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA"+
"\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20"+
"\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F"+
"\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F"+
"\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78"+
"\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95"+
"\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E"+
"\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B"+
"\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"+
"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F"+
"\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6"+
"\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8"+
"\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC"+
"\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007"+
"\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014"+
"\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C"+
"\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C"+
"\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071"+
"\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7"+
"\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4"+
"\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\u80F0\u80F2"+
"\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116"+
"\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C"+
"\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C"+
"\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D"+
"\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B"+
"\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2"+
"\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF"+
"\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB"+
"\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9"+
"\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219"+
"\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A"+
"\u8243\u8244\u8245\u8246\u824B\u824E\u824F\u8251"+
"\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B"+
"\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289"+
"\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B"+
"\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA"+
"\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE"+
"\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4"+
"\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE"+
"\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B"+
"\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E"+
"\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343"+
"\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357"+
"\u8370\u8378\u837D\u837F\u8380\u8382\u8384\u8386"+
"\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C"+
"\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0"+
"\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353"+
"\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406"+
"\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439"+
"\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452"+
"\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465"+
"\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C"+
"\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6"+
"\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD"+
"\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3";
private final static String innerIndex3=
"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7"+
"\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C"+
"\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525"+
"\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F"+
"\u8546\u854F\u8550\u8551\u8552\u8553\u8556\u8559"+
"\u855C\u855D\u855E\u855F\u8560\u8561\u8562\u8564"+
"\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581"+
"\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598"+
"\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6"+
"\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7"+
"\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0"+
"\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\u85FF\u8600"+
"\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618"+
"\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638"+
"\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653"+
"\u8656\u8657\u8658\u8659\u865D\u8660\u8661\u8662"+
"\u8663\u8664\u8669\u866C\u866F\u8675\u8676\u8677"+
"\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1"+
"\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5"+
"\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5"+
"\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3"+
"\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705"+
"\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719"+
"\u871E\u871F\u8721\u8723\u8728\u872E\u872F\u8731"+
"\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743"+
"\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F"+
"\u8771\u8772\u877B\u8783\u8784\u8785\u8786\u8787"+
"\u8788\u8789\u878B\u878C\u8790\u8793\u8795\u8797"+
"\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD"+
"\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9"+
"\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF"+
"\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3"+
"\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A"+
"\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A"+
"\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830"+
"\u8832\u8835\u883A\u883C\u8841\u8843\u8845\u8848"+
"\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858"+
"\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879"+
"\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0"+
"\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\u88CB"+
"\u88CC\u88CD\u88CE\u88D1\u88D2\u88D3\u88DB\u88DE"+
"\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906"+
"\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A"+
"\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932"+
"\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946"+
"\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961"+
"\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"+
"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995"+
"\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5"+
"\u89B6\u89B7\u89BC\u89D4\u89D5\u89D6\u89D7\u89D8"+
"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9"+
"\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12"+
"\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B"+
"\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43"+
"\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57"+
"\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76"+
"\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83"+
"\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99"+
"\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\u8AB6\u8AB7"+
"\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1"+
"\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0"+
"\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B"+
"\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37"+
"\u8B3C\u8B42\u8B43\u8B44\u8B45\u8B46\u8B48\u8B52"+
"\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76"+
"\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B"+
"\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38"+
"\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F"+
"\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59"+
"\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75"+
"\u8C76\u8C7B\u8C7E\u8C86\u8C87\u8C8B\u8C90\u8C92"+
"\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5"+
"\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD"+
"\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7"+
"\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17"+
"\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84"+
"\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0"+
"\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9"+
"\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE"+
"\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7"+
"\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01"+
"\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20"+
"\u8E21\u8E22\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36"+
"\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D"+
"\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61"+
"\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79"+
"\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95"+
"\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD"+
"\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3"+
"\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE"+
"\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02"+
"\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E"+
"\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D"+
"\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"+
"\u8F43\u8F47\u8F4F\u8F51\u8F52\u8F53\u8F54\u8F55"+
"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4"+
"\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1"+
"\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5"+
"\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6"+
"\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B"+
"\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034"+
"\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062"+
"\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088"+
"\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099"+
"\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3"+
"\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\u90C4\u90C5"+
"\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD"+
"\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4"+
"\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D"+
"\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E"+
"\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F"+
"\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D"+
"\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A"+
"\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A"+
"\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191"+
"\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8"+
"\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6"+
"\u91BB\u91BC\u91BD\u91BF\u91C2\u91C3\u91C5\u91D3"+
"\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9"+
"\u91EA\u91EC\u91ED\u91EE\u91EF\u91F0\u91F1\u91F7"+
"\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206"+
"\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216"+
"\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228"+
"\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239"+
"\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247"+
"\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C"+
"\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E"+
"\u926F\u9270\u9275\u9276\u9277\u9278\u9279\u927B"+
"\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E"+
"\u9292\u9297\u9299\u929F\u92A0\u92A4\u92A5\u92A7"+
"\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB"+
"\u92BC\u92BD\u92BF\u92C0\u92C1\u92C2\u92C3\u92C5"+
"\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0"+
"\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF"+
"\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE"+
"\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D"+
"\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321"+
"\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336"+
"\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355"+
"\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369"+
"\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"+
"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A"+
"\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E"+
"\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5"+
"\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7"+
"\u93C9\u93CA\u93CB\u93CC\u93CD\u93D3\u93D9\u93DC"+
"\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8"+
"\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409"+
"\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E"+
"\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D"+
"\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C"+
"\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F"+
"\u9471\u9472\u9484\u9483\u9578\u9579\u957E\u9584"+
"\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1"+
"\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD"+
"\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2"+
"\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4"+
"\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C"+
"\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D"+
"\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E"+
"\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683"+
"\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4"+
"\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA"+
"\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9"+
"\u96EF\u96F1\u96FA\u9702\u9703\u9705\u9709\u971A"+
"\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733"+
"\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758"+
"\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776"+
"\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795"+
"\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC"+
"\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA"+
"\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9"+
"\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7"+
"\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4"+
"\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A"+
"\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820"+
"\u9823\u9826\u982B\u982E\u982F\u9830\u9832\u9833"+
"\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852"+
"\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865"+
"\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4"+
"\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8"+
"\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3"+
"\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917"+
"\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B"+
"\u9931\u9932\u9933\u9934\u9935\u9939\u993A\u993B"+
"\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E"+
"\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960"+
"\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5";
private final static String innerIndex4=
"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4"+
"\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC"+
"\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03"+
"\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20"+
"\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35"+
"\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C"+
"\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE"+
"\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE"+
"\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2"+
"\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5"+
"\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA"+
"\u9AFD\u9AFF\u9B00\u9B01\u9B02\u9B03\u9B04\u9B05"+
"\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12"+
"\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D"+
"\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48"+
"\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61"+
"\u9B63\u9B65\u9B66\u9B68\u9B6A\u9B6B\u9B6C\u9B6D"+
"\u9B6E\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80"+
"\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D"+
"\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7"+
"\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB"+
"\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0"+
"\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB"+
"\u9BEF\u9BF3\u9BF7\u9BF8\u9BF9\u9BFA\u9BFD\u9BFF"+
"\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19"+
"\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\u9C27\u9C28"+
"\u9C29\u9C2A\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41"+
"\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50"+
"\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F"+
"\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70"+
"\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9"+
"\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E"+
"\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45"+
"\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F"+
"\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76"+
"\u9D77\u9D7B\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A"+
"\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98"+
"\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC"+
"\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6"+
"\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9"+
"\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02"+
"\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19"+
"\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83"+
"\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B"+
"\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3"+
"\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4"+
"\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"+
"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11"+
"\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F"+
"\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34"+
"\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43"+
"\u9F44\u9F45\u9F46\u9F47\u9F53\u9F55\u9F56\u9F57"+
"\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\u9F6E"+
"\u9F6F\u9F70\u9F71\u9F73\u9F75\u9F7A\u9F7D\u9F8F"+
"\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1"+
"\u9FA2\u9FA3\u9FA5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD";
private final static short index1[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 2, 3, 0, 4, 5, 6, 0, 0, 0, 0,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
private final static String index2[] = {
innerIndex0,
innerIndex1,
innerIndex2,
innerIndex3,
innerIndex4
};
protected char convSingleByte(int b) {
return REPLACE_CHAR;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,61 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class JIS_X_0212_OLD
extends Charset
{
public JIS_X_0212_OLD() {
super("JIS_X0212-1990_OLD", null);
}
public boolean contains(Charset cs) {
return (cs instanceof JIS_X_0212_OLD);
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new JIS_X_0212_Encoder(this);
}
private static class Decoder extends JIS_X_0212_Decoder {
protected char decodeSingle(int b) {
return DoubleByteDecoder.REPLACE_CHAR;
}
public Decoder(Charset cs) {
super(cs);
}
}
}

View File

@ -1,916 +0,0 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class JIS_X_0212_Solaris_Decoder extends DoubleByteDecoder
{
public JIS_X_0212_Solaris_Decoder(Charset cs) {
super(cs,
index1,
index2,
0x21,
0x7E);
}
private final static String innerIndex0=
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u02D8\u02C7\u00B8\u02D9"+
"\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A1"+
"\u00A6\u00BF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u0386\u0388\u0389\u038A"+
"\u03AA\uFFFD\u038C\uFFFD\u038E\u03AB\uFFFD\u038F"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u03AC\u03AD\u03AE\u03AF"+
"\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\u0402\u0403\u0404\u0405\u0406"+
"\u0407\u0408\u0409\u040A\u040B\u040C\u040E\u040F"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\u0452\u0453\u0454\u0455\u0456"+
"\u0457\u0458\u0459\u045A\u045B\u045C\u045E\u045F"+
"\u00C6\u0110\uFFFD\u0126\uFFFD\u0132\uFFFD\u0141"+
"\u013F\uFFFD\u014A\u00D8\u0152\uFFFD\u0166\u00DE"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142"+
"\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00C1\u00C0"+
"\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3"+
"\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8"+
"\u00CB\u00CA\u011A\u0116\u0112\u0118\uFFFD\u011C"+
"\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE"+
"\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139"+
"\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2"+
"\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158"+
"\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA"+
"\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172"+
"\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD"+
"\u0178\u0176\u0179\u017D\u017B\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\u00E1\u00E0\u00E4\u00E2"+
"\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109"+
"\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA"+
"\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\uFFFD"+
"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\uFFFD"+
"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C"+
"\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4"+
"\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B"+
"\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC"+
"\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169"+
"\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177"+
"\u017A\u017E\u017C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F"+
"\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35"+
"\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63"+
"\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96"+
"\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB"+
"\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5"+
"\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B"+
"\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31"+
"\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40"+
"\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56"+
"\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77"+
"\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"+
"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93"+
"\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7"+
"\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5"+
"\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2"+
"\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF"+
"\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010"+
"\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022"+
"\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041"+
"\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052"+
"\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066"+
"\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083"+
"\u5084\u5086\u508A\u508E\u508F\u5090\u5092\u5093"+
"\u5094\u5096\u509B\u509C\u509E\u509F\u50A0\u50A1"+
"\u50A2\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0"+
"\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4"+
"\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8"+
"\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106"+
"\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110"+
"\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127"+
"\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135"+
"\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157"+
"\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B"+
"\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA"+
"\u51BC\u51BE\u51BF\u51C2\u51C8\u51CF\u51D1\u51D2"+
"\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2"+
"\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213"+
"\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235"+
"\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C"+
"\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279"+
"\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296"+
"\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7"+
"\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD"+
"\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4"+
"\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA"+
"\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303"+
"\u530A\u530B\u530C\u5311\u5313\u5318\u531B\u531C"+
"\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C"+
"\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342"+
"\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C"+
"\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E"+
"\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB"+
"\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD"+
"\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD"+
"\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A"+
"\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435"+
"\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464"+
"\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"+
"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495"+
"\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA"+
"\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF"+
"\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF"+
"\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508"+
"\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532"+
"\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549"+
"\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E"+
"\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586"+
"\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597"+
"\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6"+
"\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\u55D3\u55D7"+
"\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605"+
"\u5608\u560A\u560D\u560E\u560F\u5610\u5611\u5612"+
"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B"+
"\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646"+
"\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661"+
"\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672"+
"\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699"+
"\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9"+
"\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5"+
"\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9"+
"\u56DC\u56DD\u56DF\u56E1\u56E4\u56E5\u56E6\u56E7"+
"\u56E8\u56F1\u56EB\u56ED\u56F6\u56F7\u5701\u5702"+
"\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D"+
"\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C"+
"\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745"+
"\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768"+
"\u576B\u576D\u576E\u576F\u5770\u5771\u5773\u5774"+
"\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781"+
"\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D"+
"\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC"+
"\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD"+
"\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5"+
"\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808"+
"\u5809\u57E1\u580C\u580D\u581B\u581E\u581F\u5820"+
"\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C"+
"\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867"+
"\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888"+
"\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896"+
"\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2"+
"\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2"+
"\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3"+
"\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641"+
"\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933"+
"\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959"+
"\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D";
private final static String innerIndex1=
"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B"+
"\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7"+
"\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC"+
"\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD"+
"\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1"+
"\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E"+
"\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A"+
"\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50"+
"\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A"+
"\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C"+
"\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2"+
"\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\u5AC4\u5AC6"+
"\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE"+
"\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34"+
"\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41"+
"\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F"+
"\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A"+
"\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9"+
"\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC"+
"\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\u5BD7\u5BD8\u5BD9"+
"\u5BDA\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17"+
"\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E"+
"\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62"+
"\u5C63\u5C67\u5C68\u5C69\u5C6D\u5C70\u5C74\u5C75"+
"\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F"+
"\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA"+
"\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD"+
"\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D"+
"\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34"+
"\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55"+
"\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64"+
"\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81"+
"\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99"+
"\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8"+
"\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9"+
"\u5DE0\u5DE4\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D"+
"\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28"+
"\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56"+
"\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\u5E6B\u5E6C"+
"\u5E6D\u5E6E\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4"+
"\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE"+
"\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4"+
"\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07"+
"\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23"+
"\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36"+
"\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D"+
"\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"+
"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E"+
"\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7"+
"\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4"+
"\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\u5FD1\u5FD2\u5FD3"+
"\u5FD4\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC"+
"\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC"+
"\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A"+
"\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048"+
"\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061"+
"\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A"+
"\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2"+
"\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\u60BB\u60BE"+
"\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF"+
"\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5"+
"\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A"+
"\u610C\u6110\u6111\u6112\u6113\u6114\u6116\u6117"+
"\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131"+
"\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149"+
"\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F"+
"\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193"+
"\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8"+
"\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2"+
"\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1"+
"\u61E2\u61E7\u61E9\u61E5\u61EC\u61ED\u61EF\u6201"+
"\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222"+
"\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243"+
"\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256"+
"\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D"+
"\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6"+
"\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6"+
"\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304"+
"\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329"+
"\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342"+
"\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353"+
"\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371"+
"\u6374\u6375\u6378\u637C\u637D\u637F\u6382\u6384"+
"\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E"+
"\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5"+
"\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0"+
"\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9"+
"\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420"+
"\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435"+
"\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454"+
"\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463"+
"\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F"+
"\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1"+
"\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"+
"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1"+
"\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0"+
"\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509"+
"\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E"+
"\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C"+
"\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F"+
"\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A"+
"\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE"+
"\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE"+
"\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4"+
"\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609"+
"\u660D\u6611\u6612\u6615\u6616\u661D\u661E\u6621"+
"\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C"+
"\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645"+
"\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659"+
"\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C"+
"\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B"+
"\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699"+
"\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1"+
"\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8"+
"\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB"+
"\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719"+
"\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748"+
"\u674C\u6754\u6755\u675D\u6766\u676C\u676E\u6774"+
"\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793"+
"\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5"+
"\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5"+
"\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6"+
"\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D"+
"\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831"+
"\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855"+
"\u6857\u6858\u685B\u686B\u686E\u686F\u6870\u6871"+
"\u6872\u6875\u6879\u687A\u687B\u687C\u6882\u6884"+
"\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3"+
"\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8"+
"\u68CC\u68CF\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC"+
"\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0"+
"\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909"+
"\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933"+
"\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957"+
"\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C"+
"\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D"+
"\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB"+
"\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8"+
"\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1"+
"\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11"+
"\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"+
"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49"+
"\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B"+
"\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83"+
"\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E"+
"\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD"+
"\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4"+
"\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0"+
"\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07"+
"\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24"+
"\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F"+
"\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60"+
"\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\u6B7E\u6B82"+
"\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8"+
"\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD"+
"\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1"+
"\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF"+
"\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12"+
"\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33"+
"\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D"+
"\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D"+
"\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86"+
"\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F"+
"\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0"+
"\u6CD1\u6CD2\u6CD4\u6CD6\u6CDA\u6CDC\u6CE0\u6CE7"+
"\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07"+
"\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27"+
"\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F"+
"\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70"+
"\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97"+
"\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF"+
"\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD"+
"\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4"+
"\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32"+
"\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49"+
"\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C"+
"\u6E5D\u6E5E\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D"+
"\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1"+
"\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8"+
"\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9"+
"\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16"+
"\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30"+
"\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52"+
"\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62"+
"\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B"+
"\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A"+
"\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF"+
"\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA";
private final static String innerIndex2=
"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC"+
"\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020"+
"\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044"+
"\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E"+
"\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E"+
"\u7081\u7085\u7086\u7094\u7095\u7096\u7097\u7098"+
"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA"+
"\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4"+
"\u70FA\u7103\u7104\u7105\u7106\u7107\u710B\u710C"+
"\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131"+
"\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150"+
"\u7152\u7157\u715A\u715C\u715E\u7160\u7168\u7179"+
"\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0"+
"\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0"+
"\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA"+
"\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213"+
"\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234"+
"\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F"+
"\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260"+
"\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278"+
"\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293"+
"\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1"+
"\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5"+
"\u72F3\u72F4\u72FA\u72FB\u72FE\u7302\u7304\u7305"+
"\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E"+
"\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335"+
"\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356"+
"\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369"+
"\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C"+
"\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393"+
"\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2"+
"\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9"+
"\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC"+
"\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3"+
"\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA"+
"\u73FB\u73FD\u73FF\u7400\u7401\u7404\u7407\u740A"+
"\u7411\u741A\u741B\u7424\u7426\u7428\u7429\u742A"+
"\u742B\u742C\u742D\u742E\u742F\u7430\u7431\u7439"+
"\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451"+
"\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B"+
"\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486"+
"\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499"+
"\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8"+
"\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5"+
"\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3"+
"\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA"+
"\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"+
"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529"+
"\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540"+
"\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E"+
"\u755F\u7561\u756F\u7571\u7579\u757A\u757B\u757C"+
"\u757D\u757E\u7581\u7585\u7590\u7592\u7593\u7595"+
"\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0"+
"\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC"+
"\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF"+
"\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608"+
"\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619"+
"\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629"+
"\u762D\u7632\u7633\u7635\u7638\u7639\u763A\u763C"+
"\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B"+
"\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F"+
"\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B"+
"\u769C\u769D\u769F\u76A0\u76A2\u76A3\u76A4\u76A5"+
"\u76A6\u76A7\u76A8\u76AA\u76AD\u76BD\u76C1\u76C5"+
"\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6"+
"\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700"+
"\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719"+
"\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734"+
"\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746"+
"\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C"+
"\u775E\u775F\u7760\u7762\u7764\u7767\u776A\u776C"+
"\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784"+
"\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2"+
"\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3"+
"\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0"+
"\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8"+
"\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D"+
"\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837"+
"\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C"+
"\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E"+
"\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D"+
"\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1"+
"\u78B2\u78B3\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9"+
"\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB"+
"\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900"+
"\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910"+
"\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929"+
"\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944"+
"\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958"+
"\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B"+
"\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995"+
"\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB"+
"\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7"+
"\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"+
"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8"+
"\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11"+
"\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F"+
"\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45"+
"\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D"+
"\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78"+
"\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90"+
"\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5"+
"\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1"+
"\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB"+
"\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29"+
"\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B34"+
"\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60"+
"\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73"+
"\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B"+
"\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5"+
"\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8"+
"\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8"+
"\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC"+
"\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B"+
"\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26"+
"\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A"+
"\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\u7C5A"+
"\u7C5B\u7C5C\u7C5D\u7C5E\u7C61\u7C63\u7C67\u7C69"+
"\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86"+
"\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6"+
"\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8"+
"\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9"+
"\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07"+
"\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D"+
"\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D"+
"\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53"+
"\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A"+
"\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83"+
"\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96"+
"\u7D97\u7D9D\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6"+
"\u7DB7\u7DB9\u7DC2\u7DC3\u7DC4\u7DC5\u7DC6\u7DCC"+
"\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6"+
"\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA"+
"\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20"+
"\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F"+
"\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F"+
"\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78"+
"\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95"+
"\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E"+
"\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B"+
"\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"+
"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F"+
"\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6"+
"\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8"+
"\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC"+
"\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007"+
"\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014"+
"\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C"+
"\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C"+
"\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071"+
"\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7"+
"\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4"+
"\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\u80F0\u80F2"+
"\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116"+
"\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C"+
"\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C"+
"\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D"+
"\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B"+
"\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2"+
"\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF"+
"\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB"+
"\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9"+
"\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219"+
"\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A"+
"\u8243\u8244\u8245\u8246\u824B\u824E\u824F\u8251"+
"\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B"+
"\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289"+
"\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B"+
"\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA"+
"\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE"+
"\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4"+
"\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE"+
"\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B"+
"\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E"+
"\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343"+
"\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357"+
"\u8370\u8378\u837D\u837F\u8380\u8382\u8384\u8386"+
"\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C"+
"\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0"+
"\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353"+
"\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406"+
"\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439"+
"\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452"+
"\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465"+
"\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C"+
"\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6"+
"\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD"+
"\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3";
private final static String innerIndex3=
"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7"+
"\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C"+
"\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525"+
"\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F"+
"\u8546\u854F\u8550\u8551\u8552\u8553\u8556\u8559"+
"\u855C\u855D\u855E\u855F\u8560\u8561\u8562\u8564"+
"\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581"+
"\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598"+
"\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6"+
"\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7"+
"\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0"+
"\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\u85FF\u8600"+
"\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618"+
"\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638"+
"\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653"+
"\u8656\u8657\u8658\u8659\u865D\u8660\u8661\u8662"+
"\u8663\u8664\u8669\u866C\u866F\u8675\u8676\u8677"+
"\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1"+
"\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5"+
"\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5"+
"\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3"+
"\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705"+
"\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719"+
"\u871E\u871F\u8721\u8723\u8728\u872E\u872F\u8731"+
"\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743"+
"\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F"+
"\u8771\u8772\u877B\u8783\u8784\u8785\u8786\u8787"+
"\u8788\u8789\u878B\u878C\u8790\u8793\u8795\u8797"+
"\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD"+
"\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9"+
"\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF"+
"\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3"+
"\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A"+
"\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A"+
"\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830"+
"\u8832\u8835\u883A\u883C\u8841\u8843\u8845\u8848"+
"\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858"+
"\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879"+
"\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0"+
"\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\u88CB"+
"\u88CC\u88CD\u88CE\u88D1\u88D2\u88D3\u88DB\u88DE"+
"\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906"+
"\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A"+
"\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932"+
"\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946"+
"\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961"+
"\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"+
"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995"+
"\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5"+
"\u89B6\u89B7\u89BC\u89D4\u89D5\u89D6\u89D7\u89D8"+
"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9"+
"\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12"+
"\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B"+
"\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43"+
"\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57"+
"\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76"+
"\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83"+
"\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99"+
"\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\u8AB6\u8AB7"+
"\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1"+
"\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0"+
"\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B"+
"\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37"+
"\u8B3C\u8B42\u8B43\u8B44\u8B45\u8B46\u8B48\u8B52"+
"\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76"+
"\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B"+
"\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38"+
"\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F"+
"\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59"+
"\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75"+
"\u8C76\u8C7B\u8C7E\u8C86\u8C87\u8C8B\u8C90\u8C92"+
"\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5"+
"\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD"+
"\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7"+
"\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17"+
"\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84"+
"\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0"+
"\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9"+
"\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE"+
"\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7"+
"\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01"+
"\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20"+
"\u8E21\u8E22\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36"+
"\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D"+
"\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61"+
"\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79"+
"\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95"+
"\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD"+
"\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3"+
"\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE"+
"\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02"+
"\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E"+
"\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D"+
"\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"+
"\u8F43\u8F47\u8F4F\u8F51\u8F52\u8F53\u8F54\u8F55"+
"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4"+
"\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1"+
"\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5"+
"\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6"+
"\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B"+
"\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034"+
"\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062"+
"\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088"+
"\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099"+
"\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3"+
"\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\u90C4\u90C5"+
"\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD"+
"\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4"+
"\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D"+
"\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E"+
"\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F"+
"\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D"+
"\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A"+
"\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A"+
"\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191"+
"\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8"+
"\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6"+
"\u91BB\u91BC\u91BD\u91BF\u91C2\u91C3\u91C5\u91D3"+
"\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9"+
"\u91EA\u91EC\u91ED\u91EE\u91EF\u91F0\u91F1\u91F7"+
"\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206"+
"\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216"+
"\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228"+
"\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239"+
"\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247"+
"\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C"+
"\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E"+
"\u926F\u9270\u9275\u9276\u9277\u9278\u9279\u927B"+
"\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E"+
"\u9292\u9297\u9299\u929F\u92A0\u92A4\u92A5\u92A7"+
"\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB"+
"\u92BC\u92BD\u92BF\u92C0\u92C1\u92C2\u92C3\u92C5"+
"\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0"+
"\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF"+
"\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE"+
"\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D"+
"\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321"+
"\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336"+
"\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355"+
"\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369"+
"\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"+
"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A"+
"\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E"+
"\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5"+
"\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7"+
"\u93C9\u93CA\u93CB\u93CC\u93CD\u93D3\u93D9\u93DC"+
"\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8"+
"\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409"+
"\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E"+
"\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D"+
"\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C"+
"\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F"+
"\u9471\u9472\u9484\u9483\u9578\u9579\u957E\u9584"+
"\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1"+
"\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD"+
"\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2"+
"\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4"+
"\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C"+
"\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D"+
"\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E"+
"\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683"+
"\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4"+
"\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA"+
"\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9"+
"\u96EF\u96F1\u96FA\u9702\u9703\u9705\u9709\u971A"+
"\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733"+
"\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758"+
"\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776"+
"\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795"+
"\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC"+
"\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA"+
"\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9"+
"\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7"+
"\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4"+
"\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A"+
"\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820"+
"\u9823\u9826\u982B\u982E\u982F\u9830\u9832\u9833"+
"\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852"+
"\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865"+
"\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4"+
"\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8"+
"\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3"+
"\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917"+
"\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B"+
"\u9931\u9932\u9933\u9934\u9935\u9939\u993A\u993B"+
"\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E"+
"\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960"+
"\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5";
private final static String innerIndex4=
"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4"+
"\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC"+
"\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03"+
"\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20"+
"\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35"+
"\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C"+
"\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE"+
"\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE"+
"\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2"+
"\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5"+
"\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA"+
"\u9AFD\u9AFF\u9B00\u9B01\u9B02\u9B03\u9B04\u9B05"+
"\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12"+
"\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D"+
"\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48"+
"\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61"+
"\u9B63\u9B65\u9B66\u9B68\u9B6A\u9B6B\u9B6C\u9B6D"+
"\u9B6E\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80"+
"\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D"+
"\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7"+
"\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB"+
"\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0"+
"\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB"+
"\u9BEF\u9BF3\u9BF7\u9BF8\u9BF9\u9BFA\u9BFD\u9BFF"+
"\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19"+
"\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\u9C27\u9C28"+
"\u9C29\u9C2A\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41"+
"\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50"+
"\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F"+
"\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70"+
"\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9"+
"\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E"+
"\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45"+
"\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F"+
"\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76"+
"\u9D77\u9D7B\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A"+
"\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98"+
"\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC"+
"\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6"+
"\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9"+
"\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02"+
"\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19"+
"\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83"+
"\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B"+
"\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3"+
"\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4"+
"\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"+
"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11"+
"\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F"+
"\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34"+
"\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43"+
"\u9F44\u9F45\u9F46\u9F47\u9F53\u9F55\u9F56\u9F57"+
"\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\u9F6E"+
"\u9F6F\u9F70\u9F71\u9F73\u9F75\u9F7A\u9F7D\u9F8F"+
"\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1"+
"\u9FA2\u9FA3\u9FA5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+
"\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177"+
"\u2178\u2179\u2160\u2161\u2162\u2163\u2164\u2165"+
"\u2166\u2167\u2168\u2169\uFF07\uFF02\u3231\u2116"+
"\u2121\u70BB\u4EFC\u50F4\u51EC\u5307\u5324\uFA0E"+
"\u548A\u5759\uFA0F\uFA10\u589E\u5BEC\u5CF5\u5D53"+
"\uFA11\u5FB7\u6085\u6120\u654E\u663B\u6665\uFA12"+
"\uF929\u6801\uFA13\uFA14\u6A6B\u6AE2\u6DF8\u6DF2"+
"\u7028\uFA15\uFA16\u7501\u7682\u769E\uFA17\u7930"+
"\uFA18\uFA19\uFA1A\uFA1B\u7AE7\uFA1C\uFA1D\u7DA0"+
"\u7DD6\uFA1E\u8362\uFA1F\u85B0\uFA20\uFA21\u8807"+
"\uFA22\u8B7F\u8CF4\u8D76\uFA23\uFA24\uFA25\u90DE"+
"\uFA26\u9115\uFA27\uFA28\u9592\uF9DC\uFA29\u973B"+
"\u974D\u9751\uFA2A\uFA2B\uFA2C\u999E\u9AD9\u9B72"+
"\uFA2D\u9ED1";
private final static short index1[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 2, 3, 0, 4, 5, 6, 0, 0, 0, 0,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 0, 0,
0, 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
private final static String index2[] = {
innerIndex0,
innerIndex1,
innerIndex2,
innerIndex3,
innerIndex4
};
protected char convSingleByte(int b) {
return REPLACE_CHAR;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,113 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
import sun.nio.cs.ext.*;
public class MS932_OLD extends Charset implements HistoricallyNamedCharset
{
public MS932_OLD() {
super("windows-31j-OLD", null);
}
public String historicalName() {
return "MS932";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof JIS_X_0201_OLD)
|| (cs instanceof MS932_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
private static class Decoder extends MS932DB.Decoder
// implements DelegatableDecoder
{
JIS_X_0201_OLD.Decoder jisDec0201;
private Decoder(Charset cs) {
super(cs);
jisDec0201 = new JIS_X_0201_OLD.Decoder(cs);
}
protected char decodeSingle(int b) {
// If the high bits are all off, it's ASCII == Unicode
if ((b & 0xFF80) == 0) {
return (char)b;
}
return jisDec0201.decode(b);
}
// Make some protected methods public for use by JISAutoDetect
public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
return super.decodeLoop(src, dst);
}
public void implReset() {
super.implReset();
}
public CoderResult implFlush(CharBuffer out) {
return super.implFlush(out);
}
}
private static class Encoder extends MS932DB.Encoder {
private JIS_X_0201_OLD.Encoder jisEnc0201;
private Encoder(Charset cs) {
super(cs);
jisEnc0201 = new JIS_X_0201_OLD.Encoder(cs);
}
protected int encodeSingle(char inputChar) {
byte b;
// \u0000 - \u007F map straight through
if ((inputChar & 0xFF80) == 0) {
return ((byte)inputChar);
}
if ((b = jisEnc0201.encode(inputChar)) == 0)
return -1;
else
return b;
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,142 +0,0 @@
/*
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import sun.nio.cs.HistoricallyNamedCharset;
public class PCK_OLD
extends Charset
implements HistoricallyNamedCharset
{
public PCK_OLD() {
super("x-PCK_OLD", null);
}
public String historicalName() {
return "PCK";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof JIS_X_0201_OLD)
|| (cs instanceof PCK_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
// Need to force the replacement byte to 0x3f
// because JIS_X_0208_Encoder defines its own
// alternative 2 byte substitution to permit it
// to exist as a self-standing Encoder
byte[] replacementBytes = { (byte)0x3f };
return new Encoder(this).replaceWith(replacementBytes);
}
private static class Decoder extends SJIS_OLD.Decoder {
JIS_X_0208_Solaris_Decoder jis0208;
private static final char REPLACE_CHAR='\uFFFD';
private Decoder(Charset cs) {
super(cs);
jis0208 = new JIS_X_0208_Solaris_Decoder(cs);
}
protected char decodeDouble(int c1, int c2) {
char outChar;
if ((outChar = super.decodeDouble(c1, c2)) != '\uFFFD') {
// Map JIS X 0208:1983 0x213D <--> U+2015
return ((outChar != '\u2014')? outChar: '\u2015');
} else {
int adjust = c2 < 0x9F ? 1 : 0;
int rowOffset = c1 < 0xA0 ? 0x70 : 0xB0;
int cellOffset = (adjust == 1) ? (c2 > 0x7F ? 0x20 : 0x1F) : 0x7E;
int b1 = ((c1 - rowOffset) << 1) - adjust;
int b2 = c2 - cellOffset;
char outChar2 = jis0208.decodeDouble(b1, b2);
return outChar2;
}
}
}
private static class Encoder extends SJIS_OLD.Encoder {
private JIS_X_0201_OLD.Encoder jis0201;
private static final short[] j0208Index1 =
JIS_X_0208_Solaris_Encoder.getIndex1();
private static final String[] j0208Index2 =
JIS_X_0208_Solaris_Encoder.getIndex2();
private Encoder(Charset cs) {
super(cs);
jis0201 = new JIS_X_0201_OLD.Encoder(cs);
}
protected int encodeDouble(char ch) {
int result = 0;
// PCK uses JIS_X_0208:1983 rather than JIS_X_0208:1997
switch (ch) {
case '\u2015':
return 0x815C;
case '\u2014':
return 0;
default:
break;
}
if ((result = super.encodeDouble(ch)) != 0) {
return result;
}
else {
int offset = j0208Index1[ch >> 8] << 8;
int pos = j0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
if (pos != 0) {
int c1 = (pos >> 8) & 0xff;
int c2 = pos & 0xff;
int rowOffset = c1 < 0x5F ? 0x70 : 0xB0;
int cellOffset = (c1 % 2 == 1) ? (c2 > 0x5F ? 0x20 : 0x1F) : 0x7E;
result = ((((c1 + 1 ) >> 1) + rowOffset) << 8) | (c2 + cellOffset);
}
}
return result;
}
}
}

View File

@ -1,158 +0,0 @@
/*
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.*;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
public class SJIS_OLD
extends Charset
implements HistoricallyNamedCharset
{
public SJIS_OLD() {
super("Shift_JIS_OLD", null);
}
public String historicalName() {
return "SJIS";
}
public boolean contains(Charset cs) {
return ((cs.name().equals("US-ASCII"))
|| (cs instanceof JIS_X_0201_OLD)
|| (cs instanceof SJIS_OLD)
|| (cs instanceof JIS_X_0208_OLD));
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
// Need to force the replacement byte to 0x3f
// because JIS_X_0208_Encoder defines its own
// alternative 2 byte substitution to permit it
// to exist as a self-standing Encoder
byte[] replacementBytes = { (byte)0x3f };
return new Encoder(this).replaceWith(replacementBytes);
}
static class Decoder extends JIS_X_0208_Decoder {
JIS_X_0201_OLD.Decoder jis0201;
protected Decoder(Charset cs) {
super(cs);
jis0201 = new JIS_X_0201_OLD.Decoder(cs);
}
protected char decodeSingle(int b) {
// If the high bits are all off, it's ASCII == Unicode
if ((b & 0xFF80) == 0) {
return (char)b;
}
return jis0201.decode(b);
}
protected char decodeDouble(int c1, int c2) {
int adjust = c2 < 0x9F ? 1 : 0;
int rowOffset = c1 < 0xA0 ? 0x70 : 0xB0;
int cellOffset = (adjust == 1) ? (c2 > 0x7F ? 0x20 : 0x1F) : 0x7E;
int b1 = ((c1 - rowOffset) << 1) - adjust;
int b2 = c2 - cellOffset;
return super.decodeDouble(b1, b2);
}
// Make some protected methods public for use by JISAutoDetect
public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
return super.decodeLoop(src, dst);
}
public void implReset() {
super.implReset();
}
public CoderResult implFlush(CharBuffer out) {
return super.implFlush(out);
}
}
static class Encoder extends JIS_X_0208_Encoder {
private JIS_X_0201_OLD.Encoder jis0201;
private static final short[] j0208Index1 =
JIS_X_0208_Encoder.getIndex1();
private static final String[] j0208Index2 =
JIS_X_0208_Encoder.getIndex2();
protected Encoder(Charset cs) {
super(cs);
jis0201 = new JIS_X_0201_OLD.Encoder(cs);
}
protected int encodeSingle(char inputChar) {
byte b;
// \u0000 - \u007F map straight through
if ((inputChar & 0xFF80) == 0)
return (byte)inputChar;
if ((b = jis0201.encode(inputChar)) == 0)
return -1;
else
return b;
}
protected int encodeDouble(char ch) {
int offset = j0208Index1[ch >> 8] << 8;
int pos = j0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
if (pos == 0) {
/* Zero value indicates this Unicode has no mapping to
* JIS0208.
* We bail here because the JIS -> SJIS algorithm produces
* bogus SJIS values for invalid JIS input. Zero should be
* the only invalid JIS value in our table.
*/
return 0;
}
/*
* This algorithm for converting from JIS to SJIS comes from
* Ken Lunde's "Understanding Japanese Information Processing",
* pg 163.
*/
int c1 = (pos >> 8) & 0xff;
int c2 = pos & 0xff;
int rowOffset = c1 < 0x5F ? 0x70 : 0xB0;
int cellOffset = (c1 % 2 == 1) ? (c2 > 0x5F ? 0x20 : 0x1F) : 0x7E;
return ((((c1 + 1 ) >> 1) + rowOffset) << 8) | (c2 + cellOffset);
}
}
}

View File

@ -1,154 +0,0 @@
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
/**
* Simple EUC-like decoder used by IBM01383 and IBM970
* supports G1 - no support for G2 or G3
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
abstract class SimpleEUCDecoder
extends CharsetDecoder
{
private final int SS2 = 0x8E;
private final int SS3 = 0x8F;
protected static String mappingTableG1;
protected static String byteToCharTable;
protected SimpleEUCDecoder(Charset cs) {
super(cs, 0.5f, 1.0f);
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
int byte1, byte2;
int inputSize = 1;
char outputChar = '\uFFFD';
byte1 = sa[sp] & 0xff;
if ( byte1 <= 0x9f ) { // < 0x9f has its own table (G0)
if (byte1 == SS2 || byte1 == SS3 ) {
// No support provided for G2/G3 at this time.
return CoderResult.malformedForLength(1);
}
outputChar = byteToCharTable.charAt(byte1);
} else if (byte1 < 0xa1 || byte1 > 0xfe) { // invalid range?
return CoderResult.malformedForLength(1);
} else { // (G1)
if (sl - sp < 2) {
return CoderResult.UNDERFLOW;
}
byte2 = sa[sp + 1] & 0xff;
inputSize++;
if ( byte2 < 0xa1 || byte2 > 0xfe) {
return CoderResult.malformedForLength(2);
}
outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
}
if (outputChar == '\uFFFD') {
return CoderResult.unmappableForLength(inputSize);
}
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
char outputChar = '\uFFFD';
int inputSize = 1;
int byte1, byte2;
byte1 = src.get() & 0xff;
if ( byte1 <= 0x9f ) {
if (byte1 == SS2 || byte1 == SS3 ) {
return CoderResult.malformedForLength(1);
}
outputChar = byteToCharTable.charAt(byte1);
} else if (byte1 < 0xa1 || byte1 > 0xfe) {
return CoderResult.malformedForLength(1);
} else {
if (!src.hasRemaining()) {
return CoderResult.UNDERFLOW;
}
byte2 = src.get() & 0xff;
inputSize++;
if ( byte2 < 0xa1 || byte2 > 0xfe) {
return CoderResult.malformedForLength(2);
}
outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
}
if (outputChar == '\uFFFD') {
return CoderResult.unmappableForLength(inputSize);
}
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
dst.put(outputChar);
mark += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
}

View File

@ -1,113 +0,0 @@
/*
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.MalformedInputException;
import java.nio.charset.UnmappableCharacterException;
public abstract class SingleByteDecoder
extends CharsetDecoder
{
private final String byteToCharTable;
protected SingleByteDecoder(Charset cs, String byteToCharTable) {
super(cs, 1.0f, 1.0f);
this.byteToCharTable = byteToCharTable;
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
int b = sa[sp];
char c = decode(b);
if (c == '\uFFFD')
return CoderResult.unmappableForLength(1);
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = c;
sp++;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
int b = src.get();
char c = decode(b);
if (c == '\uFFFD')
return CoderResult.unmappableForLength(1);
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
mark++;
dst.put(c);
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (true && src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
public char decode(int byteIndex) {
int n = byteIndex + 128;
if (n >= byteToCharTable.length() || n < 0)
return '\uFFFD';
return byteToCharTable.charAt(n);
}
}

View File

@ -1,155 +0,0 @@
/*
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.MalformedInputException;
import java.nio.charset.UnmappableCharacterException;
import sun.nio.cs.Surrogate;
public abstract class SingleByteEncoder
extends CharsetEncoder
{
private final short index1[];
private final String index2;
private final int mask1;
private final int mask2;
private final int shift;
private final Surrogate.Parser sgp = new Surrogate.Parser();
protected SingleByteEncoder(Charset cs,
short[] index1, String index2,
int mask1, int mask2, int shift)
{
super(cs, 1.0f, 1.0f);
this.index1 = index1;
this.index2 = index2;
this.mask1 = mask1;
this.mask2 = mask2;
this.shift = shift;
}
public boolean canEncode(char c) {
char testEncode = index2.charAt(index1[(c & mask1) >> shift]
+ (c & mask2));
return testEncode != '\u0000' || c == '\u0000';
}
private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
char[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
byte[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
char c = sa[sp];
if (Character.isSurrogate(c)) {
if (sgp.parse(c, sa, sp, sl) < 0)
return sgp.error();
return sgp.unmappableResult();
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
if (dl - dp < 1)
return CoderResult.OVERFLOW;
char e = index2.charAt(index1[(c & mask1) >> shift]
+ (c & mask2));
// If output byte is zero because input char is zero
// then character is mappable, o.w. fail
if (e == '\u0000' && c != '\u0000')
return CoderResult.unmappableForLength(1);
sp++;
da[dp++] = (byte)e;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
char c = src.get();
if (Character.isSurrogate(c)) {
if (sgp.parse(c, src) < 0)
return sgp.error();
return sgp.unmappableResult();
}
if (c >= '\uFFFE')
return CoderResult.unmappableForLength(1);
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
char e = index2.charAt(index1[(c & mask1) >> shift]
+ (c & mask2));
// If output byte is zero because input char is zero
// then character is mappable, o.w. fail
if (e == '\u0000' && c != '\u0000')
return CoderResult.unmappableForLength(1);
mark++;
dst.put((byte)e);
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
if (true && src.hasArray() && dst.hasArray())
return encodeArrayLoop(src, dst);
else
return encodeBufferLoop(src, dst);
}
public byte encode(char inputChar) {
return (byte)index2.charAt(index1[(inputChar & mask1) >> shift] +
(inputChar & mask2));
}
}

View File

@ -1,558 +0,0 @@
/*
* Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6843578
* @summary Test old and new implementation of db charsets
* @build IBM930_OLD IBM933_OLD IBM935_OLD IBM937_OLD IBM939_OLD IBM942_OLD IBM943_OLD IBM948_OLD IBM949_OLD IBM950_OLD IBM970_OLD IBM942C_OLD IBM943C_OLD IBM949C_OLD IBM1381_OLD IBM1383_OLD EUC_CN_OLD EUC_KR_OLD GBK_OLD Johab_OLD MS932_OLD MS936_OLD MS949_OLD MS950_OLD SJIS_OLD PCK_OLD EUC_JP_OLD EUC_JP_LINUX_OLD EUC_JP_Open_OLD
* @modules java.base/sun.nio.cs jdk.charsets/sun.nio.cs.ext
* @run main TestIBMDB
*/
import java.nio.charset.*;
import java.nio.*;
import java.util.*;
public class TestIBMDB {
static class Time {
long t;
}
static int iteration = 200;
static char[] decode(byte[] bb, Charset cs, boolean testDirect, Time t)
throws Exception {
String csn = cs.name();
CharsetDecoder dec = cs.newDecoder();
ByteBuffer bbf;
CharBuffer cbf;
if (testDirect) {
bbf = ByteBuffer.allocateDirect(bb.length);
cbf = ByteBuffer.allocateDirect(bb.length*2).asCharBuffer();
bbf.put(bb);
} else {
bbf = ByteBuffer.wrap(bb);
cbf = CharBuffer.allocate(bb.length);
}
CoderResult cr = null;
long t1 = System.nanoTime()/1000;
for (int i = 0; i < iteration; i++) {
bbf.rewind();
cbf.clear();
dec.reset();
cr = dec.decode(bbf, cbf, true);
}
long t2 = System.nanoTime()/1000;
t.t = (t2 - t1)/iteration;
if (cr != CoderResult.UNDERFLOW) {
System.out.println("DEC-----------------");
int pos = bbf.position();
System.out.printf(" cr=%s, bbf.pos=%d, bb[pos]=%x,%x,%x,%x%n",
cr.toString(), pos,
bb[pos++]&0xff, bb[pos++]&0xff,bb[pos++]&0xff, bb[pos++]&0xff);
throw new RuntimeException("Decoding err: " + csn);
}
char[] cc = new char[cbf.position()];
cbf.flip(); cbf.get(cc);
return cc;
}
static CoderResult decodeCR(byte[] bb, Charset cs, boolean testDirect)
throws Exception {
CharsetDecoder dec = cs.newDecoder();
ByteBuffer bbf;
CharBuffer cbf;
if (testDirect) {
bbf = ByteBuffer.allocateDirect(bb.length);
cbf = ByteBuffer.allocateDirect(bb.length*2).asCharBuffer();
bbf.put(bb).flip();
} else {
bbf = ByteBuffer.wrap(bb);
cbf = CharBuffer.allocate(bb.length);
}
CoderResult cr = null;
for (int i = 0; i < iteration; i++) {
bbf.rewind();
cbf.clear();
dec.reset();
cr = dec.decode(bbf, cbf, true);
}
return cr;
}
static byte[] encode(char[] cc, Charset cs, boolean testDirect, Time t)
throws Exception {
ByteBuffer bbf;
CharBuffer cbf;
CharsetEncoder enc = cs.newEncoder();
String csn = cs.name();
if (testDirect) {
bbf = ByteBuffer.allocateDirect(cc.length * 4);
cbf = ByteBuffer.allocateDirect(cc.length * 2).asCharBuffer();
cbf.put(cc).flip();
} else {
bbf = ByteBuffer.allocate(cc.length * 4);
cbf = CharBuffer.wrap(cc);
}
CoderResult cr = null;
long t1 = System.nanoTime()/1000;
for (int i = 0; i < iteration; i++) {
cbf.rewind();
bbf.clear();
enc.reset();
cr = enc.encode(cbf, bbf, true);
}
long t2 = System.nanoTime()/1000;
t.t = (t2 - t1)/iteration;
if (cr != CoderResult.UNDERFLOW) {
System.out.println("ENC-----------------");
int pos = cbf.position();
System.out.printf(" cr=%s, cbf.pos=%d, cc[pos]=%x%n",
cr.toString(), pos, cc[pos]&0xffff);
throw new RuntimeException("Encoding err: " + csn);
}
byte[] bb = new byte[bbf.position()];
bbf.flip(); bbf.get(bb);
return bb;
}
static CoderResult encodeCR(char[] cc, Charset cs, boolean testDirect)
throws Exception {
ByteBuffer bbf;
CharBuffer cbf;
CharsetEncoder enc = cs.newEncoder();
if (testDirect) {
bbf = ByteBuffer.allocateDirect(cc.length * 4);
cbf = ByteBuffer.allocateDirect(cc.length * 2).asCharBuffer();
cbf.put(cc).flip();
} else {
bbf = ByteBuffer.allocate(cc.length * 4);
cbf = CharBuffer.wrap(cc);
}
CoderResult cr = null;
for (int i = 0; i < iteration; i++) {
cbf.rewind();
bbf.clear();
enc.reset();
cr = enc.encode(cbf, bbf, true);
}
return cr;
}
static void printEntry(char c, Charset cs) {
byte[] bb = new String(new char[] {c}).getBytes(cs);
for (byte b:bb)
System.out.printf("%x", b&0xff);
System.out.printf(" %x", c & 0xffff);
String s2 = new String(bb, cs);
System.out.printf(" %x%n", s2.charAt(0) & 0xffff);
}
// check and compare canEncoding/Encoding
static char[] checkEncoding(Charset oldCS, Charset newCS)
throws Exception {
System.out.printf("Encoding <%s> <%s>...%n", oldCS.name(), newCS.name());
CharsetEncoder encOLD = oldCS.newEncoder();
CharsetEncoder encNew = newCS.newEncoder();
char[] cc = new char[0x10000];
int pos = 0;
boolean is970 = "x-IBM970-Old".equals(oldCS.name());
for (char c = 0; c < 0xffff; c++) {
boolean canOld = encOLD.canEncode(c);
boolean canNew = encNew.canEncode(c);
if (is970 && c == 0x2299)
continue;
if (canOld != canNew) {
if (canNew) {
System.out.printf(" NEW(only): ");
printEntry(c, newCS);
} else {
if (is970) {
byte[] bb = new String(new char[] {c}).getBytes(oldCS);
if (bb.length == 2 && bb[0] == (byte)0xa2 && bb[1] == (byte)0xc1) {
// we know 970 has bogus nnnn -> a2c1 -> 2299
continue;
}
}
System.out.printf(" OLD(only): ");
printEntry(c, oldCS);
}
} else if (canNew) {
byte[] bbNew = new String(new char[] {c}).getBytes(newCS);
byte[] bbOld = new String(new char[] {c}).getBytes(oldCS);
if (!Arrays.equals(bbNew, bbOld)) {
System.out.printf(" c->b NEW: ");
printEntry(c, newCS);
System.out.printf(" c->b OLD: ");
printEntry(c, oldCS);
} else {
String sNew = new String(bbNew, newCS);
String sOld = new String(bbOld, oldCS);
if (!sNew.equals(sOld)) {
System.out.printf(" b2c NEW (c=%x):", c&0xffff);
printEntry(sNew.charAt(0), newCS);
System.out.printf(" b2c OLD:");
printEntry(sOld.charAt(0), oldCS);
}
}
}
if (canNew & canOld) { // added only both for now
cc[pos++] = c;
}
}
return Arrays.copyOf(cc, pos);
}
// check and compare canEncoding/Encoding
static void checkDecoding(Charset oldCS, Charset newCS)
throws Exception
{
System.out.printf("Decoding <%s> <%s>...%n", oldCS.name(), newCS.name());
boolean isEBCDIC = oldCS.name().startsWith("x-IBM93");
//Try singlebyte first
byte[] bb = new byte[1];
System.out.printf(" trying SB...%n");
for (int b = 0; b < 0x100; b++) {
bb[0] = (byte)b;
String sOld = new String(bb, oldCS);
String sNew = new String(bb, newCS);
if (!sOld.equals(sNew)) {
System.out.printf(" b=%x: %x/%d(old) %x/%d(new)%n",
b& 0xff,
sOld.charAt(0) & 0xffff, sOld.length(),
sNew.charAt(0) & 0xffff, sNew.length());
}
}
System.out.printf(" trying DB...%n");
bb = new byte[isEBCDIC?4:2];
int b1Min = 0x40;
int b1Max = 0xfe;
for (int b1 = 0x40; b1 < 0xff; b1++) {
if (!isEBCDIC) {
// decodable singlebyte b1
bb[0] = (byte)b1;
String sOld = new String(bb, oldCS);
String sNew = new String(bb, newCS);
if (!sOld.equals(sNew)) {
if (sOld.length() != 2 && sOld.charAt(0) != 0) {
// only prints we are NOT expected. above two are known issue
System.out.printf(" b1=%x: %x/%d(old) %x/%d(new)%n",
b1 & 0xff,
sOld.charAt(0) & 0xffff, sOld.length(),
sNew.charAt(0) & 0xffff, sNew.length());
continue;
}
}
}
for (int b2 = 0x40; b2 < 0xff; b2++) {
if (isEBCDIC) {
bb[0] = 0x0e;
bb[1] = (byte)b1;
bb[2] = (byte)b2;
bb[3] = 0x0f;
} else {
bb[0] = (byte)b1;
bb[1] = (byte)b2;
}
String sOld = new String(bb, oldCS);
String sNew = new String(bb, newCS);
//if (!sOld.equals(sNew)) {
if (sOld.charAt(0) != sNew.charAt(0)) {
if (sOld.charAt(0) == 0 && sNew.charAt(0) == 0xfffd)
continue; // known issude in old implementation
System.out.printf(" bb=<%x,%x> c(old)=%x, c(new)=%x%n",
b1, b2, sOld.charAt(0) & 0xffff, sNew.charAt(0) & 0xffff);
}
}
}
}
static void checkInit(String csn) throws Exception {
System.out.printf("Check init <%s>...%n", csn);
Charset.forName("Big5"); // load in the ExtendedCharsets
long t1 = System.nanoTime()/1000;
Charset cs = Charset.forName(csn);
long t2 = System.nanoTime()/1000;
System.out.printf(" charset :%d%n", t2 - t1);
t1 = System.nanoTime()/1000;
cs.newDecoder();
t2 = System.nanoTime()/1000;
System.out.printf(" new Decoder :%d%n", t2 - t1);
t1 = System.nanoTime()/1000;
cs.newEncoder();
t2 = System.nanoTime()/1000;
System.out.printf(" new Encoder :%d%n", t2 - t1);
}
static void compare(Charset cs1, Charset cs2, char[] cc) throws Exception {
System.gc(); // enqueue finalizable objects
Thread.sleep(1000);
System.gc(); // enqueue finalizable objects
String csn1 = cs1.name();
String csn2 = cs2.name();
System.out.printf("Diff <%s> <%s>...%n", csn1, csn2);
Time t1 = new Time();
Time t2 = new Time();
byte[] bb1 = encode(cc, cs1, false, t1);
byte[] bb2 = encode(cc, cs2, false, t2);
System.out.printf(" Encoding TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(bb1, bb2)) {
System.out.printf(" encoding failed%n");
}
char[] cc2 = decode(bb1, cs2, false, t2);
char[] cc1 = decode(bb1, cs1, false, t1);
System.out.printf(" Decoding TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(cc1, cc2)) {
System.out.printf(" decoding failed%n");
}
bb1 = encode(cc, cs1, true, t1);
bb2 = encode(cc, cs2, true, t2);
System.out.printf(" Encoding(dir) TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(bb1, bb2))
System.out.printf(" encoding (direct) failed%n");
cc1 = decode(bb1, cs1, true, t1);
cc2 = decode(bb1, cs2, true, t2);
System.out.printf(" Decoding(dir) TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(cc1, cc2)) {
System.out.printf(" decoding (direct) failed%n");
}
}
/* The first byte is the length of malformed bytes
byte[][] malformed = {
{5, (byte)0xF8, (byte)0x80, (byte)0x80, (byte)0x9F, (byte)0x80, (byte)0xC0 },
};
*/
static void checkMalformed(Charset cs, byte[][] malformed)
throws Exception
{
boolean failed = false;
String csn = cs.name();
System.out.printf("Check malformed <%s>...%n", csn);
for (boolean direct: new boolean[] {false, true}) {
for (byte[] bins : malformed) {
int mlen = bins[0];
byte[] bin = Arrays.copyOfRange(bins, 1, bins.length);
CoderResult cr = decodeCR(bin, cs, direct);
String ashex = "";
for (int i = 0; i < bin.length; i++) {
if (i > 0) ashex += " ";
ashex += Integer.toString((int)bin[i] & 0xff, 16);
}
if (!cr.isMalformed()) {
System.out.printf(" FAIL(direct=%b): [%s] not malformed. -->cr=%s\n", direct, ashex, cr.toString());
failed = true;
} else if (cr.length() != mlen) {
System.out.printf(" FAIL(direct=%b): [%s] malformed[len=%d].\n", direct, ashex, cr.length());
failed = true;
}
}
}
if (failed)
throw new RuntimeException("Check malformed failed " + csn);
}
static boolean check(CharsetDecoder dec, byte[] bytes, boolean direct, int[] flow) {
int inPos = flow[0];
int inLen = flow[1];
int outPos = flow[2];
int outLen = flow[3];
int expedInPos = flow[4];
int expedOutPos = flow[5];
CoderResult expedCR = (flow[6]==0)?CoderResult.UNDERFLOW
:CoderResult.OVERFLOW;
ByteBuffer bbf;
CharBuffer cbf;
if (direct) {
bbf = ByteBuffer.allocateDirect(inPos + bytes.length);
cbf = ByteBuffer.allocateDirect((outPos + outLen)*2).asCharBuffer();
} else {
bbf = ByteBuffer.allocate(inPos + bytes.length);
cbf = CharBuffer.allocate(outPos + outLen);
}
bbf.position(inPos);
bbf.put(bytes).flip().position(inPos).limit(inPos + inLen);
cbf.position(outPos);
dec.reset();
CoderResult cr = dec.decode(bbf, cbf, false);
if (cr != expedCR ||
bbf.position() != expedInPos ||
cbf.position() != expedOutPos) {
System.out.printf("Expected(direct=%5b): [", direct);
for (int i:flow) System.out.print(" " + i);
System.out.println("] CR=" + cr +
", inPos=" + bbf.position() +
", outPos=" + cbf.position());
return false;
}
return true;
}
static void checkUnderOverflow(Charset cs) throws Exception {
String csn = cs.name();
System.out.printf("Check under/overflow <%s>...%n", csn);
CharsetDecoder dec = cs.newDecoder();
boolean failed = false;
//7f, a1a1, 8ea2a1a1, 8ea3a1a1, 8ea7a1a1
//0 1 2 3 7 11
byte[] bytes = new String("\u007f\u3000\u4e42\u4e28\ud840\udc55").getBytes("EUC_TW");
int inlen = bytes.length;
int MAXOFF = 20;
for (int inoff = 0; inoff < MAXOFF; inoff++) {
for (int outoff = 0; outoff < MAXOFF; outoff++) {
int[][] Flows = {
//inpos, inLen, outPos, outLen, inPosEP, outposEP, under(0)/over(1)
//overflow
{inoff, inlen, outoff, 1, inoff + 1, outoff + 1, 1},
{inoff, inlen, outoff, 2, inoff + 3, outoff + 2, 1},
{inoff, inlen, outoff, 3, inoff + 7, outoff + 3, 1},
{inoff, inlen, outoff, 4, inoff + 11, outoff + 4, 1},
{inoff, inlen, outoff, 5, inoff + 11, outoff + 4, 1},
{inoff, inlen, outoff, 6, inoff + 15, outoff + 6, 0},
//underflow
{inoff, 1, outoff, 6, inoff + 1, outoff + 1, 0},
{inoff, 2, outoff, 6, inoff + 1, outoff + 1, 0},
{inoff, 3, outoff, 6, inoff + 3, outoff + 2, 0},
{inoff, 4, outoff, 6, inoff + 3, outoff + 2, 0},
{inoff, 5, outoff, 6, inoff + 3, outoff + 2, 0},
{inoff, 8, outoff, 6, inoff + 7, outoff + 3, 0},
{inoff, 9, outoff, 6, inoff + 7, outoff + 3, 0},
{inoff, 10, outoff, 6, inoff + 7, outoff + 3, 0},
{inoff, 11, outoff, 6, inoff +11, outoff + 4, 0},
{inoff, 12, outoff, 6, inoff +11, outoff + 4, 0},
{inoff, 15, outoff, 6, inoff +15, outoff + 6, 0},
// 2-byte under/overflow
{inoff, 2, outoff, 1, inoff + 1, outoff + 1, 0},
{inoff, 3, outoff, 1, inoff + 1, outoff + 1, 1},
{inoff, 3, outoff, 2, inoff + 3, outoff + 2, 0},
};
for (boolean direct: new boolean[] {false, true}) {
for (int[] flow: Flows) {
if (!check(dec, bytes, direct, flow))
failed = true;
}
}}}
if (failed)
throw new RuntimeException("Check under/overflow failed " + csn);
}
static String[] csnames = new String[] {
"IBM930",
"IBM933",
"IBM935",
"IBM937",
"IBM939",
"IBM942",
"IBM943",
"IBM948",
"IBM949",
"IBM950",
"IBM970",
"IBM942C",
"IBM943C",
"IBM949C",
"IBM1381",
"IBM1383",
"EUC_CN",
"EUC_KR",
"GBK",
"Johab",
"MS932",
"MS936",
"MS949",
"MS950",
"EUC_JP",
"EUC_JP_LINUX",
"EUC_JP_Open",
"SJIS",
"PCK",
};
public static void main(String[] args) throws Exception {
for (String csname: csnames) {
System.out.printf("-----------------------------------%n");
String oldname = csname + "_OLD";
if ("EUC_JP_Open".equals(csname))
csname = "eucjp-open";
checkInit(csname);
Charset csOld = (Charset)Class.forName(oldname).newInstance();
Charset csNew = Charset.forName(csname);
char[] cc = checkEncoding(csOld, csNew);
checkDecoding(csOld, csNew);
compare(csNew, csOld, cc);
if (csname.startsWith("x-IBM93")) {
//ecdbic
checkMalformed(csNew, new byte[][] {
{1, 0x26, 0x0f, 0x27}, // in SBSC, no SI
{1, 0x0e, 0x41, 0x41, 0xe}, // in DBSC, no SO
{2, 0x0e, 0x40, 0x41, 0xe}, // illegal DB
});
} else if (csname.equals("x-IBM970") ||
csname.equals("x-IBM1383")) {
//euc_simple
checkMalformed(csNew, new byte[][] {
{1, 0x26, (byte)0x8f, 0x27}, // SS2
{1, (byte)0xa1, (byte)0xa1, (byte)0x8e, 0x51}, // SS3
});
}
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -23,7 +23,7 @@
/*
* @test
* @bug 6831794 6229811
* @bug 6831794 6229811 8343157
* @summary Test EUC_TW charset
* @modules java.base/sun.nio.cs
*/
@ -131,25 +131,7 @@ public class TestEUC_TW {
return bb;
}
static CoderResult encodeCR(char[] cc, Charset cs, boolean testDirect)
throws Exception {
ByteBuffer bbf;
CharBuffer cbf;
CharsetEncoder enc = cs.newEncoder();
if (testDirect) {
bbf = ByteBuffer.allocateDirect(cc.length * 4);
cbf = ByteBuffer.allocateDirect(cc.length * 2).asCharBuffer();
cbf.put(cc).flip();
} else {
bbf = ByteBuffer.allocate(cc.length * 4);
cbf = CharBuffer.wrap(cc);
}
return enc.encode(cbf, bbf, true);
}
static char[] getEUC_TWChars(boolean skipNR) {
//CharsetEncoder encOLD = Charset.forName("EUC_TW_OLD").newEncoder();
CharsetEncoder encOLD = new EUC_TW_OLD().newEncoder();
CharsetEncoder enc = Charset.forName("EUC_TW").newEncoder();
char[] cc = new char[0x20000];
char[] c2 = new char[2];
@ -160,12 +142,6 @@ public class TestEUC_TW {
//SKIP these 3 NR codepoints if compared to EUC_TW
if (skipNR && (i == 0x4ea0 || i == 0x51ab || i == 0x52f9))
continue;
if (encOLD.canEncode((char)i) != enc.canEncode((char)i)) {
System.out.printf(" Err i=%x: old=%b new=%b%n", i,
encOLD.canEncode((char)i),
enc.canEncode((char)i));
throw new RuntimeException("canEncode() err!");
}
if (enc.canEncode((char)i)) {
cc[pos++] = (char)i;
@ -178,10 +154,6 @@ public class TestEUC_TW {
Character.toChars(i, c2, 0);
cb.clear();cb.put(c2[0]);cb.put(c2[1]);cb.flip();
if (encOLD.canEncode(cb) != enc.canEncode(cb)) {
throw new RuntimeException("canEncode() err!");
}
if (enc.canEncode(cb)) {
//System.out.printf("cp=%x, (%x, %x) %n", i, c2[0] & 0xffff, c2[1] & 0xffff);
cc[pos++] = c2[0];
@ -227,91 +199,6 @@ public class TestEUC_TW {
System.out.printf(" new Encoder :%d%n", t2 - t1);
}
static void compare(Charset cs1, Charset cs2) throws Exception {
char[] cc = getEUC_TWChars(true);
String csn1 = cs1.name();
String csn2 = cs2.name();
System.out.printf("Diff <%s> <%s>...%n", csn1, csn2);
Time t1 = new Time();
Time t2 = new Time();
byte[] bb1 = encode(cc, cs1, false, t1);
byte[] bb2 = encode(cc, cs2, false, t2);
System.out.printf(" Encoding TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(bb1, bb2)) {
System.out.printf(" encoding failed%n");
}
char[] cc2 = decode(bb1, cs2, false, t2);
char[] cc1 = decode(bb1, cs1, false, t1);
System.out.printf(" Decoding TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(cc1, cc2)) {
System.out.printf(" decoding failed%n");
}
bb1 = encode(cc, cs1, true, t1);
bb2 = encode(cc, cs2, true, t2);
System.out.printf(" Encoding(dir) TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(bb1, bb2))
System.out.printf(" encoding (direct) failed%n");
cc1 = decode(bb1, cs1, true, t1);
cc2 = decode(bb1, cs2, true, t2);
System.out.printf(" Decoding(dir) TimeRatio %s/%s: %d,%d :%f%n",
csn2, csn1,
t2.t, t1.t,
(double)(t2.t)/(t1.t));
if (!Arrays.equals(cc1, cc2)) {
System.out.printf(" decoding (direct) failed%n");
}
}
// The first byte is the length of malformed bytes
static byte[][] malformed = {
//{5, (byte)0xF8, (byte)0x80, (byte)0x80, (byte)0x9F, (byte)0x80, (byte)0xC0 },
};
static void checkMalformed(Charset cs) throws Exception {
boolean failed = false;
String csn = cs.name();
System.out.printf("Check malformed <%s>...%n", csn);
for (boolean direct: new boolean[] {false, true}) {
for (byte[] bins : malformed) {
int mlen = bins[0];
byte[] bin = Arrays.copyOfRange(bins, 1, bins.length);
CoderResult cr = decodeCR(bin, cs, direct);
String ashex = "";
for (int i = 0; i < bin.length; i++) {
if (i > 0) ashex += " ";
ashex += Integer.toBinaryString((int)bin[i] & 0xff);
}
if (!cr.isMalformed()) {
System.out.printf(" FAIL(direct=%b): [%s] not malformed.\n", direct, ashex);
failed = true;
} else if (cr.length() != mlen) {
System.out.printf(" FAIL(direct=%b): [%s] malformed[len=%d].\n", direct, ashex, cr.length());
failed = true;
}
}
}
if (failed)
throw new RuntimeException("Check malformed failed " + csn);
}
static boolean check(CharsetDecoder dec, byte[] bytes, boolean direct, int[] flow) {
int inPos = flow[0];
int inLen = flow[1];
@ -419,12 +306,9 @@ public class TestEUC_TW {
public static void main(String[] args) throws Exception {
// be the first one
//checkInit("EUC_TW_OLD");
checkInit("EUC_TW");
Charset euctw = Charset.forName("EUC_TW");
checkRoundtrip(euctw);
compare(euctw, new EUC_TW_OLD());
checkMalformed(euctw);
checkUnderOverflow(euctw);
}
}