All pastes #768980 Raw Edit

haxerownsmopar

public java v1 · immutable
·published 2007-11-11 01:01 UTC
rendered paste body
	public byte[] unpack(byte b[]) throws IOException { 		int u = ((b[1] & 0xff) << 32) + ((b[2] & 0xff) << 16) + ((b[3] & 0xff) << 8) + (b[4] & 0xff); 		byte o[] = null;		if(b[0] == 0){	// 0 = No compression.			int p = ((b[5] & 0xff) << 32) + ((b[6] & 0xff) << 16) + ((b[7] & 0xff) << 8) + (b[8] & 0xff);			o = new byte[u];		}		if(b[0] == 1){	// 1 = Jag compression.			int p = ((b[5] & 0xff) << 32) + ((b[6] & 0xff) << 16) + ((b[7] & 0xff) << 8) + (b[8] & 0xff);			o = new byte[p];            JagPackFile.method73(o, p, b, u, 9);		}		if(b[0] == 2){	// 2 = GZip compression.			int p = ((b[5] & 0xff) << 32) + ((b[6] & 0xff) << 16) + ((b[7] & 0xff) << 8) + (b[8] & 0xff);				DataInputStream datainputstream = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(b, 9, u)));				o = new byte[p];				datainputstream.readFully(o);				datainputstream.close();		} 		return o; 	}/* * Class4.java * not sure who orignally renamed this, had it sitting in a deob.*/import java.io.PrintStream;public final class JagPackFile{    private static byte method67(JagPackFileHeader class5)    {        return (byte)method74(8, class5);    }    private static void method68(JagPackFileHeader class5)    {        boolean flag = false;        boolean flag1 = false;        boolean flag2 = false;        boolean flag3 = false;        boolean flag4 = false;        boolean flag5 = false;        boolean flag6 = false;        boolean flag7 = false;        boolean flag8 = false;        boolean flag9 = false;        boolean flag10 = false;        boolean flag11 = false;        boolean flag12 = false;        boolean flag13 = false;        boolean flag14 = false;        boolean flag15 = false;        boolean flag16 = false;        boolean flag17 = false;        boolean flag18 = false;        boolean flag19 = false;        int k8 = 0;        int ai[] = null;        int ai1[] = null;        int ai2[] = null;        class5.anInt69 = 1;        if(JagPackFileHeader.anIntArray78 == null)            JagPackFileHeader.anIntArray78 = new int[class5.anInt69 * 0x186a0];        boolean flag20 = true;        while(flag20)         {            byte byte0 = method67(class5);            if(byte0 == 23)                return;            byte0 = method67(class5);            byte0 = method67(class5);            byte0 = method67(class5);            byte0 = method67(class5);            byte0 = method67(class5);            class5.anInt70++;            byte0 = method67(class5);            byte0 = method67(class5);            byte0 = method67(class5);            byte0 = method67(class5);            byte0 = method71(class5);            if(byte0 != 0)                class5.aBoolean66 = true;            else                class5.aBoolean66 = false;            if(class5.aBoolean66)                System.out.println("PANIC! RANDOMISED BLOCK!");            class5.anInt71 = 0;            byte0 = method67(class5);            class5.anInt71 = class5.anInt71 << 8 | byte0 & 0xff;            byte0 = method67(class5);            class5.anInt71 = class5.anInt71 << 8 | byte0 & 0xff;            byte0 = method67(class5);            class5.anInt71 = class5.anInt71 << 8 | byte0 & 0xff;            for(int j = 0; j < 16; j++)            {                byte byte1 = method71(class5);                if(byte1 == 1)                    class5.aBooleanArray81[j] = true;                else                    class5.aBooleanArray81[j] = false;            }            for(int k = 0; k < 256; k++)                class5.aBooleanArray80[k] = false;            for(int l = 0; l < 16; l++)                if(class5.aBooleanArray81[l])                {                    for(int i3 = 0; i3 < 16; i3++)                    {                        byte byte2 = method71(class5);                        if(byte2 == 1)                            class5.aBooleanArray80[l * 16 + i3] = true;                    }                }            method70(class5);            int i4 = class5.anInt79 + 2;            int j4 = method74(3, class5);            int k4 = method74(15, class5);            for(int i1 = 0; i1 < k4; i1++)            {                int j3 = 0;                do                {                    byte byte3 = method71(class5);                    if(byte3 == 0)                        break;                    j3++;                } while(true);                class5.aByteArray86[i1] = (byte)j3;            }            byte abyte0[] = new byte[6];            for(byte byte16 = 0; byte16 < j4; byte16++)                abyte0[byte16] = byte16;            for(int j1 = 0; j1 < k4; j1++)            {                byte byte17 = class5.aByteArray86[j1];                byte byte15 = abyte0[byte17];                for(; byte17 > 0; byte17--)                    abyte0[byte17] = abyte0[byte17 - 1];                abyte0[0] = byte15;                class5.aByteArray85[j1] = byte15;            }            for(int k3 = 0; k3 < j4; k3++)            {                int l6 = method74(5, class5);                int k1 = 0;                do                {                    do                    {                        byte byte4 = method71(class5);                        if(byte4 == 0)                            break;                        byte4 = method71(class5);                        if(byte4 == 0)                            l6++;                        else                            l6--;                    } while(true);                    class5.aByteArrayArray87[k3][k1] = (byte)l6;                } while(++k1 < i4);            }            for(int l3 = 0; l3 < j4; l3++)            {                byte byte8 = 32;                int i = 0;                for(int l1 = 0; l1 < i4; l1++)                {                    if(class5.aByteArrayArray87[l3][l1] > i)                        i = class5.aByteArrayArray87[l3][l1];                    if(class5.aByteArrayArray87[l3][l1] < byte8)                        byte8 = class5.aByteArrayArray87[l3][l1];                }                method72(class5.anIntArrayArray88[l3], class5.anIntArrayArray89[l3], class5.anIntArrayArray90[l3], class5.aByteArrayArray87[l3], byte8, i, i4);                class5.anIntArray91[l3] = byte8;            }            int l4 = class5.anInt79 + 1;            int l5 = 0x186a0 * class5.anInt69;            int i5 = -1;            int j5 = 0;            for(int i2 = 0; i2 <= 255; i2++)                class5.anIntArray74[i2] = 0;            int l9 = 4095;            for(int l8 = 15; l8 >= 0; l8--)            {                for(int j9 = 15; j9 >= 0; j9--)                {                    class5.aByteArray83[l9] = (byte)(l8 * 16 + j9);                    l9--;                }                class5.anIntArray84[l8] = l9 + 1;            }            int i6 = 0;            if(j5 == 0)            {                i5++;                j5 = 50;                byte byte12 = class5.aByteArray85[i5];                k8 = class5.anIntArray91[byte12];                ai = class5.anIntArrayArray88[byte12];                ai2 = class5.anIntArrayArray90[byte12];                ai1 = class5.anIntArrayArray89[byte12];            }            j5--;            int i7 = k8;            int l7;            byte byte9;            for(l7 = method74(i7, class5); l7 > ai[i7]; l7 = l7 << 1 | byte9)            {                i7++;                byte9 = method71(class5);            }            for(int k5 = ai2[l7 - ai1[i7]]; k5 != l4;)                if(k5 == 0 || k5 == 1)                {                    int j6 = -1;                    int k6 = 1;                    do                    {                        if(k5 == 0)                            j6 += 1 * k6;                        else                        if(k5 == 1)                            j6 += 2 * k6;                        k6 *= 2;                        if(j5 == 0)                        {                            i5++;                            j5 = 50;                            byte byte13 = class5.aByteArray85[i5];                            k8 = class5.anIntArray91[byte13];                            ai = class5.anIntArrayArray88[byte13];                            ai2 = class5.anIntArrayArray90[byte13];                            ai1 = class5.anIntArrayArray89[byte13];                        }                        j5--;                        int j7 = k8;                        int i8;                        byte byte10;                        for(i8 = method74(j7, class5); i8 > ai[j7]; i8 = i8 << 1 | byte10)                        {                            j7++;                            byte10 = method71(class5);                        }                        k5 = ai2[i8 - ai1[j7]];                    } while(k5 == 0 || k5 == 1);                    j6++;                    byte byte5 = class5.aByteArray82[class5.aByteArray83[class5.anIntArray84[0]] & 0xff];                    class5.anIntArray74[byte5 & 0xff] += j6;                    for(; j6 > 0; j6--)                    {                        JagPackFileHeader.anIntArray78[i6] = byte5 & 0xff;                        i6++;                    }                } else                {                    int j11 = k5 - 1;                    byte byte6;                    if(j11 < 16)                    {                        int j10 = class5.anIntArray84[0];                        byte6 = class5.aByteArray83[j10 + j11];                        for(; j11 > 3; j11 -= 4)                        {                            int k11 = j10 + j11;                            class5.aByteArray83[k11] = class5.aByteArray83[k11 - 1];                            class5.aByteArray83[k11 - 1] = class5.aByteArray83[k11 - 2];                            class5.aByteArray83[k11 - 2] = class5.aByteArray83[k11 - 3];                            class5.aByteArray83[k11 - 3] = class5.aByteArray83[k11 - 4];                        }                        for(; j11 > 0; j11--)                            class5.aByteArray83[j10 + j11] = class5.aByteArray83[(j10 + j11) - 1];                        class5.aByteArray83[j10] = byte6;                    } else                    {                        int l10 = j11 / 16;                        int i11 = j11 % 16;                        int k10 = class5.anIntArray84[l10] + i11;                        byte6 = class5.aByteArray83[k10];                        for(; k10 > class5.anIntArray84[l10]; k10--)                            class5.aByteArray83[k10] = class5.aByteArray83[k10 - 1];                        class5.anIntArray84[l10]++;                        for(; l10 > 0; l10--)                        {                            class5.anIntArray84[l10]--;                            class5.aByteArray83[class5.anIntArray84[l10]] = class5.aByteArray83[(class5.anIntArray84[l10 - 1] + 16) - 1];                        }                        class5.anIntArray84[0]--;                        class5.aByteArray83[class5.anIntArray84[0]] = byte6;                        if(class5.anIntArray84[0] == 0)                        {                            int i10 = 4095;                            for(int i9 = 15; i9 >= 0; i9--)                            {                                for(int k9 = 15; k9 >= 0; k9--)                                {                                    class5.aByteArray83[i10] = class5.aByteArray83[class5.anIntArray84[i9] + k9];                                    i10--;                                }                                class5.anIntArray84[i9] = i10 + 1;                            }                        }                    }                    class5.anIntArray74[class5.aByteArray82[byte6 & 0xff] & 0xff]++;                    JagPackFileHeader.anIntArray78[i6] = class5.aByteArray82[byte6 & 0xff] & 0xff;                    i6++;                    if(j5 == 0)                    {                        i5++;                        j5 = 50;                        byte byte14 = class5.aByteArray85[i5];                        k8 = class5.anIntArray91[byte14];                        ai = class5.anIntArrayArray88[byte14];                        ai2 = class5.anIntArrayArray90[byte14];                        ai1 = class5.anIntArrayArray89[byte14];                    }                    j5--;                    int k7 = k8;                    int j8;                    byte byte11;                    for(j8 = method74(k7, class5); j8 > ai[k7]; j8 = j8 << 1 | byte11)                    {                        k7++;                        byte11 = method71(class5);                    }                    k5 = ai2[j8 - ai1[k7]];                }            class5.anInt65 = 0;            class5.aByte64 = 0;            class5.anIntArray76[0] = 0;            for(int j2 = 1; j2 <= 256; j2++)                class5.anIntArray76[j2] = class5.anIntArray74[j2 - 1];            for(int k2 = 1; k2 <= 256; k2++)                class5.anIntArray76[k2] += class5.anIntArray76[k2 - 1];            for(int l2 = 0; l2 < i6; l2++)            {                byte byte7 = (byte)(JagPackFileHeader.anIntArray78[l2] & 0xff);                JagPackFileHeader.anIntArray78[class5.anIntArray76[byte7 & 0xff]] |= l2 << 8;                class5.anIntArray76[byte7 & 0xff]++;            }            class5.anInt72 = JagPackFileHeader.anIntArray78[class5.anInt71] >> 8;            class5.anInt75 = 0;            class5.anInt72 = JagPackFileHeader.anIntArray78[class5.anInt72];            class5.anInt73 = (byte)(class5.anInt72 & 0xff);            class5.anInt72 >>= 8;            class5.anInt75++;            class5.anInt92 = i6;            method69(class5);            if(class5.anInt75 == class5.anInt92 + 1 && class5.anInt65 == 0)                flag20 = true;            else                flag20 = false;        }    }    private static void method69(JagPackFileHeader class5)    {        byte byte4 = class5.aByte64;        int i = class5.anInt65;        int j = class5.anInt75;        int k = class5.anInt73;        int ai[] = JagPackFileHeader.anIntArray78;        int l = class5.anInt72;        byte abyte0[] = class5.aByteArray59;        int i1 = class5.anInt60;        int j1 = class5.anInt61;        int k1 = j1;        int l1 = class5.anInt92 + 1;label0:        do        {            if(i > 0)            {                do                {                    if(j1 == 0)                        break label0;                    if(i == 1)                        break;                    abyte0[i1] = byte4;                    i--;                    i1++;                    j1--;                } while(true);                if(j1 == 0)                {                    i = 1;                    break;                }                abyte0[i1] = byte4;                i1++;                j1--;            }            boolean flag = true;            while(flag)             {                flag = false;                if(j == l1)                {                    i = 0;                    break label0;                }                byte4 = (byte)k;                l = ai[l];                byte byte0 = (byte)(l & 0xff);                l >>= 8;                j++;                if(byte0 != k)                {                    k = byte0;                    if(j1 == 0)                    {                        i = 1;                    } else                    {                        abyte0[i1] = byte4;                        i1++;                        j1--;                        flag = true;                        continue;                    }                    break label0;                }                if(j != l1)                    continue;                if(j1 == 0)                {                    i = 1;                    break label0;                }                abyte0[i1] = byte4;                i1++;                j1--;                flag = true;            }            i = 2;            l = ai[l];            byte byte1 = (byte)(l & 0xff);            l >>= 8;            if(++j != l1)                if(byte1 != k)                {                    k = byte1;                } else                {                    i = 3;                    l = ai[l];                    byte byte2 = (byte)(l & 0xff);                    l >>= 8;                    if(++j != l1)                        if(byte2 != k)                        {                            k = byte2;                        } else                        {                            l = ai[l];                            byte byte3 = (byte)(l & 0xff);                            l >>= 8;                            j++;                            i = (byte3 & 0xff) + 4;                            l = ai[l];                            k = (byte)(l & 0xff);                            l >>= 8;                            j++;                        }                }        } while(true);        int i2 = class5.anInt62;        class5.anInt62 += k1 - j1;        if(class5.anInt62 < i2)            class5.anInt63++;        class5.aByte64 = byte4;        class5.anInt65 = i;        class5.anInt75 = j;        class5.anInt73 = k;        JagPackFileHeader.anIntArray78 = ai;        class5.anInt72 = l;        class5.aByteArray59 = abyte0;        class5.anInt60 = i1;        class5.anInt61 = j1;    }    private static void method70(JagPackFileHeader class5)    {        class5.anInt79 = 0;        for(int i = 0; i < 256; i++)            if(class5.aBooleanArray80[i])            {                class5.aByteArray82[class5.anInt79] = (byte)i;                class5.anInt79++;            }    }    private static byte method71(JagPackFileHeader class5)    {        return (byte)method74(1, class5);    }    private static void method72(int ai[], int ai1[], int ai2[], byte abyte0[], int i, int j, int k)    {        int l = 0;        for(int i1 = i; i1 <= j; i1++)        {            for(int l2 = 0; l2 < k; l2++)                if(abyte0[l2] == i1)                {                    ai2[l] = l2;                    l++;                }        }        for(int j1 = 0; j1 < 23; j1++)            ai1[j1] = 0;        for(int k1 = 0; k1 < k; k1++)            ai1[abyte0[k1] + 1]++;        for(int l1 = 1; l1 < 23; l1++)            ai1[l1] += ai1[l1 - 1];        for(int i2 = 0; i2 < 23; i2++)            ai[i2] = 0;        int i3 = 0;        for(int j2 = i; j2 <= j; j2++)        {            i3 += ai1[j2 + 1] - ai1[j2];            ai[j2] = i3 - 1;            i3 <<= 1;        }        for(int k2 = i + 1; k2 <= j; k2++)            ai1[k2] = (ai[k2 - 1] + 1 << 1) - ai1[k2];    }    public static int method73(byte abyte0[], int i, byte abyte1[], int j, int k)    {        synchronized(aClass5_43)        {            aClass5_43.aByteArray54 = abyte1;            aClass5_43.anInt55 = k;            aClass5_43.aByteArray59 = abyte0;            aClass5_43.anInt60 = 0;            aClass5_43.anInt56 = j;            aClass5_43.anInt61 = i;            aClass5_43.anInt68 = 0;            aClass5_43.anInt67 = 0;            aClass5_43.anInt57 = 0;            aClass5_43.anInt58 = 0;            aClass5_43.anInt62 = 0;            aClass5_43.anInt63 = 0;            aClass5_43.anInt70 = 0;            method68(aClass5_43);            i -= aClass5_43.anInt61;            int l = i;            return l;        }    }    private static int method74(int i, JagPackFileHeader class5)    {        int j;        do        {            if(class5.anInt68 >= i)            {                int k = class5.anInt67 >> class5.anInt68 - i & (1 << i) - 1;                class5.anInt68 -= i;                j = k;                break;            }            class5.anInt67 = class5.anInt67 << 8 | class5.aByteArray54[class5.anInt55] & 0xff;            class5.anInt68 += 8;            class5.anInt55++;            class5.anInt56--;            class5.anInt57++;            if(class5.anInt57 == 0)                class5.anInt58++;        } while(true);        return j;    }    private static JagPackFileHeader aClass5_43 = new JagPackFileHeader();}class JagPackFileHeader{    JagPackFileHeader()    {        anInt55 = 0;        anInt60 = 0;        anIntArray74 = new int[256];        anIntArray76 = new int[257];        anIntArray77 = new int[257];        aBooleanArray80 = new boolean[256];        aBooleanArray81 = new boolean[16];        aByteArray82 = new byte[256];        aByteArray83 = new byte[4096];        anIntArray84 = new int[16];        aByteArray85 = new byte[anInt53];        aByteArray86 = new byte[anInt53];        aByteArrayArray87 = new byte[6][258];        anIntArrayArray88 = new int[6][258];        anIntArrayArray89 = new int[6][258];        anIntArrayArray90 = new int[6][258];        anIntArray91 = new int[6];    }    final int anInt44 = 4096;    final int anInt45 = 16;    final int anInt46 = 258;    final int anInt47 = 23;    final int anInt48 = 0;    final int anInt49 = 1;    final int anInt50 = 6;    final int anInt51 = 50;    final int anInt52 = 4;    final int anInt53 = 18002;    byte aByteArray54[];    int anInt55;    int anInt56;    int anInt57;    int anInt58;    byte aByteArray59[];    int anInt60;    int anInt61;    int anInt62;    int anInt63;    byte aByte64;    int anInt65;    boolean aBoolean66;    int anInt67;    int anInt68;    int anInt69;    int anInt70;    int anInt71;    int anInt72;    int anInt73;    int anIntArray74[];    int anInt75;    int anIntArray76[];    int anIntArray77[];    public static int anIntArray78[];    int anInt79;    boolean aBooleanArray80[];    boolean aBooleanArray81[];    byte aByteArray82[];    byte aByteArray83[];    int anIntArray84[];    byte aByteArray85[];    byte aByteArray86[];    byte aByteArrayArray87[][];    int anIntArrayArray88[][];    int anIntArrayArray89[][];    int anIntArrayArray90[][];    int anIntArray91[];    int anInt92;}