Base64.smali
.class public abstract Lcom/cmcm/support/base/Base64;
.super Ljava/lang/Object;
# static fields
.field public static final BASE64CODE:Ljava/lang/String; = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
.field private static final DECODING_TABLE:[B
.field private static final ENCODING_TABLE:[B
.field public static final SPLIT_LINES_AT:I = 0x4c
# direct methods
.method static constructor <clinit>()V
.registers 4
const/16 v3, 0x80
const/16 v0, 0x40
new-array v0, v0, [B
fill-array-data v0, :array_60
sput-object v0, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
new-array v0, v3, [B
sput-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/4 v0, 0x0
:goto_10
if-ge v0, v3, :cond_1a
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/4 v2, -0x1
aput-byte v2, v1, v0
add-int/lit8 v0, v0, 0x1
goto :goto_10
:cond_1a
const/16 v0, 0x41
:goto_1c
const/16 v1, 0x5a
if-gt v0, v1, :cond_2a
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v2, v0, -0x41
int-to-byte v2, v2
aput-byte v2, v1, v0
add-int/lit8 v0, v0, 0x1
goto :goto_1c
:cond_2a
const/16 v0, 0x61
:goto_2c
const/16 v1, 0x7a
if-gt v0, v1, :cond_3c
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v2, v0, -0x61
add-int/lit8 v2, v2, 0x1a
int-to-byte v2, v2
aput-byte v2, v1, v0
add-int/lit8 v0, v0, 0x1
goto :goto_2c
:cond_3c
const/16 v0, 0x30
:goto_3e
const/16 v1, 0x39
if-gt v0, v1, :cond_4e
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v2, v0, -0x30
add-int/lit8 v2, v2, 0x34
int-to-byte v2, v2
aput-byte v2, v1, v0
add-int/lit8 v0, v0, 0x1
goto :goto_3e
:cond_4e
sget-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/16 v1, 0x2b
const/16 v2, 0x3e
aput-byte v2, v0, v1
sget-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
const/16 v1, 0x2f
const/16 v2, 0x3f
aput-byte v2, v0, v1
return-void
nop
:array_60
.array-data 1
0x41t
0x42t
0x43t
0x44t
0x45t
0x46t
0x47t
0x48t
0x49t
0x4at
0x4bt
0x4ct
0x4dt
0x4et
0x4ft
0x50t
0x51t
0x52t
0x53t
0x54t
0x55t
0x56t
0x57t
0x58t
0x59t
0x5at
0x61t
0x62t
0x63t
0x64t
0x65t
0x66t
0x67t
0x68t
0x69t
0x6at
0x6bt
0x6ct
0x6dt
0x6et
0x6ft
0x70t
0x71t
0x72t
0x73t
0x74t
0x75t
0x76t
0x77t
0x78t
0x79t
0x7at
0x30t
0x31t
0x32t
0x33t
0x34t
0x35t
0x36t
0x37t
0x38t
0x39t
0x2bt
0x2ft
.end array-data
.end method
.method public constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static decode(Ljava/lang/String;)[B
.registers 11
const/4 v1, 0x0
const/16 v9, 0x3d
if-nez p0, :cond_e
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string/jumbo v1, "Data must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_e
invoke-static {p0}, Lcom/cmcm/support/base/Base64;->discardNonBase64Chars(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
const/4 v2, 0x4
if-ge v0, v2, :cond_3e
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "Wrong base64 (length: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, ")"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_3e
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
add-int/lit8 v0, v0, -0x2
invoke-virtual {v3, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
if-ne v0, v9, :cond_a6
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x1
new-array v0, v0, [B
:goto_58
move v2, v1
:goto_59
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x4
if-ge v2, v4, :cond_cc
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v5
aget-byte v4, v4, v5
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v6, v2, 0x1
invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C
move-result v6
aget-byte v5, v5, v6
sget-object v6, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v7, v2, 0x2
invoke-virtual {v3, v7}, Ljava/lang/String;->charAt(I)C
move-result v7
aget-byte v6, v6, v7
sget-object v7, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v8, v2, 0x3
invoke-virtual {v3, v8}, Ljava/lang/String;->charAt(I)C
move-result v8
aget-byte v7, v7, v8
shl-int/lit8 v4, v4, 0x2
shr-int/lit8 v8, v5, 0x4
or-int/2addr v4, v8
int-to-byte v4, v4
aput-byte v4, v0, v1
add-int/lit8 v4, v1, 0x1
shl-int/lit8 v5, v5, 0x4
shr-int/lit8 v8, v6, 0x2
or-int/2addr v5, v8
int-to-byte v5, v5
aput-byte v5, v0, v4
add-int/lit8 v4, v1, 0x2
shl-int/lit8 v5, v6, 0x6
or-int/2addr v5, v7
int-to-byte v5, v5
aput-byte v5, v0, v4
add-int/lit8 v1, v1, 0x3
add-int/lit8 v2, v2, 0x4
goto :goto_59
:cond_a6
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
add-int/lit8 v0, v0, -0x1
invoke-virtual {v3, v0}, Ljava/lang/String;->charAt(I)C
move-result v0
if-ne v0, v9, :cond_c1
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x2
new-array v0, v0, [B
goto :goto_58
:cond_c1
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v0
div-int/lit8 v0, v0, 0x4
mul-int/lit8 v0, v0, 0x3
new-array v0, v0, [B
goto :goto_58
:cond_cc
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v1
add-int/lit8 v1, v1, -0x2
invoke-virtual {v3, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
if-ne v1, v9, :cond_100
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x4
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
aget-byte v1, v1, v2
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x3
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v2, v2, v3
array-length v3, v0
add-int/lit8 v3, v3, -0x1
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v2, v2, 0x4
or-int/2addr v1, v2
int-to-byte v1, v1
aput-byte v1, v0, v3
:goto_ff
return-object v0
:cond_100
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v1
add-int/lit8 v1, v1, -0x1
invoke-virtual {v3, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
if-ne v1, v9, :cond_14d
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x4
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
aget-byte v1, v1, v2
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x3
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v4
aget-byte v2, v2, v4
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v5
add-int/lit8 v5, v5, -0x2
invoke-virtual {v3, v5}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v3, v4, v3
array-length v4, v0
add-int/lit8 v4, v4, -0x2
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v5, v2, 0x4
or-int/2addr v1, v5
int-to-byte v1, v1
aput-byte v1, v0, v4
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v3, v3, 0x2
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
goto :goto_ff
:cond_14d
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v2, v2, -0x4
invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
aget-byte v1, v1, v2
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v4
add-int/lit8 v4, v4, -0x3
invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C
move-result v4
aget-byte v2, v2, v4
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v5
add-int/lit8 v5, v5, -0x2
invoke-virtual {v3, v5}, Ljava/lang/String;->charAt(I)C
move-result v5
aget-byte v4, v4, v5
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
invoke-virtual {v3}, Ljava/lang/String;->length()I
move-result v6
add-int/lit8 v6, v6, -0x1
invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C
move-result v3
aget-byte v3, v5, v3
array-length v5, v0
add-int/lit8 v5, v5, -0x3
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v6, v2, 0x4
or-int/2addr v1, v6
int-to-byte v1, v1
aput-byte v1, v0, v5
array-length v1, v0
add-int/lit8 v1, v1, -0x2
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v5, v4, 0x2
or-int/2addr v2, v5
int-to-byte v2, v2
aput-byte v2, v0, v1
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v4, 0x6
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
goto/16 :goto_ff
.end method
.method public static decode([B)[B
.registers 11
const/4 v1, 0x0
const/16 v9, 0x3d
if-nez p0, :cond_14
:try_start_5
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string/jumbo v1, "Data must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_e
.catch Ljava/lang/Exception; {:try_start_5 .. :try_end_e} :catch_e
:catch_e
move-exception v0
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
const/4 v0, 0x0
:goto_13
return-object v0
:cond_14
:try_start_14
invoke-static {p0}, Lcom/cmcm/support/base/Base64;->discardNonBase64Bytes([B)[B
move-result-object v3
array-length v0, v3
const/4 v2, 0x4
if-ge v0, v2, :cond_3e
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "Wrong base64 (length: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
array-length v2, v3
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, ")"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_3e
array-length v0, v3
add-int/lit8 v0, v0, -0x2
aget-byte v0, v3, v0
if-ne v0, v9, :cond_93
array-length v0, v3
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x1
new-array v0, v0, [B
:goto_50
move v2, v1
:goto_51
array-length v4, v3
add-int/lit8 v4, v4, -0x4
if-ge v2, v4, :cond_ae
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
aget-byte v5, v3, v2
aget-byte v4, v4, v5
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v6, v2, 0x1
aget-byte v6, v3, v6
aget-byte v5, v5, v6
sget-object v6, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v7, v2, 0x2
aget-byte v7, v3, v7
aget-byte v6, v6, v7
sget-object v7, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
add-int/lit8 v8, v2, 0x3
aget-byte v8, v3, v8
aget-byte v7, v7, v8
shl-int/lit8 v4, v4, 0x2
shr-int/lit8 v8, v5, 0x4
or-int/2addr v4, v8
int-to-byte v4, v4
aput-byte v4, v0, v1
add-int/lit8 v4, v1, 0x1
shl-int/lit8 v5, v5, 0x4
shr-int/lit8 v8, v6, 0x2
or-int/2addr v5, v8
int-to-byte v5, v5
aput-byte v5, v0, v4
add-int/lit8 v4, v1, 0x2
shl-int/lit8 v5, v6, 0x6
or-int/2addr v5, v7
int-to-byte v5, v5
aput-byte v5, v0, v4
add-int/lit8 v1, v1, 0x3
add-int/lit8 v2, v2, 0x4
goto :goto_51
:cond_93
array-length v0, v3
add-int/lit8 v0, v0, -0x1
aget-byte v0, v3, v0
if-ne v0, v9, :cond_a6
array-length v0, v3
div-int/lit8 v0, v0, 0x4
add-int/lit8 v0, v0, -0x1
mul-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x2
new-array v0, v0, [B
goto :goto_50
:cond_a6
array-length v0, v3
div-int/lit8 v0, v0, 0x4
mul-int/lit8 v0, v0, 0x3
new-array v0, v0, [B
goto :goto_50
:cond_ae
array-length v1, v3
add-int/lit8 v1, v1, -0x2
aget-byte v1, v3, v1
if-ne v1, v9, :cond_d4
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v2, v3
add-int/lit8 v2, v2, -0x4
aget-byte v2, v3, v2
aget-byte v1, v1, v2
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v4, v3
add-int/lit8 v4, v4, -0x3
aget-byte v3, v3, v4
aget-byte v2, v2, v3
array-length v3, v0
add-int/lit8 v3, v3, -0x1
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v2, v2, 0x4
or-int/2addr v1, v2
int-to-byte v1, v1
aput-byte v1, v0, v3
goto/16 :goto_13
:cond_d4
array-length v1, v3
add-int/lit8 v1, v1, -0x1
aget-byte v1, v3, v1
if-ne v1, v9, :cond_10e
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v2, v3
add-int/lit8 v2, v2, -0x4
aget-byte v2, v3, v2
aget-byte v1, v1, v2
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v4, v3
add-int/lit8 v4, v4, -0x3
aget-byte v4, v3, v4
aget-byte v2, v2, v4
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v5, v3
add-int/lit8 v5, v5, -0x2
aget-byte v3, v3, v5
aget-byte v3, v4, v3
array-length v4, v0
add-int/lit8 v4, v4, -0x2
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v5, v2, 0x4
or-int/2addr v1, v5
int-to-byte v1, v1
aput-byte v1, v0, v4
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v3, v3, 0x2
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
goto/16 :goto_13
:cond_10e
sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v2, v3
add-int/lit8 v2, v2, -0x4
aget-byte v2, v3, v2
aget-byte v1, v1, v2
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v4, v3
add-int/lit8 v4, v4, -0x3
aget-byte v4, v3, v4
aget-byte v2, v2, v4
sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v5, v3
add-int/lit8 v5, v5, -0x2
aget-byte v5, v3, v5
aget-byte v4, v4, v5
sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
array-length v6, v3
add-int/lit8 v6, v6, -0x1
aget-byte v3, v3, v6
aget-byte v3, v5, v3
array-length v5, v0
add-int/lit8 v5, v5, -0x3
shl-int/lit8 v1, v1, 0x2
shr-int/lit8 v6, v2, 0x4
or-int/2addr v1, v6
int-to-byte v1, v1
aput-byte v1, v0, v5
array-length v1, v0
add-int/lit8 v1, v1, -0x2
shl-int/lit8 v2, v2, 0x4
shr-int/lit8 v5, v4, 0x2
or-int/2addr v2, v5
int-to-byte v2, v2
aput-byte v2, v0, v1
array-length v1, v0
add-int/lit8 v1, v1, -0x1
shl-int/lit8 v2, v4, 0x6
or-int/2addr v2, v3
int-to-byte v2, v2
aput-byte v2, v0, v1
:try_end_151
.catch Ljava/lang/Exception; {:try_start_14 .. :try_end_151} :catch_e
goto/16 :goto_13
.end method
.method private static discardNonBase64Bytes([B)[B
.registers 7
const/4 v1, 0x0
array-length v0, p0
new-array v4, v0, [B
move v0, v1
move v2, v1
:goto_6
array-length v3, p0
if-ge v0, v3, :cond_1b
aget-byte v3, p0, v0
invoke-static {v3}, Lcom/cmcm/support/base/Base64;->isValidBase64Byte(B)Z
move-result v3
if-eqz v3, :cond_18
add-int/lit8 v3, v2, 0x1
aget-byte v5, p0, v0
aput-byte v5, v4, v2
move v2, v3
:cond_18
add-int/lit8 v0, v0, 0x1
goto :goto_6
:cond_1b
new-array v0, v2, [B
invoke-static {v4, v1, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object v0
.end method
.method private static discardNonBase64Chars(Ljava/lang/String;)Ljava/lang/String;
.registers 5
new-instance v1, Ljava/lang/StringBuffer;
invoke-direct {v1}, Ljava/lang/StringBuffer;-><init>()V
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
const/4 v0, 0x0
:goto_a
if-ge v0, v2, :cond_21
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v3
int-to-byte v3, v3
invoke-static {v3}, Lcom/cmcm/support/base/Base64;->isValidBase64Byte(B)Z
move-result v3
if-eqz v3, :cond_1e
invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C
move-result v3
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
:cond_1e
add-int/lit8 v0, v0, 0x1
goto :goto_a
:cond_21
invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public static encode(Ljava/lang/String;)Ljava/lang/String;
.registers 9
const/4 v1, 0x0
const-string/jumbo v2, ""
:try_start_4
const-string/jumbo v0, "UTF-8"
invoke-virtual {p0, v0}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
:try_end_a
.catch Ljava/lang/Exception; {:try_start_4 .. :try_end_a} :catch_76
move-result-object v0
:goto_b
array-length v3, v0
rem-int/lit8 v3, v3, 0x3
rsub-int/lit8 v3, v3, 0x3
rem-int/lit8 v3, v3, 0x3
array-length v4, v0
add-int/2addr v4, v3
invoke-static {v4, v0}, Lcom/cmcm/support/base/Base64;->zeroPad(I[B)[B
move-result-object v4
move v0, v1
:goto_19
array-length v5, v4
if-ge v0, v5, :cond_7c
aget-byte v5, v4, v0
shl-int/lit8 v5, v5, 0x10
add-int/lit8 v6, v0, 0x1
aget-byte v6, v4, v6
shl-int/lit8 v6, v6, 0x8
add-int/2addr v5, v6
add-int/lit8 v6, v0, 0x2
aget-byte v6, v4, v6
add-int/2addr v5, v6
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v6, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
const-string/jumbo v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
shr-int/lit8 v7, v5, 0x12
and-int/lit8 v7, v7, 0x3f
invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C
move-result v6
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
const-string/jumbo v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
shr-int/lit8 v7, v5, 0xc
and-int/lit8 v7, v7, 0x3f
invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C
move-result v6
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
const-string/jumbo v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
shr-int/lit8 v7, v5, 0x6
and-int/lit8 v7, v7, 0x3f
invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C
move-result v6
invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
const-string/jumbo v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
and-int/lit8 v5, v5, 0x3f
invoke-virtual {v6, v5}, Ljava/lang/String;->charAt(I)C
move-result v5
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
add-int/lit8 v0, v0, 0x3
goto :goto_19
:catch_76
move-exception v0
invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B
move-result-object v0
goto :goto_b
:cond_7c
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2}, Ljava/lang/String;->length()I
move-result v4
sub-int/2addr v4, v3
invoke-virtual {v2, v1, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v2
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
const-string/jumbo v2, "=="
invoke-virtual {v2, v1, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lcom/cmcm/support/base/Base64;->splitLines(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public static encode(Ljava/io/InputStream;Ljava/io/OutputStream;)V
.registers 7
const/4 v4, 0x3
const/4 v3, 0x0
if-nez p0, :cond_d
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string/jumbo v1, "InputStream must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_d
if-nez p1, :cond_18
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string/jumbo v1, "OutputStream must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_18
new-array v0, v4, [B
:goto_1a
invoke-virtual {p0, v0}, Ljava/io/InputStream;->read([B)I
move-result v2
const/4 v1, -0x1
if-eq v2, v1, :cond_34
if-eq v2, v4, :cond_29
new-array v1, v2, [B
invoke-static {v0, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
move-object v0, v1
:cond_29
invoke-static {v0}, Lcom/cmcm/support/base/Base64;->encode([B)[B
move-result-object v1
invoke-virtual {p1, v1}, Ljava/io/OutputStream;->write([B)V
invoke-virtual {p1}, Ljava/io/OutputStream;->flush()V
goto :goto_1a
:cond_34
return-void
.end method
.method public static encode([B)[B
.registers 13
const/4 v1, 0x0
const/16 v11, 0x3d
if-nez p0, :cond_e
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string/jumbo v1, "Data must be not null"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
:cond_e
array-length v0, p0
rem-int/lit8 v3, v0, 0x3
if-nez v3, :cond_67
array-length v0, p0
mul-int/lit8 v0, v0, 0x4
div-int/lit8 v0, v0, 0x3
new-array v0, v0, [B
:goto_1a
array-length v2, p0
sub-int v4, v2, v3
move v2, v1
:goto_1e
if-ge v2, v4, :cond_71
aget-byte v5, p0, v2
and-int/lit16 v5, v5, 0xff
add-int/lit8 v6, v2, 0x1
aget-byte v6, p0, v6
and-int/lit16 v6, v6, 0xff
add-int/lit8 v7, v2, 0x2
aget-byte v7, p0, v7
and-int/lit16 v7, v7, 0xff
sget-object v8, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
ushr-int/lit8 v9, v5, 0x2
and-int/lit8 v9, v9, 0x3f
aget-byte v8, v8, v9
aput-byte v8, v0, v1
add-int/lit8 v8, v1, 0x1
sget-object v9, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
shl-int/lit8 v5, v5, 0x4
ushr-int/lit8 v10, v6, 0x4
or-int/2addr v5, v10
and-int/lit8 v5, v5, 0x3f
aget-byte v5, v9, v5
aput-byte v5, v0, v8
add-int/lit8 v5, v1, 0x2
sget-object v8, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
shl-int/lit8 v6, v6, 0x2
ushr-int/lit8 v9, v7, 0x6
or-int/2addr v6, v9
and-int/lit8 v6, v6, 0x3f
aget-byte v6, v8, v6
aput-byte v6, v0, v5
add-int/lit8 v5, v1, 0x3
sget-object v6, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
and-int/lit8 v7, v7, 0x3f
aget-byte v6, v6, v7
aput-byte v6, v0, v5
add-int/lit8 v1, v1, 0x4
add-int/lit8 v2, v2, 0x3
goto :goto_1e
:cond_67
array-length v0, p0
div-int/lit8 v0, v0, 0x3
add-int/lit8 v0, v0, 0x1
mul-int/lit8 v0, v0, 0x4
new-array v0, v0, [B
goto :goto_1a
:cond_71
packed-switch v3, :pswitch_data_e0
:goto_74
:pswitch_74
return-object v0
:pswitch_75
array-length v1, p0
add-int/lit8 v1, v1, -0x1
aget-byte v1, p0, v1
and-int/lit16 v1, v1, 0xff
ushr-int/lit8 v2, v1, 0x2
and-int/lit8 v2, v2, 0x3f
shl-int/lit8 v1, v1, 0x4
and-int/lit8 v1, v1, 0x3f
array-length v3, v0
add-int/lit8 v3, v3, -0x4
sget-object v4, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v2, v4, v2
aput-byte v2, v0, v3
array-length v2, v0
add-int/lit8 v2, v2, -0x3
sget-object v3, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v1, v3, v1
aput-byte v1, v0, v2
array-length v1, v0
add-int/lit8 v1, v1, -0x2
aput-byte v11, v0, v1
array-length v1, v0
add-int/lit8 v1, v1, -0x1
aput-byte v11, v0, v1
goto :goto_74
:pswitch_a1
array-length v1, p0
add-int/lit8 v1, v1, -0x2
aget-byte v1, p0, v1
and-int/lit16 v1, v1, 0xff
array-length v2, p0
add-int/lit8 v2, v2, -0x1
aget-byte v2, p0, v2
and-int/lit16 v2, v2, 0xff
ushr-int/lit8 v3, v1, 0x2
and-int/lit8 v3, v3, 0x3f
shl-int/lit8 v1, v1, 0x4
ushr-int/lit8 v4, v2, 0x4
or-int/2addr v1, v4
and-int/lit8 v1, v1, 0x3f
shl-int/lit8 v2, v2, 0x2
and-int/lit8 v2, v2, 0x3f
array-length v4, v0
add-int/lit8 v4, v4, -0x4
sget-object v5, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v3, v5, v3
aput-byte v3, v0, v4
array-length v3, v0
add-int/lit8 v3, v3, -0x3
sget-object v4, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v1, v4, v1
aput-byte v1, v0, v3
array-length v1, v0
add-int/lit8 v1, v1, -0x2
sget-object v3, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B
aget-byte v2, v3, v2
aput-byte v2, v0, v1
array-length v1, v0
add-int/lit8 v1, v1, -0x1
aput-byte v11, v0, v1
goto :goto_74
nop
:pswitch_data_e0
.packed-switch 0x0
:pswitch_74
:pswitch_75
:pswitch_a1
.end packed-switch
.end method
.method private static isValidBase64Byte(B)Z
.registers 5
const/4 v0, 0x1
const/4 v1, 0x0
const/16 v2, 0x3d
if-ne p0, v2, :cond_7
:cond_6
:goto_6
return v0
:cond_7
if-ltz p0, :cond_d
const/16 v2, 0x80
if-lt p0, v2, :cond_f
:cond_d
move v0, v1
goto :goto_6
:cond_f
sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B
aget-byte v2, v2, p0
const/4 v3, -0x1
if-ne v2, v3, :cond_6
move v0, v1
goto :goto_6
.end method
.method public static splitLines(Ljava/lang/String;)Ljava/lang/String;
.registers 5
const-string/jumbo v1, ""
const/4 v0, 0x0
:goto_4
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
if-ge v0, v2, :cond_40
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {p0}, Ljava/lang/String;->length()I
move-result v2
add-int/lit8 v3, v0, 0x4c
invoke-static {v2, v3}, Ljava/lang/Math;->min(II)I
move-result v2
invoke-virtual {p0, v0, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string/jumbo v2, "\r\n"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
add-int/lit8 v0, v0, 0x4c
goto :goto_4
:cond_40
return-object v1
.end method
.method public static zeroPad(I[B)[B
.registers 5
const/4 v2, 0x0
new-array v0, p0, [B
array-length v1, p1
invoke-static {p1, v2, v0, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
return-object v0
.end method