Nat160.smali

.class public abstract Lorg/spongycastle/math/raw/Nat160;
.super Ljava/lang/Object;
.source "Nat160.java"


# static fields
.field private static final M:J = 0xffffffffL


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

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

    return-void
.end method

.method public static add([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 14
    const-wide/16 v0, 0x0

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 15
    long-to-int v2, v0

    aput v2, p2, v9

    .line 16
    ushr-long/2addr v0, v8

    .line 17
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 18
    long-to-int v2, v0

    aput v2, p2, v10

    .line 19
    ushr-long/2addr v0, v8

    .line 20
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 21
    long-to-int v2, v0

    aput v2, p2, v11

    .line 22
    ushr-long/2addr v0, v8

    .line 23
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 24
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 25
    ushr-long/2addr v0, v8

    .line 26
    const/4 v2, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 27
    const/4 v2, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 28
    ushr-long/2addr v0, v8

    .line 29
    long-to-int v0, v0

    return v0
.end method

.method public static addBothTo([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 35
    const-wide/16 v0, 0x0

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 36
    long-to-int v2, v0

    aput v2, p2, v9

    .line 37
    ushr-long/2addr v0, v8

    .line 38
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 39
    long-to-int v2, v0

    aput v2, p2, v10

    .line 40
    ushr-long/2addr v0, v8

    .line 41
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 42
    long-to-int v2, v0

    aput v2, p2, v11

    .line 43
    ushr-long/2addr v0, v8

    .line 44
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    const/4 v4, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 45
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 46
    ushr-long/2addr v0, v8

    .line 47
    const/4 v2, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    const/4 v4, 0x4

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 48
    const/4 v2, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 49
    ushr-long/2addr v0, v8

    .line 50
    long-to-int v0, v0

    return v0
.end method

.method public static addTo([II[III)I
    .registers 14

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 76
    int-to-long v0, p4

    and-long/2addr v0, v6

    .line 77
    aget v2, p0, p1

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 78
    long-to-int v2, v0

    aput v2, p2, p3

    .line 79
    ushr-long/2addr v0, v8

    .line 80
    add-int/lit8 v2, p1, 0x1

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 81
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 82
    ushr-long/2addr v0, v8

    .line 83
    add-int/lit8 v2, p1, 0x2

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x2

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 84
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 85
    ushr-long/2addr v0, v8

    .line 86
    add-int/lit8 v2, p1, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 87
    add-int/lit8 v2, p3, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 88
    ushr-long/2addr v0, v8

    .line 89
    add-int/lit8 v2, p1, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x4

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 90
    add-int/lit8 v2, p3, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 91
    ushr-long/2addr v0, v8

    .line 92
    long-to-int v0, v0

    return v0
.end method

.method public static addTo([I[I)I
    .registers 14

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 56
    const-wide/16 v0, 0x0

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 57
    long-to-int v2, v0

    aput v2, p1, v9

    .line 58
    ushr-long/2addr v0, v8

    .line 59
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 60
    long-to-int v2, v0

    aput v2, p1, v10

    .line 61
    ushr-long/2addr v0, v8

    .line 62
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 63
    long-to-int v2, v0

    aput v2, p1, v11

    .line 64
    ushr-long/2addr v0, v8

    .line 65
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 66
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p1, v2

    .line 67
    ushr-long/2addr v0, v8

    .line 68
    const/4 v2, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 69
    const/4 v2, 0x4

    long-to-int v3, v0

    aput v3, p1, v2

    .line 70
    ushr-long/2addr v0, v8

    .line 71
    long-to-int v0, v0

    return v0
.end method

.method public static addToEachOther([II[II)I
    .registers 13

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 98
    const-wide/16 v0, 0x0

    aget v2, p0, p1

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 99
    long-to-int v2, v0

    aput v2, p0, p1

    .line 100
    long-to-int v2, v0

    aput v2, p2, p3

    .line 101
    ushr-long/2addr v0, v8

    .line 102
    add-int/lit8 v2, p1, 0x1

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 103
    add-int/lit8 v2, p1, 0x1

    long-to-int v3, v0

    aput v3, p0, v2

    .line 104
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 105
    ushr-long/2addr v0, v8

    .line 106
    add-int/lit8 v2, p1, 0x2

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x2

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 107
    add-int/lit8 v2, p1, 0x2

    long-to-int v3, v0

    aput v3, p0, v2

    .line 108
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 109
    ushr-long/2addr v0, v8

    .line 110
    add-int/lit8 v2, p1, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 111
    add-int/lit8 v2, p1, 0x3

    long-to-int v3, v0

    aput v3, p0, v2

    .line 112
    add-int/lit8 v2, p3, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 113
    ushr-long/2addr v0, v8

    .line 114
    add-int/lit8 v2, p1, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x4

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 115
    add-int/lit8 v2, p1, 0x4

    long-to-int v3, v0

    aput v3, p0, v2

    .line 116
    add-int/lit8 v2, p3, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 117
    ushr-long/2addr v0, v8

    .line 118
    long-to-int v0, v0

    return v0
.end method

.method public static copy([I[I)V
    .registers 8

    .prologue
    const/4 v5, 0x4

    const/4 v4, 0x3

    const/4 v3, 0x2

    const/4 v2, 0x1

    const/4 v1, 0x0

    .line 123
    aget v0, p0, v1

    aput v0, p1, v1

    .line 124
    aget v0, p0, v2

    aput v0, p1, v2

    .line 125
    aget v0, p0, v3

    aput v0, p1, v3

    .line 126
    aget v0, p0, v4

    aput v0, p1, v4

    .line 127
    aget v0, p0, v5

    aput v0, p1, v5

    .line 128
    return-void
.end method

.method public static create()[I
    .registers 1

    .prologue
    .line 132
    const/4 v0, 0x5

    new-array v0, v0, [I

    return-object v0
.end method

.method public static createExt()[I
    .registers 1

    .prologue
    .line 137
    const/16 v0, 0xa

    new-array v0, v0, [I

    return-object v0
.end method

.method public static diff([II[II[II)Z
    .registers 13

    .prologue
    .line 142
    invoke-static {p0, p1, p2, p3}, Lorg/spongycastle/math/raw/Nat160;->gte([II[II)Z

    move-result v6

    .line 143
    if-eqz v6, :cond_a

    .line 145
    invoke-static/range {p0 .. p5}, Lorg/spongycastle/math/raw/Nat160;->sub([II[II[II)I

    .line 151
    :goto_9
    return v6

    :cond_a
    move-object v0, p2

    move v1, p3

    move-object v2, p0

    move v3, p1

    move-object v4, p4

    move v5, p5

    .line 149
    invoke-static/range {v0 .. v5}, Lorg/spongycastle/math/raw/Nat160;->sub([II[II[II)I

    goto :goto_9
.end method

.method public static eq([I[I)Z
    .registers 5

    .prologue
    .line 156
    const/4 v0, 0x4

    :goto_1
    if-ltz v0, :cond_e

    .line 158
    aget v1, p0, v0

    aget v2, p1, v0

    if-eq v1, v2, :cond_b

    .line 160
    const/4 v0, 0x0

    .line 163
    :goto_a
    return v0

    .line 156
    :cond_b
    add-int/lit8 v0, v0, -0x1

    goto :goto_1

    .line 163
    :cond_e
    const/4 v0, 0x1

    goto :goto_a
.end method

.method public static fromBigInteger(Ljava/math/BigInteger;)[I
    .registers 5

    .prologue
    .line 168
    invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I

    move-result v0

    if-ltz v0, :cond_e

    invoke-virtual {p0}, Ljava/math/BigInteger;->bitLength()I

    move-result v0

    const/16 v1, 0xa0

    if-le v0, v1, :cond_14

    .line 170
    :cond_e
    new-instance v0, Ljava/lang/IllegalArgumentException;

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

    throw v0

    .line 173
    :cond_14
    invoke-static {}, Lorg/spongycastle/math/raw/Nat160;->create()[I

    move-result-object v2

    .line 174
    const/4 v0, 0x0

    .line 175
    :goto_19
    invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I

    move-result v1

    if-eqz v1, :cond_2f

    .line 177
    add-int/lit8 v1, v0, 0x1

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

    move-result v3

    aput v3, v2, v0

    .line 178
    const/16 v0, 0x20

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

    move-result-object p0

    move v0, v1

    goto :goto_19

    .line 180
    :cond_2f
    return-object v2
.end method

.method public static getBit([II)I
    .registers 5

    .prologue
    const/4 v0, 0x0

    .line 185
    if-nez p1, :cond_8

    .line 187
    aget v0, p0, v0

    and-int/lit8 v0, v0, 0x1

    .line 195
    :cond_7
    :goto_7
    return v0

    .line 189
    :cond_8
    shr-int/lit8 v1, p1, 0x5

    .line 190
    if-ltz v1, :cond_7

    const/4 v2, 0x5

    if-ge v1, v2, :cond_7

    .line 194
    and-int/lit8 v0, p1, 0x1f

    .line 195
    aget v1, p0, v1

    ushr-int v0, v1, v0

    and-int/lit8 v0, v0, 0x1

    goto :goto_7
.end method

.method public static gte([II[II)Z
    .registers 9

    .prologue
    const/4 v0, 0x1

    const/high16 v4, -0x80000000

    .line 214
    const/4 v1, 0x4

    :goto_4
    if-ltz v1, :cond_13

    .line 216
    add-int v2, p1, v1

    aget v2, p0, v2

    xor-int/2addr v2, v4

    .line 217
    add-int v3, p3, v1

    aget v3, p2, v3

    xor-int/2addr v3, v4

    .line 218
    if-ge v2, v3, :cond_14

    .line 219
    const/4 v0, 0x0

    .line 223
    :cond_13
    return v0

    .line 220
    :cond_14
    if-gt v2, v3, :cond_13

    .line 214
    add-int/lit8 v1, v1, -0x1

    goto :goto_4
.end method

.method public static gte([I[I)Z
    .registers 7

    .prologue
    const/4 v0, 0x1

    const/high16 v4, -0x80000000

    .line 200
    const/4 v1, 0x4

    :goto_4
    if-ltz v1, :cond_f

    .line 202
    aget v2, p0, v1

    xor-int/2addr v2, v4

    .line 203
    aget v3, p1, v1

    xor-int/2addr v3, v4

    .line 204
    if-ge v2, v3, :cond_10

    .line 205
    const/4 v0, 0x0

    .line 209
    :cond_f
    return v0

    .line 206
    :cond_10
    if-gt v2, v3, :cond_f

    .line 200
    add-int/lit8 v1, v1, -0x1

    goto :goto_4
.end method

.method public static isOne([I)Z
    .registers 5

    .prologue
    const/4 v1, 0x1

    const/4 v0, 0x0

    .line 228
    aget v2, p0, v0

    if-eq v2, v1, :cond_7

    .line 239
    :cond_6
    :goto_6
    return v0

    :cond_7
    move v2, v1

    .line 232
    :goto_8
    const/4 v3, 0x5

    if-ge v2, v3, :cond_12

    .line 234
    aget v3, p0, v2

    if-nez v3, :cond_6

    .line 232
    add-int/lit8 v2, v2, 0x1

    goto :goto_8

    :cond_12
    move v0, v1

    .line 239
    goto :goto_6
.end method

.method public static isZero([I)Z
    .registers 4

    .prologue
    const/4 v0, 0x0

    .line 244
    move v1, v0

    :goto_2
    const/4 v2, 0x5

    if-ge v1, v2, :cond_d

    .line 246
    aget v2, p0, v1

    if-eqz v2, :cond_a

    .line 251
    :goto_9
    return v0

    .line 244
    :cond_a
    add-int/lit8 v1, v1, 0x1

    goto :goto_2

    .line 251
    :cond_d
    const/4 v0, 0x1

    goto :goto_9
.end method

.method public static mul([II[II[II)V
    .registers 30

    .prologue
    .line 306
    aget v2, p2, p3

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v4, v2

    .line 307
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v6, 0xffffffffL

    and-long/2addr v6, v2

    .line 308
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v8, v2

    .line 309
    add-int/lit8 v2, p3, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v10, 0xffffffffL

    and-long/2addr v10, v2

    .line 310
    add-int/lit8 v2, p3, 0x4

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v12, 0xffffffffL

    and-long/2addr v12, v2

    .line 313
    aget v2, p0, p1

    int-to-long v2, v2

    const-wide v14, 0xffffffffL

    and-long/2addr v2, v14

    .line 314
    const-wide/16 v14, 0x0

    mul-long v16, v2, v4

    add-long v14, v14, v16

    .line 315
    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p4, p5

    .line 316
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 317
    mul-long v16, v2, v6

    add-long v14, v14, v16

    .line 318
    add-int/lit8 v16, p5, 0x1

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p4, v16

    .line 319
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 320
    mul-long v16, v2, v8

    add-long v14, v14, v16

    .line 321
    add-int/lit8 v16, p5, 0x2

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p4, v16

    .line 322
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 323
    mul-long v16, v2, v10

    add-long v14, v14, v16

    .line 324
    add-int/lit8 v16, p5, 0x3

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p4, v16

    .line 325
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 326
    mul-long/2addr v2, v12

    add-long/2addr v2, v14

    .line 327
    add-int/lit8 v14, p5, 0x4

    long-to-int v15, v2

    aput v15, p4, v14

    .line 328
    const/16 v14, 0x20

    ushr-long/2addr v2, v14

    .line 329
    add-int/lit8 v14, p5, 0x5

    long-to-int v2, v2

    aput v2, p4, v14

    .line 332
    const/4 v2, 0x1

    :goto_8a
    const/4 v3, 0x5

    if-ge v2, v3, :cond_141

    .line 334
    add-int/lit8 p5, p5, 0x1

    .line 335
    add-int v3, p1, v2

    aget v3, p0, v3

    int-to-long v14, v3

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 336
    const-wide/16 v16, 0x0

    mul-long v18, v14, v4

    aget v3, p4, p5

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 337
    move-wide/from16 v0, v16

    long-to-int v3, v0

    aput v3, p4, p5

    .line 338
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 339
    mul-long v18, v14, v6

    add-int/lit8 v3, p5, 0x1

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 340
    add-int/lit8 v3, p5, 0x1

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p4, v3

    .line 341
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 342
    mul-long v18, v14, v8

    add-int/lit8 v3, p5, 0x2

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 343
    add-int/lit8 v3, p5, 0x2

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p4, v3

    .line 344
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 345
    mul-long v18, v14, v10

    add-int/lit8 v3, p5, 0x3

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 346
    add-int/lit8 v3, p5, 0x3

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p4, v3

    .line 347
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 348
    mul-long/2addr v14, v12

    add-int/lit8 v3, p5, 0x4

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v14, v14, v18

    add-long v14, v14, v16

    .line 349
    add-int/lit8 v3, p5, 0x4

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p4, v3

    .line 350
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 351
    add-int/lit8 v3, p5, 0x5

    long-to-int v14, v14

    aput v14, p4, v3

    .line 332
    add-int/lit8 v2, v2, 0x1

    goto/16 :goto_8a

    .line 353
    :cond_141
    return-void
.end method

.method public static mul([I[I[I)V
    .registers 27

    .prologue
    .line 256
    const/4 v2, 0x0

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v4, v2

    .line 257
    const/4 v2, 0x1

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v6, 0xffffffffL

    and-long/2addr v6, v2

    .line 258
    const/4 v2, 0x2

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v8, v2

    .line 259
    const/4 v2, 0x3

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v10, 0xffffffffL

    and-long/2addr v10, v2

    .line 260
    const/4 v2, 0x4

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v12, 0xffffffffL

    and-long/2addr v12, v2

    .line 263
    const/4 v2, 0x0

    aget v2, p0, v2

    int-to-long v2, v2

    const-wide v14, 0xffffffffL

    and-long/2addr v2, v14

    .line 264
    const-wide/16 v14, 0x0

    mul-long v16, v2, v4

    add-long v14, v14, v16

    .line 265
    const/16 v16, 0x0

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p2, v16

    .line 266
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 267
    mul-long v16, v2, v6

    add-long v14, v14, v16

    .line 268
    const/16 v16, 0x1

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p2, v16

    .line 269
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 270
    mul-long v16, v2, v8

    add-long v14, v14, v16

    .line 271
    const/16 v16, 0x2

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p2, v16

    .line 272
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 273
    mul-long v16, v2, v10

    add-long v14, v14, v16

    .line 274
    const/16 v16, 0x3

    long-to-int v0, v14

    move/from16 v17, v0

    aput v17, p2, v16

    .line 275
    const/16 v16, 0x20

    ushr-long v14, v14, v16

    .line 276
    mul-long/2addr v2, v12

    add-long/2addr v2, v14

    .line 277
    const/4 v14, 0x4

    long-to-int v15, v2

    aput v15, p2, v14

    .line 278
    const/16 v14, 0x20

    ushr-long/2addr v2, v14

    .line 279
    const/4 v14, 0x5

    long-to-int v2, v2

    aput v2, p2, v14

    .line 282
    const/4 v2, 0x1

    :goto_88
    const/4 v3, 0x5

    if-ge v2, v3, :cond_13b

    .line 284
    aget v3, p0, v2

    int-to-long v14, v3

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 285
    const-wide/16 v16, 0x0

    mul-long v18, v14, v4

    aget v3, p2, v2

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 286
    move-wide/from16 v0, v16

    long-to-int v3, v0

    aput v3, p2, v2

    .line 287
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 288
    mul-long v18, v14, v6

    add-int/lit8 v3, v2, 0x1

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 289
    add-int/lit8 v3, v2, 0x1

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p2, v3

    .line 290
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 291
    mul-long v18, v14, v8

    add-int/lit8 v3, v2, 0x2

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 292
    add-int/lit8 v3, v2, 0x2

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p2, v3

    .line 293
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 294
    mul-long v18, v14, v10

    add-int/lit8 v3, v2, 0x3

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 295
    add-int/lit8 v3, v2, 0x3

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p2, v3

    .line 296
    const/16 v3, 0x20

    ushr-long v16, v16, v3

    .line 297
    mul-long/2addr v14, v12

    add-int/lit8 v3, v2, 0x4

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v14, v14, v18

    add-long v14, v14, v16

    .line 298
    add-int/lit8 v3, v2, 0x4

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p2, v3

    .line 299
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 300
    add-int/lit8 v3, v2, 0x5

    long-to-int v14, v14

    aput v14, p2, v3

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

    goto/16 :goto_88

    .line 302
    :cond_13b
    return-void
.end method

.method public static mul33Add(I[II[II[II)J
    .registers 19

    .prologue
    .line 428
    int-to-long v0, p0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    .line 429
    aget v2, p1, p2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    .line 430
    const-wide/16 v4, 0x0

    mul-long v6, v0, v2

    aget v8, p3, p4

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v6, v8

    add-long/2addr v4, v6

    .line 431
    long-to-int v6, v4

    aput v6, p5, p6

    .line 432
    const/16 v6, 0x20

    ushr-long/2addr v4, v6

    .line 433
    add-int/lit8 v6, p2, 0x1

    aget v6, p1, v6

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    .line 434
    mul-long v8, v0, v6

    add-long/2addr v2, v8

    add-int/lit8 v8, p4, 0x1

    aget v8, p3, v8

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v2, v8

    add-long/2addr v2, v4

    .line 435
    add-int/lit8 v4, p6, 0x1

    long-to-int v5, v2

    aput v5, p5, v4

    .line 436
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 437
    add-int/lit8 v4, p2, 0x2

    aget v4, p1, v4

    int-to-long v4, v4

    const-wide v8, 0xffffffffL

    and-long/2addr v4, v8

    .line 438
    mul-long v8, v0, v4

    add-long/2addr v6, v8

    add-int/lit8 v8, p4, 0x2

    aget v8, p3, v8

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v6, v8

    add-long/2addr v2, v6

    .line 439
    add-int/lit8 v6, p6, 0x2

    long-to-int v7, v2

    aput v7, p5, v6

    .line 440
    const/16 v6, 0x20

    ushr-long/2addr v2, v6

    .line 441
    add-int/lit8 v6, p2, 0x3

    aget v6, p1, v6

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    .line 442
    mul-long v8, v0, v6

    add-long/2addr v4, v8

    add-int/lit8 v8, p4, 0x3

    aget v8, p3, v8

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v4, v8

    add-long/2addr v2, v4

    .line 443
    add-int/lit8 v4, p6, 0x3

    long-to-int v5, v2

    aput v5, p5, v4

    .line 444
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 445
    add-int/lit8 v4, p2, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    const-wide v8, 0xffffffffL

    and-long/2addr v4, v8

    .line 446
    mul-long/2addr v0, v4

    add-long/2addr v0, v6

    add-int/lit8 v6, p4, 0x4

    aget v6, p3, v6

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    add-long/2addr v0, v6

    add-long/2addr v0, v2

    .line 447
    add-int/lit8 v2, p6, 0x4

    long-to-int v3, v0

    aput v3, p5, v2

    .line 448
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 449
    add-long/2addr v0, v4

    .line 450
    return-wide v0
.end method

.method public static mul33DWordAdd(IJ[II)I
    .registers 20

    .prologue
    .line 481
    int-to-long v2, p0

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    .line 482
    const-wide v4, 0xffffffffL

    and-long v4, v4, p1

    .line 483
    const-wide/16 v6, 0x0

    mul-long v8, v2, v4

    aget v10, p3, p4

    int-to-long v10, v10

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    add-long/2addr v8, v10

    add-long/2addr v6, v8

    .line 484
    long-to-int v8, v6

    aput v8, p3, p4

    .line 485
    const/16 v8, 0x20

    ushr-long/2addr v6, v8

    .line 486
    const/16 v8, 0x20

    ushr-long v8, p1, v8

    .line 487
    mul-long/2addr v2, v8

    add-long/2addr v2, v4

    add-int/lit8 v4, p4, 0x1

    aget v4, p3, v4

    int-to-long v4, v4

    const-wide v10, 0xffffffffL

    and-long/2addr v4, v10

    add-long/2addr v2, v4

    add-long/2addr v2, v6

    .line 488
    add-int/lit8 v4, p4, 0x1

    long-to-int v5, v2

    aput v5, p3, v4

    .line 489
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 490
    add-int/lit8 v4, p4, 0x2

    aget v4, p3, v4

    int-to-long v4, v4

    const-wide v6, 0xffffffffL

    and-long/2addr v4, v6

    add-long/2addr v4, v8

    add-long/2addr v2, v4

    .line 491
    add-int/lit8 v4, p4, 0x2

    long-to-int v5, v2

    aput v5, p3, v4

    .line 492
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 493
    add-int/lit8 v4, p4, 0x3

    aget v4, p3, v4

    int-to-long v4, v4

    const-wide v6, 0xffffffffL

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 494
    add-int/lit8 v4, p4, 0x3

    long-to-int v5, v2

    aput v5, p3, v4

    .line 495
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 496
    const-wide/16 v4, 0x0

    cmp-long v2, v2, v4

    if-nez v2, :cond_6f

    const/4 v2, 0x0

    :goto_6e
    return v2

    :cond_6f
    const/4 v2, 0x5

    const/4 v3, 0x4

    move-object/from16 v0, p3

    move/from16 v1, p4

    invoke-static {v2, v0, v1, v3}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v2

    goto :goto_6e
.end method

.method public static mul33WordAdd(II[II)I
    .registers 16

    .prologue
    const-wide/16 v10, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 504
    int-to-long v0, p0

    and-long/2addr v0, v6

    int-to-long v2, p1

    and-long/2addr v2, v6

    .line 505
    mul-long/2addr v0, v2

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v0, v4

    add-long/2addr v0, v10

    .line 506
    long-to-int v4, v0

    aput v4, p2, p3

    .line 507
    ushr-long/2addr v0, v8

    .line 508
    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 509
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 510
    ushr-long/2addr v0, v8

    .line 511
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-long/2addr v0, v2

    .line 512
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 513
    ushr-long/2addr v0, v8

    .line 514
    cmp-long v0, v0, v10

    if-nez v0, :cond_39

    const/4 v0, 0x0

    :goto_38
    return v0

    :cond_39
    const/4 v0, 0x5

    const/4 v1, 0x3

    invoke-static {v0, p2, p3, v1}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v0

    goto :goto_38
.end method

.method public static mulAddTo([II[II[II)I
    .registers 32

    .prologue
    .line 391
    aget v2, p2, p3

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 392
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v8, v2, v4

    .line 393
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v10, v2, v4

    .line 394
    add-int/lit8 v2, p3, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v12, v2, v4

    .line 395
    add-int/lit8 v2, p3, 0x4

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v14, v2, v4

    .line 397
    const-wide/16 v2, 0x0

    .line 398
    const/4 v4, 0x0

    :goto_3d
    const/4 v5, 0x5

    if-ge v4, v5, :cond_111

    .line 400
    add-int v5, p1, v4

    aget v5, p0, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    .line 401
    const-wide/16 v18, 0x0

    mul-long v20, v16, v6

    aget v5, p4, p5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 402
    move-wide/from16 v0, v18

    long-to-int v5, v0

    aput v5, p4, p5

    .line 403
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 404
    mul-long v20, v16, v8

    add-int/lit8 v5, p5, 0x1

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 405
    add-int/lit8 v5, p5, 0x1

    move-wide/from16 v0, v18

    long-to-int v0, v0

    move/from16 v20, v0

    aput v20, p4, v5

    .line 406
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 407
    mul-long v20, v16, v10

    add-int/lit8 v5, p5, 0x2

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 408
    add-int/lit8 v5, p5, 0x2

    move-wide/from16 v0, v18

    long-to-int v0, v0

    move/from16 v20, v0

    aput v20, p4, v5

    .line 409
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 410
    mul-long v20, v16, v12

    add-int/lit8 v5, p5, 0x3

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 411
    add-int/lit8 v5, p5, 0x3

    move-wide/from16 v0, v18

    long-to-int v0, v0

    move/from16 v20, v0

    aput v20, p4, v5

    .line 412
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 413
    mul-long v16, v16, v14

    add-int/lit8 v5, p5, 0x4

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v16, v16, v20

    add-long v16, v16, v18

    .line 414
    add-int/lit8 v5, p5, 0x4

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p4, v5

    .line 415
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 416
    add-int/lit8 v5, p5, 0x5

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v2, v2, v18

    add-long v2, v2, v16

    .line 417
    add-int/lit8 v5, p5, 0x5

    long-to-int v0, v2

    move/from16 v16, v0

    aput v16, p4, v5

    .line 418
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    .line 419
    add-int/lit8 p5, p5, 0x1

    .line 398
    add-int/lit8 v4, v4, 0x1

    goto/16 :goto_3d

    .line 421
    :cond_111
    long-to-int v2, v2

    return v2
.end method

.method public static mulAddTo([I[I[I)I
    .registers 29

    .prologue
    .line 357
    const/4 v2, 0x0

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 358
    const/4 v2, 0x1

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v8, v2, v4

    .line 359
    const/4 v2, 0x2

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v10, v2, v4

    .line 360
    const/4 v2, 0x3

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v12, v2, v4

    .line 361
    const/4 v2, 0x4

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v14, v2, v4

    .line 363
    const-wide/16 v2, 0x0

    .line 364
    const/4 v4, 0x0

    :goto_3a
    const/4 v5, 0x5

    if-ge v4, v5, :cond_10a

    .line 366
    aget v5, p0, v4

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    .line 367
    const-wide/16 v18, 0x0

    mul-long v20, v16, v6

    aget v5, p2, v4

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 368
    move-wide/from16 v0, v18

    long-to-int v5, v0

    aput v5, p2, v4

    .line 369
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 370
    mul-long v20, v16, v8

    add-int/lit8 v5, v4, 0x1

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 371
    add-int/lit8 v5, v4, 0x1

    move-wide/from16 v0, v18

    long-to-int v0, v0

    move/from16 v20, v0

    aput v20, p2, v5

    .line 372
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 373
    mul-long v20, v16, v10

    add-int/lit8 v5, v4, 0x2

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 374
    add-int/lit8 v5, v4, 0x2

    move-wide/from16 v0, v18

    long-to-int v0, v0

    move/from16 v20, v0

    aput v20, p2, v5

    .line 375
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 376
    mul-long v20, v16, v12

    add-int/lit8 v5, v4, 0x3

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    add-long v20, v20, v22

    add-long v18, v18, v20

    .line 377
    add-int/lit8 v5, v4, 0x3

    move-wide/from16 v0, v18

    long-to-int v0, v0

    move/from16 v20, v0

    aput v20, p2, v5

    .line 378
    const/16 v5, 0x20

    ushr-long v18, v18, v5

    .line 379
    mul-long v16, v16, v14

    add-int/lit8 v5, v4, 0x4

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v16, v16, v20

    add-long v16, v16, v18

    .line 380
    add-int/lit8 v5, v4, 0x4

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p2, v5

    .line 381
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 382
    add-int/lit8 v5, v4, 0x5

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v2, v2, v18

    add-long v2, v2, v16

    .line 383
    add-int/lit8 v5, v4, 0x5

    long-to-int v0, v2

    move/from16 v16, v0

    aput v16, p2, v5

    .line 384
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    .line 364
    add-int/lit8 v4, v4, 0x1

    goto/16 :goto_3a

    .line 386
    :cond_10a
    long-to-int v2, v2

    return v2
.end method

.method public static mulWord(I[I[II)I
    .registers 14

    .prologue
    const-wide v8, 0xffffffffL

    .line 549
    const-wide/16 v0, 0x0

    int-to-long v2, p0

    and-long v4, v2, v8

    .line 550
    const/4 v2, 0x0

    .line 553
    :cond_b
    aget v3, p1, v2

    int-to-long v6, v3

    and-long/2addr v6, v8

    mul-long/2addr v6, v4

    add-long/2addr v0, v6

    .line 554
    add-int v3, p3, v2

    long-to-int v6, v0

    aput v6, p2, v3

    .line 555
    const/16 v3, 0x20

    ushr-long/2addr v0, v3

    .line 557
    add-int/lit8 v2, v2, 0x1

    const/4 v3, 0x5

    if-lt v2, v3, :cond_b

    .line 558
    long-to-int v0, v0

    return v0
.end method

.method public static mulWordAddExt(I[II[II)I
    .registers 16

    .prologue
    const/16 v10, 0x20

    const-wide v8, 0xffffffffL

    .line 457
    int-to-long v0, p0

    and-long/2addr v0, v8

    .line 458
    const-wide/16 v2, 0x0

    aget v4, p1, p2

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    aget v6, p3, p4

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 459
    long-to-int v4, v2

    aput v4, p3, p4

    .line 460
    ushr-long/2addr v2, v10

    .line 461
    add-int/lit8 v4, p2, 0x1

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    add-int/lit8 v6, p4, 0x1

    aget v6, p3, v6

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 462
    add-int/lit8 v4, p4, 0x1

    long-to-int v5, v2

    aput v5, p3, v4

    .line 463
    ushr-long/2addr v2, v10

    .line 464
    add-int/lit8 v4, p2, 0x2

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    add-int/lit8 v6, p4, 0x2

    aget v6, p3, v6

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 465
    add-int/lit8 v4, p4, 0x2

    long-to-int v5, v2

    aput v5, p3, v4

    .line 466
    ushr-long/2addr v2, v10

    .line 467
    add-int/lit8 v4, p2, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    add-int/lit8 v6, p4, 0x3

    aget v6, p3, v6

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 468
    add-int/lit8 v4, p4, 0x3

    long-to-int v5, v2

    aput v5, p3, v4

    .line 469
    ushr-long/2addr v2, v10

    .line 470
    add-int/lit8 v4, p2, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v0, v4

    add-int/lit8 v4, p4, 0x4

    aget v4, p3, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    add-long/2addr v0, v4

    add-long/2addr v0, v2

    .line 471
    add-int/lit8 v2, p4, 0x4

    long-to-int v3, v0

    aput v3, p3, v2

    .line 472
    ushr-long/2addr v0, v10

    .line 473
    long-to-int v0, v0

    return v0
.end method

.method public static mulWordDwordAdd(IJ[II)I
    .registers 16

    .prologue
    .line 520
    int-to-long v0, p0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    .line 521
    const-wide/16 v2, 0x0

    const-wide v4, 0xffffffffL

    and-long/2addr v4, p1

    mul-long/2addr v4, v0

    aget v6, p3, p4

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 522
    long-to-int v4, v2

    aput v4, p3, p4

    .line 523
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 524
    const/16 v4, 0x20

    ushr-long v4, p1, v4

    mul-long/2addr v0, v4

    add-int/lit8 v4, p4, 0x1

    aget v4, p3, v4

    int-to-long v4, v4

    const-wide v6, 0xffffffffL

    and-long/2addr v4, v6

    add-long/2addr v0, v4

    add-long/2addr v0, v2

    .line 525
    add-int/lit8 v2, p4, 0x1

    long-to-int v3, v0

    aput v3, p3, v2

    .line 526
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 527
    add-int/lit8 v2, p4, 0x2

    aget v2, p3, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 528
    add-int/lit8 v2, p4, 0x2

    long-to-int v3, v0

    aput v3, p3, v2

    .line 529
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 530
    const-wide/16 v2, 0x0

    cmp-long v0, v0, v2

    if-nez v0, :cond_57

    const/4 v0, 0x0

    :goto_56
    return v0

    :cond_57
    const/4 v0, 0x5

    const/4 v1, 0x3

    invoke-static {v0, p3, p4, v1}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v0

    goto :goto_56
.end method

.method public static mulWordsAdd(II[II)I
    .registers 14

    .prologue
    const-wide/16 v8, 0x0

    const/16 v6, 0x20

    const-wide v4, 0xffffffffL

    .line 537
    int-to-long v0, p0

    and-long/2addr v0, v4

    int-to-long v2, p1

    and-long/2addr v2, v4

    .line 538
    mul-long/2addr v0, v2

    aget v2, p2, p3

    int-to-long v2, v2

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    add-long/2addr v0, v8

    .line 539
    long-to-int v2, v0

    aput v2, p2, p3

    .line 540
    ushr-long/2addr v0, v6

    .line 541
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 542
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 543
    ushr-long/2addr v0, v6

    .line 544
    cmp-long v0, v0, v8

    if-nez v0, :cond_2b

    const/4 v0, 0x0

    :goto_2a
    return v0

    :cond_2b
    const/4 v0, 0x5

    const/4 v1, 0x2

    invoke-static {v0, p2, p3, v1}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v0

    goto :goto_2a
.end method

.method public static square([II[II)V
    .registers 30

    .prologue
    .line 658
    aget v2, p0, p1

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 661
    const/4 v4, 0x0

    .line 663
    const/4 v3, 0x4

    const/16 v2, 0xa

    move v5, v4

    .line 666
    :goto_f
    add-int/lit8 v4, v3, -0x1

    add-int v3, v3, p1

    aget v3, p0, v3

    int-to-long v8, v3

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 667
    mul-long/2addr v8, v8

    .line 668
    add-int/lit8 v2, v2, -0x1

    add-int v3, p3, v2

    shl-int/lit8 v5, v5, 0x1f

    const/16 v10, 0x21

    ushr-long v10, v8, v10

    long-to-int v10, v10

    or-int/2addr v5, v10

    aput v5, p2, v3

    .line 669
    add-int/lit8 v2, v2, -0x1

    add-int v3, p3, v2

    const/4 v5, 0x1

    ushr-long v10, v8, v5

    long-to-int v5, v10

    aput v5, p2, v3

    .line 670
    long-to-int v3, v8

    .line 672
    if-gtz v4, :cond_1a9

    .line 675
    mul-long v4, v6, v6

    .line 676
    shl-int/lit8 v2, v3, 0x1f

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v2, v8

    const/16 v8, 0x21

    ushr-long v8, v4, v8

    or-long/2addr v2, v8

    .line 677
    long-to-int v8, v4

    aput v8, p2, p3

    .line 678
    const/16 v8, 0x20

    ushr-long/2addr v4, v8

    long-to-int v4, v4

    and-int/lit8 v4, v4, 0x1

    .line 682
    add-int/lit8 v5, p1, 0x1

    aget v5, p0, v5

    int-to-long v8, v5

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 683
    add-int/lit8 v5, p3, 0x2

    aget v5, p2, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 686
    mul-long v12, v8, v6

    add-long/2addr v2, v12

    .line 687
    long-to-int v5, v2

    .line 688
    add-int/lit8 v12, p3, 0x1

    shl-int/lit8 v13, v5, 0x1

    or-int/2addr v4, v13

    aput v4, p2, v12

    .line 689
    ushr-int/lit8 v4, v5, 0x1f

    .line 690
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    add-long/2addr v2, v10

    .line 693
    add-int/lit8 v5, p1, 0x2

    aget v5, p0, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 694
    add-int/lit8 v5, p3, 0x3

    aget v5, p2, v5

    int-to-long v12, v5

    const-wide v14, 0xffffffffL

    and-long/2addr v12, v14

    .line 695
    add-int/lit8 v5, p3, 0x4

    aget v5, p2, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 697
    mul-long v16, v10, v6

    add-long v2, v2, v16

    .line 698
    long-to-int v5, v2

    .line 699
    add-int/lit8 v16, p3, 0x2

    shl-int/lit8 v17, v5, 0x1

    or-int v4, v4, v17

    aput v4, p2, v16

    .line 700
    ushr-int/lit8 v4, v5, 0x1f

    .line 701
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v16, v10, v8

    add-long v2, v2, v16

    add-long/2addr v2, v12

    .line 702
    const/16 v5, 0x20

    ushr-long v12, v2, v5

    add-long/2addr v12, v14

    .line 703
    const-wide v14, 0xffffffffL

    and-long/2addr v2, v14

    .line 706
    add-int/lit8 v5, p1, 0x3

    aget v5, p0, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 707
    add-int/lit8 v5, p3, 0x5

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    .line 708
    add-int/lit8 v5, p3, 0x6

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    .line 710
    mul-long v20, v14, v6

    add-long v2, v2, v20

    .line 711
    long-to-int v5, v2

    .line 712
    add-int/lit8 v20, p3, 0x3

    shl-int/lit8 v21, v5, 0x1

    or-int v4, v4, v21

    aput v4, p2, v20

    .line 713
    ushr-int/lit8 v4, v5, 0x1f

    .line 714
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v20, v14, v8

    add-long v2, v2, v20

    add-long/2addr v2, v12

    .line 715
    const/16 v5, 0x20

    ushr-long v12, v2, v5

    mul-long v20, v14, v10

    add-long v12, v12, v20

    add-long v12, v12, v16

    .line 716
    const-wide v16, 0xffffffffL

    and-long v2, v2, v16

    .line 717
    const/16 v5, 0x20

    ushr-long v16, v12, v5

    add-long v16, v16, v18

    .line 718
    const-wide v18, 0xffffffffL

    and-long v12, v12, v18

    .line 721
    add-int/lit8 v5, p1, 0x4

    aget v5, p0, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    .line 722
    add-int/lit8 v5, p3, 0x7

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    .line 723
    add-int/lit8 v5, p3, 0x8

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    .line 725
    mul-long v6, v6, v18

    add-long/2addr v2, v6

    .line 726
    long-to-int v5, v2

    .line 727
    add-int/lit8 v6, p3, 0x4

    shl-int/lit8 v7, v5, 0x1

    or-int/2addr v4, v7

    aput v4, p2, v6

    .line 728
    ushr-int/lit8 v4, v5, 0x1f

    .line 729
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v6, v18, v8

    add-long/2addr v2, v6

    add-long/2addr v2, v12

    .line 730
    const/16 v5, 0x20

    ushr-long v6, v2, v5

    mul-long v8, v18, v10

    add-long/2addr v6, v8

    add-long v6, v6, v16

    .line 731
    const/16 v5, 0x20

    ushr-long v8, v6, v5

    mul-long v10, v18, v14

    add-long/2addr v8, v10

    add-long v8, v8, v20

    .line 732
    const/16 v5, 0x20

    ushr-long v10, v8, v5

    add-long v10, v10, v22

    .line 735
    long-to-int v2, v2

    .line 736
    add-int/lit8 v3, p3, 0x5

    shl-int/lit8 v5, v2, 0x1

    or-int/2addr v4, v5

    aput v4, p2, v3

    .line 737
    ushr-int/lit8 v2, v2, 0x1f

    .line 738
    long-to-int v3, v6

    .line 739
    add-int/lit8 v4, p3, 0x6

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p2, v4

    .line 740
    ushr-int/lit8 v2, v3, 0x1f

    .line 741
    long-to-int v3, v8

    .line 742
    add-int/lit8 v4, p3, 0x7

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p2, v4

    .line 743
    ushr-int/lit8 v2, v3, 0x1f

    .line 744
    long-to-int v3, v10

    .line 745
    add-int/lit8 v4, p3, 0x8

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p2, v4

    .line 746
    ushr-int/lit8 v2, v3, 0x1f

    .line 747
    add-int/lit8 v3, p3, 0x9

    aget v3, p2, v3

    const/16 v4, 0x20

    shr-long v4, v10, v4

    long-to-int v4, v4

    add-int/2addr v3, v4

    .line 748
    add-int/lit8 v4, p3, 0x9

    shl-int/lit8 v3, v3, 0x1

    or-int/2addr v2, v3

    aput v2, p2, v4

    .line 749
    return-void

    :cond_1a9
    move v5, v3

    move v3, v4

    goto/16 :goto_f
.end method

.method public static square([I[I)V
    .registers 28

    .prologue
    .line 563
    const/4 v2, 0x0

    aget v2, p0, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 566
    const/4 v4, 0x0

    .line 568
    const/4 v3, 0x4

    const/16 v2, 0xa

    move v5, v4

    .line 571
    :goto_10
    add-int/lit8 v4, v3, -0x1

    aget v3, p0, v3

    int-to-long v8, v3

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 572
    mul-long/2addr v8, v8

    .line 573
    add-int/lit8 v2, v2, -0x1

    shl-int/lit8 v3, v5, 0x1f

    const/16 v5, 0x21

    ushr-long v10, v8, v5

    long-to-int v5, v10

    or-int/2addr v3, v5

    aput v3, p1, v2

    .line 574
    add-int/lit8 v2, v2, -0x1

    const/4 v3, 0x1

    ushr-long v10, v8, v3

    long-to-int v3, v10

    aput v3, p1, v2

    .line 575
    long-to-int v3, v8

    .line 577
    if-gtz v4, :cond_196

    .line 580
    mul-long v4, v6, v6

    .line 581
    shl-int/lit8 v2, v3, 0x1f

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v2, v8

    const/16 v8, 0x21

    ushr-long v8, v4, v8

    or-long/2addr v2, v8

    .line 582
    const/4 v8, 0x0

    long-to-int v9, v4

    aput v9, p1, v8

    .line 583
    const/16 v8, 0x20

    ushr-long/2addr v4, v8

    long-to-int v4, v4

    and-int/lit8 v4, v4, 0x1

    .line 587
    const/4 v5, 0x1

    aget v5, p0, v5

    int-to-long v8, v5

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 588
    const/4 v5, 0x2

    aget v5, p1, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 591
    mul-long v12, v8, v6

    add-long/2addr v2, v12

    .line 592
    long-to-int v5, v2

    .line 593
    const/4 v12, 0x1

    shl-int/lit8 v13, v5, 0x1

    or-int/2addr v4, v13

    aput v4, p1, v12

    .line 594
    ushr-int/lit8 v4, v5, 0x1f

    .line 595
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    add-long/2addr v2, v10

    .line 598
    const/4 v5, 0x2

    aget v5, p0, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 599
    const/4 v5, 0x3

    aget v5, p1, v5

    int-to-long v12, v5

    const-wide v14, 0xffffffffL

    and-long/2addr v12, v14

    .line 600
    const/4 v5, 0x4

    aget v5, p1, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 602
    mul-long v16, v10, v6

    add-long v2, v2, v16

    .line 603
    long-to-int v5, v2

    .line 604
    const/16 v16, 0x2

    shl-int/lit8 v17, v5, 0x1

    or-int v4, v4, v17

    aput v4, p1, v16

    .line 605
    ushr-int/lit8 v4, v5, 0x1f

    .line 606
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v16, v10, v8

    add-long v2, v2, v16

    add-long/2addr v2, v12

    .line 607
    const/16 v5, 0x20

    ushr-long v12, v2, v5

    add-long/2addr v12, v14

    .line 608
    const-wide v14, 0xffffffffL

    and-long/2addr v2, v14

    .line 611
    const/4 v5, 0x3

    aget v5, p0, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 612
    const/4 v5, 0x5

    aget v5, p1, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    .line 613
    const/4 v5, 0x6

    aget v5, p1, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    .line 615
    mul-long v20, v14, v6

    add-long v2, v2, v20

    .line 616
    long-to-int v5, v2

    .line 617
    const/16 v20, 0x3

    shl-int/lit8 v21, v5, 0x1

    or-int v4, v4, v21

    aput v4, p1, v20

    .line 618
    ushr-int/lit8 v4, v5, 0x1f

    .line 619
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v20, v14, v8

    add-long v2, v2, v20

    add-long/2addr v2, v12

    .line 620
    const/16 v5, 0x20

    ushr-long v12, v2, v5

    mul-long v20, v14, v10

    add-long v12, v12, v20

    add-long v12, v12, v16

    .line 621
    const-wide v16, 0xffffffffL

    and-long v2, v2, v16

    .line 622
    const/16 v5, 0x20

    ushr-long v16, v12, v5

    add-long v16, v16, v18

    .line 623
    const-wide v18, 0xffffffffL

    and-long v12, v12, v18

    .line 626
    const/4 v5, 0x4

    aget v5, p0, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    .line 627
    const/4 v5, 0x7

    aget v5, p1, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    .line 628
    const/16 v5, 0x8

    aget v5, p1, v5

    int-to-long v0, v5

    move-wide/from16 v22, v0

    const-wide v24, 0xffffffffL

    and-long v22, v22, v24

    .line 630
    mul-long v6, v6, v18

    add-long/2addr v2, v6

    .line 631
    long-to-int v5, v2

    .line 632
    const/4 v6, 0x4

    shl-int/lit8 v7, v5, 0x1

    or-int/2addr v4, v7

    aput v4, p1, v6

    .line 633
    ushr-int/lit8 v4, v5, 0x1f

    .line 634
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v6, v18, v8

    add-long/2addr v2, v6

    add-long/2addr v2, v12

    .line 635
    const/16 v5, 0x20

    ushr-long v6, v2, v5

    mul-long v8, v18, v10

    add-long/2addr v6, v8

    add-long v6, v6, v16

    .line 636
    const/16 v5, 0x20

    ushr-long v8, v6, v5

    mul-long v10, v18, v14

    add-long/2addr v8, v10

    add-long v8, v8, v20

    .line 637
    const/16 v5, 0x20

    ushr-long v10, v8, v5

    add-long v10, v10, v22

    .line 640
    long-to-int v2, v2

    .line 641
    const/4 v3, 0x5

    shl-int/lit8 v5, v2, 0x1

    or-int/2addr v4, v5

    aput v4, p1, v3

    .line 642
    ushr-int/lit8 v2, v2, 0x1f

    .line 643
    long-to-int v3, v6

    .line 644
    const/4 v4, 0x6

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p1, v4

    .line 645
    ushr-int/lit8 v2, v3, 0x1f

    .line 646
    long-to-int v3, v8

    .line 647
    const/4 v4, 0x7

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p1, v4

    .line 648
    ushr-int/lit8 v2, v3, 0x1f

    .line 649
    long-to-int v3, v10

    .line 650
    const/16 v4, 0x8

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p1, v4

    .line 651
    ushr-int/lit8 v2, v3, 0x1f

    .line 652
    const/16 v3, 0x9

    aget v3, p1, v3

    const/16 v4, 0x20

    shr-long v4, v10, v4

    long-to-int v4, v4

    add-int/2addr v3, v4

    .line 653
    const/16 v4, 0x9

    shl-int/lit8 v3, v3, 0x1

    or-int/2addr v2, v3

    aput v2, p1, v4

    .line 654
    return-void

    :cond_196
    move v5, v3

    move v3, v4

    goto/16 :goto_10
.end method

.method public static sub([II[II[II)I
    .registers 15

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 775
    const-wide/16 v0, 0x0

    aget v2, p0, p1

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 776
    long-to-int v2, v0

    aput v2, p4, p5

    .line 777
    shr-long/2addr v0, v8

    .line 778
    add-int/lit8 v2, p1, 0x1

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 779
    add-int/lit8 v2, p5, 0x1

    long-to-int v3, v0

    aput v3, p4, v2

    .line 780
    shr-long/2addr v0, v8

    .line 781
    add-int/lit8 v2, p1, 0x2

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x2

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 782
    add-int/lit8 v2, p5, 0x2

    long-to-int v3, v0

    aput v3, p4, v2

    .line 783
    shr-long/2addr v0, v8

    .line 784
    add-int/lit8 v2, p1, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 785
    add-int/lit8 v2, p5, 0x3

    long-to-int v3, v0

    aput v3, p4, v2

    .line 786
    shr-long/2addr v0, v8

    .line 787
    add-int/lit8 v2, p1, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x4

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 788
    add-int/lit8 v2, p5, 0x4

    long-to-int v3, v0

    aput v3, p4, v2

    .line 789
    shr-long/2addr v0, v8

    .line 790
    long-to-int v0, v0

    return v0
.end method

.method public static sub([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 754
    const-wide/16 v0, 0x0

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 755
    long-to-int v2, v0

    aput v2, p2, v9

    .line 756
    shr-long/2addr v0, v8

    .line 757
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 758
    long-to-int v2, v0

    aput v2, p2, v10

    .line 759
    shr-long/2addr v0, v8

    .line 760
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 761
    long-to-int v2, v0

    aput v2, p2, v11

    .line 762
    shr-long/2addr v0, v8

    .line 763
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 764
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 765
    shr-long/2addr v0, v8

    .line 766
    const/4 v2, 0x4

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 767
    const/4 v2, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 768
    shr-long/2addr v0, v8

    .line 769
    long-to-int v0, v0

    return v0
.end method

.method public static subBothFrom([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 796
    const-wide/16 v0, 0x0

    aget v2, p2, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 797
    long-to-int v2, v0

    aput v2, p2, v9

    .line 798
    shr-long/2addr v0, v8

    .line 799
    aget v2, p2, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 800
    long-to-int v2, v0

    aput v2, p2, v10

    .line 801
    shr-long/2addr v0, v8

    .line 802
    aget v2, p2, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 803
    long-to-int v2, v0

    aput v2, p2, v11

    .line 804
    shr-long/2addr v0, v8

    .line 805
    const/4 v2, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 806
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 807
    shr-long/2addr v0, v8

    .line 808
    const/4 v2, 0x4

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x4

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    const/4 v4, 0x4

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 809
    const/4 v2, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 810
    shr-long/2addr v0, v8

    .line 811
    long-to-int v0, v0

    return v0
.end method

.method public static subFrom([II[II)I
    .registers 13

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 838
    const-wide/16 v0, 0x0

    aget v2, p2, p3

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, p1

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 839
    long-to-int v2, v0

    aput v2, p2, p3

    .line 840
    shr-long/2addr v0, v8

    .line 841
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x1

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 842
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 843
    shr-long/2addr v0, v8

    .line 844
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x2

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 845
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 846
    shr-long/2addr v0, v8

    .line 847
    add-int/lit8 v2, p3, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x3

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 848
    add-int/lit8 v2, p3, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 849
    shr-long/2addr v0, v8

    .line 850
    add-int/lit8 v2, p3, 0x4

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x4

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 851
    add-int/lit8 v2, p3, 0x4

    long-to-int v3, v0

    aput v3, p2, v2

    .line 852
    shr-long/2addr v0, v8

    .line 853
    long-to-int v0, v0

    return v0
.end method

.method public static subFrom([I[I)I
    .registers 14

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 817
    const-wide/16 v0, 0x0

    aget v2, p1, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 818
    long-to-int v2, v0

    aput v2, p1, v9

    .line 819
    shr-long/2addr v0, v8

    .line 820
    aget v2, p1, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 821
    long-to-int v2, v0

    aput v2, p1, v10

    .line 822
    shr-long/2addr v0, v8

    .line 823
    aget v2, p1, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 824
    long-to-int v2, v0

    aput v2, p1, v11

    .line 825
    shr-long/2addr v0, v8

    .line 826
    const/4 v2, 0x3

    aget v2, p1, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 827
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p1, v2

    .line 828
    shr-long/2addr v0, v8

    .line 829
    const/4 v2, 0x4

    aget v2, p1, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x4

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 830
    const/4 v2, 0x4

    long-to-int v3, v0

    aput v3, p1, v2

    .line 831
    shr-long/2addr v0, v8

    .line 832
    long-to-int v0, v0

    return v0
.end method

.method public static toBigInteger([I)Ljava/math/BigInteger;
    .registers 5

    .prologue
    .line 858
    const/16 v0, 0x14

    new-array v1, v0, [B

    .line 859
    const/4 v0, 0x0

    :goto_5
    const/4 v2, 0x5

    if-ge v0, v2, :cond_16

    .line 861
    aget v2, p0, v0

    .line 862
    if-eqz v2, :cond_13

    .line 864
    rsub-int/lit8 v3, v0, 0x4

    shl-int/lit8 v3, v3, 0x2

    invoke-static {v2, v1, v3}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 859
    :cond_13
    add-int/lit8 v0, v0, 0x1

    goto :goto_5

    .line 867
    :cond_16
    new-instance v0, Ljava/math/BigInteger;

    const/4 v2, 0x1

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

    return-object v0
.end method

.method public static zero([I)V
    .registers 3

    .prologue
    const/4 v1, 0x0

    .line 872
    aput v1, p0, v1

    .line 873
    const/4 v0, 0x1

    aput v1, p0, v0

    .line 874
    const/4 v0, 0x2

    aput v1, p0, v0

    .line 875
    const/4 v0, 0x3

    aput v1, p0, v0

    .line 876
    const/4 v0, 0x4

    aput v1, p0, v0

    .line 877
    return-void
.end method