// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst 
// Source File Name:   CharacterConverterLC.java
// Class Version:      45.3

package oracle.sql.converter;

import java.sql.SQLException;
import java.util.Vector;

// Referenced classes of package oracle.sql.converter:
//            CharacterConverter

// flag ACC_SUPER is set
public abstract class CharacterConverterLC extends CharacterConverter
{
    // Constants:          169
    // Interfaces:         0
    // Fields:             36
    // Methods:            15
    // Class Attributes:   1


    static final int MAX_7BIT = 127;
    static final int ORACHARMASK = 255;
    static final int UCSCHARWIDTH = 16;
    static final int ORACHARWIDTH = 16;
    static final int ORACHARWITHLCWIDTH = 32;
    static final int BYTEWIDTH = 8;
    static final int HIBYTEMASK = 65280;
    static final int LOWBYTEMASK = 255;
    static final int LOW16BITMASK = 65535;
    static final int BELOW_CJK = 12287;
    static final int INVALID_ORA_CHAR = 65535;
    static final int LEADINGCODEWIDTH = 16;
    static final int LEADINGCODESHIFT = 16;
    static final int LEADINGCODEMASK = 65535;
    static final int LCINDEXWIDTH = 4;
    static final int LCINDEXMASK = 15;
    static final int LCINDEXFACTOR = 2;
    static final int MAXBYTEPERCHAR = 4;
    public int m_ucsL1KeyWidth;
    public int m_oraL1KeyWidth;
    public char m_ucsCharLeadingCode[][];
    public char m_ucsCharLevel1[];
    public char m_ucsCharLevel2[];
    public char m_ucsCharReplacement;
    public char m_1ByteOraCharReplacement;
    public char m_2ByteOraCharReplacement;
    public int m_ucsL1KeyShift;
    int m_ucsL1KeyMask;
    int m_ucsL2KeyMask;
    public int m_oraL1KeyShift;
    int m_oraL1KeyMask;
    int m_oraL2KeyMask;
    public char m_oraCharLevel1[];
    public char m_oraCharLevel2[];
    public byte m_oraLcIndex[];
    public int extraUnicodeToOracleMapping[][];

    // Decompiling method: <init>  Signature: ()V
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 101 bytes, Code offset: 2443
    // Line Number Table found: 21 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 101 Range 0 100 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 101 Range 0 100 Init 0 fixed
    CharacterConverterLC()
    {
        super();
        m_ucsL1KeyWidth = 0;
        m_oraL1KeyWidth = 0;
        m_ucsCharLeadingCode = null;
        m_ucsCharLevel1 = null;
        m_ucsCharLevel2 = null;
        m_ucsCharReplacement = '\0';
        m_1ByteOraCharReplacement = '\0';
        m_2ByteOraCharReplacement = '\0';
        m_ucsL1KeyShift = 0;
        m_ucsL1KeyMask = 0;
        m_ucsL2KeyMask = 0;
        m_oraL1KeyShift = 0;
        m_oraL1KeyMask = 0;
        m_oraL2KeyMask = 0;
        m_oraCharLevel1 = null;
        m_oraCharLevel2 = null;
        m_oraLcIndex = null;
        extraUnicodeToOracleMapping = null;
        m_groupId = 8;
        return;
    }

    // Decompiling method: buildUnicodeToOracleMapping  Signature: ()V
    // Max stack: 6, #locals: 23, #params: 1
    // Code length: 846 bytes, Code offset: 2662
    // Line Number Table found: 108 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 846 Range 0 845 Init 0 fixed
    // RetValue  23 added: Name <returnValue> Type V At 0 846 Range 0 845 Init 0 fixed
    // LocalVar   1 added: Name i Type I At 39 37 Range 39 75 Init 39
    // LocalVar   2 added: Name j Type I At 44 653 Range 44 696 Init 44
    // LocalVar   3 added: Name k Type I At 50 649 Range 50 698 Init 50
    // LocalVar   4 added: Name l Type I At 56 650 Range 56 705 Init 56
    // LocalVar   5 added: Name i1 Type I At 77 395 Range 77 471 Init 77
    // LocalVar   6 added: Name ac Type [C At 83 747 Range 83 829 Init 83
    // LocalVar   7 added: Name ac1 Type [[C At 92 363 Range 92 454 Init 92
    // LocalVar   8 added: Name flag Type Z At 95 34 Range 95 128 Init 95
    // LocalVar   8 chged: Name j1 Oname flag Type I At 127 2 Range 95 128 Init 95
    // LocalVar  12 added: Name k1 Type I At 136 124 Range 136 259 Init 136
    // LocalVar  13 added: Name c Type C At 142 432 Range 142 573 Init 142
    // LocalVar  15 added: Name flag Type Z At 145 123 Range 145 267 Init 145
    // LocalVar  15 chged: Name l1 Oname flag Type I At 266 2 Range 145 267 Init 145
    // LocalVar  12 added: Name i2 Type I At 288 91 Range 288 378 Init 288
    // LocalVar   8 added: Name flag Type Z At 291 86 Range 291 376 Init 291
    // LocalVar   8 chged: Name j2 Oname flag Type I At 375 2 Range 291 376 Init 291
    // LocalVar  16 added: Name k2 Type I At 386 67 Range 386 452 Init 386
    // LocalVar  17 added: Name l2 Type I At 390 136 Range 390 525 Init 390
    // LocalVar  18 added: Name flag Type Z At 393 40 Range 393 432 Init 393
    // LocalVar   8 added: Name flag1 Type Z At 396 74 Range 396 469 Init 396
    // LocalVar   8 chged: Name i3 Oname flag1 Type I At 468 2 Range 396 469 Init 396
    // LocalVar  20 added: Name ac2 Type [C At 479 357 Range 479 835 Init 479
    // LocalVar  21 added: Name abyte0 Type [B At 489 353 Range 489 841 Init 489
    // LocalVar   8 added: Name flag1 Type Z At 492 32 Range 492 523 Init 492
    // LocalVar   8 chged: Name j3 Oname flag1 Type I At 522 2 Range 492 523 Init 492
    // LocalVar  12 added: Name k3 Type I At 531 116 Range 531 646 Init 531
    // LocalVar  15 added: Name flag1 Type Z At 534 121 Range 534 654 Init 534
    // LocalVar  15 chged: Name l3 Oname flag1 Type I At 653 2 Range 534 654 Init 534
    // LocalVar  12 added: Name i4 Type I At 675 149 Range 675 823 Init 675
    // LocalVar   8 added: Name flag1 Type Z At 678 144 Range 678 821 Init 678
    // LocalVar   8 chged: Name j4 Oname flag1 Type I At 820 2 Range 678 821 Init 678
    // LocalVar  14 added: Name c1 Type C At 159 13 Range 159 171 Init 159
    // LocalVar   8 added: Name flag1 Type Z At 162 96 Range 162 257 Init 162
    // LocalVar   8 chged: Name k4 Oname flag1 Type I At 256 2 Range 162 257 Init 162
    // LocalVar  11 added: Name l4 Type I At 305 18 Range 305 322 Init 305
    // LocalVar   9 added: Name i5 Type I At 313 53 Range 313 365 Init 313
    // LocalVar  10 added: Name j5 Type I At 326 44 Range 326 369 Init 326
    // LocalVar  19 added: Name c2 Type C At 416 22 Range 416 437 Init 416
    // LocalVar  18 chged: Name k5 Oname flag Type I At 424 2 Range 393 432 Init 393
    // LocalVar  14 added: Name c3 Type C At 548 11 Range 548 558 Init 548
    // LocalVar   8 added: Name flag Type Z At 551 94 Range 551 644 Init 551
    // LocalVar   8 chged: Name l5 Oname flag Type I At 643 2 Range 551 644 Init 551
    // LocalVar  11 added: Name i6 Type I At 692 12 Range 692 703 Init 692
    // LocalVar   9 added: Name j6 Type I At 700 13 Range 700 712 Init 700
    // LocalVar  10 added: Name k6 Type I At 707 9 Range 707 715 Init 707
    // LocalVar  22 added: Name l6 Type I At 717 76 Range 717 792 Init 717
    // LocalVar  14 added: Name i7 Type I At 759 10 Range 759 768 Init 759
    // LocalVar  15 added: Name flag Type Z At 762 47 Range 762 808 Init 762
    // LocalVar  15 chged: Name j7 Oname flag Type I At 807 2 Range 762 808 Init 762
    // LocalVar  11 added: Name c4 Type C At 179 25 Range 179 203 Init 179
    // LocalVar   9 added: Name k7 Type I At 194 53 Range 194 246 Init 194
    // LocalVar  10 added: Name l7 Type I At 207 44 Range 207 250 Init 207
    // LocalVar  11 added: Name c5 Type C At 568 19 Range 568 586 Init 568
    // LocalVar   9 added: Name i8 Type I At 583 13 Range 583 595 Init 583
    // LocalVar  10 added: Name j8 Type I At 590 9 Range 590 598 Init 590
    // LocalVar  22 added: Name k8 Type I At 600 32 Range 600 631 Init 600
    // LocalVar  12 name k3(I) merged out into k1(I)
    // LocalVar  12 name i2(I) merged out into k1(I)
    public void buildUnicodeToOracleMapping()
    {
        m_ucsL1KeyShift = 16 - m_ucsL1KeyWidth;
        m_ucsL1KeyMask = (1 << m_ucsL1KeyWidth) - 1;
        m_ucsL2KeyMask = (1 << m_ucsL1KeyShift) - 1;
        int i = m_oraL1KeyWidth;
        int j = 16 - i;
        int k = (1 << i) - 1;
        int l = (1 << j) - 1;
        m_oraL1KeyShift = j;
        m_oraL1KeyMask = k;
        m_oraL2KeyMask = l;
        int i1 = 1 << i;
        char ac[] = new char[i1];
        char ac1[][] = new char[i1][2];
        for(int j1 = 0; j1 < i1; j1++)
        {
            ac[j1] = '\0';
            ac1[j1][0] = (char)l;
            ac1[j1][1] = '\0';
        }

        int k5 = 0x10000;
        char c2 = m_ucsCharReplacement;
        for(int j6 = 0; j6 < m_ucsCharLeadingCode.length; j6++)
        {
            char c3 = m_ucsCharLeadingCode[j6][0];
            for(int k1 = 0; k1 < k5; k1++)
            {
                char c = toUnicodeWithReplacement(k1 | c3 << 16);
                if(c != c2)
                {
                    int i3 = c >> j & k;
                    ac[i3] = '\001';
                    int i4 = c & l;
                    if(i4 < ac1[i3][0])
                    {
                        ac1[i3][0] = (char)i4;
                    }
                    if(i4 > ac1[i3][1])
                    {
                        ac1[i3][1] = (char)i4;
                    }
                }
            }

        }

        if(extraUnicodeToOracleMapping != null)
        {
            k5 = extraUnicodeToOracleMapping.length;
            for(int l1 = 0; l1 < k5; l1++)
            {
                int i5 = extraUnicodeToOracleMapping[l1][0];
                int j3 = i5 >> j & k;
                ac[j3] = '\001';
                int j4 = i5 & l;
                if(j4 < ac1[j3][0])
                {
                    ac1[j3][0] = (char)j4;
                }
                if(j4 > ac1[j3][1])
                {
                    ac1[j3][1] = (char)j4;
                }
            }

        }
        int i7 = l + 1;
        int j7 = i7;
        int k7 = 0;
        for(int i2 = 0; i2 < i1; i2++)
        {
            if(ac[i2] != 0)
            {
                char c5 = ac1[i2][0];
                ac[i2] = (char)(j7 - (k7 >= c5 ? c5 : k7));
                j7 = ac[i2] + i7;
                k7 = i7 - ac1[i2][1] - 1;
            }
        }

        char ac2[] = new char[j7];
        byte abyte0[] = new byte[(j7 + 1) / 2];
        for(int j2 = 0; j2 < j7; j2++)
        {
            ac2[j2] = '\uFFFF';
            if(j2 % 2 == 0)
            {
                abyte0[j2 / 2] = 0;
            }
        }

        k5 = 0x10000;
        for(int k6 = 0; k6 < m_ucsCharLeadingCode.length; k6++)
        {
            char c4 = m_ucsCharLeadingCode[k6][0];
            for(int k2 = 0; k2 < k5; k2++)
            {
                char c1 = toUnicodeWithReplacement(c4 << 16 | k2);
                if(c1 != c2)
                {
                    int k3 = c1 >> j & k;
                    int k4 = c1 & l;
                    int l7 = ac[k3] + k4;
                    if(ac2[l7] == '\uFFFF')
                    {
                        ac2[l7] = (char)k2;
                    }
                    abyte0[l7 / 2] |= k6 << (l7 % 2) * 4;
                }
            }

        }

        if(extraUnicodeToOracleMapping != null)
        {
            int l5 = extraUnicodeToOracleMapping.length;
            for(int l2 = 0; l2 < l5; l2++)
            {
                int j5 = extraUnicodeToOracleMapping[l2][0];
                int l3 = j5 >> j & k;
                int l4 = j5 & l;
                int i8 = ac[l3] + l4;
                if(ac2[i8] == '\uFFFF')
                {
                    ac2[i8] = (char)extraUnicodeToOracleMapping[l2][1];
                }
                int i6 = extraUnicodeToOracleMapping[l2][1] >> 16 & 0xffff;
                for(int l6 = 0; l6 < m_ucsCharLeadingCode.length; l6++)
                {
                    if(i6 != m_ucsCharLeadingCode[l6][0])
                    {
                        continue;
                    }
                    abyte0[i8 / 2] |= l6 << (i8 % 2) * 4;
                    break;
                }

            }

        }
        m_oraCharLevel1 = ac;
        m_oraCharLevel2 = ac2;
        m_oraLcIndex = abyte0;
        return;
    }

    // Decompiling method: extractCodepoints  Signature: (Ljava/util/Vector;)V
    // Max stack: 4, #locals: 8, #params: 2
    // Code length: 91 bytes, Code offset: 3974
    // Exception table: 1 entries
    //           start  33 end 60 handler 63 type SQLException
    // Line Number Table found: 16 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 91 Range 0 90 Init 0 fixed
    // Parameter  1 added: Name vector Type Ljava/util/Vector; At 0 91 Range 0 90 Init 0
    // RetValue   8 added: Name <returnValue> Type V At 0 91 Range 0 90 Init 0 fixed
    // LocalVar   6 added: Name flag Type Z At 1 81 Range 1 81 Init 1
    // LocalVar   6 chged: Name i Oname flag Type I At 80 2 Range 1 81 Init 1
    // LocalVar   2 added: Name c Type C At 15 2 Range 15 16 Init 15
    // LocalVar   3 added: Name j Type I At 20 8 Range 20 27 Init 20
    // LocalVar   4 added: Name k Type I At 25 49 Range 25 73 Init 25
    // LocalVar   7 added: Name l Type I At 28 44 Range 28 71 Init 28
    // LocalVar   5 added: Name ai Type [I At 36 21 Range 36 56 Init 36
    public void extractCodepoints(Vector vector)
    {
        for(int k = 0; k < m_ucsCharLeadingCode.length; k++)
        {
            char c = m_ucsCharLeadingCode[k][0];
            int i = c << 16;
            int j = i + 65535;
            for(int l = i; l <= j; l++)
            {
                try
                {
                    int ai[] = new int[2];
                    ai[0] = l;
                    ai[1] = toUnicode(l);
                    vector.addElement(ai);
                }
                catch(SQLException _ex) { }
            }

        }

        return;
    }

    // Decompiling method: extractExtraMappings  Signature: (Ljava/util/Vector;)V
    // Max stack: 3, #locals: 3, #params: 2
    // Code length: 36 bytes, Code offset: 4171
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 36 Range 0 35 Init 0 fixed
    // Parameter  1 added: Name vector Type Ljava/util/Vector; At 0 36 Range 0 35 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 36 Range 0 35 Init 0 fixed
    // LocalVar   2 added: Name flag Type Z At 9 18 Range 9 26 Init 9
    // LocalVar   2 chged: Name i Oname flag Type I At 26 1 Range 9 26 Init 9
    public void extractExtraMappings(Vector vector)
    {
        if(extraUnicodeToOracleMapping == null)
        {
            return;
        }
        for(int i = 0; i < extraUnicodeToOracleMapping.length; i++)
        {
            vector.addElement(extraUnicodeToOracleMapping[i]);
        }

        return;
    }

    // Decompiling method: getLeadingCodes  Signature: ()[C
    // Max stack: 4, #locals: 3, #params: 1
    // Code length: 35 bytes, Code offset: 4265
    // Line Number Table found: 5 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 35 Range 0 34 Init 0 fixed
    // RetValue   3 added: Name <returnValue> Type [C At 0 35 Range 0 34 Init 0 fixed
    // LocalVar   1 added: Name ac Type [C At 7 27 Range 7 33 Init 7
    // LocalVar   2 added: Name flag Type Z At 9 19 Range 9 27 Init 9
    // LocalVar   2 chged: Name i Oname flag Type I At 27 1 Range 9 27 Init 9
    public char[] getLeadingCodes()
    {
        char ac[] = new char[m_ucsCharLeadingCode.length];
        for(int i = 0; i < ac.length; i++)
        {
            ac[i] = m_ucsCharLeadingCode[i][0];
        }

        return ac;
    }

    // Decompiling method: getOraChar1ByteRep  Signature: ()C
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 4354
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type C At 0 5 Range 0 4 Init 0 fixed
    public char getOraChar1ByteRep()
    {
        return m_1ByteOraCharReplacement;
    }

    // Decompiling method: getOraChar2ByteRep  Signature: ()C
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 4397
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type C At 0 5 Range 0 4 Init 0 fixed
    public char getOraChar2ByteRep()
    {
        return m_2ByteOraCharReplacement;
    }

    // Decompiling method: getUCS2CharRep  Signature: ()C
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 4440
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type C At 0 5 Range 0 4 Init 0 fixed
    public char getUCS2CharRep()
    {
        return m_ucsCharReplacement;
    }

    // Decompiling method: hasExtraMappings  Signature: ()Z
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 13 bytes, Code offset: 4483
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 13 Range 0 12 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type Z At 0 13 Range 0 12 Init 0 fixed
    public boolean hasExtraMappings()
    {
        return extraUnicodeToOracleMapping != null;
    }

    // Decompiling method: toOracleCharacter  Signature: (C)I
    // Max stack: 3, #locals: 8, #params: 2
    // Code length: 105 bytes, Code offset: 4534
    // Line Number Table found: 16 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 105 Range 0 104 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 105 Range 0 104 Init 0
    // RetValue   8 added: Name <returnValue> Type I At 0 105 Range 0 104 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 11 13 Range 11 23 Init 11
    // LocalVar   3 added: Name j Type I At 18 8 Range 18 25 Init 18
    // LocalVar   4 added: Name k Type I At 27 22 Range 27 48 Init 27
    // LocalVar   5 added: Name c1 Type C At 36 68 Range 36 103 Init 36
    // LocalVar   6 added: Name l Type I At 57 8 Range 57 64 Init 57
    // LocalVar   7 added: Name c2 Type C At 68 11 Range 68 78 Init 68
    // LocalVar   5 chged: Name i1 Oname c1 Type I At 83 21 Range 36 103 Init 36
    int toOracleCharacter(char c)
        throws SQLException
    {
        int i = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int j = c & m_oraL2KeyMask;
        int k = m_oraCharLevel1[i] + j;
        int l = m_oraCharLevel2[k];
        int i1 = m_oraLcIndex[k / 2] >> (k % 2) * 4 & 0xf;
        char c1 = m_ucsCharLeadingCode[i1][0];
        if(c1 != 0)
        {
            l |= c1 << 16;
        }
        if(l == 65535)
        {
            throw new SQLException("Cannot map Unicode to Oracle character.");
        } else
        {
            return l;
        }
    }

    // Decompiling method: toOracleCharacterWithReplacement  Signature: (C)I
    // Max stack: 3, #locals: 8, #params: 2
    // Code length: 112 bytes, Code offset: 4747
    // Line Number Table found: 18 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 112 Range 0 111 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 112 Range 0 111 Init 0
    // RetValue   8 added: Name <returnValue> Type I At 0 112 Range 0 111 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 11 13 Range 11 23 Init 11
    // LocalVar   3 added: Name j Type I At 18 8 Range 18 25 Init 18
    // LocalVar   4 added: Name k Type I At 27 22 Range 27 48 Init 27
    // LocalVar   5 added: Name c1 Type C At 36 75 Range 36 110 Init 36
    // LocalVar   6 added: Name l Type I At 57 8 Range 57 64 Init 57
    // LocalVar   7 added: Name c2 Type C At 68 11 Range 68 78 Init 68
    // LocalVar   5 chged: Name i1 Oname c1 Type I At 83 28 Range 36 110 Init 36
    int toOracleCharacterWithReplacement(char c)
    {
        int i = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int j = c & m_oraL2KeyMask;
        int k = m_oraCharLevel1[i] + j;
        int l = m_oraCharLevel2[k];
        int i1 = m_oraLcIndex[k / 2] >> (k % 2) * 4 & 0xf;
        char c1 = m_ucsCharLeadingCode[i1][0];
        if(c1 != 0)
        {
            l |= c1 << 16;
        }
        if(l == 65535)
        {
            if(c > '\u2FFF')
            {
                return m_2ByteOraCharReplacement;
            } else
            {
                return m_1ByteOraCharReplacement;
            }
        } else
        {
            return l;
        }
    }

    // Decompiling method: toOracleString  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 12, #params: 2
    // Code length: 197 bytes, Code offset: 4965
    // Line Number Table found: 30 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 197 Range 0 196 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 197 Range 0 196 Init 0
    // RetValue  12 added: Name <returnValue> Type [B At 0 197 Range 0 196 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 160 Range 4 163 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 31 Range 16 46 Init 16
    // LocalVar   4 added: Name j Type I At 28 143 Range 28 170 Init 28
    // LocalVar   5 added: Name abyte0 Type [B At 34 162 Range 34 195 Init 34
    // LocalVar   9 added: Name flag Type Z At 37 151 Range 37 187 Init 37
    // LocalVar  10 added: Name flag1 Type Z At 40 123 Range 40 162 Init 40
    // LocalVar  10 chged: Name k Oname flag1 Type I At 161 2 Range 40 162 Init 40
    // LocalVar   9 chged: Name l Oname flag Type I At 167 2 Range 37 187 Init 37
    // LocalVar  11 added: Name abyte1 Type [B At 178 15 Range 178 192 Init 178
    // LocalVar   6 added: Name i1 Type I At 53 103 Range 53 155 Init 53
    // LocalVar   8 added: Name j1 Type I At 64 39 Range 64 102 Init 64
    // LocalVar   7 added: Name k1 Type I At 75 14 Range 75 88 Init 75
    // LocalVar   7 added: Name l1 Type I At 128 14 Range 128 141 Init 128
    public byte[] toOracleString(String s)
        throws SQLException
    {
        int i = s.length();
        if(i == 0)
        {
            return new byte[0];
        }
        char ac[] = new char[i];
        s.getChars(0, i, ac, 0);
        int j = i * 4;
        byte abyte0[] = new byte[j];
        int k1 = 0;
        for(int l1 = 0; l1 < i; l1++)
        {
            int k = toOracleCharacter(ac[l1]);
            int i1;
            int j1;
            if((j1 = k >> 16 & 0xffff) != 0)
            {
                int l;
                if((l = j1 & 0xff00) != 0)
                {
                    abyte0[k1++] = (byte)(l >> 8);
                }
                abyte0[k1++] = (byte)j1;
                abyte0[k1++] = (byte)(k >> 8);
            } else
            if((i1 = k & 0xff00) != 0)
            {
                abyte0[k1++] = (byte)(i1 >> 8);
            }
            abyte0[k1++] = (byte)k;
        }

        if(k1 < j)
        {
            byte abyte1[] = new byte[k1];
            System.arraycopy(abyte0, 0, abyte1, 0, k1);
            return abyte1;
        } else
        {
            return abyte0;
        }
    }

    // Decompiling method: toOracleStringWithReplacement  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 12, #params: 2
    // Code length: 197 bytes, Code offset: 5326
    // Line Number Table found: 30 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 197 Range 0 196 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 197 Range 0 196 Init 0
    // RetValue  12 added: Name <returnValue> Type [B At 0 197 Range 0 196 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 160 Range 4 163 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 31 Range 16 46 Init 16
    // LocalVar   4 added: Name j Type I At 28 143 Range 28 170 Init 28
    // LocalVar   5 added: Name abyte0 Type [B At 34 162 Range 34 195 Init 34
    // LocalVar   9 added: Name flag Type Z At 37 151 Range 37 187 Init 37
    // LocalVar  10 added: Name flag1 Type Z At 40 123 Range 40 162 Init 40
    // LocalVar  10 chged: Name k Oname flag1 Type I At 161 2 Range 40 162 Init 40
    // LocalVar   9 chged: Name l Oname flag Type I At 167 2 Range 37 187 Init 37
    // LocalVar  11 added: Name abyte1 Type [B At 178 15 Range 178 192 Init 178
    // LocalVar   6 added: Name i1 Type I At 53 103 Range 53 155 Init 53
    // LocalVar   8 added: Name j1 Type I At 64 39 Range 64 102 Init 64
    // LocalVar   7 added: Name k1 Type I At 75 14 Range 75 88 Init 75
    // LocalVar   7 added: Name l1 Type I At 128 14 Range 128 141 Init 128
    public byte[] toOracleStringWithReplacement(String s)
    {
        int i = s.length();
        if(i == 0)
        {
            return new byte[0];
        }
        char ac[] = new char[i];
        s.getChars(0, i, ac, 0);
        int j = i * 4;
        byte abyte0[] = new byte[j];
        int k1 = 0;
        for(int l1 = 0; l1 < i; l1++)
        {
            int k = toOracleCharacterWithReplacement(ac[l1]);
            int i1;
            int j1;
            if((j1 = k >> 16 & 0xffff) != 0)
            {
                int l;
                if((l = j1 & 0xff00) != 0)
                {
                    abyte0[k1++] = (byte)(l >> 8);
                }
                abyte0[k1++] = (byte)j1;
                abyte0[k1++] = (byte)(k >> 8);
            } else
            if((i1 = k & 0xff00) != 0)
            {
                abyte0[k1++] = (byte)(i1 >> 8);
            }
            abyte0[k1++] = (byte)k;
        }

        if(k1 < j)
        {
            byte abyte1[] = new byte[k1];
            System.arraycopy(abyte0, 0, abyte1, 0, k1);
            return abyte1;
        } else
        {
            return abyte0;
        }
    }

    // Decompiling method: toUnicode  Signature: (I)C
    // Max stack: 3, #locals: 8, #params: 2
    // Code length: 137 bytes, Code offset: 5677
    // Line Number Table found: 17 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 137 Range 0 136 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 137 Range 0 136 Init 0
    // RetValue   8 added: Name <returnValue> Type C At 0 137 Range 0 136 Init 0 fixed
    // LocalVar   2 added: Name flag Type Z At 1 86 Range 1 86 Init 1
    // LocalVar   3 added: Name j Type I At 9 8 Range 9 16 Init 9
    // LocalVar   4 added: Name flag1 Type Z At 11 46 Range 11 56 Init 11
    // LocalVar   4 chged: Name k Oname flag1 Type I At 45 2 Range 11 56 Init 11
    // LocalVar   2 chged: Name l Oname flag Type I At 86 1 Range 1 86 Init 1
    // LocalVar   5 added: Name i1 Type I At 88 20 Range 88 107 Init 88
    // LocalVar   6 added: Name j1 Type I At 96 15 Range 96 110 Init 96
    // LocalVar   7 added: Name c Type C At 113 23 Range 113 135 Init 113
    char toUnicode(int i)
        throws SQLException
    {
        int j = 0;
        int k = i >> 16 & 0xffff;
        int l;
        for(l = 0; l < m_ucsCharLeadingCode.length; l++)
        {
            if(k != m_ucsCharLeadingCode[l][0])
            {
                continue;
            }
            j = m_ucsCharLeadingCode[l][1];
            break;
        }

        if(l == m_ucsCharLeadingCode.length)
        {
            throw new SQLException("Cannot map Oracle character to Unicode.");
        }
        int i1 = (i >> m_ucsL1KeyShift & m_ucsL1KeyMask) + j;
        int j1 = i & m_ucsL2KeyMask;
        char c = m_ucsCharLevel2[m_ucsCharLevel1[i1] + j1];
        if(c == m_ucsCharReplacement)
        {
            throw new SQLException("Cannot map Oracle character to Unicode.");
        } else
        {
            return c;
        }
    }

    // Decompiling method: toUnicodeWithReplacement  Signature: (I)C
    // Max stack: 3, #locals: 7, #params: 2
    // Code length: 109 bytes, Code offset: 5926
    // Line Number Table found: 14 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterLC; At 0 109 Range 0 108 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 109 Range 0 108 Init 0
    // RetValue   7 added: Name <returnValue> Type C At 0 109 Range 0 108 Init 0 fixed
    // LocalVar   2 added: Name flag Type Z At 1 81 Range 1 81 Init 1
    // LocalVar   3 added: Name j Type I At 9 8 Range 9 16 Init 9
    // LocalVar   4 added: Name flag1 Type Z At 11 46 Range 11 56 Init 11
    // LocalVar   4 chged: Name k Oname flag1 Type I At 45 2 Range 11 56 Init 11
    // LocalVar   2 chged: Name l Oname flag Type I At 81 1 Range 1 81 Init 1
    // LocalVar   5 added: Name i1 Type I At 83 20 Range 83 102 Init 83
    // LocalVar   6 added: Name j1 Type I At 91 15 Range 91 105 Init 91
    char toUnicodeWithReplacement(int i)
    {
        int j = 0;
        int k = i >> 16 & 0xffff;
        int l;
        for(l = 0; l < m_ucsCharLeadingCode.length; l++)
        {
            if(k != m_ucsCharLeadingCode[l][0])
            {
                continue;
            }
            j = m_ucsCharLeadingCode[l][1];
            break;
        }

        if(l == m_ucsCharLeadingCode.length)
        {
            return m_ucsCharReplacement;
        } else
        {
            int i1 = (i >> m_ucsL1KeyShift & m_ucsL1KeyMask) + j;
            int j1 = i & m_ucsL2KeyMask;
            return m_ucsCharLevel2[m_ucsCharLevel1[i1] + j1];
        }
    }
}
