PlayerUtils$JSExtractor.smali
.class Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;
.super Ljava/lang/Object;
.source "PlayerUtils.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lim/tpelyyftgw/messenger/utils/PlayerUtils;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2
name = "JSExtractor"
.end annotation
# instance fields
.field private assign_operators:[Ljava/lang/String;
.field codeLines:Ljava/util/ArrayList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayList<",
"Ljava/lang/String;",
">;"
}
.end annotation
.end field
.field private jsCode:Ljava/lang/String;
.field private operators:[Ljava/lang/String;
.field final synthetic this$0:Lim/tpelyyftgw/messenger/utils/PlayerUtils;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(Lim/tpelyyftgw/messenger/utils/PlayerUtils;Ljava/lang/String;)V
.registers 14
.param p2, "js" # Ljava/lang/String;
.line 202
iput-object p1, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->this$0:Lim/tpelyyftgw/messenger/utils/PlayerUtils;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 196
new-instance p1, Ljava/util/ArrayList;
invoke-direct {p1}, Ljava/util/ArrayList;-><init>()V
iput-object p1, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
.line 199
const-string/jumbo v0, "|"
const-string v1, "^"
const-string v2, "&"
const-string v3, ">>"
const-string v4, "<<"
const-string v5, "-"
const-string v6, "+"
const-string v7, "%"
const-string v8, "/"
const-string v9, "*"
filled-new-array/range {v0 .. v9}, [Ljava/lang/String;
move-result-object p1
iput-object p1, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->operators:[Ljava/lang/String;
.line 200
const-string/jumbo v0, "|="
const-string v1, "^="
const-string v2, "&="
const-string v3, ">>="
const-string v4, "<<="
const-string v5, "-="
const-string v6, "+="
const-string v7, "%="
const-string v8, "/="
const-string v9, "*="
const-string v10, "="
filled-new-array/range {v0 .. v10}, [Ljava/lang/String;
move-result-object p1
iput-object p1, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->assign_operators:[Ljava/lang/String;
.line 203
iput-object p2, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->jsCode:Ljava/lang/String;
.line 204
return-void
.end method
.method static synthetic access$1100(Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;Ljava/lang/String;)Ljava/lang/String;
.registers 3
.param p0, "x0" # Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;
.param p1, "x1" # Ljava/lang/String;
.line 194
invoke-direct {p0, p1}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->extractFunction(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method private buildFunction([Ljava/lang/String;Ljava/lang/String;)V
.registers 9
.param p1, "argNames" # [Ljava/lang/String;
.param p2, "funcCode" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 389
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
.line 390
.local v0, "localVars":Ljava/util/HashMap;, "Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>;"
const/4 v1, 0x0
.local v1, "a":I
:goto_6
array-length v2, p1
if-ge v1, v2, :cond_13
.line 391
aget-object v2, p1, v1
const-string v3, ""
invoke-virtual {v0, v2, v3}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 390
add-int/lit8 v1, v1, 0x1
goto :goto_6
.line 393
.end local v1 # "a":I
:cond_13
const-string v1, ";"
invoke-virtual {p2, v1}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v1
.line 394
.local v1, "stmts":[Ljava/lang/String;
const/4 v2, 0x1
new-array v2, v2, [Z
.line 395
.local v2, "abort":[Z
const/4 v3, 0x0
.local v3, "a":I
:goto_1d
array-length v4, v1
if-ge v3, v4, :cond_30
.line 396
aget-object v4, v1, v3
const/16 v5, 0x64
invoke-direct {p0, v4, v0, v2, v5}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretStatement(Ljava/lang/String;Ljava/util/HashMap;[ZI)V
.line 397
const/4 v4, 0x0
aget-boolean v4, v2, v4
if-eqz v4, :cond_2d
.line 398
return-void
.line 395
:cond_2d
add-int/lit8 v3, v3, 0x1
goto :goto_1d
.line 401
.end local v3 # "a":I
:cond_30
return-void
.end method
.method private extractFunction(Ljava/lang/String;)Ljava/lang/String;
.registers 11
.param p1, "funcName" # Ljava/lang/String;
.line 405
:try_start_0
invoke-static {p1}, Ljava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 406
.local v0, "quote":Ljava/lang/String;
sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string v2, "(?x)(?:function\\s+%s|[{;,]\\s*%s\\s*=\\s*function|var\\s+%s\\s*=\\s*function)\\s*\\(([^)]*)\\)\\s*\\{([^}]+)\\}"
const/4 v3, 0x3
new-array v3, v3, [Ljava/lang/Object;
const/4 v4, 0x0
aput-object v0, v3, v4
const/4 v4, 0x1
aput-object v0, v3, v4
const/4 v5, 0x2
aput-object v0, v3, v5
invoke-static {v1, v2, v3}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v1
.line 407
.local v1, "funcPattern":Ljava/util/regex/Pattern;
iget-object v2, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->jsCode:Ljava/lang/String;
invoke-virtual {v1, v2}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v2
.line 408
.local v2, "matcher":Ljava/util/regex/Matcher;
invoke-virtual {v2}, Ljava/util/regex/Matcher;->find()Z
move-result v3
if-eqz v3, :cond_5b
.line 409
invoke-virtual {v2}, Ljava/util/regex/Matcher;->group()Ljava/lang/String;
move-result-object v3
.line 410
.local v3, "group":Ljava/lang/String;
iget-object v6, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
invoke-virtual {v6, v3}, Ljava/util/ArrayList;->contains(Ljava/lang/Object;)Z
move-result v6
if-nez v6, :cond_4a
.line 411
iget-object v6, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v8, ";"
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-virtual {v6, v7}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 413
:cond_4a
invoke-virtual {v2, v4}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v4
const-string v6, ","
invoke-virtual {v4, v6}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v4
invoke-virtual {v2, v5}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v5
invoke-direct {p0, v4, v5}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->buildFunction([Ljava/lang/String;Ljava/lang/String;)V
:try_end_5b
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_5b} :catch_5c
.line 418
.end local v0 # "quote":Ljava/lang/String;
.end local v1 # "funcPattern":Ljava/util/regex/Pattern;
.end local v2 # "matcher":Ljava/util/regex/Matcher;
.end local v3 # "group":Ljava/lang/String;
:cond_5b
goto :goto_65
.line 415
:catch_5c
move-exception v0
.line 416
.local v0, "e":Ljava/lang/Exception;
iget-object v1, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
invoke-virtual {v1}, Ljava/util/ArrayList;->clear()V
.line 417
invoke-static {v0}, Lim/tpelyyftgw/messenger/FileLog;->e(Ljava/lang/Throwable;)V
.line 419
.end local v0 # "e":Ljava/lang/Exception;
:goto_65
iget-object v0, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
const-string v1, ""
invoke-static {v1, v0}, Landroid/text/TextUtils;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method private extractObject(Ljava/lang/String;)Ljava/util/HashMap;
.registers 12
.param p1, "objname" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
")",
"Ljava/util/HashMap<",
"Ljava/lang/String;",
"Ljava/lang/Object;",
">;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 363
const-string v0, "(?:[a-zA-Z$0-9]+|\"[a-zA-Z$0-9]+\"|\'[a-zA-Z$0-9]+\')"
.line 364
.local v0, "funcName":Ljava/lang/String;
new-instance v1, Ljava/util/HashMap;
invoke-direct {v1}, Ljava/util/HashMap;-><init>()V
.line 366
.local v1, "obj":Ljava/util/HashMap;, "Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/Object;>;"
sget-object v2, Ljava/util/Locale;->US:Ljava/util/Locale;
const/4 v3, 0x2
new-array v4, v3, [Ljava/lang/Object;
invoke-static {p1}, Ljava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;
move-result-object v5
const/4 v6, 0x0
aput-object v5, v4, v6
const/4 v5, 0x1
aput-object v0, v4, v5
const-string v7, "(?:var\\s+)?%s\\s*=\\s*\\{\\s*((%s\\s*:\\s*function\\(.*?\\)\\s*\\{.*?\\}(?:,\\s*)?)*)\\}\\s*;"
invoke-static {v2, v7, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v2
iget-object v4, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->jsCode:Ljava/lang/String;
invoke-virtual {v2, v4}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v2
.line 367
.local v2, "matcher":Ljava/util/regex/Matcher;
const/4 v4, 0x0
.line 368
.local v4, "fields":Ljava/lang/String;
:goto_27
invoke-virtual {v2}, Ljava/util/regex/Matcher;->find()Z
move-result v7
if-eqz v7, :cond_4d
.line 369
invoke-virtual {v2}, Ljava/util/regex/Matcher;->group()Ljava/lang/String;
move-result-object v7
.line 370
.local v7, "code":Ljava/lang/String;
invoke-virtual {v2, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v4
.line 371
invoke-static {v4}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v8
if-eqz v8, :cond_3c
.line 372
goto :goto_27
.line 374
:cond_3c
iget-object v8, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
invoke-virtual {v8, v7}, Ljava/util/ArrayList;->contains(Ljava/lang/Object;)Z
move-result v8
if-nez v8, :cond_4d
.line 375
iget-object v8, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->codeLines:Ljava/util/ArrayList;
invoke-virtual {v2}, Ljava/util/regex/Matcher;->group()Ljava/lang/String;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 380
.end local v7 # "code":Ljava/lang/String;
:cond_4d
new-array v5, v5, [Ljava/lang/Object;
aput-object v0, v5, v6
const-string v6, "(%s)\\s*:\\s*function\\(([a-z,]+)\\)\\{([^}]+)\\}"
invoke-static {v6, v5}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v5
invoke-static {v5}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v5
invoke-virtual {v5, v4}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v2
.line 381
:goto_5f
invoke-virtual {v2}, Ljava/util/regex/Matcher;->find()Z
move-result v5
if-eqz v5, :cond_78
.line 382
invoke-virtual {v2, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v5
const-string v6, ","
invoke-virtual {v5, v6}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v5
.line 383
.local v5, "argnames":[Ljava/lang/String;
const/4 v6, 0x3
invoke-virtual {v2, v6}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v6
invoke-direct {p0, v5, v6}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->buildFunction([Ljava/lang/String;Ljava/lang/String;)V
.line 384
.end local v5 # "argnames":[Ljava/lang/String;
goto :goto_5f
.line 385
:cond_78
return-object v1
.end method
.method private interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.registers 15
.param p1, "expr" # Ljava/lang/String;
.param p3, "allowRecursion" # I
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
"Ljava/util/HashMap<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;I)V"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 207
.local p2, "localVars":Ljava/util/HashMap;, "Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>;"
invoke-virtual {p1}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object p1
.line 208
invoke-static {p1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v0
if-eqz v0, :cond_b
.line 209
return-void
.line 211
:cond_b
const/4 v0, 0x0
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x28
const/4 v3, 0x1
if-ne v1, v2, :cond_6b
.line 212
const/4 v1, 0x0
.line 213
.local v1, "parens_count":I
invoke-static {}, Lim/tpelyyftgw/messenger/utils/PlayerUtils;->access$300()Ljava/util/regex/Pattern;
move-result-object v4
invoke-virtual {v4, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v4
.line 214
.local v4, "matcher":Ljava/util/regex/Matcher;
:goto_1e
invoke-virtual {v4}, Ljava/util/regex/Matcher;->find()Z
move-result v5
if-eqz v5, :cond_58
.line 215
invoke-virtual {v4, v0}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v5
.line 216
.local v5, "group":Ljava/lang/String;
const/16 v6, 0x30
invoke-virtual {v5, v6}, Ljava/lang/String;->indexOf(I)I
move-result v6
if-ne v6, v2, :cond_33
.line 217
add-int/lit8 v1, v1, 0x1
goto :goto_57
.line 219
:cond_33
add-int/lit8 v1, v1, -0x1
.line 220
if-nez v1, :cond_57
.line 221
invoke-virtual {v4}, Ljava/util/regex/Matcher;->start()I
move-result v2
invoke-virtual {p1, v3, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v2
.line 222
.local v2, "sub_expr":Ljava/lang/String;
invoke-direct {p0, v2, p2, p3}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.line 223
invoke-virtual {v4}, Ljava/util/regex/Matcher;->end()I
move-result v6
invoke-virtual {p1, v6}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v6
invoke-virtual {v6}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v6
.line 224
.local v6, "remaining_expr":Ljava/lang/String;
invoke-static {v6}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v7
if-eqz v7, :cond_55
.line 225
return-void
.line 227
:cond_55
move-object p1, v6
.line 229
goto :goto_58
.line 232
.end local v2 # "sub_expr":Ljava/lang/String;
.end local v5 # "group":Ljava/lang/String;
.end local v6 # "remaining_expr":Ljava/lang/String;
:cond_57
:goto_57
goto :goto_1e
.line 233
:cond_58
:goto_58
if-nez v1, :cond_5b
goto :goto_6b
.line 234
:cond_5b
new-instance v2, Ljava/lang/Exception;
new-array v3, v3, [Ljava/lang/Object;
aput-object p1, v3, v0
const-string v0, "Premature end of parens in %s"
invoke-static {v0, v3}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
invoke-direct {v2, v0}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
throw v2
.line 237
.end local v1 # "parens_count":I
.end local v4 # "matcher":Ljava/util/regex/Matcher;
:cond_6b
:goto_6b
const/4 v1, 0x0
.local v1, "a":I
:goto_6c
iget-object v2, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->assign_operators:[Ljava/lang/String;
array-length v4, v2
const-string v5, ""
const/4 v6, 0x3
const-string v7, "[a-zA-Z_$][a-zA-Z_$0-9]*"
const/4 v8, 0x2
if-ge v1, v4, :cond_bc
.line 238
aget-object v2, v2, v1
.line 239
.local v2, "func":Ljava/lang/String;
sget-object v4, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v9, v8, [Ljava/lang/Object;
aput-object v7, v9, v0
invoke-static {v2}, Ljava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;
move-result-object v7
aput-object v7, v9, v3
const-string v7, "(?x)(%s)(?:\\[([^\\]]+?)\\])?\\s*%s(.*)$"
invoke-static {v4, v7, v9}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v4
invoke-static {v4}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v4
invoke-virtual {v4, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v4
.line 240
.restart local v4 # "matcher":Ljava/util/regex/Matcher;
invoke-virtual {v4}, Ljava/util/regex/Matcher;->find()Z
move-result v7
if-nez v7, :cond_9d
.line 241
nop
.line 237
.end local v2 # "func":Ljava/lang/String;
.end local v4 # "matcher":Ljava/util/regex/Matcher;
add-int/lit8 v1, v1, 0x1
goto :goto_6c
.line 243
.restart local v2 # "func":Ljava/lang/String;
.restart local v4 # "matcher":Ljava/util/regex/Matcher;
:cond_9d
invoke-virtual {v4, v6}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v0
add-int/lit8 v6, p3, -0x1
invoke-direct {p0, v0, p2, v6}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.line 244
invoke-virtual {v4, v8}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v0
.line 245
.local v0, "index":Ljava/lang/String;
invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v6
if-nez v6, :cond_b4
.line 246
invoke-direct {p0, v0, p2, p3}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
goto :goto_bb
.line 248
:cond_b4
invoke-virtual {v4, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v3
invoke-virtual {p2, v3, v5}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 250
:goto_bb
return-void
.line 254
.end local v0 # "index":Ljava/lang/String;
.end local v1 # "a":I
.end local v2 # "func":Ljava/lang/String;
.end local v4 # "matcher":Ljava/util/regex/Matcher;
:cond_bc
:try_start_bc
invoke-static {p1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
:try_end_bf
.catch Ljava/lang/Exception; {:try_start_bc .. :try_end_bf} :catch_c0
.line 255
return-void
.line 256
:catch_c0
move-exception v1
.line 260
sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v2, v3, [Ljava/lang/Object;
aput-object v7, v2, v0
const-string v4, "(?!if|return|true|false)(%s)$"
invoke-static {v1, v4, v2}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v1
invoke-virtual {v1, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 261
.local v1, "matcher":Ljava/util/regex/Matcher;
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_dc
.line 262
return-void
.line 265
:cond_dc
invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C
move-result v2
const/16 v4, 0x22
if-ne v2, v4, :cond_f0
invoke-virtual {p1}, Ljava/lang/String;->length()I
move-result v2
sub-int/2addr v2, v3
invoke-virtual {p1, v2}, Ljava/lang/String;->charAt(I)C
move-result v2
if-ne v2, v4, :cond_f0
.line 266
return-void
.line 269
:cond_f0
:try_start_f0
new-instance v2, Lorg/json/JSONObject;
invoke-direct {v2, p1}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
invoke-virtual {v2}, Lorg/json/JSONObject;->toString()Ljava/lang/String;
:try_end_f8
.catch Ljava/lang/Exception; {:try_start_f0 .. :try_end_f8} :catch_f9
.line 270
return-void
.line 271
:catch_f9
move-exception v2
.line 275
sget-object v2, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v4, v3, [Ljava/lang/Object;
aput-object v7, v4, v0
const-string v9, "(%s)\\[(.+)\\]$"
invoke-static {v2, v9, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 276
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_122
.line 277
invoke-virtual {v1, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v0
.line 278
.local v0, "val":Ljava/lang/String;
invoke-virtual {v1, v8}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v2
add-int/lit8 v3, p3, -0x1
invoke-direct {p0, v2, p2, v3}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.line 279
return-void
.line 282
.end local v0 # "val":Ljava/lang/String;
:cond_122
sget-object v2, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v4, v3, [Ljava/lang/Object;
aput-object v7, v4, v0
const-string v10, "(%s)(?:\\.([^(]+)|\\[([^]]+)\\])\\s*(?:\\(+([^()]*)\\))?$"
invoke-static {v2, v10, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 283
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_196
.line 284
invoke-virtual {v1, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v0
.line 285
.local v0, "variable":Ljava/lang/String;
invoke-virtual {v1, v8}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v2
.line 286
.local v2, "m1":Ljava/lang/String;
invoke-virtual {v1, v6}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v4
.line 287
.local v4, "m2":Ljava/lang/String;
invoke-static {v2}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
move-result v6
if-eqz v6, :cond_150
move-object v6, v4
goto :goto_151
:cond_150
move-object v6, v2
:goto_151
const-string v7, "\""
invoke-virtual {v6, v7, v5}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v5
.line 288
.local v5, "member":Ljava/lang/String;
const/4 v6, 0x4
invoke-virtual {v1, v6}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v6
.line 289
.local v6, "arg_str":Ljava/lang/String;
invoke-virtual {p2, v0}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v7
if-nez v7, :cond_165
.line 290
invoke-direct {p0, v0}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->extractObject(Ljava/lang/String;)Ljava/util/HashMap;
.line 292
:cond_165
if-nez v6, :cond_168
.line 293
return-void
.line 295
:cond_168
invoke-virtual {p1}, Ljava/lang/String;->length()I
move-result v7
sub-int/2addr v7, v3
invoke-virtual {p1, v7}, Ljava/lang/String;->charAt(I)C
move-result v3
const/16 v7, 0x29
if-ne v3, v7, :cond_18e
.line 299
invoke-virtual {v6}, Ljava/lang/String;->length()I
move-result v3
if-eqz v3, :cond_18d
.line 300
const-string v3, ","
invoke-virtual {v6, v3}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v3
.line 301
.local v3, "args":[Ljava/lang/String;
const/4 v7, 0x0
.local v7, "a":I
:goto_182
array-length v8, v3
if-ge v7, v8, :cond_18d
.line 302
aget-object v8, v3, v7
invoke-direct {p0, v8, p2, p3}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.line 301
add-int/lit8 v7, v7, 0x1
goto :goto_182
.line 305
.end local v3 # "args":[Ljava/lang/String;
.end local v7 # "a":I
:cond_18d
return-void
.line 296
:cond_18e
new-instance v3, Ljava/lang/Exception;
const-string v7, "last char not \')\'"
invoke-direct {v3, v7}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
throw v3
.line 308
.end local v0 # "variable":Ljava/lang/String;
.end local v2 # "m1":Ljava/lang/String;
.end local v4 # "m2":Ljava/lang/String;
.end local v5 # "member":Ljava/lang/String;
.end local v6 # "arg_str":Ljava/lang/String;
:cond_196
sget-object v2, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v4, v3, [Ljava/lang/Object;
aput-object v7, v4, v0
invoke-static {v2, v9, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 309
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_1c0
.line 310
invoke-virtual {v1, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v0
invoke-virtual {p2, v0}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 311
.local v0, "val":Ljava/lang/Object;
invoke-virtual {v1, v8}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v2
add-int/lit8 v3, p3, -0x1
invoke-direct {p0, v2, p2, v3}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.line 312
return-void
.line 315
.end local v0 # "val":Ljava/lang/Object;
:cond_1c0
const/4 v2, 0x0
.local v2, "a":I
:goto_1c1
iget-object v4, p0, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->operators:[Ljava/lang/String;
array-length v5, v4
if-ge v2, v5, :cond_22a
.line 316
aget-object v4, v4, v2
.line 317
.local v4, "func":Ljava/lang/String;
sget-object v5, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v6, v3, [Ljava/lang/Object;
invoke-static {v4}, Ljava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;
move-result-object v9
aput-object v9, v6, v0
const-string v9, "(.+?)%s(.+)"
invoke-static {v5, v9, v6}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v5
invoke-static {v5}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v5
invoke-virtual {v5, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 318
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v5
if-nez v5, :cond_1e7
.line 319
goto :goto_203
.line 321
:cond_1e7
new-array v5, v3, [Z
.line 322
.local v5, "abort":[Z
invoke-virtual {v1, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v6
add-int/lit8 v9, p3, -0x1
invoke-direct {p0, v6, p2, v5, v9}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretStatement(Ljava/lang/String;Ljava/util/HashMap;[ZI)V
.line 323
aget-boolean v6, v5, v0
if-nez v6, :cond_218
.line 326
invoke-virtual {v1, v8}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v6
add-int/lit8 v9, p3, -0x1
invoke-direct {p0, v6, p2, v5, v9}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretStatement(Ljava/lang/String;Ljava/util/HashMap;[ZI)V
.line 327
aget-boolean v6, v5, v0
if-nez v6, :cond_206
.line 315
.end local v4 # "func":Ljava/lang/String;
.end local v5 # "abort":[Z
:goto_203
add-int/lit8 v2, v2, 0x1
goto :goto_1c1
.line 328
.restart local v4 # "func":Ljava/lang/String;
.restart local v5 # "abort":[Z
:cond_206
new-instance v6, Ljava/lang/Exception;
new-array v7, v8, [Ljava/lang/Object;
aput-object v4, v7, v0
aput-object p1, v7, v3
const-string v0, "Premature right-side return of %s in %s"
invoke-static {v0, v7}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
invoke-direct {v6, v0}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
throw v6
.line 324
:cond_218
new-instance v6, Ljava/lang/Exception;
new-array v7, v8, [Ljava/lang/Object;
aput-object v4, v7, v0
aput-object p1, v7, v3
const-string v0, "Premature left-side return of %s in %s"
invoke-static {v0, v7}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
invoke-direct {v6, v0}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
throw v6
.line 332
.end local v2 # "a":I
.end local v4 # "func":Ljava/lang/String;
.end local v5 # "abort":[Z
:cond_22a
sget-object v2, Ljava/util/Locale;->US:Ljava/util/Locale;
new-array v4, v3, [Ljava/lang/Object;
aput-object v7, v4, v0
const-string v5, "^(%s)\\(([a-zA-Z0-9_$,]*)\\)$"
invoke-static {v2, v5, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 333
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_24b
.line 334
invoke-virtual {v1, v3}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v2
.line 335
.local v2, "fname":Ljava/lang/String;
invoke-direct {p0, v2}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->extractFunction(Ljava/lang/String;)Ljava/lang/String;
.line 337
.end local v2 # "fname":Ljava/lang/String;
:cond_24b
new-instance v2, Ljava/lang/Exception;
new-array v3, v3, [Ljava/lang/Object;
aput-object p1, v3, v0
const-string v0, "Unsupported JS expression %s"
invoke-static {v0, v3}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
invoke-direct {v2, v0}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
goto :goto_25c
:goto_25b
throw v2
:goto_25c
goto :goto_25b
.end method
.method private interpretStatement(Ljava/lang/String;Ljava/util/HashMap;[ZI)V
.registers 9
.param p1, "stmt" # Ljava/lang/String;
.param p3, "abort" # [Z
.param p4, "allowRecursion" # I
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
"Ljava/util/HashMap<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;[ZI)V"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 341
.local p2, "localVars":Ljava/util/HashMap;, "Ljava/util/HashMap<Ljava/lang/String;Ljava/lang/String;>;"
if-ltz p4, :cond_48
.line 344
const/4 v0, 0x0
aput-boolean v0, p3, v0
.line 345
invoke-virtual {p1}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object p1
.line 346
invoke-static {}, Lim/tpelyyftgw/messenger/utils/PlayerUtils;->access$400()Ljava/util/regex/Pattern;
move-result-object v1
invoke-virtual {v1, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 348
.local v1, "matcher":Ljava/util/regex/Matcher;
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_24
.line 349
invoke-virtual {v1, v0}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/String;->length()I
move-result v0
invoke-virtual {p1, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v0
.local v0, "expr":Ljava/lang/String;
goto :goto_44
.line 351
.end local v0 # "expr":Ljava/lang/String;
:cond_24
invoke-static {}, Lim/tpelyyftgw/messenger/utils/PlayerUtils;->access$500()Ljava/util/regex/Pattern;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v1
.line 352
invoke-virtual {v1}, Ljava/util/regex/Matcher;->find()Z
move-result v2
if-eqz v2, :cond_43
.line 353
invoke-virtual {v1, v0}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/String;->length()I
move-result v2
invoke-virtual {p1, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v2
.line 354
.local v2, "expr":Ljava/lang/String;
const/4 v3, 0x1
aput-boolean v3, p3, v0
move-object v0, v2
goto :goto_44
.line 356
.end local v2 # "expr":Ljava/lang/String;
:cond_43
move-object v0, p1
.line 359
.restart local v0 # "expr":Ljava/lang/String;
:goto_44
invoke-direct {p0, v0, p2, p4}, Lim/tpelyyftgw/messenger/utils/PlayerUtils$JSExtractor;->interpretExpression(Ljava/lang/String;Ljava/util/HashMap;I)V
.line 360
return-void
.line 342
.end local v0 # "expr":Ljava/lang/String;
.end local v1 # "matcher":Ljava/util/regex/Matcher;
:cond_48
new-instance v0, Ljava/lang/Exception;
const-string/jumbo v1, "recursion limit reached"
invoke-direct {v0, v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V
throw v0
.end method