TypeDecoder.smali

.class public Lorg/web3j/abi/TypeDecoder;
.super Ljava/lang/Object;
.source "TypeDecoder.java"


# static fields
.field static final MAX_BYTE_LENGTH_FOR_HEX_STRING:I = 0x40


# direct methods
.method public constructor <init>()V
    .registers 1

    .prologue
    .line 35
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static decode(Ljava/lang/String;ILorg/web3j/abi/TypeReference;)Lorg/web3j/abi/datatypes/Array;
    .registers 7
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Lorg/web3j/abi/datatypes/Array;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Lorg/web3j/abi/TypeReference",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 76
    invoke-virtual {p2}, Lorg/web3j/abi/TypeReference;->getType()Ljava/lang/reflect/Type;

    move-result-object v0

    check-cast v0, Ljava/lang/reflect/ParameterizedType;

    invoke-interface {v0}, Ljava/lang/reflect/ParameterizedType;->getRawType()Ljava/lang/reflect/Type;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v0

    .line 77
    const-class v1, Lorg/web3j/abi/datatypes/StaticArray;

    invoke-virtual {v1, v0}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v1

    if-eqz v1, :cond_1e

    .line 78
    const/4 v0, 0x1

    invoke-static {p0, p1, p2, v0}, Lorg/web3j/abi/TypeDecoder;->decodeStaticArray(Ljava/lang/String;ILorg/web3j/abi/TypeReference;I)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Array;

    .line 80
    :goto_1d
    return-object v0

    .line 79
    :cond_1e
    const-class v1, Lorg/web3j/abi/datatypes/DynamicArray;

    invoke-virtual {v1, v0}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v1

    if-eqz v1, :cond_2d

    .line 80
    invoke-static {p0, p1, p2}, Lorg/web3j/abi/TypeDecoder;->decodeDynamicArray(Ljava/lang/String;ILorg/web3j/abi/TypeReference;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Array;

    goto :goto_1d

    .line 82
    :cond_2d
    new-instance v1, Ljava/lang/UnsupportedOperationException;

    new-instance v2, Ljava/lang/StringBuilder;

    const-string v3, "Unsupported TypeReference: "

    invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, ", only Array types can be passed as TypeReferences"

    invoke-virtual {v0, v2}, 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-direct {v1, v0}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V

    throw v1
.end method

.method static decode(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Type;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Ljava/lang/Class",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 53
    const-class v0, Lorg/web3j/abi/datatypes/NumericType;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_11

    .line 54
    invoke-virtual {p0, p1}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->decodeNumeric(Ljava/lang/String;Ljava/lang/Class;)Lorg/web3j/abi/datatypes/NumericType;

    move-result-object v0

    .line 64
    :goto_10
    return-object v0

    .line 55
    :cond_11
    const-class v0, Lorg/web3j/abi/datatypes/Address;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_22

    .line 56
    invoke-virtual {p0, p1}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lorg/web3j/abi/TypeDecoder;->decodeAddress(Ljava/lang/String;)Lorg/web3j/abi/datatypes/Address;

    move-result-object v0

    goto :goto_10

    .line 57
    :cond_22
    const-class v0, Lorg/web3j/abi/datatypes/Bool;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_2f

    .line 58
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeBool(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/Bool;

    move-result-object v0

    goto :goto_10

    .line 59
    :cond_2f
    const-class v0, Lorg/web3j/abi/datatypes/Bytes;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_3c

    .line 60
    invoke-static {p0, p1, p2}, Lorg/web3j/abi/TypeDecoder;->decodeBytes(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Bytes;

    move-result-object v0

    goto :goto_10

    .line 61
    :cond_3c
    const-class v0, Lorg/web3j/abi/datatypes/DynamicBytes;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_49

    .line 62
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeDynamicBytes(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/DynamicBytes;

    move-result-object v0

    goto :goto_10

    .line 63
    :cond_49
    const-class v0, Lorg/web3j/abi/datatypes/Utf8String;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_56

    .line 64
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeUtf8String(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/Utf8String;

    move-result-object v0

    goto :goto_10

    .line 65
    :cond_56
    const-class v0, Lorg/web3j/abi/datatypes/Array;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_66

    .line 66
    new-instance v0, Ljava/lang/UnsupportedOperationException;

    const-string v1, "Array types must be wrapped in a TypeReference"

    invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 69
    :cond_66
    new-instance v0, Ljava/lang/UnsupportedOperationException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Type cannot be encoded: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)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/UnsupportedOperationException;-><init>(Ljava/lang/String;)V

    throw v0
.end method

.method static decode(Ljava/lang/String;Ljava/lang/Class;)Lorg/web3j/abi/datatypes/Type;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/lang/String;",
            "Ljava/lang/Class",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 88
    const/4 v0, 0x0

    invoke-static {p0, v0, p1}, Lorg/web3j/abi/TypeDecoder;->decode(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    return-object v0
.end method

.method static decodeAddress(Ljava/lang/String;)Lorg/web3j/abi/datatypes/Address;
    .registers 3

    .prologue
    .line 92
    new-instance v1, Lorg/web3j/abi/datatypes/Address;

    const-class v0, Lorg/web3j/abi/datatypes/generated/Uint160;

    invoke-static {p0, v0}, Lorg/web3j/abi/TypeDecoder;->decodeNumeric(Ljava/lang/String;Ljava/lang/Class;)Lorg/web3j/abi/datatypes/NumericType;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/generated/Uint160;

    invoke-direct {v1, v0}, Lorg/web3j/abi/datatypes/Address;-><init>(Lorg/web3j/abi/datatypes/generated/Uint160;)V

    return-object v1
.end method

.method private static decodeArrayElements(Ljava/lang/String;ILorg/web3j/abi/TypeReference;IZ)Lorg/web3j/abi/datatypes/Type;
    .registers 9
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Lorg/web3j/abi/TypeReference",
            "<TT;>;IZ)TT;"
        }
    .end annotation

    .prologue
    .line 272
    :try_start_0
    invoke-static {p2}, Lorg/web3j/abi/Utils;->getParameterizedTypeFromArray(Lorg/web3j/abi/TypeReference;)Ljava/lang/Class;

    move-result-object v1

    .line 273
    const-class v0, Lorg/web3j/abi/datatypes/Array;

    invoke-virtual {v0, v1}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_32

    .line 274
    new-instance v0, Ljava/lang/UnsupportedOperationException;

    const-string v1, "Arrays of arrays are not currently supported for external functions, seehttp://solidity.readthedocs.io/en/develop/types.html#members"

    invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_14
    .catch Ljava/lang/ClassNotFoundException; {:try_start_0 .. :try_end_14} :catch_14

    .line 305
    :catch_14
    move-exception v0

    .line 306
    new-instance v1, Ljava/lang/UnsupportedOperationException;

    new-instance v2, Ljava/lang/StringBuilder;

    const-string v3, "Unable to access parameterized type "

    invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p2}, Lorg/web3j/abi/TypeReference;->getType()Ljava/lang/reflect/Type;

    move-result-object v3

    invoke-virtual {v3}, Ljava/lang/Object;->toString()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-direct {v1, v2, v0}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v1

    .line 278
    :cond_32
    :try_start_32
    new-instance v2, Ljava/util/ArrayList;

    invoke-direct {v2, p3}, Ljava/util/ArrayList;-><init>(I)V

    .line 280
    const/4 v0, 0x0

    .line 281
    :goto_38
    if-ge v0, p3, :cond_4b

    .line 284
    invoke-static {p0, p1, v1}, Lorg/web3j/abi/TypeDecoder;->decode(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v3

    .line 285
    invoke-interface {v2, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 282
    add-int/lit8 v0, v0, 0x1

    invoke-static {p0, p1, v1}, Lorg/web3j/abi/TypeDecoder;->getSingleElementLength(Ljava/lang/String;ILjava/lang/Class;)I

    move-result v3

    shl-int/lit8 v3, v3, 0x6

    add-int/2addr p1, v3

    goto :goto_38

    .line 288
    :cond_4b
    invoke-static {v1}, Lorg/web3j/abi/Utils;->getSimpleTypeName(Ljava/lang/Class;)Ljava/lang/String;

    move-result-object v0

    .line 290
    if-eqz p4, :cond_62

    .line 291
    invoke-interface {v2}, Ljava/util/List;->isEmpty()Z

    move-result v1

    if-eqz v1, :cond_5c

    .line 292
    invoke-static {v0}, Lorg/web3j/abi/datatypes/DynamicArray;->empty(Ljava/lang/String;)Lorg/web3j/abi/datatypes/DynamicArray;

    move-result-object v0

    .line 301
    :goto_5b
    return-object v0

    .line 294
    :cond_5c
    new-instance v0, Lorg/web3j/abi/datatypes/DynamicArray;

    invoke-direct {v0, v2}, Lorg/web3j/abi/datatypes/DynamicArray;-><init>(Ljava/util/List;)V

    goto :goto_5b

    .line 297
    :cond_62
    invoke-interface {v2}, Ljava/util/List;->isEmpty()Z

    move-result v0

    if-eqz v0, :cond_70

    .line 298
    new-instance v0, Ljava/lang/UnsupportedOperationException;

    const-string v1, "Zero length fixed array is invalid type"

    invoke-direct {v0, v1}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 301
    :cond_70
    invoke-static {p2, v2}, Lorg/web3j/abi/TypeDecoder;->instantiateStaticArray(Lorg/web3j/abi/TypeReference;Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;
    :try_end_73
    .catch Ljava/lang/ClassNotFoundException; {:try_start_32 .. :try_end_73} :catch_14

    move-result-object v0

    goto :goto_5b
.end method

.method static decodeBool(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/Bool;
    .registers 4

    .prologue
    .line 162
    add-int/lit8 v0, p1, 0x40

    invoke-virtual {p0, p1, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v0

    .line 163
    invoke-static {v0}, Lorg/web3j/utils/Numeric;->toBigInt(Ljava/lang/String;)Ljava/math/BigInteger;

    move-result-object v0

    .line 164
    sget-object v1, Ljava/math/BigInteger;->ONE:Ljava/math/BigInteger;

    invoke-virtual {v0, v1}, Ljava/math/BigInteger;->equals(Ljava/lang/Object;)Z

    move-result v0

    .line 165
    new-instance v1, Lorg/web3j/abi/datatypes/Bool;

    invoke-direct {v1, v0}, Lorg/web3j/abi/datatypes/Bool;-><init>(Z)V

    return-object v1
.end method

.method static decodeBytes(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Bytes;
    .registers 7
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Lorg/web3j/abi/datatypes/Bytes;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Ljava/lang/Class",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 174
    :try_start_0
    invoke-virtual {p2}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;

    move-result-object v0

    .line 175
    const-class v1, Lorg/web3j/abi/datatypes/Bytes;

    invoke-virtual {v1}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v0

    .line 176
    const/4 v1, 0x1

    aget-object v0, v0, v1

    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I

    move-result v0

    .line 177
    shl-int/lit8 v0, v0, 0x1

    .line 179
    add-int/2addr v0, p1

    invoke-virtual {p0, p1, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lorg/web3j/utils/Numeric;->hexStringToByteArray(Ljava/lang/String;)[B

    move-result-object v0

    .line 181
    const/4 v1, 0x1

    new-array v1, v1, [Ljava/lang/Class;

    const/4 v2, 0x0

    const-class v3, [B

    aput-object v3, v1, v2

    invoke-virtual {p2, v1}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;

    move-result-object v1

    const/4 v2, 0x1

    new-array v2, v2, [Ljava/lang/Object;

    const/4 v3, 0x0

    aput-object v0, v2, v3

    invoke-virtual {v1, v2}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;
    :try_end_38
    .catch Ljava/lang/NoSuchMethodException; {:try_start_0 .. :try_end_38} :catch_39
    .catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_38} :catch_41
    .catch Ljava/lang/InstantiationException; {:try_start_0 .. :try_end_38} :catch_49
    .catch Ljava/lang/IllegalAccessException; {:try_start_0 .. :try_end_38} :catch_51
    .catch Ljava/lang/IllegalArgumentException; {:try_start_0 .. :try_end_38} :catch_59
    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_0 .. :try_end_38} :catch_61

    .line 193
    :goto_38
    return-object v0

    .line 183
    :catch_39
    move-exception v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;

    goto :goto_38

    .line 185
    :catch_41
    move-exception v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;

    goto :goto_38

    .line 187
    :catch_49
    move-exception v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;

    goto :goto_38

    .line 189
    :catch_51
    move-exception v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;

    goto :goto_38

    .line 191
    :catch_59
    move-exception v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;

    goto :goto_38

    .line 193
    :catch_61
    move-exception v0

    invoke-static {v0, p2}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Bytes;

    goto :goto_38
.end method

.method static decodeBytes(Ljava/lang/String;Ljava/lang/Class;)Lorg/web3j/abi/datatypes/Bytes;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Lorg/web3j/abi/datatypes/Bytes;",
            ">(",
            "Ljava/lang/String;",
            "Ljava/lang/Class",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 169
    const/4 v0, 0x0

    invoke-static {p0, v0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeBytes(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Bytes;

    move-result-object v0

    return-object v0
.end method

.method static decodeDynamicArray(Ljava/lang/String;ILorg/web3j/abi/TypeReference;)Lorg/web3j/abi/datatypes/Type;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Lorg/web3j/abi/TypeReference",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 260
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeUintAsInt(Ljava/lang/String;I)I

    move-result v0

    .line 261
    add-int/lit8 v1, p1, 0x40

    .line 263
    const/4 v2, 0x1

    invoke-static {p0, v1, p2, v0, v2}, Lorg/web3j/abi/TypeDecoder;->decodeArrayElements(Ljava/lang/String;ILorg/web3j/abi/TypeReference;IZ)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    return-object v0
.end method

.method static decodeDynamicBytes(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/DynamicBytes;
    .registers 4

    .prologue
    .line 198
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeUintAsInt(Ljava/lang/String;I)I

    move-result v0

    .line 199
    shl-int/lit8 v0, v0, 0x1

    .line 201
    add-int/lit8 v1, p1, 0x40

    .line 203
    add-int/2addr v0, v1

    invoke-virtual {p0, v1, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v0

    .line 205
    invoke-static {v0}, Lorg/web3j/utils/Numeric;->hexStringToByteArray(Ljava/lang/String;)[B

    move-result-object v0

    .line 207
    new-instance v1, Lorg/web3j/abi/datatypes/DynamicBytes;

    invoke-direct {v1, v0}, Lorg/web3j/abi/datatypes/DynamicBytes;-><init>([B)V

    return-object v1
.end method

.method static decodeNumeric(Ljava/lang/String;Ljava/lang/Class;)Lorg/web3j/abi/datatypes/NumericType;
    .registers 7
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Lorg/web3j/abi/datatypes/NumericType;",
            ">(",
            "Ljava/lang/String;",
            "Ljava/lang/Class",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 97
    :try_start_0
    invoke-static {p0}, Lorg/web3j/utils/Numeric;->hexStringToByteArray(Ljava/lang/String;)[B

    move-result-object v0

    .line 98
    invoke-static {p1}, Lorg/web3j/abi/TypeDecoder;->getTypeLengthInBytes(Ljava/lang/Class;)I

    move-result v1

    .line 100
    add-int/lit8 v2, v1, 0x1

    new-array v2, v2, [B

    .line 102
    const-class v3, Lorg/web3j/abi/datatypes/Int;

    invoke-virtual {v3, p1}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v3

    if-nez v3, :cond_1c

    const-class v3, Lorg/web3j/abi/datatypes/Fixed;

    invoke-virtual {v3, p1}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v3

    if-eqz v3, :cond_22

    .line 103
    :cond_1c
    const/4 v3, 0x0

    const/4 v4, 0x0

    aget-byte v4, v0, v4

    aput-byte v4, v2, v3

    .line 106
    :cond_22
    rsub-int/lit8 v3, v1, 0x20

    .line 107
    const/4 v4, 0x1

    invoke-static {v0, v3, v2, v4, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 109
    new-instance v0, Ljava/math/BigInteger;

    invoke-direct {v0, v2}, Ljava/math/BigInteger;-><init>([B)V

    .line 110
    const/4 v1, 0x1

    new-array v1, v1, [Ljava/lang/Class;

    const/4 v2, 0x0

    const-class v3, Ljava/math/BigInteger;

    aput-object v3, v1, v2

    invoke-virtual {p1, v1}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;

    move-result-object v1

    const/4 v2, 0x1

    new-array v2, v2, [Ljava/lang/Object;

    const/4 v3, 0x0

    aput-object v0, v2, v3

    invoke-virtual {v1, v2}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;
    :try_end_45
    .catch Ljava/lang/NoSuchMethodException; {:try_start_0 .. :try_end_45} :catch_46
    .catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_45} :catch_4e
    .catch Ljava/lang/InstantiationException; {:try_start_0 .. :try_end_45} :catch_56
    .catch Ljava/lang/IllegalAccessException; {:try_start_0 .. :try_end_45} :catch_5e
    .catch Ljava/lang/IllegalArgumentException; {:try_start_0 .. :try_end_45} :catch_66
    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_0 .. :try_end_45} :catch_6e

    .line 123
    :goto_45
    return-object v0

    .line 113
    :catch_46
    move-exception v0

    invoke-static {v0, p1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;

    goto :goto_45

    .line 115
    :catch_4e
    move-exception v0

    invoke-static {v0, p1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;

    goto :goto_45

    .line 117
    :catch_56
    move-exception v0

    invoke-static {v0, p1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;

    goto :goto_45

    .line 119
    :catch_5e
    move-exception v0

    invoke-static {v0, p1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;

    goto :goto_45

    .line 121
    :catch_66
    move-exception v0

    invoke-static {v0, p1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;

    goto :goto_45

    .line 123
    :catch_6e
    move-exception v0

    invoke-static {v0, p1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/NumericType;

    goto :goto_45
.end method

.method static decodeStaticArray(Ljava/lang/String;ILorg/web3j/abi/TypeReference;I)Lorg/web3j/abi/datatypes/Type;
    .registers 5
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Lorg/web3j/abi/TypeReference",
            "<TT;>;I)TT;"
        }
    .end annotation

    .prologue
    .line 228
    const/4 v0, 0x0

    invoke-static {p0, p1, p2, p3, v0}, Lorg/web3j/abi/TypeDecoder;->decodeArrayElements(Ljava/lang/String;ILorg/web3j/abi/TypeReference;IZ)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    return-object v0
.end method

.method static decodeUintAsInt(Ljava/lang/String;I)I
    .registers 5

    .prologue
    .line 157
    add-int/lit8 v0, p1, 0x40

    invoke-virtual {p0, p1, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v0

    .line 158
    const/4 v1, 0x0

    const-class v2, Lorg/web3j/abi/datatypes/Uint;

    invoke-static {v0, v1, v2}, Lorg/web3j/abi/TypeDecoder;->decode(Ljava/lang/String;ILjava/lang/Class;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Uint;

    invoke-virtual {v0}, Lorg/web3j/abi/datatypes/Uint;->getValue()Ljava/math/BigInteger;

    move-result-object v0

    invoke-virtual {v0}, Ljava/math/BigInteger;->intValue()I

    move-result v0

    return v0
.end method

.method static decodeUtf8String(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/Utf8String;
    .registers 6

    .prologue
    .line 211
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeDynamicBytes(Ljava/lang/String;I)Lorg/web3j/abi/datatypes/DynamicBytes;

    move-result-object v0

    .line 212
    invoke-virtual {v0}, Lorg/web3j/abi/datatypes/DynamicBytes;->getValue()[B

    move-result-object v1

    .line 215
    :try_start_8
    new-instance v0, Lorg/web3j/abi/datatypes/Utf8String;

    new-instance v2, Ljava/lang/String;

    const-string v3, "UTF-8"

    invoke-direct {v2, v1, v3}, Ljava/lang/String;-><init>([BLjava/lang/String;)V

    invoke-direct {v0, v2}, Lorg/web3j/abi/datatypes/Utf8String;-><init>(Ljava/lang/String;)V
    :try_end_14
    .catch Ljava/io/UnsupportedEncodingException; {:try_start_8 .. :try_end_14} :catch_15

    .line 217
    :goto_14
    return-object v0

    :catch_15
    move-exception v0

    const-class v1, Lorg/web3j/abi/datatypes/Utf8String;

    invoke-static {v0, v1}, Lorg/web3j/abi/TypeDecoder;->throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Utf8String;

    goto :goto_14
.end method

.method static getSingleElementLength(Ljava/lang/String;ILjava/lang/Class;)I
    .registers 4
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/lang/String;",
            "I",
            "Ljava/lang/Class",
            "<TT;>;)I"
        }
    .end annotation

    .prologue
    .line 40
    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v0

    if-ne v0, p1, :cond_8

    .line 41
    const/4 v0, 0x0

    .line 47
    :goto_7
    return v0

    .line 42
    :cond_8
    const-class v0, Lorg/web3j/abi/datatypes/DynamicBytes;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-nez v0, :cond_18

    const-class v0, Lorg/web3j/abi/datatypes/Utf8String;

    invoke-virtual {v0, p2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_21

    .line 45
    :cond_18
    invoke-static {p0, p1}, Lorg/web3j/abi/TypeDecoder;->decodeUintAsInt(Ljava/lang/String;I)I

    move-result v0

    div-int/lit8 v0, v0, 0x20

    add-int/lit8 v0, v0, 0x2

    goto :goto_7

    .line 47
    :cond_21
    const/4 v0, 0x1

    goto :goto_7
.end method

.method static getTypeLength(Ljava/lang/Class;)I
    .registers 5
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Lorg/web3j/abi/datatypes/NumericType;",
            ">(",
            "Ljava/lang/Class",
            "<TT;>;)I"
        }
    .end annotation

    .prologue
    const/4 v3, 0x2

    const/4 v2, 0x1

    .line 138
    const-class v0, Lorg/web3j/abi/datatypes/IntType;

    invoke-virtual {v0, p0}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_47

    .line 139
    new-instance v0, Ljava/lang/StringBuilder;

    const-string v1, "("

    invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    const-class v1, Lorg/web3j/abi/datatypes/Uint;

    invoke-virtual {v1}, Ljava/lang/Class;->getSimpleName()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

    const-string v1, "|"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-class v1, Lorg/web3j/abi/datatypes/Int;

    invoke-virtual {v1}, Ljava/lang/Class;->getSimpleName()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

    const-string 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

    .line 140
    invoke-virtual {p0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v1, v0}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v0

    .line 141
    array-length v1, v0

    if-ne v1, v3, :cond_9c

    .line 142
    aget-object v0, v0, v2

    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I

    move-result v0

    .line 153
    :goto_46
    return v0

    .line 144
    :cond_47
    const-class v0, Lorg/web3j/abi/datatypes/FixedPointType;

    invoke-virtual {v0, p0}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v0

    if-eqz v0, :cond_9c

    .line 145
    new-instance v0, Ljava/lang/StringBuilder;

    const-string v1, "("

    invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    const-class v1, Lorg/web3j/abi/datatypes/Ufixed;

    invoke-virtual {v1}, Ljava/lang/Class;->getSimpleName()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

    const-string v1, "|"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-class v1, Lorg/web3j/abi/datatypes/Fixed;

    invoke-virtual {v1}, Ljava/lang/Class;->getSimpleName()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

    const-string 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

    .line 147
    invoke-virtual {p0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v1, v0}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v0

    .line 148
    array-length v1, v0

    if-ne v1, v3, :cond_9c

    .line 149
    aget-object v0, v0, v2

    const-string v1, "x"

    invoke-virtual {v0, v1}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v0

    .line 150
    const/4 v1, 0x0

    aget-object v1, v0, v1

    invoke-static {v1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I

    move-result v1

    aget-object v0, v0, v2

    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I

    move-result v0

    add-int/2addr v0, v1

    goto :goto_46

    .line 153
    :cond_9c
    const/16 v0, 0x100

    goto :goto_46
.end method

.method static getTypeLengthInBytes(Ljava/lang/Class;)I
    .registers 2
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Lorg/web3j/abi/datatypes/NumericType;",
            ">(",
            "Ljava/lang/Class",
            "<TT;>;)I"
        }
    .end annotation

    .prologue
    .line 134
    invoke-static {p0}, Lorg/web3j/abi/TypeDecoder;->getTypeLength(Ljava/lang/Class;)I

    move-result v0

    shr-int/lit8 v0, v0, 0x3

    return v0
.end method

.method private static instantiateStaticArray(Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;
    .registers 2
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Ljava/util/List",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 253
    new-instance v0, Lorg/web3j/abi/datatypes/StaticArray;

    invoke-direct {v0, p0}, Lorg/web3j/abi/datatypes/StaticArray;-><init>(Ljava/util/List;)V

    return-object v0
.end method

.method private static instantiateStaticArray(Lorg/web3j/abi/TypeReference;Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T::",
            "Lorg/web3j/abi/datatypes/Type;",
            ">(",
            "Lorg/web3j/abi/TypeReference",
            "<TT;>;",
            "Ljava/util/List",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 235
    :try_start_0
    const-class v0, Ljava/util/List;

    .line 236
    invoke-virtual {p0}, Lorg/web3j/abi/TypeReference;->getClassType()Ljava/lang/Class;

    move-result-object v1

    const/4 v2, 0x1

    new-array v2, v2, [Ljava/lang/Class;

    const/4 v3, 0x0

    aput-object v0, v2, v3

    invoke-virtual {v1, v2}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;

    move-result-object v0

    const/4 v1, 0x1

    new-array v1, v1, [Ljava/lang/Object;

    const/4 v2, 0x0

    aput-object p1, v1, v2

    invoke-virtual {v0, v1}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/web3j/abi/datatypes/Type;
    :try_end_1c
    .catch Ljava/lang/ClassNotFoundException; {:try_start_0 .. :try_end_1c} :catch_1d
    .catch Ljava/lang/IllegalAccessException; {:try_start_0 .. :try_end_1c} :catch_23
    .catch Ljava/lang/InstantiationException; {:try_start_0 .. :try_end_1c} :catch_29
    .catch Ljava/lang/NoSuchMethodException; {:try_start_0 .. :try_end_1c} :catch_2f
    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_0 .. :try_end_1c} :catch_35

    .line 247
    :goto_1c
    return-object v0

    .line 239
    :catch_1d
    move-exception v0

    invoke-static {p1}, Lorg/web3j/abi/TypeDecoder;->instantiateStaticArray(Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    goto :goto_1c

    .line 241
    :catch_23
    move-exception v0

    invoke-static {p1}, Lorg/web3j/abi/TypeDecoder;->instantiateStaticArray(Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    goto :goto_1c

    .line 243
    :catch_29
    move-exception v0

    invoke-static {p1}, Lorg/web3j/abi/TypeDecoder;->instantiateStaticArray(Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    goto :goto_1c

    .line 245
    :catch_2f
    move-exception v0

    invoke-static {p1}, Lorg/web3j/abi/TypeDecoder;->instantiateStaticArray(Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    goto :goto_1c

    .line 247
    :catch_35
    move-exception v0

    invoke-static {p1}, Lorg/web3j/abi/TypeDecoder;->instantiateStaticArray(Ljava/util/List;)Lorg/web3j/abi/datatypes/Type;

    move-result-object v0

    goto :goto_1c
.end method

.method private static throwUnsupportedOperation(Ljava/lang/Exception;Ljava/lang/Class;)Ljava/lang/Object;
    .registers 5
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Ljava/lang/Object;",
            ">(",
            "Ljava/lang/Exception;",
            "Ljava/lang/Class",
            "<TT;>;)TT;"
        }
    .end annotation

    .prologue
    .line 129
    new-instance v0, Ljava/lang/UnsupportedOperationException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Unable to create instance of "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p1}, Ljava/lang/Class;->getName()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

    invoke-direct {v0, v1, p0}, Ljava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v0
.end method