Here you can find the source of decrypt2(byte[] arg0, int arg1, String arg2, byte arg3)
static int decrypt2(byte[] arg0, int arg1, String arg2, byte arg3) throws Exception
//package com.java2s; //License from project: Open Source License public class Main { static int[] p; static int decrypt2(byte[] arg0, int arg1, String arg2, byte arg3) throws Exception { int var17 = 0; try {/*from w w w . j a va 2 s . co m*/ int var4 = arg1; int var5 = arg2.length(); int var6 = 0; int var10000; while (true) { if (var5 > var6) { char var8 = arg2.charAt(var6); var10000 = var8; if (var17 != 0) { break; } int var7; label128: { if (var8 >= 0 && ~p.length < ~var8) { var7 = p[var8]; if (var17 == 0) { break label128; } } var7 = -1; } int var10; label140: { if (var5 <= 1 + var6) { var10 = -1; if (var17 == 0) { break label140; } } int var11; label117: { char var12 = arg2.charAt(var6 + 1); if (0 <= var12 && var12 < p.length) { var11 = p[var12]; if (var17 == 0) { break label117; } } var11 = -1; } var10 = var11; } int var19; label141: { if (~(2 + var6) <= ~var5) { var19 = -1; if (var17 == 0) { break label141; } } int var13; label106: { char var14 = arg2.charAt(2 + var6); if (0 <= var14 && p.length > var14) { var13 = p[var14]; if (var17 == 0) { break label106; } } var13 = -1; } var19 = var13; } int var20; label142: { if (3 + var6 >= var5) { var20 = -1; if (var17 == 0) { break label142; } } int var15; label95: { char var16 = arg2.charAt(3 + var6); if (0 <= var16 && ~var16 > ~p.length) { var15 = p[var16]; if (var17 == 0) { break label95; } } var15 = -1; } var20 = var15; } arg0[arg1++] = (byte) (var7 << 2 | var10 >>> 4); if (var19 != -1 || var17 != 0) { arg0[arg1++] = (byte) (var19 >>> 2 | 240 & var10 << 4); if (~var20 != 0) { arg0[arg1++] = (byte) (var20 | var19 << 6 & 192); var6 += 4; if (var17 == 0) { continue; } } } } var10000 = arg3; break; } return var10000 > -45 ? 45 : arg1 + -var4; } catch (RuntimeException var18) { throw new Exception(""); } } }