[*] Binary protection state of sqlcipher
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of sqlcipher
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3bf68 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0003bf68 () | void fcn_0003bf68 (int16_t arg_4h, int16_t arg_ch, int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0003bf68 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0003bf6c sub sp, 0xc |
0x0003bf6e mov r7, r2 | r7 = r2;
0x0003bf70 mov r8, r3 | r8 = r3;
0x0003bf72 mov r4, r0 | r4 = r0;
0x0003bf74 mov fp, r1 |
0x0003bf76 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [arg_30h]");
0x0003bf7a str r3, [sp, 4] | var_4h = r3;
0x0003bf7c cmp r2, 0 |
| if (r2 != 0) {
0x0003bf7e bne.w 0x3c156 | goto label_12;
| }
| label_10:
0x0003bf82 cmp r7, 1 |
| if (r7 > 1) {
0x0003bf84 bgt.w 0x3c13c | goto label_13;
| }
0x0003bf88 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003bf8a ldr.w sl, [r4, 8] | sl = *((r4 + 8));
| if (r7 != 1) {
0x0003bf8e bne 0x3c02e | goto label_11;
| }
| label_9:
0x0003bf90 ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x0003bf94 lsl.w r8, r8, 1 | r8 <<= 1;
0x0003bf98 ldr r3, [pc, 0x224] |
0x0003bf9a movs r6, 0 | r6 = 0;
0x0003bf9c ldrsh.w r0, [r2, r8] | r0 = *((r2 + r8));
0x0003bfa0 add r3, pc | r3 = 0x78164;
0x0003bfa2 str r3, [sp] | *(sp) = r3;
0x0003bfa4 adds r2, r0, 2 | r2 = r0 + 2;
| if (r2 == r0) {
0x0003bfa6 beq 0x3c002 | goto label_14;
| }
| do {
0x0003bfa8 adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x0003bfaa beq.w 0x3c0bc | goto label_15;
| }
0x0003bfae ldr.w r2, [fp, 0xc] | r2 = *(arg_ch);
0x0003bfb2 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0003bfb6 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0003bfb8 ldr.w sb, [r2, r0, lsl 2] | offset_0 = r0 << 2;
| sb = *((r2 + offset_0));
0x0003bfbc cmp.w sb, 0 |
| if (sb == 0) {
0x0003bfc0 beq 0x3c0a6 | goto label_16;
| }
0x0003bfc2 mov r0, sb | r0 = sb;
0x0003bfc4 blx 0x65dc | r0 = strcmp (r0, r1);
0x0003bfc8 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x0003bfcc adds r3, r5, r0 | r3 = r5 + r0;
0x0003bfce cmp r3, sl |
0x0003bfd0 it hs |
| if (r3 < sl) {
0x0003bfd2 movhs r2, r0 | r2 = r0;
| }
| if (r3 >= sl) {
0x0003bfd4 bhs 0x3c0ac | goto label_17;
| }
| if (r0 != 0) {
0x0003bfd6 cbnz r0, 0x3c010 | goto label_18;
| }
| label_2:
0x0003bfd8 adds r6, 1 | r6++;
0x0003bfda cmp r7, r6 |
| if (r7 == r6) {
0x0003bfdc beq 0x3c02a | goto label_19;
| }
| label_0:
0x0003bfde adds r2, r5, 1 | r2 = r5 + 1;
0x0003bfe0 cmp r2, sl |
| if (r2 >= sl) {
0x0003bfe2 bhs 0x3c0d4 | goto label_20;
| }
0x0003bfe4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0003bfe6 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003bfe8 movs r2, 0x2c | r2 = 0x2c;
0x0003bfea strb r2, [r3, r5] | *((r3 + r5)) = r2;
0x0003bfec ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003bfee ldr.w sl, [r4, 8] | sl = *((r4 + 8));
| label_5:
0x0003bff2 ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x0003bff6 add.w r8, r8, 2 | r8 += 2;
0x0003bffa ldrsh.w r0, [r2, r8] | r0 = *((r2 + r8));
0x0003bffe adds r2, r0, 2 | r2 = r0 + 2;
0x0003c000 bne 0x3bfa8 |
| } while (r2 != r0);
| label_14:
0x0003c002 ldr.w sb, [sp] | sb = *(sp);
0x0003c006 movs r2, 6 | r2 = 6;
0x0003c008 mov r0, r2 | r0 = r2;
| label_3:
0x0003c00a adds r3, r5, r0 | r3 = r5 + r0;
0x0003c00c cmp r3, sl |
| if (r3 >= sl) {
0x0003c00e bhs 0x3c0ac | goto label_17;
| }
| label_18:
0x0003c010 mov r2, r0 | r2 = r0;
0x0003c012 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0003c014 mov r1, sb | r1 = sb;
0x0003c016 adds r6, 1 | r6++;
0x0003c018 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0003c01a add r0, r5 | r0 += r5;
0x0003c01c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0003c020 cmp r7, r6 |
0x0003c022 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003c024 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
| if (r7 != r6) {
0x0003c028 bne 0x3bfde | goto label_0;
| }
| label_19:
0x0003c02a cmp r7, 1 |
| if (r7 != 1) {
0x0003c02c bne 0x3c0e8 | goto label_21;
| }
| label_11:
0x0003c02e adds r2, r5, 1 | r2 = r5 + 1;
0x0003c030 cmp sl, r2 |
| if (sl < r2) {
0x0003c032 bls 0x3c102 | goto label_22;
| }
| label_6:
0x0003c034 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003c036 cmp r7, 1 |
0x0003c038 ldr r2, [sp, 4] | r2 = var_4h;
0x0003c03a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0003c03c ldrb r2, [r2] | r2 = *(r2);
0x0003c03e strb r2, [r3, r5] | *((r3 + r5)) = r2;
| if (r7 > 1) {
0x0003c040 bgt 0x3c110 | goto label_23;
| }
| if (r7 != 1) {
| label_7:
0x0003c042 bne 0x3c0a0 | goto label_24;
| }
| label_8:
0x0003c044 ldr.w r8, [pc, 0x17c] |
0x0003c048 movs r5, 0 | r5 = 0;
0x0003c04a ldr.w sb, [pc, 0x17c] |
0x0003c04e movs r6, 0x3f | r6 = 0x3f;
0x0003c050 add r8, pc | r8 = 0x78218;
0x0003c052 add sb, pc | sb = 0x78220;
| label_4:
0x0003c054 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0003c056 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0003c058 adds r2, r3, 1 | r2 = r3 + 1;
0x0003c05a cmp r2, r1 |
| if (r2 >= r1) {
0x0003c05c bhs 0x3c088 | goto label_25;
| }
| do {
0x0003c05e ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0003c060 adds r5, 1 | r5++;
0x0003c062 cmp r7, r5 |
0x0003c064 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003c066 mov.w r0, 0x2c | r0 = 0x2c;
0x0003c06a strb r6, [r1, r3] | *((r1 + r3)) = r6;
| if (r7 == r5) {
0x0003c06c beq 0x3c09c | goto label_26;
| }
| label_1:
0x0003c06e ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0003c070 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0003c072 adds r3, r2, 1 | r3 = r2 + 1;
0x0003c074 cmp r3, r1 |
| if (r3 >= r1) {
0x0003c076 bhs 0x3c0c8 | goto label_27;
| }
0x0003c078 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0003c07a str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0003c07c strb r0, [r1, r2] | *((r1 + r2)) = r0;
0x0003c07e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0003c080 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0003c082 adds r2, r3, 1 | r2 = r3 + 1;
0x0003c084 cmp r2, r1 |
0x0003c086 blo 0x3c05e |
| } while (r2 <= r1);
| label_25:
0x0003c088 mov r0, r4 | r0 = r4;
0x0003c08a movs r2, 1 | r2 = 1;
0x0003c08c mov r1, r8 | r1 = r8;
0x0003c08e adds r5, 1 | r5++;
0x0003c090 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c094 cmp r7, r5 |
0x0003c096 mov.w r0, 0x2c | r0 = 0x2c;
| if (r7 != r5) {
0x0003c09a bne 0x3c06e | goto label_1;
| }
| label_26:
0x0003c09c cmp r7, 1 |
| if (r7 != 1) {
0x0003c09e bne 0x3c124 | goto label_28;
| }
| label_24:
0x0003c0a0 add sp, 0xc |
0x0003c0a2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0003c0a6 cmp r5, sl |
| if (r5 <= sl) {
0x0003c0a8 blo 0x3bfd8 | goto label_2;
| }
0x0003c0aa mov r2, sb | r2 = sb;
| label_17:
0x0003c0ac mov r1, sb | r1 = sb;
0x0003c0ae mov r0, r4 | r0 = r4;
0x0003c0b0 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c0b4 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003c0b6 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0003c0ba b 0x3bfd8 | goto label_2;
| label_15:
0x0003c0bc ldr.w sb, [pc, 0x10c] |
0x0003c0c0 movs r2, 5 | r2 = 5;
0x0003c0c2 mov r0, r2 | r0 = r2;
0x0003c0c4 add sb, pc | sb = 0x78294;
0x0003c0c6 b 0x3c00a | goto label_3;
| label_27:
0x0003c0c8 movs r2, 1 | r2 = 1;
0x0003c0ca mov r1, sb | r1 = sb;
0x0003c0cc mov r0, r4 | r0 = r4;
0x0003c0ce bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c0d2 b 0x3c054 | goto label_4;
| label_20:
0x0003c0d4 ldr r1, [pc, 0xf8] |
0x0003c0d6 movs r2, 1 | r2 = 1;
0x0003c0d8 mov r0, r4 | r0 = r4;
0x0003c0da add r1, pc | r1 = 0x782ae;
0x0003c0dc bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c0e0 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003c0e2 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0003c0e6 b 0x3bff2 | goto label_5;
| label_21:
0x0003c0e8 adds r2, r5, 1 | r2 = r5 + 1;
0x0003c0ea cmp sl, r2 |
| if (sl < r2) {
0x0003c0ec bls 0x3c174 | goto label_29;
| }
0x0003c0ee ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0003c0f0 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003c0f2 movs r2, 0x29 | r2 = 0x29;
0x0003c0f4 strb r2, [r3, r5] | *((r3 + r5)) = r2;
0x0003c0f6 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003c0f8 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0003c0fc adds r2, r5, 1 | r2 = r5 + 1;
0x0003c0fe cmp sl, r2 |
| if (sl > r2) {
0x0003c100 bhi 0x3c034 | goto label_6;
| }
| label_22:
0x0003c102 ldr r1, [sp, 4] | r1 = var_4h;
0x0003c104 movs r2, 1 | r2 = 1;
0x0003c106 mov r0, r4 | r0 = r4;
0x0003c108 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c10a cdp2 p15, 0xe, c2, c8, c1, 0 | __asm ("cdp2 p15, 0xe, c2, c8, c1, 0");
| if (r2 <= 1) {
0x0003c10e ble 0x3c042 | goto label_7;
| }
| label_23:
0x0003c110 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0003c112 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0003c114 adds r2, r3, 1 | r2 = r3 + 1;
0x0003c116 cmp r2, r1 |
| if (r2 >= r1) {
0x0003c118 bhs 0x3c196 | goto label_30;
| }
0x0003c11a ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0003c11c str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003c11e movs r2, 0x28 | r2 = 0x28;
0x0003c120 strb r2, [r1, r3] | *((r1 + r3)) = r2;
0x0003c122 b 0x3c044 | goto label_8;
| label_28:
0x0003c124 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0003c126 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0003c128 adds r2, r3, 1 | r2 = r3 + 1;
0x0003c12a cmp r2, r1 |
| if (r2 >= r1) {
0x0003c12c bhs 0x3c1a4 | goto label_31;
| }
0x0003c12e ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0003c130 movs r0, 0x29 | r0 = 0x29;
0x0003c132 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003c134 strb r0, [r1, r3] | *((r1 + r3)) = r0;
0x0003c136 add sp, 0xc |
0x0003c138 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x0003c13c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0003c13e ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0003c140 adds r2, r3, 1 | r2 = r3 + 1;
0x0003c142 cmp r2, r1 |
| if (r2 >= r1) {
0x0003c144 bhs 0x3c188 | goto label_32;
| }
0x0003c146 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003c148 movs r1, 0x28 | r1 = 0x28;
0x0003c14a ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0003c14c strb r1, [r2, r3] | *((r2 + r3)) = r1;
| do {
0x0003c14e ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003c150 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0003c154 b 0x3bf90 | goto label_9;
| label_12:
0x0003c156 ldr r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x0003c158 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0003c15a adds r2, r1, 5 | r2 = r1 + 5;
0x0003c15c cmp r2, r3 |
| if (r2 >= r3) {
0x0003c15e bhs 0x3c1b4 | goto label_33;
| }
0x0003c160 str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x0003c162 ldr r2, [pc, 0x70] |
0x0003c164 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0003c166 add r2, pc | r2 = 0x78340;
0x0003c168 ldr r0, [r2] | r0 = *(0x78340);
0x0003c16a ldrb r2, [r2, 4] | r2 = *((r2 + 4));
0x0003c16c str r0, [r3, r1] | *((r3 + r1)) = r0;
0x0003c16e add r3, r1 | r3 += r1;
0x0003c170 strb r2, [r3, 4] | *((r3 + 4)) = r2;
0x0003c172 b 0x3bf82 | goto label_10;
| label_29:
0x0003c174 ldr r1, [pc, 0x60] |
0x0003c176 movs r2, 1 | r2 = 1;
0x0003c178 mov r0, r4 | r0 = r4;
0x0003c17a add r1, pc | r1 = 0x78356;
0x0003c17c bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c180 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0003c182 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0003c186 b 0x3c02e | goto label_11;
| label_32:
0x0003c188 ldr r1, [pc, 0x50] |
0x0003c18a movs r2, 1 | r2 = 1;
0x0003c18c mov r0, r4 | r0 = r4;
0x0003c18e add r1, pc | r1 = 0x7836e;
0x0003c190 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c194 b 0x3c14e |
| } while (1);
| label_30:
0x0003c196 ldr r1, [pc, 0x48] |
0x0003c198 movs r2, 1 | r2 = 1;
0x0003c19a mov r0, r4 | r0 = r4;
0x0003c19c add r1, pc | r1 = 0x78382;
0x0003c19e bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c1a2 b 0x3c044 | goto label_8;
| label_31:
0x0003c1a4 ldr r1, [pc, 0x3c] |
0x0003c1a6 movs r2, 1 | r2 = 1;
0x0003c1a8 mov r0, r4 | r0 = r4;
0x0003c1aa add r1, pc | r1 = 0x78392;
0x0003c1ac add sp, 0xc |
0x0003c1ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003c1b2 b 0x3bedc | void (*0x3bedc)() ();
| label_33:
0x0003c1b4 ldr r1, [pc, 0x30] |
0x0003c1b6 movs r2, 5 | r2 = 5;
0x0003c1b8 add r1, pc | r1 = 0x783a4;
0x0003c1ba bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003c1be b 0x3bf82 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3c7a0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0003c7a0 () | void fcn_0003c7a0 (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0003c7a0 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0003c7a4 mov r6, r0 | r6 = r0;
0x0003c7a6 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x0003c7a8 mov r7, r1 | r7 = r1;
0x0003c7aa cmp r3, 1 |
| if (r3 == 1) {
0x0003c7ac beq.w 0x3c93a | goto label_17;
| }
0x0003c7b0 cmp r1, 1 |
| if (r1 != 1) {
0x0003c7b2 bne.w 0x3c8c2 | goto label_18;
| }
| label_2:
0x0003c7b6 ldr r5, [r6, 0xc] | r5 = *((r6 + 0xc));
0x0003c7b8 movs r1, 2 | r1 = 2;
0x0003c7ba ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x0003c7bc movs r2, 1 | r2 = 1;
0x0003c7be ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x0003c7c0 movs r3, 0 | r3 = 0;
0x0003c7c2 bic r5, r5, 1 | r5 = BIT_MASK (r5, 1);
0x0003c7c6 smlal r2, r3, r5, r1 | __asm ("smlal r2, r3, r5, r1");
0x0003c7ca str r5, [r6, 0xc] | *((r6 + 0xc)) = r5;
0x0003c7cc add r5, r4 | r5 += r4;
0x0003c7ce cmp r0, 0 |
| if (r0 == 0) {
0x0003c7d0 beq.w 0x3c95c | goto label_19;
| }
| label_3:
0x0003c7d4 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x0003c7d8 mov r8, r0 | r8 = r0;
| label_4:
0x0003c7da cmp.w r8, 0 |
| if (r8 == 0) {
0x0003c7de beq.w 0x3cb30 | goto label_20;
| }
0x0003c7e2 ldrb r3, [r6, 0x12] | r3 = *((r6 + 0x12));
0x0003c7e4 cmp r3, 1 |
| if (r3 == 1) {
0x0003c7e6 beq.w 0x3c990 | goto label_21;
| }
0x0003c7ea cmp r3, 2 |
0x0003c7ec mov r2, r8 | r2 = r8;
| if (r3 == 2) {
0x0003c7ee beq.w 0x3cb44 | goto label_22;
| }
0x0003c7f2 cmp r4, r5 |
| if (r4 <= r5) {
0x0003c7f4 blo 0x3c82e | goto label_0;
| }
0x0003c7f6 b 0x3cc04 | goto label_23;
| do {
0x0003c7f8 lsls r0, r3, 0xa | r0 = r3 << 0xa;
0x0003c7fa cmp r5, r1 |
0x0003c7fc and ip, r3, 0x3c0 |
0x0003c800 lsr.w lr, r3, 6 | lr = r3 >> 6;
0x0003c804 uxth r0, r0 | r0 = (int16_t) r0;
0x0003c806 add.w ip, ip, 0x40 |
| if (r5 > r1) {
0x0003c80a bhi 0x3c900 | goto label_24;
| }
| label_5:
0x0003c80c lsrs r0, r3, 0xc | r0 = r3 >> 0xc;
0x0003c80e and lr, lr, 0x3f | lr &= 0x3f;
0x0003c812 and r3, r3, 0x3f | r3 &= 0x3f;
0x0003c816 sub.w lr, lr, 0x80 | lr -= 0x80;
0x0003c81a subs r0, 0x20 | r0 -= 0x20;
0x0003c81c subs r3, 0x80 | r3 -= 0x80;
0x0003c81e strb r0, [r2] | *(r2) = r0;
0x0003c820 strb.w lr, [r2, 1] |
0x0003c824 mov r4, r1 | r4 = r1;
0x0003c826 strb r3, [r2, 2] | *((r2 + 2)) = r3;
0x0003c828 adds r2, 3 | r2 += 3;
| label_1:
0x0003c82a cmp r5, r4 |
| if (r5 < r4) {
0x0003c82c bls 0x3c858 | goto label_11;
| }
| label_0:
0x0003c82e mov r1, r4 | r1 = r4;
0x0003c830 mov ip, r2 |
0x0003c832 ldrh r3, [r1], 2 | r3 = *(r1);
| r1 += 2;
0x0003c836 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0003c838 uxth r3, r3 | r3 = (int16_t) r3;
0x0003c83a sub.w lr, r3, 0xd800 | lr = r3 - 0xd800;
0x0003c83e uxtb r0, r3 | r0 = (int8_t) r3;
0x0003c840 cmp.w lr, 0x800 |
0x0003c844 blo 0x3c7f8 |
| } while (lr <= 0x800);
0x0003c846 cmp r3, 0x7f |
0x0003c848 mov r4, r1 | r4 = r1;
| if (r3 > 0x7f) {
0x0003c84a bhi.w 0x3c968 | goto label_25;
| }
0x0003c84e cmp r5, r4 |
0x0003c850 strb r0, [ip], 1 | *(ip) = r0;
| ip++;
0x0003c854 mov r2, ip | r2 = ip;
| if (r5 > r4) {
0x0003c856 bhi 0x3c82e | goto label_0;
| }
| label_11:
0x0003c858 sub.w r3, r2, r8 | r3 = r2 - r8;
| label_15:
0x0003c85c str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
| label_10:
0x0003c85e movs r3, 0 | r3 = 0;
0x0003c860 movw r4, 0x83d | r4 = 0x83d;
0x0003c864 strb r3, [r2] | *(r2) = r3;
0x0003c866 ldrh r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0003c868 ands r4, r3 | r4 &= r3;
0x0003c86a tst.w r3, 0x9000 |
0x0003c86e orr r4, r4, 0x200 | r4 |= 0x200;
0x0003c872 orr r4, r4, 2 | r4 |= 2;
| if ((r3 & 0x9000) == 0) {
0x0003c876 bne 0x3c87c |
0x0003c878 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
| if (r3 == 0) {
0x0003c87a cbz r3, 0x3c882 | goto label_26;
| }
| }
0x0003c87c mov r0, r6 | r0 = r6;
0x0003c87e bl 0x2d36c | fcn_0002d36c (r0);
| label_26:
0x0003c882 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0003c884 strh r4, [r6, 0x10] | *((r6 + 0x10)) = r4;
0x0003c886 strb r7, [r6, 0x12] | *((r6 + 0x12)) = r7;
0x0003c888 str.w r8, [r6, 8] | __asm ("str.w r8, [r6, 8]");
0x0003c88c str.w r8, [r6, 0x20] | __asm ("str.w r8, [r6, 0x20]");
| if (r3 != 0) {
0x0003c890 cbz r3, 0x3c8b4 |
0x0003c892 ldr.w r2, [r3, 0x164] | r2 = *((r3 + 0x164));
0x0003c896 cmp r2, r8 |
| if (r2 < r8) {
0x0003c898 bls 0x3c8b4 | goto label_27;
| }
0x0003c89a ldr.w r2, [r3, 0x15c] | r2 = *((r3 + 0x15c));
0x0003c89e cmp r2, r8 |
0x0003c8a0 it ls |
| if (r2 > r8) {
0x0003c8a2 movls r0, 0x80 | r0 = 0x80;
| }
| if (r2 < r8) {
0x0003c8a4 bls 0x3c8be | goto label_28;
| }
0x0003c8a6 ldr.w r2, [r3, 0x160] | r2 = *((r3 + 0x160));
0x0003c8aa cmp r2, r8 |
0x0003c8ac it ls |
| if (r2 <= r8) {
0x0003c8ae ldrhls r0, [r3, 0x136] | __asm ("ldrhls r0, [r3, 0x136]");
| }
| if (r2 < r8) {
0x0003c8b2 bls 0x3c8be | goto label_28;
| }
| }
| label_27:
0x0003c8b4 ldr r3, [pc, 0x378] |
0x0003c8b6 mov r0, r8 | r0 = r8;
0x0003c8b8 add r3, pc |
0x0003c8ba ldr r3, [r3, 0x2c] | r3 = *(0x79518);
0x0003c8bc blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| label_28:
0x0003c8be str r0, [r6, 0x18] | *((r6 + 0x18)) = r0;
0x0003c8c0 b 0x3c8fa | goto label_29;
| label_18:
0x0003c8c2 bl 0x3c764 | r0 = fcn_0003c764 (r0);
0x0003c8c6 cmp r0, 0 |
| if (r0 != 0) {
0x0003c8c8 bne.w 0x3cb30 | goto label_20;
| }
0x0003c8cc ldrd r3, r0, [r6, 8] | __asm ("ldrd r3, r0, [r6, 8]");
0x0003c8d0 bic r0, r0, 1 | r0 = BIT_MASK (r0, 1);
0x0003c8d4 adds r2, r3, r0 | r2 = r3 + r0;
0x0003c8d6 cmp r3, r2 |
0x0003c8d8 ittt lo |
| if (r3 >= r2) {
0x0003c8da addlo r0, r0, r3 | r0 += r3;
| }
| if (r3 >= r2) {
0x0003c8dc addlo r3, 2 | r3 += 2;
| }
| if (r3 >= r2) {
0x0003c8de addlo r0, 2 | r0 += 2;
| }
| if (r3 >= r2) {
0x0003c8e0 bhs 0x3c8f8 | goto label_30;
| }
| do {
0x0003c8e2 ldrb r2, [r3, -0x2] | r2 = *((r3 - 0x2));
0x0003c8e6 adds r3, 2 | r3 += 2;
0x0003c8e8 ldrb r1, [r3, -0x3] | r1 = *((r3 - 0x3));
0x0003c8ec cmp r0, r3 |
0x0003c8ee strb r1, [r3, -0x4] | *((r3 - 0x4)) = r1;
0x0003c8f2 strb r2, [r3, -0x3] | *((r3 - 0x3)) = r2;
0x0003c8f4 cmp r4, 3 |
0x0003c8f6 bne 0x3c8e2 |
| } while (r4 != 3);
| label_30:
0x0003c8f8 strb r7, [r6, 0x12] | *((r6 + 0x12)) = r7;
| label_29:
0x0003c8fa movs r0, 0 | r0 = 0;
0x0003c8fc pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_24:
0x0003c900 ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0003c902 adds r2, 4 | r2 += 4;
0x0003c904 adds r4, 4 | r4 += 4;
0x0003c906 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0003c908 ubfx r3, r3, 0, 0xa | r3 = (r3 >> 0) & ((1 << 0xa) - 1);
0x0003c90c add r3, r0 | r3 += r0;
0x0003c90e add.w r3, r3, ip, lsl 10 | r3 += (ip << 10);
0x0003c912 lsrs r1, r3, 0x12 | r1 = r3 >> 0x12;
0x0003c914 subs r1, 0x10 | r1 -= 0x10;
0x0003c916 strb r1, [r2, -0x4] | *((r2 - 0x4)) = r1;
0x0003c91a ubfx r1, r3, 0xc, 6 | r1 = (r3 >> 0xc) & ((1 << 6) - 1);
0x0003c91e subs r1, 0x80 | r1 -= 0x80;
0x0003c920 strb r1, [r2, -0x3] | *((r2 - 0x3)) = r1;
0x0003c924 ubfx r1, r3, 6, 6 | r1 = (r3 >> 6) & ((1 << 6) - 1);
0x0003c926 asrs r5, r0, 6 | r5 = r0 >> 6;
0x0003c928 and r3, r3, 0x3f | r3 &= 0x3f;
0x0003c92c subs r1, 0x80 | r1 -= 0x80;
0x0003c92e subs r3, 0x80 | r3 -= 0x80;
0x0003c930 strb r1, [r2, -0x2] | *((r2 - 0x2)) = r1;
0x0003c934 strb r3, [r2, -0x1] | *((r2 - 0x1)) = r3;
0x0003c938 b 0x3c82a | goto label_1;
| label_17:
0x0003c93a cmp r1, 1 |
| if (r1 == 1) {
0x0003c93c beq.w 0x3c7b6 | goto label_2;
| }
0x0003c940 ldr r5, [r0, 0xc] | r5 = *((r0 + 0xc));
0x0003c942 ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x0003c944 ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x0003c946 adds r2, r5, 1 | r2 = r5 + 1;
0x0003c948 asr.w r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x0003c94c add r5, r4 | r5 += r4;
0x0003c94e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0003c952 adds r2, r2, r2 | r2 += r2;
0x0003c954 adcs r3, r3 | __asm ("adcs r3, r3");
0x0003c956 cmp r0, 0 |
| if (r0 != 0) {
0x0003c958 bne.w 0x3c7d4 | goto label_3;
| }
| label_19:
0x0003c95c mov r0, r2 | r0 = r2;
0x0003c95e mov r1, r3 | r1 = r3;
0x0003c960 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0003c964 mov r8, r0 | r8 = r0;
0x0003c966 b 0x3c7da | goto label_4;
| label_25:
0x0003c968 lsr.w lr, r3, 6 | lr = r3 >> 6;
0x0003c96c cmp.w r3, 0x800 |
0x0003c970 and r0, r0, 0x3f | r0 &= 0x3f;
0x0003c974 uxtb.w r4, lr | r4 = (int8_t) lr;
0x0003c978 orr r0, r0, 0x80 | r0 |= 0x80;
| if (r3 >= 0x800) {
0x0003c97c bhs.w 0x3c80c | goto label_5;
| }
0x0003c980 mov r3, r2 | r3 = r2;
0x0003c982 subs r4, 0x40 | r4 -= 0x40;
0x0003c984 strb r4, [r3], 2 | *(r3) = r4;
| r3 += 2;
0x0003c988 mov r4, r1 | r4 = r1;
0x0003c98a strb r0, [r2, 1] | *((r2 + 1)) = r0;
0x0003c98c mov r2, r3 | r2 = r3;
0x0003c98e b 0x3c82a | goto label_1;
| label_21:
0x0003c990 cmp r7, 2 |
| if (r7 == 2) {
0x0003c992 beq 0x3ca5e | goto label_31;
| }
0x0003c994 cmp r4, r5 |
| if (r4 >= r5) {
0x0003c996 bhs.w 0x3cc08 | goto label_32;
| }
0x0003c99a ldr.w lr, [pc, 0x298] |
0x0003c99e mov.w sb, 0xf800 |
0x0003c9a2 movt sb, 0xffff | sb = 0x-800;
0x0003c9a6 mov ip, r8 |
0x0003c9a8 add lr, pc | lr = 0x795e2;
0x0003c9aa b 0x3c9c2 |
| while (r3 < 0xbf) {
| label_6:
0x0003c9ac add.w r2, ip, 2 | r2 = ip + 2;
0x0003c9b0 mov r4, r1 | r4 = r1;
| label_7:
0x0003c9b2 cmp r1, r5 |
0x0003c9b4 strb.w r3, [ip, 1] | *((ip + 1)) = r3;
0x0003c9b8 strb.w sl, [ip] | *(ip) = sl;
| if (r1 >= r5) {
0x0003c9bc bhs.w 0x3cb36 | goto label_33;
| }
0x0003c9c0 mov ip, r2 |
0x0003c9c2 mov r1, r4 | r1 = r4;
0x0003c9c4 ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x0003c9c8 cmp r3, 0xbf |
0x0003c9ca it ls |
| if (r3 > 0xbf) {
0x0003c9cc movls sl, 0 | sl = 0;
| }
0x0003c9d0 bls 0x3c9ac |
| }
0x0003c9d2 add r3, lr | r3 += lr;
0x0003c9d4 cmp r5, r1 |
0x0003c9d6 ldrb r0, [r3, -0xc0] | r0 = *((r3 - 0xc0));
0x0003c9da mov r3, r0 | r3 = r0;
| if (r5 == r1) {
0x0003c9dc beq.w 0x3cc0e | goto label_34;
| }
0x0003c9e0 mov r3, r1 | r3 = r1;
0x0003c9e2 b 0x3c9ee |
| while (r4 == 0x80) {
0x0003c9e4 cmp r5, r3 |
0x0003c9e6 add.w r0, r2, r0, lsl 6 | r0 = r2 + (r0 << 6);
0x0003c9ea mov r1, r3 | r1 = r3;
| if (r5 == r3) {
0x0003c9ec beq 0x3ca00 | goto label_35;
| }
0x0003c9ee mov r1, r3 | r1 = r3;
0x0003c9f0 ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x0003c9f4 and r4, r2, 0xc0 | r4 = r2 & 0xc0;
0x0003c9f8 and r2, r2, 0x3f | r2 &= 0x3f;
0x0003c9fc cmp r4, 0x80 |
0x0003c9fe beq 0x3c9e4 |
| }
| label_35:
0x0003ca00 cmp r0, 0x7f |
| if (r0 < 0x7f) {
0x0003ca02 bls.w 0x3cb28 | goto label_36;
| }
0x0003ca06 and.w r3, r0, sb | r3 = r0 & sb;
0x0003ca0a cmp.w r3, 0xd800 |
| if (r3 == 0xd800) {
0x0003ca0e beq.w 0x3cb28 | goto label_36;
| }
0x0003ca12 bic r2, r0, 1 | r2 = BIT_MASK (r0, 1);
0x0003ca16 movw r3, 0xfffe | r3 = 0xfffe;
0x0003ca1a cmp r2, r3 |
| if (r2 == r3) {
0x0003ca1c beq.w 0x3cb28 | goto label_36;
| }
0x0003ca20 cmp.w r0, 0x10000 |
0x0003ca24 uxtb r3, r0 | r3 = (int8_t) r0;
0x0003ca26 ubfx sl, r0, 8, 8 | sl = (r0 >> 8) & ((1 << 8) - 1);
| if (r0 <= 0x10000) {
0x0003ca2a blo 0x3c9ac | goto label_6;
| }
0x0003ca2c strb.w r3, [ip, 3] | *((ip + 3)) = r3;
0x0003ca30 and r3, sl, 3 | r3 = sl & 3;
0x0003ca34 sub.w r2, r0, 0x10000 | r2 = r0 - 0x10000;
0x0003ca38 subs r3, 0x24 | r3 -= 0x24;
0x0003ca3a strb.w r3, [ip, 2] | *((ip + 2)) = r3;
0x0003ca3e lsrs r3, r2, 0xa | r3 = r2 >> 0xa;
0x0003ca40 ubfx sl, r2, 0x12, 2 | sl = (r2 >> 0x12) & ((1 << 2) - 1);
0x0003ca44 ubfx r0, r0, 0xa, 6 | r0 = (r0 >> 0xa) & ((1 << 6) - 1);
0x0003ca48 sub.w sl, sl, 0x28 | sl -= 0x28;
0x0003ca4c and r3, r3, 0xc0 | r3 &= 0xc0;
0x0003ca50 uxtb.w sl, sl | sl = (int8_t) sl;
0x0003ca54 orrs r3, r0 | r3 |= r0;
0x0003ca56 add.w r2, ip, 4 | r2 = ip + 4;
0x0003ca5a mov r4, r1 | r4 = r1;
0x0003ca5c b 0x3c9b2 | goto label_7;
| label_31:
0x0003ca5e cmp r4, r5 |
| if (r4 >= r5) {
0x0003ca60 bhs.w 0x3cc08 | goto label_32;
| }
0x0003ca64 ldr.w lr, [pc, 0x1d0] |
0x0003ca68 mov.w sb, 0xf800 |
0x0003ca6c movt sb, 0xffff | sb = 0x-800;
0x0003ca70 mov ip, r8 |
0x0003ca72 add lr, pc | lr = 0x796ae;
0x0003ca74 b 0x3ca8a |
| while (r3 < 0xbf) {
| label_8:
0x0003ca76 add.w r2, ip, 2 | r2 = ip + 2;
0x0003ca7a mov r4, r1 | r4 = r1;
| label_9:
0x0003ca7c cmp r5, r1 |
0x0003ca7e strb.w sl, [ip, 1] | *((ip + 1)) = sl;
0x0003ca82 strb.w r3, [ip] | *(ip) = r3;
| if (r5 < r1) {
0x0003ca86 bls 0x3cb36 | goto label_33;
| }
0x0003ca88 mov ip, r2 |
0x0003ca8a mov r1, r4 | r1 = r4;
0x0003ca8c ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x0003ca90 cmp r3, 0xbf |
0x0003ca92 it ls |
| if (r3 > 0xbf) {
0x0003ca94 movls sl, 0 | sl = 0;
| }
0x0003ca98 bls 0x3ca76 |
| }
0x0003ca9a add r3, lr | r3 += lr;
0x0003ca9c cmp r5, r1 |
0x0003ca9e ldrb r0, [r3, -0xc0] | r0 = *((r3 - 0xc0));
0x0003caa2 mov r3, r0 | r3 = r0;
| if (r5 == r1) {
0x0003caa4 beq.w 0x3cc1e | goto label_37;
| }
0x0003caa8 mov r3, r1 | r3 = r1;
0x0003caaa b 0x3cab6 |
| while (r4 == 0x80) {
0x0003caac cmp r5, r3 |
0x0003caae add.w r0, r2, r0, lsl 6 | r0 = r2 + (r0 << 6);
0x0003cab2 mov r1, r3 | r1 = r3;
| if (r5 == r3) {
0x0003cab4 beq 0x3cac8 | goto label_38;
| }
0x0003cab6 mov r1, r3 | r1 = r3;
0x0003cab8 ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x0003cabc and r4, r2, 0xc0 | r4 = r2 & 0xc0;
0x0003cac0 and r2, r2, 0x3f | r2 &= 0x3f;
0x0003cac4 cmp r4, 0x80 |
0x0003cac6 beq 0x3caac |
| }
| label_38:
0x0003cac8 cmp r0, 0x7f |
| if (r0 < 0x7f) {
0x0003caca bls 0x3cb20 | goto label_39;
| }
0x0003cacc and.w r3, r0, sb | r3 = r0 & sb;
0x0003cad0 cmp.w r3, 0xd800 |
| if (r3 == 0xd800) {
0x0003cad4 beq 0x3cb20 | goto label_39;
| }
0x0003cad6 bic r2, r0, 1 | r2 = BIT_MASK (r0, 1);
0x0003cada movw r3, 0xfffe | r3 = 0xfffe;
0x0003cade cmp r2, r3 |
| if (r2 == r3) {
0x0003cae0 beq 0x3cb20 | goto label_39;
| }
0x0003cae2 cmp.w r0, 0x10000 |
0x0003cae6 uxtb r3, r0 | r3 = (int8_t) r0;
0x0003cae8 ubfx sl, r0, 8, 8 | sl = (r0 >> 8) & ((1 << 8) - 1);
| if (r0 <= 0x10000) {
0x0003caec blo 0x3ca76 | goto label_8;
| }
0x0003caee strb.w r3, [ip, 2] | *((ip + 2)) = r3;
0x0003caf2 and r3, sl, 3 | r3 = sl & 3;
0x0003caf6 sub.w r2, r0, 0x10000 | r2 = r0 - 0x10000;
0x0003cafa subs r3, 0x24 | r3 -= 0x24;
0x0003cafc strb.w r3, [ip, 3] | *((ip + 3)) = r3;
0x0003cb00 lsrs r3, r2, 0xa | r3 = r2 >> 0xa;
0x0003cb02 ubfx sl, r2, 0x12, 2 | sl = (r2 >> 0x12) & ((1 << 2) - 1);
0x0003cb06 ubfx r0, r0, 0xa, 6 | r0 = (r0 >> 0xa) & ((1 << 6) - 1);
0x0003cb0a sub.w sl, sl, 0x28 | sl -= 0x28;
0x0003cb0e and r3, r3, 0xc0 | r3 &= 0xc0;
0x0003cb12 uxtb.w sl, sl | sl = (int8_t) sl;
0x0003cb16 orrs r3, r0 | r3 |= r0;
0x0003cb18 add.w r2, ip, 4 | r2 = ip + 4;
0x0003cb1c mov r4, r1 | r4 = r1;
0x0003cb1e b 0x3ca7c | goto label_9;
| label_39:
0x0003cb20 mov.w sl, 0xff | sl = 0xff;
0x0003cb24 movs r3, 0xfd | r3 = 0xfd;
0x0003cb26 b 0x3ca76 | goto label_8;
| label_36:
0x0003cb28 movs r3, 0xfd | r3 = 0xfd;
0x0003cb2a mov.w sl, 0xff | sl = 0xff;
0x0003cb2e b 0x3c9ac | goto label_6;
| label_20:
0x0003cb30 movs r0, 7 | r0 = 7;
0x0003cb32 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_33:
0x0003cb36 sub.w r3, r2, r8 | r3 = r2 - r8;
| label_16:
0x0003cb3a str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x0003cb3c movs r3, 0 | r3 = 0;
0x0003cb3e strb r3, [r2], 1 | *(r2) = r3;
| r2++;
0x0003cb42 b 0x3c85e | goto label_10;
| label_22:
0x0003cb44 cmp r4, r5 |
| if (r4 <= r5) {
0x0003cb46 blo 0x3cb82 | goto label_40;
| }
0x0003cb48 b 0x3cc04 | goto label_23;
| label_12:
0x0003cb4a lsls r1, r3, 0xa | r1 = r3 << 0xa;
0x0003cb4c cmp r5, r0 |
0x0003cb4e and ip, r3, 0x3c0 |
0x0003cb52 lsr.w lr, r3, 6 | lr = r3 >> 6;
0x0003cb56 uxth r1, r1 | r1 = (int16_t) r1;
0x0003cb58 add.w ip, ip, 0x40 |
| if (r5 > r0) {
0x0003cb5c bhi 0x3cba6 | goto label_41;
| }
| label_14:
0x0003cb5e lsrs r1, r3, 0xc | r1 = r3 >> 0xc;
0x0003cb60 and lr, lr, 0x3f | lr &= 0x3f;
0x0003cb64 and r3, r3, 0x3f | r3 &= 0x3f;
0x0003cb68 sub.w lr, lr, 0x80 | lr -= 0x80;
0x0003cb6c subs r1, 0x20 | r1 -= 0x20;
0x0003cb6e subs r3, 0x80 | r3 -= 0x80;
0x0003cb70 strb r1, [r2] | *(r2) = r1;
0x0003cb72 strb.w lr, [r2, 1] |
0x0003cb76 mov r4, r0 | r4 = r0;
0x0003cb78 strb r3, [r2, 2] | *((r2 + 2)) = r3;
0x0003cb7a adds r2, 3 | r2 += 3;
| label_13:
0x0003cb7c cmp r4, r5 |
| if (r4 >= r5) {
0x0003cb7e bhs.w 0x3c858 | goto label_11;
| }
| label_40:
0x0003cb82 mov r0, r4 | r0 = r4;
0x0003cb84 mov r1, r2 | r1 = r2;
0x0003cb86 ldrh r3, [r0], 2 | r3 = *(r0);
| r0 += 2;
0x0003cb8a sub.w ip, r3, 0xd800 |
0x0003cb8e cmp.w ip, 0x800 |
0x0003cb92 uxtb.w ip, r3 | ip = (int8_t) r3;
| if (ip <= 0x800) {
0x0003cb96 blo 0x3cb4a | goto label_12;
| }
0x0003cb98 cmp r3, 0x7f |
0x0003cb9a mov r4, r0 | r4 = r0;
| if (r3 <= 0x7f) {
0x0003cb9c bhi 0x3cbde |
0x0003cb9e strb ip, [r1], 1 | *(r1) = ip;
| r1++;
0x0003cba2 mov r2, r1 | r2 = r1;
0x0003cba4 b 0x3cb7c | goto label_13;
| label_41:
0x0003cba6 ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0003cba8 adds r2, 4 | r2 += 4;
0x0003cbaa adds r4, 4 | r4 += 4;
0x0003cbac ubfx r3, r3, 0, 0xa | r3 = (r3 >> 0) & ((1 << 0xa) - 1);
0x0003cbb0 add r1, r3 | r1 += r3;
0x0003cbb2 add.w r3, r1, ip, lsl 10 | r3 = r1 + (ip << 10);
0x0003cbb6 lsrs r1, r3, 0x12 | r1 = r3 >> 0x12;
0x0003cbb8 subs r1, 0x10 | r1 -= 0x10;
0x0003cbba strb r1, [r2, -0x4] | *((r2 - 0x4)) = r1;
0x0003cbbe ubfx r1, r3, 0xc, 6 | r1 = (r3 >> 0xc) & ((1 << 6) - 1);
0x0003cbc2 subs r1, 0x80 | r1 -= 0x80;
0x0003cbc4 strb r1, [r2, -0x3] | *((r2 - 0x3)) = r1;
0x0003cbc8 ubfx r1, r3, 6, 6 | r1 = (r3 >> 6) & ((1 << 6) - 1);
0x0003cbcc and r3, r3, 0x3f | r3 &= 0x3f;
0x0003cbd0 subs r1, 0x80 | r1 -= 0x80;
0x0003cbd2 subs r3, 0x80 | r3 -= 0x80;
0x0003cbd4 strb r1, [r2, -0x2] | *((r2 - 0x2)) = r1;
0x0003cbd8 strb r3, [r2, -0x1] | *((r2 - 0x1)) = r3;
0x0003cbdc b 0x3cb7c | goto label_13;
| }
0x0003cbde lsr.w lr, r3, 6 | lr = r3 >> 6;
0x0003cbe2 cmp.w r3, 0x800 |
0x0003cbe6 and ip, ip, 0x3f |
0x0003cbea uxtb.w sb, lr | sb = (int8_t) lr;
0x0003cbee orr ip, ip, 0x80 |
0x0003cbf2 sub.w sb, sb, 0x40 | sb -= 0x40;
| if (r3 >= 0x800) {
0x0003cbf6 bhs 0x3cb5e | goto label_14;
| }
0x0003cbf8 strb sb, [r1], 2 | *(r1) = sb;
| r1 += 2;
0x0003cbfc strb.w ip, [r2, 1] | *((r2 + 1)) = ip;
0x0003cc00 mov r2, r1 | r2 = r1;
0x0003cc02 b 0x3cb7c | goto label_13;
| label_23:
0x0003cc04 movs r3, 0 | r3 = 0;
0x0003cc06 b 0x3c85c | goto label_15;
| label_32:
0x0003cc08 mov r2, r8 | r2 = r8;
0x0003cc0a movs r3, 0 | r3 = 0;
0x0003cc0c b 0x3cb3a | goto label_16;
| label_34:
0x0003cc0e cmp r0, 0x80 |
0x0003cc10 itte lo |
| if (r0 >= 0x80) {
0x0003cc12 movlo r3, 0xfd | r3 = 0xfd;
| }
| if (r0 >= 0x80) {
0x0003cc14 movlo sl, 0xff | sl = 0xff;
| }
| if (r0 >= 0x80) {
0x0003cc18 mov.w sl, 0 | sl = 0;
| }
0x0003cc1c b 0x3c9ac | goto label_6;
| label_37:
0x0003cc1e cmp r0, 0x80 |
0x0003cc20 itte lo |
| if (r0 >= 0x80) {
0x0003cc22 movlo r3, 0xfd | r3 = 0xfd;
| }
| if (r0 >= 0x80) {
0x0003cc24 movlo sl, 0xff | sl = 0xff;
| }
| if (r0 >= 0x80) {
0x0003cc28 mov.w sl, 0 | sl = 0;
| }
0x0003cc2c b 0x3ca76 | goto label_8;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3d830 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0003d830 () | void fcn_0003d830 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int8_t var_1ch;
| int8_t var_1h;
| int16_t var_41h;
| int16_t var_44h;
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0003d830 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003d834 sub sp, 0x4c |
0x0003d836 ldr r6, [pc, 0x1b8] |
0x0003d838 mov r5, r0 | r5 = r0;
0x0003d83a mov sb, r2 | sb = r2;
0x0003d83c ldr r4, [pc, 0x1b4] | r4 = *(0x3d9f4);
0x0003d83e ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x0003d840 add r6, pc | r6 = 0x7b236;
0x0003d842 ldr r4, [r6, r4] |
0x0003d844 cmp r3, 0x1f |
0x0003d846 ldr r4, [r4] | r4 = *(0x7b236);
0x0003d848 str r4, [sp, 0x44] | var_44h = r4;
0x0003d84a mov.w r4, 0 | r4 = 0;
0x0003d84e mov r4, r1 | r4 = r1;
| if (r3 <= 0x1f) {
0x0003d850 ble.w 0x3d99c | goto label_5;
| }
0x0003d854 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0003d856 ldr r6, [r0, 0x20] | r6 = *((r0 + 0x20));
0x0003d858 and r3, r3, 0x2d | r3 &= 0x2d;
0x0003d85c str r6, [r0, 8] | *((r0 + 8)) = r6;
0x0003d85e strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| label_4:
0x0003d860 ands r2, r3, 4 | r2 = r3 & 4;
| if (r2 == r3) {
0x0003d864 bne 0x3d8e8 |
0x0003d866 vldr d16, [pc, 0x180] | __asm ("vldr d16, [0x0003d9ec]");
0x0003d86a lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x0003d86c strd r2, r6, [sp, 0x10] | __asm ("strd r2, r6, [var_10h]");
0x0003d86e movs r6, 4 | r6 = 4;
0x0003d870 str r2, [sp, 0x20] | var_20h = r2;
0x0003d872 strh.w r2, [sp, 0x24] | var_24h = r2;
0x0003d876 vstr d16, [sp, 0x18] | __asm ("vstr d16, [sp, 0x18]");
| if (r6 >= 4) {
0x0003d87a bpl.w 0x3d996 | goto label_6;
| }
0x0003d87e ldrd r0, r1, [r5] | __asm ("ldrd r0, r1, [r5]");
0x0003d882 bl 0xc4d4c | r0 = fcn_000c4d4c (r0, r1, r2);
0x0003d886 mov r2, r0 | r2 = r0;
0x0003d888 mov r3, r1 | r3 = r1;
| label_1:
0x0003d88a ldr r1, [pc, 0x16c] |
0x0003d88c add r0, sp, 0x10 | r0 += var_10h;
0x0003d88e add r1, pc | r1 = 0x7b28c;
0x0003d890 bl 0x37e84 | fcn_00037e84 ();
0x0003d894 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0003d896 movs r2, 0 | r2 = 0;
0x0003d898 strb r2, [r6, r3] | *((r6 + r3)) = r2;
| label_0:
0x0003d89a ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0003d89c blx 0x65dc | strcmp (r0, r1);
0x0003d8a0 movs r3, 1 | r3 = 1;
0x0003d8a2 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x0003d8a6 strb r3, [r5, 0x12] | *((r5 + 0x12)) = r3;
0x0003d8a8 str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x0003d8aa ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0003d8ac cmp.w sb, 0 |
| if (sb != 0) {
0x0003d8b0 beq 0x3d8b6 |
0x0003d8b2 bic r3, r3, 0x2c | r3 = BIT_MASK (r3, 0x2c);
| }
0x0003d8b6 orr r3, r3, 0x200 | r3 |= 0x200;
0x0003d8ba cmp r4, 1 |
0x0003d8bc orr r3, r3, 2 | r3 |= 2;
0x0003d8c0 strh r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| if (r4 != 1) {
0x0003d8c2 beq 0x3d8cc |
0x0003d8c4 mov r1, r4 | r1 = r4;
0x0003d8c6 mov r0, r5 | r0 = r5;
0x0003d8c8 bl 0x3c7a0 | fcn_0003c7a0 (r0, r1);
| }
0x0003d8cc movs r0, 0 | r0 = 0;
| label_2:
0x0003d8ce ldr r2, [pc, 0x12c] |
0x0003d8d0 ldr r3, [pc, 0x120] | r3 = *(0x3d9f4);
0x0003d8d2 add r2, pc | r2 = 0x7b2d4;
0x0003d8d4 ldr r3, [r2, r3] | r3 = *(0x7b2d4);
0x0003d8d6 ldr r2, [r3] | r2 = *(0x7b2d4);
0x0003d8d8 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0003d8da eors r2, r3 | r2 ^= r3;
0x0003d8dc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003d8e0 bne 0x3d9e2 | goto label_7;
| }
0x0003d8e2 add sp, 0x4c |
0x0003d8e4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0003d8e8 lsls r2, r2, 1 | r2 <<= 1;
0x0003d8ea mov r1, r5 | r1 = r5;
0x0003d8ec add r0, sp, 0x10 | r0 += var_10h;
0x0003d8ee blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0003d8f2 ldrd r3, fp, [sp, 0x10] | __asm ("ldrd r3, fp, [var_10h]");
0x0003d8f6 cmp.w fp, 0 |
0x0003d8fa it ge |
| if (fp < 0) {
0x0003d8fc movge lr, fp | lr = fp;
| }
| if (fp < 0) {
0x0003d8fe blt 0x3d9c2 | goto label_8;
| }
| label_3:
0x0003d900 movw r0, 0xcccd |
0x0003d904 add.w r8, sp, 0x41 | r8 += var_41h;
0x0003d908 movt r0, 0xcccc | r0 = 0xcccccccd;
0x0003d90c movs r2, 0x14 | r2 = 0x14;
0x0003d90e mov.w sl, -0x33333334 | sl = -0x33333334;
0x0003d912 movs r1, 0 | r1 = 0;
0x0003d914 strb.w r1, [sp, 0x41] | var_41h = r1;
0x0003d918 strd r6, r5, [sp, 4] | __asm ("strd r6, r5, [var_4h]");
0x0003d91c str r4, [sp, 0xc] | var_ch = r4;
| do {
0x0003d91e adds.w r4, r3, lr | r4 = r3 + lr;
0x0003d922 mov ip, r3 |
0x0003d924 adc r4, r4, 0 | __asm ("adc r4, r4, 0");
0x0003d928 mov r7, lr | r7 = lr;
0x0003d92a umull r1, r6, r0, r4 | r1:r6 = r0 * r4;
0x0003d92e mov r1, r2 | r1 = r2;
0x0003d930 subs r2, 1 | r2--;
0x0003d932 bic r5, r6, 3 | r5 = BIT_MASK (r6, 3);
0x0003d936 add.w r5, r5, r6, lsr 2 | r5 += (r6 >> 2);
0x0003d93a subs r4, r4, r5 | r4 -= r5;
0x0003d93c movs r5, 5 | r5 = 5;
0x0003d93e subs r3, r3, r4 | r3 -= r4;
0x0003d940 mul r6, sl, r3 | r6 = sl * r3;
0x0003d944 sbc lr, lr, 0 | __asm ("sbc lr, lr, 0");
0x0003d948 mla r6, r0, lr, r6 | __asm ("mla r6, r0, lr, r6");
0x0003d94c umull lr, r3, r3, r0 | lr:r3 = r3 * r0;
0x0003d950 add r6, r3 | r6 += r3;
0x0003d952 and r3, lr, 1 | r3 = lr & 1;
0x0003d956 umull r5, r3, r3, r5 | r5:r3 = r3 * r5;
0x0003d95a lsr.w lr, lr, 1 | lr >>= 1;
0x0003d95e orr.w r3, lr, r6, lsl 31 | r3 = lr | (r6 << 31);
0x0003d962 lsr.w lr, r6, 1 | lr = r6 >> 1;
0x0003d966 adds r5, r5, r4 | r5 += r4;
0x0003d968 cmp.w ip, 0xa |
0x0003d96c sbcs r7, r7, 0 | __asm ("sbcs r7, r7, 0");
0x0003d970 add.w r5, r5, 0x30 | r5 += 0x30;
0x0003d974 strb r5, [r8, -0x1]! | *((r8 -= 0x1)) = r5;
0x0003d978 bhs 0x3d91e |
| } while (ip >= 0xa);
0x0003d97a cmp.w fp, 0 |
0x0003d97e ldrd r6, r5, [sp, 4] | __asm ("ldrd r6, r5, [var_4h]");
0x0003d982 ldr r4, [sp, 0xc] | r4 = var_ch;
0x0003d984 blt 0x3d9ae |
| while (1) {
0x0003d986 add r3, sp, 0x2c | r3 += var_2ch;
0x0003d988 rsb.w r2, r2, 0x15 | r2 = 0x15 - r2;
0x0003d98c mov r0, r6 | r0 = r6;
0x0003d98e add r1, r3 | r1 += r3;
0x0003d990 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0003d994 b 0x3d89a | goto label_0;
| label_6:
0x0003d996 ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x0003d99a b 0x3d88a | goto label_1;
| label_5:
0x0003d99c movs r2, 0 | r2 = 0;
0x0003d99e movs r1, 0x20 | r1 = 0x20;
0x0003d9a0 bl 0x3c534 | r0 = fcn_0003c534 (r0, r1, r2);
| if (r0 == 0) {
0x0003d9a4 cbz r0, 0x3d9dc | goto label_9;
| }
0x0003d9a6 movs r3, 0 | r3 = 0;
0x0003d9a8 movs r0, 7 | r0 = 7;
0x0003d9aa strb r3, [r5, 0x12] | *((r5 + 0x12)) = r3;
0x0003d9ac b 0x3d8ce | goto label_2;
0x0003d9ae subs r0, r1, 2 | r0 = r1 - 2;
0x0003d9b0 add.w r3, r2, 0x48 | r3 = r2 + 0x48;
0x0003d9b4 add r3, sp, r3 | r3 = sp + r3;
0x0003d9b6 mov r1, r2 | r1 = r2;
0x0003d9b8 mov r2, r0 | r2 = r0;
0x0003d9ba movs r0, 0x2d | r0 = 0x2d;
0x0003d9bc strb r0, [r3, -0x1c] | var_1ch = r0;
0x0003d9c0 b 0x3d986 |
| }
| label_8:
0x0003d9c2 movs r2, 0 | r2 = 0;
0x0003d9c4 mov.w lr, -0x80000000 | lr = -0x80000000;
0x0003d9c8 cmp fp, lr |
0x0003d9ca it eq |
| if (fp == lr) {
0x0003d9cc cmpeq r3, r2 | __asm ("cmpeq r3, r2");
| }
0x0003d9ce it eq |
| if (fp == lr) {
0x0003d9d0 moveq r3, r2 | r3 = r2;
| goto label_10;
| }
| if (fp == lr) {
| label_10:
0x0003d9d2 beq 0x3d900 | goto label_3;
| }
0x0003d9d4 rsbs r3, r3, 0 | r3 -= ;
0x0003d9d6 sbc.w lr, r2, fp | __asm ("sbc.w lr, r2, fp");
0x0003d9da b 0x3d900 | goto label_3;
| label_9:
0x0003d9dc ldr r6, [r5, 8] | r6 = *((r5 + 8));
0x0003d9de ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0003d9e0 b 0x3d860 | goto label_4;
| label_7:
0x0003d9e2 blx 0x6430 | fcn_00006430 ();
0x0003d9e6 nop |
0x0003d9e8 movs r0, r4 | r0 = r4;
0x0003d9ea movs r0, r0 |
0x0003d9ec movs r0, r0 |
0x0003d9ee movs r0, r0 |
0x0003d9f0 stm r5!, {r3, r4, r6} | *(r5!) = r3;
| *((r5! + 4)) = r4;
| *((r5! + 8)) = r6;
0x0003d9f2 movs r2, r1 | r2 = r1;
0x0003d9f4 lsls r4, r6, 8 | r4 = r6 << 8;
0x0003d9f6 movs r0, r0 |
0x0003d9f8 cmp r3, 0xe2 |
0x0003d9fa movs r1, r1 |
0x0003d9fc stm r4!, {r1, r2, r6, r7} | *(r4!) = r1;
| *((r4! + 4)) = r2;
| *((r4! + 8)) = r6;
| *((r4! + 12)) = r7;
0x0003d9fe movs r2, r1 | r2 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3ddb8 */
| #include <stdint.h>
|
; (fcn) fcn.0003ddb8 () | void fcn_0003ddb8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0003ddb8 invalid |
0x0003ddbc mov r7, r0 | r7 = r0;
0x0003ddbe mov r5, r2 | r5 = r2;
0x0003ddc0 mov r4, r3 | r4 = r3;
0x0003ddc2 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x0003ddc6 cmp r0, 0 |
| if (r0 == 0) {
0x0003ddc8 beq 0x3dec0 | goto label_5;
| }
0x0003ddca ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x0003ddcc movw r3, 0x202 | r3 = 0x202;
0x0003ddd0 bics r3, r2 | __asm ("bics r3, r2");
| if (r0 == 0) {
0x0003ddd2 beq 0x3dece | goto label_6;
| }
| label_0:
0x0003ddd4 lsls r3, r2, 0x1f | r3 = r2 << 0x1f;
| if (r3 < r2) {
0x0003ddd6 bmi 0x3dec0 | goto label_5;
| }
0x0003ddd8 movs r1, 1 | r1 = 1;
0x0003ddda bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x0003ddde mov r6, r0 | r6 = r0;
| if (r7 != 0) {
0x0003dde0 cbz r7, 0x3dde8 |
| label_1:
0x0003dde2 mov r0, r7 | r0 = r7;
0x0003dde4 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
| label_2:
0x0003dde8 cmp r6, 0 |
| if (r6 == 0) {
0x0003ddea beq 0x3debc | goto label_7;
| }
0x0003ddec ldrb.w lr, [r6] |
0x0003ddf0 sub.w r3, lr, 0x30 | r3 = lr - 0x30;
0x0003ddf4 uxtb r2, r3 | r2 = (int8_t) r3;
0x0003ddf6 cmp r2, 9 |
| if (r2 > 9) {
0x0003ddf8 bhi 0x3dee4 | goto label_8;
| }
0x0003ddfa mov.w r8, 0 | r8 = 0;
0x0003ddfe adds r0, r6, 1 | r0 = r6 + 1;
0x0003de00 mov sb, r8 | sb = r8;
0x0003de02 mov r2, r8 | r2 = r8;
| do {
0x0003de04 lsl.w ip, sb, 2 |
0x0003de08 lsl.w r1, r8, 2 | r1 = r8 << 2;
0x0003de0c ldrb.w lr, [r0] |
0x0003de10 orr.w ip, ip, r8, lsr 30 |
0x0003de14 adds.w r1, r1, r8 | r1 += r8;
0x0003de18 mov r7, r0 | r7 = r0;
0x0003de1a adc.w ip, sb, ip | __asm ("adc.w ip, sb, ip");
0x0003de1e adds r1, r1, r1 | r1 += r1;
0x0003de20 adc.w ip, ip, ip | __asm ("adc.w ip, ip, ip");
0x0003de24 adds.w r8, r3, r1 | r8 = r3 + r1;
0x0003de28 adc.w sb, ip, r3, asr 31 | __asm ("adc.w sb, ip, r3, asr 31");
0x0003de2c sub.w r3, lr, 0x30 | r3 = lr - 0x30;
0x0003de30 uxtb r1, r3 | r1 = (int8_t) r3;
0x0003de32 adds r2, 1 | r2++;
0x0003de34 adds r0, 1 | r0++;
0x0003de36 cmp r1, 9 |
0x0003de38 bls 0x3de04 |
| } while (r1 < 9);
0x0003de3a mov r3, r8 | r3 = r8;
0x0003de3c mov r1, sb | r1 = sb;
| label_4:
0x0003de3e strd r3, r1, [r5] | __asm ("strd r3, r1, [r5]");
0x0003de42 ldrb r3, [r7] | r3 = *(r7);
0x0003de44 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x0003de46 bne 0x3de5a | goto label_9;
| }
0x0003de48 add r2, r6 | r2 += r6;
| do {
0x0003de4a mov r1, r2 | r1 = r2;
0x0003de4c ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0003de50 cmp r3, 0x20 |
0x0003de52 beq 0x3de4a |
| } while (r3 == 0x20);
0x0003de54 rsb.w r2, r6, 1 | r2 = 1 - r6;
0x0003de58 add r2, r1 | r2 += r1;
| label_9:
0x0003de5a cmp r3, 0x2d |
0x0003de5c ittt eq |
| if (r3 != 0x2d) {
0x0003de5e moveq r7, -1 | r7 = -1;
| }
| if (r3 != 0x2d) {
0x0003de62 addeq r2, 1 | r2++;
| }
| if (r3 == 0x2d) {
0x0003de64 mov ip, r7 |
| }
| if (r3 != 0x2d) {
0x0003de66 beq 0x3de6e |
0x0003de68 movs r7, 1 | r7 = 1;
0x0003de6a mov.w ip, 0 |
| }
0x0003de6e ldrb r0, [r6, r2] | r0 = *((r6 + r2));
0x0003de70 movs r5, 0 | r5 = 0;
0x0003de72 add r6, r2 | r6 += r2;
0x0003de74 sub.w r1, r0, 0x30 | r1 = r0 - 0x30;
0x0003de78 uxtb r3, r1 | r3 = (int8_t) r1;
0x0003de7a cmp r3, 9 |
0x0003de7c it ls |
| if (r3 > 9) {
0x0003de7e movls r3, r5 | r3 = r5;
| }
| if (r3 > 9) {
0x0003de80 bhi 0x3dee0 | goto label_10;
| }
| do {
0x0003de82 lsl.w lr, r3, 2 | lr = r3 << 2;
0x0003de86 lsls r2, r5, 2 | r2 = r5 << 2;
0x0003de88 ldrb r0, [r6, 1]! | r0 = *((r6 += 1));
0x0003de8c orr.w lr, lr, r5, lsr 30 | lr |= (r5 >> 30);
0x0003de90 adds r2, r2, r5 | r2 += r5;
0x0003de92 adc.w r3, r3, lr | __asm ("adc.w r3, r3, lr");
0x0003de96 adds r2, r2, r2 | r2 += r2;
0x0003de98 adcs r3, r3 | __asm ("adcs r3, r3");
0x0003de9a adds r5, r1, r2 | r5 = r1 + r2;
0x0003de9c adc.w r3, r3, r1, asr 31 | __asm ("adc.w r3, r3, r1, asr 31");
0x0003dea0 sub.w r1, r0, 0x30 | r1 = r0 - 0x30;
0x0003dea4 uxtb r2, r1 | r2 = (int8_t) r1;
0x0003dea6 cmp r2, 9 |
0x0003dea8 bls 0x3de82 |
| } while (r2 < 9);
0x0003deaa mul ip, r5, ip |
0x0003deae mla ip, r7, r3, ip | __asm ("mla ip, r7, r3, ip");
0x0003deb2 umull r5, r7, r5, r7 | r5:r7 = r5 * r7;
0x0003deb6 add r7, ip | r7 += ip;
| label_3:
0x0003deb8 strd r5, r7, [r4] | __asm ("strd r5, r7, [r4]");
| do {
| label_7:
0x0003debc pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_5:
0x0003dec0 cmp r7, 0 |
0x0003dec2 beq 0x3debc |
| } while (r7 == 0);
0x0003dec4 mov r0, r7 | r0 = r7;
0x0003dec6 pop.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x0003deca b.w 0x2e7ac | void (*0x2e7ac)() ();
| label_6:
0x0003dece ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x0003ded0 cmp r3, 1 |
0x0003ded2 it eq |
| if (r3 == 1) {
0x0003ded4 ldreq r6, [r0, 8] | r6 = *((r0 + 8));
| goto label_11;
| }
| if (r3 != 1) {
| label_11:
0x0003ded6 bne.w 0x3ddd4 | goto label_0;
| }
0x0003deda cmp r7, 0 |
| if (r7 != 0) {
0x0003dedc bne 0x3dde2 | goto label_1;
| }
0x0003dede b 0x3dde8 | goto label_2;
| label_10:
0x0003dee0 mov r7, r5 | r7 = r5;
0x0003dee2 b 0x3deb8 | goto label_3;
| label_8:
0x0003dee4 movs r3, 0 | r3 = 0;
0x0003dee6 mov r7, r6 | r7 = r6;
0x0003dee8 mov r1, r3 | r1 = r3;
0x0003deea mov r2, r3 | r2 = r3;
0x0003deec b 0x3de3e | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3e844 */
| #include <stdint.h>
|
; (fcn) fcn.0003e844 () | void fcn_0003e844 (int16_t arg_78h, int16_t arg_28h, int16_t arg_2ch, int16_t arg1, uint32_t arg2, int16_t arg3, uint32_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0003e844 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003e848 mov r5, r0 | r5 = r0;
0x0003e84a ldrb.w r8, [sp, 0x28] | r8 = *(arg_28h);
0x0003e84e cmp r1, 0 |
| if (r1 == 0) {
0x0003e850 beq.w 0x3e9f6 | goto label_13;
| }
0x0003e854 mov r4, r2 | r4 = r2;
0x0003e856 mov r6, r1 | r6 = r1;
0x0003e858 ldr.w fp, [r0, 0x14] | fp = *(arg_28hx14);
0x0003e85c cmp.w fp, 0 |
| if (fp == 0) {
0x0003e860 beq 0x3e94e | goto label_14;
| }
0x0003e862 ldr.w r7, [fp, 0x78] | r7 = *(arg_78h);
0x0003e866 cmp r3, 0 |
0x0003e868 it ge |
| if (r3 >= 0) {
0x0003e86a asrge sl, r7, 0x1f | __asm ("asrge sl, r7, 0x1f");
| }
| if (r3 < 0) {
0x0003e86e blt 0x3e90e | goto label_15;
| }
| label_2:
0x0003e870 mov.w sb, 2 | sb = 2;
0x0003e874 cmp.w r8, 0 |
0x0003e878 beq 0x3e904 |
| while (1) {
| label_0:
0x0003e87a cmp r7, r4 |
0x0003e87c sbcs.w sl, sl, r3 | __asm ("sbcs.w sl, sl, r3");
| if (r7 < r4) {
0x0003e880 blt.w 0x3e9b8 | goto label_16;
| }
0x0003e882 strh r2, [r3, 4] | *((r3 + 4)) = r2;
0x0003e884 ldr r2, [sp, 0x2c] | r2 = *(arg_2ch);
0x0003e886 adds r2, 1 | r2++;
| if (r2 != 1) {
0x0003e888 beq 0x3e8bc |
0x0003e88a ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0003e88c tst.w r3, 0x9000 |
0x0003e88e ldr r7, [pc, 0x40] | r7 = *(0x3e8d2);
| if ((r3 & 0x9000) != 0) {
0x0003e890 bne 0x3e946 | goto label_17;
| }
0x0003e892 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0003e894 cmp r3, 0 |
| if (r3 != 0) {
0x0003e896 bne 0x3e946 | goto label_17;
| }
| label_1:
0x0003e898 ldr r3, [pc, 0x1f4] |
0x0003e89a ldr r2, [sp, 0x2c] | r2 = *(arg_2ch);
0x0003e89c str r6, [r5, 8] | *((r5 + 8)) = r6;
0x0003e89e add r3, pc | r3 = 0x7d332;
0x0003e8a0 cmp r2, r3 |
| if (r2 == r3) {
0x0003e8a2 beq.w 0x3ea20 | goto label_18;
| }
0x0003e8a6 ldr r3, [sp, 0x2c] | r3 = *(arg_2ch);
0x0003e8a8 cmp r3, 0 |
0x0003e8aa str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x0003e8ac ite ne |
| if (r3 == 0) {
0x0003e8ae movne r3, 0x1000 | r3 = 0x1000;
| }
| if (r3 == 0) {
0x0003e8b2 mov.w r3, 0x2000 | r3 = 0x2000;
| }
0x0003e8b6 orr.w sb, sb, r3 | sb |= r3;
0x0003e8ba b 0x3e8ee |
| } else {
0x0003e8bc tst.w sb, 0x200 |
0x0003e8c0 it eq |
| if ((sb & 0x200) != 0) {
0x0003e8c2 moveq r7, r4 | r7 = r4;
| }
| if ((sb & 0x200) != 0) {
0x0003e8c4 bne 0x3e9a6 | goto label_19;
| }
| label_5:
0x0003e8c6 cmp r7, 0x20 |
0x0003e8c8 mov r1, r7 | r1 = r7;
0x0003e8ca sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
0x0003e8ce ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0003e8d0 it lt |
| if (r7 >= 0x20) {
0x0003e8d2 movlt r1, 0x20 | r1 = 0x20;
| }
0x0003e8d4 cmp r1, r3 |
| if (r1 > r3) {
0x0003e8d6 bgt.w 0x3ea10 | goto label_20;
| }
0x0003e8da ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0003e8dc ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x0003e8de and r3, r3, 0x2d | r3 &= 0x2d;
0x0003e8e2 strh r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0003e8e4 str r0, [r5, 8] | *((r5 + 8)) = r0;
| label_9:
0x0003e8e6 mov r2, r7 | r2 = r7;
0x0003e8e8 mov r1, r6 | r1 = r6;
0x0003e8ea blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
| label_10:
0x0003e8ee cmp.w r8, 1 |
0x0003e8f2 str r4, [r5, 0xc] | *((r5 + 0xc)) = r4;
0x0003e8f4 strh.w sb, [r5, 0x10] | *((r5 + 0x10)) = sb;
0x0003e8f8 strb.w r8, [r5, 0x12] | *((r5 + 0x12)) = r8;
| if (r8 > 1) {
0x0003e8fc bhi 0x3e976 | goto label_21;
| }
| label_4:
0x0003e8fe movs r0, 0 | r0 = 0;
| label_6:
0x0003e900 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0003e904 mov.w sb, 0x10 | sb = 0x10;
0x0003e908 mov.w r8, 1 | r8 = 1;
0x0003e90c b 0x3e87a |
| }
| label_15:
0x0003e90e cmp.w r8, 1 |
0x0003e912 it eq |
| if (r8 == 1) {
0x0003e914 asreq sl, r7, 0x1f | __asm ("asreq sl, r7, 0x1f");
| }
| if (r8 == 1) {
0x0003e918 beq 0x3e962 | goto label_22;
| }
0x0003e91a cmp r7, 0 |
| if (r7 < 0) {
0x0003e91c blt 0x3e9b8 | goto label_16;
| }
0x0003e91e asr.w sl, r7, 0x1f | sl = r7 >> 0x1f;
| label_3:
0x0003e922 movs r4, 0 | r4 = 0;
0x0003e924 adds r0, r6, 1 | r0 = r6 + 1;
0x0003e926 mov r3, r4 | r3 = r4;
0x0003e928 b 0x3e938 |
| while (r2 != r1) {
0x0003e92a adds r4, 2 | r4 += 2;
0x0003e92c adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0003e930 cmp r7, r4 |
0x0003e932 sbcs.w r2, sl, r3 | __asm ("sbcs.w r2, sl, r3");
| if (r7 < r4) {
0x0003e936 blt 0x3e9b8 | goto label_16;
| }
0x0003e938 ldrb r2, [r0, r4] | r2 = *((r0 + r4));
0x0003e93a ldrb r1, [r6, r4] | r1 = *((r6 + r4));
0x0003e93c orrs r2, r1 | r2 |= r1;
0x0003e93e bne 0x3e92a |
| }
0x0003e940 movw sb, 0x202 | sb = 0x202;
0x0003e944 b 0x3e87a | goto label_0;
| label_17:
0x0003e946 mov r0, r5 | r0 = r5;
0x0003e948 bl 0x2d36c | fcn_0002d36c (r0);
0x0003e94c b 0x3e898 | goto label_1;
| label_14:
0x0003e94e cmp r3, 0 |
0x0003e950 mov.w r7, 0xca00 |
0x0003e954 movt r7, 0x3b9a | r7 = 0x3b9aca00;
0x0003e958 mov sl, fp | sl = fp;
| if (r3 >= 0) {
0x0003e95a bge 0x3e870 | goto label_2;
| }
0x0003e95c cmp.w r8, 1 |
| if (r8 != 1) {
0x0003e960 bne 0x3e922 | goto label_3;
| }
| label_22:
0x0003e962 mov r0, r6 | r0 = r6;
0x0003e964 movw sb, 0x202 | sb = 0x202;
0x0003e968 blx 0x65dc | strcmp (r0, r1);
0x0003e96c mov.w r8, 1 | r8 = 1;
0x0003e970 mov r4, r0 | r4 = r0;
0x0003e972 movs r3, 0 | r3 = 0;
0x0003e974 b 0x3e87a | goto label_0;
| label_21:
0x0003e976 cmp r4, 1 |
| if (r4 <= 1) {
0x0003e978 ble 0x3e8fe | goto label_4;
| }
0x0003e97a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0003e97c ldrb r2, [r3] | r2 = *(r3);
0x0003e97e ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0003e980 cmp r2, 0xfe |
0x0003e982 it eq |
| if (r2 == 0xfe) {
0x0003e984 cmpeq r3, 0xff | __asm ("cmpeq r3, 0xff");
| }
| if (r2 == 0xfe) {
0x0003e986 beq 0x3ea0c | goto label_23;
| }
0x0003e988 cmp r2, 0xff |
0x0003e98a it eq |
| if (r2 == 0xff) {
0x0003e98c cmpeq r3, 0xfe | __asm ("cmpeq r3, 0xfe");
| }
0x0003e98e it eq |
| if (r2 == 0xff) {
0x0003e990 moveq r6, 2 | r6 = 2;
| goto label_24;
| }
| if (r2 != 0xff) {
| label_24:
0x0003e992 bne 0x3e8fe | goto label_4;
| }
| label_7:
0x0003e994 mov r0, r5 | r0 = r5;
0x0003e996 bl 0x3c764 | r0 = fcn_0003c764 (r0);
0x0003e99a mov r4, r0 | r4 = r0;
0x0003e99c cmp r0, 0 |
| if (r0 == 0) {
0x0003e99e beq 0x3ea5e | goto label_25;
| }
| label_8:
0x0003e9a0 movs r0, 7 | r0 = 7;
0x0003e9a2 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x0003e9a6 cmp.w r8, 1 |
0x0003e9aa ite eq |
| if (r8 != 1) {
0x0003e9ac moveq r7, 1 | r7 = 1;
| }
| if (r8 == 1) {
0x0003e9ae movne r7, 2 | r7 = 2;
| }
0x0003e9b0 adds r7, r4, r7 | r7 = r4 + r7;
0x0003e9b2 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0003e9b6 b 0x3e8c6 | goto label_5;
| label_16:
0x0003e9b8 ldr r3, [sp, 0x2c] | r3 = *(arg_2ch);
0x0003e9ba subs r3, 1 | r3--;
0x0003e9bc adds r3, 3 | r3 += 3;
| if (r3 <= 3) {
0x0003e9be bhi 0x3e9d0 |
0x0003e9c0 ldr r3, [pc, 0xd0] |
0x0003e9c2 ldr r2, [sp, 0x2c] | r2 = *(arg_2ch);
0x0003e9c4 add r3, pc | r3 = 0x7d45c;
0x0003e9c6 cmp r2, r3 |
| if (r2 == r3) {
0x0003e9c8 beq 0x3ea86 | goto label_26;
| }
0x0003e9ca ldr r3, [sp, 0x2c] | r3 = *(arg_2ch);
0x0003e9cc mov r0, r6 | r0 = r6;
0x0003e9ce blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
| label_12:
0x0003e9d0 ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0003e9d2 tst.w r3, 0x9000 |
0x0003e9d6 itt eq |
| if ((r3 & 0x9000) != 0) {
0x0003e9d8 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x9000) == 0) {
0x0003e9da strheq r3, [r5, 0x10] | __asm ("strheq r3, [r5, 0x10]");
| }
| if ((r3 & 0x9000) != 0) {
0x0003e9dc bne 0x3ea56 | goto label_27;
| }
| label_11:
0x0003e9de ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| if (r3 != 0) {
0x0003e9e0 cbz r3, 0x3e9f2 |
0x0003e9e2 ldr.w r3, [r3, 0x108] | r3 = *((r3 + 0x108));
| if (r3 == 0) {
0x0003e9e6 cbz r3, 0x3e9f2 | goto label_28;
| }
0x0003e9e8 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x0003e9ea movs r1, 0x12 | r1 = 0x12;
0x0003e9ec str r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x0003e9ee adds r2, 1 | r2++;
0x0003e9f0 str r2, [r3, 0x24] | *((r3 + 0x24)) = r2;
| }
| label_28:
0x0003e9f2 movs r0, 0x12 | r0 = 0x12;
0x0003e9f4 b 0x3e900 | goto label_6;
| label_13:
0x0003e9f6 ldrh r3, [r0, 0x10] | r3 = *(arg_28hx10);
0x0003e9f8 tst.w r3, 0x9000 |
0x0003e9fc itt eq |
| if ((r3 & 0x9000) != 0) {
0x0003e9fe moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x9000) != 0) {
0x0003ea00 strheq r3, [r0, 0x10] | __asm ("strheq r3, [arg_28hx10]");
| goto label_29;
| }
| if ((r3 & 0x9000) == 0) {
| label_29:
0x0003ea02 beq.w 0x3e8fe | goto label_4;
| }
0x0003ea06 bl 0x2d280 | fcn_0002d280 (r0);
0x0003ea0a b 0x3e8fe | goto label_4;
| label_23:
0x0003ea0c movs r6, 3 | r6 = 3;
0x0003ea0e b 0x3e994 | goto label_7;
| label_20:
0x0003ea10 movs r2, 0 | r2 = 0;
0x0003ea12 mov r0, r5 | r0 = r5;
0x0003ea14 bl 0x3c534 | r0 = fcn_0003c534 (r0, r1, r2);
0x0003ea18 cmp r0, 0 |
| if (r0 != 0) {
0x0003ea1a bne 0x3e9a0 | goto label_8;
| }
0x0003ea1c ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0003ea1e b 0x3e8e6 | goto label_9;
| label_18:
0x0003ea20 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0003ea22 str r6, [r5, 0x20] | *((r5 + 0x20)) = r6;
| if (r3 != 0) {
0x0003ea24 cbz r3, 0x3ea48 |
0x0003ea26 ldr.w r2, [r3, 0x164] | r2 = *((r3 + 0x164));
0x0003ea2a cmp r2, r6 |
| if (r2 < r6) {
0x0003ea2c bls 0x3ea48 | goto label_30;
| }
0x0003ea2e ldr.w r2, [r3, 0x15c] | r2 = *((r3 + 0x15c));
0x0003ea32 cmp r2, r6 |
0x0003ea34 it ls |
| if (r2 > r6) {
0x0003ea36 movls r0, 0x80 | r0 = 0x80;
| }
| if (r2 < r6) {
0x0003ea38 bls 0x3ea52 | goto label_31;
| }
0x0003ea3a ldr.w r2, [r3, 0x160] | r2 = *((r3 + 0x160));
0x0003ea3e cmp r2, r6 |
0x0003ea40 it ls |
| if (r2 <= r6) {
0x0003ea42 ldrhls r0, [r3, 0x136] | __asm ("ldrhls r0, [r3, 0x136]");
| }
| if (r2 < r6) {
0x0003ea46 bls 0x3ea52 | goto label_31;
| }
| }
| label_30:
0x0003ea48 ldr r3, [pc, 0x4c] |
0x0003ea4a mov r0, r6 | r0 = r6;
0x0003ea4c add r3, pc |
0x0003ea4e ldr r3, [r3, 0x2c] | r3 = *(0x7d514);
0x0003ea50 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| label_31:
0x0003ea52 str r0, [r5, 0x18] | *((r5 + 0x18)) = r0;
0x0003ea54 b 0x3e8ee | goto label_10;
| label_27:
0x0003ea56 mov r0, r5 | r0 = r5;
0x0003ea58 bl 0x2d280 | fcn_0002d280 (r0);
0x0003ea5c b 0x3e9de | goto label_11;
| label_25:
0x0003ea5e ldrd r0, r2, [r5, 8] | __asm ("ldrd r0, r2, [r5, 8]");
0x0003ea62 subs r2, 2 | r2 -= 2;
0x0003ea64 adds r1, r0, 2 | r1 = r0 + 2;
0x0003ea66 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x0003ea68 blx 0x6354 | realloc (r0, r1);
0x0003ea6c ldrd r2, r3, [r5, 8] | __asm ("ldrd r2, r3, [r5, 8]");
0x0003ea70 strb r4, [r2, r3] | *((r2 + r3)) = r4;
0x0003ea72 ldrd r3, r2, [r5, 8] | __asm ("ldrd r3, r2, [r5, 8]");
0x0003ea76 add r3, r2 | r3 += r2;
0x0003ea78 strb r4, [r3, 1] | *((r3 + 1)) = r4;
0x0003ea7a ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0003ea7c strb r6, [r5, 0x12] | *((r5 + 0x12)) = r6;
0x0003ea7e orr r3, r3, 0x200 | r3 |= 0x200;
0x0003ea82 strh r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0003ea84 b 0x3e8fe | goto label_4;
| label_26:
0x0003ea86 mov r1, r6 | r1 = r6;
0x0003ea88 mov r0, fp | r0 = fp;
0x0003ea8a bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0003ea8e b 0x3e9d0 | goto label_12;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3eb04 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0003eb04 () | void fcn_0003eb04 (int16_t arg_54h, int16_t arg_78h, int16_t arg_c4h, int16_t arg_1b0h, int16_t arg_228h, int16_t arg_2d0h, int16_t arg1, char * s1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ah;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_3dh;
| int16_t var_40h;
| int16_t var_48h;
| int32_t var_48h_2;
| int16_t var_50h;
| int16_t var_52h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = s1;
0x0003eb04 ldr r2, [pc, 0x394] |
0x0003eb06 ldr r3, [pc, 0x398] | r3 = *(0x3eea2);
0x0003eb08 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0003eb0a movs r0, r2 | r0 = r2;
0x0003eb0c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003eb0e ldr r7, [pc, 0x3c0] | r7 = *(0x3eed2);
0x0003eb10 sub sp, 0x74 |
0x0003eb12 add r2, pc | r2 = 0x7d9b2;
0x0003eb14 ldr.w fp, [r0] | fp = *(r0);
0x0003eb18 movs r6, 0 | r6 = 0;
0x0003eb1a mov r5, r1 | r5 = r1;
0x0003eb1c vstr d16, [sp, 0x28] | __asm ("vstr d16, [sp, 0x28]");
0x0003eb20 ldr r3, [r2, r3] |
0x0003eb22 ldr.w r2, [fp, 0x78] | r2 = *(arg_78h);
0x0003eb26 ldr r3, [r3] | r3 = *(0x7d9b2);
0x0003eb28 str r3, [sp, 0x6c] | var_6ch = r3;
0x0003eb2a mov.w r3, 0 | r3 = 0;
0x0003eb2e ldr.w r3, [fp, 0xc4] | r3 = *(arg_c4h);
0x0003eb32 str r6, [sp, 0x20] | var_20h = r6;
0x0003eb34 str r6, [sp, 0x30] | var_30h = r6;
0x0003eb36 cmp r3, 1 |
0x0003eb38 str r6, [sp, 0x38] | var_38h = r6;
0x0003eb3a strh.w r6, [sp, 0x3c] | var_3ch = r6;
0x0003eb3e str r2, [sp, 0x34] | var_34h = r2;
| if (r3 <= 1) {
0x0003eb40 ble 0x3ec0c | goto label_12;
| }
0x0003eb42 ldrb r3, [r1] | r3 = *(r1);
0x0003eb44 cmp r3, 0 |
| if (r3 == 0) {
0x0003eb46 beq.w 0x3ed56 | goto label_13;
| }
0x0003eb48 strh r6, [r0, 8] | *((r0 + 8)) = r6;
0x0003eb4a ldr r7, [pc, 0x358] |
0x0003eb4c add.w r8, sp, 0x28 | r8 += var_28h;
0x0003eb50 ldr.w sb, [pc, 0x354] |
0x0003eb52 str r3, [sp, 0x150] | *((sp + 0x150)) = r3;
0x0003eb54 mov r2, r6 | r2 = r6;
0x0003eb56 add r7, pc | r7 = 0x7da00;
0x0003eb58 add sb, pc | sb = 0x7da04;
| label_0:
0x0003eb5a mov r4, r5 | r4 = r5;
0x0003eb5c b 0x3eb62 |
| while (r3 != 0xa) {
0x0003eb5e ldrb r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x0003eb60 cbz r3, 0x3eb6a | goto label_14;
| }
0x0003eb62 ldrb r3, [r4], 1 | r3 = *(r4);
| r4++;
0x0003eb66 cmp r3, 0xa |
0x0003eb68 bne 0x3eb5e |
| }
| label_14:
0x0003eb6a adds r3, r2, 3 | r3 = r2 + 3;
0x0003eb6c cmp r3, r6 |
| if (r3 >= r6) {
0x0003eb6e bhs 0x3eb9c | goto label_15;
| }
0x0003eb70 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0003eb72 ldrh r0, [r7] | r0 = *(r7);
0x0003eb74 ldrb r1, [r7, 2] | r1 = *((r7 + 2));
0x0003eb76 add.w ip, r6, r2 |
0x0003eb7a str r3, [sp, 0x38] | var_38h = r3;
0x0003eb7c strh r0, [r6, r2] | *((r6 + r2)) = r0;
0x0003eb7e strb.w r1, [ip, 2] | *((ip + 2)) = r1;
| do {
0x0003eb82 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0003eb84 subs r2, r4, r5 | r2 = r4 - r5;
0x0003eb86 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0003eb88 adds r0, r3, r2 | r0 = r3 + r2;
0x0003eb8a cmp r0, r1 |
| if (r0 >= r1) {
0x0003eb8c bhs 0x3eba8 | goto label_16;
| }
| if (r2 != 0) {
0x0003eb8e cbnz r2, 0x3ebee | goto label_17;
| }
| label_2:
0x0003eb90 ldrb r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x0003eb92 cbz r3, 0x3ebb6 | goto label_4;
| }
| label_1:
0x0003eb94 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0003eb96 mov r5, r4 | r5 = r4;
0x0003eb98 ldr r6, [sp, 0x30] | r6 = var_30h;
0x0003eb9a b 0x3eb5a | goto label_0;
| label_15:
0x0003eb9c movs r2, 3 | r2 = 3;
0x0003eb9e mov r1, sb | r1 = sb;
0x0003eba0 mov r0, r8 | r0 = r8;
0x0003eba2 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003eba6 b 0x3eb82 |
| } while (1);
| label_16:
0x0003eba8 mov r1, r5 | r1 = r5;
0x0003ebaa mov r0, r8 | r0 = r8;
0x0003ebac bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003ebae ldrsb.w r7, [r6, 0x823] | r7 = *((r6 + 0x823));
0x0003ebb2 cmp r3, 0 |
| if (r3 != 0) {
0x0003ebb4 bne 0x3eb94 | goto label_1;
| }
| label_4:
0x0003ebb6 ldrb.w r3, [sp, 0x3c] | r3 = var_3ch;
0x0003ebba cmp r3, 0 |
| if (r3 != 0) {
0x0003ebbc bne.w 0x3ed44 | goto label_18;
| }
0x0003ebc0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003ebc2 cmp r2, 0 |
| if (r2 == 0) {
0x0003ebc4 beq.w 0x3ed56 | goto label_13;
| }
0x0003ebc8 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0003ebca strb r3, [r2, r1] | *((r2 + r1)) = r3;
0x0003ebcc ldr r3, [sp, 0x34] | r3 = var_34h;
0x0003ebce cbnz r3, 0x3ebfc |
| while (r3 < r3) {
0x0003ebd0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
| label_3:
0x0003ebd2 ldr r2, [pc, 0x2d8] |
0x0003ebd4 ldr r3, [pc, 0x2c8] | r3 = *(0x3eea0);
0x0003ebd6 add r2, pc | r2 = 0x7da88;
0x0003ebd8 ldr r3, [r2, r3] | r3 = *(0x7da88);
0x0003ebda ldr r2, [r3] | r2 = *(0x7da88);
0x0003ebdc ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0003ebde eors r2, r3 | r2 ^= r3;
0x0003ebe0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003ebe4 bne.w 0x3ee98 | goto label_19;
| }
0x0003ebe8 add sp, 0x74 |
0x0003ebea pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x0003ebee str r0, [sp, 0x38] | var_38h = r0;
0x0003ebf0 mov r1, r5 | r1 = r5;
0x0003ebf2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0003ebf4 add r0, r3 | r0 += r3;
0x0003ebf6 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0003ebfa b 0x3eb90 | goto label_2;
0x0003ebfc ldrb.w r3, [sp, 0x3d] | r3 = var_3dh;
0x0003ec00 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x0003ec02 bmi 0x3ebd0 |
| }
0x0003ec04 add r0, sp, 0x28 | r0 += var_28h;
0x0003ec06 bl 0x39478 | fcn_00039478 (r0);
0x0003ec0a b 0x3ebd2 | goto label_3;
| label_12:
0x0003ec0c ldrsh.w r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0003ec10 mov r8, r0 | r8 = r0;
0x0003ec12 cmp r3, 0 |
| if (r3 == 0) {
0x0003ec14 beq.w 0x3ed5a | goto label_20;
| }
0x0003ec18 ldrb r3, [r1] | r3 = *(r1);
0x0003ec1a cmp r3, 0 |
| if (r3 == 0) {
0x0003ec1c beq.w 0x3ed56 | goto label_13;
| }
0x0003ec20 ldr r3, [pc, 0x28c] |
0x0003ec22 mov sl, r6 | sl = r6;
0x0003ec24 mov sb, r1 | sb = r1;
0x0003ec26 add r7, sp, 0x24 | r7 += var_24h;
0x0003ec28 str r6, [sp, 0xc] | var_ch = r6;
0x0003ec2a add r3, pc | r3 = 0x7dade;
0x0003ec2c str r3, [sp, 0x1c] | var_1ch = r3;
0x0003ec2e ldr r3, [pc, 0x284] |
0x0003ec30 add r3, pc | r3 = 0x7daea;
0x0003ec32 str r3, [sp, 0x14] | var_14h = r3;
0x0003ec34 ldr r3, [pc, 0x280] |
0x0003ec36 add r3, pc | r3 = 0x7daf2;
0x0003ec38 str r3, [sp, 0x18] | var_18h = r3;
0x0003ec3a movs r3, 1 | r3 = 1;
0x0003ec3c str r3, [sp, 0x10] | var_10h = r3;
0x0003ec3e b 0x3ec48 |
| while (r3 != 0x9c) {
0x0003ec40 add r5, r0 | r5 += r0;
0x0003ec42 add sl, r0 | sl += r0;
0x0003ec44 ldrb r4, [r5] | r4 = *(r5);
| if (r4 == 0) {
0x0003ec46 cbz r4, 0x3ec58 | goto label_21;
| }
| label_5:
0x0003ec48 mov r1, r7 | r1 = r7;
0x0003ec4a mov r0, r5 | r0 = r5;
0x0003ec4c bl 0x282c0 | fcn_000282c0 (r0, r1, r2);
0x0003ec50 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0003ec52 mov r4, r0 | r4 = r0;
0x0003ec54 cmp r3, 0x9c |
0x0003ec56 bne 0x3ec40 |
| }
| label_21:
0x0003ec58 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0003ec5a add.w r2, sl, r6 | r2 = sl + r6;
0x0003ec5e add.w r3, sb, sl | r3 = sb + sl;
0x0003ec62 cmp r2, r1 |
| if (r2 >= r1) {
0x0003ec64 bhs.w 0x3eda6 | goto label_22;
| }
0x0003ec68 cmp.w sl, 0 |
| if (sl != 0) {
0x0003ec6c bne.w 0x3ed72 | goto label_23;
| }
| label_6:
0x0003ec70 cmp r4, 0 |
| if (r4 == 0) {
0x0003ec72 beq 0x3ebb6 | goto label_4;
| }
0x0003ec74 ldrb r2, [r3] | r2 = *(r3);
0x0003ec76 adds r5, r3, r4 | r5 = r3 + r4;
0x0003ec78 cmp r2, 0x3f |
| if (r2 != 0x3f) {
0x0003ec7a bne.w 0x3ed8e | goto label_24;
| }
0x0003ec7e cmp r4, 1 |
| if (r4 > 1) {
0x0003ec80 bgt.w 0x3edda | goto label_25;
| }
0x0003ec84 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0003ec86 mov r0, r3 | r0 = r3;
0x0003ec88 str r3, [sp, 0x20] | var_20h = r3;
| label_9:
0x0003ec8a adds r3, r0, 1 | r3 = r0 + 1;
0x0003ec8c str r3, [sp, 0x10] | var_10h = r3;
| label_8:
0x0003ec8e add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x0003ec92 ldr.w r1, [r8, 0x64] | r1 = *((r8 + 0x64));
0x0003ec94 asrs r4, r4, 1 | r4 >>= 1;
0x0003ec96 lsls r3, r0, 3 | r3 = r0 << 3;
0x0003ec98 subs r3, 0x28 | r3 -= 0x28;
0x0003ec9a adds r4, r1, r3 | r4 = r1 + r3;
0x0003ec9c ldrh r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0003ec9e lsls r6, r2, 0x1f | r6 = r2 << 0x1f;
| if (r6 < r2) {
0x0003eca0 bmi.w 0x3edb6 | goto label_26;
| }
0x0003eca4 tst.w r2, 0x24 |
| if ((r2 & 0x24) != 0) {
0x0003eca8 bne.w 0x3edcc | goto label_27;
| }
0x0003ecac ands r6, r2, 8 | r6 = r2 & 8;
| if (r6 != r2) {
0x0003ecb0 bne.w 0x3edf8 | goto label_28;
| }
0x0003ecb4 lsls r0, r2, 0x1e | r0 = r2 << 0x1e;
| if (r0 >= r2) {
0x0003ecb6 bpl.w 0x3ede6 | goto label_29;
| }
0x0003ecba ldrb.w sb, [fp, 0x54] | sb = *(arg_54h);
0x0003ecbe cmp.w sb, 1 |
| if (sb == 1) {
0x0003ecc2 beq.w 0x3ee14 | goto label_30;
| }
0x0003ecc6 add.w sl, sp, 0x40 | sl += var_40h;
0x0003ecca movs r2, 0x28 | r2 = 0x28;
0x0003eccc mov r1, r6 | r1 = r6;
0x0003ecce mov r0, sl | r0 = sl;
0x0003ecd0 blx 0x62ec | fcn_000062ec ();
0x0003ecd4 ldrd r1, r2, [r4, 8] | __asm ("ldrd r1, r2, [r4, 8]");
0x0003ecd8 mov r0, sl | r0 = sl;
0x0003ecda strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x0003ecde str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x0003ece0 add sp, 0x150 |
0x0003ece2 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0003ece4 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x0003ece8 ldrh.w r3, [sp, 0x50] | r3 = var_50h;
0x0003ecec lsls r4, r3, 0x1e | r4 = r3 << 0x1e;
0x0003ecee itt pl |
| if (r4 < r3) {
0x0003ecf0 movpl r3, 1 | r3 = 1;
| }
| if (r4 < r3) {
0x0003ecf2 strbpl r3, [sp, 0x52] | var_52h = r3;
| }
| if (r4 < r3) {
0x0003ecf6 bpl 0x3ed12 |
0x0003ecf8 ldrb.w r3, [sp, 0x52] | r3 = var_52h;
0x0003ecfc cmp r3, 1 |
| if (r3 == 1) {
0x0003ecfe beq 0x3ed12 | goto label_31;
| }
0x0003ed00 movs r1, 1 | r1 = 1;
0x0003ed02 mov r0, sl | r0 = sl;
0x0003ed04 bl 0x3c7a0 | r0 = fcn_0003c7a0 (r0, r1);
0x0003ed08 cmp r0, 7 |
| if (r0 != 7) {
0x0003ed0a bne 0x3ed12 | goto label_31;
| }
0x0003ed0c strb.w r0, [sp, 0x3c] | var_3ch = r0;
0x0003ed10 str r6, [sp, 0x30] | var_30h = r6;
| }
| label_31:
0x0003ed12 ldr r1, [pc, 0x1a8] |
0x0003ed14 add r0, sp, 0x28 | r0 += var_28h;
0x0003ed16 ldrd r3, r2, [sp, 0x48] | __asm ("ldrd r3, r2, [var_48h]");
0x0003ed1a add r1, pc | r1 = 0x7dbdc;
0x0003ed1c bl 0x37e84 | fcn_00037e84 ();
0x0003ed20 ldrh.w r3, [sp, 0x50] | r3 = var_50h;
0x0003ed24 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) != 0) {
0x0003ed28 bne 0x3ed86 | goto label_32;
| }
0x0003ed2a ldr r3, [sp, 0x58] | r3 = var_58h;
| if (r3 != 0) {
0x0003ed2c cbnz r3, 0x3ed86 | goto label_32;
| }
| label_7:
0x0003ed2e ldrb r3, [r5] | r3 = *(r5);
0x0003ed30 cmp r3, 0 |
| if (r3 == 0) {
0x0003ed32 beq.w 0x3ebb6 | goto label_4;
| }
0x0003ed36 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0003ed38 mov sb, r5 | sb = r5;
0x0003ed3a ldr r6, [sp, 0x38] | r6 = var_38h;
0x0003ed3c mov.w sl, 0 | sl = 0;
0x0003ed40 str r3, [sp, 0xc] | var_ch = r3;
0x0003ed42 b 0x3ec48 | goto label_5;
| label_18:
0x0003ed44 ldrb.w r3, [sp, 0x3d] | r3 = var_3dh;
0x0003ed48 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 < r3) {
0x0003ed4a bpl 0x3ed56 |
0x0003ed4c ldr r1, [sp, 0x2c] | r1 = var_2ch;
| if (r1 == 0) {
0x0003ed4e cbz r1, 0x3ed56 | goto label_13;
| }
0x0003ed50 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0003ed52 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
| label_13:
0x0003ed56 movs r0, 0 | r0 = 0;
0x0003ed58 b 0x3ebd2 | goto label_3;
| label_20:
0x0003ed5a mov r2, r1 | r2 = r1;
| if (r1 != 0) {
0x0003ed5c cbz r1, 0x3ed68 |
0x0003ed5e mov r0, r1 | r0 = r1;
0x0003ed60 blx 0x65dc | r0 = strcmp (r0, r1);
0x0003ed64 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
| }
0x0003ed68 mov r1, r5 | r1 = r5;
0x0003ed6a add r0, sp, 0x28 | r0 += var_28h;
0x0003ed6c bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003ed70 b 0x3ebb6 | goto label_4;
| label_23:
0x0003ed72 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0003ed74 mov r1, sb | r1 = sb;
0x0003ed76 str r2, [sp, 0x38] | var_38h = r2;
0x0003ed78 mov r2, sl | r2 = sl;
0x0003ed7a str r3, [sp, 0xc] | var_ch = r3;
0x0003ed7c add r0, r6 | r0 += r6;
0x0003ed7e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0003ed82 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0003ed84 b 0x3ec70 | goto label_6;
| label_32:
0x0003ed86 mov r0, sl | r0 = sl;
0x0003ed88 bl 0x2d36c | fcn_0002d36c (r0);
0x0003ed8c b 0x3ed2e | goto label_7;
| label_24:
0x0003ed8e ldr.w r0, [r8, 0x80] | r0 = *((r8 + 0x80));
0x0003ed92 mov r2, r4 | r2 = r4;
0x0003ed94 mov r1, r3 | r1 = r3;
0x0003ed96 bl 0x26520 | fcn_00026520 (r0, r1, r2);
0x0003ed9a str r0, [sp, 0x20] | var_20h = r0;
| label_10:
0x0003ed9c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0003ed9e cmp r3, r0 |
| if (r3 > r0) {
0x0003eda0 bgt.w 0x3ec8e | goto label_8;
| }
0x0003eda4 b 0x3ec8a | goto label_9;
| label_22:
0x0003eda6 mov r2, sl | r2 = sl;
0x0003eda8 mov r1, sb | r1 = sb;
0x0003edaa add r0, sp, 0x28 | r0 += var_28h;
0x0003edac str r3, [sp, 0xc] | var_ch = r3;
0x0003edae bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003edb2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0003edb4 b 0x3ec70 | goto label_6;
| label_26:
0x0003edb6 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0003edb8 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0003edba adds r2, r3, 4 | r2 = r3 + 4;
0x0003edbc cmp r2, r1 |
| if (r2 < r1) {
0x0003edbe bhs 0x3ee06 |
0x0003edc0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0003edc2 str r2, [sp, 0x38] | var_38h = r2;
0x0003edc4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003edc6 ldr r0, [r1] | r0 = *(r1);
0x0003edc8 str r0, [r2, r3] | *((r2 + r3)) = r0;
0x0003edca b 0x3ed2e | goto label_7;
| label_27:
0x0003edcc ldrd r2, r3, [r4] | __asm ("ldrd r2, r3, [r4]");
0x0003edd0 add r0, sp, 0x28 | r0 += var_28h;
0x0003edd2 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0003edd4 bl 0x37e84 | fcn_00037e84 ();
0x0003edd8 b 0x3ed2e | goto label_7;
| label_25:
0x0003edda adds r0, r3, 1 | r0 = r3 + 1;
0x0003eddc add r1, sp, 0x20 | r1 += var_20h;
0x0003edde bl 0x25160 | fcn_00025160 (r0, r1);
0x0003ede2 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0003ede4 b 0x3ed9c | goto label_10;
| label_29:
0x0003ede6 lsls r0, r2, 0x15 | r0 = r2 << 0x15;
| if (r0 >= r2) {
0x0003ede8 bpl 0x3ee24 | goto label_33;
| }
0x0003edea ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x0003edec add r0, sp, 0x28 | r0 += var_28h;
0x0003edee ldr r1, [pc, 0xd0] |
0x0003edf0 add r1, pc | r1 = 0x7dcb6;
0x0003edf2 bl 0x37e84 | fcn_00037e84 ();
0x0003edf6 b 0x3ed2e | goto label_7;
| label_28:
0x0003edf8 ldrd r2, r3, [r4] | __asm ("ldrd r2, r3, [r4]");
0x0003edfc add r0, sp, 0x28 | r0 += var_28h;
0x0003edfe ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0003ee00 bl 0x37e84 | fcn_00037e84 ();
0x0003ee04 b 0x3ed2e | goto label_7;
| }
0x0003ee06 ldr r1, [pc, 0xbc] |
0x0003ee08 movs r2, 4 | r2 = 4;
0x0003ee0a add r0, sp, 0x28 | r0 += var_28h;
0x0003ee0c add r1, pc | r1 = 0x7dcd6;
0x0003ee0e bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003ee12 b 0x3ed2e | goto label_7;
| label_30:
0x0003ee14 ldr r1, [pc, 0xb0] |
0x0003ee16 add r0, sp, 0x28 | r0 += var_28h;
0x0003ee18 ldrd r3, r2, [r4, 8] | __asm ("ldrd r3, r2, [r4, 8]");
0x0003ee1c add r1, pc | r1 = 0x7dce8;
0x0003ee1e bl 0x37e84 | fcn_00037e84 ();
0x0003ee22 b 0x3ed2e | goto label_7;
| label_33:
0x0003ee24 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0003ee26 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0003ee28 adds r2, r3, 2 | r2 = r3 + 2;
0x0003ee2a cmp r2, r1 |
| if (r2 >= r1) {
0x0003ee2c bhs 0x3ee7c | goto label_34;
| }
0x0003ee2e str r2, [sp, 0x38] | var_38h = r2;
0x0003ee30 ldr r2, [pc, 0x98] |
0x0003ee32 add r2, pc | r2 = 0x7dd02;
0x0003ee34 ldrh r1, [r2] | r1 = *(r2);
0x0003ee36 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003ee38 strh r1, [r2, r3] | *((r2 + r3)) = r1;
| label_11:
0x0003ee3a ldr.w sb, [r4, 0xc] | sb = *((r4 + 0xc));
0x0003ee3e cmp.w sb, 0 |
| if (sb <= 0) {
0x0003ee42 ble 0x3ee68 | goto label_35;
| }
0x0003ee44 ldr.w sl, [pc, 0x88] |
0x0003ee48 add r3, sp, 0x28 | r3 += var_28h;
0x0003ee4a str r5, [sp, 0xc] | var_ch = r5;
0x0003ee4c movs r6, 0 | r6 = 0;
0x0003ee4e mov r5, r4 | r5 = r4;
0x0003ee50 mov r4, r3 | r4 = r3;
0x0003ee52 add sl, pc | sl = 0x7dd26;
| do {
0x0003ee54 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0003ee56 mov r1, sl | r1 = sl;
0x0003ee58 mov r0, r4 | r0 = r4;
0x0003ee5a ldrb r2, [r2, r6] | r2 = *((r2 + r6));
0x0003ee5c adds r6, 1 | r6++;
0x0003ee5e bl 0x37e84 | fcn_00037e84 ();
0x0003ee62 cmp sb, r6 |
0x0003ee64 bne 0x3ee54 |
| } while (sb != r6);
0x0003ee66 ldr r5, [sp, 0xc] | r5 = var_ch;
| label_35:
0x0003ee68 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0003ee6a ldr r1, [sp, 0x30] | r1 = var_30h;
0x0003ee6c adds r2, r3, 1 | r2 = r3 + 1;
0x0003ee6e cmp r2, r1 |
| if (r2 < r1) {
0x0003ee70 bhs 0x3ee8a |
0x0003ee72 str r2, [sp, 0x38] | var_38h = r2;
0x0003ee74 movs r1, 0x27 | r1 = 0x27;
0x0003ee76 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003ee78 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x0003ee7a b 0x3ed2e | goto label_7;
| label_34:
0x0003ee7c ldr r1, [pc, 0x54] |
0x0003ee7e movs r2, 2 | r2 = 2;
0x0003ee80 add r0, sp, 0x28 | r0 += var_28h;
0x0003ee82 add r1, pc | r1 = 0x7dd5a;
0x0003ee84 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003ee88 b 0x3ee3a | goto label_11;
| }
0x0003ee8a ldr r1, [pc, 0x4c] |
0x0003ee8c movs r2, 1 | r2 = 1;
0x0003ee8e add r0, sp, 0x28 | r0 += var_28h;
0x0003ee90 add r1, pc | r1 = 0x7dd6e;
0x0003ee92 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x0003ee96 b 0x3ed2e | goto label_7;
| label_19:
0x0003ee98 blx 0x6430 | r0 = fcn_00006430 ();
0x0003ee9c uxth r6, r0 | r6 = (int16_t) r0;
0x0003ee9e movs r2, r1 | r2 = r1;
0x0003eea0 lsls r4, r6, 8 | r4 = r6 << 8;
0x0003eea2 movs r0, r0 |
0x0003eea4 adds r2, r7, r4 | r2 = r7 + r4;
0x0003eea6 movs r1, r1 |
0x0003eea8 adds r0, r7, r4 | r0 = r7 + r4;
0x0003eeaa movs r1, r1 |
| if (r2 == 0) {
0x0003eeac cbz r2, 0x3eee0 | void (*0x3eee0)() ();
| }
0x0003eeae movs r2, r1 | r2 = r1;
0x0003eeb0 adds r6, r0, r1 | r6 = r0 + r1;
0x0003eeb2 movs r1, r1 |
| if (r0 != 0) {
0x0003eeb4 cbz r0, 0x3ef24 |
0x0003eeb6 movs r0, r1 | r0 = r1;
0x0003eeb8 ldr r0, [sp, 0x228] | r0 = *(arg_228h);
0x0003eeba movs r0, r1 | r0 = r1;
0x0003eebc asrs r2, r1, 0x1e | r2 = r1 >> 0x1e;
0x0003eebe movs r1, r1 |
0x0003eec0 asrs r4, r4, 0x1a | r4 >>= 0x1a;
0x0003eec2 movs r1, r1 |
0x0003eec4 str r6, [sp, 0x2d0] | *(arg_2d0h) = r6;
0x0003eec6 movs r0, r1 | r0 = r1;
0x0003eec8 asrs r0, r1, 0x1a | r0 = r1 >> 0x1a;
0x0003eeca movs r1, r1 |
0x0003eecc str r0, [sp, 0x58] | var_58h = r0;
0x0003eece movs r1, r1 |
0x0003eed0 strh r6, [r0, 0x3c] | *((r0 + 0x3c)) = r6;
0x0003eed2 movs r0, r1 | r0 = r1;
0x0003eed4 ldrh r6, [r0, 0x3e] | r6 = *((r0 + 0x3e));
0x0003eed6 movs r1, r1 |
0x0003eed8 ldrh r0, [r6] | r0 = *(r6);
0x0003eeda movs r0, r1 | r0 = r1;
| }
0x0003ef24 add r7, sp, 8 | r7 += var_8h;
0x0003ef26 mov r5, r2 | r5 = r2;
0x0003ef28 ldr r3, [pc, 0x8c] |
0x0003ef2a movs r2, 0x28 | r2 = 0x28;
0x0003ef2c add r1, pc | r1 += pc;
0x0003ef2e mov r4, r0 | r4 = r0;
0x0003ef30 mov r0, r7 | r0 = r7;
0x0003ef32 ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x0003ef34 movs r1, 0 | r1 = 0;
0x0003ef36 ldr r3, [r3] | r3 = *(0x3efb8);
0x0003ef38 str r3, [sp, 0x34] | var_34h = r3;
0x0003ef3a mov.w r3, 0 | r3 = 0;
0x0003ef3e blx 0x62ec | fcn_000062ec ();
0x0003ef42 movs r3, 0 | r3 = 0;
0x0003ef44 mov r1, r6 | r1 = r6;
0x0003ef46 str r3, [sp, 4] | var_4h = r3;
0x0003ef48 movs r3, 2 | r3 = 2;
0x0003ef4a str r3, [sp] | *(sp) = r3;
0x0003ef4c mov r2, r5 | r2 = r5;
0x0003ef4e asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x0003ef50 mov r0, r7 | r0 = r7;
0x0003ef52 str r4, [sp, 0x1c] | var_1ch = r4;
0x0003ef54 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x0003ef58 ldrh.w r3, [sp, 0x18] | r3 = var_18h;
0x0003ef5c lsls r3, r3, 0x1e | r3 <<= 0x1e;
0x0003ef5e itt pl |
| if (r3 < r3) {
0x0003ef60 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0003ef62 strbpl r3, [sp, 0x1a] | var_1ah = r3;
| }
| if (r3 < r3) {
0x0003ef66 bpl 0x3ef78 |
0x0003ef68 ldrb.w r3, [sp, 0x1a] | r3 = var_1ah;
0x0003ef6c cmp r3, 1 |
| if (r3 == 1) {
0x0003ef6e beq 0x3ef78 | goto label_36;
| }
0x0003ef70 movs r1, 1 | r1 = 1;
0x0003ef72 mov r0, r7 | r0 = r7;
0x0003ef74 bl 0x3c7a0 | fcn_0003c7a0 (r0, r1);
| }
| label_36:
0x0003ef78 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
| if (r3 != 0) {
0x0003ef7c cbnz r3, 0x3ef98 | goto label_37;
| }
0x0003ef7e ldr r0, [sp, 0x10] | r0 = var_10h;
| do {
0x0003ef80 ldr r2, [pc, 0x38] |
0x0003ef82 ldr r3, [pc, 0x34] | r3 = *(0x3efba);
0x0003ef84 add r2, pc | r2 = 0x7df44;
0x0003ef86 ldr r3, [r2, r3] | r3 = *(0x7df44);
0x0003ef88 ldr r2, [r3] | r2 = *(0x7df44);
0x0003ef8a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0003ef8c eors r2, r3 | r2 ^= r3;
0x0003ef8e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003ef92 bne 0x3efb0 | goto label_38;
| }
0x0003ef94 add sp, 0x3c |
0x0003ef96 pop {r4, r5, r6, r7, pc} |
| label_37:
0x0003ef98 ldrh.w r3, [sp, 0x18] | r3 = var_18h;
0x0003ef9c tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x0003efa0 bne 0x3efa6 |
0x0003efa2 ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 == 0) {
0x0003efa4 cbz r3, 0x3efac | goto label_39;
| }
| }
0x0003efa6 mov r0, r7 | r0 = r7;
0x0003efa8 bl 0x2d36c | fcn_0002d36c (r0);
| label_39:
0x0003efac movs r0, 0 | r0 = 0;
0x0003efae b 0x3ef80 |
| } while (1);
| label_38:
0x0003efb0 blx 0x6430 | fcn_00006430 ();
0x0003efb4 add r6, sp, 0x1b0 | r6 += arg_1b0h;
0x0003efb6 movs r2, r1 | r2 = r1;
0x0003efb8 lsls r4, r6, 8 | r4 = r6 << 8;
0x0003efba movs r0, r0 |
0x0003efbc add r6, sp, 0x50 | r6 += var_50h;
0x0003efbe movs r2, r1 | r2 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x3f48c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0003f48c () | void fcn_0003f48c (int16_t arg_188h, int16_t arg_3c8h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int32_t var_0h_2;
| int32_t var_0h_3;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0003f48c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0003f490 mov r5, r1 | r5 = r1;
0x0003f492 ldrd r1, r2, [r1, 0x28] | __asm ("ldrd r1, r2, [r1, 0x28]");
0x0003f496 sub sp, 0x3c |
0x0003f498 mov r4, r0 | r4 = r0;
0x0003f49a ldr r0, [pc, 0x354] |
0x0003f49c mov r6, r1 | r6 = r1;
0x0003f49e str r1, [sp, 0x14] | var_14h = r1;
0x0003f4a0 ldr r1, [pc, 0x350] | r1 = *(0x3f7f4);
0x0003f4a2 add.w fp, r2, r6 |
0x0003f4a6 add r0, pc | r0 = 0x7ec9c;
0x0003f4a8 ldr.w r3, [r5, 0xe0] | r3 = *((r5 + 0xe0));
0x0003f4ac ldrsh.w r2, [r5, 0xcc] | r2 = *((r5 + 0xcc));
0x0003f4b0 cmp.w fp, 0 |
0x0003f4b4 ldr r1, [r0, r1] |
0x0003f4b6 ldr r1, [r1] | r1 = *(0x7ec9c);
0x0003f4b8 str r1, [sp, 0x34] | var_34h = r1;
0x0003f4ba mov.w r1, 0 | r1 = 0;
0x0003f4be str.w r3, [r4, 0x80] | __asm ("str.w r3, [r4, 0x80]");
0x0003f4c2 mov.w r3, 0 | r3 = 0;
0x0003f4c6 str r2, [sp, 0x10] | var_10h = r2;
0x0003f4c8 str.w r3, [r5, 0xe0] | __asm ("str.w r3, [r5, 0xe0]");
0x0003f4cc ldr r3, [r4] | r3 = *(r4);
0x0003f4ce str r3, [sp, 0xc] | var_ch = r3;
0x0003f4d0 ldr r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x0003f4d2 str r3, [sp, 0x30] | var_30h = r3;
0x0003f4d4 clz r3, r6 | r3 &= r6;
0x0003f4d8 lsr.w r3, r3, 5 | r3 >>= 5;
0x0003f4dc it le |
| if (fp > 0) {
0x0003f4de movle r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0003f4e0 cbz r3, 0x3f4e6 |
0x0003f4e2 add.w fp, fp, 1 |
| }
0x0003f4e6 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0003f4e8 add r1, sp, 0x30 | r1 += var_30h;
0x0003f4ea ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0003f4ec mov r0, r4 | r0 = r4;
0x0003f4ee ldr r7, [r5, 0x30] | r7 = *((r5 + 0x30));
0x0003f4f0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0003f4f4 lsls r3, r3, 3 | r3 <<= 3;
0x0003f4f6 subs r7, r7, r3 | r7 -= r3;
0x0003f4f8 adds r3, r2, r3 | r3 = r2 + r3;
0x0003f4fa str r3, [sp, 8] | var_8h = r3;
0x0003f4fc asr.w r8, r7, 0x1f | r8 = r7 >> 0x1f;
0x0003f500 bic r7, r7, 7 | r7 = BIT_MASK (r7, 7);
0x0003f504 bl 0x2d578 | fcn_0002d578 (r0, r1, r2);
0x0003f506 ldrh r7, [r8, -0x29]! | r7 = *((r8 -= 0x29));
0x0003f50a mov r3, r7 | r3 = r7;
0x0003f50c mov r2, r8 | r2 = r8;
| if (r1 != 0) {
0x0003f50e cbz r1, 0x3f518 |
0x0003f510 ldrb r1, [r5, 0x15] | r1 = *((r5 + 0x15));
0x0003f512 subs r1, 0 |
0x0003f514 it ne |
| if (r1 != 0) {
0x0003f516 movne r1, 1 | r1 = 1;
| goto label_12;
| }
| }
| label_12:
0x0003f518 ldrb.w r0, [r4, 0x96] | r0 = *((r4 + 0x96));
0x0003f51c bfi r0, r1, 5, 1 | value_0 = BIT_MASK (5, 1);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r0 &= value_0;
| r0 |= value_1;
0x0003f520 strb.w r0, [r4, 0x96] | *((r4 + 0x96)) = r0;
0x0003f524 ldrb.w r1, [r5, 0xcf] | r1 = *((r5 + 0xcf));
0x0003f528 cmp r1, 0 |
| if (r1 == 0) {
0x0003f52a beq 0x3f5a4 | goto label_13;
| }
0x0003f52c cmp.w fp, 0xa |
0x0003f530 uxtb r0, r0 | r0 = (int8_t) r0;
0x0003f532 it lt |
| if (fp >= 0xa) {
0x0003f534 movlt fp, 0xa |
| }
0x0003f538 strd r3, r2, [sp, 0x18] | __asm ("strd r3, r2, [var_1ch]");
0x0003f53c cmp r1, 2 |
0x0003f53e bfi r0, r1, 2, 2 | value_2 = BIT_MASK (2, 2);
| value_3 = r1 & value_2;
| value_2 = ~value_2;
| r0 &= value_2;
| r0 |= value_3;
0x0003f542 strb.w r0, [r4, 0x96] | *((r4 + 0x96)) = r0;
| if (r1 == 2) {
0x0003f546 beq.w 0x3f77e | goto label_14;
| }
0x0003f54a mov.w sb, 8 | sb = 8;
0x0003f54e mov r0, r4 | r0 = r4;
0x0003f550 mov r1, sb | r1 = sb;
0x0003f552 movs r5, 0 | r5 = 0;
0x0003f554 bl 0x38214 | fcn_00038214 (r0, r1);
0x0003f558 ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_1ch]");
| label_5:
0x0003f55c ldr.w sl, [pc, 0x298] |
0x0003f560 movs r6, 0 | r6 = 0;
0x0003f562 strd fp, r7, [sp, 0x18] | __asm ("strd fp, r7, [var_1ch]");
0x0003f566 mov r7, r3 | r7 = r3;
0x0003f568 mov fp, r2 |
0x0003f56a add sl, pc |
0x0003f56c add.w sl, sl, 0x7c0 | sl = 0x7f526;
| do {
0x0003f570 ldr r3, [r4] | r3 = *(r4);
0x0003f572 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0003f576 cbnz r3, 0x3f592 |
0x0003f578 str r3, [sp, 4] | var_4h = r3;
0x0003f57a movs r3, 1 | r3 = 1;
0x0003f57c str r3, [sp] | *(sp) = r3;
0x0003f57e mov.w r2, -1 | r2 = -1;
0x0003f582 ldr r0, [r4, 0x74] | r0 = *((r4 + 0x74));
0x0003f584 mov.w r3, -1 | r3 = -1;
0x0003f588 ldr.w r1, [sl, r5, lsl 2] | offset_4 = r5 << 2;
| r1 = *((sl + offset_4));
0x0003f58c add r0, r6 | r0 += r6;
0x0003f58e bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
| }
0x0003f592 adds r5, 1 | r5++;
0x0003f594 adds r6, 0x28 | r6 += 0x28;
0x0003f596 cmp r5, sb |
0x0003f598 blt 0x3f570 |
| } while (r5 < sb);
0x0003f59a mov r3, r7 | r3 = r7;
0x0003f59c mov r2, fp | r2 = fp;
0x0003f59e ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0003f5a0 ldr.w fp, [sp, 0x18] | fp = var_18h;
| label_13:
0x0003f5a4 add.w r5, fp, fp, lsl 2 | r5 = fp + (fp << 2);
0x0003f5a8 ldrb.w r1, [r4, 0x96] | r1 = *((r4 + 0x96));
0x0003f5ac movs r0, 0 | r0 = 0;
0x0003f5ae lsls r5, r5, 3 | r5 <<= 3;
0x0003f5b0 bfc r1, 0, 2 | value_5 = BIT_MASK (2, );
| value_5 = ~value_5;
| r1 &= value_5;
0x0003f5b4 adds r5, 7 | r5 += 7;
0x0003f5b6 strb.w r1, [r4, 0x96] | *((r4 + 0x96)) = r1;
0x0003f5b8 asrs r6, r2, 2 | r6 = r2 >> 2;
0x0003f5ba bic r5, r5, 7 | r5 = BIT_MASK (r5, 7);
0x0003f5be adc sb, r0, 0 | __asm ("adc sb, r0, 0");
0x0003f5c2 cmp r7, r5 |
0x0003f5c4 str r5, [sp, 0x20] | var_20h = r5;
0x0003f5c6 sbcs.w r1, r8, sb | __asm ("sbcs.w r1, r8, sb");
| if (r7 < r5) {
0x0003f5ca blt.w 0x3f778 | goto label_15;
| }
0x0003f5ce ldr r1, [sp, 8] | r1 = var_8h;
0x0003f5d0 subs r7, r7, r5 | r7 -= r5;
0x0003f5d2 mov r6, r0 | r6 = r0;
0x0003f5d4 sbc.w r8, r8, sb | __asm ("sbc.w r8, r8, sb");
0x0003f5d8 mov r2, r8 | r2 = r8;
0x0003f5da mov r3, r7 | r3 = r7;
0x0003f5dc adds r0, r1, r7 | r0 = r1 + r7;
0x0003f5de mov r8, r6 | r8 = r6;
| label_4:
0x0003f5e0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0003f5e2 str r0, [r4, 0x58] | *((r4 + 0x58)) = r0;
0x0003f5e4 add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x0003f5e8 lsls r7, r1, 3 | r7 = r1 << 3;
0x0003f5ea cmp r3, r7 |
0x0003f5ec str r7, [sp, 0x2c] | var_2ch = r7;
0x0003f5ee sbcs r1, r2, 0 | __asm ("sbcs r1, r2, 0");
0x0003f5f2 str r7, [sp, 0x1c] | var_1ch = r7;
| if (r3 < r7) {
0x0003f5f4 blt.w 0x3f76a | goto label_16;
| }
0x0003f5f8 ldr r1, [sp, 8] | r1 = var_8h;
0x0003f5fa subs r3, r3, r7 | r3 -= r7;
0x0003f5fc sbc r2, r2, 0 | __asm ("sbc r2, r2, 0");
0x0003f600 add.w ip, r1, r3 |
| label_3:
0x0003f604 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0003f606 str.w ip, [r4, 0x64] | __asm ("str.w ip, [r4, 0x64]");
0x0003f60a lsls r1, r1, 2 | r1 <<= 2;
0x0003f60c adds r1, 7 | r1 += 7;
0x0003f60e bic sl, r1, 7 | sl = BIT_MASK (r1, 7);
0x0003f612 mov.w r1, 0 | r1 = 0;
0x0003f616 adc r7, r1, 0 | __asm ("adc r7, r1, 0");
0x0003f61a cmp r3, sl |
0x0003f61c mov r5, r7 | r5 = r7;
0x0003f61e str r7, [sp, 0x24] | var_24h = r7;
0x0003f620 sbcs.w r7, r2, r7 | __asm ("sbcs.w r7, r2, r7");
0x0003f622 lsls r7, r0, 0x1c | r7 = r0 << 0x1c;
| if (r7 < r0) {
0x0003f624 blt.w 0x3f75e | goto label_17;
| }
0x0003f628 ldr r1, [sp, 8] | r1 = var_8h;
0x0003f62a subs.w r3, r3, sl | r3 -= sl;
0x0003f62e sbc.w r2, r2, r5 | __asm ("sbc.w r2, r2, r5");
0x0003f630 lsls r5, r0, 8 | r5 = r0 << 8;
0x0003f632 add r1, r3 | r1 += r3;
| label_2:
0x0003f634 str r1, [r4, 0x5c] | *((r4 + 0x5c)) = r1;
0x0003f636 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0003f638 lsls r1, r1, 2 | r1 <<= 2;
0x0003f63a mov r7, r1 | r7 = r1;
0x0003f63c str r1, [sp, 0x18] | var_18h = r1;
0x0003f63e adds r7, 7 | r7 += 7;
0x0003f640 mov.w r1, 0 | r1 = 0;
0x0003f644 bic r7, r7, 7 | r7 = BIT_MASK (r7, 7);
0x0003f648 adc r5, r1, 0 | __asm ("adc r5, r1, 0");
0x0003f64c cmp r3, r7 |
0x0003f64e str r5, [sp, 0x28] | var_28h = r5;
0x0003f650 sbcs r2, r5 | __asm ("sbcs r2, r5");
| if (r3 < r7) {
0x0003f652 blt 0x3f752 | goto label_18;
| }
0x0003f654 ldr r2, [sp, 8] | r2 = var_8h;
0x0003f656 subs r3, r3, r7 | r3 -= r7;
0x0003f658 add r2, r3 | r2 += r3;
0x0003f65a mov r3, r2 | r3 = r2;
| label_1:
0x0003f65c orrs.w r2, r6, r8 | r2 = r6 | r8;
0x0003f660 str r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
| if (r2 != r6) {
0x0003f662 bne 0x3f6c2 | goto label_19;
| }
0x0003f664 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0003f666 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0003f66a cmp r2, 0 |
| if (r2 == 0) {
0x0003f66c beq 0x3f702 | goto label_20;
| }
| do {
0x0003f66e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0003f672 add.w r3, r4, 0x14 | r3 = r4 + 0x14;
0x0003f676 movs r2, 0 | r2 = 0;
0x0003f678 strh r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0003f67a vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| label_0:
0x0003f67e movs r2, 0 | r2 = 0;
0x0003f680 movs r3, 1 | r3 = 1;
0x0003f682 str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x0003f684 movw r1, 0xff02 | r1 = 0xff02;
0x0003f688 ldr r2, [pc, 0x170] |
0x0003f68a strb.w r3, [r4, 0x95] | *((r4 + 0x95)) = r3;
0x0003f68e str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0003f690 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0003f694 add r2, pc | r2 = 0x7ee94;
0x0003f696 ldr r3, [pc, 0x15c] | r3 = *(0x3f7f6);
0x0003f698 vmov.i64 d17, 0xffffffff | __asm ("vmov.i64 d17, 0xffffffff");
0x0003f69c vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x0003f6a0 strh.w r1, [r4, 0x92] | *((r4 + 0x92)) = r1;
0x0003f6a4 vstr d17, [r4, 0x20] | __asm ("vstr d17, [r4, 0x20]");
0x0003f6a8 vstr d16, [r4, 0x40] | __asm ("vstr d16, [r4, 0x40]");
0x0003f6ac ldr r3, [r2, r3] | r3 = *(0x7ee94);
0x0003f6ae ldr r2, [r3] | r2 = *(0x7ee94);
0x0003f6b0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0003f6b2 eors r2, r3 | r2 ^= r3;
0x0003f6b4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0003f6b8 bne.w 0x3f7ea | goto label_21;
| }
0x0003f6bc add sp, 0x3c |
0x0003f6be pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x0003f6c2 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0003f6c4 mov r3, r8 | r3 = r8;
0x0003f6c6 mov r2, r6 | r2 = r6;
0x0003f6c8 mov r0, r5 | r0 = r5;
0x0003f6ca bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0003f6ce str.w r0, [r4, 0xc8] | __asm ("str.w r0, [r4, 0xc8]");
0x0003f6d2 mov r1, r0 | r1 = r0;
0x0003f6d4 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x0003f6d8 cmp r3, 0 |
0x0003f6da bne 0x3f66e |
| } while (r3 != 0);
0x0003f6dc ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x0003f6de cmp r0, 0 |
| if (r0 == 0) {
0x0003f6e0 beq 0x3f792 | goto label_22;
| }
| label_6:
0x0003f6e2 ldr.w ip, [r4, 0x64] | ip = *((r4 + 0x64));
0x0003f6e6 str r0, [r4, 0x58] | *((r4 + 0x58)) = r0;
0x0003f6e8 cmp.w ip, 0 |
| if (ip == 0) {
0x0003f6ec beq 0x3f7d2 | goto label_23;
| }
| label_9:
0x0003f6ee ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
0x0003f6f0 str.w ip, [r4, 0x64] | __asm ("str.w ip, [r4, 0x64]");
0x0003f6f4 cmp r3, 0 |
| if (r3 == 0) {
0x0003f6f6 beq 0x3f7ba | goto label_24;
| }
| label_8:
0x0003f6f8 str r3, [r4, 0x5c] | *((r4 + 0x5c)) = r3;
0x0003f6fa ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0003f6fc cmp r3, 0 |
| if (r3 == 0) {
0x0003f6fe beq 0x3f7aa | goto label_25;
| }
| label_7:
0x0003f700 str r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
| label_20:
0x0003f702 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0003f704 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0003f706 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0003f708 cmp r2, 0 |
0x0003f70a strh r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
| if (r2 <= 0) {
0x0003f70c ble 0x3f728 | goto label_26;
| }
0x0003f70e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0003f710 movs r5, 1 | r5 = 1;
0x0003f712 ldr r6, [sp, 0xc] | r6 = var_ch;
0x0003f714 movs r1, 0 | r1 = 0;
0x0003f716 add r2, ip | r2 += ip;
| do {
0x0003f718 strh.w r5, [ip, 0x10] | *((ip + 0x10)) = r5;
0x0003f71c strd r6, r1, [ip, 0x14] | __asm ("strd r6, r1, [ip, 0x14]");
0x0003f720 add.w ip, ip, 0x28 |
0x0003f724 cmp r2, ip |
0x0003f726 bne 0x3f718 |
| } while (r2 != ip);
| label_26:
0x0003f728 cmp.w fp, 0 |
0x0003f72c str.w fp, [r4, 0x14] | __asm ("str.w fp, [r4, 0x14]");
| if (fp <= 0) {
0x0003f730 ble 0x3f746 | goto label_27;
| }
0x0003f732 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0003f734 movs r2, 0 | r2 = 0;
| do {
0x0003f736 subs.w fp, fp, 1 |
0x0003f73a strh r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x0003f73c strd r1, r2, [r0, 0x14] | __asm ("strd r1, r2, [r0, 0x14]");
0x0003f740 add.w r0, r0, 0x28 | r0 += 0x28;
0x0003f744 bne 0x3f736 |
| } while (fp != fp);
| label_27:
0x0003f746 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0003f748 movs r1, 0 | r1 = 0;
0x0003f74a mov r0, r3 | r0 = r3;
0x0003f74c blx 0x62ec | fcn_000062ec ();
0x0003f750 b 0x3f67e | goto label_0;
| label_18:
0x0003f752 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0003f754 adds r6, r6, r7 | r6 += r7;
0x0003f756 mov r3, r1 | r3 = r1;
0x0003f758 adc.w r8, r8, r2 | __asm ("adc.w r8, r8, r2");
0x0003f75c b 0x3f65c | goto label_1;
| label_17:
0x0003f75e ldr r5, [sp, 0x24] | r5 = var_24h;
0x0003f760 adds.w r6, sl, r6 | r6 = sl + r6;
0x0003f764 adc.w r8, r8, r5 | __asm ("adc.w r8, r8, r5");
0x0003f768 b 0x3f634 | goto label_2;
| label_16:
0x0003f76a ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0003f76c mov.w ip, 0 |
0x0003f770 adds r6, r1, r6 | r6 = r1 + r6;
0x0003f772 adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x0003f776 b 0x3f604 | goto label_3;
| label_15:
0x0003f778 ldr r6, [sp, 0x20] | r6 = var_20h;
0x0003f77a mov r8, sb | r8 = sb;
0x0003f77c b 0x3f5e0 | goto label_4;
| label_14:
0x0003f77e movs r1, 4 | r1 = 4;
0x0003f780 mov r0, r4 | r0 = r4;
0x0003f782 bl 0x38214 | fcn_00038214 (r0, r1);
0x0003f786 mov.w sb, 0xc | sb = 0xc;
0x0003f78a ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_1ch]");
0x0003f78e movs r5, 8 | r5 = 8;
0x0003f790 b 0x3f55c | goto label_5;
| label_22:
0x0003f792 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0003f794 cmp r6, r2 |
0x0003f796 sbcs.w r3, r8, sb | __asm ("sbcs.w r3, r8, sb");
| if (r6 < r2) {
0x0003f79a blt 0x3f6e2 | goto label_6;
| }
0x0003f79c subs r5, r6, r2 | r5 = r6 - r2;
0x0003f79e sbc.w sb, r8, sb | __asm ("sbc.w sb, r8, sb");
0x0003f7a2 mov r6, r5 | r6 = r5;
0x0003f7a4 mov r8, sb | r8 = sb;
0x0003f7a6 adds r0, r1, r5 | r0 = r1 + r5;
0x0003f7a8 b 0x3f6e2 | goto label_6;
| label_25:
0x0003f7aa ldr r2, [sp, 0x28] | r2 = var_28h;
0x0003f7ac cmp r6, r7 |
0x0003f7ae sbcs.w r8, r8, r2 | __asm ("sbcs.w r8, r8, r2");
| if (r6 < r7) {
0x0003f7b2 blt 0x3f700 | goto label_7;
| }
0x0003f7b4 subs r6, r6, r7 | r6 -= r7;
0x0003f7b6 adds r3, r1, r6 | r3 = r1 + r6;
0x0003f7b8 b 0x3f700 | goto label_7;
| label_24:
0x0003f7ba ldr r5, [sp, 0x24] | r5 = var_24h;
0x0003f7bc cmp r6, sl |
0x0003f7be sbcs.w r2, r8, r5 | __asm ("sbcs.w r2, r8, r5");
| if (r6 < sl) {
0x0003f7c2 blt 0x3f6f8 | goto label_8;
| }
0x0003f7c4 subs.w r6, r6, sl | r6 -= sl;
0x0003f7c8 sbc.w r3, r8, r5 | __asm ("sbc.w r3, r8, r5");
0x0003f7cc mov r8, r3 | r8 = r3;
0x0003f7ce adds r3, r1, r6 | r3 = r1 + r6;
0x0003f7d0 b 0x3f6f8 | goto label_8;
| label_23:
0x0003f7d2 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0003f7d4 cmp r6, r2 |
0x0003f7d6 sbcs r3, r8, 0 | __asm ("sbcs r3, r8, 0");
| if (r6 < r2) {
0x0003f7da blt 0x3f6ee | goto label_9;
| }
0x0003f7dc subs r3, r6, r2 | r3 = r6 - r2;
0x0003f7de mov r6, r3 | r6 = r3;
0x0003f7e0 sbc r8, r8, 0 | __asm ("sbc r8, r8, 0");
0x0003f7e4 add.w ip, r1, r3 |
0x0003f7e8 b 0x3f6ee | goto label_9;
| label_21:
0x0003f7ea blx 0x6430 | fcn_00006430 ();
0x0003f7ee nop |
0x0003f7f0 add r0, sp, 0x3c8 | r0 += arg_3c8h;
0x0003f7f2 movs r2, r1 | r2 = r1;
0x0003f7f4 lsls r4, r6, 8 | r4 = r6 << 8;
0x0003f7f6 movs r0, r0 |
0x0003f7f8 str r2, [sp, 0x188] | *(arg_188h) = r2;
0x0003f7fa movs r2, r1 | r2 = r1;
0x0003f7fc adr r7, 0x10 | r7 = 0x10;
0x0003f7fe movs r2, r1 | r2 = r1;
0x0003f800 push {r4, r5, r6, r7, lr} |
0x0003f802 mov r5, r2 | r5 = r2;
0x0003f804 ldr r6, [r2] | r6 = *(r2);
0x0003f806 sub sp, 0xc |
0x0003f808 mov r4, r0 | r4 = r0;
0x0003f80a ldr r3, [pc, 0xa8] |
0x0003f80c ldrh r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0003f80e add r3, pc | r3 = 0x7f0c8;
0x0003f810 and r2, r2, 0x3f | r2 &= 0x3f;
0x0003f814 add r3, r2 | r3 += r2;
0x0003f816 ldrb.w r7, [r3, 0x258] | r7 = *((r3 + 0x258));
0x0003f81a cmp r7, 4 |
0x0003f81c beq 0x3f840 |
| while (r0 <= 1) {
0x0003f81e ldr r1, [pc, 0x98] |
0x0003f820 movs r5, 1 | r5 = 1;
0x0003f822 mov.w r0, 7 | r0 = 7;
0x0003f826 movs r0, r0 |
0x0003f828 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x0003f82a mov.w r2, -1 | r2 = -1;
0x0003f82e add r1, pc | r1 = 0x7f0ec;
0x0003f830 mov.w r3, -1 | r3 = -1;
0x0003f834 strd r5, r6, [sp] | __asm ("strd r5, r6, [sp]");
0x0003f838 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
| label_10:
0x0003f83c add sp, 0xc |
0x0003f83e pop {r4, r5, r6, r7, pc} |
0x0003f840 movs r1, 1 | r1 = 1;
0x0003f842 mov r0, r6 | r0 = r6;
0x0003f844 bl 0x3da8c | r0 = fcn_0003da8c (r0, r1);
0x0003f848 cmp r0, 1 |
0x0003f84a ble 0x3f81e |
| }
0x0003f84c ldr r0, [r5] | r0 = *(r5);
0x0003f84e bl 0x3e27c | r0 = fcn_0003e27c (r0);
| if (r0 == 0) {
0x0003f852 cbz r0, 0x3f87a | goto label_28;
| }
0x0003f854 ldr r1, [r4] | r1 = *(r4);
0x0003f856 ldrh r2, [r0] | r2 = *(r0);
0x0003f858 ldrh r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x0003f85a rev16 r2, r2 | __asm ("rev16 r2, r2");
0x0003f85c uxth r2, r2 | r2 = (int16_t) r2;
0x0003f85e ands r3, r3, 0x9000 | r3 &= 0x9000;
0x0003f862 itt eq |
| if (r3 == r3) {
0x0003f864 strdeq r2, r3, [r1] | __asm ("strdeq r2, r3, [r1]");
| }
| if (r3 != r3) {
0x0003f868 strh r7, [r1, 0x10] | *((r1 + 0x10)) = r7;
| goto label_29;
| }
| if (r3 == r3) {
| label_29:
0x0003f86a beq 0x3f83c | goto label_10;
| }
0x0003f86c movs r3, 0 | r3 = 0;
0x0003f86e mov r0, r1 | r0 = r1;
0x0003f870 add sp, 0xc |
0x0003f872 pop.w {r4, r5, r6, r7, lr} |
0x0003f876 b.w 0x2d2d8 | void (*0x2d2d8)() ();
| label_28:
0x0003f87a ldr r0, [r4] | r0 = *(r4);
0x0003f87c ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0003f87e tst.w r3, 0x9000 |
0x0003f882 itt eq |
| if ((r3 & 0x9000) != 0) {
0x0003f884 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x9000) == 0) {
0x0003f886 strheq r3, [r0, 0x10] | __asm ("strheq r3, [r0, 0x10]");
| }
| if ((r3 & 0x9000) != 0) {
0x0003f888 bne 0x3f8aa | goto label_30;
| }
| label_11:
0x0003f88a ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x0003f88c movs r3, 7 | r3 = 7;
0x0003f88e str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0003f890 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0003f894 cmp r3, 0 |
| if (r3 != 0) {
0x0003f896 bne 0x3f83c | goto label_10;
| }
0x0003f898 ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x0003f89c cmp r3, 0 |
| if (r3 != 0) {
0x0003f89e bne 0x3f83c | goto label_10;
| }
0x0003f8a0 add sp, 0xc |
0x0003f8a2 pop.w {r4, r5, r6, r7, lr} |
0x0003f8a6 b.w 0x38024 | void (*0x38024)() ();
| label_30:
0x0003f8aa bl 0x2d280 | fcn_0002d280 (r0);
0x0003f8ae ldr r0, [r4] | r0 = *(r4);
0x0003f8b0 b 0x3f88a | goto label_11;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x40c94 */
| #include <stdint.h>
|
; (fcn) fcn.00040c94 () | void fcn_00040c94 (int16_t arg1, int16_t arg2) {
| int32_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
0x00040c94 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00040c98 mov r4, r1 | r4 = r1;
0x00040c9a ldrb r7, [r1, 7] | r7 = *((r1 + 7));
0x00040c9c sub sp, 0xc |
0x00040c9e mov r6, r0 | r6 = r0;
0x00040ca0 cmp r7, 1 |
0x00040ca2 mov r1, r7 | r1 = r7;
0x00040ca4 it lo |
| if (r7 >= 1) {
0x00040ca6 movlo r1, 1 | r1 = 1;
| }
0x00040ca8 bl 0x38214 | fcn_00038214 (r0, r1);
| if (r7 == 0) {
0x00040cac cbz r7, 0x40cf8 | goto label_0;
| }
0x00040cae ldr.w r8, [pc, 0x70] |
0x00040cb2 mov.w sb, 1 | sb = 1;
0x00040cb6 ldrb r3, [r4, 6] | r3 = *((r4 + 6));
0x00040cb8 movs r4, 0 | r4 = 0;
0x00040cba add r8, pc | r8 = 0x819e0;
0x00040cbc addw r8, r8, 0x808 | __asm ("addw r8, r8, 0x808");
0x00040cc0 add.w r8, r8, r3, lsl 2 | r8 += (r3 << 2);
| do {
0x00040cc4 ldr r1, [r6] | r1 = *(r6);
0x00040cc6 add.w r0, r4, r4, lsl 2 | r0 = r4 + (r4 << 2);
0x00040cca mov.w r2, -1 | r2 = -1;
0x00040cce mov.w r3, -1 | r3 = -1;
0x00040cd2 ldrb.w r5, [r1, 0x57] | r5 = *((r1 + 0x57));
0x00040cd4 str r7, [r2, r1] | *((r2 + r1)) = r7;
| if (r5 == 0) {
0x00040cd6 cbnz r5, 0x40cec |
0x00040cd8 ldr.w ip, [r6, 0x74] | ip = *((r6 + 0x74));
0x00040cdc ldr.w r1, [r8, r4, lsl 2] | offset_0 = r4 << 2;
| r1 = *((r8 + offset_0));
0x00040ce0 strd sb, r5, [sp] | __asm ("strd sb, r5, [sp]");
0x00040ce4 add.w r0, ip, r0, lsl 3 | r0 = ip + (r0 << 3);
0x00040ce8 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
| }
0x00040cec adds r4, 1 | r4++;
0x00040cee cmp r7, r4 |
0x00040cf0 bne 0x40cc4 |
| } while (r7 != r4);
| do {
0x00040cf2 add sp, 0xc |
0x00040cf4 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_0:
0x00040cf8 ldr r3, [r6] | r3 = *(r6);
0x00040cfa ldr r1, [r4] | r1 = *(r4);
0x00040cfc ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00040d00 cmp r3, 0 |
0x00040d02 bne 0x40cf2 |
| } while (r3 != 0);
0x00040d04 movs r2, 1 | r2 = 1;
0x00040d06 ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x00040d08 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00040d0c mov.w r2, -1 | r2 = -1;
0x00040d10 mov.w r3, -1 | r3 = -1;
0x00040d14 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x00040d18 add sp, 0xc |
0x00040d1a pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x41674 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00041674 () | void fcn_00041674 (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00041674 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00041678 mov r4, r1 | r4 = r1;
0x0004167a ldr.w sb, [r1] | sb = *(r1);
0x0004167e mov r8, r0 | r8 = r0;
0x00041680 mov r7, r2 | r7 = r2;
0x00041682 cmp.w sb, 0 |
| if (sb == 0) {
0x00041686 beq 0x416f2 | goto label_1;
| }
0x00041688 mov r0, sb | r0 = sb;
0x0004168a mov.w sl, 0 | sl = 0;
0x0004168e blx 0x65dc | r0 = strcmp (r0, r1);
0x00041692 bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
0x00041696 adds r6, 1 | r6++;
0x00041698 mov r5, r6 | r5 = r6;
| do {
0x0004169a ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x0004169c lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x0004169e bpl 0x416b6 |
0x000416a0 add.w r0, sb, r6 | r0 = sb + r6;
0x000416a4 blx 0x65dc | r0 = strcmp (r0, r1);
0x000416a8 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x000416ac adds r0, 1 | r0++;
0x000416ae adds r0, r0, r5 | r0 += r5;
0x000416b0 mov r5, r0 | r5 = r0;
0x000416b2 adc sl, sl, 0 | __asm ("adc sl, sl, 0");
| }
| if (r7 == 0) {
0x000416b6 cbz r7, 0x416fa | goto label_2;
| }
0x000416b8 mov r0, r7 | r0 = r7;
0x000416ba blx 0x65dc | r0 = strcmp (r0, r1);
0x000416be bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
0x000416c2 movs r3, 0 | r3 = 0;
0x000416c4 adds r6, 1 | r6++;
0x000416c6 mov r2, r6 | r2 = r6;
| label_0:
0x000416c8 adds r2, r5, r2 | r2 = r5 + r2;
0x000416ca mov r1, sb | r1 = sb;
0x000416cc adc.w r3, sl, r3 | __asm ("adc.w r3, sl, r3");
0x000416d0 mov r0, r8 | r0 = r8;
0x000416d2 bl 0x3bca8 | r0 = fcn_0003bca8 (r0, r1, r2);
0x000416d6 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x000416d8 cbz r0, 0x416ee |
0x000416da str r3, [r4] | *(r4) = r3;
0x000416dc mov r2, r6 | r2 = r6;
0x000416de mov r1, r7 | r1 = r7;
0x000416e0 add r0, r5 | r0 += r5;
0x000416e2 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000416e6 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x000416e8 orr r3, r3, 0x200 | r3 |= 0x200;
0x000416ec strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
| }
0x000416ee pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x000416f2 movs r5, 1 | r5 = 1;
0x000416f4 mov sl, sb | sl = sb;
0x000416f6 mov r6, r5 | r6 = r5;
0x000416f8 b 0x4169a |
| } while (1);
| label_2:
0x000416fa movs r2, 1 | r2 = 1;
0x000416fc mov r3, r7 | r3 = r7;
0x000416fe mov r6, r2 | r6 = r2;
0x00041700 b 0x416c8 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x41818 */
| #include <stdint.h>
|
; (fcn) fcn.00041818 () | uint32_t fcn_00041818 (int16_t arg1) {
| r0 = arg1;
0x00041818 ldr.w r2, [r0, 0x17c] | r2 = *((r0 + 0x17c));
0x0004181c movw r1, 0xcccd |
0x00041820 movw r3, 0x9999 |
0x00041824 movt r1, 0xcccc | r1 = 0xcccccccd;
0x00041828 movt r3, 0x1999 | r3 = 0x19999999;
0x0004182c mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
0x00041830 cmp.w r3, 0x33333333 |
| if (r3 > 0x33333333) {
0x00041834 blo 0x4183a |
0x00041836 movs r0, 0 | r0 = 0;
0x00041838 bx lr | return r0;
| }
0x0004183a asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0004183c adds r2, 5 | r2 += 5;
0x0004183e push {r4, lr} |
0x00041840 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00041844 ldr.w r1, [r0, 0x194] | r1 = *((r0 + 0x194));
0x00041848 lsls r3, r3, 2 | r3 <<= 2;
0x0004184a mov r4, r0 | r4 = r0;
0x0004184c orr.w r3, r3, r2, lsr 30 | r3 |= (r2 >> 30);
0x00041850 lsls r2, r2, 2 | r2 <<= 2;
0x00041852 bl 0x3bca8 | fcn_0003bca8 (r0, r1, r2);
0x00041854 invalid |
| if (r0 != 0) {
0x00041856 cbz r0, 0x41876 |
0x00041858 ldr.w r3, [r4, 0x17c] | r3 = *((r4 + 0x17c));
0x0004185c movs r2, 0 | r2 = 0;
0x0004185e str.w r2, [r0, r3, lsl 2] | __asm ("str.w r2, [r0, r3, lsl 2]");
0x00041862 add.w r3, r0, r3, lsl 2 | r3 = r0 + (r3 << 2);
0x00041866 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x00041868 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0004186a str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0004186c str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0004186e str.w r0, [r4, 0x194] | __asm ("str.w r0, [r4, 0x194]");
0x00041872 movs r0, 0 | r0 = 0;
0x00041874 pop {r4, pc} |
| }
0x00041876 movs r0, 7 | r0 = 7;
0x00041878 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4213c */
| #include <stdint.h>
|
; (fcn) fcn.0004213c () | void fcn_0004213c (int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004213c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00042140 mov sl, r1 | sl = r1;
0x00042142 ldr r4, [r1, 8] | r4 = *((r1 + 8));
0x00042144 sub sp, 0x1c |
0x00042146 mov sb, r0 | sb = r0;
0x00042148 mov r8, r2 | r8 = r2;
0x0004214a ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0004214c cmp r4, 0 |
| if (r4 == 0) {
0x0004214e beq.w 0x422ac | goto label_4;
| }
0x00042152 mov lr, r3 | lr = r3;
0x00042154 ldr r3, [sp, 0x50] | r3 = *(arg_50h);
0x00042156 movs r6, 0 | r6 = 0;
0x00042158 str r0, [sp, 0x10] | var_10h = r0;
0x0004215a str r1, [sp, 8] | var_8h = r1;
0x0004215c str r2, [sp, 0x14] | var_14h = r2;
0x0004215e lsl.w ip, r3, 4 |
0x00042162 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x00042164 uxtb.w fp, ip | fp = (int8_t) ip;
0x00042168 and r3, r3, 2 | r3 &= 2;
0x0004216c orr.w r3, fp, r3 | r3 = fp | r3;
0x00042170 mov sl, fp | sl = fp;
0x00042172 orr r3, r3, 1 | r3 |= 1;
0x00042176 mov fp, lr |
0x00042178 str r3, [sp, 0xc] | var_ch = r3;
0x0004217a ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x0004217c subs r7, r3, 4 | r7 = r3 - 4;
| do {
0x0004217e ldr r3, [r7, 4]! | r3 = *((r7 += 4));
0x00042182 cmp r3, 0 |
| if (r3 != 0) {
0x00042184 beq 0x4220c |
0x00042186 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
| if (r2 != 0) {
0x00042188 cbz r2, 0x4219e |
0x0004218a mov r2, r3 | r2 = r3;
0x0004218c ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0004218e movs r1, 0 | r1 = 0;
0x00042190 mov r0, r5 | r0 = r5;
0x00042192 str r1, [sp] | *(sp) = r1;
0x00042194 movs r1, 0x32 | r1 = 0x32;
0x00042196 adds r3, 2 | r3 += 2;
0x00042198 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004219c ldr r3, [r7] | r3 = *(r7);
| }
0x0004219e ldrb.w r1, [r4, 0x37] | r1 = *((r4 + 0x37));
0x000421a2 and r2, r1, 3 | r2 = r1 & 3;
0x000421a6 cmp r2, 2 |
0x000421a8 it ne |
| if (r2 == 2) {
0x000421aa movne r8, sl | r8 = sl;
| }
| if (r2 == 2) {
0x000421ac bne 0x421be |
0x000421ae ldr r2, [sp, 8] | r2 = var_8h;
0x000421b0 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x000421b2 tst.w r2, 0x80 |
0x000421b6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000421b8 ite eq |
| if ((r2 & 0x80) != 0) {
0x000421ba moveq r8, sl | r8 = sl;
| }
| if ((r2 & 0x80) != 0) {
0x000421bc movne r8, r2 | r8 = r2;
| goto label_5;
| }
| }
| label_5:
0x000421be adds r0, r3, 1 | r0 = r3 + 1;
0x000421c0 lsls r1, r1, 0x1c | r1 <<= 0x1c;
0x000421c2 it mi |
| if (r1 < r1) {
0x000421c4 ldrhmi sb, [r4, 0x32] | __asm ("ldrhmi sb, [r4, 0x32]");
| }
0x000421c8 add.w r2, r6, fp | r2 = r6 + fp;
0x000421cc it pl |
| if (r1 >= r1) {
0x000421ce ldrhpl sb, [r4, 0x34] | __asm ("ldrhpl sb, [r4, 0x34]");
| }
0x000421d2 movs r1, 0x8a | r1 = 0x8a;
0x000421d4 str r0, [sp] | *(sp) = r0;
0x000421d6 mov r0, r5 | r0 = r5;
0x000421d8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000421dc ldr r3, [r5] | r3 = *(r5);
0x000421de ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000421e2 cbnz r3, 0x421f8 |
0x000421e4 ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x000421e6 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000421ea mvn r2, 2 | r2 = ~2;
0x000421ee add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
0x000421f2 str.w sb, [r3, 0x10] | __asm ("str.w sb, [r3, 0x10]");
0x000421f6 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x000421f8 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000421fa cmp r3, 0 |
0x000421fc itttt gt |
| if (r3 <= 0) {
0x000421fe ldrgt r2, [r5, 0x68] | r2 = *((r5 + 0x68));
| }
| if (r3 <= 0) {
0x00042200 addgt r3, r3, r3, lsl 1 | r3 += (r3 << 1);
| }
| if (r3 <= 0) {
0x00042204 addgt r2, r2, r3, lsl 3 | r2 += (r3 << 3);
| }
| if (r3 <= 0) {
0x00042208 strh r8, [r2, -0x16] | *((r2 - 0x16)) = r8;
| goto label_6;
| }
| }
| label_6:
0x0004220c ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x0004220e adds r6, 1 | r6++;
0x00042210 cmp r4, 0 |
0x00042212 bne 0x4217e |
| } while (r4 != 0);
0x00042214 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x00042218 ldr.w sl, [sp, 8] | sl = var_8h;
0x0004221c ldr.w r8, [sp, 0x14] | r8 = var_14h;
| label_3:
0x00042220 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00042224 ands r4, r3, 0x80 | r4 = r3 & 0x80;
| if (r4 != r3) {
0x00042228 bne 0x4226e | goto label_7;
| }
0x0004222a ldrb.w r3, [sb, 0x12] | r3 = *((sb + 0x12));
0x0004222e cbz r3, 0x42274 |
| while (r3 == 0) {
0x00042230 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
| if (r3 != 0) {
0x00042232 cbz r3, 0x42238 |
| label_1:
0x00042234 orr r4, r4, 8 | r4 |= 8;
| }
| label_0:
0x00042238 ldr r3, [sp, 0x50] | r3 = *(arg_50h);
| if (r3 != 0) {
0x0004223a cbz r3, 0x42240 |
0x0004223c orr r4, r4, 0x10 | r4 |= 0x10;
| }
0x00042240 ldr r1, [sp, 0x40] | r1 = *(arg_40h);
0x00042242 mov r2, r8 | r2 = r8;
0x00042244 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00042246 mov r0, r5 | r0 = r5;
0x00042248 ldr.w r3, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r3 = *((r3 + offset_0));
0x0004224c str r1, [sp] | *(sp) = r1;
0x0004224e movs r1, 0x80 | r1 = 0x80;
0x00042250 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00042254 ldrb.w r3, [sb, 0x12] | r3 = *((sb + 0x12));
| if (r3 == 0) {
0x00042258 cbz r3, 0x4228a | goto label_8;
| }
0x0004225a ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
| label_2:
0x0004225c cmp r3, 0 |
0x0004225e itttt gt |
| if (r3 <= 0) {
0x00042260 ldrgt r2, [r5, 0x68] | r2 = *((r5 + 0x68));
| }
| if (r3 <= 0) {
0x00042262 addgt r3, r3, r3, lsl 1 | r3 += (r3 << 1);
| }
| if (r3 <= 0) {
0x00042266 addgt r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| }
| if (r3 > 0) {
0x0004226a strh r4, [r3, -0x16] | *((r3 - 0x16)) = r4;
| }
| label_7:
0x0004226e add sp, 0x1c |
0x00042270 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00042274 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x00042276 movs r4, 0x21 | r4 = 0x21;
0x00042278 cmp r3, 0 |
0x0004227a beq 0x42230 |
| }
0x0004227c orr r3, r3, 1 | r3 |= 1;
0x00042280 uxtb r4, r3 | r4 = (int8_t) r3;
0x00042282 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00042284 cmp r3, 0 |
| if (r3 == 0) {
0x00042286 beq 0x42238 | goto label_0;
| }
0x00042288 b 0x42234 | goto label_1;
| label_8:
0x0004228a ldr r2, [r5] | r2 = *(r5);
0x0004228c ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0004228e ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x00042292 cmp r2, 0 |
| if (r2 != 0) {
0x00042294 bne 0x4225c | goto label_2;
| }
0x00042296 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0004229a ldr r1, [r5, 0x68] | r1 = *((r5 + 0x68));
0x0004229c lsls r2, r2, 3 | r2 <<= 3;
0x0004229e subs r2, 0x18 | r2 -= 0x18;
0x000422a0 add r2, r1 | r2 += r1;
0x000422a2 movs r1, 0xfb | r1 = 0xfb;
0x000422a4 str.w sl, [r2, 0x10] | __asm ("str.w sl, [r2, 0x10]");
0x000422a8 strb r1, [r2, 1] | *((r2 + 1)) = r1;
0x000422aa b 0x4225c | goto label_2;
| label_4:
0x000422ac mov r6, r4 | r6 = r4;
0x000422ae b 0x42220 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x423dc */
| #include <stdint.h>
|
; (fcn) fcn.000423dc () | void fcn_000423dc (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000423dc push {r4, r5, r6, lr} |
0x000423de mov r4, r0 | r4 = r0;
0x000423e0 ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x000423e2 sub sp, 8 |
| if (r0 != 0) {
0x000423e4 cbz r0, 0x42414 |
0x000423e6 ldr r3, [r4] | r3 = *(r4);
0x000423e8 mov r5, r1 | r5 = r1;
0x000423ea mov r6, r2 | r6 = r2;
0x000423ec mov r2, r5 | r2 = r5;
0x000423ee ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000423f0 add.w r1, r1, r5, lsl 4 | r1 += (r5 << 4);
0x000423f4 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x000423f6 ldr r1, [r3] | r1 = *(r3);
0x000423f8 movs r3, 1 | r3 = 1;
0x000423fa adds r1, 1 | r1++;
0x000423fc str r1, [sp] | *(sp) = r1;
0x000423fe movs r1, 0x64 | r1 = 0x64;
0x00042400 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00042404 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00042406 mov r3, r6 | r3 = r6;
0x00042408 movs r2, 0 | r2 = 0;
0x0004240a mov r1, r5 | r1 = r5;
0x0004240c bl 0x42354 | fcn_00042354 (r0, r1, r2, r3);
0x00042410 cmp r5, 1 |
| if (r5 != 1) {
0x00042412 bne 0x42418 | goto label_0;
| }
| }
0x00042414 add sp, 8 |
0x00042416 pop {r4, r5, r6, pc} |
| label_0:
0x00042418 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0004241a mov r3, r6 | r3 = r6;
0x0004241c movs r2, 0 | r2 = 0;
0x0004241e movs r1, 1 | r1 = 1;
0x00042420 add sp, 8 |
0x00042422 pop.w {r4, r5, r6, lr} |
0x00042426 b 0x42354 | return void (*0x42354)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4277c */
| #include <stdint.h>
|
; (fcn) fcn.0004277c () | void fcn_0004277c (int16_t arg_40h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0004277c push {r2, r3} |
0x0004277e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00042782 mov sl, r1 | sl = r1;
0x00042784 mov r4, r0 | r4 = r0;
0x00042786 vpush {d8} | __asm ("vpush {d8}");
0x0004278a sub sp, 0x14 |
0x0004278c add r3, sp, 0x40 | r3 += arg_40h;
0x0004278e ldr r1, [pc, 0x114] |
0x00042790 ldr sb, [r3], 4 | sb = *(r3);
| r3 += 4;
0x00042794 ldr r2, [pc, 0x110] | r2 = *(0x428a8);
0x00042796 add r1, pc | r1 = 0x85040;
0x00042798 ldrb.w r0, [sb] | r0 = *(sb);
0x0004279c ldr r2, [r1, r2] |
0x0004279e ldr r2, [r2] | r2 = *(0x85040);
0x000427a0 str r2, [sp, 0xc] | var_ch = r2;
0x000427a2 mov.w r2, 0 | r2 = 0;
0x000427a6 str r3, [sp, 8] | var_8h = r3;
0x000427a8 cmp r0, 0 |
| if (r0 == 0) {
0x000427aa beq 0x4289a | goto label_2;
| }
0x000427ac vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000427b0 mov r6, sl | r6 = sl;
0x000427b2 mov r5, sb | r5 = sb;
0x000427b4 movs r7, 0 | r7 = 0;
0x000427b6 mov.w r8, 0x47 | r8 = 0x47;
0x000427ba b 0x427fc |
| while (r0 != 0x73) {
0x000427bc cmp r0, 0x69 |
| if (r0 != 0x69) {
0x000427be bne 0x4286a | goto label_3;
| }
0x000427c0 ldrd r3, r1, [r4, 0x6c] | __asm ("ldrd r3, r1, [r4, 0x6c]");
0x000427c4 ldr r2, [sp, 8] | r2 = var_8h;
0x000427c6 cmp r3, r1 |
0x000427c8 add.w r0, r2, 4 | r0 = r2 + 4;
0x000427cc ldr r2, [r2] | r2 = *(r2);
0x000427ce str r0, [sp, 8] | var_8h = r0;
| if (r3 >= r1) {
0x000427d0 bge 0x4288c | goto label_4;
| }
0x000427d2 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x000427d4 add.w r0, r3, r3, lsl 1 | r0 = r3 + (r3 << 1);
0x000427d8 adds r3, 1 | r3++;
0x000427da str r3, [r4, 0x6c] | *((r4 + 0x6c)) = r3;
0x000427dc add.w r3, r1, r0, lsl 3 | r3 = r1 + (r0 << 3);
0x000427de lsls r0, r0, 0xf | r0 <<= 0xf;
0x000427e0 add.w ip, r3, 0x10 |
0x000427e4 strd r2, r6, [r3, 4] | __asm ("strd r2, r6, [r3, 4]");
0x000427e8 str r7, [r3, 0xc] | *((r3 + 0xc)) = r7;
0x000427ea str.w r8, [r1, r0, lsl 3] | __asm ("str.w r8, [r1, r0, lsl 3]");
0x000427ee vst1.32 {d8}, [ip] | __asm ("vst1.32 {d8}, [ip]");
| label_0:
0x000427f2 ldrb r0, [r5, 1] | r0 = *((r5 + 1));
0x000427f4 adds r3, r5, 1 | r3 = r5 + 1;
0x000427f6 adds r6, 1 | r6++;
| if (r0 == 0) {
0x000427f8 cbz r0, 0x42856 | goto label_5;
| }
| label_1:
0x000427fa mov r5, r3 | r5 = r3;
0x000427fc cmp r0, 0x73 |
0x000427fe bne 0x427bc |
| }
0x00042800 ldr r1, [sp, 8] | r1 = var_8h;
0x00042802 movs r2, 0 | r2 = 0;
0x00042804 mov r3, r6 | r3 = r6;
0x00042806 mov r0, r4 | r0 = r4;
0x00042808 ldr.w fp, [r1] | fp = *(r1);
0x0004280c adds r1, 4 | r1 += 4;
0x0004280e str r1, [sp, 8] | var_8h = r1;
0x00042810 str r7, [sp] | *(sp) = r7;
0x00042812 cmp fp, r2 |
0x00042814 ite eq |
| if (fp != r2) {
0x00042816 moveq r1, 0x4b | r1 = 0x4b;
| }
| if (fp == r2) {
0x00042818 movne r1, 0x75 | r1 = 0x75;
| }
0x0004281a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004281e ldr r3, [r4] | r3 = *(r4);
0x00042820 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00042824 cmp r3, 0 |
| if (r3 != 0) {
0x00042826 bne 0x427f2 | goto label_0;
| }
0x00042828 cmp r0, 0 |
0x0004282a ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x0004282c it lt |
| if (r0 >= 0) {
0x0004282e ldrlt r0, [r4, 0x6c] | r0 = *((r4 + 0x6c));
| }
0x00042830 mov.w r3, 0 | r3 = 0;
0x00042834 mov r2, fp | r2 = fp;
0x00042836 add.w r6, r6, 1 | r6++;
0x0004283a it lt |
| if (r0 >= 0) {
0x0004283c addlt r0, r0, -1 | r0 += -1;
| }
0x00042840 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00042844 add.w r1, r1, r0, lsl 3 | r1 += (r0 << 3);
0x00042848 mov r0, r4 | r0 = r4;
0x0004284a bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
0x0004284e ldrb r0, [r5, 1] | r0 = *((r5 + 1));
0x00042850 adds r3, r5, 1 | r3 = r5 + 1;
0x00042852 cmp r0, 0 |
| if (r0 != 0) {
0x00042854 bne 0x427fa | goto label_1;
| }
| label_5:
0x00042856 rsb.w r3, sb, 1 | r3 = 1 - sb;
0x0004285a add r3, r5 | r3 += r5;
| do {
0x0004285c movs r5, 0 | r5 = 0;
0x0004285e mov r2, sl | r2 = sl;
0x00042860 movs r1, 0x54 | r1 = 0x54;
0x00042862 mov r0, r4 | r0 = r4;
0x00042864 str r5, [sp] | *(sp) = r5;
0x00042866 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_3:
0x0004286a ldr r2, [pc, 0x40] |
0x0004286c ldr r3, [pc, 0x38] | r3 = *(0x428a8);
0x0004286e add r2, pc | r2 = 0x85120;
0x00042870 ldr r3, [r2, r3] | r3 = *(0x85120);
0x00042872 ldr r2, [r3] | r2 = *(0x85120);
0x00042874 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00042876 eors r2, r3 | r2 ^= r3;
0x00042878 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004287c bne 0x4289e | goto label_6;
| }
0x0004287e add sp, 0x14 |
0x00042880 vpop {d8} | __asm ("vpop {d8}");
0x00042884 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00042888 add sp, 8 |
0x0004288a bx lr | return;
| label_4:
0x0004288c mov r3, r6 | r3 = r6;
0x0004288e movs r1, 0x47 | r1 = 0x47;
0x00042890 mov r0, r4 | r0 = r4;
0x00042892 str r7, [sp] | *(sp) = r7;
0x00042894 bl 0x41a4c | fcn_00041a4c (r0, r1, r2, r3, r4);
0x00042898 b 0x427f2 | goto label_0;
| label_2:
0x0004289a mov r3, r0 | r3 = r0;
0x0004289c b 0x4285c |
| } while (1);
| label_6:
0x0004289e blx 0x6430 | fcn_00006430 ();
0x000428a2 nop |
0x000428a4 strb r2, [r0, 0x18] | *((r0 + 0x18)) = r2;
0x000428a6 movs r2, r1 | r2 = r1;
0x000428a8 lsls r4, r6, 8 | r4 = r6 << 8;
0x000428aa movs r0, r0 |
0x000428ac strb r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x000428ae movs r2, r1 | r2 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x429f8 */
| #include <stdint.h>
|
; (fcn) fcn.000429f8 () | void fcn_000429f8 (int16_t arg_20h, int16_t arg_24h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000429f8 invalid |
0x000429fc ldrd r6, r4, [r0, 0x6c] | __asm ("ldrd r6, r4, [arg_20hx6c]");
0x00042a00 sub sp, 0xc |
0x00042a02 cmp r6, r4 |
| if (r6 >= r4) {
0x00042a04 bge 0x42a52 | goto label_0;
| }
0x00042a06 add.w r0, r6, r6, lsl 1 | r0 = r6 + (r6 << 1);
0x00042a0a ldr r4, [r5, 0x68] | r4 = *((r5 + 0x68));
0x00042a0c mov lr, r2 | lr = r2;
0x00042a0e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00042a12 lsls r0, r0, 3 | r0 <<= 3;
0x00042a14 adds r2, r6, 1 | r2 = r6 + 1;
0x00042a16 str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
0x00042a18 mov r7, r3 | r7 = r3;
0x00042a1a strb r1, [r4, r0] | *((r4 + r0)) = r1;
0x00042a1c add.w ip, r4, r0 |
0x00042a20 ldr r1, [sp, 0x20] | r1 = *(arg_20h);
0x00042a22 add.w r2, ip, 0x10 | r2 = ip + 0x10;
0x00042a26 movs r3, 0 | r3 = 0;
0x00042a28 str.w lr, [ip, 4] | __asm ("str.w lr, [ip, 4]");
0x00042a2c strh.w r3, [ip, 2] | *((ip + 2)) = r3;
0x00042a30 str.w r7, [ip, 8] | __asm ("str.w r7, [ip, 8]");
0x00042a34 str.w r1, [ip, 0xc] | __asm ("str.w r1, [ip, 0xc]");
0x00042a38 strb.w r3, [ip, 1] | *((ip + 1)) = r3;
0x00042a3c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
| do {
0x00042a40 mov r0, r5 | r0 = r5;
0x00042a42 ldrd r2, r3, [sp, 0x24] | __asm ("ldrd r2, r3, [arg_24h]");
0x00042a46 mov r1, r6 | r1 = r6;
0x00042a48 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x00042a4c mov r0, r6 | r0 = r6;
0x00042a4e add sp, 0xc |
0x00042a50 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00042a52 ldr r4, [sp, 0x20] | r4 = *(arg_20h);
0x00042a54 str r4, [sp] | *(sp) = r4;
0x00042a56 bl 0x41a4c | r0 = fcn_00041a4c (r0, r1, r2, r3, r4);
0x00042a5a mov r6, r0 | r6 = r0;
0x00042a5c b 0x42a40 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x42a60 */
| #include <stdint.h>
|
; (fcn) fcn.00042a60 () | void fcn_00042a60 (int16_t arg2, int16_t arg3, int16_t arg4, arithmetic x) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_3dh;
| int16_t var_40h;
| int16_t var_a4h;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| r0 = x;
0x00042a60 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00042a64 mov r4, r0 | r4 = r0;
0x00042a66 ldr r6, [pc, 0x370] |
0x00042a68 sub sp, 0xac |
0x00042a6a ldr r5, [pc, 0x370] | r5 = *(0x42dde);
0x00042a6c add r6, pc | r6 = 0x8584a;
0x00042a6e ldr r0, [r0, 0x74] | r0 = *((r0 + 0x74));
0x00042a70 ldr r5, [r6, r5] |
0x00042a72 cmp r0, 0 |
0x00042a74 it eq |
| if (r0 != 0) {
0x00042a76 moveq r0, r4 | r0 = r4;
| }
0x00042a78 ldr r5, [r5] | r5 = *(0x8584a);
0x00042a7a str r5, [sp, 0xa4] | var_a4h = r5;
0x00042a7c mov.w r5, 0 | r5 = 0;
0x00042a80 mov r5, r1 | r5 = r1;
0x00042a82 ldrb.w r1, [r0, 0xcf] | r1 = *((r0 + 0xcf));
0x00042a86 cmp r1, 2 |
0x00042a88 beq 0x42aa6 |
| while (r0 < r7) {
| label_0:
0x00042a8a ldr r2, [pc, 0x354] |
0x00042a8c ldr r3, [pc, 0x34c] | r3 = *(0x42ddc);
0x00042a8e add r2, pc | r2 = 0x85874;
0x00042a90 ldr r3, [r2, r3] | r3 = *(0x85874);
0x00042a92 ldr r2, [r3] | r2 = *(0x85874);
0x00042a94 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x00042a96 eors r2, r3 | r2 ^= r3;
0x00042a98 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00042a9c bne.w 0x42e62 | goto label_13;
| }
0x00042aa0 add sp, 0xac |
0x00042aa2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00042aa6 ldr.w r8, [r2, 0x50] | r8 = *((r2 + 0x50));
0x00042aaa ldrb.w sl, [r2, 0x3c] | sl = *((r2 + 0x3c));
0x00042aae ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00042ab0 ldr.w r7, [r8, 0x28] | r7 = *((r8 + 0x28));
0x00042ab4 ldr r1, [r4] | r1 = *(r4);
0x00042ab6 str r2, [sp, 0x10] | var_10h = r2;
0x00042ab8 lsls r0, r7, 0x12 | r0 = r7 << 0x12;
0x00042aba bmi 0x42a8a |
| }
0x00042abc lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x00042abe bmi 0x42a8a | goto label_0;
| }
0x00042ac0 ands fp, r7, 0x30 |
| if (fp == r7) {
0x00042ac4 bne 0x42ae8 |
0x00042ac6 lsls r6, r7, 0x15 | r6 = r7 << 0x15;
| if (r6 >= r7) {
0x00042ac8 bmi 0x42ad8 |
0x00042aca ldrh.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
| if (r2 != 0) {
0x00042ace cbz r2, 0x42ad8 |
0x00042ad0 ldr r2, [pc, 0x310] |
0x00042ad2 movs r6, 1 | r6 = 1;
0x00042ad4 add r2, pc | r2 = 0x858bc;
0x00042ad6 b 0x42aee |
| }
0x00042ad8 ands r6, r3, 3 | r6 = r3 & 3;
| } else {
| } else {
| }
| }
| if (r6 == r3) {
0x00042adc beq.w 0x42d08 | goto label_14;
| }
0x00042ae0 ldr r2, [pc, 0x304] |
0x00042ae2 movs r6, 1 | r6 = 1;
0x00042ae4 add r2, pc | r2 = 0x858d0;
0x00042ae6 b 0x42aee |
0x00042ae8 ldr r2, [pc, 0x300] |
0x00042aea movs r6, 1 | r6 = 1;
0x00042aec add r2, pc | r2 = 0x858dc;
| label_3:
0x00042aee str r1, [sp, 0x28] | var_28h = r1;
0x00042af0 add r1, sp, 0x40 | r1 += var_40h;
0x00042af2 str r1, [sp, 0x2c] | var_2ch = r1;
0x00042af4 movs r1, 0 | r1 = 0;
0x00042af6 str r1, [sp, 0x38] | var_38h = r1;
0x00042af8 mov.w r1, 0x100 | r1 = 0x100;
0x00042afc strh.w r1, [sp, 0x3c] | var_3ch = r1;
0x00042b00 add.w r3, r5, sl, lsl 6 | r3 = r5 + (sl << 6);
0x00042b04 ldr r1, [pc, 0x2e8] |
0x00042b06 add.w sb, sp, 0x28 | sb += var_28h;
0x00042b0a vldr d16, [pc, 0x2c4] | __asm ("vldr d16, [0x00042dd4]");
0x00042b0e adds r3, 8 | r3 += 8;
0x00042b10 mov r0, sb | r0 = sb;
0x00042b12 add r1, pc | r1 = 0x85906;
0x00042b14 vstr d16, [sp, 0x30] | __asm ("vstr d16, [sp, 0x30]");
0x00042b18 bl 0x37e84 | fcn_00037e84 ();
0x00042b1c tst.w r7, 0x500 |
| if ((r7 & 0x500) != 0) {
0x00042b20 bne.w 0x42c9e | goto label_15;
| }
0x00042b24 lsl.w r3, sl, 6 | r3 = sl << 6;
0x00042b28 ldr.w sl, [r8, 0x20] | sl = *((r8 + 0x20));
0x00042b2c str r3, [sp, 0x14] | var_14h = r3;
0x00042b2e adds r3, r5, r3 | r3 = r5 + r3;
0x00042b30 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00042b32 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00042b34 lsls r0, r3, 0x18 | r0 = r3 << 0x18;
| if (r0 >= r3) {
0x00042b36 bpl.w 0x42c88 | goto label_16;
| }
0x00042b3a ldrb.w r3, [sl, 0x37] | r3 = *((sl + 0x37));
0x00042b3e and r3, r3, 3 | r3 &= 3;
0x00042b42 cmp r3, 2 |
| if (r3 != 2) {
0x00042b44 bne.w 0x42c88 | goto label_16;
| }
0x00042b48 cmp r6, 0 |
| if (r6 == 0) {
0x00042b4a beq 0x42c48 | goto label_2;
| }
0x00042b4c ldr r6, [pc, 0x2a4] |
0x00042b4e add r6, pc | r6 = 0x85946;
| label_1:
0x00042b50 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00042b52 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00042b54 adds r2, r1, 7 | r2 = r1 + 7;
0x00042b56 cmp r2, r3 |
| if (r2 >= r3) {
0x00042b58 bhs.w 0x42d5e | goto label_17;
| }
0x00042b5c str r2, [sp, 0x38] | var_38h = r2;
0x00042b5e ldr r2, [pc, 0x298] |
0x00042b60 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00042b62 add r2, pc | r2 = 0x85960;
0x00042b64 ldr r0, [r2] | r0 = *(0x85960);
0x00042b66 str r0, [r3, r1] | *((r3 + r1)) = r0;
0x00042b68 add r3, r1 | r3 += r1;
0x00042b6a ldrh r1, [r2, 4] | r1 = *((r2 + 4));
0x00042b6c ldrb r2, [r2, 6] | r2 = *((r2 + 6));
0x00042b6e strh r1, [r3, 4] | *((r3 + 4)) = r1;
0x00042b70 strb r2, [r3, 6] | *((r3 + 6)) = r2;
| label_9:
0x00042b72 ldr.w r2, [sl] | r2 = *(sl);
0x00042b76 mov r1, r6 | r1 = r6;
0x00042b78 mov r0, sb | r0 = sb;
0x00042b7a bl 0x37e84 | fcn_00037e84 ();
0x00042b7e ldrh.w r3, [r8, 0x2e] | r3 = *((r8 + 0x2e));
0x00042b82 ldrh.w fp, [r8, 0x18] | fp = *((r8 + 0x18));
0x00042b86 ldr.w sl, [r8, 0x20] | sl = *((r8 + 0x20));
0x00042b8a mov r7, r3 | r7 = r3;
0x00042b8c cmp.w fp, 0 |
| if (fp == 0) {
0x00042b90 bne 0x42b9c |
0x00042b92 ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x00042b96 tst.w r3, 0x30 |
| if ((r3 & 0x30) == 0) {
0x00042b9a beq 0x42c48 | goto label_2;
| }
| }
0x00042b9c ldr r3, [sp, 0x38] | r3 = var_38h;
0x00042b9e ldr r1, [sp, 0x30] | r1 = var_30h;
0x00042ba0 adds r2, r3, 2 | r2 = r3 + 2;
0x00042ba2 cmp r2, r1 |
| if (r2 >= r1) {
0x00042ba4 bhs.w 0x42d7a | goto label_18;
| }
0x00042ba8 str r2, [sp, 0x38] | var_38h = r2;
0x00042baa ldr r2, [pc, 0x250] |
0x00042bac add r2, pc | r2 = 0x859ae;
0x00042bae ldrh r1, [r2] | r1 = *(r2);
0x00042bb0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00042bb2 strh r1, [r2, r3] | *((r2 + r3)) = r1;
0x00042bb4 cmp.w fp, 0 |
| if (fp == 0) {
0x00042bb8 beq 0x42c20 | goto label_19;
| }
0x00042bba ldr r3, [pc, 0x244] |
0x00042bbc mov r2, r5 | r2 = r5;
0x00042bbe strd r8, r4, [sp, 0x20] | __asm ("strd r8, r4, [var_20h]");
0x00042bc2 mov r5, sl | r5 = sl;
0x00042bc4 movs r6, 0 | r6 = 0;
0x00042bc6 mov r4, r7 | r4 = r7;
0x00042bc8 add r3, pc | r3 = 0x859ce;
0x00042bca mov sl, r2 | sl = r2;
0x00042bcc str r3, [sp, 0x18] | var_18h = r3;
0x00042bce ldr r3, [pc, 0x234] |
0x00042bd0 add r3, pc | r3 = 0x859da;
0x00042bd2 str r3, [sp, 0x1c] | var_1ch = r3;
0x00042bd4 ldr r3, [pc, 0x230] |
0x00042bd6 add r3, pc | r3 = 0x859e2;
0x00042bd8 mov r8, r3 | r8 = r3;
| do {
0x00042bda ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00042bdc ldrsh.w r2, [r2, r6, lsl 1] | offset_0 = r6 << 1;
| r2 = *((r2 + offset_0));
0x00042be0 adds r7, r2, 2 | r7 = r2 + 2;
| if (r7 == r2) {
0x00042be2 beq.w 0x42d3c | goto label_20;
| }
0x00042be6 adds r0, r2, 1 | r0 = r2 + 1;
| if (r0 == r2) {
0x00042be8 beq.w 0x42d40 | goto label_21;
| }
0x00042bec ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00042bee add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00042bf2 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00042bf4 ldr.w r7, [r1, r2, lsl 2] | offset_1 = r2 << 2;
| r7 = *((r1 + offset_1));
0x00042bf6 strb r2, [r4] | *(r4) = r2;
| label_7:
0x00042bf8 cmp r6, 0 |
| if (r6 != 0) {
0x00042bfa bne.w 0x42d1e | goto label_22;
| }
| label_6:
0x00042bfe cmp r6, r4 |
| if (r6 >= r4) {
0x00042c00 bge.w 0x42d18 | goto label_23;
| }
0x00042c04 ldr r1, [pc, 0x204] |
0x00042c06 add r1, pc | r1 = 0x85a16;
| label_5:
0x00042c08 mov r2, r7 | r2 = r7;
0x00042c0a adds r6, 1 | r6++;
0x00042c0c mov r0, sb | r0 = sb;
0x00042c0e bl 0x37e84 | fcn_00037e84 ();
0x00042c12 cmp r6, fp |
0x00042c14 bne 0x42bda |
| } while (r6 != fp);
0x00042c16 ldrd r8, r4, [sp, 0x20] | __asm ("ldrd r8, r4, [var_20h]");
0x00042c1a mov r3, sl | r3 = sl;
0x00042c1c mov sl, r5 | sl = r5;
0x00042c1e mov r5, r3 | r5 = r3;
| label_19:
0x00042c20 ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x00042c24 lsls r1, r3, 0x1a | r1 = r3 << 0x1a;
0x00042c26 it pl |
| if (r1 < r3) {
0x00042c28 movpl r1, fp | r1 = fp;
| }
| if (r1 < r3) {
0x00042c2a bmi.w 0x42da0 | goto label_24;
| }
| label_11:
0x00042c2e lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 < r3) {
0x00042c30 bmi.w 0x42d88 | goto label_25;
| }
0x00042c32 strh r2, [r5, 4] | *((r5 + 4)) = r2;
| label_10:
0x00042c34 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00042c36 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00042c38 adds r2, r3, 1 | r2 = r3 + 1;
0x00042c3a cmp r2, r1 |
| if (r2 >= r1) {
0x00042c3c bhs.w 0x42d6c | goto label_26;
| }
0x00042c40 str r2, [sp, 0x38] | var_38h = r2;
0x00042c42 movs r1, 0x29 | r1 = 0x29;
0x00042c44 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00042c46 strb r1, [r2, r3] | *((r2 + r3)) = r1;
| do {
| label_2:
0x00042c48 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00042c4a add r5, r3 | r5 += r3;
0x00042c4c ldrb.w r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00042c50 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
| if (r2 < r3) {
0x00042c52 bmi 0x42d44 | goto label_27;
| }
| label_8:
0x00042c54 ldr r1, [sp, 0x2c] | r1 = var_2ch;
| if (r1 != 0) {
0x00042c56 cbz r1, 0x42c6c |
0x00042c58 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00042c5a movs r2, 0 | r2 = 0;
0x00042c5c strb r2, [r1, r3] | *((r1 + r3)) = r2;
0x00042c5e ldr r3, [sp, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x00042c60 cbz r3, 0x42c6a |
0x00042c62 ldrb.w r3, [sp, 0x3d] | r3 = var_3dh;
0x00042c66 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00042c68 bpl 0x42d0e | goto label_28;
| }
| }
0x00042c6a ldr r1, [sp, 0x2c] | r1 = var_2ch;
| }
| label_4:
0x00042c6c ldr r0, [sp, 0x10] | r0 = var_10h;
0x00042c6e mvn r5, 5 | r5 = ~5;
0x00042c72 ldr.w r3, [r4, 0xdc] | r3 = *((r4 + 0xdc));
0x00042c76 movs r4, 0 | r4 = 0;
0x00042c78 ldr r2, [r0, 0x6c] | r2 = *((r0 + 0x6c));
0x00042c7a strd r4, r1, [sp] | __asm ("strd r4, r1, [sp]");
0x00042c7e movs r1, 0xb9 | r1 = 0xb9;
0x00042c80 str r5, [sp, 8] | var_8h = r5;
0x00042c82 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00042c86 b 0x42a8a | goto label_0;
| label_16:
0x00042c88 lsls r1, r7, 0xe | r1 = r7 << 0xe;
| if (r1 < r7) {
0x00042c8a bmi 0x42d02 | goto label_29;
| }
0x00042c8c lsls r2, r7, 0x11 | r2 = r7 << 0x11;
| if (r2 < r7) {
0x00042c8e bmi.w 0x42dc0 | goto label_30;
| }
0x00042c92 lsls r3, r7, 0x19 | r3 = r7 << 0x19;
| if (r3 < r7) {
0x00042c94 bmi.w 0x42dc6 | goto label_31;
| }
0x00042c98 ldr r6, [pc, 0x174] |
0x00042c9a add r6, pc | r6 = 0x85aae;
0x00042c9c b 0x42b50 | goto label_1;
| label_15:
0x00042c9e lsls r3, r7, 0x17 | r3 = r7 << 0x17;
| if (r3 >= r7) {
0x00042ca0 bpl 0x42ce4 | goto label_32;
| }
0x00042ca2 lsls r6, r7, 0x1c | r6 = r7 << 0x1c;
| if (r6 == r7) {
0x00042ca4 beq 0x42ce4 | goto label_32;
| }
0x00042ca6 ldr r6, [pc, 0x16c] |
0x00042ca8 mov r0, sb | r0 = sb;
0x00042caa ldr r1, [pc, 0x16c] |
0x00042cac add r6, pc | r6 = 0x85ac6;
0x00042cae mov r2, r6 | r2 = r6;
0x00042cb0 add r1, pc | r1 = 0x85ace;
0x00042cb2 bl 0x37e84 | fcn_00037e84 ();
0x00042cb6 tst.w r7, 5 |
0x00042cba it ne |
| if ((r7 & 5) == 0) {
0x00042cbc movne r2, 0x3d | r2 = 0x3d;
| }
| if ((r7 & 5) == 0) {
0x00042cbe bne 0x42cd2 |
0x00042cc0 cmp.w fp, 0x30 |
| if (fp == 0x30) {
0x00042cc4 beq.w 0x42e54 | goto label_33;
| }
0x00042cc8 lsls r0, r7, 0x1a | r0 = r7 << 0x1a;
0x00042cca it mi |
| if (r0 >= r7) {
0x00042ccc movmi r2, 0x3e | r2 = 0x3e;
| }
| if (r0 < r7) {
0x00042cce bmi 0x42cd2 | goto label_34;
| }
| label_12:
0x00042cd0 movs r2, 0x3c | r2 = 0x3c;
| }
| label_34:
0x00042cd2 ldr r1, [pc, 0x148] |
0x00042cd4 lsl.w r3, sl, 6 | r3 = sl << 6;
0x00042cd8 mov r0, sb | r0 = sb;
0x00042cda str r3, [sp, 0x14] | var_14h = r3;
0x00042cdc add r1, pc | r1 = 0x85afe;
0x00042cde bl 0x37e84 | fcn_00037e84 ();
0x00042ce2 b 0x42c48 |
| } while (1);
| label_32:
0x00042ce4 lsl.w r3, sl, 6 | r3 = sl << 6;
0x00042ce8 lsls r1, r7, 0x15 | r1 = r7 << 0x15;
0x00042cea str r3, [sp, 0x14] | var_14h = r3;
| if (r1 >= r7) {
0x00042cec bpl 0x42c48 | goto label_2;
| }
0x00042cee ldr r1, [pc, 0x130] |
0x00042cf0 mov r0, sb | r0 = sb;
0x00042cf2 ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x00042cf6 ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x00042cfa add r1, pc | r1 = 0x85b20;
0x00042cfc bl 0x37e84 | fcn_00037e84 ();
0x00042d00 b 0x42c48 | goto label_2;
| label_29:
0x00042d02 ldr r6, [pc, 0x120] |
0x00042d04 add r6, pc | r6 = 0x85b2e;
0x00042d06 b 0x42b50 | goto label_1;
| label_14:
0x00042d08 ldr r2, [pc, 0x11c] |
0x00042d0a add r2, pc | r2 = 0x85b36;
0x00042d0c b 0x42aee | goto label_3;
| label_28:
0x00042d0e mov r0, sb | r0 = sb;
0x00042d10 bl 0x39478 | r0 = fcn_00039478 (r0);
0x00042d14 mov r1, r0 | r1 = r0;
0x00042d16 b 0x42c6c | goto label_4;
| label_23:
0x00042d18 ldr r1, [pc, 0x110] |
0x00042d1a add r1, pc | r1 = 0x85b4a;
0x00042d1c b 0x42c08 | goto label_5;
| label_22:
0x00042d1e ldr r1, [sp, 0x38] | r1 = var_38h;
0x00042d20 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00042d22 adds r2, r1, 5 | r2 = r1 + 5;
0x00042d24 cmp r2, r0 |
| if (r2 < r0) {
0x00042d26 bhs 0x42d50 |
0x00042d28 str r2, [sp, 0x38] | var_38h = r2;
0x00042d2a ldr.w r0, [r8] | r0 = *(r8);
0x00042d2e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00042d30 str r0, [r2, r1] | *((r2 + r1)) = r0;
0x00042d32 add r2, r1 | r2 += r1;
0x00042d34 ldrb.w r1, [r8, 4] | r1 = *((r8 + 4));
0x00042d38 strb r1, [r2, 4] | *((r2 + 4)) = r1;
0x00042d3a b 0x42bfe | goto label_6;
| label_20:
0x00042d3c ldr r7, [sp, 0x18] | r7 = var_18h;
0x00042d3e b 0x42bf8 | goto label_7;
| label_21:
0x00042d40 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x00042d42 b 0x42bf8 | goto label_7;
| label_27:
0x00042d44 ldr r1, [pc, 0xe8] |
0x00042d46 mov r0, sb | r0 = sb;
0x00042d48 add r1, pc | r1 = 0x85b7c;
0x00042d4a bl 0x37e84 | fcn_00037e84 ();
0x00042d4e b 0x42c54 | goto label_8;
| }
0x00042d50 ldr r1, [pc, 0xe0] |
0x00042d52 movs r2, 5 | r2 = 5;
0x00042d54 mov r0, sb | r0 = sb;
0x00042d56 add r1, pc | r1 = 0x85b8e;
0x00042d58 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x00042d5c b 0x42bfe | goto label_6;
| label_17:
0x00042d5e ldr r1, [pc, 0xd8] |
0x00042d60 movs r2, 7 | r2 = 7;
0x00042d62 mov r0, sb | r0 = sb;
0x00042d64 add r1, pc | r1 = 0x85ba2;
0x00042d66 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x00042d6a b 0x42b72 | goto label_9;
| label_26:
0x00042d6c ldr r1, [pc, 0xcc] |
0x00042d6e movs r2, 1 | r2 = 1;
0x00042d70 mov r0, sb | r0 = sb;
0x00042d72 add r1, pc | r1 = 0x85bb2;
0x00042d74 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x00042d76 ldrh.w lr, [r2, 0x766] |
| label_18:
0x00042d7a ldr r1, [pc, 0xc4] |
0x00042d7c movs r2, 2 | r2 = 2;
0x00042d7e mov r0, sb | r0 = sb;
0x00042d80 add r1, pc | r1 = 0x85bc6;
0x00042d82 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x00042d84 strh.w lr, [fp, 0x715] |
| label_25:
0x00042d88 ldr r0, [pc, 0xb8] |
0x00042d8a mov r3, fp | r3 = fp;
0x00042d8c ldrh.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00042d90 str r1, [sp] | *(sp) = r1;
0x00042d92 mov r1, sl | r1 = sl;
0x00042d94 add r0, pc | r0 = 0x85bdc;
0x00042d96 str r0, [sp, 4] | var_4h = r0;
0x00042d98 mov r0, sb | r0 = sb;
0x00042d9a bl 0x3bf68 | fcn_0003bf68 (r0, r1, r2, r3, r4, r5, r6);
0x00042d9e b 0x42c34 | goto label_10;
| label_24:
0x00042da0 ldr r3, [pc, 0xa4] |
0x00042da2 mov r1, sl | r1 = sl;
0x00042da4 ldrh.w r2, [r8, 0x1a] | r2 = *((r8 + 0x1a));
0x00042da8 mov r0, sb | r0 = sb;
0x00042daa str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00042dae add r3, pc | r3 = 0x85bfa;
0x00042db0 str r3, [sp, 4] | var_4h = r3;
0x00042db2 mov r3, fp | r3 = fp;
0x00042db4 bl 0x3bf68 | fcn_0003bf68 (r0, r1, r2, r3, r4, r5, r6);
0x00042db8 ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x00042dbc movs r1, 1 | r1 = 1;
0x00042dbe b 0x42c2e | goto label_11;
| label_30:
0x00042dc0 ldr r6, [pc, 0x88] |
0x00042dc2 add r6, pc | r6 = 0x85c12;
0x00042dc4 b 0x42b50 | goto label_1;
| label_31:
0x00042dc6 ldr r6, [pc, 0x88] |
0x00042dc8 add r6, pc | r6 = 0x85c1e;
0x00042dca b 0x42b50 | goto label_1;
| label_33:
0x00042e54 ldr r1, [pc, 0x10] |
0x00042e56 mov r2, r6 | r2 = r6;
0x00042e58 mov r0, sb | r0 = sb;
0x00042e5a add r1, pc | r1 = 0x85cc6;
0x00042e5c bl 0x37e84 | fcn_00037e84 ();
0x00042e60 b 0x42cd0 | goto label_12;
| label_13:
0x00042e62 blx 0x6430 | fcn_00006430 ();
0x00042e66 nop |
| if (r1 <= 1) {
0x00042e68 bhi 0x42ed0 |
0x00042e6a movs r0, r1 | r0 = r1;
| }
0x00042ed0 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x00042ed2 mov ip, r2 |
0x00042ed4 lsls r0, r0, 3 | r0 <<= 3;
0x00042ed6 adds r2, r6, 1 | r2 = r6 + 1;
0x00042ed8 str r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x00042eda mov r7, r3 | r7 = r3;
0x00042edc strb.w lr, [r1, r0] |
0x00042ee0 add r1, r0 | r1 += r0;
0x00042ee2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00042ee6 add.w r2, r1, 0x10 | r2 = r1 + 0x10;
0x00042eea ldr r0, [sp, 0x20] | r0 = var_20h;
0x00042eec movs r3, 0 | r3 = 0;
0x00042eee str.w ip, [r1, 4] | __asm ("str.w ip, [r1, 4]");
0x00042ef2 strh r3, [r1, 2] | *((r1 + 2)) = r3;
0x00042ef4 str r7, [r1, 8] | *((r1 + 8)) = r7;
0x00042ef6 str r0, [r1, 0xc] | *((r1 + 0xc)) = r0;
0x00042ef8 strb r3, [r1, 1] | *((r1 + 1)) = r3;
0x00042efa vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00042efe ldr r3, [r4] | r3 = *(r4);
0x00042f00 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x00042f04 cbnz r3, 0x42f18 |
0x00042f06 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00042f08 add.w r2, r6, r6, lsl 1 | r2 = r6 + (r6 << 1);
0x00042f0c movs r1, 0xfd | r1 = 0xfd;
0x00042f0e add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x00042f12 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00042f14 strb r1, [r3, 1] | *((r3 + 1)) = r1;
0x00042f16 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| }
0x00042f18 mov r0, r6 | r0 = r6;
0x00042f1a add sp, 0xc |
0x00042f1c pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x42ebc */
| #include <stdint.h>
|
; (fcn) fcn.00042ebc () | void fcn_00042ebc (int16_t arg_20h, arithmetic arg1, int16_t arg2, arithmetic arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042ebc push {r4, r5, r6, r7, lr} |
0x00042ebe mov r4, r0 | r4 = r0;
0x00042ec0 ldrd r6, r5, [r0, 0x6c] | __asm ("ldrd r6, r5, [arg_20hx6c]");
0x00042ec4 sub sp, 0xc |
0x00042ec6 cmp r6, r5 |
| if (r6 < r5) {
0x00042ec8 bge 0x42f1e |
0x00042eca add.w r0, r6, r6, lsl 1 | r0 = r6 + (r6 << 1);
0x00042ece mov lr, r1 | lr = r1;
| }
0x00042f1e ldr r5, [sp, 0x20] | r5 = *(arg_20h);
0x00042f20 str r5, [sp] | *(sp) = r5;
0x00042f22 bl 0x41a4c | r0 = fcn_00041a4c (r0, r1, r2, r3, r4);
0x00042f26 mov r6, r0 | r6 = r0;
0x00042f28 b 0x42efe | return void (*0x42efe)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x42f2c */
| #include <stdint.h>
|
; (fcn) fcn.00042f2c () | void fcn_00042f2c (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00042f2c push {r4, r5, r6, lr} |
0x00042f2e sub sp, 8 |
0x00042f30 ldr r5, [r0, 0x10] | r5 = *((r0 + 0x10));
0x00042f32 mov r0, r1 | r0 = r1;
0x00042f34 ldr r3, [r1, 0x6c] | r3 = *((r1 + 0x6c));
0x00042f36 add.w r5, r5, r2, lsl 4 | r5 += (r2 << 4);
0x00042f3a ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00042f3c ldr r5, [r1] | r5 = *(r1);
0x00042f3e ldr r1, [r0, 0x70] | r1 = *((r0 + 0x70));
0x00042f40 adds r5, 1 | r5++;
0x00042f42 cmp r3, r1 |
| if (r3 < r1) {
0x00042f44 bge 0x42f72 |
0x00042f46 mov r4, r2 | r4 = r2;
0x00042f48 adds r2, r3, 1 | r2 = r3 + 1;
0x00042f4a add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00042f4e str r2, [r0, 0x6c] | *((r0 + 0x6c)) = r2;
0x00042f50 ldr r2, [r0, 0x68] | r2 = *((r0 + 0x68));
0x00042f52 movs r6, 1 | r6 = 1;
0x00042f54 lsls r3, r3, 3 | r3 <<= 3;
0x00042f56 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00042f5a movs r0, 0x64 | r0 = 0x64;
0x00042f5c adds r1, r2, r3 | r1 = r2 + r3;
0x00042f5e strd r4, r6, [r1, 4] | __asm ("strd r4, r6, [r1, 4]");
0x00042f62 adds r1, 0x10 | r1 += 0x10;
0x00042f64 str r5, [r1, -0x4] | *((r1 - 0x4)) = r5;
0x00042f68 str r0, [r2, r3] | *((r2 + r3)) = r0;
0x00042f6a vst1.32 {d16}, [r1] | __asm ("vst1.32 {d16}, [r1]");
0x00042f6e add sp, 8 |
0x00042f70 pop {r4, r5, r6, pc} |
| }
0x00042f72 movs r3, 1 | r3 = 1;
0x00042f74 movs r1, 0x64 | r1 = 0x64;
0x00042f76 str r5, [sp] | *(sp) = r5;
0x00042f78 bl 0x41a4c | fcn_00041a4c (r0, r1, r2, r3, r4);
0x00042f7c add sp, 8 |
0x00042f7e pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x42f80 */
| #include <stdint.h>
|
; (fcn) fcn.00042f80 () | void fcn_00042f80 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00042f80 push {r4, r5, r6, r7, lr} |
0x00042f82 mov r6, r2 | r6 = r2;
0x00042f84 ldr r5, [r0, 0x6c] | r5 = *((r0 + 0x6c));
0x00042f86 sub sp, 0xc |
0x00042f88 mov r4, r0 | r4 = r0;
0x00042f8a ldr r2, [r0, 0x70] | r2 = *((r0 + 0x70));
0x00042f8c cmp r5, r2 |
| if (r5 >= r2) {
0x00042f8e bge 0x42fec | goto label_0;
| }
0x00042f90 add.w ip, r5, r5, lsl 1 |
0x00042f94 ldr r7, [r0, 0x68] | r7 = *((r0 + 0x68));
0x00042f96 adds r3, r5, 1 | r3 = r5 + 1;
0x00042f98 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00042f9c lsl.w ip, ip, 3 |
0x00042fa0 str r3, [r0, 0x6c] | *((r0 + 0x6c)) = r3;
0x00042fa2 movs r2, 0 | r2 = 0;
0x00042fa4 add.w r0, r7, ip | r0 = r7 + ip;
0x00042fa8 movs r3, 0x75 | r3 = 0x75;
0x00042faa strd r1, r2, [r0, 8] | __asm ("strd r1, r2, [r0, 8]");
0x00042fae adds r0, 0x10 | r0 += 0x10;
0x00042fb0 str.w r3, [r7, ip] | __asm ("str.w r3, [r7, ip]");
0x00042fb4 str r2, [r0, -0xc] | *((r0 - 0xc)) = r2;
0x00042fb8 vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
| do {
0x00042fbc ldr r3, [r4] | r3 = *(r4);
0x00042fbe ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x00042fc2 cbnz r3, 0x42fe6 |
0x00042fc4 cmp r5, 0 |
0x00042fc6 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x00042fc8 ite lt |
| if (r5 >= 0) {
0x00042fca ldrlt r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
| }
| if (r5 < 0) {
0x00042fcc movge r3, r5 | r3 = r5;
| }
0x00042fce mov r2, r6 | r2 = r6;
0x00042fd0 mov r0, r4 | r0 = r4;
0x00042fd2 it lt |
| if (r5 >= 0) {
0x00042fd4 addlt r3, r3, -1 | r3 += -1;
| }
0x00042fd8 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00042fdc add.w r1, r1, r3, lsl 3 | r1 += (r3 << 3);
0x00042fe0 movs r3, 0 | r3 = 0;
0x00042fe2 bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
| }
0x00042fe6 mov r0, r5 | r0 = r5;
0x00042fe8 add sp, 0xc |
0x00042fea pop {r4, r5, r6, r7, pc} |
| label_0:
0x00042fec movs r2, 0 | r2 = 0;
0x00042fee mov r3, r1 | r3 = r1;
0x00042ff0 str r2, [sp] | *(sp) = r2;
0x00042ff2 movs r1, 0x75 | r1 = 0x75;
0x00042ff4 bl 0x41a4c | r0 = fcn_00041a4c (r0, r1, r2, r3, r4);
0x00042ff8 mov r5, r0 | r5 = r0;
0x00042ffa b 0x42fbc |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x42ffc */
| #include <stdint.h>
|
; (fcn) fcn.00042ffc () | void fcn_00042ffc (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042ffc push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00043000 mov r6, r2 | r6 = r2;
0x00043002 ldr r5, [r0, 0x74] | r5 = *(arg_20hx74);
0x00043004 mov r4, r1 | r4 = r1;
0x00043006 mov r7, r3 | r7 = r3;
0x00043008 ldr.w r8, [sp, 0x20] | r8 = *(arg_20h);
0x0004300c cmp r5, 0 |
0x0004300e it eq |
| if (r5 != 0) {
0x00043010 moveq r5, r0 | r5 = r0;
| }
0x00043012 ldrd r2, sb, [r5, 0x68] | __asm ("ldrd r2, sb, [r5, 0x68]");
0x00043016 cmp r2, 0 |
| if (r2 <= 0) {
0x00043018 ble 0x4304a | goto label_2;
| }
0x0004301a mov r0, sb | r0 = sb;
0x0004301c mov.w ip, 0 |
0x00043020 b 0x4302a |
| while (r3 != r4) {
| label_0:
0x00043022 cmp ip, r2 |
0x00043024 add.w r0, r0, 0x10 | r0 += 0x10;
| if (ip == r2) {
0x00043028 beq 0x4304a | goto label_2;
| }
0x0004302a ldr r3, [r0] | r3 = *(r0);
0x0004302c add.w ip, ip, 1 |
0x00043030 cmp r3, r4 |
0x00043032 bne 0x43022 |
| }
0x00043034 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00043036 cmp r3, r6 |
| if (r3 != r6) {
0x00043038 bne 0x43022 | goto label_0;
| }
0x0004303a ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0004303c orrs r3, r7 | r3 |= r7;
0x0004303e ite ne |
| if (r3 == r7) {
0x00043040 movne r3, 1 | r3 = 1;
| }
| if (r3 != r7) {
0x00043042 moveq r3, 0 | r3 = 0;
| }
0x00043044 strb r3, [r0, 8] | *((r0 + 8)) = r3;
0x00043046 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x0004304a ldr.w sl, [r5] | sl = *(r5);
0x0004304e adds r2, 1 | r2++;
0x00043050 lsls r2, r2, 4 | r2 <<= 4;
0x00043052 mov r1, sb | r1 = sb;
0x00043054 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00043056 mov r0, sl | r0 = sl;
0x00043058 bl 0x3bca8 | r0 = fcn_0003bca8 (r0, r1, r2);
| if (r0 == 0) {
0x0004305c cbz r0, 0x43078 | goto label_3;
| }
0x0004305e ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x00043060 str r0, [r5, 0x6c] | *((r5 + 0x6c)) = r0;
0x00043062 adds r2, r3, 1 | r2 = r3 + 1;
0x00043064 lsls r3, r3, 4 | r3 <<= 4;
0x00043066 str r2, [r5, 0x68] | *((r5 + 0x68)) = r2;
0x00043068 str r4, [r0, r3] | *((r0 + r3)) = r4;
0x0004306a add r0, r3 | r0 += r3;
0x0004306c str r6, [r0, 4] | *((r0 + 4)) = r6;
0x0004306e strb r7, [r0, 8] | *((r0 + 8)) = r7;
0x00043070 str.w r8, [r0, 0xc] | __asm ("str.w r8, [r0, 0xc]");
| do {
| label_1:
0x00043074 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x00043078 cmp.w sb, 0 |
| if (sb != 0) {
0x0004307c beq 0x43086 |
0x0004307e mov r1, sb | r1 = sb;
0x00043080 mov r0, sl | r0 = sl;
0x00043082 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00043086 ldr r0, [r5] | r0 = *(r5);
0x00043088 movs r3, 0 | r3 = 0;
0x0004308a strd r3, r3, [r5, 0x68] | __asm ("strd r3, r3, [r5, 0x68]");
0x0004308e ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x00043092 cmp r3, 0 |
0x00043094 bne 0x43074 |
| } while (r3 != 0);
0x00043096 ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x0004309a cmp r3, 0 |
| if (r3 != 0) {
0x0004309c bne 0x43074 | goto label_1;
| }
0x0004309e pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000430a2 b.w 0x38024 | return void (*0x38024)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x431ec */
| #include <stdint.h>
|
; (fcn) fcn.000431ec () | void fcn_000431ec (arithmetic arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000431ec push {r4, r5} |
0x000431ee mov ip, r0 |
0x000431f0 mov r4, r2 | r4 = r2;
| if (r1 != 0) {
0x000431f2 cbz r1, 0x4321c |
0x000431f4 mov r0, r1 | r0 = r1;
0x000431f6 ldrd r3, r5, [r1] | __asm ("ldrd r3, r5, [r1]");
0x000431fa cmp r3, r5 |
| if (r3 < r5) {
0x000431fc bge 0x43214 |
0x000431fe add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x00043202 movs r2, 0 | r2 = 0;
0x00043204 adds r3, 1 | r3++;
0x00043206 str r3, [r0] | *(r0) = r3;
0x00043208 str r4, [r1, 8] | *((r1 + 8)) = r4;
0x0004320a strd r2, r2, [r1, 0xc] | __asm ("strd r2, r2, [r1, 0xc]");
0x0004320e pop {r4, r5} |
0x00043210 str r2, [r1, 0x14] | *((r1 + 0x14)) = r2;
0x00043212 bx lr | return;
| }
0x00043214 pop {r4, r5} |
0x00043216 ldr.w r0, [ip] | r0 = *(ip);
0x0004321a b 0x43174 | void (*0x43174)() ();
| }
0x0004321c pop {r4, r5} |
0x0004321e mov r1, r2 | r1 = r2;
0x00043220 ldr r0, [r0] | r0 = *(r0);
0x00043222 b.w 0x384f8 | return void (*0x384f8)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4354c */
| #include <stdint.h>
|
; (fcn) fcn.0004354c () | void fcn_0004354c (arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004354c push {r4, r5, r6, r7, lr} |
0x0004354e mov r5, r2 | r5 = r2;
0x00043550 mov r2, r3 | r2 = r3;
0x00043552 ldrh r3, [r5, 8] | r3 = *((r5 + 8));
0x00043554 sub sp, 0xc |
0x00043556 mov r7, r1 | r7 = r1;
0x00043558 ldr r4, [r1, 0x34] | r4 = *((r1 + 0x34));
| if (r3 == 0) {
0x0004355a cbz r3, 0x43594 | goto label_3;
| }
| if (r4 == 0) {
0x0004355c cbz r4, 0x43584 | goto label_0;
| }
0x0004355e ldr r6, [r4] | r6 = *(r4);
0x00043560 cmp r6, r3 |
| if (r6 >= r3) {
0x00043562 bge 0x435b0 | goto label_4;
| }
0x00043564 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00043566 adds r3, r6, 1 | r3 = r6 + 1;
0x00043568 strh r3, [r5, 8] | *((r5 + 8)) = r3;
0x0004356a cmp r1, r6 |
| if (r1 <= r6) {
0x0004356c ble 0x435a4 | goto label_5;
| }
| label_1:
0x0004356e add.w r6, r4, r6, lsl 4 | r6 = r4 + (r6 << 4);
0x00043572 movs r1, 0 | r1 = 0;
0x00043574 str r3, [r4] | *(r4) = r3;
0x00043576 strd r1, r1, [r6, 0xc] | __asm ("strd r1, r1, [r6, 0xc]");
0x0004357a str r1, [r6, 0x14] | *((r6 + 0x14)) = r1;
0x0004357c str r2, [r6, 8] | *((r6 + 8)) = r2;
| do {
| label_2:
0x0004357e str r4, [r7, 0x34] | *((r7 + 0x34)) = r4;
0x00043580 add sp, 0xc |
0x00043582 pop {r4, r5, r6, r7, pc} |
| label_0:
0x00043584 movs r3, 1 | r3 = 1;
0x00043586 ldr r0, [r0] | r0 = *(r0);
0x00043588 mov r1, r2 | r1 = r2;
0x0004358a strh r3, [r5, 8] | *((r5 + 8)) = r3;
0x0004358c bl 0x384f8 | r0 = fcn_000384f8 (r0, r1);
0x00043590 mov r4, r0 | r4 = r0;
0x00043592 b 0x4357e |
| } while (1);
| label_3:
0x00043594 cmp r4, 0 |
| if (r4 == 0) {
0x00043596 beq 0x43584 | goto label_0;
| }
0x00043598 ldr r6, [r4] | r6 = *(r4);
0x0004359a ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0004359c adds r3, r6, 1 | r3 = r6 + 1;
0x0004359e cmp r1, r6 |
0x000435a0 strh r3, [r5, 8] | *((r5 + 8)) = r3;
| if (r1 > r6) {
0x000435a2 bgt 0x4356e | goto label_1;
| }
| label_5:
0x000435a4 mov r1, r4 | r1 = r4;
0x000435a6 ldr r0, [r0] | r0 = *(r0);
0x000435a8 bl 0x43174 | r0 = fcn_00043174 (r0, r1, r2);
0x000435ac mov r4, r0 | r4 = r0;
0x000435ae b 0x4357e | goto label_2;
| label_4:
0x000435b0 subs r3, 1 | r3--;
0x000435b2 lsls r3, r3, 4 | r3 <<= 4;
0x000435b4 adds r1, r4, r3 | r1 = r4 + r3;
0x000435b6 ldr r1, [r1, 8] | r1 = *((r1 + 8));
| if (r1 != 0) {
0x000435b8 cbz r1, 0x435ca |
0x000435ba ldr r0, [r0] | r0 = *(r0);
0x000435bc str r2, [sp, 4] | var_4h = r2;
0x000435be bl 0x30c30 | fcn_00030c30 (r0, r1);
0x000435c2 ldrh r3, [r5, 8] | r3 = *((r5 + 8));
0x000435c4 ldr r2, [sp, 4] | r2 = var_4h;
0x000435c6 subs r3, 1 | r3--;
0x000435c8 lsls r3, r3, 4 | r3 <<= 4;
| }
0x000435ca add r4, r3 | r4 += r3;
0x000435cc str r2, [r4, 8] | *((r4 + 8)) = r2;
0x000435ce add sp, 0xc |
0x000435d0 pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x438fc */
| #include <stdint.h>
|
; (fcn) fcn.000438fc () | void fcn_000438fc (int16_t arg1, arithmetic arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000438fc push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00043900 mov r5, r1 | r5 = r1;
0x00043902 ldr r4, [r1, 0x1c] | r4 = *((r1 + 0x1c));
0x00043904 sub sp, 0x14 |
0x00043906 mov r6, r0 | r6 = r0;
0x00043908 mov r8, r2 | r8 = r2;
0x0004390a ands r4, r4, 0x10000 | r4 &= 0x10000;
| if (r4 != r4) {
0x0004390e bne 0x43940 | goto label_3;
| }
0x00043910 ldr r7, [r1, 0xc] | r7 = *((r1 + 0xc));
0x00043912 cmp r7, 0 |
| if (r7 == 0) {
0x00043914 beq 0x439be | goto label_4;
| }
| label_0:
0x00043916 mov r0, r7 | r0 = r7;
0x00043918 blx 0x65dc | r0 = strcmp (r0, r1);
0x0004391c bics r3, r0, 0xc0000000 | __asm ("bics r3, r0, 0xc0000000");
| if (r7 == 0) {
0x00043920 beq 0x4393a | goto label_2;
| }
0x00043922 cmp.w r8, 0 |
| if (r8 == 0) {
0x00043926 beq 0x439ac | goto label_5;
| }
0x00043928 movs r1, 0 | r1 = 0;
0x0004392a mov r2, r8 | r2 = r8;
0x0004392c str r1, [sp] | *(sp) = r1;
0x0004392e mov r0, r6 | r0 = r6;
0x00043930 movs r1, 0x60 | r1 = 0x60;
0x00043932 strd r7, r3, [sp, 4] | __asm ("strd r7, r3, [var_4h]");
0x00043936 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
| do {
| label_2:
0x0004393a add sp, 0x14 |
0x0004393c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| if (r2 == 0) {
| label_3:
0x00043940 cbnz r2, 0x4397a |
0x00043942 ldr r3, [r0] | r3 = *(r0);
0x00043944 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00043948 cmp r3, 0 |
| if (r3 != 0) {
0x0004394a bne 0x43a18 | goto label_6;
| }
0x0004394c ldrd r1, r3, [r0, 0x68] | __asm ("ldrd r1, r3, [r0, 0x68]");
0x00043950 movs r2, 0xfb | r2 = 0xfb;
0x00043952 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00043956 lsls r3, r3, 3 | r3 <<= 3;
0x00043958 subs r3, 0x18 | r3 -= 0x18;
0x0004395a add r1, r3 | r1 += r3;
0x0004395c strb r2, [r1, 1] | *((r1 + 1)) = r2;
0x0004395e str r5, [r1, 0x10] | *((r1 + 0x10)) = r5;
| label_1:
0x00043960 ldr r4, [r1, 0xc] | r4 = *((r1 + 0xc));
0x00043962 movs r0, 0x5f | r0 = 0x5f;
0x00043964 ldrd r2, r3, [r1, 4] | __asm ("ldrd r2, r3, [r1, 4]");
0x00043968 strb r0, [r1] | *(r1) = r0;
0x0004396a movs r1, 0x61 | r1 = 0x61;
0x0004396c mov r0, r6 | r0 = r6;
0x0004396e str r4, [sp] | *(sp) = r4;
0x00043970 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00043974 add sp, 0x14 |
0x00043976 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
0x0004397a movs r3, 0 | r3 = 0;
0x0004397c str r3, [sp] | *(sp) = r3;
0x0004397e ldrsh.w r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x00043982 movs r1, 0x5f | r1 = 0x5f;
0x00043984 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00043988 ldr r3, [r6] | r3 = *(r6);
0x0004398a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0004398e cmp r3, 0 |
0x00043990 bne 0x4393a |
| } while (r3 != 0);
0x00043992 ldrd r2, r3, [r6, 0x68] | __asm ("ldrd r2, r3, [r6, 0x68]");
0x00043996 movs r1, 0xfb | r1 = 0xfb;
0x00043998 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004399c lsls r3, r3, 3 | r3 <<= 3;
0x0004399e subs r3, 0x18 | r3 -= 0x18;
0x000439a0 add r3, r2 | r3 += r2;
0x000439a2 strb r1, [r3, 1] | *((r3 + 1)) = r1;
0x000439a4 str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x000439a6 add sp, 0x14 |
0x000439a8 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_5:
0x000439ac mov r2, r7 | r2 = r7;
0x000439ae mov.w r1, -1 | r1 = -1;
0x000439b0 adds r1, 0xff | r1 += 0xff;
0x000439b2 mov r0, r6 | r0 = r6;
0x000439b4 add sp, 0x14 |
0x000439b6 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000439ba b.w 0x395c0 | void (*0x395c0)() ();
| label_4:
0x000439be ldr.w sb, [r0] | sb = *(r0);
0x000439c2 ldrsh.w r0, [r1, 0x22] | r0 = *((r1 + 0x22));
0x000439c6 adds r0, 1 | r0++;
0x000439c8 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x000439ca bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000439ce mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x000439d0 cbz r0, 0x43a20 | goto label_7;
| }
0x000439d2 ldrsh.w ip, [r5, 0x22] | ip = *((r5 + 0x22));
0x000439d6 mov r3, r4 | r3 = r4;
0x000439d8 cmp.w ip, 0 |
0x000439dc it gt |
| if (ip <= 0) {
0x000439de movgt r1, r4 | r1 = r4;
| }
| if (ip <= 0) {
0x000439e0 ble 0x439fe | goto label_8;
| }
| do {
0x000439e2 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000439e4 adds r1, 1 | r1++;
0x000439e6 add r2, r4 | r2 += r4;
0x000439e8 adds r4, 0xc | r4 += 0xc;
0x000439ea ldrh r0, [r2, 0xa] | r0 = *((r2 + 0xa));
0x000439ec lsls r0, r0, 0x1a | r0 <<= 0x1a;
0x000439ee itttt pl |
| if (r0 < r0) {
0x000439f0 ldrbpl r2, [r2, 5] | r2 = *((r2 + 5));
| }
| if (r0 < r0) {
0x000439f2 strbpl r2, [r7, r3] | *((r7 + r3)) = r2;
| }
| if (r0 < r0) {
0x000439f4 addpl r3, 1 | r3++;
| }
| if (r0 >= r0) {
0x000439f6 ldrshpl ip, [r5, 0x22] | __asm ("ldrshpl ip, [r5, 0x22]");
| }
0x000439fa cmp ip, r1 |
0x000439fc bgt 0x439e2 |
| } while (ip > r1);
| label_8:
0x000439fe add r3, r7 | r3 += r7;
0x00043a00 movs r0, 0 | r0 = 0;
0x00043a02 b 0x43a0a |
| while (r7 != r3) {
0x00043a04 ldrb r2, [r3] | r2 = *(r3);
0x00043a06 cmp r2, 0x41 |
| if (r2 > 0x41) {
0x00043a08 bhi 0x43a14 | goto label_9;
| }
0x00043a0a cmp r7, r3 |
0x00043a0c strb r0, [r3] | *(r3) = r0;
0x00043a0e add.w r3, r3, -1 | r3 += -1;
0x00043a12 bne 0x43a04 |
| }
| label_9:
0x00043a14 str r7, [r5, 0xc] | *((r5 + 0xc)) = r7;
0x00043a16 b 0x43916 | goto label_0;
| label_6:
0x00043a18 ldr r1, [pc, 0x20] |
0x00043a1a add r1, pc | r1 = 0x8745a;
0x00043a1c adds r1, 4 | r1 += 4;
0x00043a1e b 0x43960 | goto label_1;
| label_7:
0x00043a20 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x00043a24 cmp r3, 0 |
| if (r3 != 0) {
0x00043a26 bne 0x4393a | goto label_2;
| }
0x00043a28 ldrb.w r3, [sb, 0x58] | r3 = *((sb + 0x58));
0x00043a2c cmp r3, 0 |
| if (r3 != 0) {
0x00043a2e bne 0x4393a | goto label_2;
| }
0x00043a30 mov r0, sb | r0 = sb;
0x00043a32 add sp, 0x14 |
0x00043a34 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00043a38 b.w 0x38024 | return void (*0x38024)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x44138 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00044138 () | void fcn_00044138 (int16_t arg_4ch, int16_t arg_d0h, int16_t arg_58h, int16_t arg1, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_54h;
| r0 = arg1;
| r3 = arg4;
0x00044138 sub sp, 8 |
0x0004413a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004413e sub sp, 0x2c |
0x00044140 str r3, [sp, 0x54] | var_54h = r3;
0x00044142 add r4, sp, 0x20 | r4 += var_20h;
0x00044144 ldr r3, [r0] | r3 = *(r0);
0x00044146 ldr.w sl, [r0, 0xec] | sl = *(arg_58hxec);
0x0004414a stm.w r4, {r1, r2} | *(r4) = r1;
| *((r4 + 4)) = r2;
0x0004414e str r3, [sp, 8] | var_8h = r3;
0x00044150 cmp.w sl, 0 |
| if (sl == 0) {
0x00044154 beq.w 0x442e2 | goto label_5;
| }
0x00044158 ldrsh.w r2, [sl, 0x22] | r2 = *((sl + 0x22));
0x0004415c ldr.w r3, [r3, 0x80] | r3 = *((r3 + 0x80));
0x00044160 cmp r2, r3 |
| if (r2 >= r3) {
0x00044162 bge.w 0x444b4 | goto label_12;
| }
0x00044166 ldrb.w r3, [r0, 0xd0] | r3 = *(arg_58hxd0);
0x0004416a mov fp, r0 |
0x0004416c cmp r3, 1 |
| if (r3 < 1) {
0x0004416e bls.w 0x443de | goto label_13;
| }
0x00044172 ldr r5, [sp, 0x58] | r5 = *(arg_58h);
0x00044174 cmp r5, 0xf |
| if (r5 > 0xf) {
0x00044176 bhi.w 0x442ec | goto label_7;
| }
| label_6:
0x0004417a cmp r5, 2 |
| if (r5 > 2) {
0x0004417c bhi.w 0x44352 | goto label_14;
| }
| label_1:
0x00044180 subs r1, r5, 0 | r1 = r5 - 0;
0x00044182 mov.w r3, 0x41 | r3 = 0x41;
0x00044186 mov r6, r5 | r6 = r5;
0x00044188 it ne |
| if (r1 == r5) {
0x0004418a movne r1, 1 | r1 = 1;
| }
0x0004418c movs r0, 1 | r0 = 1;
0x0004418e str r3, [sp, 0x1c] | var_1ch = r3;
0x00044190 movs r3, 0 | r3 = 0;
0x00044192 strd r3, r0, [sp, 0xc] | __asm ("strd r3, r0, [var_ch]");
| label_3:
0x00044196 ldr r7, [sp, 0x24] | r7 = var_24h;
0x00044198 movs r3, 0 | r3 = 0;
0x0004419a ldr r0, [sp, 8] | r0 = var_8h;
0x0004419c adds r2, r7, 1 | r2 = r7 + 1;
0x0004419e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000441a2 adds r2, r2, r6 | r2 += r6;
0x000441a4 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000441a8 adds r2, r2, r1 | r2 += r1;
0x000441aa adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000441ae bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x000441b2 mov r6, r0 | r6 = r0;
0x000441b4 cmp r0, 0 |
| if (r0 == 0) {
0x000441b6 beq.w 0x442e2 | goto label_5;
| }
0x000441ba ldrb.w r3, [fp, 0xd0] | r3 = *(arg_d0h);
0x000441be cmp r3, 3 |
0x000441c0 it ne |
| if (r3 != 3) {
0x000441c2 cmpne r3, 1 | __asm ("cmpne r3, 1");
| }
| if (r3 > 3) {
0x000441c4 bhi.w 0x444ca | goto label_15;
| }
0x000441c6 strh r1, [r0, 0xc] | *((r0 + 0xc)) = r1;
| label_8:
0x000441c8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000441ca mov r2, r7 | r2 = r7;
0x000441cc mov r0, r6 | r0 = r6;
0x000441ce movs r4, 0 | r4 = 0;
0x000441d0 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000441d4 mov r0, r6 | r0 = r6;
0x000441d6 strb r4, [r6, r7] | *((r6 + r7)) = r4;
0x000441d8 bl 0x21524 | fcn_00021524 (r0);
0x000441dc ldrb r3, [r6] | r3 = *(r6);
0x000441de cmp r3, 0 |
| if (r3 == 0) {
0x000441e0 beq.w 0x44522 | goto label_16;
| }
0x000441e4 ldr r1, [pc, 0x35c] |
0x000441e6 mov r2, r6 | r2 = r6;
0x000441e8 add r1, pc | r1 = 0x88730;
| do {
0x000441ea add r3, r1 | r3 += r1;
0x000441ec ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000441f0 add r4, r3 | r4 += r3;
0x000441f2 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x000441f6 uxtb r4, r4 | r4 = (int8_t) r4;
0x000441f8 cmp r3, 0 |
0x000441fa bne 0x441ea |
| } while (r3 != 0);
| label_11:
0x000441fc ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x00044200 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x00044204 cmp r3, 0 |
| if (r3 <= 0) {
0x00044206 ble 0x44268 | goto label_17;
| }
0x00044208 ldr r0, [pc, 0x33c] |
0x0004420a add.w sb, r3, r3, lsl 1 | sb = r3 + (r3 << 1);
0x0004420e strd sl, r3, [sp, 0x14] | __asm ("strd sl, r3, [var_14h]");
0x00044212 movs r7, 0 | r7 = 0;
0x00044214 add.w r8, r1, 7 | r8 = r1 + 7;
0x00044218 mov r3, r5 | r3 = r5;
0x0004421a add r0, pc | r0 = 0x88766;
0x0004421c str r4, [sp, 4] | var_4h = r4;
0x0004421e b 0x44226 |
| while (r2 != r4) {
| label_0:
0x00044220 adds r7, 3 | r7 += 3;
0x00044222 cmp r7, sb |
| if (r7 == sb) {
0x00044224 beq 0x4425e | goto label_18;
| }
0x00044226 ldrb.w r2, [r8, r7, lsl 2] | offset_0 = r7 << 2;
| r2 = *((r8 + offset_0));
0x0004422a ldr r4, [sp, 4] | r4 = var_4h;
0x0004422c cmp r2, r4 |
0x0004422e bne 0x44220 |
| }
0x00044230 ldr.w r5, [r1, r7, lsl 2] | offset_1 = r7 << 2;
| r5 = *((r1 + offset_1));
0x00044234 add.w ip, r6, -1 |
0x00044238 subs r5, 1 | r5--;
| do {
| label_4:
0x0004423a ldrb r2, [ip, 1]! | r2 = *((ip += 1));
0x0004423e ldrb r4, [r5, 1]! | r4 = *((r5 += 1));
0x00044242 add.w sl, r0, r2 | sl = r0 + r2;
0x00044246 cmp r2, r4 |
0x00044248 add.w lr, r0, r4 | lr = r0 + r4;
| if (r2 == r4) {
0x0004424c beq.w 0x443c2 | goto label_19;
| }
0x00044250 ldrb.w r2, [sl, 0x140] | r2 = *((sl + 0x140));
0x00044254 ldrb.w r4, [lr, 0x140] | r4 = *((lr + 0x140));
0x00044258 cmp r2, r4 |
0x0004425a beq 0x4423a |
| } while (r2 == r4);
0x0004425c b 0x44220 | goto label_0;
| label_18:
0x0004425e mov r5, r3 | r5 = r3;
0x00044260 ldr.w sl, [sp, 0x14] | sl = var_14h;
0x00044264 ldr r4, [sp, 4] | r4 = var_4h;
0x00044266 ldr r3, [sp, 0x18] | r3 = var_18h;
| label_17:
0x00044268 asrs r0, r3, 0x1f | r0 = r3 >> 0x1f;
0x0004426a adds r3, 1 | r3++;
0x0004426c adc r0, r0, 0 | __asm ("adc r0, r0, 0");
0x00044270 adds r2, r3, r3 | r2 = r3 + r3;
0x00044272 adc.w r7, r0, r0 | __asm ("adc.w r7, r0, r0");
0x00044276 adds r2, r2, r3 | r2 += r3;
0x00044278 adc.w r3, r0, r7 | __asm ("adc.w r3, r0, r7");
0x0004427c ldr r0, [sp, 8] | r0 = var_8h;
0x0004427e lsls r3, r3, 2 | r3 <<= 2;
0x00044280 orr.w r3, r3, r2, lsr 30 | r3 |= (r2 >> 30);
0x00044284 lsls r2, r2, 2 | r2 <<= 2;
0x00044286 bl 0x3bca8 | r0 = fcn_0003bca8 (r0, r1, r2);
0x0004428a cmp r0, 0 |
| if (r0 == 0) {
0x0004428c beq.w 0x44510 | goto label_20;
| }
0x00044290 ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x00044294 mov.w r8, 0 | r8 = 0;
0x00044298 str.w r0, [sl, 4] | __asm ("str.w r0, [sl, 4]");
0x0004429c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000442a0 lsls r3, r3, 2 | r3 <<= 2;
0x000442a2 adds r7, r0, r3 | r7 = r0 + r3;
0x000442a4 str.w r8, [r7, 4] | __asm ("str.w r8, [r7, 4]");
0x000442a8 str.w r8, [r7, 8] | __asm ("str.w r8, [r7, 8]");
0x000442ac str r6, [r0, r3] | *((r0 + r3)) = r6;
0x000442ae strb r4, [r7, 7] | *((r7 + 7)) = r4;
0x000442b0 cmp r5, 0 |
| if (r5 != 0) {
0x000442b2 bne.w 0x444d6 | goto label_21;
| }
0x000442b6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000442b8 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000442ba strb r3, [r7, 5] | *((r7 + 5)) = r3;
0x000442bc ldr r3, [sp, 0x10] | r3 = var_10h;
0x000442be strb r3, [r7, 6] | *((r7 + 6)) = r3;
0x000442c0 ldrb r3, [r7, 4] | r3 = *((r7 + 4));
0x000442c2 bfi r3, r2, 4, 4 | value_2 = BIT_MASK (4, 4);
| value_3 = r2 & value_2;
| value_2 = ~value_2;
| r3 &= value_2;
| r3 |= value_3;
0x000442c6 strb r3, [r7, 4] | *((r7 + 4)) = r3;
| label_9:
0x000442c8 ldrh.w r2, [sl, 0x22] | r2 = *((sl + 0x22));
0x000442cc movs r1, 0 | r1 = 0;
0x000442ce ldrh.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x000442d2 adds r2, 1 | r2++;
0x000442d4 adds r3, 1 | r3++;
0x000442d6 strh.w r2, [sl, 0x22] | *((sl + 0x22)) = r2;
0x000442da strh.w r3, [sl, 0x24] | *((sl + 0x24)) = r3;
0x000442de str.w r1, [fp, 0x4c] | __asm ("str.w r1, [arg_4ch]");
| label_5:
0x000442e2 add sp, 0x2c |
0x000442e4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000442e8 add sp, 8 |
0x000442ea bx lr | return;
| label_7:
0x000442ec ldr.w lr, [sp, 0x54] | lr = var_54h;
0x000442f0 subs r5, 6 | r5 -= 6;
0x000442f2 ldr r1, [pc, 0x258] |
0x000442f4 movs r0, 5 | r0 = 5;
0x000442f6 ldr r7, [pc, 0x258] |
0x000442f8 add.w r8, lr, r5 | r8 = lr + r5;
0x000442fc str.w lr, [sp, 4] | __asm ("str.w lr, [var_4h]");
0x00044300 add r1, pc | r1 = 0x88852;
0x00044302 mov r2, r8 | r2 = r8;
0x00044304 add r7, pc | r7 = 0x8885a;
0x00044306 b 0x4431e |
| while (r3 != 0) {
0x00044308 ldrb.w r3, [ip] | r3 = *(ip);
0x0004430c ldrb.w lr, [lr, 0x140] |
0x00044310 add r3, r7 | r3 += r7;
0x00044312 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x00044316 cmp lr, r3 |
| if (lr != r3) {
0x00044318 bne 0x44332 | goto label_22;
| }
0x0004431a adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x0004431c beq 0x443ee | goto label_23;
| }
0x0004431e mov sb, r2 | sb = r2;
0x00044320 ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x00044324 mov ip, r1 |
0x00044326 subs r0, 1 | r0--;
0x00044328 adds r1, 1 | r1++;
0x0004432a add.w lr, r7, r3 | lr = r7 + r3;
0x0004432e cmp r3, 0 |
0x00044330 bne 0x44308 |
| }
| label_22:
0x00044332 ldr r3, [pc, 0x220] |
0x00044334 ldrb.w r2, [sb] | r2 = *(sb);
0x00044338 ldrb.w r1, [ip] | r1 = *(ip);
0x0004433c add r3, pc | r3 = 0x88896;
0x0004433e ldr.w lr, [sp, 4] | lr = var_4h;
0x00044342 add r2, r3 | r2 += r3;
0x00044344 add r3, r1 | r3 += r1;
0x00044346 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x00044348 movs r1, 0x40 | r1 = 0x40;
0x0004434a ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004434e cmp r2, r3 |
| if (r2 == r3) {
0x00044350 beq 0x443f2 | goto label_24;
| }
| label_14:
0x00044352 ldr r7, [pc, 0x204] |
0x00044354 add r0, sp, 0x54 | r0 += var_54h;
0x00044356 ldr.w sb, [pc, 0x204] |
0x0004435a movs r6, 0 | r6 = 0;
0x0004435c bl 0x21574 | fcn_00021574 (r0);
0x00044360 add r7, pc | r7 = 0x888be;
0x00044362 ldr r5, [sp, 0x58] | r5 = *(arg_58h);
0x00044364 ldr.w r8, [sp, 0x54] | r8 = var_54h;
0x00044366 strh r4, [r2, 2] | *((r2 + 2)) = r4;
0x00044368 addw r7, r7, 0x72c | __asm ("addw r7, r7, 0x72c");
0x0004436c add sb, pc | sb = 0x888ce;
0x0004436e b 0x44378 | goto label_25;
| label_2:
0x00044370 adds r6, 1 | r6++;
0x00044372 cmp r6, 6 |
| if (r6 == 6) {
0x00044374 beq.w 0x44180 | goto label_1;
| }
| label_25:
0x00044378 ldrb r3, [r7], 1 | r3 = *(r7);
| r7++;
0x0004437c cmp r5, r3 |
| if (r5 != r3) {
0x0004437e bne 0x44370 | goto label_2;
| }
0x00044380 ldr.w r1, [sb, r6, lsl 2] | offset_4 = r6 << 2;
| r1 = *((sb + offset_4));
0x00044384 cmp.w r8, 0 |
| if (r8 == 0) {
0x00044388 beq.w 0x4451a | goto label_26;
| }
0x0004438c cmp r1, 0 |
| if (r1 == 0) {
0x0004438e beq 0x44370 | goto label_2;
| }
0x00044390 mov r2, r5 | r2 = r5;
0x00044392 mov r0, r8 | r0 = r8;
0x00044394 bl 0x27334 | r0 = fcn_00027334 (r0, r1, r2);
0x00044398 cmp r0, 0 |
| if (r0 != 0) {
0x0004439a bne 0x44370 | goto label_2;
| }
| label_10:
0x0004439c ldr r3, [pc, 0x1c0] |
0x0004439e movs r1, 0 | r1 = 0;
0x000443a0 str r1, [sp, 0x58] | *(arg_58h) = r1;
0x000443a2 add r3, pc | r3 = 0x88906;
0x000443a4 add r3, r6 | r3 += r6;
0x000443a6 adds r6, 1 | r6++;
0x000443a8 ldrb.w r3, [r3, 0x734] | r3 = *((r3 + 0x734));
0x000443ac uxtb r2, r6 | r2 = (int8_t) r6;
0x000443ae str r2, [sp, 0xc] | var_ch = r2;
0x000443b0 cmp r3, 0x42 |
0x000443b2 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r3 > 0x42) {
0x000443b4 bhi.w 0x4452a | goto label_27;
| }
0x000443b8 movs r3, 5 | r3 = 5;
0x000443ba mov r6, r1 | r6 = r1;
0x000443bc mov r5, r1 | r5 = r1;
0x000443be str r3, [sp, 0x10] | var_10h = r3;
0x000443c0 b 0x44196 | goto label_3;
| label_19:
0x000443c2 cmp r2, 0 |
| if (r2 != 0) {
0x000443c4 bne.w 0x4423a | goto label_4;
| }
0x000443c8 ldr r1, [pc, 0x198] |
0x000443ca mov r0, fp | r0 = fp;
0x000443cc mov r2, r6 | r2 = r6;
0x000443ce add r1, pc | r1 = 0x88936;
0x000443d0 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000443d4 ldr r0, [sp, 8] | r0 = var_8h;
0x000443d6 mov r1, r6 | r1 = r6;
0x000443d8 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000443dc b 0x442e2 | goto label_5;
| label_13:
0x000443de mov r0, r4 | r0 = r4;
0x000443e0 bl 0x21574 | fcn_00021574 (r0);
0x000443e4 ldr r5, [sp, 0x58] | r5 = *(arg_58h);
0x000443e6 cmp r5, 0xf |
| if (r5 < 0xf) {
0x000443e8 bls.w 0x4417a | goto label_6;
| }
0x000443ec b 0x442ec | goto label_7;
| label_23:
0x000443ee ldr.w lr, [sp, 4] | lr = var_4h;
| label_24:
0x000443f2 ldr r0, [pc, 0x174] |
0x000443f4 movs r1, 0 | r1 = 0;
0x000443f6 str r5, [sp, 0x58] | *(arg_58h) = r5;
0x000443f8 add r0, pc | r0 = 0x88966;
0x000443fa b 0x44406 |
| while (r3 != r3) {
0x000443fc mov r6, r5 | r6 = r5;
0x000443fe movs r1, 1 | r1 = 1;
0x00044400 cmp r5, 0 |
| if (r5 == 0) {
0x00044402 beq.w 0x4450a | goto label_28;
| }
0x00044406 ldrb r3, [r8, -0x1]! | r3 = *((r8 -= 0x1));
0x0004440a mov r2, r5 | r2 = r5;
0x0004440c subs r5, 1 | r5--;
0x0004440e add r3, r0 | r3 += r0;
0x00044410 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00044414 ands r3, r3, 1 | r3 &= 1;
0x00044418 bne 0x443fc |
| }
0x0004441a str r3, [sp, 0xc] | var_ch = r3;
| if (r1 != 0) {
0x0004441c cbz r1, 0x44420 |
0x0004441e str r6, [sp, 0x58] | *(arg_58h) = r6;
| }
0x00044420 cmp r2, 8 |
| if (r2 < 8) {
0x00044422 bls 0x4450c | goto label_29;
| }
0x00044424 sub.w r7, r2, 9 | r7 = r2 - 9;
0x00044428 adds.w lr, lr, r7 | lr += r7;
| if (lr == lr) {
0x0004442c beq 0x4450c | goto label_29;
| }
0x0004442e ldr r1, [pc, 0x13c] |
0x00044430 mov r2, lr | r2 = lr;
0x00044432 ldr r6, [pc, 0x13c] |
0x00044434 movs r0, 8 | r0 = 8;
0x00044436 add r1, pc | r1 = 0x889a8;
0x00044438 add r6, pc | r6 = 0x889ae;
0x0004443a b 0x44452 |
| while (r3 != 0) {
0x0004443c add r3, r6 | r3 += r6;
0x0004443e ldrb.w r8, [r3, 0x140] | r8 = *((r3 + 0x140));
0x00044442 ldrb r3, [r5] | r3 = *(r5);
0x00044444 add r3, r6 | r3 += r6;
0x00044446 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004444a cmp r8, r3 |
| if (r8 != r3) {
0x0004444c bne 0x44462 | goto label_30;
| }
0x0004444e adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x00044450 beq 0x4447c | goto label_31;
| }
0x00044452 mov ip, r2 |
0x00044454 ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x00044458 mov r5, r1 | r5 = r1;
0x0004445a subs r0, 1 | r0--;
0x0004445c adds r1, 1 | r1++;
0x0004445e cmp r3, 0 |
0x00044460 bne 0x4443c |
| }
| label_30:
0x00044462 ldr r3, [pc, 0x110] |
0x00044464 ldrb.w r2, [ip] | r2 = *(ip);
0x00044468 ldrb r1, [r5] | r1 = *(r5);
0x0004446a add r3, pc | r3 = 0x889e4;
0x0004446c add r2, r3 | r2 += r3;
0x0004446e add r3, r1 | r3 += r1;
0x00044470 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x00044474 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x00044478 cmp r2, r3 |
| if (r2 != r3) {
0x0004447a bne 0x4450c | goto label_29;
| }
| label_31:
0x0004447c str r7, [sp, 0x58] | *(arg_58h) = r7;
0x0004447e cmp r7, 0 |
| if (r7 == 0) {
0x00044480 beq 0x44534 | goto label_32;
| }
0x00044482 ldr r1, [pc, 0xf4] |
0x00044484 mov r5, r7 | r5 = r7;
0x00044486 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00044488 movs r2, 0 | r2 = 0;
0x0004448a add r1, pc | r1 = 0x88a08;
0x0004448c b 0x44496 |
| while (r6 < r3) {
0x0004448e mov r0, r5 | r0 = r5;
0x00044490 movs r2, 1 | r2 = 1;
0x00044492 cmp r5, 0 |
| if (r5 == 0) {
0x00044494 beq 0x44526 | goto label_33;
| }
0x00044496 ldrb r3, [lr, -0x1]! | r3 = *((lr -= 0x1));
0x0004449a subs r5, 1 | r5--;
0x0004449c add r3, r1 | r3 += r1;
0x0004449e ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000444a2 lsls r6, r3, 0x1f | r6 = r3 << 0x1f;
0x000444a4 bmi 0x4448e |
| }
0x000444a6 mov r5, r7 | r5 = r7;
0x000444a8 cmp r2, 0 |
| if (r2 == 0) {
0x000444aa beq.w 0x4417a | goto label_6;
| }
0x000444ae mov r5, r0 | r5 = r0;
0x000444b0 str r0, [sp, 0x58] | *(arg_58h) = r0;
0x000444b2 b 0x4417a | goto label_6;
| label_12:
0x000444b4 ldr r1, [pc, 0xc4] |
0x000444b6 ldr.w r2, [sl] | r2 = *(sl);
0x000444ba add r1, pc | r1 = 0x88a3a;
0x000444bc bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000444c0 add sp, 0x2c |
0x000444c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000444c6 add sp, 8 |
0x000444c8 bx lr | return;
| label_15:
0x000444ca mov r1, r0 | r1 = r0;
0x000444cc mov r2, r4 | r2 = r4;
0x000444ce mov r0, fp | r0 = fp;
0x000444d0 bl 0x39874 | fcn_00039874 (r0, r1, r2);
0x000444d4 b 0x441c8 | goto label_8;
| label_21:
0x000444d6 mov r0, r6 | r0 = r6;
0x000444d8 blx 0x65dc | r0 = strcmp (r0, r1);
0x000444dc bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x000444e0 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000444e2 adds r3, 1 | r3++;
0x000444e4 mov r2, r5 | r2 = r5;
0x000444e6 add r6, r3 | r6 += r3;
0x000444e8 mov r0, r6 | r0 = r6;
0x000444ea blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000444ee mov r0, r6 | r0 = r6;
0x000444f0 strb.w r8, [r6, r5] | *((r6 + r5)) = r8;
0x000444f4 bl 0x21524 | fcn_00021524 (r0);
0x000444f8 mov r1, r7 | r1 = r7;
0x000444fa bl 0x2529c | fcn_0002529c (r0, r1);
0x000444fe ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x00044500 strb r0, [r7, 5] | *((r7 + 5)) = r0;
0x00044502 orr r3, r3, 4 | r3 |= 4;
0x00044506 strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
0x00044508 b 0x442c8 | goto label_9;
| label_28:
0x0004450a str r5, [sp, 0x58] | *(arg_58h) = r5;
| label_29:
0x0004450c ldr r5, [sp, 0x58] | r5 = *(arg_58h);
0x0004450e b 0x4417a | goto label_6;
| label_20:
0x00044510 ldr r0, [sp, 8] | r0 = var_8h;
0x00044512 mov r1, r6 | r1 = r6;
0x00044514 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00044518 b 0x442e2 | goto label_5;
| label_26:
0x0004451a cmp r1, 0 |
| if (r1 != 0) {
0x0004451c bne.w 0x44370 | goto label_2;
| }
0x00044520 b 0x4439c | goto label_10;
| label_16:
0x00044522 mov r4, r3 | r4 = r3;
0x00044524 b 0x441fc | goto label_11;
| label_33:
0x00044526 str r5, [sp, 0x58] | *(arg_58h) = r5;
0x00044528 b 0x44180 | goto label_1;
| label_27:
0x0004452a movs r3, 1 | r3 = 1;
0x0004452c mov r6, r1 | r6 = r1;
0x0004452e mov r5, r1 | r5 = r1;
0x00044530 str r3, [sp, 0x10] | var_10h = r3;
0x00044532 b 0x44196 | goto label_3;
| label_32:
0x00044534 movs r3, 0x41 | r3 = 0x41;
0x00044536 mov r5, r7 | r5 = r7;
0x00044538 str r3, [sp, 0x1c] | var_1ch = r3;
0x0004453a movs r3, 1 | r3 = 1;
0x0004453c mov r1, r7 | r1 = r7;
0x0004453e mov r6, r7 | r6 = r7;
0x00044540 str r3, [sp, 0x10] | var_10h = r3;
0x00044542 b 0x44196 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x447b0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000447b0 () | void fcn_000447b0 (int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000447b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000447b4 sub sp, 0x3c |
0x000447b6 mov r8, r3 | r8 = r3;
0x000447b8 ldr.w sb, [r0, 0xec] | sb = *(arg_60hxec);
0x000447bc ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x000447be ldr.w sl, [r0] | sl = *(r0);
0x000447c2 str r1, [sp, 0x18] | var_18h = r1;
0x000447c4 str r3, [sp, 0x2c] | var_2ch = r3;
0x000447c6 cmp.w sb, 0 |
| if (sb == 0) {
0x000447ca beq.w 0x449b8 | goto label_17;
| }
0x000447ce ldrb.w r3, [r0, 0xd0] | r3 = *(arg_60hxd0);
0x000447d2 mov r7, r0 | r7 = r0;
0x000447d4 cmp r3, 1 |
| if (r3 == 1) {
0x000447d6 beq.w 0x449b8 | goto label_17;
| }
0x000447da mov r5, r2 | r5 = r2;
0x000447dc cmp r1, 0 |
| if (r1 == 0) {
0x000447de beq.w 0x44a42 | goto label_20;
| }
0x000447e2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000447e4 ldr r6, [r3] | r6 = *(r3);
0x000447e6 cmp.w r8, 0 |
| if (r8 == 0) {
0x000447ea beq.w 0x44a64 | goto label_21;
| }
0x000447ee ldr.w ip, [r8] | ip = *(r8);
0x000447f2 cmp ip, r6 |
| if (ip != r6) {
0x000447f4 bne.w 0x449c6 | goto label_22;
| }
0x000447f8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000447fa add.w r3, r3, ip, lsl 3 | r3 += (ip << 3);
0x000447fe add.w fp, r3, 0x25 |
0x00044802 movs r3, 0 | r3 = 0;
0x00044804 cmp ip, r3 |
| if (ip <= r3) {
0x00044806 ble 0x44854 | goto label_9;
| }
| label_8:
0x00044808 movs r4, 0 | r4 = 0;
0x0004480a strd r7, r5, [sp, 8] | __asm ("strd r7, r5, [var_8h]");
0x0004480e str r6, [sp, 4] | var_4h = r6;
0x00044810 mov r7, fp | r7 = fp;
0x00044812 mov r6, r4 | r6 = r4;
0x00044814 mov fp, r8 |
0x00044816 mov r4, r8 | r4 = r8;
0x00044818 mov r5, ip | r5 = ip;
0x0004481a mov r8, r3 | r8 = r3;
| do {
0x0004481c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0004481e mov.w ip, 1 |
| if (r0 != 0) {
0x00044822 cbz r0, 0x44832 |
0x00044824 blx 0x65dc | r0 = strcmp (r0, r1);
0x00044828 bic ip, r0, 0xc0000000 | ip = BIT_MASK (r0, 0xc0000000);
0x0004482c movs r0, 0 | r0 = 0;
0x0004482e add.w ip, ip, 1 |
| }
0x00044832 adds.w ip, ip, r7 |
0x00044836 add.w r6, r6, 1 | r6++;
0x0004483a adc.w r8, r0, r8 | __asm ("adc.w r8, r0, r8");
0x0004483e cmp r6, r5 |
0x00044840 mov r7, ip | r7 = ip;
0x00044842 add.w r4, r4, 0x10 | r4 += 0x10;
0x00044846 bne 0x4481c |
| } while (r6 != r5);
0x00044848 ldr r6, [sp, 4] | r6 = var_4h;
0x0004484a mov r3, r8 | r3 = r8;
0x0004484c ldr r5, [sp, 0xc] | r5 = var_ch;
0x0004484e mov r8, fp | r8 = fp;
0x00044850 ldr r7, [sp, 8] | r7 = var_8h;
0x00044852 mov fp, ip |
| label_9:
0x00044854 cmp.w sl, 0 |
| if (sl == 0) {
0x00044858 beq.w 0x44a36 | goto label_23;
| }
0x0004485c mov r2, fp | r2 = fp;
0x0004485e mov r0, sl | r0 = sl;
0x00044860 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00044864 mov r4, r0 | r4 = r0;
| label_6:
0x00044866 cmp r4, 0 |
| if (r4 == 0) {
0x00044868 beq.w 0x449b8 | goto label_17;
| }
0x0004486c mov r2, fp | r2 = fp;
0x0004486e movs r1, 0 | r1 = 0;
0x00044870 mov r0, r4 | r0 = r4;
0x00044872 blx 0x62ec | fcn_000062ec ();
0x00044876 ldr.w r3, [sb, 0x30] | r3 = *((sb + 0x30));
0x0004487a str.w sb, [r4] | __asm ("str.w sb, [r4]");
0x0004487e str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00044880 add.w r3, r4, r6, lsl 3 | r3 = r4 + (r6 << 3);
0x00044884 adds r3, 0x24 | r3 += 0x24;
0x00044886 str r3, [sp, 0x28] | var_28h = r3;
0x00044888 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0004488a ldrb.w r3, [r7, 0xd0] | r3 = *((r7 + 0xd0));
0x0004488e cmp r3, 3 |
0x00044890 it ne |
| if (r3 != 3) {
0x00044892 cmpne r3, 1 | __asm ("cmpne r3, 1");
| }
| if (r3 > 3) {
0x00044894 bhi.w 0x44b24 | goto label_24;
| }
| label_16:
0x00044898 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0004489c ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000448a0 mov r0, fp | r0 = fp;
0x000448a2 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000448a6 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000448a8 movs r3, 0 | r3 = 0;
0x000448aa mov r0, fp | r0 = fp;
0x000448ac strb.w r3, [fp, r2] | *((fp + r2)) = r3;
0x000448b0 bl 0x21524 | fcn_00021524 (r0);
0x000448b4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000448b6 ldr.w ip, [r5, 4] | ip = *((r5 + 4));
0x000448ba str r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
0x000448bc cmp r3, 0 |
| if (r3 == 0) {
0x000448be beq.w 0x44b08 | goto label_25;
| }
0x000448c2 cmp r6, 0 |
0x000448c4 mov.w r3, 0 | r3 = 0;
| if (r6 <= 0) {
0x000448c8 ble 0x4498e | goto label_10;
| }
0x000448ca ldrsh.w r5, [sb, 0x22] | r5 = *((sb + 0x22));
0x000448ce lsls r2, r6, 1 | r2 = r6 << 1;
0x000448d0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000448d2 str r2, [sp, 0x1c] | var_1ch = r2;
0x000448d4 add.w r2, r4, 0x24 | r2 = r4 + 0x24;
0x000448d8 cmp r5, 0 |
0x000448da mov fp, r2 |
0x000448dc ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000448de str r2, [sp, 0x24] | var_24h = r2;
| if (r5 <= 0) {
0x000448e0 ble 0x44962 | goto label_19;
| }
0x000448e2 ldr.w lr, [pc, 0x294] |
0x000448e6 mov r0, r3 | r0 = r3;
0x000448e8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000448ea mov r2, r0 | r2 = r0;
0x000448ec ldr.w r6, [sb, 4] | r6 = *((sb + 4));
0x000448f0 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x000448f4 add lr, pc | lr = 0x89472;
0x000448f6 mov sb, r4 | sb = r4;
0x000448f8 mov r4, r7 | r4 = r7;
0x000448fa adds r3, 0xc | r3 += 0xc;
0x000448fc str.w ip, [sp, 0x30] | __asm ("str.w ip, [var_30h]");
0x00044900 str r3, [sp, 0x20] | var_20h = r3;
0x00044902 str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
| label_3:
0x00044906 mov fp, sl |
0x00044908 str r2, [sp, 0x10] | var_10h = r2;
0x0004490a mov sl, sb | sl = sb;
0x0004490c mov r2, r1 | r2 = r1;
0x0004490e movs r3, 0 | r3 = 0;
0x00044910 add.w ip, r1, -1 |
0x00044914 str r3, [sp, 8] | var_8h = r3;
0x00044916 str r3, [sp, 4] | var_4h = r3;
0x00044918 str.w ip, [sp, 0xc] | __asm ("str.w ip, [var_ch]");
| label_0:
0x0004491c ldr r3, [sp, 4] | r3 = var_4h;
0x0004491e ldr.w sb, [sp, 0xc] | sb = var_ch;
0x00044922 ldr.w r7, [r6, r3, lsl 2] | offset_0 = r3 << 2;
| r7 = *((r6 + offset_0));
0x00044926 subs r7, 1 | r7--;
| do {
| label_2:
0x00044928 ldrb r3, [r7, 1]! | r3 = *((r7 += 1));
0x0004492c ldrb r1, [sb, 1]! | r1 = *((sb += 1));
0x00044930 add.w ip, lr, r3 |
0x00044934 cmp r3, r1 |
0x00044936 add.w r0, lr, r1 | r0 = lr + r1;
| if (r3 == r1) {
0x0004493a beq 0x449e4 | goto label_26;
| }
0x0004493c ldrb.w r3, [ip, 0x140] | r3 = *((ip + 0x140));
0x00044940 ldrb.w r1, [r0, 0x140] | r1 = *((r0 + 0x140));
0x00044944 cmp r3, r1 |
0x00044946 beq 0x44928 |
| } while (r3 == r1);
0x00044948 ldr r3, [sp, 8] | r3 = var_8h;
0x0004494a ldr r1, [sp, 4] | r1 = var_4h;
0x0004494c adds r3, 1 | r3++;
0x0004494e cmp r5, r3 |
0x00044950 add.w r1, r1, 3 | r1 += 3;
0x00044954 str r3, [sp, 8] | var_8h = r3;
0x00044956 str r1, [sp, 4] | var_4h = r1;
| if (r5 != r3) {
0x00044958 bne 0x4491c | goto label_0;
| }
0x0004495a mov r7, r4 | r7 = r4;
0x0004495c mov r1, r2 | r1 = r2;
0x0004495e mov r4, sl | r4 = sl;
0x00044960 mov sl, fp | sl = fp;
| label_19:
0x00044962 mov r2, r1 | r2 = r1;
0x00044964 ldr r1, [pc, 0x214] |
0x00044966 mov r0, r7 | r0 = r7;
0x00044968 add r1, pc | r1 = 0x894e8;
0x0004496a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0004496e mov r1, r4 | r1 = r4;
0x00044970 mov r0, sl | r0 = sl;
0x00044972 bl 0x2d144 | fcn_0002d144 (r0, r1);
| do {
0x00044976 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00044978 mov r0, sl | r0 = sl;
0x0004497a bl 0x30cbc | fcn_00030cbc (r0, r1);
| label_7:
0x0004497e cmp.w r8, 0 |
| if (r8 != 0) {
0x00044982 bne 0x449d6 | goto label_18;
| }
| label_1:
0x00044984 add sp, 0x3c |
0x00044986 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0004498a ldrd r4, r8, [sp, 0xc] | __asm ("ldrd r4, r8, [var_ch]");
| label_10:
0x0004498e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00044990 mov r2, r4 | r2 = r4;
0x00044992 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00044994 strb r3, [r4, 0x19] | *((r4 + 0x19)) = r3;
0x00044996 asrs r3, r3, 8 | r3 >>= 8;
0x00044998 strb r3, [r4, 0x1a] | *((r4 + 0x1a)) = r3;
0x0004499a movs r3, 0 | r3 = 0;
0x0004499c strb r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0004499e ldr.w r0, [sb, 0x3c] | r0 = *((sb + 0x3c));
0x000449a2 adds r0, 0x38 | r0 += 0x38;
0x000449a4 bl 0x2df94 | r0 = fcn_0002df94 (r0, r1, r2, r3, r4);
0x000449a8 cmp r0, r4 |
| if (r0 == r4) {
0x000449aa beq.w 0x44b3c | goto label_27;
| }
| if (r0 != 0) {
0x000449ae cbz r0, 0x449b4 |
0x000449b0 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000449b2 str r4, [r0, 0x10] | *((r0 + 0x10)) = r4;
| }
0x000449b4 str.w r4, [sb, 0x30] | __asm ("str.w r4, [sb, 0x30]");
| label_17:
0x000449b8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000449ba cmp r3, 0 |
0x000449bc bne 0x44976 |
| } while (r3 != 0);
0x000449be cmp.w r8, 0 |
| if (r8 == 0) {
0x000449c2 beq 0x44984 | goto label_1;
| }
0x000449c4 b 0x449d6 | goto label_18;
| label_22:
0x000449c6 ldr r1, [pc, 0x1b8] |
0x000449c8 add r1, pc | r1 = 0x8954e;
0x000449ca bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000449ce ldr r1, [sp, 0x18] | r1 = var_18h;
0x000449d0 mov r0, sl | r0 = sl;
0x000449d2 bl 0x30cbc | fcn_00030cbc (r0, r1);
| label_18:
0x000449d6 mov r1, r8 | r1 = r8;
0x000449d8 mov r0, sl | r0 = sl;
0x000449da add sp, 0x3c |
0x000449dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000449e0 b.w 0x30cbc | void (*0x30cbc)() ();
| label_26:
0x000449e4 cmp r3, 0 |
| if (r3 != 0) {
0x000449e6 bne 0x44928 | goto label_2;
| }
0x000449e8 ldr r0, [sp, 8] | r0 = var_8h;
0x000449ea mov r1, r2 | r1 = r2;
0x000449ec ldr r3, [sp, 0x24] | r3 = var_24h;
0x000449ee mov sb, sl | sb = sl;
0x000449f0 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000449f2 mov sl, fp | sl = fp;
0x000449f4 cmp r0, r5 |
0x000449f6 str.w r0, [r3, r2, lsl 2] | __asm ("str.w r0, [r3, r2, lsl 2]");
| if (r0 >= r5) {
0x000449fa bge.w 0x44b70 | goto label_28;
| }
0x000449fe ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x00044a02 cmp r3, 1 |
0x00044a04 bhi 0x44a1c |
| while (1) {
| label_4:
0x00044a06 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00044a08 adds r2, 2 | r2 += 2;
0x00044a0a adds r3, 8 | r3 += 8;
0x00044a0c str r3, [sp, 0x14] | var_14h = r3;
0x00044a0e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00044a10 cmp r3, r2 |
| if (r3 == r2) {
0x00044a12 beq 0x44a72 | goto label_29;
| }
0x00044a14 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00044a16 ldr.w r1, [r3, r2, lsl 3] | offset_1 = r2 << 3;
| r1 = *((r3 + offset_1));
0x00044a1a b 0x44906 | goto label_3;
0x00044a1c ldr.w r0, [r4, 0x10c] | r0 = *((r4 + 0x10c));
| if (r0 != 0) {
0x00044a20 cbnz r0, 0x44a2a | goto label_30;
| }
0x00044a22 b 0x44a06 |
| }
| label_5:
0x00044a24 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00044a26 cmp r0, 0 |
| if (r0 == 0) {
0x00044a28 beq 0x44a06 | goto label_4;
| }
| label_30:
0x00044a2a ldr r3, [r0] | r3 = *(r0);
0x00044a2c cmp r3, r1 |
| if (r3 != r1) {
0x00044a2e bne 0x44a24 | goto label_5;
| }
0x00044a30 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00044a32 str r3, [r0] | *(r0) = r3;
0x00044a34 b 0x44a06 | goto label_4;
| label_23:
0x00044a36 mov r1, r3 | r1 = r3;
0x00044a38 mov r0, fp | r0 = fp;
0x00044a3a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00044a3e mov r4, r0 | r4 = r0;
0x00044a40 b 0x44866 | goto label_6;
| label_20:
0x00044a42 ldrsh.w r3, [sb, 0x22] | r3 = *((sb + 0x22));
0x00044a46 subs r3, 1 | r3--;
| if (r3 < 1) {
0x00044a48 bmi 0x4497e | goto label_7;
| }
0x00044a4a cmp.w r8, 0 |
| if (r8 == 0) {
0x00044a4e beq 0x44b30 | goto label_31;
| }
0x00044a50 ldr.w r6, [r8] | r6 = *(r8);
0x00044a54 cmp r6, 1 |
| if (r6 != 1) {
0x00044a56 bne 0x44b58 | goto label_32;
| }
0x00044a58 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00044a5a mov ip, r6 |
0x00044a5c add.w fp, r3, 0x2d |
0x00044a60 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00044a62 b 0x44808 | goto label_8;
| label_21:
0x00044a64 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00044a66 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
0x00044a6a add.w fp, r3, 0x25 |
0x00044a6e mov r3, r8 | r3 = r8;
0x00044a70 b 0x44854 | goto label_9;
| label_29:
0x00044a72 mov r7, r4 | r7 = r4;
0x00044a74 ldr.w ip, [sp, 0x30] | ip = var_30h;
0x00044a78 mov r4, sb | r4 = sb;
0x00044a7a ldr.w sb, [sp, 0x34] | sb = var_34h;
0x00044a7e cmp.w r8, 0 |
| if (r8 == 0) {
0x00044a82 beq 0x4498e | goto label_10;
| }
| label_15:
0x00044a84 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00044a86 add.w r5, ip, 1 | r5 = ip + 1;
0x00044a8a movs r6, 0 | r6 = 0;
0x00044a8c strd r4, r8, [sp, 0xc] | __asm ("strd r4, r8, [var_ch]");
0x00044a90 add r3, r5 | r3 += r5;
0x00044a92 mov r5, r3 | r5 = r3;
0x00044a94 add.w r3, r8, 0xc | r3 = r8 + 0xc;
0x00044a98 str r3, [sp, 8] | var_8h = r3;
0x00044a9a add.w r3, r4, 0x28 | r3 = r4 + 0x28;
0x00044a9c lsls r0, r5, 0xc | r0 = r5 << 0xc;
0x00044a9e str r3, [sp, 4] | var_4h = r3;
0x00044aa0 b 0x44abe | goto label_33;
| label_12:
0x00044aa2 mov r0, r5 | r0 = r5;
0x00044aa4 mov r1, r8 | r1 = r8;
0x00044aa6 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00044aaa mov.w r3, 0 | r3 = 0;
0x00044aae adds r6, 2 | r6 += 2;
0x00044ab0 strb.w r3, [fp] | *(fp) = r3;
0x00044ab4 add r5, r4 | r5 += r4;
0x00044ab6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00044ab8 cmp r6, r3 |
| if (r6 == r3) {
0x00044aba beq.w 0x4498a | goto label_11;
| }
| label_33:
0x00044abe ldr r3, [sp, 8] | r3 = var_8h;
0x00044ac0 ldr.w r8, [r3, r6, lsl 3] | offset_2 = r6 << 3;
| r8 = *((r3 + offset_2));
0x00044ac4 cmp.w r8, 0 |
| if (r8 == 0) {
0x00044ac8 beq 0x44b00 | goto label_34;
| }
0x00044aca mov r0, r8 | r0 = r8;
0x00044acc blx 0x65dc | r0 = strcmp (r0, r1);
0x00044ad0 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x00044ad4 add.w fp, r5, r2 |
0x00044ad8 adds r4, r2, 1 | r4 = r2 + 1;
| label_14:
0x00044ada ldr r3, [sp, 4] | r3 = var_4h;
0x00044adc str.w r5, [r3, r6, lsl 2] | __asm ("str.w r5, [r3, r6, lsl 2]");
0x00044ae0 ldrb.w r0, [r7, 0xd0] | r0 = *((r7 + 0xd0));
0x00044ae4 cmp r0, 1 |
| if (r0 < 1) {
0x00044ae6 bls 0x44aa2 | goto label_12;
| }
0x00044ae8 ldr.w r0, [r7, 0x10c] | r0 = *((r7 + 0x10c));
| if (r0 != 0) {
0x00044aec cbnz r0, 0x44af6 | goto label_35;
| }
0x00044aee b 0x44aa2 | goto label_12;
| label_13:
0x00044af0 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00044af2 cmp r0, 0 |
| if (r0 == 0) {
0x00044af4 beq 0x44aa2 | goto label_12;
| }
| label_35:
0x00044af6 ldr r3, [r0] | r3 = *(r0);
0x00044af8 cmp r8, r3 |
| if (r8 != r3) {
0x00044afa bne 0x44af0 | goto label_13;
| }
0x00044afc str r5, [r0] | *(r0) = r5;
0x00044afe b 0x44aa2 | goto label_12;
| label_34:
0x00044b00 mov fp, r5 |
0x00044b02 movs r4, 1 | r4 = 1;
0x00044b04 mov r2, r8 | r2 = r8;
0x00044b06 b 0x44ada | goto label_14;
| label_25:
0x00044b08 ldrsh.w r3, [sb, 0x22] | r3 = *((sb + 0x22));
0x00044b0c subs r3, 1 | r3--;
0x00044b0e str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00044b10 cmp.w r8, 0 |
| if (r8 == 0) {
0x00044b14 beq.w 0x4498e | goto label_10;
| }
0x00044b18 cmp r6, 0 |
| if (r6 <= 0) {
0x00044b1a ble.w 0x4498e | goto label_10;
| }
0x00044b1e lsls r3, r6, 1 | r3 = r6 << 1;
0x00044b20 str r3, [sp, 0x1c] | var_1ch = r3;
0x00044b22 b 0x44a84 | goto label_15;
| label_24:
0x00044b24 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00044b26 mov r2, r5 | r2 = r5;
0x00044b28 mov r0, r7 | r0 = r7;
0x00044b2a bl 0x39874 | fcn_00039874 (r0, r1, r2);
0x00044b2e b 0x44898 | goto label_16;
| label_31:
0x00044b30 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00044b32 movs r6, 1 | r6 = 1;
0x00044b34 add.w fp, r3, 0x2d |
0x00044b38 mov r3, r8 | r3 = r8;
0x00044b3a b 0x44854 | goto label_9;
| label_27:
0x00044b3c ldrb.w r3, [sl, 0x57] | r3 = *((sl + 0x57));
| if (r3 == 0) {
0x00044b40 cbnz r3, 0x44b4e |
0x00044b42 ldrb.w r3, [sl, 0x58] | r3 = *((sl + 0x58));
| if (r3 != 0) {
0x00044b46 cbnz r3, 0x44b4e | goto label_36;
| }
0x00044b48 mov r0, sl | r0 = sl;
0x00044b4a bl 0x38024 | fcn_00038024 (r0);
| }
| label_36:
0x00044b4e mov r1, r4 | r1 = r4;
0x00044b50 mov r0, sl | r0 = sl;
0x00044b52 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00044b56 b 0x449b8 | goto label_17;
| label_32:
0x00044b58 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x00044b5c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00044b60 ldr r1, [pc, 0x20] |
0x00044b62 ldr.w r2, [r2, r3, lsl 2] | offset_3 = r3 << 2;
| r2 = *((r2 + offset_3));
0x00044b66 mov r3, r5 | r3 = r5;
0x00044b68 add r1, pc | r1 = 0x896f0;
0x00044b6a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00044b6e b 0x449d6 | goto label_18;
| label_28:
0x00044b70 mov r7, r4 | r7 = r4;
0x00044b72 mov r4, sb | r4 = sb;
0x00044b74 b 0x44962 | goto label_19;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x44eb4 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00044eb4 () | void fcn_00044eb4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_1ch_2;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00044eb4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00044eb8 mov r6, r2 | r6 = r2;
0x00044eba ldr r2, [pc, 0x124] |
0x00044ebc mov r7, r3 | r7 = r3;
0x00044ebe sub sp, 0x3c |
0x00044ec0 mov.w r8, 0 | r8 = 0;
0x00044ec2 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x00044ec4 ldr r3, [pc, 0x11c] | r3 = *(0x44fe4);
0x00044ec6 add.w fp, sp, 0x28 |
0x00044eca add r2, pc | r2 = 0x89eb0;
0x00044ecc mov sb, r0 | sb = r0;
0x00044ece mov ip, r6 |
0x00044ed0 ldr r3, [r2, r3] |
0x00044ed2 add r2, sp, 0x34 | r2 += var_34h;
0x00044ed4 ldr r3, [r3] | r3 = *(0x89eb0);
0x00044ed6 str r3, [sp, 0x34] | var_34h = r3;
0x00044ed8 mov.w r3, 0 | r3 = 0;
0x00044edc mov r3, r2 | r3 = r2;
0x00044ede str r7, [sp, 0x30] | var_30h = r7;
0x00044ee0 mov r2, r8 | r2 = r8;
0x00044ee2 str r7, [sp, 0x14] | var_14h = r7;
0x00044ee4 mov r8, fp | r8 = fp;
0x00044ee6 mov r7, r1 | r7 = r1;
0x00044ee8 strd r1, r6, [sp, 0x28] | __asm ("strd r1, r6, [var_28h]");
| label_1:
0x00044eec ldr.w r6, [r8] | r6 = *(r8);
0x00044ef0 cmp r6, 0 |
| if (r6 == 0) {
0x00044ef2 beq 0x44f62 | goto label_4;
| }
0x00044ef4 ldr r5, [pc, 0xf0] |
0x00044ef6 mov.w sl, 0 | sl = 0;
0x00044efa ldr r1, [pc, 0xf0] |
0x00044efc mov r0, sl | r0 = sl;
0x00044efe ldr r4, [r6, 4] | r4 = *((r6 + 4));
0x00044f00 add r5, pc | r5 = 0x89eec;
0x00044f02 str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h]");
0x00044f06 add r1, pc | r1 = 0x89ef8;
0x00044f08 addw r5, r5, 0x73c | __asm ("addw r5, r5, 0x73c");
0x00044f0c mov sl, r4 | sl = r4;
0x00044f0e add.w fp, r1, 0x758 |
0x00044f12 mov r8, ip | r8 = ip;
0x00044f14 mov r4, r0 | r4 = r0;
0x00044f16 strd r3, r2, [sp, 0x1c] | __asm ("strd r3, r2, [var_1ch]");
0x00044f1a str r1, [sp, 0x24] | var_24h = r1;
0x00044f1c b 0x44f26 |
| while (sl != r1) {
| label_0:
0x00044f1e adds r4, 1 | r4++;
0x00044f20 adds r5, 3 | r5 += 3;
0x00044f22 cmp r4, 7 |
| if (r4 == 7) {
0x00044f24 beq 0x44fbe | goto label_5;
| }
0x00044f26 ldrb r1, [r5, 1] | r1 = *((r5 + 1));
0x00044f28 cmp sl, r1 |
0x00044f2a bne 0x44f1e |
| }
0x00044f2c ldr r0, [r6] | r0 = *(r6);
0x00044f2e ldrb r1, [r5] | r1 = *(r5);
0x00044f30 add r1, fp | r1 += fp;
0x00044f32 cmp r0, 0 |
| if (r0 == 0) {
0x00044f34 beq 0x44f1e | goto label_0;
| }
0x00044f36 mov r2, sl | r2 = sl;
0x00044f38 bl 0x27334 | r0 = fcn_00027334 (r0, r1, r2);
0x00044f3c cmp r0, 0 |
| if (r0 != 0) {
0x00044f3e bne 0x44f1e | goto label_0;
| }
0x00044f40 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00044f42 add.w sl, r4, r4, lsl 1 | sl = r4 + (r4 << 1);
0x00044f46 mov ip, r8 |
0x00044f48 ldr.w r8, [sp, 0x18] | r8 = var_18h;
0x00044f4c ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch]");
0x00044f50 add r1, sl | r1 += sl;
0x00044f52 ldrb.w r1, [r1, 0x73e] | r1 = *((r1 + 0x73e));
0x00044f56 add.w r8, r8, 4 | r8 += 4;
0x00044f5a cmp r8, r3 |
0x00044f5c orr.w r2, r2, r1 | r2 |= r1;
| if (r8 != r3) {
0x00044f60 bne 0x44eec | goto label_1;
| }
| label_4:
0x00044f62 and r3, r2, 0x21 | r3 = r2 & 0x21;
0x00044f66 mov r4, r7 | r4 = r7;
0x00044f68 cmp r3, 0x21 |
0x00044f6a ldr r7, [sp, 0x14] | r7 = var_14h;
0x00044f6c mov r8, r2 | r8 = r2;
0x00044f6e mov r6, ip | r6 = ip;
| if (r3 != 0x21) {
0x00044f70 beq 0x44f80 |
0x00044f72 tst.w r2, 0x80 |
| if ((r2 & 0x80) != 0) {
0x00044f76 bne 0x44f80 | goto label_6;
| }
0x00044f78 and r3, r2, 0x38 | r3 = r2 & 0x38;
0x00044f7c cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00044f7e bne 0x44fa2 | goto label_7;
| }
| }
| if (r6 == 0) {
| label_6:
0x00044f80 cbz r6, 0x44fc8 | goto label_8;
| }
| do {
0x00044f82 ldr r3, [pc, 0x6c] |
0x00044f84 add r3, pc | r3 = 0x89f7a;
| if (r7 == 0) {
0x00044f86 cbz r7, 0x44fd2 | goto label_9;
| }
| label_2:
0x00044f88 ldr r1, [pc, 0x68] |
0x00044f8a add r1, pc | r1 = 0x89f82;
| label_3:
0x00044f8c str r1, [sp, 4] | var_4h = r1;
0x00044f8e mov r2, r4 | r2 = r4;
0x00044f90 ldr r1, [pc, 0x64] |
0x00044f92 mov r0, sb | r0 = sb;
0x00044f94 str r7, [sp, 8] | var_8h = r7;
0x00044f96 mov.w r8, 1 | r8 = 1;
0x00044f9a str r6, [sp] | *(sp) = r6;
0x00044f9c add r1, pc | r1 = 0x89f98;
0x00044f9e bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_7:
0x00044fa2 ldr r2, [pc, 0x58] |
0x00044fa4 ldr r3, [pc, 0x3c] | r3 = *(0x44fe4);
0x00044fa6 add r2, pc | r2 = 0x89fa8;
0x00044fa8 ldr r3, [r2, r3] | r3 = *(0x89fa8);
0x00044faa ldr r2, [r3] | r2 = *(0x89fa8);
0x00044fac ldr r3, [sp, 0x34] | r3 = var_34h;
0x00044fae eors r2, r3 | r2 ^= r3;
0x00044fb0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00044fb4 bne 0x44fda | goto label_10;
| }
0x00044fb6 mov r0, r8 | r0 = r8;
0x00044fb8 add sp, 0x3c |
0x00044fba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00044fbe mov r6, r8 | r6 = r8;
0x00044fc0 mov r4, r7 | r4 = r7;
0x00044fc2 ldr r7, [sp, 0x14] | r7 = var_14h;
0x00044fc4 cmp r6, 0 |
0x00044fc6 bne 0x44f82 |
| } while (r6 != 0);
| label_8:
0x00044fc8 ldr r3, [pc, 0x34] |
0x00044fca add r3, pc | r3 = 0x89fce;
0x00044fcc adds r3, 1 | r3++;
0x00044fce cmp r7, 0 |
| if (r7 != 0) {
0x00044fd0 bne 0x44f88 | goto label_2;
| }
| label_9:
0x00044fd2 ldr r1, [pc, 0x30] |
0x00044fd4 add r1, pc | r1 = 0x89fde;
0x00044fd6 adds r1, 1 | r1++;
0x00044fd8 b 0x44f8c | goto label_3;
| label_10:
0x00044fda blx 0x6430 | fcn_00006430 ();
0x00044fde nop |
0x00044fe0 ldr r6, [pc, 0x338] | r6 = *(0x4531c);
0x00044fe2 movs r2, r1 | r2 = r1;
0x00044fe4 lsls r4, r6, 8 | r4 = r6 << 8;
0x00044fe6 movs r0, r0 |
0x00044fe8 strh r4, [r1] | *(r1) = r4;
0x00044fea movs r1, r1 |
0x00044fec strh r6, [r0] | *(r0) = r6;
0x00044fee movs r1, r1 |
0x00044ff0 ldm r0!, {r3, r4, r5, r7} | r3 = *(r0!);
| r4 = *((r0! + 4));
| r5 = *((r0! + 8));
| r7 = *((r0! + 12));
0x00044ff2 movs r0, r1 | r0 = r1;
0x00044ff4 ldm r0!, {r1, r4, r5, r7} | r1 = *(r0!);
| r4 = *((r0! + 4));
| r5 = *((r0! + 8));
| r7 = *((r0! + 12));
0x00044ff6 movs r0, r1 | r0 = r1;
0x00044ff8 rev r0, r1 | r1 = SWAP32 (r0);
0x00044ffa movs r0, r1 | r0 = r1;
0x00044ffc ldr r5, [pc, 0x3c8] | r5 = *(0x453c8);
0x00044ffe movs r2, r1 | r2 = r1;
0x00045000 ldm r0!, {r1, r4, r5, r6} | r1 = *(r0!);
| r4 = *((r0! + 4));
| r5 = *((r0! + 8));
| r6 = *((r0! + 12));
0x00045002 movs r0, r1 | r0 = r1;
0x00045004 ldm r0!, {r3, r5, r6} | r3 = *(r0!);
| r5 = *((r0! + 4));
| r6 = *((r0! + 8));
0x00045006 movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x460a8 */
| #include <stdint.h>
|
; (fcn) fcn.000460a8 () | void fcn_000460a8 (int16_t arg_38h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000460a8 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000460ac sub sp, 0x14 |
0x000460ae mov sb, r2 | sb = r2;
0x000460b0 ldr r2, [sp, 0x38] | r2 = *(arg_38h);
0x000460b2 mov lr, r0 | lr = r0;
0x000460b4 ldr r2, [r2] | r2 = *(r2);
0x000460b6 ldr r6, [r2, 0xc] | r6 = *((r2 + 0xc));
0x000460b8 ldrb r0, [r6] | r0 = *(r6);
0x000460ba cmp r0, 0xb0 |
0x000460bc it eq |
| if (r0 != 0xb0) {
0x000460be ldrbeq r0, [r6, 2] | r0 = *((r6 + 2));
| }
0x000460c0 cmp r0, 0xb1 |
| if (r0 == 0xb1) {
0x000460c2 beq.w 0x4621e | goto label_6;
| }
0x000460c6 cmp r0, 0x8a |
0x000460c8 beq 0x460d6 |
| while (ip <= 1) {
0x000460ca mov.w ip, 1 |
0x000460ce mov r0, ip | r0 = ip;
0x000460d0 add sp, 0x14 |
0x000460d2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000460d6 ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x000460d8 ldr r0, [r0, 0x1c] | r0 = *((r0 + 0x1c));
0x000460da ldr r0, [r0] | r0 = *(r0);
| label_5:
0x000460dc ldrh.w ip, [sb, 0x34] | ip = *((sb + 0x34));
0x000460e0 sub.w ip, ip, r3 |
0x000460e4 cmp ip, r0 |
0x000460e6 it ge |
| if (ip < r0) {
0x000460e8 movge ip, r0 |
| }
0x000460ea cmp.w ip, 1 |
0x000460ee ble 0x460ca |
| }
0x000460f0 ldr r4, [pc, 0x13c] |
0x000460f2 add.w r8, r3, 1 | r8 = r3 + 1;
0x000460f6 mov.w sl, 1 | sl = 1;
0x000460fa strd lr, ip, [sp, 8] | __asm ("strd lr, ip, [var_8h]");
0x000460fe strd r1, r3, [sp] | __asm ("strd r1, r3, [sp]");
0x00046102 add r4, pc | r4 = 0x8c336;
| label_1:
0x00046104 ldr r5, [r2, 0x10] | r5 = *((r2 + 0x10));
0x00046106 lsl.w r0, sl, 4 | r0 = sl << 4;
0x0004610a ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x0004610c ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x0004610e add r2, r0 | r2 += r0;
0x00046110 ldr r7, [r2, 8] | r7 = *((r2 + 8));
0x00046112 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00046114 lsls r3, r6, 0x13 | r3 = r6 << 0x13;
0x00046116 it mi |
| if (r3 >= r6) {
0x00046118 ldrmi r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
| }
0x0004611a add r2, r0 | r2 += r0;
0x0004611c ldr r6, [r2, 8] | r6 = *((r2 + 8));
0x0004611e ldrb r2, [r7] | r2 = *(r7);
0x00046120 cmp r2, 0xa7 |
| if (r2 != 0xa7) {
0x00046122 bne 0x461c8 | goto label_4;
| }
0x00046124 ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x00046126 ldr r3, [sp] | r3 = *(sp);
0x00046128 cmp r2, r3 |
| if (r2 != r3) {
0x0004612a bne 0x461c8 | goto label_4;
| }
0x0004612c ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x00046130 ldrsh.w r5, [r7, 0x20] | r5 = *((r7 + 0x20));
0x00046134 ldrsh.w r2, [r2, r8, lsl 1] | offset_0 = r8 << 1;
| r2 = *((r2 + offset_0));
0x00046138 cmp r2, r5 |
| if (r2 != r5) {
0x0004613a bne 0x461c8 | goto label_4;
| }
0x0004613c ldr.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x00046140 ldr r3, [sp, 4] | r3 = var_4h;
0x00046142 ldrb.w r0, [r2, r8] | r0 = *((r2 + r8));
0x00046146 ldrb r2, [r2, r3] | r2 = *((r2 + r3));
0x00046148 cmp r0, r2 |
| if (r0 != r2) {
0x0004614a bne 0x461c8 | goto label_4;
| }
0x0004614c mov r0, r7 | r0 = r7;
0x0004614e bl 0x25460 | r0 = fcn_00025460 (r0);
0x00046152 mov fp, r0 |
0x00046154 mov r0, r6 | r0 = r6;
0x00046156 bl 0x25460 | r0 = fcn_00025460 (r0);
0x0004615a cmp r0, 0x40 |
0x0004615c it hi |
| if (r0 > 0x40) {
0x0004615e cmphi fp, 0x40 | __asm ("cmphi fp, 0x40");
| }
| if (r0 < 0x40) {
0x00046162 bls 0x461ec | goto label_7;
| }
0x00046164 cmp.w fp, 0x42 |
0x00046168 it ls |
| if (fp <= 0x42) {
0x0004616a cmpls r0, 0x42 | __asm ("cmpls r0, 0x42");
| }
0x0004616c ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
| if (fp < 0x42) {
0x00046170 bls 0x4620e | goto label_8;
| }
0x00046172 cmp r5, 0 |
| if (r5 < 0) {
0x00046174 blt 0x461c8 | goto label_4;
| }
0x00046176 ldrsh.w r2, [r3, 0x22] | r2 = *((r3 + 0x22));
0x0004617a cmp r2, r5 |
| if (r2 <= r5) {
0x0004617c ble 0x461c8 | goto label_4;
| }
0x0004617e movs r2, 0x43 | r2 = 0x43;
| label_2:
0x00046180 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00046182 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x00046186 add.w r0, r0, r5, lsl 2 | r0 += (r5 << 2);
0x0004618a ldrb r0, [r0, 5] | r0 = *((r0 + 5));
| label_3:
0x0004618c cmp r0, r2 |
| if (r0 != r2) {
0x0004618e bne 0x461c8 | goto label_4;
| }
0x00046190 ldr r0, [sp, 8] | r0 = var_8h;
0x00046192 mov r2, r6 | r2 = r6;
0x00046194 mov r1, r7 | r1 = r7;
0x00046196 bl 0x46074 | r0 = fcn_00046074 (r0, r1, r2);
| if (r0 == 0) {
0x0004619a cbz r0, 0x461c8 | goto label_4;
| }
0x0004619c ldr.w r2, [sb, 0x20] | r2 = *((sb + 0x20));
0x000461a0 ldr r5, [r0] | r5 = *(r0);
0x000461a2 ldr.w r0, [r2, r8, lsl 2] | offset_1 = r8 << 2;
| r0 = *((r2 + offset_1));
0x000461a6 subs r5, 1 | r5--;
0x000461a8 subs r0, 1 | r0--;
| do {
| label_0:
0x000461aa ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x000461ae ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x000461b2 adds r6, r4, r3 | r6 = r4 + r3;
0x000461b4 cmp r3, r2 |
0x000461b6 add.w r1, r4, r2 | r1 = r4 + r2;
| if (r3 == r2) {
0x000461ba beq 0x461d2 | goto label_9;
| }
0x000461bc ldrb.w r2, [r6, 0x140] | r2 = *((r6 + 0x140));
0x000461c0 ldrb.w r3, [r1, 0x140] | r3 = *((r1 + 0x140));
0x000461c4 cmp r2, r3 |
0x000461c6 beq 0x461aa |
| } while (r2 == r3);
| label_4:
0x000461c8 mov ip, sl |
0x000461ca mov r0, ip | r0 = ip;
0x000461cc add sp, 0x14 |
0x000461ce pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x000461d2 cmp r3, 0 |
| if (r3 != 0) {
0x000461d4 bne 0x461aa | goto label_0;
| }
0x000461d6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000461d8 add.w sl, sl, 1 | sl++;
0x000461dc add.w r8, r8, 1 | r8++;
0x000461e0 cmp r3, sl |
| if (r3 == sl) {
0x000461e2 beq 0x46224 | goto label_10;
| }
0x000461e4 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x000461e6 ldr r2, [r3] | r2 = *(r3);
0x000461e8 ldr r6, [r2, 0xc] | r6 = *((r2 + 0xc));
0x000461ea b 0x46104 | goto label_1;
| label_7:
0x000461ec cmp r0, 0x40 |
0x000461ee ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000461f2 ite ls |
| if (r0 > 0x40) {
0x000461f4 orrls r2, fp, 0x40 | r2 = fp | 0x40;
| }
| if (r0 > 0x40) {
0x000461f8 orr r2, r0, 0x40 | r2 = r0 | 0x40;
| }
0x000461fc cmp r5, 0 |
0x000461fe uxtb r2, r2 | r2 = (int8_t) r2;
| if (r5 < 0) {
0x00046200 blt 0x4620a | goto label_11;
| }
0x00046202 ldrsh.w r0, [r3, 0x22] | r0 = *((r3 + 0x22));
0x00046206 cmp r0, r5 |
| if (r0 > r5) {
0x00046208 bgt 0x46180 | goto label_2;
| }
| label_11:
0x0004620a movs r0, 0x44 | r0 = 0x44;
0x0004620c b 0x4618c | goto label_3;
| label_8:
0x0004620e cmp r5, 0 |
| if (r5 < 0) {
0x00046210 blt 0x461c8 | goto label_4;
| }
0x00046212 ldrsh.w r2, [r3, 0x22] | r2 = *((r3 + 0x22));
0x00046216 cmp r2, r5 |
| if (r2 <= r5) {
0x00046218 ble 0x461c8 | goto label_4;
| }
0x0004621a movs r2, 0x41 | r2 = 0x41;
0x0004621c b 0x46180 | goto label_2;
| label_6:
0x0004621e ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x00046220 ldr r0, [r0] | r0 = *(r0);
0x00046222 b 0x460dc | goto label_5;
| label_10:
0x00046224 ldr.w ip, [sp, 0xc] | ip = var_ch;
0x00046228 mov r0, ip | r0 = ip;
0x0004622a add sp, 0x14 |
0x0004622c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x466d4 */
| #include <stdint.h>
|
; (fcn) fcn.000466d4 () | void fcn_000466d4 (int16_t arg_40h, int16_t arg_44h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000466d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000466d8 sub sp, 0x1c |
0x000466da ldr r7, [sp, 0x40] | r7 = *(arg_40h);
0x000466dc cmp r1, 1 |
0x000466de it eq |
| if (r1 != 1) {
0x000466e0 moveq r6, 0 | r6 = 0;
| }
0x000466e2 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x000466e4 ldr.w sb, [r7] | sb = *(r7);
| if (r1 == 1) {
0x000466e8 beq 0x46786 | goto label_1;
| }
0x000466ea cmp r1, 2 |
0x000466ec mov r8, r0 | r8 = r0;
0x000466ee mov ip, r3 |
| if (r1 != 2) {
0x000466f0 bne 0x4678e | goto label_2;
| }
0x000466f2 ldr r2, [r0, 0x2c] | r2 = *((r0 + 0x2c));
0x000466f4 cmp.w sb, 0 |
0x000466f8 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000466fa add.w fp, sb, -1 |
0x000466fe add.w sl, r2, 1 | sl = r2 + 1;
0x00046702 add r2, sb | r2 += sb;
0x00046704 add r3, sb | r3 += sb;
0x00046706 mov r6, sl | r6 = sl;
0x00046708 str r2, [r0, 0x2c] | *((r0 + 0x2c)) = r2;
| if (sb <= 0) {
0x0004670a ble 0x46776 | goto label_3;
| }
0x0004670c movs r4, 0 | r4 = 0;
0x0004670e mov r8, r3 | r8 = r3;
0x00046710 str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x00046714 str r0, [sp, 0xc] | var_ch = r0;
0x00046716 str.w ip, [sp, 0x10] | __asm ("str.w ip, [var_10h]");
| do {
0x0004671a ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x0004671c adds r7, 0x10 | r7 += 0x10;
0x0004671e ldr r0, [sp, 0xc] | r0 = var_ch;
0x00046720 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x00046724 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00046726 cmp fp, r4 |
0x00046728 add.w r1, sl, r4 | r1 = sl + r4;
0x0004672c mov r6, r0 | r6 = r0;
0x0004672e str r1, [sp] | *(sp) = r1;
0x00046730 mov r0, r5 | r0 = r5;
0x00046732 add.w r2, r3, r4 | r2 = r3 + r4;
0x00046736 ite gt |
| if (fp <= r4) {
0x00046738 movgt r1, 0x34 | r1 = 0x34;
| }
| if (fp > r4) {
0x0004673a movle r1, 0x35 | r1 = 0x35;
| }
0x0004673c mov r3, r8 | r3 = r8;
0x0004673e it le |
| if (fp > r4) {
0x00046740 ldrle r3, [sp, 0x10] | r3 = var_10h;
| }
0x00046742 adds r4, 1 | r4++;
0x00046744 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046748 mov r2, r6 | r2 = r6;
0x0004674a mvn r3, 1 | r3 = ~1;
0x0004674e mov.w r1, -1 | r1 = -1;
0x00046752 mov r0, r5 | r0 = r5;
0x00046754 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x00046758 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0004675a cmp r3, 0 |
0x0004675c it gt |
| if (r3 <= 0) {
0x0004675e ldrgt r2, [r5, 0x68] | r2 = *((r5 + 0x68));
| }
0x00046760 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00046764 ittt gt |
| if (r3 <= 0) {
0x00046766 addgt r2, r2, r3, lsl 3 | r2 += (r3 << 3);
| }
| if (r3 <= 0) {
0x0004676a movgt r3, 0x80 | r3 = 0x80;
| }
| if (r3 > 0) {
0x0004676c strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x00046770 cmp sb, r4 |
0x00046772 bne 0x4671a |
| } while (sb != r4);
0x00046774 ldr r6, [sp, 0x14] | r6 = var_14h;
| label_3:
0x00046776 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x00046778 mov r3, sl | r3 = sl;
0x0004677a mov r0, r5 | r0 = r5;
0x0004677c movs r1, 0x50 | r1 = 0x50;
0x0004677e str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00046782 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| do {
| label_1:
0x00046786 mov r0, r6 | r0 = r6;
0x00046788 add sp, 0x1c |
0x0004678a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x0004678e ldrb r3, [r0, 0x13] | r3 = *(arg_40hx13);
0x00046790 mov r4, r2 | r4 = r2;
0x00046792 cmp r3, 0 |
| if (r3 == 0) {
0x00046794 beq 0x46808 | goto label_4;
| }
0x00046796 subs r3, 1 | r3--;
0x00046798 uxtb r3, r3 | r3 = (int8_t) r3;
0x0004679a strb r3, [r0, 0x13] | *((r0 + 0x13)) = r3;
0x0004679c adds r3, 0x26 | r3 += 0x26;
0x0004679e ldr.w r6, [r0, r3, lsl 2] | offset_0 = r3 << 2;
| r6 = *((r0 + offset_0));
| label_0:
0x000467a2 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x000467a4 mov r3, ip | r3 = ip;
0x000467a6 movs r1, 0x1c | r1 = 0x1c;
0x000467a8 mov r0, r5 | r0 = r5;
0x000467aa str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x000467ae str r2, [sp] | *(sp) = r2;
0x000467b0 mov r2, r4 | r2 = r4;
0x000467b2 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x000467b6 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x000467b8 mov r3, sb | r3 = sb;
0x000467ba movs r1, 0x61 | r1 = 0x61;
0x000467bc mov r0, r5 | r0 = r5;
0x000467be str r6, [sp] | *(sp) = r6;
0x000467c0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000467c4 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x000467c6 mov r2, r4 | r2 = r4;
0x000467c8 movs r1, 0x8a | r1 = 0x8a;
0x000467ca mov r0, r5 | r0 = r5;
0x000467cc str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x000467d0 str r3, [sp] | *(sp) = r3;
0x000467d2 mov r3, r6 | r3 = r6;
0x000467d4 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x000467d8 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000467da cmp r3, 0 |
| if (r3 > 0) {
0x000467dc ble 0x467ee |
0x000467de ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x000467e0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000467e4 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x000467e8 movs r2, 0x10 | r2 = 0x10;
0x000467ea strh r2, [r3, -0x16] | *((r3 - 0x16)) = r2;
| }
| if (r6 != 0) {
0x000467ee cbz r6, 0x46804 |
0x000467f0 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x000467f4 cmp r3, 7 |
| if (r3 > 7) {
0x000467f6 bhi 0x46804 | goto label_5;
| }
0x000467f8 adds r2, r3, 1 | r2 = r3 + 1;
0x000467fa adds r3, 0x26 | r3 += 0x26;
0x000467fc strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x00046800 str.w r6, [r8, r3, lsl 2] | __asm ("str.w r6, [r8, r3, lsl 2]");
| }
| label_5:
0x00046804 mov r6, r4 | r6 = r4;
0x00046806 b 0x46786 |
| } while (1);
| label_4:
0x00046808 ldr r6, [r0, 0x2c] | r6 = *((r0 + 0x2c));
0x0004680a adds r6, 1 | r6++;
0x0004680c str r6, [r0, 0x2c] | *((r0 + 0x2c)) = r6;
0x0004680e b 0x467a2 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x46810 */
| #include <stdint.h>
|
; (fcn) fcn.00046810 () | void fcn_00046810 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00046810 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00046814 mov r5, r2 | r5 = r2;
0x00046816 ldr r6, [r1] | r6 = *(r1);
0x00046818 mov r4, r1 | r4 = r1;
0x0004681a mov r7, r0 | r7 = r0;
0x0004681c adds r2, r3, 1 | r2 = r3 + 1;
0x0004681e ldr r0, [r0] | r0 = *(r0);
0x00046820 sub.w sb, r6, r5 | sb = r6 - r5;
0x00046824 mov r1, sb | r1 = sb;
0x00046826 bl 0x38b20 | r0 = fcn_00038b20 (r0, r1, r2);
0x0004682a mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x0004682c cbz r0, 0x4686e | goto label_1;
| }
0x0004682e cmp r6, r5 |
0x00046830 add.w r4, r4, 8 | r4 += 8;
| if (r6 <= r5) {
0x00046834 ble 0x4686e | goto label_1;
| }
0x00046836 adds r5, 1 | r5++;
0x00046838 add.w r6, r0, 0x10 | r6 = r0 + 0x10;
0x0004683c add.w r4, r4, r5, lsl 4 | r4 += (r5 << 4);
0x00046840 movs r5, 0 | r5 = 0;
0x00046842 b 0x4685a |
| while (r0 != 0) {
| label_0:
0x00046844 adds r4, 0x10 | r4 += 0x10;
0x00046846 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x0004684a str r0, [r6, 4]! | *((r6 += 4)) = r0;
0x0004684e ldrb r2, [r4, -0x18] | r2 = *((r4 - 0x18));
0x00046852 strb r2, [r3, r5] | *((r3 + r5)) = r2;
0x00046854 adds r5, 1 | r5++;
0x00046856 cmp r5, sb |
| if (r5 == sb) {
0x00046858 beq 0x4686e | goto label_1;
| }
0x0004685a ldr r1, [r4, -0x10] | r1 = *((r4 - 0x10));
0x0004685e mov r0, r7 | r0 = r7;
0x00046860 bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x00046864 cmp r0, 0 |
0x00046866 bne 0x46844 |
| }
0x00046868 ldr r3, [r7] | r3 = *(r7);
0x0004686a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0004686c b 0x46844 | goto label_0;
| label_1:
0x0004686e mov r0, r8 | r0 = r8;
0x00046870 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x46950 */
| #include <stdint.h>
|
; (fcn) fcn.00046950 () | void fcn_00046950 (int16_t arg_8h, int16_t arg_48h, int16_t arg_4ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00046950 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046954 sub sp, 0x24 |
0x00046956 ldr r5, [r0] | r5 = *(r0);
0x00046958 mov sb, r0 | sb = r0;
0x0004695a mov sl, r2 | sl = r2;
0x0004695c str r1, [sp, 8] | var_8h = r1;
0x0004695e ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x00046960 str r3, [sp, 0x14] | var_14h = r3;
0x00046962 cmp r4, 0 |
| if (r4 == 0) {
0x00046964 beq.w 0x46b80 | goto label_15;
| }
| label_2:
0x00046968 ldr.w r1, [sb, 4] | r1 = *((sb + 4));
0x0004696c ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0004696e ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x00046970 ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x00046972 str r0, [sp, 0xc] | var_ch = r0;
0x00046974 cmp r3, 0 |
| if (r3 == 0) {
0x00046976 beq.w 0x46b92 | goto label_16;
| }
0x0004697a subs r0, r3, 1 | r0 = r3 - 1;
0x0004697c uxtb r0, r0 | r0 = (int8_t) r0;
0x0004697e add.w r6, r0, 0x26 | r6 = r0 + 0x26;
0x00046982 strb r0, [r5, 0x13] | *((r5 + 0x13)) = r0;
0x00046984 ldr.w r6, [r5, r6, lsl 2] | offset_0 = r6 << 2;
| r6 = *((r5 + offset_0));
0x00046988 cmp r0, 0 |
| if (r0 == 0) {
0x0004698a beq.w 0x46b96 | goto label_17;
| }
0x0004698e subs r3, 2 | r3 -= 2;
0x00046990 uxtb r3, r3 | r3 = (int8_t) r3;
0x00046992 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00046994 adds r3, 0x26 | r3 += 0x26;
0x00046996 ldr.w r8, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| r8 = *((r5 + offset_1));
| label_3:
0x0004699a adds r3, r2, 1 | r3 = r2 + 1;
0x0004699c ldr.w r0, [sb] | r0 = *(sb);
0x000469a0 str r3, [sp, 0x18] | var_18h = r3;
0x000469a2 mov r2, sl | r2 = sl;
0x000469a4 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x000469a6 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000469a8 mov r7, r3 | r7 = r3;
0x000469aa str r3, [sp, 0x10] | var_10h = r3;
0x000469ac add.w fp, r7, -1 |
0x000469b0 mov r3, r6 | r3 = r6;
0x000469b2 str.w fp, [r5, 0x38] | __asm ("str.w fp, [r5, 0x38]");
0x000469b6 bl 0x426c0 | fcn_000426c0 (r0, r1, r2, r3);
0x000469ba ldrd r0, r1, [sb] | __asm ("ldrd r0, r1, [sb]");
0x000469be mov r3, r8 | r3 = r8;
0x000469c0 ldr r2, [sp, 0x48] | r2 = *(arg_48h);
0x000469c2 bl 0x426c0 | fcn_000426c0 (r0, r1, r2, r3);
0x000469c6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000469c8 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000469ca ands sb, r3, 1 | sb = r3 & 1;
| if (sb != r3) {
0x000469ce bne.w 0x46b0a | goto label_18;
| }
0x000469d2 ldr r2, [sp, 8] | r2 = var_8h;
0x000469d4 lsls r3, r3, 0x1e | r3 <<= 0x1e;
0x000469d6 it pl |
| if (r3 < r3) {
0x000469d8 movpl sb, 0x6a | sb = 0x6a;
| }
0x000469dc sub.w sl, r2, 0x39 | sl = r2 - 0x39;
0x000469e0 clz sl, sl | sl &= sl;
0x000469e4 lsr.w sl, sl, 5 | sl >>= 5;
| if (r3 < r3) {
0x000469e8 bmi.w 0x46bcc | goto label_19;
| }
| label_7:
0x000469ec cmp.w sb, 0x6a |
0x000469f0 ite ne |
| if (sb == 0x6a) {
0x000469f2 movne sl, 0 | sl = 0;
| }
| if (sb == 0x6a) {
0x000469f6 and sl, sl, 1 | sl &= 1;
| }
| label_8:
0x000469fa ldr r7, [sp, 0x18] | r7 = var_18h;
0x000469fc mov.w fp, 0 |
0x00046a00 mov r2, fp | r2 = fp;
0x00046a02 movs r1, 0x75 | r1 = 0x75;
0x00046a04 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00046a08 mov r0, r4 | r0 = r4;
0x00046a0a mov r3, r7 | r3 = r7;
0x00046a0c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046a10 ldr r2, [pc, 0x360] |
0x00046a12 mov r1, r0 | r1 = r0;
0x00046a14 mov.w r3, -1 | r3 = -1;
0x00046a18 mov r0, r4 | r0 = r4;
0x00046a1a add r2, pc | r2 = 0x8d792;
0x00046a1c bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x00046a20 mov r3, fp | r3 = fp;
0x00046a22 mov r2, r7 | r2 = r7;
0x00046a24 movs r1, 0x39 | r1 = 0x39;
0x00046a26 mov r0, r4 | r0 = r4;
0x00046a28 str r6, [sp] | *(sp) = r6;
0x00046a2a bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046a2e mov fp, r0 |
0x00046a30 cmp.w sl, 0 |
| if (sl == 0) {
0x00046a34 beq.w 0x46b5c | goto label_9;
| }
| label_0:
0x00046a38 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00046a3a mov r2, r8 | r2 = r8;
0x00046a3c ldr r1, [sp, 8] | r1 = var_8h;
0x00046a3e mov r0, r4 | r0 = r4;
0x00046a40 str r6, [sp] | *(sp) = r6;
0x00046a42 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| do {
0x00046a46 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00046a48 mov r3, r6 | r3 = r6;
0x00046a4a mov r1, sb | r1 = sb;
0x00046a4c mov r0, r4 | r0 = r4;
0x00046a4e str r6, [sp] | *(sp) = r6;
0x00046a50 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046a54 ldr r3, [r4] | r3 = *(r4);
0x00046a56 cmp.w fp, 0 |
0x00046a5a ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00046a5c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00046a60 it lt |
| if (fp >= 0) {
0x00046a62 addlt fp, r2, -1 |
| }
0x00046a66 cmp r3, 0 |
| if (r3 != 0) {
0x00046a68 bne.w 0x46b74 | goto label_20;
| }
0x00046a6c ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00046a6e add.w fp, fp, fp, lsl 1 |
0x00046a72 add.w fp, r3, fp, lsl 3 |
| label_1:
0x00046a76 str.w r2, [fp, 8] | __asm ("str.w r2, [arg_8h]");
0x00046a7a mov r0, r4 | r0 = r4;
0x00046a7c ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00046a7e mov r2, r8 | r2 = r8;
0x00046a80 ldr r1, [sp, 8] | r1 = var_8h;
0x00046a82 str r6, [sp] | *(sp) = r6;
0x00046a84 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046a88 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00046a8a mov r0, r5 | r0 = r5;
0x00046a8c ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00046a8e bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x00046a92 cmp r0, 0 |
| if (r0 == 0) {
0x00046a94 beq.w 0x46b9c | goto label_21;
| }
| label_4:
0x00046a98 ldr r3, [r4] | r3 = *(r4);
0x00046a9a ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00046a9e ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
| if (r2 == 0) {
0x00046aa0 cbnz r2, 0x46ab4 |
0x00046aa2 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x00046aa6 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x00046aa8 lsls r2, r2, 3 | r2 <<= 3;
0x00046aaa subs r2, 0x18 | r2 -= 0x18;
0x00046aac add r2, r1 | r2 += r1;
0x00046aae movs r1, 0xfe | r1 = 0xfe;
0x00046ab0 str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x00046ab2 strb r1, [r2, 1] | *((r2 + 1)) = r1;
| }
0x00046ab4 cmp r3, 0 |
| if (r3 > 0) {
0x00046ab6 ble 0x46ac8 |
0x00046ab8 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x00046aba add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x00046abe add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x00046ac2 movs r1, 0x80 | r1 = 0x80;
0x00046ac4 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x00046ac8 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00046aca ldrd r2, r1, [r0, 0x38] | __asm ("ldrd r2, r1, [r0, 0x38]");
0x00046ace cmn r1, r2 |
| if (r1 < r2) {
0x00046ad0 bmi 0x46ba2 | goto label_22;
| }
0x00046ad2 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00046ad4 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x00046ad6 lsls r2, r2, 2 | r2 <<= 2;
0x00046ad8 rsbs r2, r2, 0 | r2 -= ;
0x00046ada str r3, [r1, r2] | *((r1 + r2)) = r3;
| if (r6 != 0) {
| label_5:
0x00046adc cbz r6, 0x46aee |
0x00046ade ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x00046ae0 cmp r3, 7 |
| if (r3 > 7) {
0x00046ae2 bhi 0x46b04 | goto label_23;
| }
0x00046ae4 adds r2, r3, 1 | r2 = r3 + 1;
0x00046ae6 adds r3, 0x26 | r3 += 0x26;
0x00046ae8 strb r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
0x00046aea str.w r6, [r5, r3, lsl 2] | __asm ("str.w r6, [r5, r3, lsl 2]");
| }
0x00046aee cmp.w r8, 0 |
| if (r8 != 0) {
0x00046af2 beq 0x46b04 |
0x00046af4 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x00046af6 cmp r3, 7 |
| if (r3 > 7) {
0x00046af8 bhi 0x46b04 | goto label_23;
| }
0x00046afa adds r2, r3, 1 | r2 = r3 + 1;
0x00046afc adds r3, 0x26 | r3 += 0x26;
0x00046afe strb r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
0x00046b00 str.w r8, [r5, r3, lsl 2] | __asm ("str.w r8, [r5, r3, lsl 2]");
| }
| label_23:
0x00046b04 add sp, 0x24 |
0x00046b06 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x00046b0a ldr r2, [sp, 8] | r2 = var_8h;
0x00046b0c and r3, r3, 2 | r3 &= 2;
0x00046b10 cmp r2, 0x36 |
| if (r2 == 0x36) {
0x00046b12 beq 0x46bba | goto label_24;
| }
0x00046b14 cmp r2, 0x39 |
| if (r2 != 0x39) {
0x00046b16 bne 0x46bae | goto label_25;
| }
0x00046b18 cmp r3, 0 |
| if (r3 != 0) {
0x00046b1a bne.w 0x46d34 | goto label_26;
| }
0x00046b1e movs r3, 0x37 | r3 = 0x37;
0x00046b20 str r3, [sp, 8] | var_8h = r3;
| label_6:
0x00046b22 ldr r7, [sp, 0x18] | r7 = var_18h;
0x00046b24 mov.w sb, 0 | sb = 0;
0x00046b28 mov r2, sb | r2 = sb;
0x00046b2a movs r1, 0x75 | r1 = 0x75;
0x00046b2c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00046b30 mov r0, r4 | r0 = r4;
0x00046b32 mov r3, r7 | r3 = r7;
0x00046b34 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046b38 ldr r2, [pc, 0x23c] |
0x00046b3a mov r1, r0 | r1 = r0;
0x00046b3c mov.w r3, -1 | r3 = -1;
0x00046b40 mov r0, r4 | r0 = r4;
0x00046b42 add r2, pc | r2 = 0x8d8be;
0x00046b44 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x00046b48 mov r3, sb | r3 = sb;
0x00046b4a mov r2, r7 | r2 = r7;
0x00046b4c movs r1, 0x39 | r1 = 0x39;
0x00046b4e mov r0, r4 | r0 = r4;
0x00046b50 str r6, [sp] | *(sp) = r6;
0x00046b52 mov.w sb, 0x6b | sb = 0x6b;
0x00046b56 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046b5a mov fp, r0 |
| label_9:
0x00046b5c ldr r3, [sp, 8] | r3 = var_8h;
0x00046b5e cmp r3, 0x37 |
0x00046b60 it eq |
| if (r3 == 0x37) {
0x00046b62 cmpeq sb, 0x6b | __asm ("cmpeq sb, 0x6b");
| }
0x00046b66 bne.w 0x46a46 |
| } while (r3 != 0x37);
0x00046b6a movs r3, 0x37 | r3 = 0x37;
0x00046b6c mov.w sb, 0x6b | sb = 0x6b;
0x00046b70 str r3, [sp, 8] | var_8h = r3;
0x00046b72 b 0x46a38 | goto label_0;
| label_20:
0x00046b74 ldr.w fp, [pc, 0x204] |
0x00046b78 add fp, pc | fp = 0x8d8f8;
0x00046b7a add.w fp, fp, 4 |
0x00046b7e b 0x46a76 | goto label_1;
| label_15:
0x00046b80 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x00046b82 cmp r3, 0 |
| if (r3 == 0) {
0x00046b84 beq.w 0x46ce0 | goto label_27;
| }
| label_11:
0x00046b88 mov r0, r5 | r0 = r5;
0x00046b8a bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x00046b8e mov r4, r0 | r4 = r0;
0x00046b90 b 0x46968 | goto label_2;
| label_16:
0x00046b92 adds r2, 1 | r2++;
0x00046b94 mov r6, r2 | r6 = r2;
| label_17:
0x00046b96 adds r2, 1 | r2++;
0x00046b98 mov r8, r2 | r8 = r2;
0x00046b9a b 0x4699a | goto label_3;
| label_21:
0x00046b9c ldr r3, [r5] | r3 = *(r5);
0x00046b9e ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00046ba0 b 0x46a98 | goto label_4;
| label_22:
0x00046ba2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00046ba4 mov r1, r4 | r1 = r4;
0x00046ba6 rsbs r2, r3, 0 | r2 = r3 - ;
0x00046ba8 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00046bac b 0x46adc | goto label_5;
| label_25:
0x00046bae cmp r3, 0 |
| if (r3 != 0) {
0x00046bb0 bne.w 0x46d4c | goto label_28;
| }
0x00046bb4 movs r3, 0x39 | r3 = 0x39;
0x00046bb6 str r3, [sp, 8] | var_8h = r3;
0x00046bb8 b 0x46b22 | goto label_6;
| label_24:
0x00046bba cmp r3, 0 |
| if (r3 != 0) {
0x00046bbc bne.w 0x46d14 | goto label_29;
| }
0x00046bc0 mov sl, r3 | sl = r3;
0x00046bc2 movs r3, 0x38 | r3 = 0x38;
0x00046bc4 mov.w sb, 0x6b | sb = 0x6b;
0x00046bc8 str r3, [sp, 8] | var_8h = r3;
0x00046bca b 0x469ec | goto label_7;
| label_19:
0x00046bcc mov r3, sb | r3 = sb;
0x00046bce mov r2, r6 | r2 = r6;
0x00046bd0 movs r1, 0x33 | r1 = 0x33;
0x00046bd2 mov r0, r4 | r0 = r4;
0x00046bd4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00046bd8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046bdc ldr r2, [sp, 8] | r2 = var_8h;
0x00046bde mov r3, sl | r3 = sl;
0x00046be0 mov r7, r0 | r7 = r0;
0x00046be2 cmp r2, 0x36 |
0x00046be4 it eq |
| if (r2 != 0x36) {
0x00046be6 orreq r3, r3, 1 | r3 |= 1;
| }
0x00046bea str r3, [sp, 0x1c] | var_1ch = r3;
| if (r2 != 0x36) {
0x00046bec bne 0x46c80 | goto label_30;
| }
0x00046bee str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00046bf2 mov.w sl, 1 | sl = 1;
0x00046bf6 str.w sb, [sp, 0x1c] | __asm ("str.w sb, [var_1ch]");
0x00046bfa mov.w sb, 0x6a | sb = 0x6a;
0x00046bfe ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00046c00 mov r2, r8 | r2 = r8;
0x00046c02 movs r1, 0x33 | r1 = 0x33;
0x00046c04 mov r0, r4 | r0 = r4;
0x00046c06 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| do {
| label_13:
0x00046c0a movs r2, 0 | r2 = 0;
0x00046c0c mov r3, fp | r3 = fp;
0x00046c0e str r2, [sp] | *(sp) = r2;
0x00046c10 movs r1, 8 | r1 = 8;
0x00046c12 mov r0, r4 | r0 = r4;
0x00046c14 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046c18 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00046c1a cmp r7, 0 |
0x00046c1c mov r3, r7 | r3 = r7;
0x00046c1e itt lt |
| if (r7 >= 0) {
0x00046c20 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r7 < 0) {
0x00046c24 mov r7, r3 | r7 = r3;
| }
0x00046c26 ldr r3, [r4] | r3 = *(r4);
0x00046c28 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00046c2c cmp r3, 0 |
| if (r3 != 0) {
0x00046c2e bne 0x46cd8 | goto label_31;
| }
0x00046c30 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00046c32 add.w r1, r7, r7, lsl 1 | r1 = r7 + (r7 << 1);
0x00046c36 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
| label_10:
0x00046c3a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00046c3c movs r3, 0 | r3 = 0;
0x00046c3e str r3, [sp] | *(sp) = r3;
0x00046c40 mov r2, r8 | r2 = r8;
0x00046c42 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00046c44 movs r1, 0x32 | r1 = 0x32;
0x00046c46 mov r0, r4 | r0 = r4;
0x00046c48 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046c4c cmp.w sl, 0 |
| if (sl == 0) {
0x00046c50 beq 0x46ca4 | goto label_32;
| }
0x00046c52 ldr r3, [r4] | r3 = *(r4);
0x00046c54 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00046c58 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00046c5a cmp r2, 0 |
| if (r2 != 0) {
0x00046c5c bne 0x46cee | goto label_33;
| }
0x00046c5e subs r3, 1 | r3--;
0x00046c60 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x00046c64 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00046c66 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
| label_12:
0x00046c6a str.w fp, [r3, 8] | __asm ("str.w fp, [r3, 8]");
0x00046c6e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00046c70 cmp.w sb, 0x6a |
0x00046c74 ite ne |
| if (sb == 0x6a) {
0x00046c76 movne r3, 0 | r3 = 0;
| }
| if (sb != 0x6a) {
0x00046c78 andeq r3, r3, 1 | r3 &= 1;
| }
0x00046c7c mov sl, r3 | sl = r3;
0x00046c7e b 0x469fa | goto label_8;
| label_30:
0x00046c80 cmp r2, 0x37 |
| if (r2 == 0x37) {
0x00046c82 beq 0x46cf6 | goto label_34;
| }
0x00046c84 cmp r2, 0x39 |
| if (r2 != 0x39) {
0x00046c86 bne 0x46d66 | goto label_35;
| }
0x00046c88 mov.w sb, 0x6a | sb = 0x6a;
| label_14:
0x00046c8c movs r2, 0 | r2 = 0;
0x00046c8e ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00046c90 movs r1, 8 | r1 = 8;
0x00046c92 mov r0, r4 | r0 = r4;
0x00046c94 str r2, [sp] | *(sp) = r2;
0x00046c96 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046c9a movs r3, 0x39 | r3 = 0x39;
0x00046c9c ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00046ca0 str r3, [sp, 8] | var_8h = r3;
0x00046ca2 b 0x46c0a |
| } while (1);
| label_32:
0x00046ca4 ldr r7, [sp, 0x18] | r7 = var_18h;
0x00046ca6 mov r2, sl | r2 = sl;
0x00046ca8 movs r1, 0x75 | r1 = 0x75;
0x00046caa mov r0, r4 | r0 = r4;
0x00046cac str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00046cb0 mov r3, r7 | r3 = r7;
0x00046cb2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046cb6 ldr r2, [pc, 0xc8] |
0x00046cb8 mov r1, r0 | r1 = r0;
0x00046cba mov.w r3, -1 | r3 = -1;
0x00046cbe mov r0, r4 | r0 = r4;
0x00046cc0 add r2, pc | r2 = 0x8da46;
0x00046cc2 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x00046cc6 mov r3, sl | r3 = sl;
0x00046cc8 mov r2, r7 | r2 = r7;
0x00046cca movs r1, 0x39 | r1 = 0x39;
0x00046ccc mov r0, r4 | r0 = r4;
0x00046cce str r6, [sp] | *(sp) = r6;
0x00046cd0 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046cd4 mov fp, r0 |
0x00046cd6 b 0x46b5c | goto label_9;
| label_31:
0x00046cd8 ldr r3, [pc, 0xa8] |
0x00046cda add r3, pc | r3 = 0x8da62;
0x00046cdc adds r3, 4 | r3 += 4;
0x00046cde b 0x46c3a | goto label_10;
| label_27:
0x00046ce0 ldr r3, [r5] | r3 = *(r5);
0x00046ce2 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00046ce4 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
0x00046ce6 itt pl |
| if (r2 < r3) {
0x00046ce8 movpl r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x00046cea strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x00046cec b 0x46b88 | goto label_11;
| label_33:
0x00046cee ldr r3, [pc, 0x98] |
0x00046cf0 add r3, pc | r3 = 0x8da7e;
0x00046cf2 adds r3, 4 | r3 += 4;
0x00046cf4 b 0x46c6a | goto label_12;
| label_34:
0x00046cf6 mov.w sb, 0x6a | sb = 0x6a;
| do {
0x00046cfa movs r3, 0 | r3 = 0;
0x00046cfc mov r2, r8 | r2 = r8;
0x00046cfe str r3, [sp] | *(sp) = r3;
0x00046d00 movs r1, 0x32 | r1 = 0x32;
0x00046d02 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00046d04 mov r0, r4 | r0 = r4;
0x00046d06 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046d0a movs r3, 0x37 | r3 = 0x37;
0x00046d0c ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00046d10 str r3, [sp, 8] | var_8h = r3;
0x00046d12 b 0x46c0a | goto label_13;
| label_29:
0x00046d14 movs r3, 0 | r3 = 0;
0x00046d16 mov r2, r6 | r2 = r6;
0x00046d18 str r3, [sp] | *(sp) = r3;
0x00046d1a movs r1, 0x33 | r1 = 0x33;
0x00046d1c mov r0, r4 | r0 = r4;
0x00046d1e mov sl, r3 | sl = r3;
0x00046d20 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046d24 movs r3, 0x38 | r3 = 0x38;
0x00046d26 mov r7, r0 | r7 = r0;
0x00046d28 mov.w sb, 0x6b | sb = 0x6b;
0x00046d2c str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
0x00046d30 str r3, [sp, 8] | var_8h = r3;
0x00046d32 b 0x46c0a | goto label_13;
| label_26:
0x00046d34 movs r3, 0 | r3 = 0;
0x00046d36 mov r2, r6 | r2 = r6;
0x00046d38 movs r1, 0x33 | r1 = 0x33;
0x00046d3a mov r0, r4 | r0 = r4;
0x00046d3c str r3, [sp] | *(sp) = r3;
0x00046d3e mov.w sb, 0x6b | sb = 0x6b;
0x00046d42 str r3, [sp, 0x1c] | var_1ch = r3;
0x00046d44 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046d48 mov r7, r0 | r7 = r0;
0x00046d4a b 0x46cfa |
| } while (1);
| label_28:
0x00046d4c movs r3, 0 | r3 = 0;
0x00046d4e mov r2, r6 | r2 = r6;
0x00046d50 str r3, [sp] | *(sp) = r3;
0x00046d52 movs r1, 0x33 | r1 = 0x33;
0x00046d54 mov r0, r4 | r0 = r4;
0x00046d56 mov.w sb, 0x6b | sb = 0x6b;
0x00046d5a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00046d5e movs r3, 1 | r3 = 1;
0x00046d60 mov r7, r0 | r7 = r0;
0x00046d62 str r3, [sp, 0x1c] | var_1ch = r3;
0x00046d64 b 0x46c8c | goto label_14;
| label_35:
0x00046d66 movs r3, 0x38 | r3 = 0x38;
0x00046d68 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00046d6c mov.w sb, 0x6a | sb = 0x6a;
0x00046d70 str r3, [sp, 8] | var_8h = r3;
0x00046d72 b 0x46c0a | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x475b4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000475b4 () | void fcn_000475b4 (int16_t arg_0h, int16_t arg_4h, int16_t arg_10h, arithmetic x, int16_t arg_1ch, int16_t arg_20h, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_58h, int16_t arg_50h, int16_t arg_54h, int16_t arg_5ch, uint32_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| uint32_t var_1ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000475b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000475b8 sub sp, 0x24 |
0x000475ba ldr.w fp, [sp, 0x54] | fp = *(arg_54h);
0x000475be mov r1, r0 | r1 = r0;
0x000475c0 mov.w lr, 0 | lr = 0;
0x000475c4 ldr r4, [r1, 8] | r4 = *((r1 + 8));
0x000475c6 ldr.w sl, [r1, 4] | sl = *((r1 + 4));
0x000475ca str r0, [sp, 0x1c] | var_1ch = r0;
0x000475cc ldr.w r1, [fp, 0x10] | r1 = *(arg_10h);
0x000475d0 ldr r0, [r0] | r0 = *(r0);
0x000475d2 ldr.w r5, [fp] | r5 = *(fp);
0x000475d6 str r1, [sp, 8] | var_8h = r1;
0x000475d8 ldr r1, [r0] | r1 = *(r0);
0x000475da ldrb.w ip, [r4, 0x10] | ip = *((r4 + 0x10));
0x000475de cmp r5, lr |
0x000475e0 ldrd r6, r7, [sp, 0x48] | __asm ("ldrd r6, r7, [arg_0h]");
0x000475e4 str r1, [sp, 4] | var_4h = r1;
0x000475e6 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x000475e8 str r1, [sp, 0xc] | var_ch = r1;
0x000475ea ldr r1, [sp, 0x5c] | r1 = *(arg_5ch);
0x000475ec str.w lr, [r1] | __asm ("str.w lr, [r1]");
0x000475f0 strd r2, r3, [r4] | __asm ("strd r2, r3, [r4]");
0x000475f4 ldrh.w r3, [sp, 0x50] | r3 = *(arg_50h);
0x000475f8 ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x000475fc str r3, [sp] | *(sp) = r3;
0x000475fe ldrh.w r3, [sp, 0x58] | r3 = *(arg_10h);
0x00047602 str r3, [sp, 0x18] | var_18h = r3;
| if (r5 <= lr) {
0x00047604 ble 0x47662 | goto label_19;
| }
0x00047606 ldr.w sb, [sl, 0x18] | sb = *((sl + 0x18));
0x0004760a mov r1, lr | r1 = lr;
0x0004760c strd ip, sl, [sp, 0x10] | __asm ("strd ip, sl, [var_10h]");
0x00047610 mov r8, lr | r8 = lr;
0x00047612 mov sl, r6 | sl = r6;
0x00047614 b 0x4761e |
| while (ip != r0) {
| label_0:
0x00047616 adds r1, 1 | r1++;
0x00047618 adds r2, 0xc | r2 += 0xc;
0x0004761a cmp r5, r1 |
| if (r5 == r1) {
0x0004761c beq 0x4765e | goto label_20;
| }
| label_1:
0x0004761e ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x00047620 strb.w r8, [r2, 5] | *((r2 + 5)) = r8;
0x00047624 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00047628 add.w r3, sb, r3, lsl 4 | r3 = sb + (r3 << 4);
0x0004762c ldrd r6, r0, [r3, 0x20] | __asm ("ldrd r6, r0, [r3, 0x20]");
0x00047630 and.w lr, sl, r6 | lr = sl & r6;
0x00047634 and.w ip, r7, r0 |
0x00047638 cmp ip, r0 |
0x0004763a it eq |
| if (ip == r0) {
0x0004763c cmpeq lr, r6 | __asm ("cmpeq lr, r6");
| }
0x0004763e bne 0x47616 |
| }
0x00047640 ldrh r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00047642 ldr r6, [sp] | r6 = *(sp);
0x00047644 tst r6, r0 |
| if ((r6 & r0) != 0) {
0x00047646 bne 0x47616 | goto label_0;
| }
0x00047648 ldr r0, [sp, 0x60] | r0 = *(x);
0x0004764a cmp r0, 0 |
| if (r0 == 0) {
0x0004764c beq 0x47734 | goto label_21;
| }
| label_2:
0x0004764e adds r1, 1 | r1++;
0x00047650 mov.w r3, 1 | r3 = 1;
0x00047654 cmp r5, r1 |
0x00047656 strb r3, [r2, 5] | *((r2 + 5)) = r3;
0x00047658 add.w r2, r2, 0xc | r2 += 0xc;
| if (r5 != r1) {
0x0004765c bne 0x4761e | goto label_1;
| }
| label_20:
0x0004765e ldrd ip, sl, [sp, 0x10] | __asm ("ldrd ip, sl, [var_10h]");
| label_19:
0x00047662 lsl.w r3, ip, 6 | r3 = ip << 6;
0x00047666 lsls r2, r5, 3 | r2 = r5 << 3;
0x00047668 ldr r0, [sp, 8] | r0 = var_8h;
0x0004766a movs r1, 0 | r1 = 0;
0x0004766c mov r6, r3 | r6 = r3;
0x0004766e str r3, [sp] | *(sp) = r3;
0x00047670 blx 0x62ec | fcn_000062ec ();
0x00047674 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00047676 add r2, r6 | r2 += r6;
0x00047678 addw r7, pc, 0x47c | __asm ("addw r7, pc, 0x47c");
0x0004767c ldrd r6, r7, [r7] | __asm ("ldrd r6, r7, [r7]");
0x00047680 ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x00047682 ldrd r0, r1, [r2, 0x38] | __asm ("ldrd r0, r1, [r2, 0x38]");
0x00047686 movs r2, 0 | r2 = 0;
0x00047688 ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x0004768a strd r2, r2, [fp, 0x14] | __asm ("strd r2, r2, [fp, 0x14]");
0x0004768e str.w r2, [fp, 0x20] | __asm ("str.w r2, [arg_20h]");
0x00047692 str.w r2, [fp, 0x38] | __asm ("str.w r2, [arg_38h]");
0x00047696 str.w r2, [fp, 0x58] | __asm ("str.w r2, [arg_58h]");
0x0004769a ldr r2, [sp, 4] | r2 = var_4h;
0x0004769c strd r0, r1, [fp, 0x40] | __asm ("strd r0, r1, [fp, 0x40]");
0x0004769e lsls r0, r2, 4 | r0 = r2 << 4;
0x000476a0 ldr r1, [r2] | r1 = *(r2);
0x000476a2 strd r6, r7, [fp, 0x28] | __asm ("strd r6, r7, [fp, 0x28]");
0x000476a6 movs r6, 0x19 | r6 = 0x19;
0x000476a8 movs r7, 0 | r7 = 0;
0x000476aa strd r6, r7, [fp, 0x30] | __asm ("strd r6, r7, [fp, 0x30]");
| if (r3 != 0) {
0x000476ae cbnz r3, 0x476ba | goto label_22;
| }
0x000476b0 b 0x47aea | goto label_23;
| do {
0x000476b2 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000476b4 cmp r3, 0 |
| if (r3 == 0) {
0x000476b6 beq.w 0x47aea | goto label_23;
| }
| label_22:
0x000476ba ldr r2, [r3] | r2 = *(r3);
0x000476bc cmp r1, r2 |
0x000476be bne 0x476b2 |
| } while (r1 != r2);
0x000476c0 ldr.w r8, [r3, 8] | r8 = *((r3 + 8));
0x000476c4 ldr r3, [r1, 0x38] | r3 = *((r1 + 0x38));
0x000476c6 mov r0, r8 | r0 = r8;
0x000476c8 adds r3, 1 | r3++;
0x000476ca str r3, [r1, 0x38] | *((r1 + 0x38)) = r3;
0x000476cc mov r1, fp | r1 = fp;
0x000476ce ldr.w r3, [r8] | r3 = *(r8);
0x000476d2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000476d4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000476d6 ldr r3, [sp, 4] | r3 = var_4h;
0x000476d8 cmp r0, 0 |
0x000476da it ne |
| if (r0 != 0) {
0x000476dc cmpne r0, 0x13 | __asm ("cmpne r0, 0x13");
| }
0x000476de mov r6, r0 | r6 = r0;
0x000476e0 ite ne |
| if (r0 == 0) {
0x000476e2 movne r7, 1 | r7 = 1;
| }
| if (r0 != 0) {
0x000476e4 moveq r7, 0 | r7 = 0;
| }
0x000476e6 ldr r2, [r3] | r2 = *(r3);
0x000476e8 ldr r3, [r2, 0x38] | r3 = *((r2 + 0x38));
0x000476ea add.w r3, r3, -1 | r3 += -1;
0x000476ee str r3, [r2, 0x38] | *((r2 + 0x38)) = r3;
| if (r0 == 0) {
0x000476f0 beq 0x47722 | goto label_24;
| }
0x000476f2 cmp r0, 7 |
| if (r0 == 7) {
0x000476f4 beq.w 0x478c2 | goto label_25;
| }
0x000476f8 ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x000476fc cmp r2, 0 |
| if (r2 == 0) {
0x000476fe beq.w 0x47892 | goto label_26;
| }
0x00047702 ldr r1, [pc, 0x3fc] |
0x00047704 ldr r0, [sp, 4] | r0 = var_4h;
0x00047706 add r1, pc | r1 = 0x8f20c;
0x00047708 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_11:
0x0004770c ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00047710 bl 0x26dbc | fcn_00026dbc (r0);
| label_12:
0x00047714 movs r3, 0 | r3 = 0;
0x00047716 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| do {
| label_10:
0x0004771a mov r0, r6 | r0 = r6;
0x0004771c add sp, 0x24 |
0x0004771e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x00047722 ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00047726 bl 0x26dbc | fcn_00026dbc (r0);
0x0004772a str.w r7, [r8, 8] | __asm ("str.w r7, [r8, 8]");
| if (r6 == 0) {
0x0004772e cbz r6, 0x4773e | goto label_27;
| }
| label_5:
0x00047730 movs r6, 0 | r6 = 0;
0x00047732 b 0x4771a |
| } while (1);
| label_21:
0x00047734 ldrb r3, [r3, 0xf] | r3 = *((r3 + 0xf));
0x00047736 subs r3, 0x49 | r3 -= 0x49;
0x00047738 cmp r3, 1 |
| if (r3 > 1) {
0x0004773a bhi 0x4764e | goto label_2;
| }
0x0004773c b 0x47616 | goto label_0;
| label_27:
0x0004773e ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x00047740 lsls r2, r5, 2 | r2 = r5 << 2;
0x00047742 mov r1, r6 | r1 = r6;
0x00047744 blx 0x62ec | fcn_000062ec ();
0x00047748 cmp r5, 0 |
0x0004774a str r6, [r4, 0x18] | *((r4 + 0x18)) = r6;
0x0004774c str r6, [r4, 0x1c] | *((r4 + 0x1c)) = r6;
0x0004774e str r6, [r4, 0x20] | *((r4 + 0x20)) = r6;
0x00047750 str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x00047752 ldr.w lr, [fp, 4] |
| if (r5 <= 0) {
0x00047756 ble.w 0x47936 | goto label_28;
| }
0x0004775a ldr r3, [sp, 8] | r3 = var_8h;
0x0004775c mov r7, r6 | r7 = r6;
0x0004775e mov.w sb, -1 | sb = -1;
0x00047762 str r6, [sp, 8] | var_8h = r6;
0x00047764 add.w ip, r3, 4 |
0x00047768 b 0x477a0 | goto label_29;
| label_3:
0x0004776a movs r1, 0 | r1 = 0;
0x0004776c movs r0, 1 | r0 = 1;
0x0004776e str.w r1, [fp, 0x20] | __asm ("str.w r1, [arg_20h]");
0x00047772 ldr.w r1, [fp, 0x38] | r1 = *(arg_38h);
0x00047776 bic r1, r1, 1 | r1 = BIT_MASK (r1, 1);
0x0004777a str.w r1, [fp, 0x38] | __asm ("str.w r1, [arg_38h]");
0x0004777e ldr r1, [sp, 0x5c] | r1 = *(arg_5ch);
0x00047780 str r0, [r1] | *(r1) = r0;
0x00047782 ldrb r3, [r3, 0xf] | r3 = *((r3 + 0xf));
0x00047784 subs r3, 0x49 | r3 -= 0x49;
0x00047786 cmp r3, r0 |
| if (r3 < r0) {
0x00047788 bls 0x47828 | goto label_30;
| }
| label_4:
0x0004778a cmp sb, r2 |
0x0004778c it lt |
0x0004778e movlt sb, r2 | sb = r2;
| while (r2 < 1) {
0x00047790 adds r7, 1 | r7++;
0x00047792 add.w lr, lr, 0xc | lr += 0xc;
0x00047796 cmp r5, r7 |
0x00047798 add.w ip, ip, 8 |
| if (r5 == r7) {
0x0004779c beq.w 0x478e6 | goto label_31;
| }
| label_29:
0x000477a0 ldr r2, [ip, -0x4] | r2 = *((ip - 0x4));
0x000477a4 subs r2, 1 | r2--;
0x000477a6 bmi 0x47790 |
| }
0x000477a8 ldr.w r3, [lr, 8] | r3 = *((lr + 8));
0x000477ac lsrs r1, r3, 0x1f | r1 = r3 >> 0x1f;
0x000477ae cmp r5, r2 |
0x000477b0 it le |
| if (r5 > r2) {
0x000477b2 orrle r1, r1, 1 | r1 |= 1;
| }
0x000477b6 cmp r1, 0 |
| if (r1 != 0) {
0x000477b8 bne 0x4787a | goto label_32;
| }
0x000477ba ldr.w r1, [sl, 0xc] | r1 = *((sl + 0xc));
0x000477be cmp r1, r3 |
| if (r1 <= r3) {
0x000477c0 ble 0x4787a | goto label_32;
| }
0x000477c2 ldr.w r8, [r4, 0x34] | r8 = *((r4 + 0x34));
0x000477c6 ldr.w r1, [r8, r2, lsl 2] | offset_0 = r2 << 2;
| r1 = *((r8 + offset_0));
0x000477ca cmp r1, 0 |
| if (r1 != 0) {
0x000477cc bne 0x4787a | goto label_32;
| }
0x000477ce ldrb.w r1, [lr, 5] | r1 = *((lr + 5));
0x000477d2 cmp r1, 0 |
| if (r1 == 0) {
0x000477d4 beq 0x4787a | goto label_32;
| }
0x000477d6 ldr.w r1, [sl, 0x18] | r1 = *((sl + 0x18));
0x000477da add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000477de add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x000477e2 ldrd r0, r1, [r4] | __asm ("ldrd r0, r1, [r4]");
0x000477e6 ldr r6, [r3, 0x20] | r6 = *((r3 + 0x20));
0x000477e8 orrs r0, r6 | r0 |= r6;
0x000477ea ldr r6, [r3, 0x24] | r6 = *((r3 + 0x24));
0x000477ec str r0, [r4] | *(r4) = r0;
0x000477ee orrs r1, r6 | r1 |= r6;
0x000477f0 str r1, [r4, 4] | *((r4 + 4)) = r1;
0x000477f2 str.w r3, [r8, r2, lsl 2] | __asm ("str.w r3, [r8, r2, lsl 2]");
0x000477f6 ldrb.w r1, [ip] | r1 = *(ip);
| if (r1 != 0) {
0x000477fa cbz r1, 0x4780e |
0x000477fc cmp r7, 0xf |
0x000477fe ldrb r1, [r3, 0xf] | r1 = *((r3 + 0xf));
| if (r7 <= 0xf) {
0x00047800 ble 0x4783a | goto label_33;
| }
0x00047802 cmp r1, 0x4a |
0x00047804 ittt eq |
| if (r1 != 0x4a) {
0x00047806 ldrbeq r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
| }
| if (r1 != 0x4a) {
0x00047808 orreq r1, r1, 2 | r1 |= 2;
| }
| if (r1 != 0x4a) {
0x0004780c strb r1, [r4, 0x1c] | *((r4 + 0x1c)) = r1;
| goto label_34;
| }
| }
| label_34:
0x0004780e cmp r7, 0x1f |
| if (r7 <= 0x1f) {
0x00047810 ble 0x4785a | goto label_8;
| }
| label_6:
0x00047812 ldrh r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00047814 lsls r1, r1, 0x1f | r1 <<= 0x1f;
| if (r1 < r1) {
0x00047816 bmi 0x4776a | goto label_3;
| }
| label_7:
0x00047818 ldrb r3, [r3, 0xf] | r3 = *((r3 + 0xf));
0x0004781a subs r3, 0x49 | r3 -= 0x49;
0x0004781c cmp r3, 1 |
| if (r3 > 1) {
0x0004781e bhi 0x4778a | goto label_4;
| }
0x00047820 ldr r3, [sp, 0x5c] | r3 = *(arg_5ch);
0x00047822 ldr r3, [r3] | r3 = *(r3);
0x00047824 cmp r3, 0 |
| if (r3 == 0) {
0x00047826 beq 0x4778a | goto label_4;
| }
| label_30:
0x00047828 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x0004782c cmp r3, 0 |
| if (r3 != 0) {
0x0004782e bne.w 0x47aa0 | goto label_35;
| }
| label_17:
0x00047832 ldr r2, [sp, 0x60] | r2 = *(x);
0x00047834 movs r3, 1 | r3 = 1;
0x00047836 str r3, [r2] | *(r2) = r3;
0x00047838 b 0x47730 | goto label_5;
| label_33:
0x0004783a ldr r0, [sp, 0x18] | r0 = var_18h;
0x0004783c asrs r0, r7 | r0 >>= r7;
0x0004783e lsls r0, r0, 0x1f | r0 <<= 0x1f;
| if (r0 < r0) {
0x00047840 bmi 0x47874 | goto label_36;
| }
0x00047842 ldrh r6, [r4, 0x1e] | r6 = *((r4 + 0x1e));
0x00047844 movs r0, 1 | r0 = 1;
0x00047846 lsls r0, r2 | r0 <<= r2;
0x00047848 cmp r1, 0x4a |
0x0004784a orr.w r0, r0, r6 | r0 |= r6;
0x0004784c movs r6, r0 | r6 = r0;
0x0004784e strh r0, [r4, 0x1e] | *((r4 + 0x1e)) = r0;
| if (r6 == r0) {
0x00047850 bne 0x4785a |
| label_9:
0x00047852 ldrb r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00047854 orr r1, r1, 2 | r1 |= 2;
0x00047858 strb r1, [r4, 0x1c] | *((r4 + 0x1c)) = r1;
| }
| label_8:
0x0004785a ldr.w r1, [fp, 0x58] | r1 = *(arg_58h);
0x0004785e movs r6, 1 | r6 = 1;
0x00047860 lsl.w r0, r6, r7 | r0 = r6 << r7;
0x00047864 tst r0, r1 |
| if ((r0 & r1) == 0) {
0x00047866 beq 0x47812 | goto label_6;
| }
0x00047868 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0004786a lsl.w r0, r6, r2 | r0 = r6 << r2;
0x0004786e orrs r1, r0 | r1 |= r0;
0x00047870 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x00047872 b 0x47818 | goto label_7;
| label_36:
0x00047874 cmp r1, 0x4a |
| if (r1 != 0x4a) {
0x00047876 bne 0x4785a | goto label_8;
| }
0x00047878 b 0x47852 | goto label_9;
| label_32:
0x0004787a ldr r2, [sp] | r2 = *(sp);
0x0004787c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004787e ldr r1, [pc, 0x284] |
0x00047880 ldr r0, [sp, 4] | r0 = var_4h;
0x00047882 add r3, r2 | r3 += r2;
0x00047884 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00047886 add r1, pc | r1 = 0x8f390;
0x00047888 ldr r2, [r3] | r2 = *(r3);
0x0004788a bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_13:
0x0004788e movs r6, 1 | r6 = 1;
0x00047890 b 0x4771a | goto label_10;
| label_26:
0x00047892 cmp r0, 0x65 |
| if (r0 == 0x65) {
0x00047894 beq.w 0x47a22 | goto label_37;
| }
0x00047898 cmp.w r0, 0x204 |
| if (r0 == 0x204) {
0x0004789c beq.w 0x47a1c | goto label_38;
| }
0x000478a0 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000478a2 beq.w 0x47a16 | goto label_39;
| }
0x000478a6 uxtb r3, r0 | r3 = (int8_t) r0;
0x000478a8 cmp r3, 0x1c |
| if (r3 > 0x1c) {
0x000478aa bgt 0x4791e | goto label_40;
| }
0x000478ac ldr r2, [pc, 0x258] |
0x000478ae add r2, pc | r2 = 0x8f3ba;
0x000478b0 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x000478b4 ldr.w r2, [r3, 0x248] | r2 = *((r3 + 0x248));
0x000478b8 cmp r2, 0 |
| if (r2 != 0) {
0x000478ba bne 0x47922 | goto label_14;
| }
0x000478bc ldr r2, [pc, 0x24c] |
0x000478be add r2, pc | r2 = 0x8f3ce;
0x000478c0 b 0x47922 | goto label_14;
| label_25:
0x000478c2 ldrb.w r3, [r2, 0x57] | r3 = *((r2 + 0x57));
0x000478c6 cmp r3, 0 |
| if (r3 != 0) {
0x000478c8 bne.w 0x4770c | goto label_11;
| }
0x000478cc ldrb.w r3, [r2, 0x58] | r3 = *((r2 + 0x58));
0x000478d0 cmp r3, 0 |
| if (r3 != 0) {
0x000478d2 bne.w 0x4770c | goto label_11;
| }
0x000478d6 mov r0, r2 | r0 = r2;
0x000478d8 bl 0x38024 | fcn_00038024 (r0);
0x000478dc ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x000478e0 bl 0x26dbc | fcn_00026dbc (r0);
0x000478e4 b 0x47714 | goto label_12;
| label_31:
0x000478e6 cmp.w sb, -1 |
0x000478ea add.w r3, sb, 1 | r3 = sb + 1;
0x000478ee ldr r6, [sp, 8] | r6 = var_8h;
0x000478f0 strh r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| if (sb == -1) {
0x000478f2 beq 0x47938 | goto label_41;
| }
0x000478f4 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000478f6 subs r3, 4 | r3 -= 4;
0x000478f8 b 0x47900 |
| while (r2 != 0) {
0x000478fa adds r6, 1 | r6++;
0x000478fc cmp sb, r6 |
| if (sb < r6) {
0x000478fe blt 0x47938 | goto label_41;
| }
0x00047900 ldr r2, [r3, 4]! | r2 = *((r3 += 4));
0x00047904 cmp r2, 0 |
0x00047906 bne 0x478fa |
| }
0x00047908 ldr r2, [sp] | r2 = *(sp);
0x0004790a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004790c ldr r1, [pc, 0x200] |
0x0004790e ldr r0, [sp, 4] | r0 = var_4h;
0x00047910 add r3, r2 | r3 += r2;
0x00047912 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00047914 add r1, pc | r1 = 0x8f428;
0x00047916 ldr r2, [r3] | r2 = *(r3);
0x00047918 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0004791c b 0x4788e | goto label_13;
| label_40:
0x0004791e ldr r2, [pc, 0x1f4] |
0x00047920 add r2, pc | r2 = 0x8f43a;
| label_14:
0x00047922 ldr r1, [pc, 0x1f4] |
0x00047924 ldr r0, [sp, 4] | r0 = var_4h;
0x00047926 add r1, pc | r1 = 0x8f444;
0x00047928 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0004792c ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00047930 bl 0x26dbc | fcn_00026dbc (r0);
0x00047934 b 0x47714 | goto label_12;
| label_28:
0x00047936 strh r6, [r4, 0x2c] | *((r4 + 0x2c)) = r6;
| label_41:
0x00047938 ldr.w r1, [fp, 0x1c] | r1 = *(arg_1ch);
0x0004793c ldrb r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0004793e ldr.w r2, [fp, 0x14] | r2 = *(arg_5ch);
0x00047942 bfi r3, r1, 0, 1 | value_1 = BIT_MASK (0, 1);
| value_2 = r1 & value_1;
| value_1 = ~value_1;
| r3 &= value_1;
| r3 |= value_2;
0x00047946 movs r1, 0 | r1 = 0;
0x00047948 strb r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0004794a ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x0004794e str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x00047950 ldr.w r2, [fp, 0x18] | r2 = *(x);
0x00047954 str.w r1, [fp, 0x1c] | __asm ("str.w r1, [arg_1ch]");
0x00047958 str r2, [r4, 0x20] | *((r4 + 0x20)) = r2;
| if (r3 != 0) {
0x0004795a cbz r3, 0x47960 |
0x0004795c ldrsb.w r3, [fp, 8] | r3 = *(arg_50h);
| }
0x00047960 vldr d7, [fp, 0x28] | __asm ("vldr d7, [fp, 0x28]");
0x00047964 movs r5, 0 | r5 = 0;
0x00047966 vmov.f64 d16, 1.000000e+00 | __asm ("vmov.f64 d16, 1");
0x0004796a strb r3, [r4, 0x1d] | *((r4 + 0x1d)) = r3;
0x0004796c strh r5, [r4, 0x12] | *((r4 + 0x12)) = r5;
0x0004796e vcmpe.f64 d7, d16 | __asm ("vcmpe.f64 d7, d16");
0x00047972 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 >= 0) {
0x00047976 bls 0x47998 |
0x00047978 vldr d16, [pc, 0x174] | __asm ("vldr d16, [0x00047af4]");
0x0004797c vcmpe.f64 d7, d16 | __asm ("vcmpe.f64 d7, d16");
0x00047980 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 < 0) {
0x00047984 bls 0x47a5a | goto label_42;
| }
0x00047986 vmov r3, s15 | __asm ("vmov r3, s15");
0x0004798a lsrs r3, r3, 0x14 | r3 >>= 0x14;
0x0004798c subw r3, r3, 0x3fe | __asm ("subw r3, r3, 0x3fe");
0x00047990 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00047994 lsls r5, r3, 1 | r5 = r3 << 1;
0x00047996 sxth r5, r5 | __asm ("sxth r5, r5");
| }
| label_16:
0x00047998 ldr.w r3, [fp, 0x30] | r3 = *(arg_30h);
0x0004799c ldr.w r0, [fp, 0x34] | r0 = *(arg_34h);
0x000479a0 strh r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000479a2 cmp r3, 8 |
0x000479a4 sbcs r2, r0, 0 | __asm ("sbcs r2, r0, 0");
| if (r3 >= 8) {
0x000479a8 bhs 0x47a28 | goto label_43;
| }
0x000479aa cmp r3, 2 |
0x000479ac sbcs r2, r0, 0 | __asm ("sbcs r2, r0, 0");
0x000479b0 it lo |
| if (r3 >= 2) {
0x000479b2 movlo r3, 0 | r3 = 0;
| }
| if (r3 > 2) {
0x000479b4 blo 0x479de |
0x000479b6 adds r2, r3, r3 | r2 = r3 + r3;
0x000479b8 adcs r0, r0 | __asm ("adcs r0, r0");
0x000479ba cmp r2, 8 |
0x000479bc sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
| if (r2 >= 8) {
0x000479c0 bhs.w 0x47ae2 | goto label_44;
| }
0x000479c4 lsls r2, r3, 2 | r2 = r3 << 2;
0x000479c6 movs r3, 0x14 | r3 = 0x14;
| label_15:
0x000479c8 ldr r1, [pc, 0x150] |
0x000479ca and r2, r2, 7 | r2 &= 7;
0x000479ce subs r3, 0xa | r3 -= 0xa;
0x000479d0 add r1, pc | r1 = 0x8f4f0;
0x000479d2 add.w r2, r1, r2, lsl 1 | r2 = r1 + (r2 << 1);
0x000479d6 ldrh.w r2, [r2, 0x408] | r2 = *((r2 + 0x408));
0x000479da add r3, r2 | r3 += r2;
0x000479dc sxth r3, r3 | __asm ("sxth r3, r3");
| }
0x000479de ldr.w r2, [fp, 0x38] | r2 = *(arg_38h);
0x000479e2 mov r1, r4 | r1 = r4;
0x000479e4 strh r3, [r4, 0x16] | *((r4 + 0x16)) = r3;
0x000479e6 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x000479e8 lsls r2, r2, 0x1f | r2 <<= 0x1f;
0x000479ea ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000479ec ite mi |
| if (r2 >= r2) {
0x000479ee orrmi r3, r3, 0x1000 | r3 |= 0x1000;
| }
| if (r2 >= r2) {
0x000479f2 bic r3, r3, 0x1000 | r3 = BIT_MASK (r3, 0x1000);
| }
0x000479f6 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x000479f8 bl 0x382bc | fcn_000382bc (r0, r1);
0x000479fc ldrb r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000479fe mov r6, r0 | r6 = r0;
0x00047a00 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00047a02 bpl.w 0x4771a | goto label_10;
| }
0x00047a06 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00047a08 bl 0x26dbc | fcn_00026dbc (r0);
0x00047a0c ldrb r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00047a0e bfc r3, 0, 1 | value_3 = BIT_MASK (1, );
| value_3 = ~value_3;
| r3 &= value_3;
0x00047a12 strb r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00047a14 b 0x4771a | goto label_10;
| label_39:
0x00047a16 ldr r2, [pc, 0x108] |
0x00047a18 add r2, pc | r2 = 0x8f53e;
0x00047a1a b 0x47922 | goto label_14;
| label_38:
0x00047a1c ldr r2, [pc, 0x104] |
0x00047a1e add r2, pc | r2 = 0x8f546;
0x00047a20 b 0x47922 | goto label_14;
| label_37:
0x00047a22 ldr r2, [pc, 0x104] |
0x00047a24 add r2, pc | r2 = 0x8f552;
0x00047a26 b 0x47922 | goto label_14;
| label_43:
0x00047a28 clz r1, r0 | r1 &= r0;
| if (r0 == 0) {
0x00047a2c cbnz r0, 0x47a34 |
0x00047a2e clz r1, r3 | r1 &= r3;
0x00047a32 adds r1, 0x20 | r1 += 0x20;
| }
0x00047a34 rsb.w r1, r1, 0x3c | r1 = 0x3c - r1;
0x00047a38 lsr.w r2, r3, r1 | r2 = r3 >> r1;
0x00047a3c add.w r3, r1, r1, lsl 2 | r3 = r1 + (r1 << 2);
0x00047a40 rsb.w r5, r1, 0x20 | r5 = 0x20 - r1;
0x00047a44 lsls r3, r3, 1 | r3 <<= 1;
0x00047a46 lsl.w r5, r0, r5 | r5 = r0 << r5;
0x00047a4a subs r1, 0x20 | r1 -= 0x20;
0x00047a4c lsr.w r1, r0, r1 | r1 = r0 >> r1;
0x00047a50 adds r3, 0x28 | r3 += 0x28;
0x00047a52 orrs r2, r5 | r2 |= r5;
0x00047a54 uxth r3, r3 | r3 = (int16_t) r3;
0x00047a56 orrs r2, r1 | r2 |= r1;
0x00047a58 b 0x479c8 | goto label_15;
| label_42:
0x00047a5a vmov r0, r1, d7 | __asm ("vmov r0, r1, d7");
0x00047a5e bl 0xc50d0 | r0 = fcn_000c50d0 (r0, r1);
0x00047a62 mov r3, r0 | r3 = r0;
0x00047a64 mov r0, r1 | r0 = r1;
0x00047a66 cmp r3, 8 |
0x00047a68 sbcs r2, r1, 0 | __asm ("sbcs r2, r1, 0");
| if (r3 >= 8) {
0x00047a6c bhs 0x47ab0 | goto label_45;
| }
0x00047a6e cmp r3, 2 |
0x00047a70 sbcs r2, r1, 0 | __asm ("sbcs r2, r1, 0");
| if (r3 <= 2) {
0x00047a74 blo 0x47998 | goto label_16;
| }
0x00047a76 adds r1, r3, r3 | r1 = r3 + r3;
0x00047a78 adcs r0, r0 | __asm ("adcs r0, r0");
0x00047a7a cmp r1, 8 |
0x00047a7c sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
| if (r1 >= 8) {
0x00047a80 bhs 0x47ae6 | goto label_46;
| }
0x00047a82 lsls r1, r3, 2 | r1 = r3 << 2;
0x00047a84 movs r3, 0x14 | r3 = 0x14;
| do {
| label_18:
0x00047a86 sub.w r5, r3, 0xa | r5 = r3 - 0xa;
0x00047a8a ldr r3, [pc, 0xa0] |
0x00047a8c and r1, r1, 7 | r1 &= 7;
0x00047a90 add r3, pc | r3 = 0x8f5c2;
0x00047a92 add.w r3, r3, r1, lsl 1 | r3 += (r1 << 1);
0x00047a96 ldrh.w r3, [r3, 0x408] | r3 = *((r3 + 0x408));
0x00047a9a add r5, r3 | r5 += r3;
0x00047a9c sxth r5, r5 | __asm ("sxth r5, r5");
0x00047a9e b 0x47998 | goto label_16;
| label_35:
0x00047aa0 ldr.w r0, [fp, 0x18] | r0 = *(x);
0x00047aa4 bl 0x26dbc | fcn_00026dbc (r0);
0x00047aa8 movs r3, 0 | r3 = 0;
0x00047aaa strd r3, r3, [fp, 0x18] | __asm ("strd r3, r3, [fp, 0x18]");
0x00047aae b 0x47832 | goto label_17;
| label_45:
0x00047ab0 clz r2, r1 | r2 &= r1;
| if (r1 == 0) {
0x00047ab4 cbnz r1, 0x47abc |
0x00047ab6 clz r2, r3 | r2 &= r3;
0x00047aba adds r2, 0x20 | r2 += 0x20;
| }
0x00047abc rsb.w r2, r2, 0x3c | r2 = 0x3c - r2;
0x00047ac0 lsr.w r1, r3, r2 | r1 = r3 >> r2;
0x00047ac4 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00047ac8 rsb.w r5, r2, 0x20 | r5 = 0x20 - r2;
0x00047acc lsls r3, r3, 1 | r3 <<= 1;
0x00047ace lsl.w r5, r0, r5 | r5 = r0 << r5;
0x00047ad2 subs r2, 0x20 | r2 -= 0x20;
0x00047ad4 lsr.w r2, r0, r2 | r2 = r0 >> r2;
0x00047ad8 adds r3, 0x28 | r3 += 0x28;
0x00047ada orrs r1, r5 | r1 |= r5;
0x00047adc uxth r3, r3 | r3 = (int16_t) r3;
0x00047ade orrs r1, r2 | r1 |= r2;
0x00047ae0 b 0x47a86 |
| } while (1);
| label_44:
0x00047ae2 movs r3, 0x1e | r3 = 0x1e;
0x00047ae4 b 0x479c8 | goto label_15;
| label_46:
0x00047ae6 movs r3, 0x1e | r3 = 0x1e;
0x00047ae8 b 0x47a86 | goto label_18;
| label_23:
0x00047aea movs r3, 0 | r3 = 0;
0x00047aec ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00047aee udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x47b30 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00047b30 () | void fcn_00047b30 (int16_t arg_0h, int16_t arg_4h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, int16_t arg_c0h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int32_t var_74h;
| int32_t var_74h_2;
| arithmetic x;
| int16_t var_88h;
| int16_t var_8ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00047b30 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00047b34 mov r4, r0 | r4 = r0;
0x00047b36 vpush {d8} | __asm ("vpush {d8}");
0x00047b3a sub sp, 0x94 |
0x00047b3c str r0, [sp, 0x34] | var_34h = r0;
0x00047b3e ldr.w r0, [pc, 0x7a0] |
0x00047b42 ldr.w r1, [pc, 0x7a0] | r1 = *(0x482e6);
0x00047b46 ldrd r6, r7, [sp, 0xc0] | __asm ("ldrd r6, r7, [arg_c0h]");
0x00047b4a add r0, pc | r0 = 0x8fe30;
0x00047b4c ldr r1, [r0, r1] |
0x00047b4e ldr r1, [r1] | r1 = *(0x8fe30);
0x00047b50 str r1, [sp, 0x8c] | var_8ch = r1;
0x00047b52 mov.w r1, 0 | r1 = 0;
0x00047b56 strd r2, r3, [sp, 0x2c] | __asm ("strd r2, r3, [var_2ch]");
0x00047b5a mov r3, r4 | r3 = r4;
0x00047b5c ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x00047b5e ldrd r1, r0, [r3] | __asm ("ldrd r1, r0, [r3]");
0x00047b62 movs r2, 0 | r2 = 0;
0x00047b64 str r2, [sp, 0x6c] | var_6ch = r2;
0x00047b66 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00047b68 ldr r5, [r0, 0xc] | r5 = *(0x8fe3c);
0x00047b6a str r0, [sp, 0x38] | var_38h = r0;
0x00047b6c ldr.w sl, [r1, 4] | sl = *((r1 + 4));
0x00047b70 lsl.w r8, r3, 6 | r8 = r3 << 6;
0x00047b72 adds r3, r0, r2 | r3 = r0 + r2;
0x00047b74 mov r3, r0 | r3 = r0;
0x00047b76 ldr r0, [r1] | r0 = *(r1);
0x00047b78 cmp r5, r2 |
0x00047b7a add.w ip, sl, r8 |
0x00047b7e ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00047b80 str r4, [sp, 0x40] | var_40h = r4;
0x00047b82 str r0, [sp, 0x24] | var_24h = r0;
0x00047b84 ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x00047b86 str r0, [sp, 0x3c] | var_3ch = r0;
0x00047b88 ldr.w r0, [ip, 0x18] | r0 = *((ip + 0x18));
0x00047b8c str r0, [sp, 0x44] | var_44h = r0;
| if (r5 <= r2) {
0x00047b8e ble.w 0x4825e | goto label_23;
| }
0x00047b92 ldr.w r4, [ip, 0x30] | r4 = *((ip + 0x30));
0x00047b96 adds r3, 0x30 | r3 += 0x30;
0x00047b98 mov lr, r2 | lr = r2;
0x00047b9a str r1, [sp, 0x28] | var_28h = r1;
0x00047b9c str.w ip, [sp, 0x20] | __asm ("str.w ip, [var_20h]");
| do {
0x00047ba0 ldr r1, [r3, -0x1c] | r1 = *((r3 - 0x1c));
0x00047ba4 movw r0, 0xffbf | r0 = 0xffbf;
0x00047ba8 ldrh ip, [r3, -0x26] | ip = *((r3 - 0x26));
0x00047bac cmp r1, r4 |
0x00047bae and.w r0, ip, r0 | r0 = ip & r0;
0x00047bb2 strh r0, [r3, -0x26] | *((r3 - 0x26)) = r0;
| if (r1 == r4) {
0x00047bb6 bne 0x47c0e |
0x00047bb8 ldr r1, [r3, -0x10] | r1 = *((r3 - 0x10));
0x00047bbc and.w sb, r6, r1 | sb = r6 & r1;
0x00047bc0 ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
0x00047bc4 and.w fp, r7, r1 |
0x00047bc8 orrs.w fp, sb, fp |
| if (fp != sb) {
0x00047bcc bne 0x47c0e | goto label_24;
| }
0x00047bce ldrh sb, [r3, -0x24] | sb = *((r3 - 0x24));
0x00047bd2 bic sb, sb, 0x800 | sb = BIT_MASK (sb, 0x800);
0x00047bd6 cmp.w sb, 0 |
| if (sb == 0) {
0x00047bda beq 0x47c0e | goto label_24;
| }
0x00047bdc tst.w ip, 0x80 |
| if ((ip & 0x80) != 0) {
0x00047be0 bne 0x47c0e | goto label_24;
| }
0x00047be2 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00047be4 ldrb.w ip, [r1, 0x2c] | ip = *((r1 + 0x2c));
0x00047be8 tst.w ip, 0x58 |
| if ((ip & 0x58) != 0) {
0x00047bec beq 0x47c02 |
0x00047bee ldr ip, [r3, -0x30] | ip = *((r3 - 0x30));
0x00047bf2 ldr.w r1, [ip, 4] | r1 = *((ip + 4));
0x00047bf6 lsls r1, r1, 0x1e | r1 <<= 0x1e;
| if (r1 == r1) {
0x00047bf8 beq 0x47c0e | goto label_24;
| }
0x00047bfa ldr.w ip, [ip, 0x24] | ip = *((ip + 0x24));
0x00047bfe cmp r4, ip |
| if (r4 != ip) {
0x00047c00 bne 0x47c0e | goto label_24;
| }
| }
0x00047c02 add.w lr, lr, 1 | lr++;
0x00047c06 orr r0, r0, 0x40 | r0 |= 0x40;
0x00047c0a strh r0, [r3, -0x26] | *((r3 - 0x26)) = r0;
| }
| label_24:
0x00047c0e adds r2, 1 | r2++;
0x00047c10 adds r3, 0x30 | r3 += 0x30;
0x00047c12 cmp r2, r5 |
0x00047c14 bne 0x47ba0 |
| } while (r2 != r5);
0x00047c16 add.w r7, lr, lr, lsl 1 | r7 = lr + (lr << 1);
0x00047c1a ldr r1, [sp, 0x28] | r1 = var_28h;
0x00047c1c mov r4, lr | r4 = lr;
0x00047c1e lsls r7, r7, 3 | r7 <<= 3;
0x00047c20 add.w r3, r7, 0x60 | r3 = r7 + 0x60;
0x00047c24 str r3, [sp, 0x20] | var_20h = r3;
| label_19:
0x00047c26 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00047c28 cmp r3, 0 |
| if (r3 == 0) {
0x00047c2a beq 0x47cfa | goto label_25;
| }
0x00047c2c ldr r5, [r3] | r5 = *(r3);
0x00047c2e cmp r5, 0 |
| if (r5 <= 0) {
0x00047c30 ble.w 0x482d4 | goto label_26;
| }
0x00047c34 ldr.w r7, [pc, 0x6b0] | r7 = *(0x000482e8);
0x00047c38 mov.w sb, 0 | sb = 0;
0x00047c3c ldr.w r2, [pc, 0x6ac] | r2 = *(0x000482ec);
0x00047c40 mov fp, sb |
0x00047c42 mov r6, r3 | r6 = r3;
0x00047c44 mov sb, r1 | sb = r1;
0x00047c46 add r7, pc | r7 += pc;
0x00047c48 str r4, [sp, 0x48] | var_48h = r4;
0x00047c4a add r2, pc | r2 += pc;
0x00047c4c str r2, [sp, 0x28] | var_28h = r2;
| label_5:
0x00047c4e ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x00047c50 mov.w r3, 1 | r3 = 1;
0x00047c54 strh.w r3, [sp, 0x84] | x = r3;
0x00047c58 movs r0, 0 | r0 = 0;
0x00047c5a ldr r3, [sp, 0x28] | r3 = var_28h;
0x00047c5c str r0, [sp, 0x88] | var_88h = r0;
0x00047c5e strd r3, r7, [sp, 0x74] | __asm ("strd r3, r7, [var_74h]");
0x00047c62 cmp r4, 0 |
| if (r4 == 0) {
0x00047c64 beq.w 0x47e2a | goto label_27;
| }
0x00047c68 mov r1, r4 | r1 = r4;
0x00047c6a add r0, sp, 0x70 | r0 += var_70h;
0x00047c6c bl 0x35b0c | fcn_00035b0c (r0, r1);
0x00047c70 ldrh.w r0, [sp, 0x84] | r0 = x;
0x00047c74 cmp r0, 0 |
| if (r0 != 0) {
0x00047c76 bne.w 0x47e2a | goto label_27;
| }
0x00047c7a ldrb r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x00047c7c lsls r3, r0, 0x1e | r3 = r0 << 0x1e;
| if (r3 < r0) {
0x00047c7e bmi 0x47cee | goto label_4;
| }
0x00047c80 ldrb r0, [r4] | r0 = *(r4);
0x00047c82 cmp r0, 0xa7 |
| if (r0 == 0xa7) {
0x00047c84 beq.w 0x47e1c | goto label_28;
| }
0x00047c88 cmp r0, 0x71 |
| if (r0 != 0x71) {
0x00047c8a bne 0x47cee | goto label_4;
| }
0x00047c8c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00047c8e ldrb r0, [r3] | r0 = *(r3);
0x00047c90 cmp r0, 0xa7 |
| if (r0 != 0xa7) {
0x00047c92 bne 0x47cee | goto label_4;
| }
0x00047c94 add.w r0, sl, r8 | r0 = sl + r8;
0x00047c98 ldr r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x00047c9a ldr r0, [r3, 0x1c] | r0 = *((r3 + 0x1c));
0x00047c9c cmp r0, r2 |
| if (r0 != r2) {
0x00047c9e bne 0x47cee | goto label_4;
| }
0x00047ca0 ldrsh.w r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x00047ca4 cmp r0, 0 |
0x00047ca6 strh r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
| if (r0 < 0) {
0x00047ca8 blt.w 0x47e2a | goto label_27;
| }
0x00047cac ldr r3, [sp, 0x44] | r3 = var_44h;
0x00047cae add.w ip, r0, r0, lsl 1 |
0x00047cb2 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00047cb4 ldr.w r0, [r3, ip, lsl 2] | offset_0 = ip << 2;
| r0 = *((r3 + offset_0));
0x00047cb8 add.w lr, r3, ip, lsl 2 | lr = r3 + (ip << 2);
0x00047cbc ldrh.w lr, [lr, 0xa] |
0x00047cc0 tst.w lr, 0x200 |
| if ((lr & 0x200) == 0) {
0x00047cc4 beq.w 0x48254 | goto label_29;
| }
0x00047cc8 ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x00047cca cbz r3, 0x47cd4 | goto label_30;
| }
| do {
0x00047ccc ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00047cd0 cmp r3, 0 |
0x00047cd2 bne 0x47ccc |
| } while (r3 != 0);
| label_30:
0x00047cd4 tst.w lr, 4 |
| if ((lr & 4) != 0) {
0x00047cd8 bne.w 0x47e08 | goto label_3;
| }
| label_2:
0x00047cdc add.w ip, r0, 1 |
| label_18:
0x00047ce0 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00047ce2 mov r1, ip | r1 = ip;
0x00047ce4 bl 0x31abc | r0 = fcn_00031abc (r0, r1);
0x00047ce8 cmp r0, 0 |
| if (r0 == 0) {
0x00047cea beq.w 0x47e2a | goto label_27;
| }
| label_4:
0x00047cee ldr r4, [sp, 0x48] | r4 = var_48h;
0x00047cf0 mov r1, sb | r1 = sb;
0x00047cf2 mov sb, fp | sb = fp;
| label_22:
0x00047cf4 cmp r5, sb |
| if (r5 == sb) {
0x00047cf6 beq.w 0x47e3a | goto label_31;
| }
| label_25:
0x00047cfa mov.w r8, 0 | r8 = 0;
0x00047cfe mov r6, r8 | r6 = r8;
0x00047d00 mov r5, r8 | r5 = r8;
| label_6:
0x00047d02 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00047d04 ldr r0, [r3] | r0 = *(r3);
0x00047d06 cmp r0, 0 |
| if (r0 == 0) {
0x00047d08 beq.w 0x47e66 | goto label_32;
| }
| label_7:
0x00047d0c ldr r2, [sp, 0x20] | r2 = var_20h;
0x00047d0e movs r3, 0 | r3 = 0;
0x00047d10 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00047d14 mov fp, r0 |
0x00047d16 cmp.w fp, 0 |
| if (fp == 0) {
0x00047d1a beq.w 0x47e78 | goto label_33;
| }
| label_8:
0x00047d1e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00047d20 movs r1, 0 | r1 = 0;
0x00047d22 mov r0, fp | r0 = fp;
0x00047d24 blx 0x62ec | fcn_000062ec ();
0x00047d28 str.w r6, [fp, 0x50] | __asm ("str.w r6, [arg_50h]");
0x00047d2c add.w r6, fp, r4, lsl 2 | r6 = fp + (r4 << 2);
0x00047d30 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00047d32 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x00047d36 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00047d38 adds r6, 0x5c | r6 += 0x5c;
0x00047d3a add.w sl, r6, r4, lsl 2 | sl = r6 + (r4 << 2);
0x00047d3e str.w r6, [fp, 4] | __asm ("str.w r6, [arg_4h]");
0x00047d42 ldr r7, [r2, 0xc] | r7 = *((r2 + 0xc));
0x00047d44 str.w r3, [fp, 0x4c] | __asm ("str.w r3, [arg_4ch]");
0x00047d48 add.w r3, sl, r8 | r3 = sl + r8;
0x00047d4c strd sl, r3, [fp, 0xc] | __asm ("strd sl, r3, [fp, 0xc]");
0x00047d50 movs r3, 0 | r3 = 0;
0x00047d52 cmp r7, r3 |
0x00047d54 str.w r2, [fp, 0x48] | __asm ("str.w r2, [arg_48h]");
0x00047d58 it le |
| if (r7 > r3) {
0x00047d5a movle sb, r3 | sb = r3;
| }
0x00047d5c ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x00047d5e str.w r3, [fp, 0x54] | __asm ("str.w r3, [arg_54h]");
0x00047d62 it le |
| if (r7 > r3) {
0x00047d64 strle r3, [sp, 0x28] | var_28h = r3;
| }
| if (r7 <= r3) {
0x00047d66 ble.w 0x47ea4 | goto label_34;
| }
0x00047d6a mov sb, r3 | sb = r3;
0x00047d6c adds r2, 0x30 | r2 += 0x30;
0x00047d6e mov r0, r3 | r0 = r3;
0x00047d70 mov.w lr, 0x48 | lr = 0x48;
0x00047d74 mov.w r8, 2 | r8 = 2;
0x00047d78 str r3, [sp, 0x28] | var_28h = r3;
0x00047d7a str r5, [sp, 0x20] | var_20h = r5;
0x00047d7c b 0x47dbe | goto label_35;
| label_0:
0x00047d7e cmp r1, 0x40 |
| if (r1 == 0x40) {
0x00047d80 beq.w 0x47e9a | goto label_36;
| }
0x00047d84 tst.w ip, 0x180 |
| if ((ip & 0x180) != 0) {
0x00047d88 bne 0x47e8a | goto label_37;
| }
0x00047d8a tst.w ip, 0x3c |
0x00047d8e strb r1, [r3, 4] | *((r3 + 4)) = r1;
| if ((ip & 0x3c) != 0) {
0x00047d90 beq 0x47db2 |
0x00047d92 ldr r4, [r2, -0x30] | r4 = *((r2 - 0x30));
0x00047d96 ldr.w ip, [r4, 0x10] | ip = *((r4 + 0x10));
0x00047d9a ldrb.w r4, [ip] | r4 = *(ip);
0x00047d9e cmp r4, 0xb0 |
0x00047da0 it eq |
| if (r4 != 0xb0) {
0x00047da2 ldrbeq r4, [ip, 2] | r4 = *((ip + 2));
| }
0x00047da6 cmp r4, 0xb1 |
| if (r4 == 0xb1) {
0x00047da8 beq.w 0x481c6 | goto label_38;
| }
0x00047dac cmp r4, 0x8a |
| if (r4 == 0x8a) {
0x00047dae beq.w 0x4818e | goto label_39;
| }
| }
| label_1:
0x00047db2 add.w sb, sb, 1 | sb++;
| do {
0x00047db6 adds r0, 1 | r0++;
0x00047db8 adds r2, 0x30 | r2 += 0x30;
0x00047dba cmp r0, r7 |
| if (r0 == r7) {
0x00047dbc beq 0x47ea2 | goto label_40;
| }
| label_35:
0x00047dbe ldrh r4, [r2, -0x26] | r4 = *((r2 - 0x26));
0x00047dc2 lsls r5, r4, 0x19 | r5 = r4 << 0x19;
0x00047dc4 bpl 0x47db6 |
| } while (r5 >= r4);
0x00047dc6 ldrh ip, [r2, -0x24] | ip = *((r2 - 0x24));
0x00047dca add.w r3, sb, sb, lsl 1 | r3 = sb + (sb << 1);
0x00047dce ldr r1, [r2, -0x18] | r1 = *((r2 - 0x18));
0x00047dd2 str.w r1, [r6, r3, lsl 2] | __asm ("str.w r1, [r6, r3, lsl 2]");
0x00047dd6 ubfx r1, ip, 0, 0xe | r1 = (ip >> 0) & ((1 << 0xe) - 1);
0x00047dda add.w r3, r6, r3, lsl 2 | r3 = r6 + (r3 << 2);
0x00047dde cmp r1, 1 |
0x00047de0 str r0, [r3, 8] | *((r3 + 8)) = r0;
| if (r1 != 1) {
0x00047de2 bne 0x47d7e | goto label_0;
| }
0x00047de4 lsls r4, r4, 0x10 | r4 <<= 0x10;
0x00047de6 itt mi |
| if (r4 >= r4) {
0x00047de8 movmi r1, 2 | r1 = 2;
| }
| if (r4 < r4) {
0x00047dea strbmi r1, [r3, 4] | *((r3 + 4)) = r1;
| goto label_41;
| }
| if (r4 < r4) {
| label_41:
0x00047dec bmi 0x47db2 | goto label_1;
| }
0x00047dee ldr.w r4, [fp, 0x54] | r4 = *(arg_54h);
0x00047df2 cmp.w sb, 0x1f |
0x00047df6 itt le |
| if (sb > 0x1f) {
0x00047df8 lslle r1, r1, sb | r1 <<= sb;
| }
| if (sb <= 0x1f) {
0x00047dfc orrs r4, r1 | r4 |= r1;
| }
0x00047dfe str.w r4, [fp, 0x54] | __asm ("str.w r4, [arg_54h]");
0x00047e02 strb.w r8, [r3, 4] | *((r3 + 4)) = r8;
0x00047e06 b 0x47db2 | goto label_1;
| label_3:
0x00047e08 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00047e0c cmp r3, 0 |
| if (r3 == 0) {
0x00047e0e beq.w 0x47cdc | goto label_2;
| }
0x00047e12 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00047e16 cmp r3, 0 |
| if (r3 != 0) {
0x00047e18 bne 0x47e08 | goto label_3;
| }
0x00047e1a b 0x47cdc | goto label_2;
| label_28:
0x00047e1c add.w r1, sl, r8 | r1 = sl + r8;
0x00047e20 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00047e22 ldr r1, [r1, 0x30] | r1 = *((r1 + 0x30));
0x00047e24 cmp r0, r1 |
| if (r0 != r1) {
0x00047e26 bne.w 0x47cee | goto label_4;
| }
| label_27:
0x00047e2a add.w fp, fp, 1 |
0x00047e2e adds r6, 0x10 | r6 += 0x10;
0x00047e30 cmp r5, fp |
| if (r5 != fp) {
0x00047e32 bne.w 0x47c4e | goto label_5;
| }
0x00047e36 ldr r4, [sp, 0x48] | r4 = var_48h;
0x00047e38 mov r1, sb | r1 = sb;
| label_31:
0x00047e3a ldrh r6, [r1, 0x2c] | r6 = *((r1 + 0x2c));
0x00047e3c lsl.w r8, r5, 3 | r8 = r5 << 3;
0x00047e40 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00047e42 lsls r7, r6, 0x18 | r7 = r6 << 0x18;
0x00047e44 add r3, r8 | r3 += r8;
0x00047e46 it pl |
| if (r7 >= r6) {
0x00047e48 ubfxpl r6, r6, 6, 1 | __asm ("ubfxpl r6, r6, 6, 1");
| }
0x00047e4c str r3, [sp, 0x20] | var_20h = r3;
| if (r7 >= r6) {
0x00047e4e bpl.w 0x47d02 | goto label_6;
| }
0x00047e52 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00047e54 tst.w r6, 0x200 |
0x00047e58 ite eq |
| if ((r6 & 0x200) != 0) {
0x00047e5a moveq r6, 2 | r6 = 2;
| }
| if ((r6 & 0x200) == 0) {
0x00047e5c movne r6, 3 | r6 = 3;
| }
0x00047e5e ldr r0, [r3] | r0 = *(r3);
0x00047e60 cmp r0, 0 |
| if (r0 != 0) {
0x00047e62 bne.w 0x47d0c | goto label_7;
| }
| label_32:
0x00047e66 mov r1, r0 | r1 = r0;
0x00047e68 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00047e6a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00047e6e mov fp, r0 |
0x00047e70 cmp.w fp, 0 |
| if (fp != 0) {
0x00047e74 bne.w 0x47d1e | goto label_8;
| }
| label_33:
0x00047e78 ldr.w r1, [pc, 0x474] |
0x00047e7c ldr r0, [sp, 0x24] | r0 = var_24h;
0x00047e7e add r1, pc | r1 = 0x90172;
0x00047e80 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_17:
0x00047e84 mov.w r8, 7 | r8 = 7;
0x00047e88 b 0x4816c | goto label_42;
| label_37:
0x00047e8a cmp.w r1, 0x100 |
0x00047e8e itet eq |
| if (r1 != 0x100) {
0x00047e90 moveq r1, 0x47 | r1 = 0x47;
| }
| if (r1 == 0x100) {
0x00047e92 strbne lr, [r3, 4] |
| }
| if (r1 == 0x100) {
0x00047e96 strb r1, [r3, 4] | *((r3 + 4)) = r1;
| }
0x00047e98 b 0x47db2 | goto label_1;
| label_36:
0x00047e9a ldrb r1, [r2, -0x21] | r1 = *((r2 - 0x21));
0x00047e9e strb r1, [r3, 4] | *((r3 + 4)) = r1;
0x00047ea0 b 0x47db2 | goto label_1;
| label_40:
0x00047ea2 ldr r5, [sp, 0x20] | r5 = var_20h;
| label_34:
0x00047ea4 str.w sb, [fp] | __asm ("str.w sb, [fp]");
0x00047ea8 cmp r5, 0 |
| if (r5 == 0) {
0x00047eaa beq.w 0x48266 | goto label_43;
| }
0x00047eae ldr.w r4, [pc, 0x444] | r4 = *(0x000482f4);
0x00047eb2 movs r7, 0 | r7 = 0;
0x00047eb4 ldr.w r3, [pc, 0x440] | r3 = *(0x000482f8);
0x00047eb8 mov sb, r7 | sb = r7;
0x00047eba ldr r6, [sp, 0x3c] | r6 = var_3ch;
0x00047ebc mov.w r8, 1 | r8 = 1;
0x00047ec0 add r4, pc | r4 += pc;
0x00047ec2 str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x00047ec6 mov fp, sl |
0x00047ec8 mov sl, r4 | sl = r4;
0x00047eca add r3, pc | r3 += pc;
0x00047ecc str r3, [sp, 0x20] | var_20h = r3;
| do {
0x00047ece ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x00047ed0 movs r1, 0 | r1 = 0;
0x00047ed2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00047ed4 strh.w r8, [sp, 0x84] | x = r8;
0x00047ed8 str r1, [sp, 0x88] | var_88h = r1;
0x00047eda strd r3, sl, [sp, 0x74] | __asm ("strd r3, sl, [var_74h]");
| if (r4 != 0) {
0x00047ede cbz r4, 0x47f04 |
0x00047ee0 mov r1, r4 | r1 = r4;
0x00047ee2 add r0, sp, 0x70 | r0 += var_70h;
0x00047ee4 bl 0x35b0c | fcn_00035b0c (r0, r1);
0x00047ee8 ldrh.w r1, [sp, 0x84] | r1 = x;
| if (r1 != 0) {
0x00047eec cbnz r1, 0x47f04 | goto label_44;
| }
0x00047eee ldrsh.w r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x00047ef2 add.w r0, fp, r7, lsl 3 | r0 = fp + (r7 << 3);
0x00047ef6 str.w r1, [fp, r7, lsl 3] | __asm ("str.w r1, [fp, r7, lsl 3]");
0x00047efa adds r7, 1 | r7++;
0x00047efc ldrb r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x00047efe and r1, r1, 1 | r1 &= 1;
0x00047f02 strb r1, [r0, 4] | *((r0 + 4)) = r1;
| }
| label_44:
0x00047f04 add.w sb, sb, 1 | sb++;
0x00047f08 adds r6, 0x10 | r6 += 0x10;
0x00047f0a cmp r5, sb |
0x00047f0c bne 0x47ece |
| } while (r5 != sb);
0x00047f0e ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x00047f12 ldr.w sb, [fp] | sb = *(fp);
| label_20:
0x00047f16 ldr r1, [sp, 0x40] | r1 = var_40h;
0x00047f18 movs r5, 0 | r5 = 0;
0x00047f1a str.w r7, [fp, 8] | __asm ("str.w r7, [arg_c0h]");
0x00047f1e mov r2, sb | r2 = sb;
0x00047f20 ldrb r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00047f22 strh r5, [r1, 0x12] | *((r1 + 0x12)) = r5;
0x00047f24 strh r5, [r1, 0x2c] | *((r1 + 0x2c)) = r5;
0x00047f26 bfi r3, r5, 0, 1 | value_1 = BIT_MASK (0, 1);
| value_2 = r5 & value_1;
| value_1 = ~value_1;
| r3 &= value_1;
| r3 |= value_2;
0x00047f2a strb r3, [r1, 0x1c] | *((r1 + 0x1c)) = r3;
0x00047f2c mov.w r3, 0x400 | r3 = 0x400;
0x00047f30 str r3, [r1, 0x28] | *((r1 + 0x28)) = r3;
0x00047f32 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00047f34 ldr r0, [r3] | r0 = *(r3);
0x00047f36 bl 0x38274 | r0 = fcn_00038274 (r0, r1, r2);
0x00047f3a mov r4, r0 | r4 = r0;
0x00047f3c cmp r0, 0 |
| if (r0 != 0) {
0x00047f3e bne.w 0x481fe | goto label_45;
| }
0x00047f40 strh r6, [r3, 0xa] | *((r3 + 0xa)) = r6;
0x00047f42 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00047f44 vmov.i8 d8, 0xff | __asm ("vmov.i8 d8, 0xff");
0x00047f48 str r0, [sp, 8] | var_8h = r0;
0x00047f4a strd fp, r3, [sp, 0xc] | __asm ("strd fp, r3, [var_ch]");
0x00047f4e add r3, sp, 0x6c | r3 += var_6ch;
0x00047f50 str r3, [sp, 0x18] | var_18h = r3;
0x00047f52 add r3, sp, 0x70 | r3 += var_70h;
0x00047f54 str r3, [sp, 0x54] | var_54h = r3;
0x00047f56 str r3, [sp, 0x14] | var_14h = r3;
0x00047f58 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00047f5a ldrd r2, r3, [sp, 0x2c] | __asm ("ldrd r2, r3, [var_2ch]");
0x00047f5e vstr d8, [sp] | __asm ("vstr d8, [sp]");
0x00047f62 bl 0x475b4 | fcn_000475b4 (r0, r1, r2, r3, r4, r5, r6);
0x00047f66 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00047f68 mov r8, r0 | r8 = r0;
0x00047f6a cmp r3, 0 |
| if (r3 != 0) {
0x00047f6c bne.w 0x480ea | goto label_46;
| }
0x00047f70 cmp.w r8, 0 |
| if (r8 != 0) {
0x00047f74 bne.w 0x48110 | goto label_14;
| }
| label_10:
0x00047f78 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00047f7a ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00047f7c ldr r3, [r2] | r3 = *(r2);
0x00047f7e mvns r6, r1 | r6 = ~r1;
0x00047f80 bic.w r0, r3, r1 | r0 = BIT_MASK (r3, r1);
0x00047f84 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00047f86 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00047f88 str r0, [sp, 0x3c] | var_3ch = r0;
0x00047f8a bic.w r5, r3, r2 | r5 = BIT_MASK (r3, r2);
0x00047f8c lsls r2, r0, 0x14 | r2 = r0 << 0x14;
0x00047f8e mvns r7, r2 | r7 = ~r2;
0x00047f90 orrs.w r2, r0, r5 | r2 = r0 | r5;
0x00047f94 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00047f96 str r5, [sp, 0x44] | var_44h = r5;
| if (r2 != r0) {
0x00047f98 bne.w 0x481f2 | goto label_47;
| }
0x00047f9c cmp r3, 0 |
| if (r3 == 0) {
0x00047f9e beq.w 0x48110 | goto label_14;
| }
| label_15:
0x00047fa2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00047fa4 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x00047fa8 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00047faa str r3, [sp, 0x14] | var_14h = r3;
0x00047fac ldr r3, [sp, 0x28] | r3 = var_28h;
0x00047fae vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00047fb2 strd fp, r3, [sp, 0xc] | __asm ("strd fp, r3, [var_ch]");
0x00047fb6 movs r3, 0 | r3 = 0;
0x00047fb8 str r3, [sp, 0x18] | var_18h = r3;
0x00047fba movs r3, 1 | r3 = 1;
0x00047fbc str r3, [sp, 8] | var_8h = r3;
0x00047fbe ldrd r2, r3, [sp, 0x2c] | __asm ("ldrd r2, r3, [var_2ch]");
0x00047fc2 bl 0x475b4 | fcn_000475b4 (r0, r1, r2, r3, r4, r5, r6);
0x00047fc4 invalid |
0x00047fc8 ldr r3, [r2] | r3 = *(r2);
0x00047fca and.w r1, r6, r3 | r1 = r6 & r3;
0x00047fce ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00047fd0 str r1, [sp, 0x48] | var_48h = r1;
0x00047fd2 ands r3, r7 | r3 &= r7;
0x00047fd4 str r3, [sp, 0x4c] | var_4ch = r3;
0x00047fd6 orrs r3, r1 | r3 |= r1;
0x00047fd8 ite eq |
| if (r3 != r1) {
0x00047fda moveq r3, 1 | r3 = 1;
| }
| if (r3 == r1) {
0x00047fdc movne r3, 0 | r3 = 0;
| }
0x00047fde cmp r0, 0 |
| if (r0 != 0) {
0x00047fe0 bne.w 0x481ee | goto label_48;
| }
| label_16:
0x00047fe4 cmp.w sb, 0 |
| if (sb <= 0) {
0x00047fe8 ble.w 0x4826a | goto label_49;
| }
0x00047fec add.w sb, sb, sb, lsl 1 | sb += (sb << 1);
0x00047ff0 movs r0, 0 | r0 = 0;
0x00047ff2 mov lr, r0 | lr = r0;
0x00047ff4 ldr.w sl, [fp, 4] | sl = *(arg_4h);
0x00047ff8 lsl.w r2, sb, 2 | r2 = sb << 2;
0x00047ffc str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_50h]");
0x00048000 str r3, [sp, 0x5c] | var_5ch = r3;
0x00048002 str r2, [sp, 0x58] | var_58h = r2;
0x00048004 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00048006 ldr.w fp, [sp, 0x40] | fp = var_40h;
0x0004800a str r3, [sp, 0x60] | var_60h = r3;
0x0004800c ldr.w sb, [r2, 0x18] | sb = *((r2 + 0x18));
0x00048010 str r4, [sp, 0x40] | var_40h = r4;
0x00048012 str.w r8, [sp, 0x64] | __asm ("str.w r8, [var_64h]");
| label_9:
0x00048016 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00048018 mov.w r5, -1 | r5 = -1;
0x0004801c mov r1, sl | r1 = sl;
0x0004801e mov r8, r5 | r8 = r5;
0x00048020 str.w fp, [sp, 0x20] | __asm ("str.w fp, [var_20h]");
0x00048024 add.w ip, sl, r3 |
| do {
0x00048028 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0004802a adds r1, 0xc | r1 += 0xc;
0x0004802c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00048030 add.w r3, sb, r3, lsl 4 | r3 = sb + (r3 << 4);
0x00048034 ldrd r2, r3, [r3, 0x20] | __asm ("ldrd r2, r3, [r3, 0x20]");
0x00048038 ands r2, r6 | r2 &= r6;
0x0004803a ands r3, r7 | r3 &= r7;
0x0004803c cmp r2, r5 |
0x0004803e sbcs.w r4, r3, r8 | __asm ("sbcs.w r4, r3, r8");
0x00048042 ite lo |
| if (r2 >= r5) {
0x00048044 movlo r4, 1 | r4 = 1;
| }
| if (r2 < r5) {
0x00048046 movhs r4, 0 | r4 = 0;
| }
0x00048048 cmp r0, r2 |
0x0004804a and r4, r4, 1 | r4 &= 1;
0x0004804e sbcs.w fp, lr, r3 | __asm ("sbcs.w fp, lr, r3");
0x00048052 it hs |
| if (r0 < r2) {
0x00048054 movhs r4, 0 | r4 = 0;
| }
0x00048056 cmp r4, 0 |
0x00048058 itt ne |
| if (r4 == 0) {
0x0004805a movne r5, r2 | r5 = r2;
| }
| if (r4 == 0) {
0x0004805c movne r8, r3 | r8 = r3;
| }
0x0004805e cmp r1, ip |
0x00048060 bne 0x48028 |
| } while (r1 != ip);
0x00048062 cmp.w r8, -1 |
0x00048066 it eq |
| if (r8 == -1) {
0x00048068 cmpeq r5, -1 | __asm ("cmpeq r5, -1");
| }
0x0004806c ldr.w fp, [sp, 0x20] | fp = var_20h;
| if (r8 == -1) {
0x00048070 beq.w 0x482c2 | goto label_50;
| }
0x00048074 ldr r2, [sp, 0x44] | r2 = var_44h;
0x00048076 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00048078 cmp r8, r2 |
0x0004807a it eq |
| if (r8 == r2) {
0x0004807c cmpeq r5, r3 | __asm ("cmpeq r5, r3");
| }
0x0004807e ldrd r3, r1, [sp, 0x48] | __asm ("ldrd r3, r1, [var_48h]");
0x00048082 ite eq |
| if (r8 != r2) {
0x00048084 moveq r2, 1 | r2 = 1;
| }
| if (r8 == r2) {
0x00048086 movne r2, 0 | r2 = 0;
| }
0x00048088 cmp r8, r1 |
0x0004808a it eq |
| if (r8 == r1) {
0x0004808c cmpeq r5, r3 | __asm ("cmpeq r5, r3");
| }
0x0004808e it eq |
| if (r8 != r1) {
0x00048090 orreq r2, r2, 1 | r2 |= 1;
| }
| if (r2 == 0) {
0x00048094 cbnz r2, 0x480e4 |
0x00048096 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00048098 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0004809a ldr r1, [sp, 0x30] | r1 = var_30h;
0x0004809c str r3, [sp, 0x14] | var_14h = r3;
0x0004809e ldr r3, [sp, 0x28] | r3 = var_28h;
0x000480a0 str r2, [sp, 0x18] | var_18h = r2;
0x000480a2 mov sb, r1 | sb = r1;
0x000480a4 str r2, [sp, 8] | var_8h = r2;
0x000480a6 orr.w r2, r5, r4 | r2 = r5 | r4;
0x000480aa str r3, [sp, 0x10] | var_10h = r3;
0x000480ac ldr r3, [sp, 0x50] | r3 = var_50h;
0x000480ae str r2, [sp] | *(sp) = r2;
0x000480b0 orr.w r2, r8, r1 | r2 = r8 | r1;
0x000480b4 str r2, [sp, 4] | var_4h = r2;
0x000480b6 mov r2, r4 | r2 = r4;
0x000480b8 str r3, [sp, 0xc] | var_ch = r3;
0x000480ba mov r3, r1 | r3 = r1;
0x000480bc ldr r0, [sp, 0x34] | r0 = var_34h;
0x000480be bl 0x475b4 | fcn_000475b4 (r0, r1, r2, r3, r4, r5, r6);
0x000480c2 ldrd r1, r2, [fp] | __asm ("ldrd r1, r2, [fp]");
0x000480c6 mov r3, sb | r3 = sb;
0x000480c8 cmp r2, r3 |
0x000480ca it eq |
| if (r2 == r3) {
0x000480cc cmpeq r1, r4 | __asm ("cmpeq r1, r4");
| }
| if (r2 == r3) {
0x000480ce beq.w 0x481d8 | goto label_51;
| }
0x000480d2 cmp r0, 0 |
| if (r0 != 0) {
0x000480d4 bne.w 0x481e8 | goto label_52;
| }
| label_13:
0x000480d8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000480da ldr.w sb, [r3, 0x18] | sb = *((r3 + 0x18));
0x000480de ldr r3, [sp, 0x50] | r3 = var_50h;
0x000480e0 ldr.w sl, [r3, 4] | sl = *((r3 + 4));
| }
0x000480e4 mov r0, r5 | r0 = r5;
0x000480e6 mov lr, r8 | lr = r8;
0x000480e8 b 0x48016 | goto label_9;
| label_46:
0x000480ea ldr r3, [sp, 0x54] | r3 = var_54h;
0x000480ec ldr r0, [sp, 0x34] | r0 = var_34h;
0x000480ee str r4, [sp, 0x18] | var_18h = r4;
0x000480f0 str r3, [sp, 0x14] | var_14h = r3;
0x000480f2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000480f4 str r4, [sp, 8] | var_8h = r4;
0x000480f6 vstr d8, [sp] | __asm ("vstr d8, [sp]");
0x000480fa strd fp, r3, [sp, 0xc] | __asm ("strd fp, r3, [var_ch]");
0x000480fe ldrd r2, r3, [sp, 0x2c] | __asm ("ldrd r2, r3, [var_2ch]");
0x00048102 bl 0x475b4 | r0 = fcn_000475b4 (r0, r1, r2, r3, r4, r5, r6);
0x00048106 mov r8, r0 | r8 = r0;
0x00048108 cmp.w r8, 0 |
| if (r8 == 0) {
0x0004810c beq.w 0x47f78 | goto label_10;
| }
0x0004810e add r7, sp, 0xd0 | r7 = sp + 0xd0;
| label_14:
0x00048110 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x00048114 cmp r3, 0 |
| if (r3 != 0) {
0x00048116 bne 0x481ce | goto label_53;
| }
| label_12:
0x00048118 ldr.w r3, [fp] | r3 = *(fp);
0x0004811c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004811e cmp r3, 0 |
0x00048120 it gt |
| if (r3 <= 0) {
0x00048122 movgt sb, 0x9000 | sb = 0x9000;
| }
0x00048126 ldr.w sl, [r2] | sl = *(r2);
0x0004812a ittt gt |
| if (r3 > 0) {
0x0004812c movtgt sb, 0xffff | __asm ("movtgt sb, 0xffff");
| }
| if (r3 <= 0) {
0x00048130 addgt r6, fp, 0x58 | r6 += arg_58h;
| }
| if (r3 > 0) {
0x00048134 movs r7, 0 | r7 = 0;
| }
| if (r7 <= 0) {
0x00048136 ble 0x48164 | goto label_54;
| }
| do {
0x00048138 ldr r5, [r6, 4]! | r5 = *((r6 += 4));
| if (r5 != 0) {
0x0004813c cbz r5, 0x4815c |
0x0004813e ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00048140 tst.w sb, r3 |
| if ((sb & r3) == 0) {
0x00048144 bne 0x4814a |
0x00048146 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 == 0) {
0x00048148 cbz r3, 0x48150 | goto label_55;
| }
| }
0x0004814a mov r0, r5 | r0 = r5;
0x0004814c bl 0x2d36c | fcn_0002d36c (r0);
| label_55:
0x00048150 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x00048152 mov r1, r5 | r1 = r5;
0x00048154 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00048158 ldr.w r3, [fp] | r3 = *(fp);
| }
0x0004815c adds r4, 1 | r4++;
0x0004815e str r7, [r6] | *(r6) = r7;
0x00048160 cmp r4, r3 |
0x00048162 blt 0x48138 |
| } while (r4 < r3);
| label_54:
0x00048164 mov r1, fp | r1 = fp;
0x00048166 mov r0, sl | r0 = sl;
0x00048168 bl 0x2d144 | fcn_0002d144 (r0, r1);
| label_42:
0x0004816c ldr r2, [pc, 0x18c] |
0x0004816e ldr r3, [pc, 0x174] | r3 = *(0x482e6);
0x00048170 add r2, pc | r2 = 0x90470;
0x00048172 ldr r3, [r2, r3] | r3 = *(0x90470);
0x00048174 ldr r2, [r3] | r2 = *(0x90470);
0x00048176 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x00048178 eors r2, r3 | r2 ^= r3;
0x0004817a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004817e bne.w 0x482da | goto label_56;
| }
0x00048182 mov r0, r8 | r0 = r8;
0x00048184 add sp, 0x94 |
0x00048186 vpop {d8} | __asm ("vpop {d8}");
0x0004818a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_39:
0x0004818e ldr.w r4, [ip, 0x14] | r4 = *((ip + 0x14));
0x00048192 ldr r4, [r4, 0x1c] | r4 = *((r4 + 0x1c));
0x00048194 ldr r4, [r4] | r4 = *(r4);
| label_11:
0x00048196 cmp r4, 1 |
| if (r4 <= 1) {
0x00048198 ble.w 0x47db2 | goto label_1;
| }
0x0004819c cmp.w sb, 0xf |
| if (sb <= 0xf) {
0x000481a0 bgt 0x481b0 |
0x000481a2 ldr r5, [sp, 0x28] | r5 = var_28h;
0x000481a4 movs r4, 1 | r4 = 1;
0x000481a6 lsl.w r4, r4, sb | r4 <<= sb;
0x000481aa orrs r5, r4 | r5 |= r4;
0x000481ac uxth r4, r5 | r4 = (int16_t) r5;
0x000481ae str r4, [sp, 0x28] | var_28h = r4;
| }
0x000481b0 cmp r1, 0x10 |
0x000481b2 itt eq |
| if (r1 != 0x10) {
0x000481b4 moveq r1, 8 | r1 = 8;
| }
| if (r1 == 0x10) {
0x000481b6 strbeq r1, [r3, 4] | *((r3 + 4)) = r1;
| goto label_57;
| }
| if (r1 == 0x10) {
| label_57:
0x000481b8 beq.w 0x47db2 | goto label_1;
| }
0x000481bc cmp r1, 4 |
0x000481be itt eq |
| if (r1 != 4) {
0x000481c0 moveq r1, 0x20 | r1 = 0x20;
| }
| if (r1 != 4) {
0x000481c2 strbeq r1, [r3, 4] | *((r3 + 4)) = r1;
| }
0x000481c4 b 0x47db2 | goto label_1;
| label_38:
0x000481c6 ldr.w r4, [ip, 0x14] | r4 = *((ip + 0x14));
0x000481ca ldr r4, [r4] | r4 = *(r4);
0x000481cc b 0x48196 | goto label_11;
| label_53:
0x000481ce ldr.w r0, [fp, 0x18] | r0 = *(arg_18h);
0x000481d2 bl 0x26dbc | fcn_00026dbc (r0);
0x000481d6 b 0x48118 | goto label_12;
| label_51:
0x000481d8 ldr r2, [sp, 0x70] | r2 = var_70h;
0x000481da movs r3, 1 | r3 = 1;
| if (r2 == 0) {
0x000481dc cbnz r2, 0x481e0 |
0x000481de str r3, [sp, 0x60] | var_60h = r3;
| }
0x000481e0 str r3, [sp, 0x5c] | var_5ch = r3;
0x000481e2 cmp r0, 0 |
| if (r0 == 0) {
0x000481e4 beq.w 0x480d8 | goto label_13;
| }
| label_52:
0x000481e8 ldr.w fp, [sp, 0x50] | fp = var_50h;
0x000481ec ldr r4, [sp, 0x40] | r4 = var_40h;
| label_48:
0x000481ee mov r8, r0 | r8 = r0;
0x000481f0 b 0x48110 | goto label_14;
| label_47:
0x000481f2 cmp r3, 0 |
| if (r3 != 0) {
0x000481f4 bne.w 0x47fa2 | goto label_15;
| }
0x000481f8 strd r8, r8, [sp, 0x48] | __asm ("strd r8, r8, [var_48h]");
0x000481fc b 0x47fe4 | goto label_16;
| label_45:
0x000481fe ldr.w r3, [fp] | r3 = *(fp);
0x00048202 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00048204 cmp r3, r5 |
0x00048206 it gt |
| if (r3 <= r5) {
0x00048208 movgt r8, 0x9000 | r8 = 0x9000;
| }
0x0004820c ldr.w sb, [r2] | sb = *(r2);
0x00048210 ittt gt |
| if (r3 <= r5) {
0x00048212 addgt r6, fp, 0x58 | r6 += arg_58h;
| }
| if (r3 > r5) {
0x00048216 movtgt r8, 0xffff | __asm ("movtgt r8, 0xffff");
| }
| if (r3 > r5) {
0x0004821a mov r7, r5 | r7 = r5;
| }
| if (r3 <= r5) {
0x0004821c ble 0x4824a | goto label_58;
| }
| do {
0x0004821e ldr r4, [r6, 4]! | r4 = *((r6 += 4));
| if (r4 != 0) {
0x00048222 cbz r4, 0x48242 |
0x00048224 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00048226 tst.w r8, r3 |
| if ((r8 & r3) == 0) {
0x0004822a bne 0x48230 |
0x0004822c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
| if (r3 == 0) {
0x0004822e cbz r3, 0x48236 | goto label_59;
| }
| }
0x00048230 mov r0, r4 | r0 = r4;
0x00048232 bl 0x2d36c | fcn_0002d36c (r0);
| label_59:
0x00048236 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x00048238 mov r1, r4 | r1 = r4;
0x0004823a bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0004823e ldr.w r3, [fp] | r3 = *(fp);
| }
0x00048242 adds r5, 1 | r5++;
0x00048244 str r7, [r6] | *(r6) = r7;
0x00048246 cmp r5, r3 |
0x00048248 blt 0x4821e |
| } while (r5 < r3);
| label_58:
0x0004824a mov r1, fp | r1 = fp;
0x0004824c mov r0, sb | r0 = sb;
0x0004824e bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00048252 b 0x47e84 | goto label_17;
| label_29:
0x00048254 ldr r0, [pc, 0xa8] |
0x00048256 add r0, pc | r0 = 0x9055a;
0x00048258 add.w ip, r0, 0x780 |
0x0004825c b 0x47ce0 | goto label_18;
| label_23:
0x0004825e movs r3, 0x60 | r3 = 0x60;
0x00048260 mov r4, r2 | r4 = r2;
0x00048262 str r3, [sp, 0x20] | var_20h = r3;
0x00048264 b 0x47c26 | goto label_19;
| label_43:
0x00048266 mov r7, r5 | r7 = r5;
0x00048268 b 0x47f16 | goto label_20;
| label_49:
0x0004826a mov r5, r3 | r5 = r3;
| if (r3 != 0) {
| label_21:
0x0004826c cbnz r3, 0x48294 | goto label_60;
| }
0x0004826e str r3, [sp, 0x18] | var_18h = r3;
0x00048270 str r3, [sp, 8] | var_8h = r3;
0x00048272 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00048274 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00048276 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00048278 str r3, [sp, 0x14] | var_14h = r3;
0x0004827a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0004827c str r2, [sp] | *(sp) = r2;
0x0004827e strd fp, r3, [sp, 0xc] | __asm ("strd fp, r3, [var_ch]");
0x00048282 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00048284 str r3, [sp, 4] | var_4h = r3;
0x00048286 bl 0x475b4 | fcn_000475b4 (r0, r1, r2, r3, r4, r5, r6);
0x00048288 ldrsb.w sb, [r5, 0xb1c] | sb = *((r5 + 0xb1c));
0x0004828c mov r8, r0 | r8 = r0;
0x0004828e cmp r3, 0 |
| if (r3 == 0) {
0x00048290 beq.w 0x48110 | goto label_14;
| }
| label_60:
0x00048294 orrs.w r5, r8, r5 | r5 = r8 | r5;
| if (r5 != r8) {
0x00048298 bne.w 0x48110 | goto label_14;
| }
0x0004829c ldr r3, [sp, 0x54] | r3 = var_54h;
0x0004829e movs r1, 1 | r1 = 1;
0x000482a0 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000482a2 str r5, [sp, 0x18] | var_18h = r5;
0x000482a4 str r3, [sp, 0x14] | var_14h = r3;
0x000482a6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000482a8 str.w fp, [sp, 0xc] | __asm ("str.w fp, [var_ch]");
0x000482ac str r1, [sp, 8] | var_8h = r1;
0x000482ae str r3, [sp, 0x10] | var_10h = r3;
0x000482b0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000482b2 mov r2, r3 | r2 = r3;
0x000482b4 str r3, [sp] | *(sp) = r3;
0x000482b6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000482b8 str r3, [sp, 4] | var_4h = r3;
0x000482ba bl 0x475b4 | r0 = fcn_000475b4 (r0, r1, r2, r3, r4, r5, r6);
0x000482be mov r8, r0 | r8 = r0;
0x000482c0 b 0x48110 | goto label_14;
| label_50:
0x000482c2 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000482c4 ldr.w fp, [sp, 0x50] | fp = var_50h;
0x000482c8 ldr r4, [sp, 0x40] | r4 = var_40h;
0x000482ca mov r5, r3 | r5 = r3;
0x000482cc ldr.w r8, [sp, 0x64] | r8 = var_64h;
0x000482d0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000482d2 b 0x4826c | goto label_21;
| label_26:
0x000482d4 mov.w sb, 0 | sb = 0;
0x000482d8 b 0x47cf4 | goto label_22;
| label_56:
0x000482da blx 0x6430 | fcn_00006430 ();
0x000482de nop |
0x000482e0 movs r2, 0x4e | r2 = 0x4e;
0x000482e2 movs r2, r1 | r2 = r1;
0x000482e4 lsls r4, r6, 8 | r4 = r6 << 8;
0x000482e6 movs r0, r0 |
0x000482e8 push {r0, r1, r3, r4, r6, lr} |
0x000482ea invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x490ec */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000490ec () | void fcn_000490ec (int16_t arg_4h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch_3;
| arithmetic x;
| int16_t var_44h;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_18h;
| int16_t var_2ch;
| int16_t var_48h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000490ec svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000490f0 mov r4, r0 | r4 = r0;
0x000490f2 ldr.w r5, [pc, 0x568] |
0x000490f6 sub sp, 0x84 |
0x000490f8 mov sb, r2 | sb = r2;
0x000490fa ldr.w r0, [pc, 0x564] | r0 = *(0x49662);
0x000490fe add r5, pc | r5 = 0x92760;
0x00049100 ldr r0, [r5, r0] |
0x00049102 ldr r5, [r4] | r5 = *(r4);
0x00049104 ldr r0, [r0] | r0 = *(0x92760);
0x00049106 str r0, [sp, 0x7c] | var_7ch = r0;
0x00049108 mov.w r0, 0 | r0 = 0;
0x0004910c str r1, [sp, 0x20] | var_20h_2 = r1;
0x0004910e subs r1, r3, 0 | r1 = r3 - 0;
0x00049110 str r3, [sp, 0x28] | var_28h = r3;
0x00049112 it ne |
| if (r1 == r3) {
0x00049114 movne r1, 1 | r1 = 1;
| }
0x00049116 adds r3, r2, r1 | r3 = r2 + r1;
0x00049118 ldrb.w r8, [r3, 0x19] | r8 = *((r3 + 0x19));
0x0004911c cmp.w r8, 7 |
0x00049120 beq 0x4915c |
| while (r3 >= r3) {
0x00049122 add.w r3, sb, r1, lsl 2 | r3 = sb + (r1 << 2);
0x00049126 ldr r6, [r3, 0x1c] | r6 = *((r3 + 0x1c));
0x00049128 str r3, [sp, 0x4c] | var_4ch = r3;
0x0004912a subs.w r3, r8, 0 | r3 = r8 - 0;
0x0004912e it ne |
| if (r3 == r8) {
0x00049130 movne r3, 1 | r3 = 1;
| }
0x00049132 cmp r6, 0 |
0x00049134 it ne |
| if (r6 == 0) {
0x00049136 movne r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x00049138 cbnz r3, 0x49166 | goto label_20;
| }
| label_0:
0x0004913a ldr.w r2, [pc, 0x528] |
0x0004913e ldr.w r3, [pc, 0x520] | r3 = *(0x49662);
0x00049142 add r2, pc | r2 = 0x927ac;
0x00049144 ldr r3, [r2, r3] | r3 = *(0x927ac);
0x00049146 ldr r2, [r3] | r2 = *(0x927ac);
0x00049148 ldr r3, [sp, 0x7c] | r3 = *((sp + 0x7c));
0x0004914a eors r2, r3 | r2 ^= r3;
0x0004914c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00049150 bne.w 0x49652 | goto label_21;
| }
0x00049154 mov r0, r6 | r0 = r6;
0x00049156 add sp, 0x84 |
0x00049158 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0004915c ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0004915e lsls r3, r3, 0xc | r3 <<= 0xc;
0x00049160 bpl 0x49122 |
| }
| do {
| label_18:
0x00049162 movs r6, 0 | r6 = 0;
0x00049164 b 0x4913a | goto label_0;
| label_20:
0x00049166 add r3, sp, 0x58 | r3 += var_58h;
0x00049168 ldr r1, [sp, 0x20] | r1 = var_20h_2;
0x0004916a str r3, [sp] | *(sp) = r3;
0x0004916c movs r3, 0 | r3 = 0;
0x0004916e strd r3, r3, [sp, 0x54] | __asm ("strd r3, r3, [sp, 0x54]");
0x00049172 mov r2, sb | r2 = sb;
0x00049174 add r3, sp, 0x54 | r3 += var_54h;
0x00049176 mov r0, r4 | r0 = r4;
0x00049178 bl 0x471f4 | r0 = fcn_000471f4 (r0, r1, r2, r3, r4, r5, r6);
0x0004917c mov sl, r0 | sl = r0;
0x0004917e cmp r0, 0 |
0x00049180 bne 0x49162 |
| } while (r0 != 0);
0x00049182 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00049186 ldr r1, [sp, 0x58] | r1 = var_58h;
0x00049188 cmp r3, 0 |
| if (r3 <= 0) {
0x0004918a ble.w 0x4962a | goto label_22;
| }
0x0004918e ldr.w r3, [pc, 0x4d8] |
0x00049192 add r2, sp, 0x64 | r2 += var_64h;
0x00049194 ldr.w fp, [sp, 0x54] | fp = var_54h;
0x00049198 add r7, sp, 0x5c | r7 += var_5ch;
0x0004919a str r2, [sp, 0x24] | var_24h = r2;
0x0004919c add r2, sp, 0x74 | r2 += var_74h;
0x0004919e add r3, pc |
0x000491a0 str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x000491a2 add r2, sp, 0x6c | r2 += var_6ch;
0x000491a4 str r0, [sp, 0x2c] | *((sp + 0x2c)) = r0;
0x000491a6 str r2, [sp, 0x30] | var_30h = r2;
0x000491a8 add.w r2, r3, 0x154 | r2 = r3 + 0x154;
0x000491ac add.w r3, r3, 0x15c | r3 = 0x92968;
0x000491b0 str r0, [sp, 0x48] | *((sp + 0x48)) = r0;
0x000491b2 str r0, [sp, 0x18] | *((sp + 0x18)) = r0;
0x000491b4 str r2, [sp, 0x3c] | var_3ch_3 = r2;
0x000491b6 str r3, [sp, 0x40] | x = r3;
0x000491b8 str r1, [sp, 0x34] | var_34h = r1;
| do {
0x000491ba ldr r3, [sp, 0x3c] | r3 = var_3ch_3;
0x000491bc ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x000491c0 ldr r3, [sp, 0x40] | r3 = x;
0x000491c2 stm.w r7, {r0, r1} | *(r7) = r0;
| *((r7 + 4)) = r1;
0x000491c6 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x000491ca ldr r3, [sp, 0x24] | r3 = var_24h;
0x000491cc stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000491d0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000491d2 cmp r3, 0 |
| if (r3 == 0) {
0x000491d4 beq.w 0x494f8 | goto label_23;
| }
0x000491d8 ldr.w r6, [r3, sl, lsl 2] | offset_0 = sl << 2;
| r6 = *((r3 + offset_0));
| label_4:
0x000491dc ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x000491de ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000491e0 cmp.w fp, 0 |
| if (fp == 0) {
0x000491e4 beq.w 0x494ea | goto label_24;
| }
0x000491e8 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000491ec ldrsh.w r3, [r3, sl, lsl 1] | offset_1 = sl << 1;
| r3 = *((r3 + offset_1));
0x000491f0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000491f4 lsls r3, r3, 2 | r3 <<= 2;
| label_3:
0x000491f6 ldr r0, [r2, r3] | r0 = *((r2 + r3));
0x000491f8 str r0, [sp, 0x74] | var_74h = r0;
| if (r0 != 0) {
0x000491fa cbz r0, 0x49204 |
0x000491fc blx 0x65dc | r0 = strcmp (r0, r1);
0x00049200 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00049204 ldr.w r3, [sb] | r3 = *(sb);
0x00049208 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0004920c str r0, [sp, 0x78] | var_78h = r0;
0x0004920e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00049210 ldr.w r0, [r3, r6, lsl 2] | offset_2 = r6 << 2;
| r0 = *((r3 + offset_2));
0x00049214 lsls r3, r6, 2 | r3 = r6 << 2;
0x00049216 str r3, [sp, 0x38] | var_38h = r3;
0x00049218 str r0, [sp, 0x6c] | var_6ch = r0;
| if (r0 != 0) {
0x0004921a cbz r0, 0x49224 |
0x0004921c blx 0x65dc | r0 = strcmp (r0, r1);
0x00049220 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00049224 movs r3, 0 | r3 = 0;
0x00049226 mov r2, r7 | r2 = r7;
0x00049228 movs r1, 0x3b | r1 = 0x3b;
0x0004922a str r0, [sp, 0x70] | var_70h = r0;
0x0004922c mov r0, r5 | r0 = r5;
0x0004922e bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00049232 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x00049234 mov r6, r0 | r6 = r0;
0x00049236 movs r1, 0x3b | r1 = 0x3b;
0x00049238 movs r3, 0 | r3 = 0;
0x0004923a mov r0, r5 | r0 = r5;
0x0004923c bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00049240 mov r2, r6 | r2 = r6;
0x00049242 mov r3, r0 | r3 = r0;
0x00049244 movs r1, 0x8d | r1 = 0x8d;
0x00049246 mov r0, r4 | r0 = r4;
0x00049248 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x0004924c ldr r2, [sp, 0x30] | r2 = var_30h;
0x0004924e mov r6, r0 | r6 = r0;
0x00049250 movs r1, 0x3b | r1 = 0x3b;
0x00049252 movs r3, 0 | r3 = 0;
0x00049254 mov r0, r5 | r0 = r5;
0x00049256 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x0004925a mov r2, r6 | r2 = r6;
0x0004925c mov r3, r0 | r3 = r0;
0x0004925e movs r1, 0x35 | r1 = 0x35;
0x00049260 mov r0, r4 | r0 = r4;
0x00049262 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x00049266 ldr r1, [sp, 0x18] | r1 = *((sp + 0x18));
0x00049268 mov r2, r0 | r2 = r0;
0x0004926a mov r0, r4 | r0 = r4;
0x0004926c bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x00049270 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00049272 str r0, [sp, 0x18] | *((sp + 0x18)) = r0;
0x00049274 cmp r3, 0 |
| if (r3 == 0) {
0x00049276 beq.w 0x494d8 | goto label_25;
| }
0x0004927a movs r3, 0 | r3 = 0;
0x0004927c mov r2, r7 | r2 = r7;
0x0004927e movs r1, 0x3b | r1 = 0x3b;
0x00049280 mov r0, r5 | r0 = r5;
0x00049282 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00049286 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x00049288 mov r6, r0 | r6 = r0;
0x0004928a movs r1, 0x3b | r1 = 0x3b;
0x0004928c movs r3, 0 | r3 = 0;
0x0004928e mov r0, r5 | r0 = r5;
0x00049290 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00049294 mov r2, r6 | r2 = r6;
0x00049296 mov r3, r0 | r3 = r0;
0x00049298 movs r1, 0x8d | r1 = 0x8d;
0x0004929a mov r0, r4 | r0 = r4;
0x0004929c bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x000492a0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000492a2 mov r6, r0 | r6 = r0;
0x000492a4 movs r3, 0 | r3 = 0;
0x000492a6 movs r1, 0x3b | r1 = 0x3b;
0x000492a8 mov r0, r5 | r0 = r5;
0x000492aa bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000492ae ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x000492b0 movs r1, 0x3b | r1 = 0x3b;
0x000492b2 movs r3, 0 | r3 = 0;
0x000492b4 str r0, [sp, 0x44] | var_44h = r0;
0x000492b6 mov r0, r5 | r0 = r5;
0x000492b8 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000492bc ldr r2, [sp, 0x44] | r2 = var_44h;
0x000492be mov r3, r0 | r3 = r0;
0x000492c0 movs r1, 0x8d | r1 = 0x8d;
0x000492c2 mov r0, r4 | r0 = r4;
0x000492c4 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x000492c8 mov r2, r6 | r2 = r6;
0x000492ca mov r3, r0 | r3 = r0;
0x000492cc movs r1, 0x2d | r1 = 0x2d;
0x000492ce mov r0, r4 | r0 = r4;
0x000492d0 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x000492d4 ldr r1, [sp, 0x2c] | r1 = *((sp + 0x2c));
0x000492d6 mov r2, r0 | r2 = r0;
0x000492d8 mov r0, r4 | r0 = r4;
0x000492da bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x000492de cmp.w r8, 7 |
0x000492e2 str r0, [sp, 0x2c] | *((sp + 0x2c)) = r0;
| if (r8 != 7) {
0x000492e4 beq 0x49370 |
0x000492e6 cmp.w r8, 0xa |
| if (r8 == 0xa) {
0x000492ea beq.w 0x495b2 | goto label_26;
| }
| label_2:
0x000492ee cmp.w r8, 9 |
| if (r8 == 9) {
0x000492f2 bne 0x49330 |
0x000492f4 ldr.w r0, [sb] | r0 = *(sb);
0x000492f8 ldr r2, [sp, 0x38] | r2 = var_38h;
0x000492fa ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000492fc add r3, r2 | r3 += r2;
0x000492fe ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x00049300 and r2, r2, 0x60 | r2 &= 0x60;
| if (r2 == 0) {
0x00049304 cbnz r2, 0x49330 |
0x00049306 ldrh r1, [r3, 8] | r1 = *((r3 + 8));
| if (r1 == 0) {
0x00049308 cbz r1, 0x49330 | goto label_27;
| }
0x0004930a ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
| if (r3 != 0) {
0x0004930e cbnz r3, 0x49330 | goto label_27;
| }
0x00049310 ldr r2, [r0, 0x34] | r2 = *((r0 + 0x34));
| if (r2 == 0) {
0x00049312 cbz r2, 0x49330 | goto label_27;
| }
0x00049314 ldr r0, [r2] | r0 = *(r2);
0x00049316 cmp r0, r1 |
| if (r0 < r1) {
0x00049318 blt 0x49330 | goto label_27;
| }
0x0004931a add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x0004931e ldr r1, [r2, -0x8] | r1 = *((r2 - 0x8));
| if (r1 == 0) {
0x00049322 cbz r1, 0x49330 | goto label_27;
| }
0x00049324 mov r2, r3 | r2 = r3;
0x00049326 mov r0, r5 | r0 = r5;
0x00049328 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0004932c mov r6, r0 | r6 = r0;
0x0004932e b 0x49356 |
| }
| } else {
| label_27:
0x00049330 mov r0, r5 | r0 = r5;
0x00049332 movs r2, 0x34 | r2 = 0x34;
0x00049334 movs r3, 0 | r3 = 0;
0x00049336 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x00049338 cdp2 p6, 0xd, c4, c7, c6, 0 | __asm ("cdp2 p6, 0xd, c4, c7, c6, 0");
| if (r0 == 0) {
0x0004933c cbz r0, 0x49356 | goto label_6;
| }
0x0004933e movs r2, 0x33 | r2 = 0x33;
0x00049340 movs r1, 0 | r1 = 0;
0x00049342 adds r0, 1 | r0++;
0x00049344 blx 0x62ec | fcn_000062ec ();
0x00049348 movs r3, 0x79 | r3 = 0x79;
0x0004934a strb r3, [r6] | *(r6) = r3;
0x0004934c movw r3, 0xffff | r3 = 0xffff;
0x00049350 strh r3, [r6, 0x22] | *((r6 + 0x22)) = r3;
0x00049352 movs r3, 1 | r3 = 1;
0x00049354 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
| }
| label_6:
0x00049356 ldr r1, [sp, 0x48] | r1 = *((sp + 0x48));
0x00049358 mov r2, r6 | r2 = r6;
0x0004935a mov r0, r4 | r0 = r4;
0x0004935c bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
0x00049360 mov r1, r0 | r1 = r0;
0x00049362 str r0, [sp, 0x48] | *((sp + 0x48)) = r0;
| if (r0 == 0) {
0x00049364 cbz r0, 0x49370 | goto label_1;
| }
0x00049366 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00049368 movs r3, 0 | r3 = 0;
0x0004936a mov r0, r4 | r0 = r4;
0x0004936c bl 0x398b8 | fcn_000398b8 (r0, r1, r2, r3, r4);
| }
| label_1:
0x00049370 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00049374 add.w sl, sl, 1 | sl++;
0x00049378 cmp r3, sl |
0x0004937a bgt.w 0x491ba |
| } while (r3 > sl);
0x0004937e ldr r1, [sp, 0x34] | r1 = var_34h;
| if (r1 != 0) {
0x00049380 cbz r1, 0x49388 |
| label_15:
0x00049382 mov r0, r5 | r0 = r5;
0x00049384 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
| label_16:
0x00049388 ldr.w r3, [sb] | r3 = *(sb);
0x0004938c ldr.w fp, [r3] | fp = *(r3);
0x00049390 cmp.w fp, 0 |
| if (fp == 0) {
0x00049394 beq.w 0x49600 | goto label_28;
| }
0x00049396 strh r4, [r6, 8] | *((r6 + 8)) = r4;
0x00049398 mov r0, fp | r0 = fp;
0x0004939a blx 0x65dc | r0 = strcmp (r0, r1);
0x0004939e bic sb, r0, 0xc0000000 | sb = BIT_MASK (r0, 0xc0000000);
0x000493a2 add.w r3, sb, 0x55 | r3 = sb + 0x55;
0x000493a6 mov r6, r3 | r6 = r3;
0x000493a8 str r3, [sp, 0x1c] | var_1ch_2 = r3;
| label_13:
0x000493aa cmp.w r8, 7 |
| if (r8 == 7) {
0x000493ae beq.w 0x494fe | goto label_29;
| }
0x000493b2 ldr.w r3, [r5, 0x130] | r3 = *((r5 + 0x130));
0x000493b6 mov.w sl, 0 | sl = 0;
0x000493ba mov r2, r6 | r2 = r6;
0x000493bc mov r0, r5 | r0 = r5;
0x000493be strh.w sl, [r5, 0x134] | *((r5 + 0x134)) = sl;
0x000493c2 adds r3, 1 | r3++;
0x000493c4 str.w r3, [r5, 0x130] | __asm ("str.w r3, [r5, 0x130]");
0x000493c8 mov r3, sl | r3 = sl;
0x000493ca bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x000493ce mov r7, r0 | r7 = r0;
0x000493d0 cmp r0, 0 |
| if (r0 == 0) {
0x000493d2 beq.w 0x495f4 | goto label_30;
| }
0x000493d6 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x000493d8 mov r1, sl | r1 = sl;
0x000493da blx 0x62ec | fcn_000062ec ();
0x000493de add.w r0, r7, 0x54 | r0 = r7 + 0x54;
0x000493e2 mov r2, sb | r2 = sb;
0x000493e4 add.w sb, r7, 0x24 | sb = r7 + 0x24;
0x000493e8 mov r1, fp | r1 = fp;
0x000493ea str r0, [r7, 0x30] | *((r7 + 0x30)) = r0;
0x000493ec mov r6, r7 | r6 = r7;
0x000493ee str.w sb, [r7, 0x1c] | __asm ("str.w sb, [r7, 0x1c]");
0x000493f2 mov r7, sb | r7 = sb;
0x000493f4 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000493f8 ldr r1, [sp, 0x18] | r1 = *((sp + 0x18));
0x000493fa cmp r1, 0 |
| if (r1 == 0) {
0x000493fc beq.w 0x49656 | goto label_31;
| }
0x00049400 mov r3, sl | r3 = sl;
0x00049402 movs r2, 1 | r2 = 1;
0x00049404 mov r0, r5 | r0 = r5;
0x00049406 bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
| label_14:
0x0004940a ldr r1, [sp, 0x48] | r1 = var_48h;
0x0004940c movs r2, 1 | r2 = 1;
0x0004940e str r0, [r6, 0x38] | *((r6 + 0x38)) = r0;
0x00049410 mov r0, r5 | r0 = r5;
0x00049412 bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x00049416 movs r2, 1 | r2 = 1;
0x00049418 str r0, [r6, 0x3c] | *((r6 + 0x3c)) = r0;
0x0004941a mov r1, sl | r1 = sl;
0x0004941c mov r0, r5 | r0 = r5;
0x0004941e bl 0x39f48 | fcn_00039f48 (r0, r1, r2, r3);
0x00049422 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00049424 str r0, [r6, 0x2c] | *((r6 + 0x2c)) = r0;
| if (r3 != 0) {
0x00049426 cbz r3, 0x4944a |
0x00049428 mov r2, r3 | r2 = r3;
0x0004942a movs r1, 0x13 | r1 = 0x13;
0x0004942c mov r0, r4 | r0 = r4;
0x0004942e movs r3, 0 | r3 = 0;
0x00049430 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x00049434 mov r1, r0 | r1 = r0;
0x00049436 str r0, [sp, 0x2c] | var_2ch = r0;
0x00049438 cmp r0, 0 |
| if (r0 == 0) {
0x0004943a beq.w 0x4963e | goto label_32;
| }
0x00049448 str r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
| }
| label_11:
0x0004944a ldr.w r3, [r5, 0x130] | r3 = *((r5 + 0x130));
0x0004944e subs r3, 1 | r3--;
0x00049450 str.w r3, [r5, 0x130] | __asm ("str.w r3, [r5, 0x130]");
0x00049454 cmp r3, 0 |
| if (r3 != 0) {
0x00049456 bne.w 0x495ec | goto label_33;
| }
0x0004945a ldrh.w r3, [r5, 0x136] | r3 = *((r5 + 0x136));
| label_9:
0x0004945e strh.w r3, [r5, 0x134] | *((r5 + 0x134)) = r3;
0x00049462 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00049464 cbz r3, 0x4946e |
0x00049466 mov r1, r3 | r1 = r3;
0x00049468 mov r0, r5 | r0 = r5;
0x0004946a bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
| label_5:
0x0004946e ldr r3, [sp, 0x2c] | r3 = var_2ch;
| if (r3 != 0) {
0x00049470 cbz r3, 0x4947a |
0x00049472 mov r1, r3 | r1 = r3;
0x00049474 mov r0, r5 | r0 = r5;
0x00049476 bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x0004947a ldr r3, [sp, 0x48] | r3 = var_48h;
| if (r3 != 0) {
0x0004947c cbz r3, 0x49486 |
0x0004947e mov r1, r3 | r1 = r3;
0x00049480 mov r0, r5 | r0 = r5;
0x00049482 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x00049486 cmp.w sl, 0 |
| if (sl != 0) {
0x0004948a beq 0x49496 |
0x0004948c mov r1, sl | r1 = sl;
0x0004948e movs r2, 1 | r2 = 1;
0x00049490 mov r0, r5 | r0 = r5;
0x00049492 bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
| }
0x00049496 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x0004949a cmp r3, 1 |
| if (r3 == 1) {
0x0004949c beq.w 0x49642 | goto label_34;
| }
0x000494a0 ldr r3, [sp, 0x20] | r3 = *((sp + 0x20));
0x000494a2 cmp.w r8, 7 |
0x000494a6 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x000494a8 vdup.32 d16, r3 | __asm ("vdup.32 d16, r3");
| if (r8 == 7) {
0x000494ac beq.w 0x495f0 | goto label_35;
| }
0x000494b0 cmp.w r8, 0xa |
| if (r8 != 0xa) {
0x000494b4 bne.w 0x495dc | goto label_36;
| }
0x000494b8 ldr r3, [sp, 0x28] | r3 = *((sp + 0x28));
0x000494ba cmp r3, 0 |
| if (r3 == 0) {
0x000494bc beq.w 0x49638 | goto label_37;
| }
0x000494c0 movs r3, 0x81 | r3 = 0x81;
0x000494c2 strb r3, [r7] | *(r7) = r3;
| label_7:
0x000494c4 movs r2, 0x81 | r2 = 0x81;
| label_8:
0x000494c6 add.w r3, r6, 0x14 | r3 = r6 + 0x14;
0x000494ca str r6, [r7, 4] | *((r7 + 4)) = r6;
0x000494cc vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000494d0 ldr r3, [sp, 0x4c] | r3 = *((sp + 0x4c));
0x000494d2 str r6, [r3, 0x1c] | *((r3 + 0x1c)) = r6;
0x000494d4 strb r2, [r6, 8] | *((r6 + 8)) = r2;
0x000494d6 b 0x4913a | goto label_0;
| label_25:
0x000494d8 cmp.w r8, 7 |
| if (r8 == 7) {
0x000494dc beq.w 0x49370 | goto label_1;
| }
0x000494e0 cmp.w r8, 0xa |
| if (r8 == 0xa) {
0x000494e4 beq.w 0x49370 | goto label_1;
| }
0x000494e8 b 0x492ee | goto label_2;
| label_24:
0x000494ea ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x000494ec ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000494f0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000494f4 lsls r3, r3, 2 | r3 <<= 2;
0x000494f6 b 0x491f6 | goto label_3;
| label_23:
0x000494f8 ldr.w r6, [sb, 0x24] | r6 = *((sb + 0x24));
0x000494fc b 0x491dc | goto label_4;
| label_29:
0x000494fe ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x00049500 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00049502 ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x00049504 cmp r0, 0 |
| if (r0 == 0) {
0x00049506 beq.w 0x4964c | goto label_38;
| }
0x0004950a ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0004950c cmp r0, r3 |
| if (r0 == r3) {
0x0004950e beq 0x49520 | goto label_19;
| }
0x00049510 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
| do {
0x00049514 mov r2, r3 | r2 = r3;
0x00049516 adds r3, 0x10 | r3 += 0x10;
0x00049518 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x0004951c cmp r0, r1 |
0x0004951e bne 0x49514 |
| } while (r0 != r1);
| label_19:
0x00049520 ldr r0, [r2] | r0 = *(r2);
0x00049522 strd fp, sb, [sp, 0x64] | __asm ("strd fp, sb, [sp, 0x64]");
0x00049526 str r0, [sp, 0x6c] | var_6ch = r0;
| if (r0 != 0) {
0x00049528 cbz r0, 0x49532 |
0x0004952a blx 0x65dc | r0 = strcmp (r0, r1);
0x0004952e bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00049532 ldr r3, [pc, 0x138] |
0x00049534 movs r1, 0x47 | r1 = 0x47;
0x00049536 str r0, [sp, 0x70] | var_70h = r0;
0x00049538 add r2, sp, 0x74 | r2 += var_74h;
0x0004953a mov r0, r5 | r0 = r5;
0x0004953c add r3, pc | r3 = 0x92bae;
0x0004953e str r3, [sp, 0x74] | var_74h = r3;
0x00049540 movs r3, 0x1d | r3 = 0x1d;
0x00049542 str r3, [sp, 0x78] | var_78h = r3;
0x00049544 movs r3, 0 | r3 = 0;
0x00049546 bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x0004954a mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0004954c cbz r0, 0x49552 |
0x0004954e movs r3, 2 | r3 = 2;
0x00049550 strb r3, [r0, 1] | *((r0 + 1)) = r3;
| }
0x00049552 ldr r0, [r4] | r0 = *(r4);
0x00049554 bl 0x384f8 | fcn_000384f8 (r0, r1);
0x00049558 add r3, sp, 0x64 | r3 += var_64h;
0x0004955a mov r7, r0 | r7 = r0;
0x0004955c add r2, sp, 0x6c | r2 += var_6ch;
0x0004955e movs r1, 0 | r1 = 0;
0x00049560 mov r0, r4 | r0 = r4;
0x00049562 bl 0x44e24 | fcn_00044e24 (r0, r1, r2, r3);
0x00049566 mov r1, r7 | r1 = r7;
0x00049568 movs r7, 0 | r7 = 0;
0x0004956a mov r2, r0 | r2 = r0;
0x0004956c ldr r3, [sp, 0x18] | r3 = *((sp + 0x18));
0x0004956e mov r0, r4 | r0 = r4;
0x00049570 strd r7, r7, [sp, 0xc] | __asm ("strd r7, r7, [sp, 0xc]");
0x00049574 strd r7, r7, [sp, 4] | __asm ("strd r7, r7, [sp, 4]");
0x00049578 str r7, [sp] | *(sp) = r7;
0x0004957a bl 0x3af54 | fcn_0003af54 (r0, r1, r2, r3, r4, r5, r6);
0x0004957e ldr.w r3, [r5, 0x130] | r3 = *((r5 + 0x130));
0x00049582 mov r2, r6 | r2 = r6;
0x00049584 mov sl, r0 | sl = r0;
0x00049586 strh.w r7, [r5, 0x134] | *((r5 + 0x134)) = r7;
0x0004958a mov r0, r5 | r0 = r5;
0x0004958c adds r3, 1 | r3++;
0x0004958e str.w r3, [r5, 0x130] | __asm ("str.w r3, [r5, 0x130]");
0x00049592 mov r3, r7 | r3 = r7;
0x00049594 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00049598 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x0004959a cbnz r0, 0x49608 | goto label_39;
| }
0x0004959c ldr.w r3, [r5, 0x130] | r3 = *((r5 + 0x130));
0x000495a0 subs r3, 1 | r3--;
0x000495a2 str.w r3, [r5, 0x130] | __asm ("str.w r3, [r5, 0x130]");
| if (r3 == 0) {
0x000495a6 cbz r3, 0x495fa | goto label_40;
| }
0x000495a8 mov r3, r6 | r3 = r6;
| label_12:
0x000495aa movs r7, 0 | r7 = 0;
0x000495ac strh.w r3, [r5, 0x134] | *((r5 + 0x134)) = r3;
0x000495b0 b 0x4946e | goto label_5;
| label_26:
0x000495b2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000495b4 movs r3, 0 | r3 = 0;
0x000495b6 movs r1, 0x3b | r1 = 0x3b;
0x000495b8 mov r0, r5 | r0 = r5;
0x000495ba bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000495be ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x000495c0 mov r6, r0 | r6 = r0;
0x000495c2 movs r1, 0x3b | r1 = 0x3b;
0x000495c4 movs r3, 0 | r3 = 0;
0x000495c6 mov r0, r5 | r0 = r5;
0x000495c8 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000495cc mov r2, r6 | r2 = r6;
0x000495ce mov r3, r0 | r3 = r0;
0x000495d0 movs r1, 0x8d | r1 = 0x8d;
0x000495d2 mov r0, r4 | r0 = r4;
0x000495d4 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x000495d8 mov r6, r0 | r6 = r0;
0x000495da b 0x49356 | goto label_6;
| label_36:
0x000495dc movs r3, 0x81 | r3 = 0x81;
| label_10:
0x000495de strb r3, [r7] | *(r7) = r3;
0x000495e0 ldr r3, [sp, 0x28] | r3 = *((sp + 0x28));
0x000495e2 cmp r3, 0 |
| if (r3 != 0) {
0x000495e4 bne.w 0x494c4 | goto label_7;
| }
| label_17:
0x000495e8 movs r2, 0x80 | r2 = 0x80;
0x000495ea b 0x494c6 | goto label_8;
| label_33:
0x000495ec movs r3, 0 | r3 = 0;
0x000495ee b 0x4945e | goto label_9;
| label_35:
0x000495f0 movs r3, 0x8a | r3 = 0x8a;
0x000495f2 b 0x495de | goto label_10;
| label_30:
0x000495f4 mov sl, r0 | sl = r0;
0x000495f6 mov r6, r0 | r6 = r0;
0x000495f8 b 0x4944a | goto label_11;
| label_40:
0x000495fa ldrh.w r3, [r5, 0x136] | r3 = *((r5 + 0x136));
0x000495fe b 0x495aa | goto label_12;
| label_28:
0x00049600 movs r6, 0x55 | r6 = 0x55;
0x00049602 mov sb, fp | sb = fp;
0x00049604 str r6, [sp, 0x1c] | var_1ch_2 = r6;
0x00049606 b 0x493aa | goto label_13;
| label_39:
0x00049608 mov r1, r7 | r1 = r7;
0x0004960a ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x0004960c blx 0x62ec | fcn_000062ec ();
0x00049610 add.w r0, r6, 0x54 | r0 = r6 + 0x54;
0x00049614 str r7, [sp, 0x18] | *((sp + 0x18)) = r7;
0x00049616 add.w r7, r6, 0x24 | r7 = r6 + 0x24;
0x0004961a mov r2, sb | r2 = sb;
0x0004961c mov r1, fp | r1 = fp;
0x0004961e str r0, [r6, 0x30] | *((r6 + 0x30)) = r0;
0x00049620 str r7, [r6, 0x1c] | *((r6 + 0x1c)) = r7;
0x00049622 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00049626 ldr r0, [sp, 0x18] | r0 = *((sp + 0x18));
0x00049628 b 0x4940a | goto label_14;
| label_22:
0x0004962a str r0, [sp, 0x2c] | *((sp + 0x2c)) = r0;
0x0004962c str r0, [sp, 0x48] | *((sp + 0x48)) = r0;
0x0004962e str r0, [sp, 0x18] | *((sp + 0x18)) = r0;
0x00049630 cmp r1, 0 |
| if (r1 != 0) {
0x00049632 bne.w 0x49382 | goto label_15;
| }
0x00049636 b 0x49388 | goto label_16;
| label_37:
0x00049638 movs r3, 0x80 | r3 = 0x80;
0x0004963a strb r3, [r7] | *(r7) = r3;
0x0004963c b 0x495e8 | goto label_17;
| label_32:
0x0004963e vabd.u8 d14, d11, d2 | __asm ("vabd.u8 d14, d11, d2");
| label_34:
0x00049642 mov r1, r6 | r1 = r6;
0x00049644 mov r0, r5 | r0 = r5;
0x00049646 bl 0x3109c | fcn_0003109c (r0, r1);
0x0004964a b 0x49162 | goto label_18;
| label_38:
0x0004964c sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x00049650 b 0x49520 | goto label_19;
| label_21:
0x00049652 blx 0x6430 | fcn_00006430 ();
| label_31:
0x00049656 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00049658 mov sl, r0 | sl = r0;
0x0004965a b 0x4940a | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x49670 */
| #include <stdint.h>
|
; (fcn) fcn.00049670 () | void fcn_00049670 (int16_t arg_0h, int16_t arg_4h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_24h, int16_t arg_30h, int16_t arg_34h, int16_t arg_3ch, int16_t arg_57h, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00049670 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00049674 mov r5, r0 | r5 = r0;
0x00049676 ldr.w r4, [pc, 0x72c] |
0x0004967a mov r8, r2 | r8 = r2;
0x0004967c ldr r7, [r0] | r7 = *(r0);
0x0004967e ldr.w r0, [pc, 0x728] | r0 = *(0x49daa);
0x00049682 add r4, pc | r4 = 0x9342c;
0x00049684 vpush {d8} | __asm ("vpush {d8}");
0x00049688 sub sp, 0x74 |
0x0004968a ldr r2, [r7, 0x50] | r2 = *((r7 + 0x50));
0x0004968c ldr r0, [r4, r0] |
0x0004968e ldr r0, [r0] | r0 = *(0x9342c);
0x00049690 str r0, [sp, 0x6c] | var_6ch = r0;
0x00049692 mov.w r0, 0 | r0 = 0;
0x00049696 ands r0, r2, 1 | r0 = r2 & 1;
| if (r0 != r2) {
0x0004969a bne 0x496d8 | goto label_1;
| }
0x0004969c mov r4, r1 | r4 = r1;
0x0004969e ldr r1, [r1, 0x44] | r1 = *((r1 + 0x44));
0x000496a0 cbz r1, 0x496c6 |
| while (1) {
| label_0:
0x000496a2 ldr.w r2, [pc, 0x708] |
0x000496a6 ldr.w r3, [pc, 0x700] | r3 = *(0x49daa);
0x000496aa add r2, pc | r2 = 0x9345c;
0x000496ac ldr r3, [r2, r3] | r3 = *(0x9345c);
0x000496ae ldr r2, [r3] | r2 = *(0x9345c);
0x000496b0 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000496b2 eors r2, r3 | r2 ^= r3;
0x000496b4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000496b8 bne.w 0x498b6 | goto label_19;
| }
0x000496ba strh r5, [r7, 6] | *((r7 + 6)) = r5;
0x000496bc add sp, 0x74 |
0x000496be vpop {d8} | __asm ("vpop {d8}");
0x000496c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000496c6 ldr.w fp, [r4, 0x20] | fp = *((r4 + 0x20));
0x000496ca lsl.w sl, r8, 6 | sl = r8 << 6;
0x000496ce add.w r0, fp, sl | r0 = fp + sl;
0x000496d2 ldr r6, [r0, 0x1c] | r6 = *((r0 + 0x1c));
0x000496d4 ldr r0, [r6, 0x44] | r0 = *((r6 + 0x44));
| if (r0 == 0) {
0x000496d6 cbz r0, 0x496dc | goto label_20;
| }
| label_1:
0x000496d8 movs r0, 0 | r0 = 0;
0x000496da b 0x496a2 |
| }
| label_20:
0x000496dc ldr r1, [r6, 0x3c] | r1 = *((r6 + 0x3c));
0x000496de ldr.w lr, [r6, 0x20] |
0x000496e2 str r1, [sp, 8] | var_8h = r1;
0x000496e4 cmp r1, 0 |
| if (r1 == 0) {
0x000496e6 beq.w 0x49868 | goto label_21;
| }
0x000496ea ldr.w ip, [r4, 0x3c] | ip = *((r4 + 0x3c));
0x000496ee cmp.w ip, 0 |
| if (ip != 0) {
0x000496f2 bne 0x496a2 | goto label_0;
| }
0x000496f4 ldr r0, [r1, 0x10] | r0 = *((r1 + 0x10));
0x000496f6 cmp r0, 0 |
| if (r0 != 0) {
0x000496f8 bne 0x496d8 | goto label_1;
| }
0x000496fa ldr.w sb, [r4, 4] | sb = *((r4 + 4));
0x000496fe tst.w sb, 0x100 |
| if ((sb & 0x100) != 0) {
0x00049702 bne 0x496a2 | goto label_0;
| }
| label_3:
0x00049704 ldr.w r0, [lr] | r0 = *(lr);
0x00049708 cmp r0, 0 |
| if (r0 == 0) {
0x0004970a beq 0x496a2 | goto label_0;
| }
0x0004970c ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0004970e str r1, [sp, 0xc] | var_ch = r1;
0x00049710 ands r1, r1, 1 | r1 &= 1;
0x00049714 str r1, [sp, 0x10] | var_10h = r1;
| if (r1 != r1) {
0x00049716 bne 0x496d8 | goto label_1;
| }
0x00049718 ldr r1, [sp, 8] | r1 = var_8h;
0x0004971a cmp r1, 0 |
| if (r1 == 0) {
0x0004971c beq.w 0x49888 | goto label_22;
| }
0x00049720 and r1, r3, 1 | r1 = r3 & 1;
0x00049724 mov ip, r1 |
0x00049726 ldr.w r1, [fp] | r1 = *(fp);
0x0004972a cmp r1, 1 |
0x0004972c it gt |
| if (r1 <= 1) {
0x0004972e orrgt ip, ip, 1 |
| }
0x00049732 mov r1, ip | r1 = ip;
0x00049734 cmp r1, 0 |
| if (r1 != 0) {
0x00049736 bne 0x496d8 | goto label_1;
| }
0x00049738 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x0004973a str r1, [sp, 8] | var_8h = r1;
| if (r1 == 0) {
0x0004973c cbz r1, 0x49744 | goto label_23;
| }
0x0004973e ldr r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x00049740 cmp r1, 0 |
| if (r1 != 0) {
0x00049742 bne 0x496d8 | goto label_1;
| }
| label_23:
0x00049744 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00049746 cmp r1, 0 |
| if (r1 != 0) {
0x00049748 bne 0x496d8 | goto label_1;
| }
0x0004974a tst.w sb, 1 |
| if ((sb & 1) != 0) {
0x0004974e bne 0x496d8 | goto label_1;
| }
| label_4:
0x00049750 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00049752 lsls r1, r1, 0x12 | r1 <<= 0x12;
| if (r1 < r1) {
0x00049754 bmi 0x496d8 | goto label_1;
| }
0x00049756 add.w r1, fp, sl | r1 = fp + sl;
0x0004975a ldrb.w ip, [r1, 0x2c] | ip = *((r1 + 0x2c));
0x0004975e str r1, [sp, 0x10] | var_10h = r1;
0x00049760 ands r1, ip, 0x60 | r1 = ip & 0x60;
0x00049764 str.w ip, [sp, 0xc] | __asm ("str.w ip, [var_ch]");
| if (r1 == ip) {
0x00049768 beq.w 0x498aa | goto label_24;
| }
0x0004976c cmp r0, 1 |
| if (r0 > 1) {
0x0004976e bgt 0x496d8 | goto label_1;
| }
0x00049770 ands ip, r3, 1 |
| if (ip != r3) {
0x00049774 bne 0x496d8 | goto label_1;
| }
0x00049776 ldr.w r1, [lr, 0x18] | r1 = *((lr + 0x18));
0x0004977a ldrb.w r1, [r1, 0x2b] | r1 = *((r1 + 0x2b));
0x0004977e cmp r1, 1 |
| if (r1 == 1) {
0x00049780 beq 0x496d8 | goto label_1;
| }
0x00049782 ands r1, sb, 1 | r1 = sb & 1;
0x00049786 str r1, [sp, 0x14] | var_14h = r1;
| if (r1 != sb) {
0x00049788 bne 0x496d8 | goto label_1;
| }
0x0004978a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004978c lsls r1, r1, 0x1b | r1 <<= 0x1b;
| if (r1 < r1) {
0x0004978e bmi 0x496d8 | goto label_1;
| }
0x00049790 cmp.w r8, 0 |
| if (r8 <= 0) {
0x00049794 ble.w 0x498ba | goto label_25;
| }
0x00049798 movs r1, 1 | r1 = 1;
0x0004979a str r1, [sp, 0x10] | var_10h = r1;
| label_5:
0x0004979c ldrb.w r1, [lr, 0x2c] | r1 = *((lr + 0x2c));
0x000497a0 lsls r1, r1, 0x19 | r1 <<= 0x19;
| if (r1 < r1) {
0x000497a2 bmi 0x496d8 | goto label_1;
| }
| label_6:
0x000497a4 add.w r1, fp, sl | r1 = fp + sl;
0x000497a8 ldrb.w ip, [r1, 0x2e] | ip = *((r1 + 0x2e));
0x000497ac tst.w ip, 1 |
| if ((ip & 1) == 0) {
0x000497b0 beq 0x497be | goto label_26;
| }
0x000497b2 add.w r1, fp, r8, lsl 6 | r1 = fp + (r8 << 6);
0x000497b6 ldr r1, [r1, 0x44] | r1 = *((r1 + 0x44));
0x000497b8 ldrb r1, [r1, 0x12] | r1 = *((r1 + 0x12));
0x000497ba cmp r1, 0 |
| if (r1 == 0) {
0x000497bc beq 0x496d8 | goto label_1;
| }
| label_26:
0x000497be cmp r0, 1 |
| if (r0 <= 1) {
0x000497c0 ble 0x497f0 | goto label_27;
| }
0x000497c2 add.w r1, lr, r0, lsl 6 | r1 = lr + (r0 << 6);
0x000497c6 ldrb r1, [r1, -0x14] | r1 = *((r1 - 0x14));
0x000497ca lsls r0, r1, 0x1a | r0 = r1 << 0x1a;
| if (r0 >= r1) {
0x000497cc bpl 0x497f0 | goto label_27;
| }
0x000497ce ldr r1, [sp, 0xc] | r1 = var_ch;
0x000497d0 orr.w r1, r1, ip | r1 |= ip;
0x000497d4 ands r1, r1, 4 | r1 &= 4;
| if (r1 != r1) {
0x000497d8 bne.w 0x496d8 | goto label_1;
| }
0x000497dc add.w r0, fp, sl | r0 = fp + sl;
0x000497e0 ldr r0, [r0, 0x34] | r0 = *((r0 + 0x34));
0x000497e2 cmp r0, 0 |
| if (r0 != 0) {
0x000497e4 bne.w 0x496d8 | goto label_1;
| }
0x000497e8 tst.w ip, 8 |
| if ((ip & 8) != 0) {
0x000497ec bne.w 0x496a2 | goto label_0;
| }
| label_27:
0x000497f0 add.w r1, fp, sl | r1 = fp + sl;
0x000497f4 ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x000497f6 ldr r1, [r1, 0x30] | r1 = *((r1 + 0x30));
0x000497f8 str r0, [sp, 0xc] | var_ch = r0;
0x000497fa str r1, [sp, 0x28] | var_28h = r1;
0x000497fc ldr.w r1, [r5, 0xf8] | r1 = *((r5 + 0xf8));
0x00049800 str r1, [sp, 0x14] | var_14h = r1;
0x00049802 cmp r0, 0 |
| if (r0 == 0) {
0x00049804 beq 0x498ee | goto label_17;
| }
0x00049806 ldr r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x00049808 orrs r1, r3 | r1 |= r3;
0x0004980a and r3, sb, 1 | r3 = sb & 1;
0x0004980e orrs r1, r3 | r1 |= r3;
| if (r1 != r3) {
0x00049810 bne.w 0x496d8 | goto label_1;
| }
0x00049814 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00049816 cmp r3, 0 |
| if (r3 != 0) {
0x00049818 bne.w 0x496d8 | goto label_1;
| }
0x0004981c mov r1, r6 | r1 = r6;
| label_2:
0x0004981e ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00049820 ands r0, r3, 9 | r0 = r3 & 9;
| if (r0 != r3) {
0x00049824 bne.w 0x496d8 | goto label_1;
| }
0x00049828 ldr r3, [r1, 0x34] | r3 = *((r1 + 0x34));
| if (r3 == 0) {
0x0004982a cbz r3, 0x49838 | goto label_28;
| }
0x0004982c ldrb.w ip, [r1] | ip = *(r1);
0x00049830 cmp.w ip, 0x87 |
| if (ip != 0x87) {
0x00049834 bne.w 0x496a2 | goto label_0;
| }
| label_28:
0x00049838 ldr.w ip, [r1, 0x20] | ip = *((r1 + 0x20));
0x0004983c ldr.w r0, [ip] | r0 = *(ip);
0x00049840 cmp r0, 0 |
| if (r0 <= 0) {
0x00049842 ble.w 0x496d8 | goto label_1;
| }
0x00049846 ldr r0, [r1, 0x44] | r0 = *((r1 + 0x44));
0x00049848 cmp r0, 0 |
| if (r0 != 0) {
0x0004984a bne.w 0x496d8 | goto label_1;
| }
0x0004984e cmp.w r8, 0 |
| if (r8 <= 0) {
0x00049852 ble 0x4985e | goto label_29;
| }
0x00049854 ldrb.w r1, [ip, 0x2c] | r1 = *((ip + 0x2c));
0x00049858 lsls r1, r1, 0x19 | r1 <<= 0x19;
| if (r1 < r1) {
0x0004985a bmi.w 0x496a2 | goto label_0;
| }
| label_29:
0x0004985e cmp r3, 0 |
| if (r3 == 0) {
0x00049860 beq.w 0x49d12 | goto label_30;
| }
0x00049864 mov r1, r3 | r1 = r3;
0x00049866 b 0x4981e | goto label_2;
| label_21:
0x00049868 ldr.w sb, [r4, 4] | sb = *((r4 + 4));
0x0004986c tst.w sb, 0x100 |
| if ((sb & 0x100) == 0) {
0x00049870 beq.w 0x49704 | goto label_3;
| }
0x00049874 ldr.w r0, [lr] | r0 = *(lr);
0x00049878 cmp r0, 0 |
| if (r0 == 0) {
0x0004987a beq.w 0x496a2 | goto label_0;
| }
0x0004987e ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00049880 str r1, [sp, 0xc] | var_ch = r1;
0x00049882 lsls r1, r1, 0x1f | r1 <<= 0x1f;
| if (r1 < r1) {
0x00049884 bmi.w 0x496d8 | goto label_1;
| }
| label_22:
0x00049888 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x0004988a str r1, [sp, 8] | var_8h = r1;
| if (r1 == 0) {
0x0004988c cbz r1, 0x49898 | goto label_31;
| }
0x0004988e ldr r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x00049890 cmp r1, 0 |
| if (r1 != 0) {
0x00049892 bne.w 0x496d8 | goto label_1;
| }
0x00049896 b 0x49750 | goto label_4;
| label_31:
0x00049898 cmp r3, 0 |
| if (r3 == 0) {
0x0004989a beq.w 0x49750 | goto label_4;
| }
0x0004989e ldr r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x000498a0 str r1, [sp, 8] | var_8h = r1;
0x000498a2 cmp r1, 0 |
| if (r1 != 0) {
0x000498a4 bne.w 0x496d8 | goto label_1;
| }
0x000498a8 b 0x49750 | goto label_4;
| label_24:
0x000498aa cmp.w r8, 0 |
0x000498ae str r1, [sp, 0x10] | var_10h = r1;
| if (r8 > 0) {
0x000498b0 bgt.w 0x4979c | goto label_5;
| }
0x000498b4 b 0x497a4 | goto label_6;
| label_19:
0x000498b6 blx 0x6430 | fcn_00006430 ();
| label_25:
0x000498ba ldr r1, [sp, 0x10] | r1 = var_10h;
0x000498bc ldrb.w r3, [r1, 0x2e] | r3 = *((r1 + 0x2e));
0x000498c0 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 >= r3) {
0x000498c2 bpl 0x498d2 | goto label_32;
| }
0x000498c4 add.w r3, fp, r8, lsl 6 | r3 = fp + (r8 << 6);
0x000498c8 ldr r3, [r3, 0x44] | r3 = *((r3 + 0x44));
0x000498ca ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
0x000498cc cmp r3, 0 |
| if (r3 == 0) {
0x000498ce beq.w 0x496d8 | goto label_1;
| }
| label_32:
0x000498d2 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000498d4 str r3, [sp, 0xc] | var_ch = r3;
0x000498d6 cmp r3, 0 |
| if (r3 != 0) {
0x000498d8 bne.w 0x496d8 | goto label_1;
| }
0x000498dc add.w r3, fp, sl | r3 = fp + sl;
0x000498e0 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x000498e2 str r3, [sp, 0x28] | var_28h = r3;
0x000498e4 ldr.w r3, [r5, 0xf8] | r3 = *((r5 + 0xf8));
0x000498e8 str r3, [sp, 0x14] | var_14h = r3;
0x000498ea movs r3, 1 | r3 = 1;
0x000498ec str r3, [sp, 0x10] | var_10h = r3;
| label_17:
0x000498ee add.w sb, fp, sl | sb = fp + sl;
0x000498f2 movs r3, 0 | r3 = 0;
0x000498f4 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x000498f8 movs r1, 0x15 | r1 = 0x15;
0x000498fa mov r0, r5 | r0 = r5;
0x000498fc str.w r2, [r5, 0xf8] | __asm ("str.w r2, [r5, 0xf8]");
0x00049900 mov r2, r3 | r2 = r3;
0x00049902 str r3, [sp] | *(sp) = r3;
0x00049904 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x00049908 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004990a ldr.w r1, [sb, 0xc] | r1 = *((sb + 0xc));
0x0004990e str.w r3, [r5, 0xf8] | __asm ("str.w r3, [r5, 0xf8]");
0x00049912 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00049916 str r3, [sp, 0x14] | var_14h = r3;
| if (r1 != 0) {
0x00049918 cbz r1, 0x49920 |
0x0004991a mov r0, r7 | r0 = r7;
0x0004991c bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00049920 add.w r3, fp, sl | r3 = fp + sl;
0x00049924 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
| if (r1 != 0) {
0x00049926 cbz r1, 0x4992e |
0x00049928 mov r0, r7 | r0 = r7;
0x0004992a bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x0004992e add.w r3, fp, sl | r3 = fp + sl;
0x00049932 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
| if (r1 != 0) {
0x00049934 cbz r1, 0x4993c |
0x00049936 mov r0, r7 | r0 = r7;
0x00049938 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x0004993c ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x0004993e add.w r3, fp, sl | r3 = fp + sl;
0x00049942 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00049946 adds r3, 0xc | r3 += 0xc;
0x00049948 movs r2, 0 | r2 = 0;
0x0004994a str r1, [sp, 8] | var_8h = r1;
0x0004994c vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x00049950 add.w r3, fp, sl | r3 = fp + sl;
0x00049954 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x00049956 str r2, [r3, 0x1c] | *((r3 + 0x1c)) = r2;
0x00049958 cmp r1, 0 |
| if (r1 == 0) {
0x0004995a beq 0x49a22 | goto label_33;
| }
0x0004995c ldr.w r3, [pc, 0x450] | r3 = *(0x00049db0);
0x00049960 mov sb, r5 | sb = r5;
0x00049962 str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x00049966 mov fp, r7 |
0x00049968 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x0004996c add r3, pc | r3 += pc;
0x0004996e str r3, [sp, 0x24] | var_24h = r3;
0x00049970 ldr.w r3, [pc, 0x440] | r3 = *(0x00049db4);
0x00049974 add r3, pc | r3 += pc;
0x00049976 str r3, [sp, 0x2c] | var_2ch = r3;
0x00049978 add.w r3, r4, 0x30 | r3 = r4 + 0x30;
0x0004997c str r3, [sp, 0x20] | var_20h = r3;
0x0004997e b 0x49996 | goto label_34;
| label_7:
0x00049980 str r5, [r6, 0x34] | *((r6 + 0x34)) = r5;
| if (r5 != 0) {
0x00049982 cbz r5, 0x49986 |
0x00049984 str r6, [r5, 0x38] | *((r5 + 0x38)) = r6;
| }
0x00049986 mov r5, r6 | r5 = r6;
0x00049988 str r4, [r6, 0x38] | *((r6 + 0x38)) = r4;
| do {
0x0004998a ldr r3, [sp, 8] | r3 = var_8h;
0x0004998c str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x0004998e ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x00049990 str r3, [sp, 8] | var_8h = r3;
0x00049992 cmp r3, 0 |
| if (r3 == 0) {
0x00049994 beq 0x49a16 | goto label_35;
| }
| label_34:
0x00049996 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00049998 movs r2, 0 | r2 = 0;
0x0004999a ldr r6, [r4, 0x3c] | r6 = *((r4 + 0x3c));
0x0004999c mov r1, r4 | r1 = r4;
0x0004999e ldrd r8, r5, [r4, 0x30] | __asm ("ldrd r8, r5, [r4, 0x30]");
0x000499a2 mov r0, fp | r0 = fp;
0x000499a4 add.w r7, r3, sl | r7 = r3 + sl;
0x000499a8 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000499aa str r2, [r7, 0x18] | *((r7 + 0x18)) = r2;
0x000499ac str r3, [sp, 0x30] | var_30h = r3;
0x000499ae ldr r3, [sp, 0x20] | r3 = var_20h;
0x000499b0 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000499b4 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x000499b6 bl 0x39f48 | fcn_00039f48 (r0, r1, r2, r3);
0x000499ba ldr r3, [sp, 0x30] | r3 = var_30h;
0x000499bc movs r2, 0x87 | r2 = 0x87;
0x000499be str r6, [r4, 0x3c] | *((r4 + 0x3c)) = r6;
0x000499c0 mov r6, r0 | r6 = r0;
0x000499c2 str.w r8, [r4, 0x30] | __asm ("str.w r8, [r4, 0x30]");
0x000499c6 strb r2, [r4] | *(r4) = r2;
0x000499c8 str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000499ca cmp r0, 0 |
0x000499cc beq 0x4998a |
| } while (r0 == 0);
0x000499ce ldr.w r3, [sb, 0x64] | r3 = *((sb + 0x64));
0x000499d2 adds r3, 1 | r3++;
0x000499d4 str.w r3, [sb, 0x64] | __asm ("str.w r3, [sb, 0x64]");
0x000499d8 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000499da ldr r3, [sp, 0xc] | r3 = var_ch;
0x000499dc cmp r3, 0 |
| if (r3 == 0) {
0x000499de beq 0x49980 | goto label_7;
| }
0x000499e0 ldrb.w r7, [fp, 0x57] | r7 = *(arg_57h);
0x000499e4 cmp r7, 0 |
| if (r7 != 0) {
0x000499e6 bne 0x49980 | goto label_7;
| }
0x000499e8 mov r1, r3 | r1 = r3;
0x000499ea mov r0, sb | r0 = sb;
0x000499ec ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000499ee add.w r8, sp, 0x50 | r8 += var_50h;
0x000499f2 ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x000499f4 bl 0x23744 | fcn_00023744 (r0, r1, r2, r3);
0x000499f8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000499fa mov r0, r8 | r0 = r8;
0x000499fc mov r1, r6 | r1 = r6;
0x000499fe str r7, [sp, 0x50] | var_50h = r7;
0x00049a00 strd r7, r7, [sp, 0x5c] | __asm ("strd r7, r7, [var_5ch]");
0x00049a04 str r3, [sp, 0x68] | var_68h = r3;
0x00049a06 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00049a08 str r7, [sp, 0x64] | var_64h = r7;
0x00049a0a str r3, [sp, 0x54] | var_54h = r3;
0x00049a0c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00049a0e str r3, [sp, 0x58] | var_58h = r3;
0x00049a10 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
0x00049a14 b 0x49980 | goto label_7;
| label_35:
0x00049a16 mov r7, fp | r7 = fp;
0x00049a18 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00049a1c ldr.w fp, [sp, 0x18] | fp = var_18h;
0x00049a20 mov r5, sb | r5 = sb;
| label_33:
0x00049a22 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x00049a24 cbz r3, 0x49a2e |
0x00049a26 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00049a28 mov r0, r7 | r0 = r7;
0x00049a2a bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00049a2e ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x00049a32 cmp r3, 0 |
| if (r3 != 0) {
0x00049a34 bne.w 0x49cd8 | goto label_36;
| }
0x00049a38 add.w r3, fp, sl | r3 = fp + sl;
0x00049a3c ldr.w sb, [r3, 0x18] | sb = *((r3 + 0x18));
0x00049a40 cmp.w sb, 0 |
| if (sb != 0) {
0x00049a44 beq 0x49a5e |
0x00049a46 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00049a4a cmp r3, 1 |
| if (r3 == 1) {
0x00049a4c beq.w 0x49ce2 | goto label_37;
| }
0x00049a50 subs r3, 1 | r3--;
0x00049a52 str.w r3, [sb, 0x18] | __asm ("str.w r3, [sb, 0x18]");
| label_15:
0x00049a56 add.w r3, fp, sl | r3 = fp + sl;
0x00049a5a movs r2, 0 | r2 = 0;
0x00049a5c str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| }
0x00049a5e ldr r3, [pc, 0x358] |
0x00049a60 mov r1, fp | r1 = fp;
0x00049a62 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00049a66 mov sb, r4 | sb = r4;
0x00049a68 str.w fp, [sp, 0x40] | __asm ("str.w fp, [var_40h]");
0x00049a6c mov.w r2, -1 | r2 = -1;
0x00049a70 add r3, pc | r3 = 0x9382e;
0x00049a72 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x00049a76 str r3, [sp, 0x3c] | var_3ch = r3;
0x00049a78 mov r8, r1 | r8 = r1;
0x00049a7a ldr r3, [pc, 0x340] |
0x00049a7c add r6, sp, 0x50 | r6 += var_50h;
0x00049a7e str r2, [sp, 0x20] | var_20h = r2;
0x00049a80 str r6, [sp, 0x38] | var_38h = r6;
0x00049a82 add r3, pc | r3 = 0x93844;
0x00049a84 str r7, [sp, 8] | var_8h = r7;
0x00049a86 str r3, [sp, 0x18] | var_18h = r3;
0x00049a88 add.w r3, sl, 8 | r3 = sl + 8;
0x00049a8c str r3, [sp, 0x34] | var_34h = r3;
0x00049a8e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00049a90 str r5, [sp, 0xc] | var_ch = r5;
0x00049a92 str r4, [sp, 0x44] | var_44h = r4;
0x00049a94 mov fp, r3 |
0x00049a96 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
| label_8:
0x00049a9a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00049a9c ldr.w r5, [fp, 0x20] | r5 = *(arg_20h);
0x00049aa0 add r8, r3 | r8 += r3;
0x00049aa2 ldrb.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x00049aa6 ldr.w sl, [r5] | sl = *(r5);
0x00049aaa ldr.w r8, [sb, 0x20] | r8 = *((sb + 0x20));
0x00049aae and r3, r3, 0x40 | r3 &= 0x40;
0x00049ab2 str r3, [sp, 0x2c] | var_2ch = r3;
0x00049ab4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00049ab6 cmp r3, sb |
0x00049ab8 itett eq |
| if (r3 != sb) {
0x00049aba ldreq r3, [sp, 0x40] | r3 = var_40h;
| }
| if (r3 == sb) {
0x00049abc movne r3, 0 | r3 = 0;
| }
| if (r3 != sb) {
0x00049abe ldreq r2, [sp, 0x1c] | r2 = var_1ch;
| }
| if (r3 != sb) {
0x00049ac0 addeq r3, r3, r2 | r3 += r2;
| }
0x00049ac2 it eq |
| if (r3 != sb) {
0x00049ac4 ldrbeq r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
| }
0x00049ac8 cmp.w sl, 1 |
0x00049acc str r3, [sp, 0x24] | var_24h = r3;
| if (sl > 1) {
0x00049ace bgt.w 0x49c70 | goto label_38;
| }
| if (sl != 1) {
0x00049ad2 bne 0x49b58 | goto label_39;
| }
| label_10:
0x00049ad4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00049ad6 adds r5, 8 | r5 += 8;
0x00049ad8 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00049ada str.w sl, [sp, 0x20] | __asm ("str.w sl, [var_20h]");
0x00049ade add.w r4, r8, r3 | r4 = r8 + r3;
0x00049ae2 str.w sb, [sp, 0x48] | __asm ("str.w sb, [var_48h]");
0x00049ae6 add.w r3, sl, r7 | r3 = sl + r7;
0x00049aea ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00049aee mov sb, r3 | sb = r3;
0x00049af0 str r6, [sp, 0x4c] | var_4ch = r6;
| do {
0x00049af2 add.w r3, r8, r7, lsl 6 | r3 = r8 + (r7 << 6);
0x00049af6 ldrb.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x00049afa lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x00049afc bpl 0x49b08 |
0x00049afe ldr r1, [r4, 0x34] | r1 = *((r4 + 0x34));
| if (r1 == 0) {
0x00049b00 cbz r1, 0x49b08 | goto label_40;
| }
0x00049b02 ldr r0, [sp, 8] | r0 = var_8h;
0x00049b04 bl 0x2f0c8 | fcn_0002f0c8 (r0, r1);
| }
| label_40:
0x00049b08 mov ip, r5 |
0x00049b0a add.w r6, r4, 8 | r6 = r4 + 8;
0x00049b0e ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00049b12 adds r4, 0x40 | r4 += 0x40;
0x00049b14 adds r7, 1 | r7++;
0x00049b16 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x00049b18 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00049b1c stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x00049b1e ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x00049b22 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x00049b24 ldm.w ip, {r0, r1, r2, r3} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
| r3 = *((ip + 12));
0x00049b28 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00049b2c mov r0, r5 | r0 = r5;
0x00049b2e ldrb r3, [r4, -0x14] | r3 = *((r4 - 0x14));
0x00049b32 movs r2, 0x40 | r2 = 0x40;
0x00049b34 movs r1, 0 | r1 = 0;
0x00049b36 adds r5, 0x40 | r5 += 0x40;
0x00049b38 orr.w r3, sl, r3 | r3 = sl | r3;
0x00049b3c strb r3, [r4, -0x14] | *((r4 - 0x14)) = r3;
0x00049b40 ldr r6, [r5, -0x18] | r6 = *((r5 - 0x18));
0x00049b44 blx 0x62ec | fcn_000062ec ();
0x00049b48 cmp sb, r7 |
0x00049b4a bne 0x49af2 |
| } while (sb != r7);
0x00049b4c ldr.w sl, [sp, 0x20] | sl = var_20h;
0x00049b50 ldr.w sb, [sp, 0x48] | sb = var_48h;
0x00049b54 str r6, [sp, 0x20] | var_20h = r6;
0x00049b56 ldr r6, [sp, 0x4c] | r6 = var_4ch;
| label_39:
0x00049b58 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00049b5a ldr r2, [sp, 0x24] | r2 = var_24h;
0x00049b5c orrs r2, r3 | r2 |= r3;
0x00049b5e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00049b60 add.w r1, r8, r3 | r1 = r8 + r3;
0x00049b64 ldrb.w r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x00049b68 and r3, r3, 0x40 | r3 &= 0x40;
0x00049b6c orrs r3, r2 | r3 |= r2;
0x00049b6e strb.w r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00049b72 ldr.w r2, [fp, 0x30] | r2 = *(arg_30h);
| if (r2 != 0) {
0x00049b76 cbz r2, 0x49b84 |
0x00049b78 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00049b7c ands r3, r3, 0x400000 | r3 &= 0x400000;
| if (r3 == r3) {
0x00049b80 beq.w 0x49cb2 | goto label_41;
| }
| }
| label_13:
0x00049b84 movs r3, 0 | r3 = 0;
0x00049b86 ldr.w r4, [fp, 0x24] | r4 = *(arg_24h);
0x00049b8a str.w r3, [fp, 0x24] | __asm ("str.w r3, [arg_24h]");
0x00049b8e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00049b90 cmp r3, 0 |
| if (r3 != 0) {
0x00049b92 bne 0x49c64 | goto label_42;
| }
| if (r4 != 0) {
| label_9:
0x00049b94 cbz r4, 0x49bae |
0x00049b96 ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00049b9a cmp r3, 0 |
| if (r3 == 0) {
0x00049b9c beq.w 0x49cac | goto label_43;
| }
0x00049ba0 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00049ba2 mov r2, r4 | r2 = r4;
0x00049ba4 movs r1, 0x2c | r1 = 0x2c;
0x00049ba6 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x00049baa str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
| }
| label_12:
0x00049bae ldr r3, [sp, 8] | r3 = var_8h;
0x00049bb0 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00049bb4 cmp r2, 0 |
| if (r2 == 0) {
0x00049bb6 beq 0x49c8c | goto label_44;
| }
| label_11:
0x00049bb8 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00049bbc and r2, r3, 0x100 | r2 = r3 & 0x100;
0x00049bc0 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00049bc4 orrs r3, r2 | r3 |= r2;
0x00049bc6 str.w r3, [sb, 4] | __asm ("str.w r3, [sb, 4]");
0x00049bca ldr.w r3, [fp, 0x3c] | r3 = *(arg_3ch);
| if (r3 != 0) {
0x00049bce cbz r3, 0x49bda |
0x00049bd0 str.w r3, [sb, 0x3c] | __asm ("str.w r3, [sb, 0x3c]");
0x00049bd4 movs r3, 0 | r3 = 0;
0x00049bd6 str.w r3, [fp, 0x3c] | __asm ("str.w r3, [arg_3ch]");
| }
0x00049bda cmp.w sl, 0 |
| if (sl <= 0) {
0x00049bde ble 0x49c20 | goto label_45;
| }
0x00049be0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00049be2 movs r5, 0 | r5 = 0;
0x00049be4 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x00049be6 add.w r4, r8, r3 | r4 = r8 + r3;
0x00049bea mov r3, r8 | r3 = r8;
0x00049bec mov r8, sl | r8 = sl;
0x00049bee mov sl, r3 | sl = r3;
| do {
0x00049bf0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| if (r3 != 0) {
0x00049bf2 cbz r3, 0x49c16 |
0x00049bf4 movs r3, 0 | r3 = 0;
0x00049bf6 mov r1, sb | r1 = sb;
0x00049bf8 strd r3, r3, [r6] | __asm ("strd r3, r3, [r6]");
0x00049bfc mov r0, r6 | r0 = r6;
0x00049bfe strd r3, r3, [r6, 8] | __asm ("strd r3, r3, [r6, 8]");
0x00049c02 strd r3, r3, [r6, 0x10] | __asm ("strd r3, r3, [r6, 0x10]");
0x00049c06 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00049c08 str r7, [sp, 0x54] | var_54h = r7;
0x00049c0a str r4, [sp, 0x68] | var_68h = r4;
0x00049c0c str r3, [sp, 0x58] | var_58h = r3;
0x00049c0e vstr d8, [r4, 0x30] | __asm ("vstr d8, [r4, 0x30]");
0x00049c12 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
| }
0x00049c16 adds r5, 1 | r5++;
0x00049c18 adds r4, 0x40 | r4 += 0x40;
0x00049c1a cmp r8, r5 |
0x00049c1c bne 0x49bf0 |
| } while (r8 != r5);
0x00049c1e mov r8, sl | r8 = sl;
| label_45:
0x00049c20 ldr.w sb, [sb, 0x34] | sb = *((sb + 0x34));
0x00049c24 ldr.w fp, [fp, 0x34] | fp = *(arg_34h);
0x00049c28 cmp.w sb, 0 |
| if (sb != 0) {
0x00049c2c bne.w 0x49a9a | goto label_8;
| }
| do {
0x00049c30 ldr r2, [pc, 0x18c] |
0x00049c32 ldr r4, [sp, 0x14] | r4 = var_14h;
0x00049c34 ldr r3, [pc, 0x18c] |
0x00049c36 ldrd r7, r5, [sp, 8] | __asm ("ldrd r7, r5, [var_ch]");
0x00049c3a add r2, pc | r2 = 0x939fe;
0x00049c3c str r2, [sp, 0x54] | var_54h = r2;
0x00049c3e mov r1, r4 | r1 = r4;
0x00049c40 movs r2, 0 | r2 = 0;
0x00049c42 add r3, pc | r3 = 0x93a0a;
0x00049c44 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00049c46 str r5, [sp, 0x50] | var_50h = r5;
0x00049c48 str r3, [sp, 0x58] | var_58h = r3;
0x00049c4a strd r2, r2, [sp, 0x5c] | __asm ("strd r2, r2, [var_5ch]");
0x00049c4e strd r2, r2, [sp, 0x64] | __asm ("strd r2, r2, [var_68h]");
0x00049c52 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
| if (r4 != 0) {
0x00049c56 cbz r4, 0x49c60 |
0x00049c58 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00049c5a mov r0, r7 | r0 = r7;
0x00049c5c bl 0x30c24 | fcn_00030c24 (r0, r1);
| }
| label_14:
0x00049c60 movs r0, 1 | r0 = 1;
0x00049c62 b 0x496a2 | goto label_0;
| label_42:
0x00049c64 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00049c66 mov r2, r3 | r2 = r3;
0x00049c68 mov r0, r4 | r0 = r4;
0x00049c6a bl 0x23654 | fcn_00023654 (r0, r1, r2);
0x00049c6e b 0x49b94 | goto label_9;
| label_38:
0x00049c70 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00049c72 mov r1, r8 | r1 = r8;
0x00049c74 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00049c76 add.w r2, sl, -1 | r2 = sl + -1;
0x00049c7a adds r3, 1 | r3++;
0x00049c7c bl 0x44cd8 | r0 = fcn_00044cd8 (r0, r1, r2, r3);
0x00049c80 mov r8, r0 | r8 = r0;
0x00049c82 cmp r0, 0 |
0x00049c84 beq 0x49c30 |
| } while (r0 == 0);
0x00049c86 str.w r0, [sb, 0x20] | __asm ("str.w r0, [sb, 0x20]");
0x00049c8a b 0x49ad4 | goto label_10;
| label_44:
0x00049c8c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00049c8e mov r1, sb | r1 = sb;
0x00049c90 mov r0, r6 | r0 = r6;
0x00049c92 str r3, [sp, 0x50] | var_50h = r3;
0x00049c94 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00049c96 str r3, [sp, 0x54] | var_54h = r3;
0x00049c98 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00049c9a str r3, [sp, 0x58] | var_58h = r3;
0x00049c9c ldr r3, [sp, 0x10] | r3 = var_10h;
0x00049c9e str r3, [sp, 0x5c] | var_5ch = r3;
0x00049ca0 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x00049ca4 str r3, [sp, 0x60] | var_60h = r3;
0x00049ca6 bl 0x48608 | fcn_00048608 (r0, r1, r2);
0x00049caa b 0x49bb8 | goto label_11;
| label_43:
0x00049cac str.w r4, [sb, 0x24] | __asm ("str.w r4, [sb, 0x24]");
0x00049cb0 b 0x49bae | goto label_12;
| label_41:
0x00049cb2 ldr r0, [r2] | r0 = *(r2);
0x00049cb4 cmp r0, 0 |
0x00049cb6 it gt |
| if (r0 <= 0) {
0x00049cb8 movgt r1, r2 | r1 = r2;
| }
| if (r0 <= 0) {
0x00049cba ble 0x49ccc | goto label_46;
| }
| do {
0x00049cbc adds r3, 1 | r3++;
0x00049cbe mov.w r4, 0 | r4 = 0;
0x00049cc2 cmp r3, r0 |
0x00049cc4 strh r4, [r1, 0x14] | *((r1 + 0x14)) = r4;
0x00049cc6 add.w r1, r1, 0x10 | r1 += 0x10;
0x00049cca bne 0x49cbc |
| } while (r3 != r0);
| label_46:
0x00049ccc movs r3, 0 | r3 = 0;
0x00049cce str.w r2, [sb, 0x30] | __asm ("str.w r2, [sb, 0x30]");
0x00049cd2 str.w r3, [fp, 0x30] | __asm ("str.w r3, [arg_30h]");
0x00049cd6 b 0x49b84 | goto label_13;
| label_36:
0x00049cd8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00049cda add.w r3, fp, sl | r3 = fp + sl;
0x00049cde str r2, [r3, 0x1c] | *((r3 + 0x1c)) = r2;
0x00049ce0 b 0x49c60 | goto label_14;
| label_37:
0x00049ce2 ldr r6, [r5, 0x74] | r6 = *((r5 + 0x74));
0x00049ce4 cmp r6, 0 |
0x00049ce6 it eq |
| if (r6 != 0) {
0x00049ce8 moveq r6, r5 | r6 = r5;
| }
0x00049cea ldr r0, [r6] | r0 = *(r6);
0x00049cec cmp r0, 0 |
| if (r0 == 0) {
0x00049cee beq 0x49d8e | goto label_47;
| }
0x00049cf0 movs r2, 0xc | r2 = 0xc;
0x00049cf2 movs r3, 0 | r3 = 0;
0x00049cf4 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| label_18:
0x00049cf8 cmp r0, 0 |
| if (r0 == 0) {
0x00049cfa beq 0x49d98 | goto label_48;
| }
0x00049cfc ldr.w r2, [r6, 0x80] | r2 = *((r6 + 0x80));
0x00049d00 str r2, [r0] | *(r0) = r2;
0x00049d02 ldr r2, [pc, 0xc4] |
0x00049d04 str.w r0, [r6, 0x80] | __asm ("str.w r0, [r6, 0x80]");
0x00049d08 str.w sb, [r0, 4] | __asm ("str.w sb, [r0, 4]");
0x00049d0c add r2, pc | r2 = 0x93ada;
0x00049d0e str r2, [r0, 8] | *((r0 + 8)) = r2;
0x00049d10 b 0x49a56 | goto label_15;
| label_30:
0x00049d12 ldr r1, [sp, 8] | r1 = var_8h;
0x00049d14 str r3, [sp, 0xc] | var_ch = r3;
| if (r1 == 0) {
0x00049d16 cbz r1, 0x49d2e | goto label_49;
| }
0x00049d18 ldr ip, [r1], 0x14 | ip = *(r1);
| r1 += 0x14;
0x00049d1c b 0x49d2a | goto label_50;
| label_16:
0x00049d1e lsls r0, r3, 4 | r0 = r3 << 4;
0x00049d20 ldrh r0, [r1, r0] | r0 = *((r1 + r0));
0x00049d22 cmp r0, 0 |
| if (r0 == 0) {
0x00049d24 beq.w 0x496a2 | goto label_0;
| }
0x00049d28 adds r3, 1 | r3++;
| label_50:
0x00049d2a cmp ip, r3 |
| if (ip > r3) {
0x00049d2c bgt 0x49d1e | goto label_16;
| }
| label_49:
0x00049d2e ands sb, sb, 0x2000 | sb &= 0x2000;
| if (sb != sb) {
0x00049d32 bne.w 0x496d8 | goto label_1;
| }
0x00049d36 ldr.w r3, [fp] | r3 = *(fp);
0x00049d3a cmp r3, 1 |
| if (r3 <= 1) {
0x00049d3c ble 0x49d88 | goto label_51;
| }
0x00049d3e ldr r3, [r5, 0x64] | r3 = *((r5 + 0x64));
0x00049d40 cmp.w r3, 0x1f4 |
| if (r3 > 0x1f4) {
0x00049d44 bgt.w 0x496d8 | goto label_1;
| }
0x00049d48 ands r1, r2, 0x800000 | r1 = r2 & 0x800000;
0x00049d4c str r1, [sp, 8] | var_8h = r1;
| if (r1 != r2) {
0x00049d4e bne.w 0x496d8 | goto label_1;
| }
0x00049d52 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00049d54 mov r0, r7 | r0 = r7;
0x00049d56 adds r2, r3, 1 | r2 = r3 + 1;
0x00049d58 asr.w r3, r3, 0x1f | r3 >>= 0x1f;
0x00049d5c lsl.w sb, r2, 2 | sb = r2 << 2;
0x00049d60 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00049d64 lsls r3, r3, 2 | r3 <<= 2;
0x00049d66 orr.w r3, r3, r2, lsr 30 | r3 |= (r2 >> 30);
0x00049d6a mov r2, sb | r2 = sb;
0x00049d6c bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x00049d70 ldr r1, [sp, 8] | r1 = var_8h;
0x00049d72 str r0, [sp, 0xc] | var_ch = r0;
| if (r0 != 0) {
0x00049d74 cbz r0, 0x49d82 |
0x00049d76 mov r2, sb | r2 = sb;
0x00049d78 blx 0x62ec | fcn_000062ec ();
0x00049d7c ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00049d7e ldr r2, [sp, 0xc] | r2 = var_ch;
0x00049d80 str r3, [r2] | *(r2) = r3;
| }
0x00049d82 movs r3, 0 | r3 = 0;
0x00049d84 str r3, [sp, 0x10] | var_10h = r3;
0x00049d86 b 0x498ee | goto label_17;
| label_51:
0x00049d88 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x00049d8c b 0x498ee | goto label_17;
| label_47:
0x00049d8e movs r1, 0 | r1 = 0;
0x00049d90 movs r0, 0xc | r0 = 0xc;
0x00049d92 bl 0x28c3c | fcn_00028c3c (r0);
0x00049d96 b 0x49cf8 | goto label_18;
| label_48:
0x00049d98 ldr r0, [r6] | r0 = *(r6);
0x00049d9a mov r1, sb | r1 = sb;
0x00049d9c bl 0x31228 | fcn_00031228 (r0, r1);
0x00049da0 b 0x49a56 | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x49dcc */
| #include <stdint.h>
|
; (fcn) fcn.00049dcc () | void fcn_00049dcc (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00049dcc push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00049dd0 mov r4, r0 | r4 = r0;
0x00049dd2 ldr r6, [r0] | r6 = *(r0);
0x00049dd4 mov r0, r2 | r0 = r2;
0x00049dd6 mov r7, r3 | r7 = r3;
0x00049dd8 sub sp, 0x10 |
0x00049dda ldr r2, [pc, 0xbc] |
0x00049ddc mov r5, r1 | r5 = r1;
0x00049dde ldr r3, [pc, 0xbc] | r3 = *(0x49e9e);
0x00049de0 mov r1, sp | r1 = sp;
0x00049de2 ldr.w r8, [r6] | r8 = *(r6);
0x00049de4 strh r0, [r0] | *(r0) = r0;
0x00049de6 movs r6, 0 | r6 = 0;
0x00049de8 add r2, pc | r2 = 0x93c86;
0x00049dea ldr r3, [r2, r3] |
0x00049dec ldr.w sb, [r8] | sb = *(r8);
0x00049df0 ldr r3, [r3] | r3 = *(0x93c86);
0x00049df2 str r3, [sp, 0xc] | var_ch = r3;
0x00049df4 mov.w r3, 0 | r3 = 0;
0x00049df8 str r6, [sp] | *(sp) = r6;
0x00049dfa bl 0x23220 | r0 = fcn_00023220 (r0, r1);
| if (r0 != 0) {
0x00049dfe cbz r0, 0x49e08 |
0x00049e00 ldr.w sl, [sp] | sl = *(sp);
0x00049e04 cmp sl, r6 |
| if (sl >= r6) {
0x00049e06 bge 0x49e64 | goto label_1;
| }
| }
0x00049e08 movs r6, 0 | r6 = 0;
0x00049e0a mov r0, sb | r0 = sb;
0x00049e0c mov r3, r6 | r3 = r6;
0x00049e0e add r2, sp, 4 | r2 += var_4h;
0x00049e10 movs r1, 0xb0 | r1 = 0xb0;
0x00049e12 strd r6, r6, [sp, 4] | __asm ("strd r6, r6, [var_4h]");
0x00049e16 bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x00049e1a mov r3, r0 | r3 = r0;
| if (r0 == 0) {
0x00049e1c cbz r0, 0x49e4a | goto label_2;
| }
0x00049e1e movs r1, 0x2e | r1 = 0x2e;
0x00049e20 str r5, [r0, 0x1c] | *((r0 + 0x1c)) = r5;
0x00049e22 mov r2, r6 | r2 = r6;
0x00049e24 mov r0, r8 | r0 = r8;
0x00049e26 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x00049e2a mov r1, r0 | r1 = r0;
| if (r1 == 0) {
| label_0:
0x00049e2c cbz r1, 0x49e4a | goto label_2;
| }
0x00049e2e movs r2, 3 | r2 = 3;
0x00049e30 mov r0, r4 | r0 = r4;
0x00049e32 bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x00049e36 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00049e38 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00049e3c movs r2, 0x40 | r2 = 0x40;
0x00049e3e add.w r3, r3, r0, lsl 4 | r3 += (r0 << 4);
0x00049e42 strh r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x00049e44 ldr r2, [sp, 0x30] | r2 = *(arg_30h);
0x00049e46 str r7, [r3, 0x14] | *((r3 + 0x14)) = r7;
0x00049e48 strb r2, [r3, 0xf] | *((r3 + 0xf)) = r2;
| do {
| label_2:
0x00049e4a ldr r2, [pc, 0x54] |
0x00049e4c ldr r3, [pc, 0x4c] | r3 = *(0x49e9c);
0x00049e4e add r2, pc | r2 = 0x93cf4;
0x00049e50 ldr r3, [r2, r3] | r3 = *(0x93cf4);
0x00049e52 ldr r2, [r3] | r2 = *(0x93cf4);
0x00049e54 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00049e56 eors r2, r3 | r2 ^= r3;
0x00049e58 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00049e5c bne 0x49e94 | goto label_3;
| }
0x00049e5e add sp, 0x10 |
0x00049e60 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00049e64 mov r3, r6 | r3 = r6;
0x00049e66 mov r0, sb | r0 = sb;
0x00049e68 add r2, sp, 4 | r2 += var_4h;
0x00049e6a movs r1, 0x9b | r1 = 0x9b;
0x00049e6c strd r6, r6, [sp, 4] | __asm ("strd r6, r6, [var_4h]");
0x00049e70 bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x00049e74 mov r3, r0 | r3 = r0;
0x00049e76 cmp r0, 0 |
0x00049e78 beq 0x49e4a |
| } while (r0 == 0);
0x00049e7a ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00049e7c mov r2, r6 | r2 = r6;
0x00049e7e str.w sl, [r0, 8] | __asm ("str.w sl, [r0, 8]");
0x00049e82 mov r0, r8 | r0 = r8;
0x00049e84 orr r1, r1, 0x800 | r1 |= 0x800;
0x00049e88 str r1, [r3, 4] | *((r3 + 4)) = r1;
0x00049e8a movs r1, 0x2e | r1 = 0x2e;
0x00049e8c bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x00049e90 mov r1, r0 | r1 = r0;
0x00049e92 b 0x49e2c | goto label_0;
| label_3:
0x00049e94 blx 0x6430 | fcn_00006430 ();
0x00049e98 vrev64.8 d0, d9 | __asm ("vrev64.8 d0, d9");
0x00049e9c lsls r4, r6, 8 | r4 = r6 << 8;
0x00049e9e movs r0, r0 |
0x00049ea0 vhadd.u8 d16, d10, d9 | __asm ("vhadd.u8 d16, d10, d9");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4a160 */
| #include <stdint.h>
|
; (fcn) fcn.0004a160 () | void fcn_0004a160 (arithmetic arg1) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_24h;
| int16_t var_28h;
| r0 = arg1;
0x0004a160 bmi 0x8771a0 |
0x0004a164 ldr r3, [pc, 0x80] |
0x0004a166 add r2, pc | r2 += pc;
0x0004a168 push {r4, r5, r6, r7, lr} |
0x0004a16a sub sp, 0x10 |
0x0004a16c ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0004a16e ldr r6, [sp, 0x24] | r6 = var_24h;
0x0004a170 ldr r3, [r3] | r3 = *(0x4a1e8);
0x0004a172 str r3, [sp, 0xc] | var_ch = r3;
0x0004a174 mov.w r3, 0 | r3 = 0;
| if (r0 == 0) {
0x0004a178 cbz r0, 0x4a190 | goto label_0;
| }
0x0004a17a movs r3, 0 | r3 = 0;
0x0004a17c mov r4, r0 | r4 = r0;
0x0004a17e mov r2, r3 | r2 = r3;
0x0004a180 str r3, [sp] | *(sp) = r3;
0x0004a182 movs r1, 0xb8 | r1 = 0xb8;
0x0004a184 add r7, sp, 0x28 | r7 += var_28h;
0x0004a186 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004a18a ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0004a18c str r7, [sp, 8] | var_8h = r7;
0x0004a18e cbnz r3, 0x4a1ae |
| while (1) {
| label_0:
0x0004a190 ldr r2, [pc, 0x58] |
0x0004a192 ldr r3, [pc, 0x54] | r3 = *(0x4a1ea);
0x0004a194 add r2, pc | r2 = 0x94384;
0x0004a196 ldr r3, [r2, r3] | r3 = *(0x94384);
0x0004a198 ldr r2, [r3] | r2 = *(0x94384);
0x0004a19a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004a19c eors r2, r3 | r2 ^= r3;
0x0004a19e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004a1a2 bne 0x4a1e0 | goto label_1;
| }
0x0004a1a4 add sp, 0x10 |
0x0004a1a6 pop.w {r4, r5, r6, r7, lr} |
0x0004a1aa add sp, 0xc |
0x0004a1ac bx lr | return;
0x0004a1ae add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004a1b2 ldr r5, [r4, 0x68] | r5 = *((r4 + 0x68));
0x0004a1b4 ldr r0, [r4] | r0 = *(r4);
0x0004a1b6 lsls r3, r3, 3 | r3 <<= 3;
0x0004a1b8 subs r3, 0x18 | r3 -= 0x18;
0x0004a1ba add r5, r3 | r5 += r3;
0x0004a1bc ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
| if (r1 != 0) {
0x0004a1be cbz r1, 0x4a1d4 |
0x0004a1c0 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0004a1c4 ldrd r5, r3, [r4, 0x68] | __asm ("ldrd r5, r3, [r4, 0x68]");
0x0004a1c8 ldr r0, [r4] | r0 = *(r4);
0x0004a1ca add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004a1ce lsls r3, r3, 3 | r3 <<= 3;
0x0004a1d0 subs r3, 0x18 | r3 -= 0x18;
0x0004a1d2 add r5, r3 | r5 += r3;
| }
0x0004a1d4 mov r2, r7 | r2 = r7;
0x0004a1d6 mov r1, r6 | r1 = r6;
0x0004a1d8 bl 0x37ed4 | fcn_00037ed4 (r0, r1, r2);
0x0004a1dc str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x0004a1de b 0x4a190 |
| }
| label_1:
0x0004a1e0 blx 0x6430 | fcn_00006430 ();
0x0004a1e4 ldc2 p0, c0, [r2], -0x24 | __asm ("ldc2 p0, c0, [r2], -0x24");
0x0004a1e8 lsls r4, r6, 8 | r4 = r6 << 8;
0x0004a1ea movs r0, r0 |
0x0004a1ec invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4a370 */
| #include <stdint.h>
|
; (fcn) fcn.0004a370 () | void fcn_0004a370 (int16_t arg_70h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| arithmetic x;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004a370 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0004a374 mov r7, r2 | r7 = r2;
0x0004a376 ldr r2, [pc, 0x358] |
0x0004a378 mov r8, r3 | r8 = r3;
0x0004a37a sub sp, 0x4c |
0x0004a37c mov r6, r0 | r6 = r0;
0x0004a37e ldr r3, [pc, 0x354] | r3 = *(0x4a6d6);
0x0004a380 mov r5, r1 | r5 = r1;
0x0004a382 add r2, pc | r2 = 0x94a58;
0x0004a384 ldr.w sb, [sp, 0x70] | sb = *(arg_70h);
0x0004a388 ldrd sl, fp, [r1, 0x2c] | __asm ("ldrd sl, fp, [r1, 0x2c]");
0x0004a38c ldr r3, [r2, r3] |
0x0004a38e movs r2, 0 | r2 = 0;
0x0004a390 ldr r3, [r3] | r3 = *(0x94a58);
0x0004a392 str r3, [sp, 0x44] | var_44h = r3;
0x0004a394 mov.w r3, 0 | r3 = 0;
0x0004a398 ldr.w r3, [r0, 0x190] | r3 = *((r0 + 0x190));
0x0004a39c str r2, [sp, 0x30] | var_30h = r2;
| if (r3 != 0) {
0x0004a39e cbnz r3, 0x4a3a6 | goto label_9;
| }
0x0004a3a0 b 0x4a3de | goto label_10;
| do {
0x0004a3a2 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| if (r3 == 0) {
0x0004a3a4 cbz r3, 0x4a3de | goto label_10;
| }
| label_9:
0x0004a3a6 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0004a3a8 cmp r2, r5 |
0x0004a3aa bne 0x4a3a2 |
| } while (r2 != r5);
0x0004a3ac ldr r1, [pc, 0x328] | r1 = *(0x4a6d8);
| label_10:
0x0004a3de ldr r1, [r5] | r1 = *(r5);
0x0004a3e0 mov r0, r6 | r0 = r6;
0x0004a3e2 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x0004a3e6 str r0, [sp, 0xc] | var_ch = r0;
0x0004a3e8 cmp r0, 0 |
| if (r0 == 0) {
0x0004a3ea beq.w 0x4a672 | goto label_11;
| }
0x0004a3ee movs r0, 0x1c | r0 = 0x1c;
0x0004a3f0 movs r1, 0 | r1 = 0;
0x0004a3f2 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0004a3f6 mov r4, r0 | r4 = r0;
0x0004a3f8 cmp r0, 0 |
| if (r0 == 0) {
0x0004a3fa beq.w 0x4a658 | goto label_12;
| }
0x0004a3fe movs r3, 0 | r3 = 0;
0x0004a400 strd r6, r7, [r0] | __asm ("strd r6, r7, [r0]");
0x0004a404 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x0004a406 add.w ip, r4, 8 |
0x0004a40a str r3, [r0, 8] | *((r0 + 8)) = r3;
0x0004a40c str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0004a40e str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x0004a410 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x0004a412 movs r3, 1 | r3 = 1;
0x0004a414 strb r3, [r0, 0x11] | *((r0 + 0x11)) = r3;
0x0004a416 ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x0004a418 cmp r0, 0 |
| if (r0 == 0) {
0x0004a41a beq.w 0x4a6c4 | goto label_13;
| }
0x0004a41e ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0004a420 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0004a422 cmp r0, r3 |
| if (r0 == r3) {
0x0004a424 beq 0x4a436 | goto label_8;
| }
0x0004a426 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
| do {
0x0004a42a mov r2, r3 | r2 = r3;
0x0004a42c adds r3, 0x10 | r3 += 0x10;
0x0004a42e ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x0004a432 cmp r0, r1 |
0x0004a434 bne 0x4a42a |
| } while (r0 != r1);
| label_8:
0x0004a436 ldr r0, [r2] | r0 = *(r2);
0x0004a438 mov r3, fp | r3 = fp;
0x0004a43a ldr r1, [r5, 0x30] | r1 = *((r5 + 0x30));
0x0004a43c mov r2, sl | r2 = sl;
0x0004a43e str r4, [sp, 0x34] | var_34h = r4;
0x0004a440 str r0, [r1, 4] | *((r1 + 4)) = r0;
0x0004a442 movs r0, 0 | r0 = 0;
0x0004a444 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0004a448 ldr.w r1, [r6, 0x190] | r1 = *((r6 + 0x190));
0x0004a44c str r0, [sp, 0x40] | x = r0;
0x0004a44e mov r0, r6 | r0 = r6;
0x0004a450 str r5, [sp, 0x38] | var_38h = r5;
0x0004a452 str r1, [sp, 0x3c] | var_3ch = r1;
0x0004a454 add r1, sp, 0x34 | r1 += var_34h;
0x0004a456 str.w r1, [r6, 0x190] | __asm ("str.w r1, [r6, 0x190]");
0x0004a45a add r1, sp, 0x30 | r1 += var_30h;
0x0004a45c str r1, [sp, 4] | var_4h = r1;
0x0004a45e ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0004a460 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0004a462 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0004a464 cmp r0, 7 |
0x0004a466 mov r8, r0 | r8 = r0;
0x0004a468 str.w r3, [r6, 0x190] | __asm ("str.w r3, [r6, 0x190]");
| if (r0 == 7) {
0x0004a46c beq.w 0x4a588 | goto label_14;
| }
0x0004a470 cmp r0, 0 |
| if (r0 != 0) {
0x0004a472 bne.w 0x4a590 | goto label_6;
| }
0x0004a476 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0004a478 cmp r3, 0 |
| if (r3 == 0) {
0x0004a47a beq.w 0x4a5b2 | goto label_5;
| }
0x0004a47e str r0, [r3] | *(r3) = r0;
0x0004a480 str r0, [r3, 4] | *((r3 + 4)) = r0;
0x0004a482 str r0, [r3, 8] | *((r3 + 8)) = r0;
0x0004a484 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x0004a486 ldr r0, [sp, 0x40] | r0 = x;
0x0004a488 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0004a48a ldr r1, [r7] | r1 = *(r7);
0x0004a48c adds r3, 1 | r3++;
0x0004a48e str r1, [r2] | *(r2) = r1;
0x0004a490 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0004a492 movs r3, 1 | r3 = 1;
0x0004a494 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0004a496 cmp r0, 0 |
| if (r0 == 0) {
0x0004a498 beq.w 0x4a6a2 | goto label_15;
| }
0x0004a49c ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0004a4a0 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0004a4a2 cmp r1, 0 |
0x0004a4a4 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0004a4a6 str r4, [r5, 0x34] | *((r5 + 0x34)) = r4;
| if (r1 <= 0) {
0x0004a4a8 ble.w 0x4a5b2 | goto label_5;
| }
0x0004a4ac ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0004a4ae mov fp, r8 |
0x0004a4b0 ldr r4, [pc, 0x22c] |
0x0004a4b2 mov sl, r8 | sl = r8;
0x0004a4b4 ldr r7, [pc, 0x22c] |
0x0004a4b6 str r3, [sp, 0x14] | var_14h = r3;
0x0004a4b8 ldr r3, [pc, 0x22c] |
0x0004a4ba add r4, pc | r4 = 0x94b9e;
0x0004a4bc strd r8, r6, [sp, 0x28] | __asm ("strd r8, r6, [var_28h]");
0x0004a4c0 add r7, pc | r7 = 0x94ba8;
0x0004a4c2 mov r6, r5 | r6 = r5;
0x0004a4c4 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x0004a4c8 add r3, pc | r3 = 0x94bb4;
0x0004a4ca str r1, [sp, 0x18] | var_18h = r1;
0x0004a4cc str r3, [sp, 0x24] | var_24h = r3;
0x0004a4ce b 0x4a4fa |
| while (r2 >= r2) {
0x0004a4d0 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0004a4d2 cmp r3, 0xf |
| if (r3 >= 0xf) {
0x0004a4d4 bls 0x4a4e2 |
0x0004a4d6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004a4d8 lsrs r3, r3, 4 | r3 >>= 4;
0x0004a4da subs r3, 1 | r3--;
0x0004a4dc ldr.w r5, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r5 = *((r2 + offset_0));
| if (r5 != 0) {
0x0004a4e0 cbnz r5, 0x4a514 | goto label_16;
| }
| }
| label_0:
0x0004a4e2 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0004a4e4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004a4e6 orrs r3, r2 | r3 |= r2;
| label_3:
0x0004a4e8 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x0004a4ea add.w sl, sl, 1 | sl++;
0x0004a4ee ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004a4f0 add.w fp, fp, 0xc |
0x0004a4f4 cmp r3, sl |
| if (r3 <= sl) {
0x0004a4f6 ble.w 0x4a68a | goto label_17;
| }
0x0004a4fa ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004a4fc add r3, fp | r3 += fp;
0x0004a4fe ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0004a500 lsls r2, r2, 0x1d | r2 <<= 0x1d;
0x0004a502 bpl 0x4a4d0 |
| }
0x0004a504 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004a506 ldr.w r5, [r3, fp] | r5 = *((r3 + fp));
0x0004a50a mov r0, r5 | r0 = r5;
0x0004a50c blx 0x65dc | r0 = strcmp (r0, r1);
0x0004a510 adds r3, r0, 1 | r3 = r0 + 1;
0x0004a512 add r5, r3 | r5 += r3;
| label_16:
0x0004a514 mov r0, r5 | r0 = r5;
0x0004a516 blx 0x65dc | r0 = strcmp (r0, r1);
0x0004a51a bics sb, r0, 0xc0000000 | __asm ("bics sb, r0, 0xc0000000");
| if (r3 == r0) {
0x0004a51e beq 0x4a4e2 | goto label_0;
| }
0x0004a520 mov.w r8, 0 | r8 = 0;
0x0004a524 mov r3, r6 | r3 = r6;
0x0004a526 mov lr, r5 | lr = r5;
0x0004a528 mov r6, r8 | r6 = r8;
0x0004a52a mov r8, r3 | r8 = r3;
0x0004a52c str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
0x0004a530 str r5, [sp, 0x20] | var_20h = r5;
| label_1:
0x0004a532 ldr r2, [pc, 0x1b8] |
0x0004a534 mov r1, lr | r1 = lr;
0x0004a536 movs r0, 5 | r0 = 5;
0x0004a538 add r2, pc | r2 = 0x94c2a;
0x0004a53a b 0x4a554 |
| while (r3 != 0) {
0x0004a53c add r3, r4 | r3 += r4;
0x0004a53e adds r1, 1 | r1++;
0x0004a540 ldrb.w ip, [r3, 0x140] | ip = *((r3 + 0x140));
0x0004a544 ldrb r3, [r5] | r3 = *(r5);
0x0004a546 add r3, r4 | r3 += r4;
0x0004a548 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004a54c cmp ip, r3 |
| if (ip != r3) {
0x0004a54e bne 0x4a560 | goto label_18;
| }
0x0004a550 subs r0, 1 | r0--;
| if (r0 <= 1) {
0x0004a552 blo 0x4a5bc | goto label_19;
| }
0x0004a554 mov fp, r2 |
0x0004a556 ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x0004a55a mov r5, r1 | r5 = r1;
0x0004a55c cmp r3, 0 |
0x0004a55e bne 0x4a53c |
| }
| label_18:
0x0004a560 ldrb.w r2, [fp] | r2 = *(fp);
0x0004a564 ldrb r3, [r5] | r3 = *(r5);
0x0004a566 add r2, r7 | r2 += r7;
0x0004a568 add r3, r7 | r3 += r7;
0x0004a56a ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x0004a56e ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004a572 cmp r2, r3 |
| if (r2 == r3) {
0x0004a574 beq 0x4a5bc | goto label_19;
| }
| label_2:
0x0004a576 adds r6, 1 | r6++;
0x0004a578 add.w lr, lr, 1 | lr++;
0x0004a57c cmp r6, sb |
| if (r6 != sb) {
0x0004a57e bne 0x4a532 | goto label_1;
| }
0x0004a580 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x0004a584 mov r6, r8 | r6 = r8;
0x0004a586 b 0x4a4e2 | goto label_0;
| label_14:
0x0004a588 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x0004a58c cmp r3, 0 |
| if (r3 == 0) {
0x0004a58e beq 0x4a690 | goto label_20;
| }
| label_6:
0x0004a590 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0004a592 cmp r2, 0 |
| if (r2 == 0) {
0x0004a594 beq 0x4a678 | goto label_21;
| }
0x0004a596 ldr r1, [pc, 0x158] |
0x0004a598 mov r0, r6 | r0 = r6;
0x0004a59a add r1, pc | r1 = 0x94c90;
0x0004a59c bl 0x4a320 | fcn_0004a320 (r0);
0x0004a5a0 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0004a5a4 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0004a5a6 bl 0x26dbc | fcn_00026dbc (r0);
| label_4:
0x0004a5aa mov r1, r4 | r1 = r4;
0x0004a5ac mov r0, r6 | r0 = r6;
0x0004a5ae bl 0x2d144 | fcn_0002d144 (r0, r1);
| label_5:
0x0004a5b2 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004a5b4 mov r0, r6 | r0 = r6;
0x0004a5b6 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0004a5ba b 0x4a3c0 | void (*0x4a3c0)() ();
| if (r6 == 0) {
| label_19:
0x0004a5bc cbz r6, 0x4a5c6 | goto label_22;
| }
0x0004a5be ldrb r3, [lr, -0x1] | r3 = *((lr - 0x1));
0x0004a5c2 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x0004a5c4 bne 0x4a576 | goto label_2;
| }
| label_22:
0x0004a5c6 ldrb.w r3, [lr, 6] | r3 = *((lr + 6));
0x0004a5ca tst.w r3, 0xdf |
| if ((r3 & 0xdf) != 0) {
0x0004a5ce bne 0x4a576 | goto label_2;
| }
0x0004a5d0 mov r3, r8 | r3 = r8;
0x0004a5d2 mov r8, r6 | r8 = r6;
0x0004a5d4 cmp sb, r8 |
0x0004a5d6 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x0004a5da ldr r5, [sp, 0x20] | r5 = var_20h;
0x0004a5dc mov r6, r3 | r6 = r3;
| if (sb <= r8) {
0x0004a5de ble 0x4a4e2 | goto label_0;
| }
0x0004a5e0 add.w r0, r5, r8 | r0 = r5 + r8;
0x0004a5e4 ldrb r3, [r0, 6] | r3 = *((r0 + 6));
0x0004a5e6 cmp r3, 0 |
0x0004a5e8 ite eq |
| if (r3 != 0) {
0x0004a5ea moveq ip, 6 |
| }
| if (r3 != 0) {
0x0004a5ee mov.w ip, 7 |
| }
0x0004a5f2 add.w r3, ip, r8 | r3 = ip + r8;
0x0004a5f6 cmp sb, r3 |
0x0004a5f8 itttt ge |
| if (sb < r3) {
0x0004a5fa addge r3, r3, -1 | r3 += -1;
| }
| if (sb < r3) {
0x0004a5fe addge r2, r8, -1 | r2 = r8 + -1;
| }
| if (sb >= r3) {
0x0004a602 adds r1, r5, r3 | r1 = r5 + r3;
| }
| if (sb >= r3) {
0x0004a604 adds r2, r2, r5 | r2 += r5;
| }
| if (r2 < r2) {
0x0004a606 blt 0x4a61c | goto label_23;
| }
| do {
0x0004a608 mov r3, r2 | r3 = r2;
0x0004a60a ldrb lr, [r1, 1]! |
0x0004a60e adds r3, 2 | r3 += 2;
0x0004a610 subs r3, r3, r5 | r3 -= r5;
0x0004a612 add r3, ip | r3 += ip;
0x0004a614 strb lr, [r2, 1]! |
0x0004a618 cmp sb, r3 |
0x0004a61a bge 0x4a608 |
| } while (sb >= r3);
| label_23:
0x0004a61c ldrb.w r3, [r5, r8] | r3 = *((r5 + r8));
0x0004a620 cmp.w r8, 0 |
0x0004a624 clz r3, r3 | r3 &= r3;
0x0004a628 lsr.w r3, r3, 5 | r3 >>= 5;
0x0004a62c it eq |
| if (r8 != 0) {
0x0004a62e moveq r3, 0 | r3 = 0;
| }
0x0004a630 cmp r3, 0 |
| if (r3 != 0) {
0x0004a632 bne 0x4a6bc | goto label_24;
| }
| label_7:
0x0004a634 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0004a636 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0004a638 add.w r1, r2, fp | r1 = r2 + fp;
0x0004a63c str r2, [sp, 0x14] | var_14h = r2;
0x0004a63e ldrh r2, [r1, 0xa] | r2 = *((r1 + 0xa));
0x0004a640 orr r3, r3, 2 | r3 |= 2;
0x0004a644 orr r2, r2, 2 | r2 |= 2;
0x0004a648 strh r2, [r1, 0xa] | *((r1 + 0xa)) = r2;
0x0004a64a ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x0004a64e str r2, [sp, 0x18] | var_18h = r2;
0x0004a650 mov.w r2, 0x400 | r2 = 0x400;
0x0004a654 str r2, [sp, 0x1c] | var_1ch = r2;
0x0004a656 b 0x4a4e8 | goto label_3;
| label_12:
0x0004a658 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
| if (r3 == 0) {
0x0004a65c cbnz r3, 0x4a66a |
0x0004a65e ldrb.w r3, [r6, 0x58] | r3 = *((r6 + 0x58));
| if (r3 != 0) {
0x0004a662 cbnz r3, 0x4a66a | goto label_25;
| }
0x0004a664 mov r0, r6 | r0 = r6;
0x0004a666 bl 0x38024 | fcn_00038024 (r0);
| }
| label_25:
0x0004a66a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004a66c mov r0, r6 | r0 = r6;
0x0004a66e bl 0x2d144 | fcn_0002d144 (r0, r1);
| label_11:
0x0004a672 mov.w r8, 7 | r8 = 7;
0x0004a676 b 0x4a3c0 | void (*0x4a3c0)() ();
| label_21:
0x0004a678 ldr r1, [pc, 0x78] |
0x0004a67a mov r0, r6 | r0 = r6;
0x0004a67c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004a67e add r1, pc | r1 = 0x94d76;
0x0004a680 bl 0x4a320 | fcn_0004a320 (r0);
0x0004a684 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0004a688 b 0x4a5aa | goto label_4;
| label_17:
0x0004a68a ldrd r8, r6, [sp, 0x28] | __asm ("ldrd r8, r6, [var_28h]");
0x0004a68e b 0x4a5b2 | goto label_5;
| label_20:
0x0004a690 ldrb.w r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x0004a694 cmp r3, 0 |
| if (r3 != 0) {
0x0004a696 bne.w 0x4a590 | goto label_6;
| }
0x0004a69a mov r0, r6 | r0 = r6;
0x0004a69c bl 0x38024 | fcn_00038024 (r0);
0x0004a6a0 b 0x4a590 | goto label_6;
| label_15:
0x0004a6a2 ldr r1, [pc, 0x54] |
0x0004a6a4 mov r0, r6 | r0 = r6;
0x0004a6a6 ldr r2, [r5] | r2 = *(r5);
0x0004a6a8 mov r8, r3 | r8 = r3;
0x0004a6aa add r1, pc | r1 = 0x94da8;
0x0004a6ac bl 0x4a320 | fcn_0004a320 (r0);
0x0004a6b0 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0004a6b4 mov r0, r4 | r0 = r4;
0x0004a6b6 bl 0x2d7b0 | fcn_0002d7b0 (r0);
0x0004a6ba b 0x4a5b2 | goto label_5;
| label_24:
0x0004a6bc movs r3, 0 | r3 = 0;
0x0004a6be strb r3, [r0, -0x1] | *((r0 - 0x1)) = r3;
0x0004a6c2 b 0x4a634 | goto label_7;
| label_13:
0x0004a6c4 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0004a6c6 sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x0004a6ca b 0x4a436 | goto label_8;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4c3c0 */
| #include <stdint.h>
|
; (fcn) fcn.0004c3c0 () | void fcn_0004c3c0 (int16_t arg_8h, int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x0004c3c0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004c3c4 mov r7, r0 | r7 = r0;
0x0004c3c6 ldr r5, [r0, 0x10] | r5 = *(arg_8hx10);
0x0004c3c8 sub sp, 0xc |
0x0004c3ca ldr.w sb, [r0, 4] | sb = *((r0 + 4));
0x0004c3ce ldrb r3, [r0, 0x19] | r3 = *(arg_8hx19);
| label_4:
0x0004c3d0 add.w r2, r7, r3, lsl 2 | r2 = r7 + (r3 << 2);
0x0004c3d4 adds r3, 0x23 | r3 += 0x23;
0x0004c3d6 ldrsh.w r8, [r7, r3, lsl 1] | offset_0 = r3 << 1;
| r8 = *((r7 + offset_0));
0x0004c3da ldr r6, [r2, 0x18] | r6 = *((r2 + 0x18));
| label_3:
0x0004c3dc ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x0004c3e0 ldr.w r4, [sb, 0x18] | r4 = *((sb + 0x18));
0x0004c3e4 cmp r5, r2 |
| if (r5 >= r2) {
0x0004c3e6 bge 0x4c4ae | goto label_14;
| }
0x0004c3e8 adds r5, 1 | r5++;
0x0004c3ea add.w r3, r5, r5, lsl 1 | r3 = r5 + (r5 << 1);
0x0004c3ee add.w r4, r4, r3, lsl 4 | r4 += (r3 << 4);
0x0004c3f2 b 0x4c3fe |
| while (r3 != r6) {
| label_0:
0x0004c3f4 cmp r2, r5 |
0x0004c3f6 add.w r4, r4, 0x30 | r4 += 0x30;
| if (r2 <= r5) {
0x0004c3fa ble 0x4c4ae | goto label_14;
| }
| label_2:
0x0004c3fc adds r5, 1 | r5++;
0x0004c3fe ldr r3, [r4, -0x1c] | r3 = *((r4 - 0x1c));
0x0004c402 cmp r3, r6 |
0x0004c404 bne 0x4c3f4 |
| }
0x0004c406 ldr r3, [r4, -0x18] | r3 = *((r4 - 0x18));
0x0004c40a cmp r3, r8 |
| if (r3 != r8) {
0x0004c40c bne 0x4c3f4 | goto label_0;
| }
0x0004c40e cmn.w r8, 2 |
| if (r8 == 2) {
0x0004c412 beq 0x4c4d0 | goto label_15;
| }
| label_1:
0x0004c414 ldrb r3, [r7, 0x19] | r3 = *((r7 + 0x19));
0x0004c416 cmp r3, 1 |
| if (r3 >= 1) {
0x0004c418 bls 0x4c424 |
0x0004c41a ldr r3, [r4, -0x30] | r3 = *((r4 - 0x30));
0x0004c41e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004c420 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x0004c422 bmi 0x4c4a4 | goto label_9;
| }
| }
0x0004c424 ldrh r1, [r4, -0x24] | r1 = *((r4 - 0x24));
0x0004c428 lsls r2, r1, 0x14 | r2 = r1 << 0x14;
| if (r2 < r1) {
0x0004c42a bpl 0x4c432 |
0x0004c42c ldrb r0, [r7, 0x1a] | r0 = *((r7 + 0x1a));
0x0004c42e cmp r0, 0xa |
| if (r0 < 0xa) {
0x0004c430 bls 0x4c4fc | goto label_16;
| }
| }
| label_6:
0x0004c432 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0004c434 tst r1, r3 |
| if ((r1 & r3) == 0) {
0x0004c436 beq 0x4c4a4 | goto label_9;
| }
0x0004c438 ldr r3, [r7, 8] | r3 = *((r7 + 8));
| if (r3 != 0) {
0x0004c43a cbz r3, 0x4c442 |
0x0004c43c lsls r0, r1, 0x17 | r0 = r1 << 0x17;
| if (r0 >= r1) {
0x0004c43e bpl.w 0x4c56e | goto label_17;
| }
| }
| label_11:
0x0004c442 tst.w r1, 0x82 |
| if ((r1 & 0x82) != 0) {
0x0004c446 beq 0x4c46a |
0x0004c448 ldr r3, [r4, -0x30] | r3 = *((r4 - 0x30));
0x0004c44c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
| if (r3 == 0) {
0x0004c44e cbz r3, 0x4c46a | goto label_18;
| }
0x0004c450 ldrb r2, [r3] | r2 = *(r3);
0x0004c452 cmp r2, 0xa7 |
| if (r2 != 0xa7) {
0x0004c454 bne 0x4c46a | goto label_18;
| }
0x0004c456 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0004c458 ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x0004c45a cmp r1, r2 |
| if (r1 != r2) {
0x0004c45c bne 0x4c46a | goto label_18;
| }
0x0004c45e ldrsh.w r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x0004c462 ldrsh.w r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0004c466 cmp r2, r3 |
| if (r2 == r3) {
0x0004c468 beq 0x4c4a4 | goto label_9;
| }
| }
| label_18:
0x0004c46a sub.w r0, r4, 0x30 | r0 = r4 - 0x30;
0x0004c46e str.w sb, [r7, 4] | __asm ("str.w sb, [r7, 4]");
0x0004c472 str r5, [r7, 0x10] | *((r7 + 0x10)) = r5;
| label_13:
0x0004c474 add sp, 0xc |
0x0004c476 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| do {
0x0004c47a lsls r0, r0, 0xc | r0 <<= 0xc;
0x0004c47c itet mi |
| if (r0 >= r0) {
0x0004c47e ldrmi r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r0 < r0) {
0x0004c480 ldrpl r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r0 >= r0) {
0x0004c482 ldrmi r3, [r3, 8] | r3 = *((r3 + 8));
| }
0x0004c484 cmp r3, 0 |
| if (r3 == 0) {
0x0004c486 beq.w 0x4c5d6 | goto label_19;
| }
| label_5:
0x0004c48a ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0004c48c ands ip, r0, 0x82000 |
0x0004c48e cmp r4, 2 |
0x0004c490 bne 0x4c47a |
| } while (r4 != 2);
0x0004c492 cmp r1, 0 |
| if (r1 == 0) {
0x0004c494 beq 0x4c3f4 | goto label_0;
| }
0x0004c496 mov r2, r3 | r2 = r3;
0x0004c498 mov r0, ip | r0 = ip;
0x0004c49a mov r3, r6 | r3 = r6;
0x0004c49c bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
0x0004c4a0 cmp r0, 0 |
| if (r0 == 0) {
0x0004c4a2 beq 0x4c414 | goto label_1;
| }
| label_9:
0x0004c4a4 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x0004c4a8 adds r4, 0x30 | r4 += 0x30;
0x0004c4aa cmp r2, r5 |
| if (r2 > r5) {
0x0004c4ac bgt 0x4c3fc | goto label_2;
| }
| label_14:
0x0004c4ae ldr.w sb, [sb, 4] | sb = *((sb + 4));
0x0004c4b2 movs r5, 0 | r5 = 0;
0x0004c4b4 cmp.w sb, 0 |
| if (sb != 0) {
0x0004c4b8 bne 0x4c3dc | goto label_3;
| }
0x0004c4ba ldrb r3, [r7, 0x19] | r3 = *((r7 + 0x19));
0x0004c4bc ldrb r2, [r7, 0x1a] | r2 = *((r7 + 0x1a));
0x0004c4be cmp r2, r3 |
| if (r2 < r3) {
0x0004c4c0 bls.w 0x4c610 | goto label_20;
| }
0x0004c4c4 adds r3, 1 | r3++;
0x0004c4c6 ldr.w sb, [r7] | sb = *(r7);
0x0004c4ca uxtb r3, r3 | r3 = (int8_t) r3;
0x0004c4cc strb r3, [r7, 0x19] | *((r7 + 0x19)) = r3;
0x0004c4ce b 0x4c3d0 | goto label_4;
| label_15:
0x0004c4d0 ldr r3, [r4, -0x30] | r3 = *((r4 - 0x30));
0x0004c4d4 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0004c4d6 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
| if (r1 != 0) {
0x0004c4d8 cbnz r1, 0x4c4e8 | goto label_21;
| }
0x0004c4da b 0x4c4f6 | goto label_22;
| do {
0x0004c4dc lsls r0, r0, 0xc | r0 <<= 0xc;
0x0004c4de itet mi |
| if (r0 >= r0) {
0x0004c4e0 ldrmi r1, [r1, 0x14] | r1 = *((r1 + 0x14));
| }
| if (r0 < r0) {
0x0004c4e2 ldrpl r1, [r1, 0xc] | r1 = *((r1 + 0xc));
| }
| if (r0 >= r0) {
0x0004c4e4 ldrmi r1, [r1, 8] | r1 = *((r1 + 8));
| }
| if (r1 == 0) {
0x0004c4e6 cbz r1, 0x4c4f6 | goto label_22;
| }
| label_21:
0x0004c4e8 ldr r0, [r1, 4] | r0 = *((r1 + 4));
0x0004c4ea tst.w r0, 0x82000 |
0x0004c4ee bne 0x4c4dc |
| } while ((r0 & 0x82000) != 0);
0x0004c4f0 cmp r3, 0 |
| if (r3 != 0) {
0x0004c4f2 bne 0x4c48a | goto label_5;
| }
0x0004c4f4 b 0x4c3f4 | goto label_0;
| label_22:
0x0004c4f6 cmp r3, 0 |
| if (r3 != 0) {
0x0004c4f8 bne 0x4c48a | goto label_5;
| }
0x0004c4fa b 0x4c414 | goto label_1;
| label_16:
0x0004c4fc ldr r3, [r4, -0x30] | r3 = *((r4 - 0x30));
0x0004c500 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
| if (r2 != 0) {
0x0004c502 cbnz r2, 0x4c514 | goto label_23;
| }
0x0004c504 b 0x4c432 | goto label_6;
| label_7:
0x0004c506 lsls r3, r3, 0xc | r3 <<= 0xc;
0x0004c508 itet mi |
| if (r3 >= r3) {
0x0004c50a ldrmi r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 < r3) {
0x0004c50c ldrpl r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| }
| if (r3 >= r3) {
0x0004c50e ldrmi r2, [r3, 8] | r2 = *((r3 + 8));
| }
0x0004c510 cmp r2, 0 |
| if (r2 == 0) {
0x0004c512 beq 0x4c432 | goto label_6;
| }
| label_23:
0x0004c514 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0004c516 tst.w r3, 0x82000 |
| if ((r3 & 0x82000) != 0) {
0x0004c51a bne 0x4c506 | goto label_7;
| }
0x0004c51c ldrb.w ip, [r2] | ip = *(r2);
0x0004c520 cmp.w ip, 0xa7 |
| if (ip != 0xa7) {
0x0004c524 bne 0x4c432 | goto label_6;
| }
0x0004c526 ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 != r3) {
0x0004c52a bne 0x4c432 | goto label_6;
| }
0x0004c52c cmp r0, 0 |
| if (r0 == 0) {
0x0004c52e beq 0x4c60a | goto label_24;
| }
0x0004c530 mov sl, r3 | sl = r3;
0x0004c532 add.w r3, r7, 0x48 | r3 = r7 + 0x48;
0x0004c536 strd r1, r3, [sp] | __asm ("strd r1, r3, [sp]");
0x0004c53a add.w ip, r7, 0x18 |
0x0004c53e ldr.w lr, [r2, 0x1c] |
0x0004c542 mov r3, sl | r3 = sl;
0x0004c544 ldr.w fp, [sp, 4] | fp = var_4h;
0x0004c548 b 0x4c550 |
| while (r1 != lr) {
| label_8:
0x0004c54a adds r3, 1 | r3++;
0x0004c54c cmp r3, r0 |
| if (r3 == r0) {
0x0004c54e beq 0x4c5e8 | goto label_25;
| }
0x0004c550 ldr r1, [ip, 4]! | r1 = *((ip += 4));
0x0004c554 cmp r1, lr |
0x0004c556 bne 0x4c54a |
| }
0x0004c558 ldrsh.w sl, [fp, r3, lsl 1] | offset_1 = r3 << 1;
| sl = *((fp + offset_1));
0x0004c55c ldrsh.w r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x0004c560 cmp sl, r1 |
| if (sl != r1) {
0x0004c562 bne 0x4c54a | goto label_8;
| }
0x0004c564 cmp r0, r3 |
0x0004c566 ldr r1, [sp] | r1 = *(sp);
| if (r0 != r3) {
0x0004c568 bne.w 0x4c432 | goto label_6;
| }
0x0004c56c b 0x4c5ea | goto label_26;
| label_17:
0x0004c56e ldr sl, [r4, -0x30] | sl = *((r4 - 0x30));
0x0004c572 ldr.w r3, [sb] | r3 = *(sb);
0x0004c576 ldrb r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0004c578 mov r0, sl | r0 = sl;
0x0004c57a ldr.w fp, [r3] | fp = *(r3);
0x0004c57e bl 0x2f170 | r0 = fcn_0002f170 (r0, r1);
0x0004c582 cmp r0, 0 |
| if (r0 == 0) {
0x0004c584 beq 0x4c4a4 | goto label_9;
| }
0x0004c586 ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0004c58a mov r0, fp | r0 = fp;
0x0004c58c ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0004c590 lsls r2, r2, 0x15 | r2 <<= 0x15;
0x0004c592 ittee mi |
| if (r2 >= r2) {
0x0004c594 ldrmi r1, [sl, 0x10] | r1 = *((sl + 0x10));
| }
| if (r2 < r2) {
0x0004c598 movpl r2, r3 | r2 = r3;
| }
| if (r2 < r2) {
0x0004c59a ldrpl r2, [sl, 0x10] | r2 = *((sl + 0x10));
| }
| if (r2 >= r2) {
0x0004c59e mov r1, r3 | r1 = r3;
| }
0x0004c5a0 bl 0x46074 | r0 = fcn_00046074 (r0, r1, r2);
| if (r0 == 0) {
0x0004c5a4 cbz r0, 0x4c602 | goto label_27;
| }
| label_12:
0x0004c5a6 ldr r0, [r0] | r0 = *(r0);
0x0004c5a8 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x0004c5aa ldr.w ip, [pc, 0x68] |
0x0004c5ae subs r0, 1 | r0--;
0x0004c5b0 subs r1, 1 | r1--;
0x0004c5b2 add ip, pc | ip = 0x98bcc;
| do {
| label_10:
0x0004c5b4 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0004c5b8 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004c5bc add.w sl, ip, r3 | sl = ip + r3;
0x0004c5c0 cmp r3, r2 |
0x0004c5c2 add.w lr, ip, r2 | lr = ip + r2;
| if (r3 == r2) {
0x0004c5c6 beq 0x4c5de | goto label_28;
| }
0x0004c5c8 ldrb.w r2, [sl, 0x140] | r2 = *((sl + 0x140));
0x0004c5cc ldrb.w r3, [lr, 0x140] | r3 = *((lr + 0x140));
0x0004c5d0 cmp r2, r3 |
0x0004c5d2 beq 0x4c5b4 |
| } while (r2 == r3);
0x0004c5d4 b 0x4c4a4 | goto label_9;
| label_19:
0x0004c5d6 cmp r1, 0 |
| if (r1 != 0) {
0x0004c5d8 bne.w 0x4c3f4 | goto label_0;
| }
0x0004c5da add r7, sp, 0x30 | r7 = sp + 0x30;
0x0004c5dc b 0x4c414 | goto label_1;
| label_28:
0x0004c5de cmp r3, 0 |
| if (r3 != 0) {
0x0004c5e0 bne 0x4c5b4 | goto label_10;
| }
0x0004c5e2 ldrh r1, [r4, -0x24] | r1 = *((r4 - 0x24));
0x0004c5e6 b 0x4c442 | goto label_11;
| label_25:
0x0004c5e8 ldr r1, [sp] | r1 = *(sp);
| do {
| label_26:
0x0004c5ea ldrh r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0004c5ec add.w r3, r7, r0, lsl 2 | r3 = r7 + (r0 << 2);
0x0004c5f0 str.w lr, [r3, 0x1c] | __asm ("str.w lr, [r3, 0x1c]");
0x0004c5f4 add.w r3, r0, 0x24 | r3 = r0 + 0x24;
0x0004c5f8 adds r0, 1 | r0++;
0x0004c5fa strh.w r2, [r7, r3, lsl 1] | offset_2 = r3 << 1;
| *((r7 + offset_2)) = r2;
0x0004c5fe strb r0, [r7, 0x1a] | *((r7 + 0x1a)) = r0;
0x0004c600 b 0x4c432 | goto label_6;
| label_27:
0x0004c602 ldr.w r3, [fp] | r3 = *(fp);
0x0004c606 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0004c608 b 0x4c5a6 | goto label_12;
| label_24:
0x0004c60a ldr.w lr, [r2, 0x1c] |
0x0004c60e b 0x4c5ea |
| } while (1);
| label_20:
0x0004c610 mov r0, sb | r0 = sb;
0x0004c612 b 0x4c474 | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4c76c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0004c76c () | void fcn_0004c76c (int16_t arg_0h, int16_t arg_1h, int16_t arg_88h, int16_t arg_8ch, int16_t arg_90h, int16_t arg_94h, int16_t arg_98h, int16_t arg_9ch, int16_t arg_a0h, int16_t arg_a4h, int16_t arg_a8h, int16_t arg_b4h, int16_t arg_b8h, int16_t arg_bch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_2h;
| int16_t var_1ch_3;
| int16_t var_2ch_2;
| int16_t var_3ch_2;
| int16_t var_48h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_5ch_2;
| int16_t var_6ch_2;
| int16_t var_70h_2;
| int16_t var_74h_2;
| int16_t var_84h_3;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_84h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_70h;
| int16_t var_78h;
| int16_t var_6ch;
| int16_t var_74h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004c76c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004c770 sub sp, 0xc4 |
0x0004c772 str r2, [sp, 0x84] | var_84h_3 = r2;
0x0004c774 ldr.w r2, [pc, 0x82c] |
0x0004c778 str r3, [sp, 0x70] | var_70h_2 = r3;
0x0004c77a ldrh.w r4, [sp, 0xe8] | r4 = var_0h;
0x0004c77e ldr.w r3, [pc, 0x828] | r3 = *(0x4cfaa);
0x0004c782 add r2, pc | r2 = 0x9972a;
0x0004c784 str r0, [sp, 0x3c] | var_3ch_2 = r0;
0x0004c786 str r4, [sp, 0x58] | var_20h_2 = r4;
0x0004c788 str r1, [sp, 0x2c] | var_2ch_2 = r1;
0x0004c78a ldr r3, [r2, r3] |
0x0004c78c ldr r2, [sp, 0xec] | r2 = var_4h;
0x0004c78e ldr r3, [r3] | r3 = *(0x9972a);
0x0004c790 str r3, [sp, 0xbc] | var_84h = r3;
0x0004c792 mov.w r3, 0 | r3 = 0;
0x0004c796 ldr r3, [r0] | r3 = *(r0);
0x0004c798 str r2, [sp, 0x9c] | var_9ch = r2;
0x0004c79a ldr r2, [sp, 0xf0] | r2 = var_8h;
0x0004c79c ldr r3, [r3] | r3 = *(r3);
0x0004c79e str r2, [sp, 0x98] | var_98h = r2;
| if (r4 != 0) {
0x0004c7a0 cbz r4, 0x4c7aa |
0x0004c7a2 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0004c7a4 lsls r4, r3, 0x19 | r4 = r3 << 0x19;
| if (r4 < r3) {
0x0004c7a6 bmi.w 0x4c9de | goto label_7;
| }
| }
0x0004c7aa ldr r3, [sp, 0x2c] | r3 = var_2ch_2;
0x0004c7ac ldr r4, [r3] | r4 = *(r3);
0x0004c7ae uxth r3, r4 | r3 = (int16_t) r4;
0x0004c7b0 cmp r3, 0x3f |
| if (r3 > 0x3f) {
0x0004c7b2 bhi.w 0x4c9de | goto label_7;
| }
0x0004c7b6 mov r6, r3 | r6 = r3;
0x0004c7b8 str r3, [sp, 0x1c] | var_1ch_3 = r3;
0x0004c7ba sub.w r0, r6, 0x20 | r0 = r6 - 0x20;
0x0004c7be movs r3, 1 | r3 = 1;
0x0004c7c0 rsb.w r5, r6, 0x20 | r5 = 0x20 - r6;
0x0004c7c4 lsl.w r0, r3, r0 | r0 = r3 << r0;
0x0004c7c8 lsr.w r5, r3, r5 | r5 = r3 >> r5;
0x0004c7cc lsls r3, r6 | r3 <<= r6;
0x0004c7ce orrs r0, r5 | r0 |= r5;
0x0004c7d0 adds.w sb, r3, -1 | sb = r3 + -1;
0x0004c7d4 adc r3, r0, -1 | __asm ("adc r3, r0, -1");
0x0004c7d8 ldr r0, [sp, 0x70] | r0 = var_70h_2;
0x0004c7da movw r1, 0x803 | r1 = 0x803;
0x0004c7de movw r2, 0x183 | r2 = 0x183;
0x0004c7e2 str r3, [sp, 0x74] | var_74h_2 = r3;
0x0004c7e4 tst r0, r1 |
0x0004c7e6 it eq |
| if ((r0 & r1) != 0) {
0x0004c7e8 moveq r2, 0x182 | r2 = 0x182;
| }
0x0004c7ec orrs.w r3, sb, r3 | r3 = sb | r3;
0x0004c7f0 str r2, [sp, 0x48] | var_48h_2 = r2;
| if (r3 == sb) {
0x0004c7f2 beq.w 0x4ce8a | goto label_36;
| }
0x0004c7f6 ldr.w r3, [pc, 0x7b4] | r3 = *(0x0004cfac);
0x0004c7fa str.w sb, [sp, 0x6c] | __asm ("str.w sb, [var_6ch_2]");
0x0004c7fe str r4, [sp, 0x94] | var_94h = r4;
0x0004c800 add r3, pc | r3 += pc;
0x0004c802 str r3, [sp, 0x90] | var_90h = r3;
0x0004c804 movs r3, 0 | r3 = 0;
0x0004c806 mov r8, r3 | r8 = r3;
0x0004c808 mov sl, r3 | sl = r3;
0x0004c80a strd r3, r3, [sp, 0x7c] | __asm ("strd r3, r3, [sp, 0x7c]");
0x0004c80e mov sb, r8 | sb = r8;
0x0004c810 strd r3, r3, [sp, 0x4c] | __asm ("strd r3, r3, [sp, 0x4c]");
0x0004c814 ldr r3, [sp, 0x70] | r3 = var_70h_2;
0x0004c816 and r2, r3, 0x80 | r2 = r3 & 0x80;
0x0004c81a and r3, r3, 0x40 | r3 &= 0x40;
0x0004c81e str r2, [sp, 0x54] | var_1ch_2 = r2;
0x0004c820 str r3, [sp, 0x5c] | var_5ch_2 = r3;
0x0004c822 b 0x4c84e |
| while (r0 < r3) {
| label_3:
0x0004c824 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0004c826 add.w sb, sb, 1 | sb++;
0x0004c82a ldr r3, [sp, 0x74] | r3 = var_74h;
0x0004c82c cmp r8, r2 |
0x0004c82e sbcs.w r3, sl, r3 | __asm ("sbcs.w r3, sl, r3");
| if (r8 >= r2) {
0x0004c832 bhs.w 0x4cf86 | goto label_55;
| }
0x0004c836 ldr r3, [sp, 0x58] | r3 = *((sp + 0x58));
0x0004c838 cmp r3, sb |
| if (r3 < sb) {
0x0004c83a blt.w 0x4cf98 | goto label_56;
| }
0x0004c83e ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0004c840 ldr r2, [sp, 0x4c] | r2 = *((sp + 0x4c));
0x0004c842 orrs r2, r3 | r2 |= r3;
0x0004c844 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x0004c846 str r2, [sp, 0x4c] | *((sp + 0x4c)) = r2;
0x0004c848 ldr r2, [sp, 0x50] | r2 = var_78h;
0x0004c84a orrs r2, r3 | r2 |= r3;
0x0004c84c str r2, [sp, 0x50] | var_78h = r2;
0x0004c84e ldr r3, [sp, 0x58] | r3 = *((sp + 0x58));
0x0004c850 cmp r3, sb |
| if (r3 <= sb) {
0x0004c852 ble.w 0x4ce62 | goto label_57;
| }
0x0004c856 ldr r3, [sp, 0x84] | r3 = var_84h_2;
0x0004c858 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0004c85a ldr.w r1, [r3, sb, lsl 2] | offset_0 = sb << 2;
| r1 = *((r3 + offset_0));
0x0004c85e ldr r3, [sp, 0x70] | r3 = *((sp + 0x70));
0x0004c860 lsls r0, r3, 0x14 | r0 = r3 << 0x14;
0x0004c862 bmi 0x4c824 |
| }
0x0004c864 ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x0004c866 ands r3, r2, 0x400 | r3 = r2 & 0x400;
| if (r3 != r2) {
0x0004c86a bne.w 0x4ce6e | goto label_58;
| }
| label_28:
0x0004c86e ldr r0, [sp, 0x54] | r0 = *((sp + 0x54));
| if (r0 != 0) {
0x0004c870 cbz r0, 0x4c874 |
0x0004c872 strh r3, [r1, 0x1e] | *((r1 + 0x1e)) = r3;
| }
0x0004c874 ldr r3, [sp, 0x3c] | r3 = var_64h;
0x0004c876 ldrb r0, [r1, 0x10] | r0 = *((r1 + 0x10));
0x0004c878 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004c87a add.w r3, r3, r0, lsl 6 | r3 += (r0 << 6);
0x0004c87c asrs r0, r0, 0xe | r0 >>= 0xe;
0x0004c87e ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0004c880 str r3, [sp, 0x20] | var_48h = r3;
0x0004c882 ldr r3, [sp, 0x1c] | r3 = var_44h;
0x0004c884 cmp r3, 0 |
| if (r3 == 0) {
0x0004c886 beq.w 0x4ca84 | goto label_59;
| }
0x0004c88a ldr r7, [sp, 0x2c] | r7 = var_54h;
0x0004c88c movs r5, 0 | r5 = 0;
0x0004c88e mov fp, r8 |
0x0004c890 strd r1, sb, [sp, 0x10] | __asm ("strd r1, sb, [sp, 0x10]");
| label_0:
0x0004c894 rsb.w sb, r5, 0x20 | sb = 0x20 - r5;
0x0004c898 lsr.w r2, fp, r5 | r2 = fp >> r5;
0x0004c89c lsl.w r1, sl, sb | r1 = sl << sb;
0x0004c8a0 sub.w r8, r5, 0x20 | r8 = r5 - 0x20;
0x0004c8a4 orrs r2, r1 | r2 |= r1;
0x0004c8a6 lsr.w r1, sl, r8 | r1 = sl >> r8;
0x0004c8aa orrs r2, r1 | r2 |= r1;
0x0004c8ac lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
| if (r1 < r2) {
0x0004c8ae bmi 0x4c8de | goto label_6;
| }
0x0004c8b0 ldr r4, [r7, 8] | r4 = *((r7 + 8));
| if (r4 != 0) {
0x0004c8b2 cbnz r4, 0x4c8c2 | goto label_60;
| }
0x0004c8b4 b 0x4c8de | goto label_6;
| do {
0x0004c8b6 lsls r2, r2, 0xc | r2 <<= 0xc;
0x0004c8b8 itet mi |
| if (r2 >= r2) {
0x0004c8ba ldrmi r2, [r4, 0x14] | r2 = *((r4 + 0x14));
| }
| if (r2 < r2) {
0x0004c8bc ldrpl r4, [r4, 0xc] | r4 = *((r4 + 0xc));
| }
| if (r2 >= r2) {
0x0004c8be ldrmi r4, [r2, 8] | r4 = *((r2 + 8));
| }
| if (r4 == 0) {
0x0004c8c0 cbz r4, 0x4c8de | goto label_6;
| }
| label_60:
0x0004c8c2 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0004c8c4 tst.w r2, 0x82000 |
0x0004c8c8 bne 0x4c8b6 |
| } while ((r2 & 0x82000) != 0);
0x0004c8ca ldrb r6, [r4] | r6 = *(r4);
0x0004c8cc adds r6, 0x59 | r6 += 0x59;
0x0004c8ce ands r6, r6, 0xfd | r6 &= 0xfd;
| if (r6 == r6) {
0x0004c8d2 bne 0x4c8de |
0x0004c8d4 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0004c8d6 ldr r1, [sp, 0x20] | r1 = var_48h;
0x0004c8d8 cmp r2, r1 |
| if (r2 == r1) {
0x0004c8da beq.w 0x4ca22 | goto label_61;
| }
| }
| label_6:
0x0004c8de adds r5, 1 | r5++;
0x0004c8e0 adds r7, 0x10 | r7 += 0x10;
0x0004c8e2 cmp r3, r5 |
| if (r3 != r5) {
0x0004c8e4 bne 0x4c894 | goto label_0;
| }
0x0004c8e6 ldrd r1, sb, [sp, 0x10] | __asm ("ldrd r1, sb, [var_38h]");
0x0004c8ea mov r8, fp | r8 = fp;
0x0004c8ec ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x0004c8ee lsls r6, r2, 0x13 | r6 = r2 << 0x13;
| if (r6 >= r2) {
0x0004c8f0 bpl.w 0x4ca8a | goto label_62;
| }
0x0004c8f4 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0004c8f6 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0004c8f8 orrs r2, r3 | r2 |= r3;
0x0004c8fa ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x0004c8fc str r2, [sp, 0x7c] | var_7ch = r2;
0x0004c8fe ldr r2, [sp, 0x80] | r2 = var_80h;
0x0004c900 orrs r2, r3 | r2 |= r3;
0x0004c902 str r2, [sp, 0x80] | var_80h = r2;
| label_12:
0x0004c904 ldr.w r3, [pc, 0x6a8] | r3 = *(0x0004cfb0);
0x0004c908 movs r5, 0 | r5 = 0;
0x0004c90a str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_48h]");
0x0004c90e mov.w fp, 1 |
0x0004c912 ldr r7, [sp, 0x2c] | r7 = var_54h;
0x0004c914 mov sb, r8 | sb = r8;
0x0004c916 add r3, pc | r3 += pc;
0x0004c918 str r1, [sp, 0x18] | var_40h = r1;
0x0004c91a str r3, [sp, 0x14] | var_3ch = r3;
0x0004c91c b 0x4c94c | goto label_2;
| label_1:
0x0004c91e mov r1, r3 | r1 = r3;
0x0004c920 str r3, [sp, 0x10] | var_38h = r3;
0x0004c922 ldr r3, [sp, 0x3c] | r3 = var_64h;
0x0004c924 add.w r0, r3, 0x1f8 | r0 = r3 + 0x1f8;
0x0004c928 bl 0x32768 | r0 = fcn_00032768 (r0, r1);
0x0004c92c orrs.w ip, r0, r1 |
| if (ip == r0) {
0x0004c930 beq 0x4ca00 | goto label_63;
| }
0x0004c932 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0004c934 bic.w r0, r0, r3 | r0 = BIT_MASK (r0, r3);
0x0004c938 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0004c93a bic.w r1, r1, r3 | r1 = BIT_MASK (r1, r3);
0x0004c93e orrs r0, r1 | r0 |= r1;
| if (r0 == r1) {
0x0004c940 beq 0x4c970 | goto label_5;
| }
| do {
| label_4:
0x0004c942 ldr r3, [sp, 0x1c] | r3 = var_44h;
0x0004c944 adds r5, 1 | r5++;
0x0004c946 adds r7, 0x10 | r7 += 0x10;
0x0004c948 cmp r3, r5 |
| if (r3 == r5) {
0x0004c94a beq 0x4c992 | goto label_64;
| }
| label_2:
0x0004c94c rsb.w r8, r5, 0x20 | r8 = 0x20 - r5;
0x0004c950 lsr.w r4, sb, r5 | r4 = sb >> r5;
0x0004c954 lsl.w r3, sl, r8 | r3 = sl << r8;
0x0004c958 sub.w r6, r5, 0x20 | r6 = r5 - 0x20;
0x0004c95c orrs r4, r3 | r4 |= r3;
0x0004c95e lsr.w r3, sl, r6 | r3 = sl >> r6;
0x0004c962 orrs r4, r3 | r4 |= r3;
0x0004c964 ands r4, r4, 1 | r4 &= 1;
0x0004c968 bne 0x4c942 |
| } while (r4 != r4);
0x0004c96a ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x0004c96c cmp r3, 0 |
| if (r3 != 0) {
0x0004c96e bne 0x4c91e | goto label_1;
| }
| label_5:
0x0004c970 lsl.w r3, fp, r6 | r3 = fp << r6;
0x0004c974 lsr.w r8, fp, r8 | r8 = fp >> r8;
0x0004c978 orr.w r3, r3, r8 | r3 |= r8;
0x0004c97c adds r7, 0x10 | r7 += 0x10;
0x0004c97e orr.w sl, r3, sl | sl = r3 | sl;
0x0004c982 lsl.w r3, fp, r5 | r3 = fp << r5;
0x0004c986 adds r5, 1 | r5++;
0x0004c988 orr.w sb, r3, sb | sb = r3 | sb;
0x0004c98c ldr r3, [sp, 0x1c] | r3 = var_44h;
0x0004c98e cmp r3, r5 |
| if (r3 != r5) {
0x0004c990 bne 0x4c94c | goto label_2;
| }
| label_64:
0x0004c992 mov r8, sb | r8 = sb;
0x0004c994 ldr r1, [sp, 0x18] | r1 = var_40h;
0x0004c996 ldr.w sb, [sp, 0x20] | sb = var_48h;
0x0004c99a b 0x4c824 | goto label_3;
| label_9:
0x0004c99c ldr r2, [sp, 0x1c] | r2 = var_44h;
0x0004c99e movs r0, 1 | r0 = 1;
0x0004c9a0 rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x0004c9a4 subs r2, 0x21 | r2 -= 0x21;
0x0004c9a6 lsl.w r2, r0, r2 | r2 = r0 << r2;
0x0004c9aa b 0x4c9b8 |
| while (r3 != 1) {
0x0004c9ac sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0004c9b0 rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x0004c9b4 lsl.w r2, r0, r2 | r2 = r0 << r2;
0x0004c9b8 lsr.w r1, r0, r1 | r1 = r0 >> r1;
0x0004c9bc orrs r2, r1 | r2 |= r1;
0x0004c9be lsl.w r1, r0, r3 | r1 = r0 << r3;
0x0004c9c2 subs r1, 1 | r1--;
0x0004c9c4 adc r2, r2, -1 | __asm ("adc r2, r2, -1");
0x0004c9c8 and.w r5, r8, r1 | r5 = r8 & r1;
0x0004c9cc and.w r4, sl, r2 | r4 = sl & r2;
0x0004c9d0 cmp r4, r2 |
0x0004c9d2 it eq |
| if (r4 == r2) {
0x0004c9d4 cmpeq r5, r1 | __asm ("cmpeq r5, r1");
| }
| if (r4 == r2) {
0x0004c9d6 beq.w 0x4cc72 | goto label_65;
| }
0x0004c9da subs r3, 1 | r3--;
0x0004c9dc bne 0x4c9ac |
| }
| label_7:
0x0004c9de movs r0, 0 | r0 = 0;
| label_10:
0x0004c9e0 ldr.w r2, [pc, 0x5d0] |
0x0004c9e4 ldr.w r3, [pc, 0x5c0] | r3 = *(0x4cfa8);
0x0004c9e8 add r2, pc | r2 = 0x999a0;
0x0004c9ea ldr r3, [r2, r3] | r3 = *(0x999a0);
0x0004c9ec ldr r2, [r3] | r2 = *(0x999a0);
0x0004c9ee ldr r3, [sp, 0xbc] | r3 = *(arg_bch);
0x0004c9f0 eors r2, r3 | r2 ^= r3;
0x0004c9f2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004c9f6 bne.w 0x4cf9e | goto label_66;
| }
0x0004c9fa add sp, 0xc4 |
0x0004c9fc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_63:
0x0004ca00 ldr r3, [sp, 0x10] | r3 = var_38h;
0x0004ca02 add r0, sp, 0xa0 | r0 += arg_a0h;
0x0004ca04 str r4, [sp, 0xb8] | *(arg_b8h) = r4;
0x0004ca06 strh.w fp, [sp, 0xb4] | *(arg_b4h) = fp;
0x0004ca0a mov r1, r3 | r1 = r3;
0x0004ca0c ldr r3, [sp, 0x90] | r3 = *(arg_90h);
0x0004ca0e str r3, [sp, 0xa4] | *(arg_a4h) = r3;
0x0004ca10 ldr r3, [sp, 0x14] | r3 = var_3ch;
0x0004ca12 str r3, [sp, 0xa8] | *(arg_a8h) = r3;
0x0004ca14 bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0004ca18 ldrh.w r3, [sp, 0xb4] | r3 = *(arg_b4h);
0x0004ca1c cmp r3, 0 |
| if (r3 == 0) {
0x0004ca1e beq 0x4c942 | goto label_4;
| }
0x0004ca20 b 0x4c970 | goto label_5;
| label_61:
0x0004ca22 str r3, [sp, 0x18] | var_40h = r3;
0x0004ca24 ldr r3, [sp, 0x48] | r3 = var_70h;
0x0004ca26 ldrsh.w r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x0004ca2a str r6, [sp, 0xc] | var_34h = r6;
0x0004ca2c str r3, [sp, 8] | var_8h = r3;
0x0004ca2e ldr r3, [sp, 0x4c] | r3 = *((sp + 0x4c));
0x0004ca30 mvns r1, r3 | r1 = ~r3;
0x0004ca32 ldr r3, [sp, 0x50] | r3 = var_78h;
0x0004ca34 str r1, [sp] | *(sp) = r1;
0x0004ca36 mvns r1, r3 | r1 = ~r3;
0x0004ca38 ldr r3, [sp, 0x3c] | r3 = var_64h;
0x0004ca3a str r1, [sp, 4] | var_4h = r1;
0x0004ca3c ldr r1, [sp, 0x20] | r1 = var_48h;
0x0004ca3e add.w r0, r3, 0x58 | r0 = r3 + 0x58;
0x0004ca42 bl 0x4c6d0 | fcn_0004c6d0 (r0, r1, r2, r3, r4, r5);
0x0004ca46 ldr r3, [sp, 0x18] | r3 = var_40h;
0x0004ca48 mov r2, r0 | r2 = r0;
0x0004ca4a cmp r0, 0 |
| if (r0 == 0) {
0x0004ca4c beq.w 0x4c8de | goto label_6;
| }
0x0004ca50 ldrh r1, [r0, 0xc] | r1 = *((r0 + 0xc));
0x0004ca52 cmp r1, 1 |
| if (r1 == 1) {
0x0004ca54 beq.w 0x4cf46 | goto label_67;
| }
0x0004ca58 tst.w r1, 0x82 |
0x0004ca5c str r0, [sp, 0x18] | var_40h = r0;
| if ((r1 & 0x82) != 0) {
0x0004ca5e beq 0x4ca6a |
0x0004ca60 ldrsh.w r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x0004ca64 cmp r1, 0 |
| if (r1 >= 0) {
0x0004ca66 bge.w 0x4cecc | goto label_68;
| }
| }
| label_33:
0x0004ca6a movs r2, 1 | r2 = 1;
0x0004ca6c lsl.w r1, r2, r8 | r1 = r2 << r8;
0x0004ca70 lsr.w sb, r2, sb | sb = r2 >> sb;
0x0004ca74 lsls r2, r5 | r2 <<= r5;
0x0004ca76 orr.w r1, r1, sb | r1 |= sb;
0x0004ca7a orr.w sl, r1, sl | sl = r1 | sl;
0x0004ca7e orr.w fp, r2, fp |
0x0004ca82 b 0x4c8de | goto label_6;
| label_59:
0x0004ca84 lsls r3, r2, 0x13 | r3 = r2 << 0x13;
| if (r3 < r2) {
0x0004ca86 bmi.w 0x4cf74 | goto label_69;
| }
| label_62:
0x0004ca8a lsls r5, r2, 0x17 | r5 = r2 << 0x17;
| if (r5 < r2) {
0x0004ca8c bmi.w 0x4ceb6 | goto label_70;
| }
0x0004ca90 ldr.w lr, [r1, 0x20] |
0x0004ca94 cmp.w lr, 0 |
| if (lr == 0) {
0x0004ca98 beq 0x4c9de | goto label_7;
| }
0x0004ca9a ldrb.w r3, [lr, 0x37] | r3 = *((lr + 0x37));
0x0004ca9e lsls r4, r3, 0x1d | r4 = r3 << 0x1d;
| if (r4 < r3) {
0x0004caa0 bmi 0x4c9de | goto label_7;
| }
0x0004caa2 ldrb.w r3, [lr, 0x36] | r3 = *((lr + 0x36));
0x0004caa6 ldrh.w r0, [lr, 0x34] | r0 = *((lr + 0x34));
0x0004caaa ldrh.w r7, [lr, 0x32] | r7 = *((lr + 0x32));
0x0004caae str r3, [sp, 0x30] | var_58h = r3;
0x0004cab0 mov r4, r0 | r4 = r0;
0x0004cab2 cmp r3, 0 |
| if (r3 == 0) {
0x0004cab4 beq.w 0x4cec4 | goto label_71;
| }
0x0004cab8 eor r2, r2, 0x8000 | r2 ^= 0x8000;
0x0004cabc ubfx r3, r2, 0xf, 1 | r3 = (r2 >> 0xf) & ((1 << 1) - 1);
0x0004cac0 str r3, [sp, 0x30] | var_58h = r3;
0x0004cac2 cmp r0, 0 |
| if (r0 == 0) {
0x0004cac4 beq.w 0x4cc4c | goto label_72;
| }
| label_30:
0x0004cac8 movs r3, 1 | r3 = 1;
0x0004caca sub.w r2, sb, 0x20 | r2 = sb - 0x20;
0x0004cace lsl.w r2, r3, r2 | r2 = r3 << r2;
0x0004cad2 ldr.w r5, [pc, 0x4e4] |
0x0004cad6 mov.w fp, 0 |
0x0004cada str.w sb, [sp, 0x64] | __asm ("str.w sb, [sp, 0x64]");
0x0004cade mov r0, r2 | r0 = r2;
0x0004cae0 rsb.w r2, sb, 0x20 | r2 = 0x20 - sb;
0x0004cae4 lsr.w r2, r3, r2 | r2 = r3 >> r2;
0x0004cae8 lsl.w r3, r3, sb | r3 <<= sb;
0x0004caec str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_50h]");
0x0004caf0 orrs r2, r0 | r2 |= r0;
0x0004caf2 str r3, [sp, 0x88] | *((sp + 0x88)) = r3;
0x0004caf4 add r5, pc | r5 = 0x99ab2;
0x0004caf6 mov r3, r1 | r3 = r1;
0x0004caf8 mov ip, r4 |
0x0004cafa mov sb, r8 | sb = r8;
0x0004cafc str r2, [sp, 0x8c] | *(arg_8ch) = r2;
0x0004cafe str.w fp, [sp, 0x78] | __asm ("str.w fp, [sp, 0x78]");
0x0004cb02 str.w fp, [sp, 0x60] | __asm ("str.w fp, [sp, 0x60]");
0x0004cb06 str r7, [sp, 0x68] | *((sp + 0x68)) = r7;
0x0004cb08 b 0x4cb3a |
| while (r1 > fp) {
0x0004cb0a ldrh r2, [r3, 0x2e] | r2 = *((r3 + 0x2e));
0x0004cb0c cmp r2, fp |
| if (r2 > fp) {
0x0004cb0e bgt 0x4cb40 | goto label_73;
| }
0x0004cb10 ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x0004cb12 ldr r6, [sp, 0x48] | r6 = var_70h;
0x0004cb14 ldr.w r4, [r2, fp, lsl 2] | offset_1 = fp << 2;
| r4 = *((r2 + offset_1));
0x0004cb18 add.w r2, r2, fp, lsl 2 | r2 += (fp << 2);
0x0004cb1c ldrh r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0004cb1e tst r6, r0 |
| if ((r6 & r0) == 0) {
0x0004cb20 beq.w 0x4cdf6 | goto label_74;
| }
0x0004cb24 ldr r2, [sp, 0x30] | r2 = var_58h;
0x0004cb26 tst.w r0, 0x180 |
0x0004cb2a add.w fp, fp, 1 |
0x0004cb2e it ne |
| if ((r0 & 0x180) == 0) {
0x0004cb30 movne r2, 0 | r2 = 0;
| }
0x0004cb32 cmp ip, fp |
0x0004cb34 str r2, [sp, 0x30] | var_58h = r2;
| if (ip <= fp) {
0x0004cb36 ble.w 0x4cd90 | goto label_75;
| }
| label_17:
0x0004cb3a ldrh r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x0004cb3c cmp r1, fp |
0x0004cb3e bgt 0x4cb0a |
| }
| label_73:
0x0004cb40 ldr r2, [sp, 0x1c] | r2 = var_44h;
0x0004cb42 subs r2, 0 |
0x0004cb44 it ne |
| if (r2 == 0) {
0x0004cb46 movne r2, 1 | r2 = 1;
| }
0x0004cb48 str r2, [sp, 0x10] | var_38h = r2;
| label_21:
0x0004cb4a cmp.w lr, 0 |
| if (lr == 0) {
0x0004cb4e beq.w 0x4ce30 | goto label_76;
| }
| label_23:
0x0004cb52 ldr.w r2, [lr, 4] | r2 = *((lr + 4));
0x0004cb56 ldr.w r4, [lr, 0xc] | r4 = *((lr + 0xc));
0x0004cb5a ldrsh.w r0, [r2, fp, lsl 1] | offset_2 = fp << 1;
| r0 = *((r2 + offset_2));
0x0004cb5e ldr.w r2, [lr, 0x1c] | r2 = *((lr + 0x1c));
0x0004cb62 ldrsh.w r6, [r4, 0x20] | r6 = *((r4 + 0x20));
0x0004cb66 ldrb.w r2, [r2, fp] | r2 = *((r2 + fp));
0x0004cb6a cmp r6, r0 |
0x0004cb6c and r2, r2, 1 | r2 &= 1;
| if (r6 == r0) {
0x0004cb70 beq.w 0x4ce52 | goto label_77;
| }
0x0004cb74 ldr r6, [sp, 0x30] | r6 = var_58h;
0x0004cb76 str r0, [sp, 0x14] | var_3ch = r0;
| if (r6 != 0) {
0x0004cb78 cbz r6, 0x4cb9a |
0x0004cb7a cmp r0, 0 |
| if (r0 < 0) {
0x0004cb7c blt.w 0x4cea4 | goto label_78;
| }
0x0004cb80 cmp r1, fp |
| if (r1 > fp) {
0x0004cb82 bgt 0x4cb9a | goto label_27;
| }
0x0004cb84 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0004cb86 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0004cb8a add.w r1, r1, r0, lsl 2 | r1 += (r0 << 2);
0x0004cb8e ldrb r1, [r1, 4] | r1 = *((r1 + 4));
0x0004cb90 ands r1, r1, 0xf | r1 &= 0xf;
0x0004cb94 it ne |
| if (r1 == r1) {
0x0004cb96 movne r1, 1 | r1 = 1;
| }
0x0004cb98 str r1, [sp, 0x30] | var_58h = r1;
| }
| label_27:
0x0004cb9a ldr r1, [sp, 0x10] | r1 = var_38h;
0x0004cb9c cmp r1, 0 |
| if (r1 == 0) {
0x0004cb9e beq.w 0x4ce40 | goto label_79;
| }
| label_24:
0x0004cba2 str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_40h]");
0x0004cba6 movs r4, 0 | r4 = 0;
0x0004cba8 ldr r7, [sp, 0x2c] | r7 = var_54h;
0x0004cbaa ldr.w fp, [sp, 0x1c] | fp = var_44h;
0x0004cbae str r3, [sp, 0x38] | var_60h = r3;
0x0004cbb0 str.w lr, [sp, 0x24] | __asm ("str.w lr, [var_4ch]");
0x0004cbb4 strd ip, r2, [sp, 0x40] | __asm ("strd ip, r2, [sp, 0x40]");
| label_8:
0x0004cbb8 rsb.w r8, r4, 0x20 | r8 = 0x20 - r4;
0x0004cbbc lsr.w r3, sb, r4 | r3 = sb >> r4;
0x0004cbc0 lsl.w r2, sl, r8 | r2 = sl << r8;
0x0004cbc4 sub.w r6, r4, 0x20 | r6 = r4 - 0x20;
0x0004cbc8 orrs r3, r2 | r3 |= r2;
0x0004cbca lsr.w r2, sl, r6 | r2 = sl >> r6;
0x0004cbce orrs r3, r2 | r3 |= r2;
0x0004cbd0 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x0004cbd2 bmi 0x4cc96 | goto label_80;
| }
0x0004cbd4 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x0004cbd6 mov r3, r1 | r3 = r1;
| if (r1 != 0) {
0x0004cbd8 cbnz r1, 0x4cbea | goto label_81;
| }
0x0004cbda b 0x4cc96 | goto label_80;
| do {
0x0004cbdc lsls r2, r2, 0xc | r2 <<= 0xc;
0x0004cbde itet mi |
| if (r2 >= r2) {
0x0004cbe0 ldrmi r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r2 < r2) {
0x0004cbe2 ldrpl r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r2 >= r2) {
0x0004cbe4 ldrmi r3, [r3, 8] | r3 = *((r3 + 8));
| }
0x0004cbe6 cmp r3, 0 |
| if (r3 == 0) {
0x0004cbe8 beq 0x4cc96 | goto label_80;
| }
| label_81:
0x0004cbea ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0004cbec tst.w r2, 0x82000 |
0x0004cbf0 bne 0x4cbdc |
| } while ((r2 & 0x82000) != 0);
0x0004cbf2 ldr r2, [sp, 0x14] | r2 = var_3ch;
0x0004cbf4 adds r2, 1 | r2++;
| if (r2 < 1) {
0x0004cbf6 blt.w 0x4cd9a | goto label_82;
| }
0x0004cbfa ldrb r2, [r3] | r2 = *(r3);
0x0004cbfc adds r2, 0x59 | r2 += 0x59;
0x0004cbfe tst.w r2, 0xfd |
| if ((r2 & 0xfd) == 0) {
0x0004cc02 bne 0x4cc0c |
0x0004cc04 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0004cc06 ldr r0, [sp, 0x20] | r0 = var_48h;
0x0004cc08 cmp r2, r0 |
| if (r2 == r0) {
0x0004cc0a beq 0x4cc9a | goto label_83;
| }
| }
| label_14:
0x0004cc0c ldr r3, [sp, 0x70] | r3 = *((sp + 0x70));
0x0004cc0e tst.w r3, 0xc0 |
0x0004cc12 ite ne |
| if ((r3 & 0xc0) == 0) {
0x0004cc14 movne r3, 1 | r3 = 1;
| }
| if ((r3 & 0xc0) != 0) {
0x0004cc16 moveq r3, 0 | r3 = 0;
| }
| label_13:
0x0004cc18 adds r4, 1 | r4++;
0x0004cc1a adds r7, 0x10 | r7 += 0x10;
0x0004cc1c cmp fp, r4 |
0x0004cc1e ite le |
| if (fp > r4) {
0x0004cc20 movle r3, 0 | r3 = 0;
| }
| if (fp <= r4) {
0x0004cc22 andgt r3, r3, 1 | r3 &= 1;
| }
0x0004cc26 cmp r3, 0 |
| if (r3 != 0) {
0x0004cc28 bne 0x4cbb8 | goto label_8;
| }
0x0004cc2a mov r8, sb | r8 = sb;
0x0004cc2c ldr r1, [sp, 0x38] | r1 = var_60h;
0x0004cc2e ldr r7, [sp, 0x68] | r7 = *((sp + 0x68));
0x0004cc30 ldr.w fp, [sp, 0x18] | fp = var_40h;
0x0004cc34 ldr.w sb, [sp, 0x64] | sb = *((sp + 0x64));
| label_25:
0x0004cc38 cmp.w fp, 0 |
| if (fp == 0) {
0x0004cc3c beq 0x4cc76 | goto label_84;
| }
0x0004cc3e cmp r7, fp |
| if (r7 > fp) {
0x0004cc40 bgt 0x4cc76 | goto label_84;
| }
| label_18:
0x0004cc42 ldr r3, [sp, 0x30] | r3 = var_58h;
0x0004cc44 ldr r2, [sp, 0x28] | r2 = var_50h;
0x0004cc46 orrs r3, r2 | r3 |= r2;
0x0004cc48 uxtb r3, r3 | r3 = (int8_t) r3;
0x0004cc4a str r3, [sp, 0x30] | var_58h = r3;
| label_72:
0x0004cc4c ldr r3, [sp, 0x30] | r3 = var_58h;
| if (r3 != 0) {
0x0004cc4e cbnz r3, 0x4cc7c | goto label_85;
| }
| label_11:
0x0004cc50 ldr.w sb, [sp, 0x6c] | sb = var_6ch;
0x0004cc54 ldr r2, [sp, 0x74] | r2 = var_74h;
0x0004cc56 ldr r4, [sp, 0x94] | r4 = *(arg_94h);
0x0004cc58 cmp sl, r2 |
0x0004cc5a it eq |
| if (sl == r2) {
0x0004cc5c cmpeq r8, sb | __asm ("cmpeq r8, sb");
| }
| if (sl == r2) {
0x0004cc5e beq.w 0x4ce8a | goto label_36;
| }
0x0004cc62 ldr r3, [sp, 0x1c] | r3 = var_44h;
0x0004cc64 subs r3, 1 | r3--;
0x0004cc66 cmp r3, 0 |
| if (r3 <= 0) {
0x0004cc68 ble.w 0x4c9de | goto label_7;
| }
0x0004cc6c cmp r3, 0x3f |
| if (r3 <= 0x3f) {
0x0004cc6e ble.w 0x4c99c | goto label_9;
| }
| label_65:
0x0004cc72 sxtb r0, r3 | r0 = (int32_t) r3;
0x0004cc74 b 0x4c9e0 | goto label_10;
| label_84:
0x0004cc76 ldr r3, [sp, 0x28] | r3 = var_50h;
0x0004cc78 cmp r3, 0 |
| if (r3 == 0) {
0x0004cc7a beq 0x4cc50 | goto label_11;
| }
| label_85:
0x0004cc7c ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0004cc7e ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0004cc80 orrs r2, r3 | r2 |= r3;
0x0004cc82 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x0004cc84 str r2, [sp, 0x7c] | var_7ch = r2;
0x0004cc86 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0004cc88 orrs r2, r3 | r2 |= r3;
0x0004cc8a ldr r3, [sp, 0x1c] | r3 = var_44h;
0x0004cc8c str r2, [sp, 0x80] | var_80h = r2;
0x0004cc8e cmp r3, 0 |
| if (r3 != 0) {
0x0004cc90 bne.w 0x4c904 | goto label_12;
| }
0x0004cc94 b 0x4c824 | goto label_3;
| label_80:
0x0004cc96 ldr r3, [sp, 0x10] | r3 = var_38h;
0x0004cc98 b 0x4cc18 | goto label_13;
| label_83:
0x0004cc9a ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0004cc9e ldr r2, [sp, 0x14] | r2 = var_3ch;
0x0004cca0 cmp r3, r2 |
| if (r3 != r2) {
0x0004cca2 bne 0x4cc0c | goto label_14;
| }
0x0004cca4 ldr r3, [sp, 0x14] | r3 = var_3ch;
0x0004cca6 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0004cca8 beq 0x4ccfa | goto label_86;
| }
| label_19:
0x0004ccaa ldr r3, [sp, 0x3c] | r3 = var_64h;
0x0004ccac ldr r3, [r3] | r3 = *(r3);
0x0004ccae mov r0, r3 | r0 = r3;
0x0004ccb0 str r3, [sp, 0x34] | var_5ch = r3;
0x0004ccb2 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0004ccb6 ldr r3, [sp, 0x34] | r3 = var_5ch;
0x0004ccb8 cmp r0, 0 |
| if (r0 == 0) {
0x0004ccba beq.w 0x4ce4c | goto label_87;
| }
| label_26:
0x0004ccbe ldr r3, [sp, 0x24] | r3 = var_4ch;
0x0004ccc0 ldr r2, [sp, 0x18] | r2 = var_40h;
0x0004ccc2 ldr r0, [r0] | r0 = *(r0);
0x0004ccc4 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0004ccc6 subs r0, 1 | r0--;
0x0004ccc8 ldr.w r1, [r3, r2, lsl 2] | offset_3 = r2 << 2;
| r1 = *((r3 + offset_3));
0x0004cccc subs r1, 1 | r1--;
| label_16:
0x0004ccce ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0004ccd2 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004ccd6 cmp r3, r2 |
| if (r3 == r2) {
0x0004ccd8 beq 0x4ccf6 | goto label_88;
| }
| label_15:
0x0004ccda add r3, r5 | r3 += r5;
0x0004ccdc add r2, r5 | r2 += r5;
0x0004ccde ldrb.w ip, [r3, 0x140] | ip = *((r3 + 0x140));
0x0004cce2 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0004cce6 cmp ip, r3 |
| if (ip != r3) {
0x0004cce8 bne 0x4cc0c | goto label_14;
| }
0x0004ccea ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0004ccee ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004ccf2 cmp r3, r2 |
| if (r3 != r2) {
0x0004ccf4 bne 0x4ccda | goto label_15;
| }
| label_88:
0x0004ccf6 cmp r3, 0 |
| if (r3 != 0) {
0x0004ccf8 bne 0x4ccce | goto label_16;
| }
| label_86:
0x0004ccfa ldr r1, [sp, 0x54] | r1 = *((sp + 0x54));
0x0004ccfc ldr r3, [sp, 0x38] | r3 = var_60h;
0x0004ccfe ldr.w lr, [sp, 0x24] | lr = var_4ch;
0x0004cd02 ldrd ip, r2, [sp, 0x40] | __asm ("ldrd ip, r2, [var_68h]");
0x0004cd06 ldr.w fp, [sp, 0x18] | fp = var_40h;
| if (r1 != 0) {
0x0004cd0a cbz r1, 0x4cd12 |
0x0004cd0c add.w r1, fp, 1 | r1 += arg_1h;
0x0004cd10 strh r1, [r3, 0x1e] | *((r3 + 0x1e)) = r1;
| }
0x0004cd12 ldr r1, [sp, 0x2c] | r1 = var_54h;
0x0004cd14 ldr r0, [sp, 0x5c] | r0 = *((sp + 0x5c));
0x0004cd16 add.w r1, r1, r4, lsl 4 | r1 += (r4 << 4);
0x0004cd1a ldrb r1, [r1, 0x10] | r1 = *((r1 + 0x10));
| if (r0 == 0) {
0x0004cd1c cbnz r0, 0x4cd4c |
0x0004cd1e ldr r7, [sp, 0x60] | r7 = *((sp + 0x60));
0x0004cd20 and r0, r1, 1 | r0 = r1 & 1;
0x0004cd24 cmp r7, 0 |
| if (r7 != 0) {
0x0004cd26 bne.w 0x4ce8e | goto label_89;
| }
0x0004cd2a cmp r2, r0 |
0x0004cd2c eor.w r7, r2, r0 | r7 = r2 ^ r0;
0x0004cd30 str r7, [sp, 0x78] | *((sp + 0x78)) = r7;
| if (r2 == r0) {
0x0004cd32 beq.w 0x4ceb0 | goto label_90;
| }
0x0004cd36 ldr r0, [sp, 0x98] | r0 = *(arg_98h);
0x0004cd38 ldr r7, [sp, 0x88] | r7 = *((sp + 0x88));
0x0004cd3a ldr r2, [r0] | r2 = *(r0);
0x0004cd3c orrs r2, r7 | r2 |= r7;
0x0004cd3e ldr r7, [sp, 0x8c] | r7 = *(arg_8ch);
0x0004cd40 str r2, [r0] | *(r0) = r2;
0x0004cd42 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0004cd44 orrs r2, r7 | r2 |= r7;
0x0004cd46 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0004cd48 movs r2, 1 | r2 = 1;
0x0004cd4a str r2, [sp, 0x60] | *((sp + 0x60)) = r2;
| }
| label_29:
0x0004cd4c lsls r2, r1, 0x1e | r2 = r1 << 0x1e;
| if (r2 < r1) {
0x0004cd4e bpl 0x4cd5e |
0x0004cd50 ldrh r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x0004cd52 cmp r2, fp |
| if (r2 != fp) {
0x0004cd54 bne 0x4ce40 | goto label_79;
| }
0x0004cd56 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x0004cd58 orr r2, r2, 0x80000 | r2 |= 0x80000;
0x0004cd5c str r2, [r3, 0x28] | *((r3 + 0x28)) = r2;
| }
0x0004cd5e ldr r2, [sp, 0x14] | r2 = var_3ch;
0x0004cd60 add.w fp, fp, 1 |
0x0004cd64 adds r2, 1 | r2++;
0x0004cd66 ldr r2, [sp, 0x28] | r2 = var_50h;
0x0004cd68 it eq |
| if (r2 != 1) {
0x0004cd6a moveq r2, 1 | r2 = 1;
| }
0x0004cd6c cmp ip, fp |
0x0004cd6e str r2, [sp, 0x28] | var_50h = r2;
0x0004cd70 mov.w r2, 1 | r2 = 1;
0x0004cd74 lsl.w r6, r2, r6 | r6 = r2 << r6;
0x0004cd78 lsr.w r8, r2, r8 | r8 = r2 >> r8;
0x0004cd7c lsl.w r2, r2, r4 | r2 <<= r4;
0x0004cd80 orr.w r6, r6, r8 | r6 |= r8;
0x0004cd84 orr.w sb, r2, sb | sb = r2 | sb;
0x0004cd88 orr.w sl, r6, sl | sl = r6 | sl;
| if (ip > fp) {
0x0004cd8c bgt.w 0x4cb3a | goto label_17;
| }
| label_75:
0x0004cd90 mov r8, sb | r8 = sb;
0x0004cd92 mov r1, r3 | r1 = r3;
0x0004cd94 ldr.w sb, [sp, 0x64] | sb = *((sp + 0x64));
0x0004cd98 b 0x4cc42 | goto label_18;
| label_82:
0x0004cd9a ldr r2, [sp, 0x24] | r2 = var_4ch;
0x0004cd9c ldr r0, [sp, 0x18] | r0 = var_40h;
0x0004cd9e ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x0004cda0 add.w r2, r2, r0, lsl 4 | r2 += (r0 << 4);
0x0004cda4 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0004cda6 b 0x4cdb4 |
| while ((r0 & 0x82000) != 0) {
0x0004cda8 lsls r0, r0, 0xc | r0 <<= 0xc;
0x0004cdaa itet mi |
| if (r0 >= r0) {
0x0004cdac ldrmi r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r0 < r0) {
0x0004cdae ldrpl r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r0 >= r0) {
0x0004cdb0 ldrmi r3, [r3, 8] | r3 = *((r3 + 8));
| }
| if (r3 == 0) {
0x0004cdb2 cbz r3, 0x4cdf0 | goto label_91;
| }
0x0004cdb4 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0004cdb6 tst.w r0, 0x82000 |
0x0004cdba bne 0x4cda8 |
| }
| if (r2 != 0) {
0x0004cdbc cbnz r2, 0x4cdce | goto label_20;
| }
0x0004cdbe b 0x4cc0c | goto label_14;
| do {
0x0004cdc0 lsls r0, r0, 0xc | r0 <<= 0xc;
0x0004cdc2 itet mi |
| if (r0 >= r0) {
0x0004cdc4 ldrmi r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| }
| if (r0 < r0) {
0x0004cdc6 ldrpl r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| }
| if (r0 >= r0) {
0x0004cdc8 ldrmi r2, [r2, 8] | r2 = *((r2 + 8));
| }
0x0004cdca cmp r2, 0 |
| if (r2 == 0) {
0x0004cdcc beq 0x4ce5a | goto label_92;
| }
| label_20:
0x0004cdce ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0004cdd0 ands ip, r0, 0x82000 |
0x0004cdd4 bne 0x4cdc0 |
| } while (ip != r0);
0x0004cdd6 mov r0, ip | r0 = ip;
0x0004cdd8 cmp r3, 0 |
| if (r3 == 0) {
0x0004cdda beq.w 0x4cc0c | goto label_14;
| }
0x0004cdde mov r1, r3 | r1 = r3;
0x0004cde0 ldr r3, [sp, 0x20] | r3 = var_48h;
0x0004cde2 bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
0x0004cde6 cmp r0, 0 |
| if (r0 != 0) {
0x0004cde8 bne.w 0x4cc0c | goto label_14;
| }
0x0004cdec ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x0004cdee b 0x4ccaa | goto label_19;
| label_91:
0x0004cdf0 cmp r2, 0 |
| if (r2 != 0) {
0x0004cdf2 bne 0x4cdce | goto label_20;
| }
0x0004cdf4 b 0x4ccaa | goto label_19;
| label_74:
0x0004cdf6 ldr r6, [sp, 0x1c] | r6 = var_44h;
0x0004cdf8 subs r6, 0 |
0x0004cdfa it ne |
| if (r6 == 0) {
0x0004cdfc movne r6, 1 | r6 = 1;
| }
0x0004cdfe lsls r0, r0, 0x1f | r0 <<= 0x1f;
0x0004ce00 str r6, [sp, 0x10] | var_38h = r6;
| if (r0 >= r0) {
0x0004ce02 bpl.w 0x4cb4a | goto label_21;
| }
0x0004ce06 add.w r0, fp, 1 | r0 += arg_1h;
0x0004ce0a ldr r6, [r4] | r6 = *(r4);
0x0004ce0c cmp r1, r0 |
| if (r1 > r0) {
0x0004ce0e bgt 0x4ce1a | goto label_93;
| }
0x0004ce10 b 0x4cb4a | goto label_21;
| label_22:
0x0004ce12 adds r0, 1 | r0++;
0x0004ce14 cmp r1, r0 |
| if (r1 == r0) {
0x0004ce16 beq.w 0x4cb4a | goto label_21;
| }
| label_93:
0x0004ce1a ldr r4, [r2, 4]! | r4 = *((r2 += 4));
0x0004ce1e ldr r4, [r4] | r4 = *(r4);
0x0004ce20 cmp r4, r6 |
| if (r4 != r6) {
0x0004ce22 bne 0x4ce12 | goto label_22;
| }
0x0004ce24 movs r2, 0 | r2 = 0;
0x0004ce26 str r2, [sp, 0x10] | var_38h = r2;
0x0004ce28 cmp.w lr, 0 |
| if (lr != 0) {
0x0004ce2c bne.w 0x4cb52 | goto label_23;
| }
| label_76:
0x0004ce30 ldr r1, [sp, 0x10] | r1 = var_38h;
0x0004ce32 mov.w r2, -1 | r2 = -1;
0x0004ce36 str r2, [sp, 0x14] | var_3ch = r2;
0x0004ce38 mov r2, lr | r2 = lr;
0x0004ce3a cmp r1, 0 |
| if (r1 != 0) {
0x0004ce3c bne.w 0x4cba2 | goto label_24;
| }
| label_79:
0x0004ce40 mov r8, sb | r8 = sb;
0x0004ce42 ldr r7, [sp, 0x68] | r7 = *((sp + 0x68));
0x0004ce44 ldr.w sb, [sp, 0x64] | sb = *((sp + 0x64));
0x0004ce48 mov r1, r3 | r1 = r3;
0x0004ce4a b 0x4cc38 | goto label_25;
| label_87:
0x0004ce4c ldr r3, [r3] | r3 = *(r3);
0x0004ce4e ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0004ce50 b 0x4ccbe | goto label_26;
| label_77:
0x0004ce52 mov.w r1, -1 | r1 = -1;
0x0004ce56 str r1, [sp, 0x14] | var_3ch = r1;
0x0004ce58 b 0x4cb9a | goto label_27;
| label_92:
0x0004ce5a cmp r3, 0 |
| if (r3 != 0) {
0x0004ce5c bne.w 0x4cc0c | goto label_14;
| }
0x0004ce60 b 0x4ccaa | goto label_19;
| label_57:
0x0004ce62 ldr r1, [sp, 0x9c] | r1 = *(arg_9ch);
0x0004ce64 ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x0004ce66 ands r3, r2, 0x400 | r3 = r2 & 0x400;
| if (r3 == r2) {
0x0004ce6a beq.w 0x4c86e | goto label_28;
| }
| label_58:
0x0004ce6e ldrsb.w r3, [r1, 0x1d] | r3 = *((r1 + 0x1d));
0x0004ce72 ldr r4, [sp, 0x94] | r4 = *(arg_94h);
0x0004ce74 ldr.w sb, [sp, 0x6c] | sb = var_6ch;
0x0004ce78 cmp r3, 0 |
| if (r3 == 0) {
0x0004ce7a beq.w 0x4cf8c | goto label_94;
| }
0x0004ce7e ldr r3, [sp, 0x70] | r3 = *((sp + 0x70));
0x0004ce80 and r3, r3, 0x280 | r3 &= 0x280;
0x0004ce84 cmp r3, 0x80 |
| if (r3 == 0x80) {
0x0004ce86 beq.w 0x4cf8c | goto label_94;
| }
| label_36:
0x0004ce8a sxtb r0, r4 | r0 = (int32_t) r4;
0x0004ce8c b 0x4c9e0 | goto label_10;
| label_89:
0x0004ce8e ldr r7, [sp, 0x78] | r7 = *((sp + 0x78));
0x0004ce90 eors r2, r7 | r2 ^= r7;
0x0004ce92 cmp r2, r0 |
| if (r2 == r0) {
0x0004ce94 beq.w 0x4cd4c | goto label_29;
| }
0x0004ce98 mov r8, sb | r8 = sb;
0x0004ce9a ldr r7, [sp, 0x68] | r7 = *((sp + 0x68));
0x0004ce9c ldr.w sb, [sp, 0x64] | sb = *((sp + 0x64));
0x0004cea0 mov r1, r3 | r1 = r3;
0x0004cea2 b 0x4cc38 | goto label_25;
| label_78:
0x0004cea4 ldr r1, [sp, 0x14] | r1 = var_3ch;
0x0004cea6 adds r1, 2 | r1 += 2;
0x0004cea8 it ne |
| if (r1 == 2) {
0x0004ceaa movne r1, 1 | r1 = 1;
| }
0x0004ceac str r1, [sp, 0x30] | var_58h = r1;
0x0004ceae b 0x4cb9a | goto label_27;
| label_90:
0x0004ceb0 movs r2, 1 | r2 = 1;
0x0004ceb2 str r2, [sp, 0x60] | *((sp + 0x60)) = r2;
0x0004ceb4 b 0x4cd4c | goto label_29;
| label_70:
0x0004ceb6 movs r3, 1 | r3 = 1;
0x0004ceb8 mov.w lr, 0 | lr = 0;
0x0004cebc mov r4, r3 | r4 = r3;
0x0004cebe mov r7, lr | r7 = lr;
0x0004cec0 str r3, [sp, 0x30] | var_58h = r3;
0x0004cec2 b 0x4cac8 | goto label_30;
| label_71:
0x0004cec4 cmp r0, 0 |
| if (r0 != 0) {
0x0004cec6 bne.w 0x4cac8 | goto label_30;
| }
0x0004ceca b 0x4cc50 | goto label_11;
| label_68:
0x0004cecc str r3, [sp, 0x24] | var_4ch = r3;
0x0004cece ldr r3, [sp, 0x3c] | r3 = var_64h;
0x0004ced0 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x0004ced2 ldr r4, [r3] | r4 = *(r3);
0x0004ced4 mov r0, r4 | r0 = r4;
0x0004ced6 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0004ceda ldr r3, [sp, 0x24] | r3 = var_4ch;
0x0004cedc mov r6, r0 | r6 = r0;
0x0004cede ldr r2, [sp, 0x18] | r2 = var_40h;
0x0004cee0 cmp r0, 0 |
| if (r0 == 0) {
0x0004cee2 beq 0x4cf6e | goto label_95;
| }
| label_35:
0x0004cee4 ldr r2, [r2] | r2 = *(r2);
0x0004cee6 str r3, [sp, 0x18] | var_40h = r3;
0x0004cee8 ldr.w ip, [r2, 4] | ip = *((r2 + 4));
0x0004ceec ldrd r1, r0, [r2, 0xc] | __asm ("ldrd r1, r0, [r2, 0xc]");
0x0004cef0 tst.w ip, 0x400 |
0x0004cef4 itet ne |
| if ((ip & 0x400) == 0) {
0x0004cef6 movne r2, r1 | r2 = r1;
| }
| if ((ip & 0x400) != 0) {
0x0004cef8 moveq r2, r0 | r2 = r0;
| }
| if ((ip & 0x400) == 0) {
0x0004cefa movne r1, r0 | r1 = r0;
| }
0x0004cefc mov r0, r4 | r0 = r4;
0x0004cefe bl 0x46074 | fcn_00046074 (r0, r1, r2);
0x0004cf02 ldr r3, [sp, 0x18] | r3 = var_40h;
0x0004cf04 cmp r0, 0 |
| if (r0 == 0) {
0x0004cf06 beq.w 0x4c8de | goto label_6;
| }
0x0004cf0a ldr r4, [r6] | r4 = *(r6);
0x0004cf0c ldr r0, [r0] | r0 = *(r0);
0x0004cf0e ldr r6, [pc, 0xac] |
0x0004cf10 subs r4, 1 | r4--;
0x0004cf12 subs r0, 1 | r0--;
0x0004cf14 add r6, pc | r6 = 0x99ed6;
| label_32:
0x0004cf16 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x0004cf1a ldrb r1, [r0, 1]! | r1 = *((r0 += 1));
0x0004cf1e cmp r2, r1 |
| if (r2 == r1) {
0x0004cf20 beq 0x4cf40 | goto label_96;
| }
| label_31:
0x0004cf22 add r2, r6 | r2 += r6;
0x0004cf24 add r1, r6 | r1 += r6;
0x0004cf26 ldrb.w ip, [r2, 0x140] | ip = *((r2 + 0x140));
0x0004cf2a ldrb.w r2, [r1, 0x140] | r2 = *((r1 + 0x140));
0x0004cf2e cmp ip, r2 |
| if (ip != r2) {
0x0004cf30 bne.w 0x4c8de | goto label_6;
| }
0x0004cf34 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x0004cf38 ldrb r1, [r0, 1]! | r1 = *((r0 += 1));
0x0004cf3c cmp r2, r1 |
| if (r2 != r1) {
0x0004cf3e bne 0x4cf22 | goto label_31;
| }
| label_96:
0x0004cf40 cmp r2, 0 |
| if (r2 != 0) {
0x0004cf42 bne 0x4cf16 | goto label_32;
| }
0x0004cf44 b 0x4ca6a | goto label_33;
| label_67:
0x0004cf46 ldr r1, [sp, 0x10] | r1 = var_38h;
0x0004cf48 ldrh r0, [r1, 0x2c] | r0 = *((r1 + 0x2c));
0x0004cf4a cmp r0, 0 |
| if (r0 == 0) {
0x0004cf4c beq.w 0x4c8de | goto label_6;
| }
0x0004cf50 ldr r1, [r1, 0x34] | r1 = *((r1 + 0x34));
0x0004cf52 subs r1, 4 | r1 -= 4;
0x0004cf54 b 0x4cf5e | goto label_97;
| label_34:
0x0004cf56 adds r6, 1 | r6++;
0x0004cf58 cmp r6, r0 |
| if (r6 == r0) {
0x0004cf5a beq.w 0x4c8de | goto label_6;
| }
| label_97:
0x0004cf5e ldr r4, [r1, 4]! | r4 = *((r1 += 4));
0x0004cf62 cmp r4, r2 |
| if (r4 != r2) {
0x0004cf64 bne 0x4cf56 | goto label_34;
| }
0x0004cf66 cmp r0, r6 |
| if (r0 > r6) {
0x0004cf68 bgt.w 0x4ca6a | goto label_33;
| }
0x0004cf6c b 0x4c8de | goto label_6;
| label_95:
0x0004cf6e ldr r1, [r4] | r1 = *(r4);
0x0004cf70 ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x0004cf72 b 0x4cee4 | goto label_35;
| label_69:
0x0004cf74 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0004cf76 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0004cf78 orrs r2, r3 | r2 |= r3;
0x0004cf7a ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x0004cf7c str r2, [sp, 0x7c] | var_7ch = r2;
0x0004cf7e ldr r2, [sp, 0x80] | r2 = var_80h;
0x0004cf80 orrs r2, r3 | r2 |= r3;
0x0004cf82 str r2, [sp, 0x80] | var_80h = r2;
0x0004cf84 b 0x4c824 | goto label_3;
| label_55:
0x0004cf86 ldr r4, [sp, 0x94] | r4 = *(arg_94h);
0x0004cf88 ldr.w sb, [sp, 0x6c] | sb = var_6ch;
| label_94:
0x0004cf8c ldr r2, [sp, 0x74] | r2 = var_74h;
0x0004cf8e cmp sl, r2 |
0x0004cf90 it eq |
| if (sl != r2) {
0x0004cf92 cmpeq r8, sb | __asm ("cmpeq r8, sb");
| goto label_98;
| }
| if (sl == r2) {
| label_98:
0x0004cf94 beq.w 0x4ce8a | goto label_36;
| }
| label_56:
0x0004cf98 mov.w r0, -1 | r0 = -1;
0x0004cf9c b 0x4c9e0 | goto label_10;
| label_66:
0x0004cf9e blx 0x6430 | fcn_00006430 ();
0x0004cfa2 nop |
0x0004cfa4 bvs 0x4cfd4 | __asm ("bvs 0x4cfd4");
0x0004cfa6 movs r1, r1 |
0x0004cfa8 lsls r4, r6, 8 | r4 = r6 << 8;
0x0004cfaa movs r0, r0 |
0x0004cfac strh r5, [r3, 0x34] | *((r3 + 0x34)) = r5;
0x0004cfae vtbl.8 d22, {d30}, d11 | __asm ("vtbl.8 d22, {d30}, d11");
0x0004cfb2 vrsra.u64 d29, d16, 3 | __asm ("vrsra.u64 d29, d16, 3");
0x0004cfb6 movs r1, r1 |
0x0004cfb8 ssat16 r0, 9, r0 | __asm ("ssat16 r0, 9, r0");
0x0004cfbc vhadd.s8 d0, d0, d8 | __asm ("vhadd.s8 d0, d0, d8");
0x0004cfd4 ldrb.w sl, [r0, 0x30] | sl = *((r0 + 0x30));
0x0004cfd8 str r0, [sp, 0x20] | var_20h = r0;
0x0004cfda ldr.w fp, [r0] | fp = *(r0);
0x0004cfde ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0004cfe0 cmp.w sl, 1 |
0x0004cfe4 it le |
| if (sl > 1) {
0x0004cfe6 movle r6, 1 | r6 = 1;
| }
0x0004cfe8 ldr.w sb, [fp] | sb = *(fp);
0x0004cfec ldr r3, [r3] | r3 = *(r3);
0x0004cfee str r3, [sp, 0x84] | *((sp + 0x84)) = r3;
0x0004cff0 mov.w r3, 0 | r3 = 0;
0x0004cff4 str r1, [sp, 0x50] | var_50h = r1;
0x0004cff6 it le |
| if (sl > 1) {
0x0004cff8 strle r6, [sp, 0x1c] | var_1ch = r6;
| }
| if (sl > 1) {
0x0004cffa ble 0x4d008 |
0x0004cffc cmp.w sl, 2 |
0x0004d000 ite ne |
| if (sl == 2) {
0x0004d002 movne r6, 0xa | r6 = 0xa;
| }
| if (sl != 2) {
0x0004d004 moveq r6, 5 | r6 = 5;
| }
0x0004d006 str r6, [sp, 0x1c] | var_1ch = r6;
| }
0x0004d008 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d00a mov r0, sb | r0 = sb;
0x0004d00c ldr r2, [sp, 0x50] | r2 = var_50h;
0x0004d00e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0004d010 cmp r2, 0 |
0x0004d012 it ne |
| if (r2 != 0) {
0x0004d014 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x0004d016 add.w r2, sl, 8 | r2 = sl + 8;
0x0004d01a it ne |
| if (r2 == 0) {
0x0004d01c ldrne r3, [r3] | r3 = *(r3);
| }
0x0004d01e mul r2, r6, r2 | r2 = r6 * r2;
0x0004d022 ittee eq |
| if (r2 != 0) {
0x0004d024 moveq r4, 0 | r4 = 0;
| }
| if (r2 != 0) {
0x0004d026 streq r4, [sp, 0x28] | var_0h = r4;
| }
| if (r2 == 0) {
0x0004d028 strne r3, [sp, 0x28] | var_0h = r3;
| }
| if (r2 == 0) {
0x0004d02a lslne r4, r3, 1 | r4 = r3 << 1;
| }
0x0004d02c add.w r2, r4, r2, lsl 3 | r2 = r4 + (r2 << 3);
0x0004d030 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0004d032 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x0004d036 mov r8, r0 | r8 = r0;
0x0004d038 cmp r0, 0 |
| if (r0 == 0) {
0x0004d03a beq.w 0x4d65e | goto label_99;
| }
0x0004d03e lsls r6, r6, 5 | r6 <<= 5;
0x0004d040 movs r2, 0x20 | r2 = 0x20;
0x0004d042 movs r1, 0 | r1 = 0;
0x0004d044 lsl.w r5, sl, 2 | r5 = sl << 2;
0x0004d048 adds r7, r0, r6 | r7 = r0 + r6;
0x0004d04a mov r0, r7 | r0 = r7;
0x0004d04c add r6, r7 | r6 += r7;
0x0004d04e blx 0x62ec | fcn_000062ec ();
0x0004d052 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004d054 mov r2, r6 | r2 = r6;
0x0004d056 lsls r0, r3, 1 | r0 = r3 << 1;
0x0004d058 add.w r1, r8, r3, lsl 6 | r1 = r8 + (r3 << 6);
0x0004d05c mov r3, r8 | r3 = r8;
| do {
0x0004d05e str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x0004d060 adds r3, 0x20 | r3 += 0x20;
0x0004d062 cmp r3, r1 |
0x0004d064 add r2, r5 | r2 += r5;
0x0004d066 bne 0x4d05e |
| } while (r3 != r1);
0x0004d068 ldr r3, [sp, 0x28] | r3 = var_0h;
0x0004d06a cmp r3, 0 |
| if (r3 != 0) {
0x0004d06c bne.w 0x4d52c | goto label_100;
| }
0x0004d070 ldr.w r3, [fp, 0x88] | r3 = *(arg_88h);
0x0004d074 cmp r3, 0x30 |
0x0004d076 it hs |
| if (r3 < 0x30) {
0x0004d078 movhs r3, 0x30 | r3 = 0x30;
| }
0x0004d07a strh r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0004d07c cmp.w sl, 0 |
| if (sl == 0) {
0x0004d080 beq.w 0x4d552 | goto label_101;
| }
0x0004d084 ldr r3, [sp, 0x28] | r3 = var_0h;
0x0004d086 str r3, [sp, 0x44] | var_44h = r3;
| label_50:
0x0004d088 ldrh.w r2, [sp, 0x50] | r2 = var_50h;
0x0004d08c movs r4, 1 | r4 = 1;
0x0004d08e movs r1, 0 | r1 = 0;
0x0004d090 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x0004d094 str r1, [sp, 0x3c] | var_3ch = r1;
0x0004d096 sub.w r3, r2, 0xa | r3 = r2 - 0xa;
0x0004d09a str r2, [sp, 0x60] | var_60h = r2;
0x0004d09c sxth r3, r3 | __asm ("sxth r3, r3");
0x0004d09e mov r2, r1 | r2 = r1;
0x0004d0a0 str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h]");
0x0004d0a4 str r3, [sp, 0x64] | var_64h = r3;
0x0004d0a6 mov r3, r4 | r3 = r4;
0x0004d0a8 mov r4, r7 | r4 = r7;
0x0004d0aa mov r7, r3 | r7 = r3;
0x0004d0ac str r1, [sp, 0x34] | var_34h = r1;
0x0004d0ae str r1, [sp, 0x48] | var_48h = r1;
0x0004d0b0 strd fp, sb, [sp, 0x68] | __asm ("strd fp, sb, [sp, 0x68]");
0x0004d0b4 str.w sl, [sp, 0x58] | __asm ("str.w sl, [var_58h]");
0x0004d0b8 strd r8, r5, [sp, 0x70] | __asm ("strd r8, r5, [sp, 0x70]");
| label_45:
0x0004d0bc cmp r7, 0 |
| if (r7 == 0) {
0x0004d0be beq.w 0x4d2d4 | goto label_102;
| }
0x0004d0c2 lsls r3, r2, 2 | r3 = r2 << 2;
0x0004d0c4 mov.w sl, 0 | sl = 0;
0x0004d0c8 add.w r8, r4, 0x20 | r8 = r4 + 0x20;
0x0004d0cc str r4, [sp, 0x5c] | var_5ch = r4;
0x0004d0ce str r3, [sp, 0x30] | var_8h = r3;
0x0004d0d0 mov r6, sl | r6 = sl;
0x0004d0d2 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0004d0d4 str r2, [sp, 0x40] | var_40h = r2;
0x0004d0d6 str r7, [sp, 0x38] | var_38h = r7;
0x0004d0d8 subs r3, 0x32 | r3 -= 0x32;
0x0004d0da str r3, [sp, 0x54] | var_54h = r3;
| label_44:
0x0004d0dc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d0de ldr r5, [r3, 0x40] | r5 = *((r3 + 0x40));
0x0004d0e0 sub.w r3, r8, 0x20 | r3 = r8 - 0x20;
0x0004d0e4 str r3, [sp, 0x2c] | var_4h = r3;
0x0004d0e6 cmp r5, 0 |
| if (r5 == 0) {
0x0004d0e8 beq.w 0x4d2c0 | goto label_103;
| }
0x0004d0ec str r6, [sp, 0x24] | var_24h = r6;
0x0004d0ee b 0x4d0f8 |
| while (r3 != r1) {
| label_37:
0x0004d0f0 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x0004d0f2 cmp r5, 0 |
| if (r5 == 0) {
0x0004d0f4 beq.w 0x4d2be | goto label_104;
| }
0x0004d0f8 ldrd r6, r7, [r8, -0x20] | __asm ("ldrd r6, r7, [r8, -0x20]");
0x0004d0fc ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0004d0fe ldr r3, [r5] | r3 = *(r5);
0x0004d100 vstr d8, [sp, 0x78] | __asm ("vstr d8, [sp, 0x78]");
0x0004d104 bic.w r1, r2, r7 | r1 = BIT_MASK (r2, r7);
0x0004d108 ldrsb r2, [r8, -0xa] | r2 = *((r8 - 0xa));
0x0004d10c bic.w r3, r3, r6 | r3 = BIT_MASK (r3, r6);
0x0004d110 orrs r3, r1 | r3 |= r1;
0x0004d112 bne 0x4d0f0 |
| }
0x0004d114 ldrd r0, r1, [r5, 8] | __asm ("ldrd r0, r1, [r5, 8]");
0x0004d118 and.w r4, r6, r0 | r4 = r6 & r0;
0x0004d11c and.w r3, r7, r1 | r3 = r7 & r1;
0x0004d120 orrs r3, r4 | r3 |= r4;
| if (r3 != r4) {
0x0004d122 bne 0x4d0f0 | goto label_37;
| }
0x0004d124 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0004d126 ldrsh sb, [r8, -0x10] | sb = *((r8 - 0x10));
0x0004d12a lsls r4, r3, 0x11 | r4 = r3 << 0x11;
| if (r4 >= r3) {
0x0004d12c bpl 0x4d134 | goto label_105;
| }
0x0004d12e cmp.w sb, 2 |
| if (sb <= 2) {
0x0004d132 ble 0x4d0f0 | goto label_37;
| }
| label_105:
0x0004d134 orrs r7, r1 | r7 |= r1;
0x0004d136 ldrh r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x0004d138 uxth.w sb, sb | sb = (int16_t) sb;
0x0004d13c orrs r6, r0 | r6 |= r0;
0x0004d13e ldrsh.w r0, [r5, 0x12] | r0 = *((r5 + 0x12));
0x0004d142 add r1, sb | r1 += sb;
0x0004d144 str r2, [sp, 0x14] | var_14h = r2;
0x0004d146 sxth r1, r1 | __asm ("sxth r1, r1");
0x0004d148 bl 0x2743c | fcn_0002743c (r0, r1);
0x0004d14c ldrsh r1, [r8, -0xc] | r1 = *((r8 - 0xc));
0x0004d150 bl 0x2743c | fcn_0002743c (r0, r1);
0x0004d154 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004d156 mov fp, r0 |
0x0004d158 ldrh r3, [r5, 0x16] | r3 = *((r5 + 0x16));
0x0004d15a cmp r2, 0 |
0x0004d15c add sb, r3 | sb += r3;
0x0004d15e sxth.w sb, sb | __asm ("sxth.w sb, sb");
| if (r2 < 0) {
0x0004d162 blt 0x4d25a | goto label_106;
| }
0x0004d164 ldrd r0, r1, [r8, -0x18] | __asm ("ldrd r0, r1, [r8, -0x18]");
0x0004d168 strd r0, r1, [sp, 0x78] | __asm ("strd r0, r1, [sp, 0x78]");
| label_41:
0x0004d16c ldr r3, [sp, 0x28] | r3 = var_0h;
0x0004d16e cmp r3, r2 |
| if (r3 <= r2) {
0x0004d170 ble.w 0x4d278 | goto label_107;
| }
0x0004d174 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0004d176 ldrsh.w r4, [r3, r2, lsl 1] | offset_4 = r2 << 1;
| r4 = *((r3 + offset_4));
0x0004d17a add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x0004d17e str r3, [sp, 0x14] | var_14h = r3;
0x0004d180 cmp r4, 0 |
| if (r4 == 0) {
0x0004d182 beq.w 0x4d308 | goto label_108;
| }
| label_46:
0x0004d186 mov r0, fp | r0 = fp;
0x0004d188 mov r1, r4 | r1 = r4;
0x0004d18a str r2, [sp, 0x14] | var_14h = r2;
0x0004d18c bl 0x2743c | fcn_0002743c (r0, r1);
0x0004d190 adds r0, 5 | r0 += 5;
0x0004d192 mov ip, fp |
0x0004d194 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004d196 sxth.w fp, r0 | __asm ("sxth.w fp, r0");
0x0004d19a cmp.w sl, 0 |
| if (sl == 0) {
0x0004d19e beq 0x4d286 | goto label_109;
| }
| label_42:
0x0004d1a0 ldr r4, [sp, 0x18] | r4 = var_18h;
0x0004d1a2 movs r0, 0 | r0 = 0;
0x0004d1a4 b 0x4d1ae |
| while (r7 != r3) {
| label_38:
0x0004d1a6 adds r0, 1 | r0++;
0x0004d1a8 adds r4, 0x20 | r4 += 0x20;
0x0004d1aa cmp r0, sl |
| if (r0 == sl) {
0x0004d1ac beq 0x4d28e | goto label_110;
| }
0x0004d1ae ldrd r1, r3, [r4] | __asm ("ldrd r1, r3, [r4]");
0x0004d1b2 cmp r7, r3 |
0x0004d1b4 it eq |
| if (r7 == r3) {
0x0004d1b6 cmpeq r6, r1 | __asm ("cmpeq r6, r1");
| }
0x0004d1b8 bne 0x4d1a6 |
| }
0x0004d1ba ldrb r3, [r4, 0x16] | r3 = *((r4 + 0x16));
0x0004d1bc eors r3, r2 | r3 ^= r2;
0x0004d1be lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 < r3) {
0x0004d1c0 bmi 0x4d1a6 | goto label_38;
| }
0x0004d1c2 cmp sl, r0 |
| if (sl <= r0) {
0x0004d1c4 ble 0x4d28e | goto label_110;
| }
0x0004d1c6 ldrsh.w r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x0004d1ca cmp fp, r3 |
| if (fp > r3) {
0x0004d1cc bgt 0x4d0f0 | goto label_37;
| }
| if (fp == r3) {
0x0004d1ce beq.w 0x4d2ee | goto label_111;
| }
| label_43:
0x0004d1d2 ldrd r3, r0, [r8, -0x20] | __asm ("ldrd r3, r0, [r8, -0x20]");
0x0004d1d6 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0004d1d8 ldrd r6, r7, [sp, 0x78] | __asm ("ldrd r6, r7, [var_78h]");
0x0004d1dc orrs r3, r1 | r3 |= r1;
0x0004d1de ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x0004d1e0 strh.w sb, [r4, 0x10] | *((r4 + 0x10)) = sb;
0x0004d1e4 ldr.w sb, [sp, 0x30] | sb = var_8h;
0x0004d1e8 orrs r1, r0 | r1 |= r0;
0x0004d1ea strb r2, [r4, 0x16] | *((r4 + 0x16)) = r2;
0x0004d1ec str r3, [r4] | *(r4) = r3;
0x0004d1ee str r1, [r4, 4] | *((r4 + 4)) = r1;
0x0004d1f0 mov r2, sb | r2 = sb;
0x0004d1f2 ldr r1, [r8, -0x8] | r1 = *((r8 - 0x8));
0x0004d1f6 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0004d1f8 strh.w fp, [r4, 0x12] | *((r4 + 0x12)) = fp;
0x0004d1fc strh.w ip, [r4, 0x14] | *((r4 + 0x14)) = ip;
0x0004d200 strd r6, r7, [r4, 8] | __asm ("strd r6, r7, [r4, 8]");
0x0004d204 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0004d208 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0004d20a str.w r5, [r3, sb] | __asm ("str.w r5, [r3, sb]");
0x0004d20e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004d210 cmp r3, sl |
| if (r3 > sl) {
0x0004d212 bgt.w 0x4d0f0 | goto label_37;
| }
0x0004d216 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d218 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x0004d21a ldrsh.w r0, [r3, 0x12] | r0 = *((r3 + 0x12));
0x0004d21e adds r3, 0x20 | r3 += 0x20;
0x0004d220 ldrsh r6, [r3, -0x10] | r6 = *((r3 - 0x10));
0x0004d224 cmp r4, 1 |
0x0004d226 str r0, [sp, 0x34] | var_34h = r0;
0x0004d228 str r6, [sp, 0x3c] | var_3ch = r6;
| if (r4 == 1) {
0x0004d22a beq.w 0x4d402 | goto label_112;
| }
0x0004d22e movs r7, 0 | r7 = 0;
0x0004d230 movs r2, 1 | r2 = 1;
0x0004d232 b 0x4d244 |
| while (r1 > r0) {
0x0004d234 ldrsh.w r6, [r3, 0x14] | r6 = *((r3 + 0x14));
| label_40:
0x0004d238 mov r0, r1 | r0 = r1;
0x0004d23a mov r7, r2 | r7 = r2;
| label_39:
0x0004d23c adds r2, 1 | r2++;
0x0004d23e adds r3, 0x20 | r3 += 0x20;
0x0004d240 cmp r4, r2 |
| if (r4 == r2) {
0x0004d242 beq 0x4d2e6 | goto label_113;
| }
0x0004d244 ldrsh.w r1, [r3, 0x12] | r1 = *((r3 + 0x12));
0x0004d248 cmp r1, r0 |
0x0004d24a bgt 0x4d234 |
| }
| if (r1 != r0) {
0x0004d24c bne 0x4d23c | goto label_39;
| }
0x0004d24e ldrsh.w ip, [r3, 0x14] | ip = *((r3 + 0x14));
0x0004d252 cmp ip, r6 |
| if (ip <= r6) {
0x0004d254 ble 0x4d23c | goto label_39;
| }
0x0004d256 mov r6, ip | r6 = ip;
0x0004d258 b 0x4d238 | goto label_40;
| label_106:
0x0004d25a ldrh.w r3, [sp, 0x40] | r3 = var_40h;
0x0004d25e ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d260 str r5, [sp, 4] | *((sp + 4)) = r5;
0x0004d262 str r3, [sp] | *(sp) = r3;
0x0004d264 add r3, sp, 0x78 | r3 += var_78h;
0x0004d266 str r3, [sp, 8] | *((sp + 8)) = r3;
0x0004d268 ldr r2, [sp, 0x2c] | r2 = var_4h;
0x0004d26a ldrh r3, [r0, 0x2c] | r3 = *((r0 + 0x2c));
0x0004d26c ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x0004d26e bl 0x4c76c | r0 = fcn_0004c76c (r0, r1, r2, r3, r4, r5, r6);
0x0004d272 subs r2, r0, 0 | r2 = r0 - 0;
| if (r2 >= r0) {
0x0004d274 bge.w 0x4d16c | goto label_41;
| }
| label_107:
0x0004d278 sub.w ip, fp, 2 |
0x0004d27c sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x0004d280 cmp.w sl, 0 |
| if (sl != 0) {
0x0004d284 bne 0x4d1a0 | goto label_42;
| }
| do {
| label_109:
0x0004d286 mov r4, sl | r4 = sl;
0x0004d288 add.w sl, sl, 1 | sl++;
0x0004d28c b 0x4d2b6 | goto label_114;
| label_110:
0x0004d28e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004d290 cmp r3, sl |
0x0004d292 bgt 0x4d286 |
| } while (r3 > sl);
0x0004d294 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0004d296 cmp fp, r3 |
| if (fp > r3) {
0x0004d298 bgt.w 0x4d0f0 | goto label_37;
| }
0x0004d29c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0004d29e ite eq |
| if (fp != r3) {
0x0004d2a0 moveq r3, 1 | r3 = 1;
| }
| if (fp == r3) {
0x0004d2a2 movne r3, 0 | r3 = 0;
| }
0x0004d2a4 cmp ip, r1 |
0x0004d2a6 ite lt |
| if (ip >= r1) {
0x0004d2a8 movlt r3, 0 | r3 = 0;
| }
| if (ip < r1) {
0x0004d2aa andge r3, r3, 1 | r3 &= 1;
| }
0x0004d2ae cmp r3, 0 |
| if (r3 != 0) {
0x0004d2b0 bne.w 0x4d0f0 | goto label_37;
| }
0x0004d2b4 ldr r4, [sp, 0x48] | r4 = var_48h;
| label_114:
0x0004d2b6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d2b8 add.w r4, r3, r4, lsl 5 | r4 = r3 + (r4 << 5);
0x0004d2bc b 0x4d1d2 | goto label_43;
| label_104:
0x0004d2be ldr r6, [sp, 0x24] | r6 = var_24h;
| label_103:
0x0004d2c0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0004d2c2 adds r6, 1 | r6++;
0x0004d2c4 add.w r8, r8, 0x20 | r8 += 0x20;
0x0004d2c8 cmp r6, r3 |
| if (r6 != r3) {
0x0004d2ca bne.w 0x4d0dc | goto label_44;
| }
0x0004d2ce ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x0004d2d0 mov r7, sl | r7 = sl;
0x0004d2d2 ldr r2, [sp, 0x40] | r2 = var_40h;
| label_102:
0x0004d2d4 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0004d2d6 adds r2, 1 | r2++;
0x0004d2d8 mov r3, r4 | r3 = r4;
0x0004d2da ldr r4, [sp, 0x18] | r4 = var_18h;
0x0004d2dc cmp r1, r2 |
| if (r1 <= r2) {
0x0004d2de ble.w 0x4d408 | goto label_115;
| }
0x0004d2e2 str r3, [sp, 0x18] | var_18h = r3;
0x0004d2e4 b 0x4d0bc | goto label_45;
| label_113:
0x0004d2e6 str r7, [sp, 0x48] | var_48h = r7;
0x0004d2e8 str r0, [sp, 0x34] | var_34h = r0;
0x0004d2ea str r6, [sp, 0x3c] | var_3ch = r6;
0x0004d2ec b 0x4d0f0 | goto label_37;
| label_111:
0x0004d2ee ldrsh.w r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004d2f2 cmp sb, r3 |
| if (sb > r3) {
0x0004d2f4 bgt.w 0x4d0f0 | goto label_37;
| }
| if (sb != r3) {
0x0004d2f8 bne.w 0x4d1d2 | goto label_43;
| }
0x0004d2fc ldrsh.w r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0004d300 cmp r3, ip |
| if (r3 > ip) {
0x0004d302 bgt.w 0x4d1d2 | goto label_43;
| }
0x0004d306 b 0x4d0f0 | goto label_37;
| label_108:
0x0004d308 ldr r1, [sp, 0x28] | r1 = var_0h;
0x0004d30a movs r0, 0x64 | r0 = 0x64;
0x0004d30c str r2, [sp, 0x4c] | var_4ch = r2;
0x0004d30e subs r3, r1, r2 | r3 = r1 - r2;
0x0004d310 mul r0, r3, r0 | r0 = r3 * r0;
0x0004d314 bl 0xc4780 | r0 = fcn_000c4780 (r0, r1);
0x0004d318 mov r3, r0 | r3 = r0;
0x0004d31a ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0004d31c cmp r3, 7 |
0x0004d31e asr.w r0, r0, 0x1f | r0 >>= 0x1f;
| if (r3 > 7) {
0x0004d322 bgt 0x4d382 | goto label_116;
| }
0x0004d324 cmp r3, 1 |
| if (r3 <= 1) {
0x0004d326 ble 0x4d352 | goto label_117;
| }
0x0004d328 adds r1, r3, r3 | r1 = r3 + r3;
0x0004d32a adcs r0, r0 | __asm ("adcs r0, r0");
0x0004d32c cmp r1, 8 |
0x0004d32e sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
| if (r1 >= 8) {
0x0004d332 bhs.w 0x4d67c | goto label_118;
| }
0x0004d336 lsls r1, r3, 2 | r1 = r3 << 2;
0x0004d338 movs r3, 0x14 | r3 = 0x14;
| do {
| label_53:
0x0004d33a ldr r0, [pc, 0x390] |
0x0004d33c and r1, r1, 7 | r1 &= 7;
0x0004d340 sub.w r4, r3, 0xa | r4 = r3 - 0xa;
0x0004d344 add r0, pc | r0 = 0x9aa16;
0x0004d346 add.w r1, r0, r1, lsl 1 | r1 = r0 + (r1 << 1);
0x0004d34a ldrh.w r3, [r1, 0x408] | r3 = *((r1 + 0x408));
0x0004d34e add r4, r3 | r4 += r3;
0x0004d350 uxth r4, r4 | r4 = (int16_t) r4;
| label_117:
0x0004d352 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0004d354 add r4, r3 | r4 += r3;
0x0004d356 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d358 uxth r4, r4 | r4 = (int16_t) r4;
0x0004d35a ldrh r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x0004d35c lsls r0, r1, 0x11 | r0 = r1 << 0x11;
| if (r0 < r1) {
0x0004d35e bpl 0x4d36a |
0x0004d360 ldrsh.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x0004d364 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0004d366 cmp r0, r3 |
| if (r0 > r3) {
0x0004d368 bgt 0x4d376 | goto label_119;
| }
| }
0x0004d36a lsls r1, r1, 0x17 | r1 <<= 0x17;
0x0004d36c ldr r3, [sp, 0x50] | r3 = var_50h;
| if (r1 < r1) {
0x0004d36e bpl 0x4d376 |
0x0004d370 cmp r3, 0xa |
| if (r3 <= 0xa) {
0x0004d372 ble 0x4d37a | goto label_47;
| }
0x0004d374 ldr r3, [sp, 0x64] | r3 = var_64h;
| }
| label_119:
0x0004d376 cmp r3, 0xa |
| if (r3 > 0xa) {
0x0004d378 bgt 0x4d3b6 | goto label_120;
| }
| label_47:
0x0004d37a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004d37c sxth r4, r4 | __asm ("sxth r4, r4");
0x0004d37e strh r4, [r3] | *(r3) = r4;
0x0004d380 b 0x4d186 | goto label_46;
| label_116:
0x0004d382 clz r4, r0 | r4 &= r0;
| if (r0 == 0) {
0x0004d386 cbnz r0, 0x4d38e |
0x0004d388 clz r4, r3 | r4 &= r3;
0x0004d38c adds r4, 0x20 | r4 += 0x20;
| }
0x0004d38e rsb.w r4, r4, 0x3c | r4 = 0x3c - r4;
0x0004d392 lsr.w r1, r3, r4 | r1 = r3 >> r4;
0x0004d396 add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x0004d39a rsb.w ip, r4, 0x20 |
0x0004d39e lsls r3, r3, 1 | r3 <<= 1;
0x0004d3a0 lsl.w ip, r0, ip |
0x0004d3a4 subs r4, 0x20 | r4 -= 0x20;
0x0004d3a6 lsr.w r4, r0, r4 | r4 = r0 >> r4;
0x0004d3aa adds r3, 0x28 | r3 += 0x28;
0x0004d3ac orr.w r1, r1, ip | r1 |= ip;
0x0004d3b0 uxth r3, r3 | r3 = (int16_t) r3;
0x0004d3b2 orrs r1, r4 | r1 |= r4;
0x0004d3b4 b 0x4d33a |
| } while (1);
| label_120:
0x0004d3b6 asrs.w ip, r3, 0x1f |
0x0004d3ba sub.w r4, r4, 3 | r4 -= 3;
0x0004d3be itet eq |
| if (r1 == r4) {
0x0004d3c0 clzeq r1, r3 | __asm ("clzeq r1, r3");
| }
| if (r1 != r4) {
0x0004d3c2 blne 0x1d093e | __asm ("blne 0x1d093e");
| }
| if (r1 == r4) {
0x0004d3c6 invalid |
| }
0x0004d3ca rsb.w r1, r1, 0x3c | r1 = 0x3c - r1;
0x0004d3ce rsb.w r0, r1, 0x20 | r0 = 0x20 - r1;
0x0004d3d2 lsrs r3, r1 | r3 >>= r1;
0x0004d3d4 lsl.w r0, ip, r0 | r0 = ip << r0;
0x0004d3d8 orrs r3, r0 | r3 |= r0;
0x0004d3da sub.w r0, r1, 0x20 | r0 = r1 - 0x20;
0x0004d3de lsr.w r0, ip, r0 | r0 = ip >> r0;
0x0004d3e2 add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x0004d3e6 orrs r3, r0 | r3 |= r0;
0x0004d3e8 ldr r0, [pc, 0x2e4] |
0x0004d3ea and r3, r3, 7 | r3 &= 7;
0x0004d3ee add.w r1, r4, r1, lsl 1 | r1 = r4 + (r1 << 1);
0x0004d3f2 add r0, pc | r0 = 0x9aac6;
0x0004d3f4 add.w r3, r0, r3, lsl 1 | r3 = r0 + (r3 << 1);
0x0004d3f8 ldrh.w r3, [r3, 0x408] | r3 = *((r3 + 0x408));
0x0004d3fc add r3, r1 | r3 += r1;
0x0004d3fe uxth r4, r3 | r4 = (int16_t) r3;
0x0004d400 b 0x4d37a | goto label_47;
| label_112:
0x0004d402 movs r3, 0 | r3 = 0;
0x0004d404 str r3, [sp, 0x48] | var_48h = r3;
0x0004d406 b 0x4d0f0 | goto label_37;
| label_115:
0x0004d408 ldrd fp, sb, [sp, 0x68] | __asm ("ldrd fp, sb, [var_68h]");
0x0004d40c ldr.w sl, [sp, 0x58] | sl = var_58h;
0x0004d410 ldrd r8, r5, [sp, 0x70] | __asm ("ldrd r8, r5, [var_70h]");
0x0004d414 cmp r7, 0 |
| if (r7 == 0) {
0x0004d416 beq.w 0x4d680 | goto label_121;
| }
0x0004d41a cmp r7, 1 |
| if (r7 == 1) {
0x0004d41c beq 0x4d43e | goto label_122;
| }
0x0004d41e ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004d420 add.w r3, r2, 0x20 | r3 = r2 + 0x20;
0x0004d424 add.w r4, r2, r7, lsl 5 | r4 = r2 + (r7 << 5);
| do {
0x0004d428 ldrsh.w r0, [r3, 0x12] | r0 = *((r3 + 0x12));
0x0004d42c ldrsh.w r1, [r2, 0x12] | r1 = *((r2 + 0x12));
0x0004d430 cmp r0, r1 |
0x0004d432 it lt |
| if (r0 >= r1) {
0x0004d434 movlt r2, r3 | r2 = r3;
| }
0x0004d436 adds r3, 0x20 | r3 += 0x20;
0x0004d438 cmp r3, r4 |
0x0004d43a bne 0x4d428 |
| } while (r3 != r4);
0x0004d43c str r2, [sp, 0x18] | var_18h = r2;
| label_122:
0x0004d43e cmp.w sl, 0 |
| if (sl == 0) {
0x0004d442 beq 0x4d470 | goto label_49;
| }
0x0004d444 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d446 subs r0, r5, 4 | r0 = r5 - 4;
0x0004d448 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x0004d44a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d44c add r0, r1 | r0 += r1;
0x0004d44e subs r1, 4 | r1 -= 4;
0x0004d450 ldr r4, [r3, 4] | r4 = *((r3 + 4));
| do {
0x0004d452 ldr r2, [r1, 4]! | r2 = *((r1 += 4));
0x0004d456 adds r3, 0x60 | r3 += 0x60;
0x0004d458 str.w r2, [r3, 0x2f0] | __asm ("str.w r2, [r3, 0x2f0]");
0x0004d45c cmp r1, r0 |
0x0004d45e ldrb r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0004d460 strb.w r2, [r3, 0x2dc] | *((r3 + 0x2dc)) = r2;
0x0004d464 add.w r2, r4, r2, lsl 6 | r2 = r4 + (r2 << 6);
0x0004d468 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0004d46a str.w r2, [r3, 0x2a4] | __asm ("str.w r2, [r3, 0x2a4]");
0x0004d46e bne 0x4d452 |
| } while (r1 != r0);
| label_49:
0x0004d470 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d472 ldrh r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0004d474 and r3, r3, 0x180 | r3 &= 0x180;
0x0004d478 cmp.w r3, 0x100 |
0x0004d47c beq 0x4d4dc |
| while (r3 == 0) {
| label_48:
0x0004d47e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004d480 ldrb.w r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x0004d484 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0004d486 bfc r3, 2, 1 | value_5 = BIT_MASK (1, );
| value_5 = ~value_5;
| r3 &= value_5;
0x0004d48a strb.w r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0004d48e mov r3, r2 | r3 = r2;
| if (r1 != 0) {
0x0004d490 cbz r1, 0x4d4ac |
0x0004d492 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004d494 ldrsb.w r0, [r2, 0x16] | r0 = *((r2 + 0x16));
0x0004d498 strb.w r0, [r3, 0x31] | *((r3 + 0x31)) = r0;
0x0004d49c ldrh r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0004d49e ands ip, r3, 0x80 |
| if (ip == r3) {
0x0004d4a2 beq 0x4d55c | goto label_123;
| }
0x0004d4a4 ldr r2, [r1] | r2 = *(r1);
0x0004d4a6 cmp r0, r2 |
| if (r0 == r2) {
0x0004d4a8 beq.w 0x4d6a4 | goto label_124;
| }
| }
| label_51:
0x0004d4ac ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d4ae ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004d4b0 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0004d4b2 strh r3, [r2, 0x36] | *((r2 + 0x36)) = r3;
0x0004d4b4 ldr r2, [pc, 0x21c] |
0x0004d4b6 ldr r3, [pc, 0x210] | r3 = *(0x4d6ca);
0x0004d4b8 add r2, pc | r2 = 0x9ab90;
0x0004d4ba ldr r3, [r2, r3] | r3 = *(0x9ab90);
0x0004d4bc ldr r2, [r3] | r2 = *(0x9ab90);
0x0004d4be ldr r3, [sp, 0x84] | r3 = *((sp + 0x84));
0x0004d4c0 eors r2, r3 | r2 ^= r3;
0x0004d4c2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004d4c6 bne.w 0x4d6a0 | goto label_125;
| }
| label_54:
0x0004d4ca mov r1, r8 | r1 = r8;
0x0004d4cc mov r0, sb | r0 = sb;
0x0004d4ce add sp, 0x8c |
0x0004d4d0 vpop {d8} | __asm ("vpop {d8}");
0x0004d4d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004d4d8 b.w 0x2d144 | void (*0x2d144)() ();
0x0004d4dc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d4de ldr r2, [sp, 0x50] | r2 = var_50h;
0x0004d4e0 ldrb.w r3, [r3, 0x33] | r3 = *((r3 + 0x33));
0x0004d4e4 cmp r2, 0 |
0x0004d4e6 clz r3, r3 | r3 &= r3;
0x0004d4ea lsr.w r3, r3, 5 | r3 >>= 5;
0x0004d4ee it eq |
| if (r2 != 0) {
0x0004d4f0 moveq r3, 0 | r3 = 0;
| }
0x0004d4f2 cmp r3, 0 |
0x0004d4f4 beq 0x4d47e |
| }
0x0004d4f6 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004d4f8 add r3, sp, 0x78 | r3 += var_78h;
0x0004d4fa str r3, [sp, 8] | *((sp + 8)) = r3;
0x0004d4fc ldr r4, [sp, 0x20] | r4 = var_20h;
0x0004d4fe ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x0004d500 mov r0, r4 | r0 = r4;
0x0004d502 add r3, r5 | r3 += r5;
0x0004d504 ldr r3, [r3, -0x4] | r3 = *((r3 - 0x4));
0x0004d508 str r3, [sp, 4] | *((sp + 4)) = r3;
0x0004d50a add.w r3, sl, -1 | r3 = sl + -1;
0x0004d50e uxth r3, r3 | r3 = (int16_t) r3;
0x0004d510 str r3, [sp] | *(sp) = r3;
0x0004d512 movs r3, 0x80 | r3 = 0x80;
0x0004d514 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0004d516 bl 0x4c76c | fcn_0004c76c (r0, r1, r2, r3, r4, r5, r6);
0x0004d51a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0004d51c ldr r3, [r3] | r3 = *(r3);
0x0004d51e cmp r0, r3 |
0x0004d520 ittt eq |
| if (r0 != r3) {
0x0004d522 ldreq r2, [sp, 0x20] | r2 = var_20h;
| }
| if (r0 != r3) {
0x0004d524 moveq r3, 2 | r3 = 2;
| }
| if (r0 != r3) {
0x0004d526 strbeq r3, [r2, 0x33] | *((r2 + 0x33)) = r3;
| }
0x0004d52a b 0x4d47e | goto label_48;
| label_100:
0x0004d52c mla r3, r0, r5, r6 | __asm ("mla r3, r0, r5, r6");
0x0004d530 mov r2, r4 | r2 = r4;
0x0004d532 movs r1, 0 | r1 = 0;
0x0004d534 mov r0, r3 | r0 = r3;
0x0004d536 str r3, [sp, 0x44] | var_44h = r3;
0x0004d538 blx 0x62ec | fcn_000062ec ();
0x0004d53c ldr.w r3, [fp, 0x88] | r3 = *(arg_88h);
0x0004d540 cmp r3, 0x30 |
0x0004d542 it hs |
| if (r3 < 0x30) {
0x0004d544 movhs r3, 0x30 | r3 = 0x30;
| }
0x0004d546 strh r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0004d548 cmp.w sl, 0 |
| if (sl == 0) {
0x0004d54c bne 0x4d556 |
0x0004d54e ldr r3, [sp, 0x28] | r3 = var_0h;
0x0004d550 strb r3, [r7, 0x16] | *((r7 + 0x16)) = r3;
| label_101:
0x0004d552 str r7, [sp, 0x18] | var_18h = r7;
0x0004d554 b 0x4d470 | goto label_49;
| }
0x0004d556 movs r3, 0xff | r3 = 0xff;
0x0004d558 strb r3, [r7, 0x16] | *((r7 + 0x16)) = r3;
0x0004d55a b 0x4d088 | goto label_50;
| label_123:
0x0004d55c ldr r4, [sp, 0x18] | r4 = var_18h;
0x0004d55e cmp r0, 0 |
0x0004d560 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004d562 ldrd r6, r7, [r4, 8] | __asm ("ldrd r6, r7, [r4, 8]");
0x0004d566 strd r6, r7, [r2, 0x50] | __asm ("strd r6, r7, [r2, 0x50]");
| if (r0 <= 0) {
0x0004d56a ble 0x4d5f2 | goto label_126;
| }
0x0004d56c subs.w r2, sl, 0 | r2 = sl - 0;
0x0004d570 it ne |
| if (r2 == sl) {
0x0004d572 movne r2, 1 | r2 = 1;
| }
0x0004d574 cmp r0, 1 |
0x0004d576 it ne |
| if (r0 == 1) {
0x0004d578 movne r2, 0 | r2 = 0;
| }
0x0004d57a cmp r2, 0 |
| if (r2 != 0) {
0x0004d57c bne.w 0x4d6ae | goto label_127;
| }
| label_52:
0x0004d580 lsls r3, r3, 0x16 | r3 <<= 0x16;
| if (r3 >= r3) {
0x0004d582 bpl 0x4d4ac | goto label_51;
| }
0x0004d584 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d586 cmp.w sl, 0 |
0x0004d58a ldr r2, [r1] | r2 = *(r1);
0x0004d58c ldrsb.w r3, [r3, 0x31] | r3 = *((r3 + 0x31));
0x0004d590 sub.w r3, r3, r2 | r3 -= r2;
0x0004d594 clz r3, r3 | r3 &= r3;
0x0004d598 lsr.w r3, r3, 5 | r3 >>= 5;
0x0004d59c it eq |
| if (sl != 0) {
0x0004d59e moveq r3, 0 | r3 = 0;
| }
0x0004d5a0 cmp r3, 0 |
| if (r3 == 0) {
0x0004d5a2 beq 0x4d4ac | goto label_51;
| }
0x0004d5a4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0004d5a6 add r2, sp, 0x78 | r2 += var_78h;
0x0004d5a8 str r2, [sp, 8] | *((sp + 8)) = r2;
0x0004d5aa add.w r3, sl, -1 | r3 = sl + -1;
0x0004d5ae ldr r4, [sp, 0x20] | r4 = var_20h;
0x0004d5b0 uxth r3, r3 | r3 = (int16_t) r3;
0x0004d5b2 ldr r2, [r0, 0x18] | r2 = *((r0 + 0x18));
0x0004d5b4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0004d5b8 add r2, r5 | r2 += r5;
0x0004d5ba ldr r2, [r2, -0x4] | r2 = *((r2 - 0x4));
0x0004d5be vstr d16, [sp, 0x78] | __asm ("vstr d16, [sp, 0x78]");
0x0004d5c2 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x0004d5c6 movs r3, 0 | r3 = 0;
0x0004d5c8 mov r2, r0 | r2 = r0;
0x0004d5ca mov r0, r4 | r0 = r4;
0x0004d5cc bl 0x4c76c | fcn_0004c76c (r0, r1, r2, r3, r4, r5, r6);
0x0004d5d0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0004d5d2 ldr r3, [r3] | r3 = *(r3);
0x0004d5d4 cmp r0, r3 |
| if (r0 != r3) {
0x0004d5d6 bne.w 0x4d4ac | goto label_51;
| }
0x0004d5da ldr r1, [sp, 0x20] | r1 = var_20h;
0x0004d5dc ldrb.w r3, [r1, 0x34] | r3 = *((r1 + 0x34));
0x0004d5e0 orr r3, r3, 8 | r3 |= 8;
0x0004d5e4 strb.w r3, [r1, 0x34] | *((r1 + 0x34)) = r3;
0x0004d5e8 ldrd r2, r3, [sp, 0x78] | __asm ("ldrd r2, r3, [var_78h]");
0x0004d5ec strd r2, r3, [r1, 0x50] | __asm ("strd r2, r3, [r1, 0x50]");
0x0004d5f0 b 0x4d4ac | goto label_51;
| label_126:
0x0004d5f2 mov r6, r2 | r6 = r2;
0x0004d5f4 strb.w ip, [r2, 0x31] | *((r2 + 0x31)) = ip;
0x0004d5f8 cmp.w sl, 0 |
| if (sl == 0) {
0x0004d5fc beq.w 0x4d4ac | goto label_51;
| }
0x0004d600 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0004d602 add r2, r5 | r2 += r5;
0x0004d604 ldr r0, [r2, -0x4] | r0 = *((r2 - 0x4));
0x0004d608 ldr r2, [r0, 0x28] | r2 = *((r0 + 0x28));
0x0004d60a lsls r7, r2, 0x13 | r7 = r2 << 0x13;
| if (r7 < r2) {
0x0004d60c bmi 0x4d580 | goto label_52;
| }
0x0004d60e and r2, r2, 0x104 | r2 &= 0x104;
0x0004d612 cmp.w r2, 0x104 |
| if (r2 == 0x104) {
0x0004d616 beq 0x4d580 | goto label_52;
| }
0x0004d618 add.w r3, sl, -1 | r3 = sl + -1;
0x0004d61c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0004d620 uxth r3, r3 | r3 = (int16_t) r3;
0x0004d622 str r0, [sp, 4] | *((sp + 4)) = r0;
0x0004d624 mov r2, r4 | r2 = r4;
0x0004d626 str r3, [sp] | *(sp) = r3;
0x0004d628 add r3, sp, 0x78 | r3 += var_78h;
0x0004d62a str r3, [sp, 8] | *((sp + 8)) = r3;
0x0004d62c mov r0, r6 | r0 = r6;
0x0004d62e mov.w r3, 0x800 | r3 = 0x800;
0x0004d632 vstr d16, [sp, 0x78] | __asm ("vstr d16, [sp, 0x78]");
0x0004d636 bl 0x4c76c | fcn_0004c76c (r0, r1, r2, r3, r4, r5, r6);
0x0004d63a ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0004d63c ldr r3, [r1] | r3 = *(r1);
0x0004d63e cmp r0, r3 |
| if (r0 == r3) {
0x0004d640 bne 0x4d658 |
0x0004d642 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d644 ldrb.w r3, [r0, 0x34] | r3 = *((r0 + 0x34));
0x0004d648 orr r3, r3, 4 | r3 |= 4;
0x0004d64c strb.w r3, [r0, 0x34] | *((r0 + 0x34)) = r3;
0x0004d650 ldrd r2, r3, [sp, 0x78] | __asm ("ldrd r2, r3, [var_78h]");
0x0004d654 strd r2, r3, [r0, 0x50] | __asm ("strd r2, r3, [r0, 0x50]");
| }
0x0004d658 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d65a ldrh r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0004d65c b 0x4d580 | goto label_52;
| label_99:
0x0004d65e ldr r2, [pc, 0x78] |
0x0004d660 ldr r3, [pc, 0x64] | r3 = *(0x4d6c8);
0x0004d662 add r2, pc | r2 = 0x9ad40;
0x0004d664 ldr r3, [r2, r3] | r3 = *(0x9ad40);
0x0004d666 ldr r2, [r3] | r2 = *(0x9ad40);
0x0004d668 ldr r3, [sp, 0x84] | r3 = *((sp + 0x84));
0x0004d66a eors r2, r3 | r2 ^= r3;
0x0004d66c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004d670 bne 0x4d6a0 | goto label_125;
| }
0x0004d672 add sp, 0x8c |
0x0004d674 vpop {d8} | __asm ("vpop {d8}");
0x0004d678 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_118:
0x0004d67c movs r3, 0x1e | r3 = 0x1e;
0x0004d67e b 0x4d33a | goto label_53;
| label_121:
0x0004d680 ldr r1, [pc, 0x58] |
0x0004d682 mov r0, fp | r0 = fp;
0x0004d684 add r1, pc | r1 = 0x9ad64;
0x0004d686 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0004d68a ldr r2, [pc, 0x54] |
0x0004d68c ldr r3, [pc, 0x38] | r3 = *(0x4d6c8);
0x0004d68e add r2, pc | r2 = 0x9ad74;
0x0004d690 ldr r3, [r2, r3] | r3 = *(0x9ad74);
0x0004d692 ldr r2, [r3] | r2 = *(0x9ad74);
0x0004d694 ldr r3, [sp, 0x84] | r3 = *((sp + 0x84));
0x0004d696 eors r2, r3 | r2 ^= r3;
0x0004d698 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0004d69c beq.w 0x4d4ca | goto label_54;
| }
| label_125:
0x0004d6a0 blx 0x6430 | fcn_00006430 ();
| label_124:
0x0004d6a4 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d6a6 movs r2, 2 | r2 = 2;
0x0004d6a8 strb.w r2, [r0, 0x33] | *((r0 + 0x33)) = r2;
0x0004d6ac b 0x4d580 | goto label_52;
| label_127:
0x0004d6ae lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x0004d6b0 itttt ne |
| if (r2 == r3) {
0x0004d6b2 ldrne r0, [sp, 0x20] | r0 = var_20h;
| }
| if (r2 == r3) {
0x0004d6b4 ldrbne r2, [r0, 0x34] | r2 = *((r0 + 0x34));
| }
| if (r2 == r3) {
0x0004d6b8 orrne r2, r2, 4 | r2 |= 4;
| }
| if (r2 != r3) {
0x0004d6bc strb.w r2, [r0, 0x34] | *((r0 + 0x34)) = r2;
| }
0x0004d6c0 b 0x4d580 | goto label_52;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4d6e4).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4df08).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4f02c */
| #include <stdint.h>
|
; (fcn) fcn.0004f02c () | void fcn_0004f02c (int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_78h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004f02c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0004f030 sub sp, 0x44 |
0x0004f032 str r3, [sp, 0x24] | var_24h = r3;
0x0004f034 mov sl, r0 | sl = r0;
0x0004f036 ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x0004f038 ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x0004f03a ldr r5, [sp, 0x68] | r5 = *(arg_68h);
0x0004f03c str r3, [sp, 0x1c] | var_1ch = r3;
0x0004f03e ldrd sb, r3, [sp, 0x70] | __asm ("ldrd sb, r3, [arg_70h]");
0x0004f040 str r3, [sp, 0x70] | *((sp + 0x70)) = r3;
0x0004f042 strd r2, r1, [sp, 0x2c] | __asm ("strd r2, r1, [var_2ch]");
0x0004f046 str r3, [sp, 0x10] | var_10h = r3;
0x0004f048 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x0004f04a str r3, [sp, 0x20] | var_20h = r3;
0x0004f04c cmp r6, 0 |
| if (r6 == 0) {
0x0004f04e beq.w 0x4f2f4 | goto label_7;
| }
| label_0:
0x0004f052 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0004f056 ldr.w r2, [sl, 0x38] | r2 = *((sl + 0x38));
0x0004f05a subs r3, 1 | r3--;
0x0004f05c str r3, [sp, 0x14] | var_14h = r3;
0x0004f05e subs r3, r2, 1 | r3 = r2 - 1;
0x0004f060 str r3, [sp, 0x18] | var_18h = r3;
0x0004f062 str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x0004f066 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004f068 str r2, [sp, 0x28] | var_28h = r2;
0x0004f06a adds r3, 1 | r3++;
| if (r3 == 1) {
0x0004f06c beq.w 0x4f302 | goto label_8;
| }
| label_1:
0x0004f070 ldr r7, [r5, 0x14] | r7 = *((r5 + 0x14));
0x0004f072 cmp r7, 0 |
| if (r7 <= 0) {
0x0004f074 ble 0x4f0c2 | goto label_9;
| }
0x0004f076 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004f078 movs r4, 0 | r4 = 0;
0x0004f07a ldr r7, [sp, 0x18] | r7 = var_18h;
0x0004f07c mov fp, r4 |
0x0004f07e sub.w r8, r3, 4 | r8 = r3 - 4;
| do {
0x0004f082 ldr r0, [r5] | r0 = *(r5);
0x0004f084 adds r4, 1 | r4++;
0x0004f086 ldr r1, [r8, 4]! | r1 = *((r8 += 4));
0x0004f08a ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0004f08c ubfx ip, r1, 0xf, 1 | ip = (r1 >> 0xf) & ((1 << 1) - 1);
0x0004f090 sxth r1, r1 | __asm ("sxth r1, r1");
0x0004f092 eor r3, r3, 0x20 | r3 ^= 0x20;
0x0004f096 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0004f09a orrs.w r3, ip, r3 | r3 = ip | r3;
| if (r3 == ip) {
0x0004f09e bne 0x4f0a6 |
0x0004f0a0 bl 0x277d4 | r0 = fcn_000277d4 (r0, r1);
0x0004f0a4 mov r1, r0 | r1 = r0;
| }
0x0004f0a6 add.w r2, r1, sb | r2 = r1 + sb;
0x0004f0aa mov r3, r7 | r3 = r7;
0x0004f0ac adds r2, 1 | r2++;
0x0004f0ae movs r1, 0x32 | r1 = 0x32;
0x0004f0b0 mov r0, r6 | r0 = r6;
0x0004f0b2 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0004f0b6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f0ba ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0004f0bc cmp r3, r4 |
0x0004f0be bgt 0x4f082 |
| } while (r3 > r4);
0x0004f0c0 mov r7, r3 | r7 = r3;
| label_9:
0x0004f0c2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004f0c4 cmp r3, 0 |
| if (r3 != 0) {
0x0004f0c6 bne 0x4f1b4 | void (*0x4f1b4)() ();
| }
0x0004f0c8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004f0ca sub.w r3, r3, 1 | r3--;
0x0004f0ce clz r3, r3 | r3 &= r3;
0x0004f0d2 lsrs r3, r3, 5 | r3 >>= 5;
0x0004f0d4 str r3, [sp, 0x34] | var_34h = r3;
0x0004f0d6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0004f0d8 cmp r3, 0 |
| if (r3 == 0) {
0x0004f0da beq.w 0x4f222 | goto label_10;
| }
0x0004f0de mov r1, r7 | r1 = r7;
0x0004f0e0 mov r0, sl | r0 = sl;
0x0004f0e2 bl 0x27744 | fcn_00027744 (r0, r1);
0x0004f0e6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0004f0e8 movs r1, 0x70 | r1 = 0x70;
0x0004f0ea ldr r4, [sp, 0x24] | r4 = var_24h;
0x0004f0ec mov r8, r0 | r8 = r0;
0x0004f0ee ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004f0f0 str r3, [sp] | *(sp) = r3;
0x0004f0f2 str r0, [sp, 0x30] | var_30h = r0;
0x0004f0f4 mov r0, r6 | r0 = r6;
0x0004f0f6 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0004f0f8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f0fc mov r1, r4 | r1 = r4;
0x0004f0fe mov r0, sl | r0 = sl;
0x0004f100 bl 0x45f30 | fcn_00045f30 (r0);
0x0004f102 invalid |
| if (r1 <= 0x70) {
0x0004f106 ble.w 0x4f390 | goto label_11;
| }
0x0004f10a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004f10c add.w fp, r8, r7 |
0x0004f110 str r7, [sp, 0x1c] | var_1ch = r7;
0x0004f112 mov r4, r8 | r4 = r8;
0x0004f114 ldr r7, [sp, 0x20] | r7 = var_20h;
0x0004f116 subs r3, 4 | r3 -= 4;
0x0004f118 mov r8, r3 | r8 = r3;
0x0004f11a str r3, [sp, 0x38] | var_38h = r3;
| do {
0x0004f11c ldr r0, [r5] | r0 = *(r5);
0x0004f11e ldr r2, [r8, 4]! | r2 = *((r8 += 4));
0x0004f122 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0004f124 ubfx ip, r2, 0xf, 1 | ip = (r2 >> 0xf) & ((1 << 1) - 1);
0x0004f128 sxth r1, r2 | __asm ("sxth r1, r2");
0x0004f12a eor r3, r3, 0x20 | r3 ^= 0x20;
0x0004f12e ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0004f132 orrs.w r3, ip, r3 | r3 = ip | r3;
| if (r3 == ip) {
0x0004f136 bne 0x4f13e |
0x0004f138 bl 0x277d4 | r0 = fcn_000277d4 (r0, r1);
0x0004f13c mov r1, r0 | r1 = r0;
| }
0x0004f13e adds r2, r1, 1 | r2 = r1 + 1;
0x0004f140 mov r3, r4 | r3 = r4;
0x0004f142 add r2, sb | r2 += sb;
0x0004f144 movs r1, 0x50 | r1 = 0x50;
0x0004f146 mov r0, r6 | r0 = r6;
0x0004f148 adds r4, 1 | r4++;
0x0004f14a str r7, [sp] | *(sp) = r7;
0x0004f14c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f150 cmp r4, fp |
0x0004f152 bne 0x4f11c |
| } while (r4 != fp);
0x0004f154 ldr r0, [r5] | r0 = *(r5);
0x0004f156 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0004f158 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0004f15a ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0004f15c cmp r0, r2 |
0x0004f15e ite ne |
| if (r0 == r2) {
0x0004f160 movne r3, 0 | r3 = 0;
| }
| if (r0 != r2) {
0x0004f162 andeq r3, r3, 1 | r3 &= 1;
| }
0x0004f166 cmp r3, 0 |
| if (r3 != 0) {
0x0004f168 bne.w 0x4f3d6 | goto label_12;
| }
| label_5:
0x0004f16c ldr r1, [sp, 0x24] | r1 = var_24h;
0x0004f16e ldr.w r0, [sl] | r0 = *(sl);
0x0004f172 bl 0x43864 | fcn_00043864 (r0, r1);
0x0004f176 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0004f178 movs r3, 0 | r3 = 0;
0x0004f17a movs r1, 0x60 | r1 = 0x60;
0x0004f17c strd r0, r7, [sp, 4] | __asm ("strd r0, r7, [var_4h]");
0x0004f180 str r3, [sp] | *(sp) = r3;
0x0004f182 mov r0, r6 | r0 = r6;
0x0004f184 mov r3, r7 | r3 = r7;
0x0004f186 mov r2, r4 | r2 = r4;
0x0004f188 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0004f18c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004f18e movs r1, 0x1c | r1 = 0x1c;
0x0004f190 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004f192 mov r0, r6 | r0 = r6;
0x0004f194 str r7, [sp, 4] | var_4h = r7;
0x0004f196 str r4, [sp] | *(sp) = r4;
0x0004f198 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0004f19c cmp r7, 1 |
| if (r7 == 1) {
0x0004f19e beq.w 0x4f344 | goto label_13;
| }
| label_10:
0x0004f222 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0004f226 cmp r3, 0 |
| if (r3 == 0) {
0x0004f228 beq 0x4f320 | goto label_14;
| }
0x0004f22a subs r3, 1 | r3--;
0x0004f22c uxtb r3, r3 | r3 = (int8_t) r3;
0x0004f22e strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x0004f232 adds r3, 0x26 | r3 += 0x26;
0x0004f234 ldr.w r4, [sl, r3, lsl 2] | offset_0 = r3 << 2;
| r4 = *((sl + offset_0));
| label_2:
0x0004f238 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004f23a ldr r0, [r5] | r0 = *(r5);
0x0004f23c ldrsh.w r1, [r3] | r1 = *(r3);
0x0004f240 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0004f242 eor r3, r3, 0x20 | r3 ^= 0x20;
0x0004f246 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0004f248 asrs r0, r0, 0xd | r0 >>= 0xd;
0x0004f24a orrs.w r3, r3, r1, lsr 31 | r3 |= (r1 >> 31);
| if (r3 == r3) {
0x0004f24e bne 0x4f256 |
0x0004f250 bl 0x277d4 | r0 = fcn_000277d4 (r0, r1);
0x0004f254 mov r1, r0 | r1 = r0;
| }
0x0004f256 movs r7, 0 | r7 = 0;
0x0004f258 adds r2, r1, 1 | r2 = r1 + 1;
0x0004f25a add r2, sb | r2 += sb;
0x0004f25c mov r3, r4 | r3 = r4;
0x0004f25e movs r1, 0x51 | r1 = 0x51;
0x0004f260 str r7, [sp] | *(sp) = r7;
0x0004f262 mov r0, r6 | r0 = r6;
0x0004f264 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f268 mov r3, r7 | r3 = r7;
0x0004f26a mov r2, r4 | r2 = r4;
0x0004f26c movs r1, 0xc | r1 = 0xc;
0x0004f26e str r7, [sp] | *(sp) = r7;
0x0004f270 mov r0, r6 | r0 = r6;
0x0004f272 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f276 ldr r2, [r5] | r2 = *(r5);
0x0004f278 mov r7, r0 | r7 = r0;
0x0004f27a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0004f27c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0004f27e cmp r2, r1 |
0x0004f280 ite ne |
| if (r2 == r1) {
0x0004f282 movne r3, 0 | r3 = 0;
| }
| if (r2 != r1) {
0x0004f284 andeq r3, r3, 1 | r3 &= 1;
| }
0x0004f288 cmp r3, 0 |
| if (r3 != 0) {
0x0004f28a bne.w 0x4f4aa | goto label_15;
| }
| label_6:
0x0004f28e ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x0004f292 movs r1, 0x70 | r1 = 0x70;
0x0004f294 ldrd r3, r2, [sp, 0x2c] | __asm ("ldrd r3, r2, [var_2ch]");
0x0004f298 mov r0, sl | r0 = sl;
0x0004f29a str r1, [sp] | *(sp) = r1;
0x0004f29c mov r1, r8 | r1 = r8;
0x0004f29e bl 0x4ef30 | fcn_0004ef30 (r0, r1, r2, r3, r4);
0x0004f2a2 movs r3, 0 | r3 = 0;
0x0004f2a4 mov r2, r8 | r2 = r8;
0x0004f2a6 movs r1, 0x1e | r1 = 0x1e;
0x0004f2a8 mov r0, r6 | r0 = r6;
0x0004f2aa str r4, [sp] | *(sp) = r4;
0x0004f2ac bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f2b0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0004f2b2 mov r0, r6 | r0 = r6;
0x0004f2b4 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0004f2b8 ldr r1, [r6] | r1 = *(r6);
0x0004f2ba ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0004f2bc ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0004f2c0 subs r2, r3, 2 | r2 = r3 - 2;
0x0004f2c2 it mi |
| if (r2 >= r3) {
0x0004f2c4 addmi r2, r3, -1 | r2 = r3 + -1;
| }
0x0004f2c8 cmp r1, 0 |
| if (r1 == 0) {
0x0004f2ca beq 0x4f372 | goto label_16;
| }
0x0004f2cc ldr r2, [pc, 0x204] |
0x0004f2ce add r2, pc | r2 = 0x9e7a6;
0x0004f2d0 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x0004f2d2 adds r2, 4 | r2 += 4;
| label_4:
0x0004f2d4 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0004f2d6 cmp r4, 0 |
| if (r4 == 0) {
0x0004f2d8 beq.w 0x4f1b4 | void (*0x4f1b4)() ();
| }
0x0004f2dc ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0004f2e0 cmp r3, 7 |
| if (r3 > 7) {
0x0004f2e2 bhi.w 0x4f1b4 | void (*0x4f1b4)() ();
| }
0x0004f2e6 adds r2, r3, 1 | r2 = r3 + 1;
0x0004f2e8 adds r3, 0x26 | r3 += 0x26;
0x0004f2ea strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0004f2ee str.w r4, [sl, r3, lsl 2] | __asm ("str.w r4, [sl, r3, lsl 2]");
0x0004f2f2 b 0x4f1b4 | void (*0x4f1b4)() ();
| label_7:
0x0004f2f4 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x0004f2f6 cbz r3, 0x4f364 | goto label_17;
| }
| label_3:
0x0004f2f8 mov r0, sl | r0 = sl;
0x0004f2fa bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x0004f2fe mov r6, r0 | r6 = r0;
0x0004f300 b 0x4f052 | goto label_0;
| label_8:
0x0004f302 movs r3, 0 | r3 = 0;
0x0004f304 movs r1, 0x30 | r1 = 0x30;
0x0004f306 str r3, [sp] | *(sp) = r3;
0x0004f308 mov r0, r6 | r0 = r6;
0x0004f30a ldrb r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0004f30c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004f30e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f312 b 0x4f070 | goto label_1;
| label_14:
0x0004f320 ldr.w r4, [sl, 0x2c] | r4 = *((sl + 0x2c));
0x0004f324 adds r4, 1 | r4++;
0x0004f326 str.w r4, [sl, 0x2c] | __asm ("str.w r4, [sl, 0x2c]");
0x0004f32a b 0x4f238 | goto label_2;
| label_13:
0x0004f344 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0004f346 cmp r1, 0 |
| if (r1 == 0) {
0x0004f348 beq.w 0x4f1b4 | void (*0x4f1b4)() ();
| }
0x0004f34c ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0004f350 cmp r3, 7 |
| if (r3 > 7) {
0x0004f352 bhi.w 0x4f1b4 | void (*0x4f1b4)() ();
| }
0x0004f356 adds r2, r3, 1 | r2 = r3 + 1;
0x0004f358 adds r3, 0x26 | r3 += 0x26;
0x0004f35a strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0004f35e str.w r1, [sl, r3, lsl 2] | __asm ("str.w r1, [sl, r3, lsl 2]");
0x0004f362 b 0x4f1b4 | void (*0x4f1b4)() ();
| label_17:
0x0004f364 ldr r3, [r0] | r3 = *(r0);
0x0004f366 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0004f368 lsls r4, r3, 0x1c | r4 = r3 << 0x1c;
0x0004f36a itt pl |
| if (r4 < r3) {
0x0004f36c movpl r3, 1 | r3 = 1;
| }
| if (r4 < r3) {
0x0004f36e strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0004f370 b 0x4f2f8 | goto label_3;
| label_16:
0x0004f372 add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x0004f376 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0004f378 cmp r7, 0 |
0x0004f37a it lt |
| if (r7 >= 0) {
0x0004f37c addlt r7, r3, -1 | r7 = r3 + -1;
| }
0x0004f380 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x0004f384 add.w r1, r2, r1, lsl 3 | r1 = r2 + (r1 << 3);
0x0004f388 add.w r2, r2, r7, lsl 3 | r2 += (r7 << 3);
0x0004f38c str r3, [r1, 8] | *((r1 + 8)) = r3;
0x0004f38e b 0x4f2d4 | goto label_4;
| label_11:
0x0004f390 ldr r2, [r5] | r2 = *(r5);
0x0004f392 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0004f394 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0004f396 cmp r2, r1 |
0x0004f398 ite ne |
| if (r2 == r1) {
0x0004f39a movne r3, 0 | r3 = 0;
| }
| if (r2 != r1) {
0x0004f39c andeq r3, r3, 1 | r3 &= 1;
| }
0x0004f3a0 cmp r3, 0 |
| if (r3 != 0) {
0x0004f3a2 bne 0x4f488 | goto label_18;
| }
0x0004f3a4 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0004f3a6 ldr.w r0, [sl] | r0 = *(sl);
| label_12:
0x0004f3d6 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0004f3d8 lsl.w fp, r7, 1 |
0x0004f3dc str r7, [sp, 0x3c] | var_3ch = r7;
0x0004f3de movs r4, 0 | r4 = 0;
0x0004f3e0 add r3, r7 | r3 += r7;
0x0004f3e2 ldr r7, [sp, 0x38] | r7 = var_38h;
0x0004f3e4 add.w r8, r3, 1 | r8 = r3 + 1;
0x0004f3e8 add.w r3, sb, 1 | r3 = sb + 1;
0x0004f3ec str.w sl, [sp, 0x38] | __asm ("str.w sl, [var_38h]");
0x0004f3f0 str r3, [sp, 0x34] | var_34h = r3;
0x0004f3f2 ldr.w sl, [sp, 0x24] | sl = var_24h;
0x0004f3f6 b 0x4f3fa |
| while (r4 != fp) {
0x0004f3f8 ldr r0, [r5] | r0 = *(r5);
0x0004f3fa ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0004f3fc ldr r1, [r7, 4]! | r1 = *((r7 += 4));
0x0004f400 eor r3, r3, 0x20 | r3 ^= 0x20;
0x0004f404 ubfx r2, r1, 0xf, 1 | r2 = (r1 >> 0xf) & ((1 << 1) - 1);
0x0004f408 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0004f40c orrs r2, r3 | r2 |= r3;
0x0004f40e sxth r1, r1 | __asm ("sxth r1, r1");
| if (r2 == r3) {
0x0004f410 bne 0x4f418 |
0x0004f412 bl 0x277d4 | r0 = fcn_000277d4 (r0, r1);
0x0004f416 mov r1, r0 | r1 = r0;
| }
0x0004f418 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x0004f41c adds r1, 1 | r1++;
0x0004f41e ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0004f422 add.w r2, r1, sb | r2 = r1 + sb;
0x0004f426 ldrsh r1, [r3, r4] | r1 = *((r3 + r4));
0x0004f428 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0004f42a eor r3, r3, 0x20 | r3 ^= 0x20;
0x0004f42e ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0004f432 orrs.w r3, r3, r1, lsr 31 | r3 |= (r1 >> 31);
0x0004f436 it ne |
| if (r3 == r3) {
0x0004f438 movne r0, r1 | r0 = r1;
| }
| if (r3 == r3) {
0x0004f43a bne 0x4f448 |
0x0004f43c strd r1, r2, [sp, 0x1c] | __asm ("strd r1, r2, [var_1ch]");
0x0004f440 bl 0x277d4 | fcn_000277d4 (r0, r1);
0x0004f444 ldrd r1, r2, [sp, 0x1c] | __asm ("ldrd r1, r2, [var_1ch]");
| }
0x0004f448 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0004f44a ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0004f44e cmp r3, r1 |
0x0004f450 mov.w r1, 0x34 | r1 = 0x34;
0x0004f454 itet ne |
| if (r3 == r1) {
0x0004f456 ldrne r3, [sp, 0x34] | r3 = var_34h;
| }
| if (r3 != r1) {
0x0004f458 moveq r0, sb | r0 = sb;
| }
| if (r3 == r1) {
0x0004f45a addne r0, r0, r3 | r0 += r3;
| }
0x0004f45c mov r3, r8 | r3 = r8;
0x0004f45e str r0, [sp] | *(sp) = r0;
0x0004f460 mov r0, r6 | r0 = r6;
0x0004f462 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f466 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0004f468 cmp r3, 0 |
| if (r3 > 0) {
0x0004f46a ble 0x4f47e |
0x0004f46c ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0004f46e add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004f472 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0004f476 mov.w r3, 0x10 | r3 = 0x10;
0x0004f47a strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0004f47e adds r4, 2 | r4 += 2;
0x0004f480 cmp r4, fp |
0x0004f482 bne 0x4f3f8 |
| }
0x0004f484 ldrd sl, r7, [sp, 0x38] | __asm ("ldrd sl, r7, [var_38h]");
| label_18:
0x0004f488 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0004f48a mov r0, r6 | r0 = r6;
0x0004f48c bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0004f490 b 0x4f16c | goto label_5;
| label_15:
0x0004f4aa ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004f4ac mov r2, sb | r2 = sb;
0x0004f4ae movs r1, 0x35 | r1 = 0x35;
0x0004f4b0 mov r0, r6 | r0 = r6;
0x0004f4b2 str r4, [sp] | *(sp) = r4;
0x0004f4b4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f4b8 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0004f4ba cmp r3, 0 |
| if (r3 <= 0) {
0x0004f4bc ble.w 0x4f28e | goto label_6;
| }
0x0004f4c0 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0004f4c2 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004f4c6 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0004f4ca movs r3, 0x90 | r3 = 0x90;
0x0004f4cc strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
0x0004f4d0 b 0x4f28e | goto label_6;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4f598 */
| #include <stdint.h>
|
; (fcn) fcn.0004f598 () | void fcn_0004f598 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0004f598 push.w {r4, r5, r6, r7, r8, lr} |
0x0004f59c movs r6, 0 | r6 = 0;
0x0004f59e sub sp, 8 |
0x0004f5a0 mov r4, r0 | r4 = r0;
0x0004f5a2 mov r8, r1 | r8 = r1;
0x0004f5a4 mov r3, r2 | r3 = r2;
0x0004f5a6 mov r7, r2 | r7 = r2;
0x0004f5a8 movs r1, 0x47 | r1 = 0x47;
0x0004f5aa mov r2, r6 | r2 = r6;
0x0004f5ac str r6, [sp] | *(sp) = r6;
0x0004f5ae bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f5b2 mov r3, r6 | r3 = r6;
0x0004f5b4 mov r2, r8 | r2 = r8;
0x0004f5b6 movs r1, 0x23 | r1 = 0x23;
0x0004f5b8 mov r0, r4 | r0 = r4;
0x0004f5ba str r6, [sp] | *(sp) = r6;
0x0004f5bc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f5c0 mov r3, r6 | r3 = r6;
0x0004f5c2 mov r2, r8 | r2 = r8;
0x0004f5c4 mov r5, r0 | r5 = r0;
0x0004f5c6 movs r1, 0x5e | r1 = 0x5e;
0x0004f5c8 mov r0, r4 | r0 = r4;
0x0004f5ca str r7, [sp] | *(sp) = r7;
0x0004f5cc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004f5d0 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0004f5d2 cmp r3, r6 |
| if (r3 > r6) {
0x0004f5d4 ble 0x4f5e6 |
0x0004f5d6 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0004f5d8 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004f5dc add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0004f5e0 movs r3, 0x80 | r3 = 0x80;
0x0004f5e2 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0004f5e6 ldr r1, [pc, 0x3c] |
0x0004f5e8 mov r2, r8 | r2 = r8;
0x0004f5ea mov r0, r4 | r0 = r4;
0x0004f5ec add r1, pc | r1 = 0x9ec16;
0x0004f5ee bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0004f5f2 ldr r3, [r4] | r3 = *(r4);
0x0004f5f4 cmp r5, 0 |
0x0004f5f6 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0004f5f8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0004f5fc it lt |
| if (r5 >= 0) {
0x0004f5fe addlt r5, r2, -1 | r5 = r2 + -1;
| }
| if (r3 == 0) {
0x0004f602 cbnz r3, 0x4f616 |
0x0004f604 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0004f606 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0004f60a add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
0x0004f60e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0004f610 add sp, 8 |
0x0004f612 pop.w {r4, r5, r6, r7, r8, pc} |
| }
0x0004f616 ldr r3, [pc, 0x10] |
0x0004f618 add r3, pc | r3 = 0x9ec46;
0x0004f61a adds r3, 4 | r3 += 4;
0x0004f61c str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0004f61e add sp, 8 |
0x0004f620 pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4f834 */
| #include <stdint.h>
|
; (fcn) fcn.0004f834 () | void fcn_0004f834 (int16_t arg_ch, int16_t arg_68h, int16_t arg_6ch, arithmetic x, int16_t arg_ach, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int32_t var_74h_2;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004f834 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004f838 sub sp, 0x84 |
0x0004f83a str r2, [sp, 0x24] | var_24h = r2;
0x0004f83c mov sl, r0 | sl = r0;
0x0004f83e ldr r2, [sp, 0xa8] | r2 = *(x);
0x0004f840 str r3, [sp, 0x38] | var_38h = r3;
0x0004f842 ldr r3, [r0, 0x2c] | r3 = *(xx2c);
0x0004f844 add.w r8, r2, 9 | r8 = r2 + 9;
0x0004f848 ldr.w fp, [r0, 8] | fp = *((r0 + 8));
0x0004f84c str r1, [sp, 0x14] | var_14h = r1;
0x0004f84e cmp r3, r8 |
0x0004f850 it lt |
| if (r3 >= r8) {
0x0004f852 movlt r3, r8 | r3 = r8;
| }
0x0004f854 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
0x0004f856 ldr r3, [r0] | r3 = *(r0);
0x0004f858 str r3, [sp, 0x18] | var_18h = r3;
0x0004f85a cmp.w fp, 0 |
| if (fp == 0) {
0x0004f85e beq.w 0x4fc34 | goto label_18;
| }
| label_3:
0x0004f862 ldr r4, [sp, 0x14] | r4 = var_14h;
0x0004f864 cmp r4, 0 |
0x0004f866 it ne |
| if (r4 != 0) {
0x0004f868 cmpne fp, 0 | __asm ("cmpne fp, 0");
| }
| if (r4 == 0) {
0x0004f86c beq 0x4f874 | goto label_0;
| }
0x0004f86e ldrb.w r7, [r4, 0x2b] | r7 = *((r4 + 0x2b));
0x0004f872 cbz r7, 0x4f87a |
| while (r0 == 0) {
| label_0:
0x0004f874 add sp, 0x84 |
0x0004f876 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0004f87a ldr.w r2, [pc, 0x708] |
0x0004f87e movs r3, 0x5c | r3 = 0x5c;
0x0004f880 ldr r5, [r4] | r5 = *(r4);
0x0004f882 ldr.w r0, [pc, 0x704] |
0x0004f886 add r2, pc | r2 = 0x9f810;
0x0004f888 addw r2, r2, 0x96c | __asm ("addw r2, r2, 0x96c");
0x0004f88c mov r1, r5 | r1 = r5;
0x0004f88e add r0, pc | r0 = 0x9f81c;
0x0004f890 bl 0x26574 | r0 = fcn_00026574 (r0, r1, r2, r3);
0x0004f894 cmp r0, 0 |
0x0004f896 beq 0x4f874 |
| }
0x0004f898 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x0004f89a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004f89c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0004f89e cmp r1, 0 |
| if (r1 == 0) {
0x0004f8a0 beq.w 0x4ff6c | goto label_19;
| }
0x0004f8a4 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0004f8a6 cmp r1, r2 |
| if (r1 == r2) {
0x0004f8a8 beq.w 0x4ff32 | goto label_20;
| }
0x0004f8ac adds r3, 0x10 | r3 += 0x10;
0x0004f8ae mov r2, r7 | r2 = r7;
| do {
0x0004f8b0 mov r0, r3 | r0 = r3;
0x0004f8b2 adds r2, 1 | r2++;
0x0004f8b4 ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0004f8b6 adds r3, 0x10 | r3 += 0x10;
0x0004f8b8 cmp r1, r4 |
0x0004f8ba bne 0x4f8b0 |
| } while (r1 != r4);
0x0004f8bc ldr r3, [r0] | r3 = *(r0);
0x0004f8be mov r4, r2 | r4 = r2;
0x0004f8c0 str r2, [sp, 0x4c] | var_4ch = r2;
0x0004f8c2 movs r1, 0x1c | r1 = 0x1c;
0x0004f8c4 mov r2, r5 | r2 = r5;
0x0004f8c6 mov r0, sl | r0 = sl;
0x0004f8c8 str r3, [sp] | *(sp) = r3;
0x0004f8ca movs r3, 0 | r3 = 0;
0x0004f8cc bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0004f8d0 cmp r0, 0 |
| if (r0 != 0) {
0x0004f8d2 bne 0x4f874 | goto label_0;
| }
0x0004f8d4 cmp r4, 1 |
| if (r4 != 1) {
0x0004f8d6 beq 0x4f8f2 |
0x0004f8d8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0004f8da lsls r4, r4, 4 | r4 <<= 4;
0x0004f8dc ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0004f8de ldr r1, [r1] | r1 = *(r1);
| label_13:
0x0004f8e0 ldr.w r3, [sl] | r3 = *(sl);
0x0004f8e4 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0004f8e6 add r3, r4 | r3 += r4;
0x0004f8e8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004f8ea ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0004f8ec cmp r3, 0 |
| if (r3 != 0) {
0x0004f8ee bne.w 0x4ff24 | goto label_21;
| }
| }
| label_12:
0x0004f8f2 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x0004f8f4 mov r0, sl | r0 = sl;
0x0004f8f6 ldr.w r2, [sl, 0x28] | r2 = *((sl + 0x28));
0x0004f8fa ldr r4, [sp, 0x14] | r4 = var_14h;
0x0004f8fc adds r3, 2 | r3 += 2;
0x0004f8fe ldr r1, [sp, 0xac] | r1 = *(arg_ach);
0x0004f900 cmp r3, r2 |
0x0004f902 it lt |
| if (r3 >= r2) {
0x0004f904 movlt r3, r2 | r3 = r2;
| }
0x0004f906 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0004f908 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x0004f90c movs r3, 0x70 | r3 = 0x70;
0x0004f90e str r3, [sp] | *(sp) = r3;
0x0004f910 mov r3, r4 | r3 = r4;
0x0004f912 bl 0x4ef30 | fcn_0004ef30 (r0, r1, r2, r3, r4);
0x0004f916 ldr r2, [sp, 0xa8] | r2 = *(x);
0x0004f918 mov r0, fp | r0 = fp;
0x0004f91a adds r1, r2, 6 | r1 = r2 + 6;
0x0004f91c ldr r2, [r4] | r2 = *(r4);
0x0004f91e str r1, [sp, 0x68] | var_68h = r1;
0x0004f920 bl 0x42f80 | fcn_00042f80 (r0, r1, r2);
0x0004f924 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f926 ldr r7, [r4, 8] | r7 = *((r4 + 8));
0x0004f928 adds r3, 4 | r3 += 4;
0x0004f92a str r3, [sp, 0x28] | var_28h = r3;
0x0004f92c ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f92e adds r3, 7 | r3 += 7;
0x0004f930 str r3, [sp, 0x50] | var_50h = r3;
0x0004f932 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f934 adds r3, 8 | r3 += 8;
0x0004f936 str r3, [sp, 0x6c] | var_6ch = r3;
0x0004f938 ldr r3, [sp, 0xac] | r3 = *(arg_ach);
0x0004f93a add.w ip, r3, 1 |
0x0004f93e cmp r7, 0 |
| if (r7 == 0) {
0x0004f940 beq.w 0x4ff68 | goto label_22;
| }
0x0004f944 ldr.w r3, [pc, 0x644] |
0x0004f948 mov.w lr, 1 | lr = 1;
0x0004f94c mov sb, ip | sb = ip;
0x0004f94e str.w lr, [sp, 0x3c] | __asm ("str.w lr, [var_3ch]");
0x0004f952 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x0004f956 add r3, pc | r3 = 0x9f8e6;
0x0004f958 addw r3, r3, 0x924 | __asm ("addw r3, r3, 0x924");
0x0004f95c str r3, [sp, 0x60] | var_60h = r3;
0x0004f95e ldr.w r3, [pc, 0x630] |
0x0004f962 add r3, pc | r3 = 0x9f8f8;
0x0004f964 adds r3, 4 | r3 += 4;
0x0004f966 str r3, [sp, 0x7c] | var_7ch = r3;
0x0004f968 ldr.w r3, [pc, 0x628] |
0x0004f96c add r3, pc | r3 = 0x9f904;
0x0004f96e str r3, [sp, 0x5c] | var_5ch = r3;
0x0004f970 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f972 adds r3, 1 | r3++;
0x0004f974 str r3, [sp, 0x34] | var_34h = r3;
0x0004f976 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f978 adds r3, 2 | r3 += 2;
0x0004f97a str r3, [sp, 0x20] | var_20h = r3;
0x0004f97c ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f97e adds r3, 3 | r3 += 3;
0x0004f980 str r3, [sp, 0x54] | var_54h = r3;
0x0004f982 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004f984 adds r3, 5 | r3 += 5;
0x0004f986 str r3, [sp, 0x58] | var_58h = r3;
0x0004f988 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0004f98a subs r3, 0 |
0x0004f98c it ne |
| if (r3 == 0) {
0x0004f98e movne r3, 1 | r3 = 1;
| }
0x0004f990 str r3, [sp, 0x48] | var_48h = r3;
0x0004f992 b 0x4f9bc | goto label_23;
| label_1:
0x0004f994 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0004f998 mov r0, r5 | r0 = r5;
0x0004f99a lsls r2, r6, 2 | r2 = r6 << 2;
0x0004f99c mov r1, r3 | r1 = r3;
0x0004f99e str r3, [sp, 0x70] | var_70h = r3;
0x0004f9a0 subs r5, r1, 1 | r5 = r1 - 1;
0x0004f9a2 mov r3, r4 | r3 = r4;
0x0004f9a4 str.w r5, [sl, 0x38] | __asm ("str.w r5, [sl, 0x38]");
0x0004f9a8 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0004f9ac str r0, [sp, 0x64] | var_64h = r0;
0x0004f9ae cmp r0, 0 |
| if (r0 != 0) {
0x0004f9b0 bne.w 0x4fc5e | goto label_24;
| }
| do {
| label_2:
0x0004f9b4 ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x0004f9b6 cmp r7, 0 |
| if (r7 == 0) {
0x0004f9b8 beq.w 0x4fe2c | goto label_25;
| }
| label_23:
0x0004f9bc ldr r3, [sp, 0x48] | r3 = var_48h;
0x0004f9be ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004f9c0 cmp r2, r7 |
0x0004f9c2 ite eq |
| if (r2 != r7) {
0x0004f9c4 moveq r3, 0 | r3 = 0;
| }
| if (r2 == r7) {
0x0004f9c6 andne r3, r3, 1 | r3 &= 1;
| }
0x0004f9ca cmp r3, 0 |
0x0004f9cc bne 0x4f9b4 |
| } while (r3 != 0);
0x0004f9ce ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0004f9d0 cmp r3, 0 |
0x0004f9d2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0004f9d4 it eq |
| if (r3 != 0) {
0x0004f9d6 moveq r3, 0 | r3 = 0;
| }
0x0004f9d8 str r3, [sp, 0x3c] | var_3ch = r3;
0x0004f9da ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004f9dc ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0004f9de ldrb.w r3, [r7, 0x37] | r3 = *((r7 + 0x37));
0x0004f9e2 lsls r2, r2, 0x18 | r2 <<= 0x18;
| if (r2 < r2) {
0x0004f9e4 bpl 0x4f9f0 |
0x0004f9e6 and r2, r3, 3 | r2 = r3 & 3;
0x0004f9ea cmp r2, 2 |
| if (r2 == 2) {
0x0004f9ec beq.w 0x4fe22 | goto label_26;
| }
| }
0x0004f9f0 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0004f9f2 ldrh r5, [r7, 0x34] | r5 = *((r7 + 0x34));
0x0004f9f4 it mi |
| if (r3 < r3) {
0x0004f9f6 ldrhmi r6, [r7, 0x32] | __asm ("ldrhmi r6, [r7, 0x32]");
| }
0x0004f9f8 ldr r4, [r7] | r4 = *(r7);
0x0004f9fa ite pl |
| if (r3 < r3) {
0x0004f9fc addpl r6, r5, -1 | r6 = r5 + -1;
| }
| if (r3 < r3) {
0x0004fa00 add.w r6, r6, -1 | r6 += -1;
| }
| label_9:
0x0004fa04 mov r2, r4 | r2 = r4;
0x0004fa06 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0004fa08 mov r0, fp | r0 = fp;
0x0004fa0a bl 0x42f80 | fcn_00042f80 (r0, r1, r2);
0x0004fa0e ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004fa10 mov r3, r4 | r3 = r4;
0x0004fa12 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0004fa14 mov r0, fp | r0 = fp;
0x0004fa16 movs r4, 0 | r4 = 0;
0x0004fa18 ldr r2, [r2] | r2 = *(r2);
0x0004fa1a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0004fa1e ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0004fa20 mov r0, fp | r0 = fp;
0x0004fa22 ldr.w r1, [sl, 0x2c] | r1 = *((sl + 0x2c));
0x0004fa26 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0004fa28 str r2, [sp] | *(sp) = r2;
0x0004fa2a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004fa2c adds r2, r6, r2 | r2 = r6 + r2;
0x0004fa2e cmp r2, r1 |
0x0004fa30 it lt |
| if (r2 >= r1) {
0x0004fa32 movlt r2, r1 | r2 = r1;
| }
0x0004fa34 movs r1, 0x70 | r1 = 0x70;
0x0004fa36 str.w r2, [sl, 0x2c] | __asm ("str.w r2, [sl, 0x2c]");
0x0004fa3a mov r2, sb | r2 = sb;
0x0004fa3c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fa40 mov r1, r7 | r1 = r7;
0x0004fa42 mov r0, sl | r0 = sl;
0x0004fa44 bl 0x45f30 | fcn_00045f30 (r0);
0x0004fa48 ldr.w r1, [pc, 0x54c] |
0x0004fa4c mov r0, fp | r0 = fp;
0x0004fa4e ldr r2, [r7] | r2 = *(r7);
0x0004fa50 add r1, pc | r1 = 0x9f9ec;
0x0004fa52 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0004fa56 ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x0004fa5a mov r2, r5 | r2 = r5;
0x0004fa5c movs r1, 0x47 | r1 = 0x47;
0x0004fa5e mov r0, fp | r0 = fp;
0x0004fa60 str r4, [sp] | *(sp) = r4;
0x0004fa62 mov r3, r8 | r3 = r8;
0x0004fa64 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fa68 ldrh r2, [r7, 0x32] | r2 = *((r7 + 0x32));
0x0004fa6a movs r1, 0x47 | r1 = 0x47;
0x0004fa6c ldr r3, [sp, 0x54] | r3 = var_54h;
0x0004fa6e mov r0, fp | r0 = fp;
0x0004fa70 str r4, [sp] | *(sp) = r4;
0x0004fa72 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fa76 mov r3, r4 | r3 = r4;
0x0004fa78 mov r2, sb | r2 = sb;
0x0004fa7a movs r1, 0x23 | r1 = 0x23;
0x0004fa7c mov r0, fp | r0 = fp;
0x0004fa7e str r4, [sp] | *(sp) = r4;
0x0004fa80 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fa84 movs r3, 1 | r3 = 1;
0x0004fa86 mov r2, sb | r2 = sb;
0x0004fa88 movs r1, 0x62 | r1 = 0x62;
0x0004fa8a str r0, [sp, 0x40] | var_40h = r0;
0x0004fa8c str r3, [sp] | *(sp) = r3;
0x0004fa8e mov r0, fp | r0 = fp;
0x0004fa90 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0004fa92 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fa96 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0004fa98 movs r1, 0x47 | r1 = 0x47;
0x0004fa9a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0004fa9c mov r0, fp | r0 = fp;
0x0004fa9e ldr.w r2, [r5, 0x1ec] | r2 = *((r5 + 0x1ec));
0x0004faa2 str r4, [sp] | *(sp) = r4;
0x0004faa4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004faa8 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0004faaa movs r3, 4 | r3 = 4;
0x0004faac mov r1, r4 | r1 = r4;
0x0004faae mov r0, sl | r0 = sl;
0x0004fab0 str r3, [sp] | *(sp) = r3;
0x0004fab2 str r2, [sp, 4] | var_4h = r2;
0x0004fab4 mov r2, r8 | r2 = r8;
0x0004fab6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0004fab8 str r4, [sp, 8] | var_8h = r4;
0x0004faba bl 0x422b0 | fcn_000422b0 (r0, r1, r2, r3, r4, r5, r6);
0x0004fabe mov r3, r8 | r3 = r8;
0x0004fac0 mov r2, r4 | r2 = r4;
0x0004fac2 movs r1, 0x47 | r1 = 0x47;
0x0004fac4 mov r0, fp | r0 = fp;
0x0004fac6 str r4, [sp] | *(sp) = r4;
0x0004fac8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004facc ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0004fad0 cmp r6, r4 |
0x0004fad2 str r3, [sp, 0x44] | var_44h = r3;
| if (r6 > r4) {
0x0004fad4 bgt.w 0x4f994 | goto label_1;
| }
| label_5:
0x0004fad8 ldr.w r3, [pc, 0x4c0] |
0x0004fadc movs r6, 0 | r6 = 0;
0x0004fade ldr r4, [sp, 0x28] | r4 = var_28h;
0x0004fae0 movs r1, 1 | r1 = 1;
0x0004fae2 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0004fae4 mov r0, sl | r0 = sl;
0x0004fae6 add r3, pc | r3 = 0x9fa86;
0x0004fae8 str r6, [sp, 8] | var_8h = r6;
0x0004faea addw r3, r3, 0x94c | __asm ("addw r3, r3, 0x94c");
0x0004faee str r3, [sp, 4] | var_4h = r3;
0x0004faf0 movs r3, 2 | r3 = 2;
0x0004faf2 str r3, [sp] | *(sp) = r3;
0x0004faf4 mov r3, r4 | r3 = r4;
0x0004faf6 bl 0x422b0 | fcn_000422b0 (r0, r1, r2, r3, r4, r5, r6);
0x0004fafa ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004fafc ldr.w r3, [r2, 0x1ec] | r3 = *((r2 + 0x1ec));
0x0004fb00 cmp r3, 0 |
| if (r3 == 0) {
0x0004fb02 beq.w 0x4fc46 | goto label_27;
| }
0x0004fb06 mov r3, r6 | r3 = r6;
0x0004fb08 mov r2, r4 | r2 = r4;
0x0004fb0a movs r1, 0x32 | r1 = 0x32;
0x0004fb0c str r6, [sp] | *(sp) = r6;
0x0004fb0e mov r0, fp | r0 = fp;
0x0004fb10 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fb14 mov r3, r6 | r3 = r6;
0x0004fb16 mov r5, r0 | r5 = r0;
0x0004fb18 mov r2, r4 | r2 = r4;
0x0004fb1a movs r1, 0xf | r1 = 0xf;
0x0004fb1c str r6, [sp] | *(sp) = r6;
0x0004fb1e mov r0, fp | r0 = fp;
0x0004fb20 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fb24 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004fb26 mov r3, r6 | r3 = r6;
0x0004fb28 mov r4, r0 | r4 = r0;
0x0004fb2a movs r1, 0x17 | r1 = 0x17;
0x0004fb2c mov r0, fp | r0 = fp;
0x0004fb2e str r2, [sp] | *(sp) = r2;
0x0004fb30 movs r2, 1 | r2 = 1;
0x0004fb32 str r2, [sp, 4] | var_4h = r2;
0x0004fb34 mov r2, sb | r2 = sb;
0x0004fb36 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0004fb3a ldr.w r3, [fp] | r3 = *(fp);
0x0004fb3e cmp r5, 0 |
0x0004fb40 ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0004fb44 mov r6, r0 | r6 = r0;
0x0004fb46 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0004fb4a it lt |
| if (r5 >= 0) {
0x0004fb4c addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x0004fb50 cmp r3, 0 |
| if (r3 != 0) {
0x0004fb52 bne.w 0x4fe1a | goto label_28;
| }
0x0004fb56 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0004fb5a add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0004fb5e add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_8:
0x0004fb62 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0004fb64 movs r2, 0 | r2 = 0;
0x0004fb66 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0004fb68 movs r1, 0x26 | r1 = 0x26;
0x0004fb6a str r2, [sp] | *(sp) = r2;
0x0004fb6c mov r0, fp | r0 = fp;
0x0004fb6e mov r2, sb | r2 = sb;
0x0004fb70 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fb74 ldr.w r3, [fp] | r3 = *(fp);
0x0004fb78 cmp r4, 0 |
0x0004fb7a ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0004fb7e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0004fb82 it lt |
| if (r4 >= 0) {
0x0004fb84 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0004fb88 cmp r3, 0 |
| if (r3 == 0) {
0x0004fb8a beq.w 0x4fdfa | goto label_29;
| }
0x0004fb8e ldr.w r3, [pc, 0x410] |
0x0004fb92 add r3, pc | r3 = 0x9fb38;
0x0004fb94 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0004fb96 adds r3, 4 | r3 += 4;
| label_7:
0x0004fb98 str r2, [r3, 8] | *((r3 + 8)) = r2;
| do {
0x0004fb9a ldr.w r3, [pc, 0x408] |
0x0004fb9e movs r4, 0 | r4 = 0;
0x0004fba0 mov r1, r4 | r1 = r4;
0x0004fba2 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0004fba4 mov r0, sl | r0 = sl;
0x0004fba6 str r4, [sp, 8] | var_8h = r4;
0x0004fba8 add r3, pc | r3 = 0x9fb52;
0x0004fbaa addw r3, r3, 0x974 | __asm ("addw r3, r3, 0x974");
0x0004fbae str r3, [sp, 4] | var_4h = r3;
0x0004fbb0 movs r3, 1 | r3 = 1;
0x0004fbb2 str r3, [sp] | *(sp) = r3;
0x0004fbb4 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0004fbb6 bl 0x422b0 | fcn_000422b0 (r0, r1, r2, r3, r4, r5, r6);
0x0004fbba ldr r3, [pc, 0x3ec] |
0x0004fbbc movs r1, 0x61 | r1 = 0x61;
0x0004fbbe ldr r5, [sp, 0x28] | r5 = var_28h;
0x0004fbc0 mov r0, fp | r0 = fp;
0x0004fbc2 ldr r2, [sp, 0x68] | r2 = var_68h;
0x0004fbc4 add r3, pc | r3 = 0x9fb72;
0x0004fbc6 str r4, [sp, 8] | var_8h = r4;
0x0004fbc8 str r3, [sp, 4] | var_4h = r3;
0x0004fbca movs r3, 3 | r3 = 3;
0x0004fbcc str r5, [sp] | *(sp) = r5;
0x0004fbce bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0004fbd2 str r4, [sp] | *(sp) = r4;
0x0004fbd4 movs r1, 0x7f | r1 = 0x7f;
0x0004fbd6 ldr r4, [sp, 0x38] | r4 = var_38h;
0x0004fbd8 mov r0, fp | r0 = fp;
0x0004fbda ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004fbdc mov r2, r4 | r2 = r4;
0x0004fbde bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fbe2 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004fbe4 mov r2, r4 | r2 = r4;
0x0004fbe6 movs r1, 0x80 | r1 = 0x80;
0x0004fbe8 mov r0, fp | r0 = fp;
0x0004fbea str r3, [sp] | *(sp) = r3;
0x0004fbec mov r3, r5 | r3 = r5;
0x0004fbee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fbf2 ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0004fbf4 movs r0, 0x6c | r0 = 0x6c;
0x0004fbf6 cmp r2, 0 |
| if (r2 > 0) {
0x0004fbf8 ble 0x4fc0c |
0x0004fbfa ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0004fbfe add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x0004fc02 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
0x0004fc06 movs r1, 8 | r1 = 8;
0x0004fc08 strh r1, [r3, -0x16] | *((r3 - 0x16)) = r1;
| }
0x0004fc0c ldr r3, [sp, 0x40] | r3 = var_40h;
0x0004fc0e cmp r3, 0 |
0x0004fc10 itt lt |
| if (r3 >= 0) {
0x0004fc12 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r3 < 0) {
0x0004fc16 str r3, [sp, 0x40] | var_40h = r3;
| }
0x0004fc18 ldr.w r3, [fp] | r3 = *(fp);
0x0004fc1c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0004fc20 cbnz r3, 0x4fc56 | goto label_30;
| }
0x0004fc22 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0004fc24 ldr.w r1, [fp, 0x68] | r1 = *(arg_68h);
0x0004fc28 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004fc2c add.w r3, r1, r3, lsl 3 | r3 = r1 + (r3 << 3);
| label_4:
0x0004fc30 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0004fc32 b 0x4f9b4 | goto label_2;
| label_18:
0x0004fc34 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0004fc36 cmp r3, 0 |
| if (r3 == 0) {
0x0004fc38 beq.w 0x4fdec | goto label_31;
| }
| label_6:
0x0004fc3c mov r0, sl | r0 = sl;
0x0004fc3e bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x0004fc42 mov fp, r0 |
0x0004fc44 b 0x4f862 | goto label_3;
| label_27:
0x0004fc46 str r3, [sp] | *(sp) = r3;
0x0004fc48 mov r2, sb | r2 = sb;
0x0004fc4a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0004fc4c movs r1, 0x26 | r1 = 0x26;
0x0004fc4e mov r0, fp | r0 = fp;
0x0004fc50 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fc54 b 0x4fb9a |
| } while (1);
| label_30:
0x0004fc56 ldr r3, [pc, 0x354] |
0x0004fc58 add r3, pc | r3 = 0x9fc0a;
0x0004fc5a adds r3, 4 | r3 += 4;
0x0004fc5c b 0x4fc30 | goto label_4;
| label_24:
0x0004fc5e mov r3, r4 | r3 = r4;
0x0004fc60 mov r2, r4 | r2 = r4;
0x0004fc62 movs r1, 8 | r1 = 8;
0x0004fc64 mov r0, fp | r0 = fp;
0x0004fc66 str r4, [sp] | *(sp) = r4;
0x0004fc68 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fc6c ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0004fc70 cmp r6, 1 |
0x0004fc72 str r3, [sp, 0x44] | var_44h = r3;
| if (r6 == 1) {
0x0004fc74 beq.w 0x4ff02 | goto label_32;
| }
| label_11:
0x0004fc78 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0004fc7a movs r4, 0 | r4 = 0;
0x0004fc7c str.w sb, [sp, 0x2c] | __asm ("str.w sb, [var_2ch]");
0x0004fc80 mov sb, r6 | sb = r6;
0x0004fc82 str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
0x0004fc86 sub.w r8, r3, 4 | r8 = r3 - 4;
0x0004fc8a ldr r6, [sp, 0x28] | r6 = var_28h;
0x0004fc8c strd r5, r8, [sp, 0x74] | __asm ("strd r5, r8, [var_74h]");
0x0004fc90 b 0x4fc94 |
| while (sb != r3) {
0x0004fc92 mov r4, r3 | r4 = r3;
0x0004fc94 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0004fc96 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0004fc98 ldr.w r1, [r3, r4, lsl 2] | offset_0 = r4 << 2;
| r1 = *((r3 + offset_0));
0x0004fc9c bl 0x45e44 | fcn_00045e44 (r0, r1);
0x0004fca0 movs r3, 0 | r3 = 0;
0x0004fca2 mov r5, r0 | r5 = r0;
0x0004fca4 mov r2, r4 | r2 = r4;
0x0004fca6 movs r1, 0x47 | r1 = 0x47;
0x0004fca8 str r3, [sp] | *(sp) = r3;
0x0004fcaa mov r0, fp | r0 = fp;
0x0004fcac ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004fcae bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fcb2 mov r3, r4 | r3 = r4;
0x0004fcb4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0004fcb6 movs r1, 0x5e | r1 = 0x5e;
0x0004fcb8 mov r0, fp | r0 = fp;
0x0004fcba str r6, [sp] | *(sp) = r6;
0x0004fcbc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fcc0 mov r2, r4 | r2 = r4;
0x0004fcc2 mov r1, r7 | r1 = r7;
0x0004fcc4 mov r0, fp | r0 = fp;
0x0004fcc6 bl 0x4f7e0 | fcn_0004f7e0 (r0, r1, r2);
0x0004fcca ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004fccc mov r2, r6 | r2 = r6;
0x0004fcce movs r1, 0x34 | r1 = 0x34;
0x0004fcd0 mov r0, fp | r0 = fp;
0x0004fcd2 adds r3, r4, r3 | r3 = r4 + r3;
0x0004fcd4 str r3, [sp] | *(sp) = r3;
0x0004fcd6 movs r3, 0 | r3 = 0;
0x0004fcd8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fcdc mov r2, r5 | r2 = r5;
0x0004fcde mov sl, r0 | sl = r0;
0x0004fce0 mvn r3, 1 | r3 = ~1;
0x0004fce4 mov r1, r0 | r1 = r0;
0x0004fce6 mov r0, fp | r0 = fp;
0x0004fce8 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0004fcec str sl, [r8, 4]! | *((r8 += 4)) = sl;
0x0004fcf0 ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0004fcf4 cmp r3, 0 |
0x0004fcf6 it gt |
| if (r3 <= 0) {
0x0004fcf8 ldrgt r2, [fp, 0x68] | r2 = *(arg_68h);
| }
0x0004fcfc add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0004fd00 ittt gt |
| if (r3 <= 0) {
0x0004fd02 addgt r2, r2, r3, lsl 3 | r2 += (r3 << 3);
| }
| if (r3 <= 0) {
0x0004fd06 movgt r3, 0x80 | r3 = 0x80;
| }
| if (r3 > 0) {
0x0004fd08 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0004fd0c adds r3, r4, 1 | r3 = r4 + 1;
0x0004fd0e cmp sb, r3 |
0x0004fd10 bne 0x4fc92 |
| }
0x0004fd12 ldrd r5, r8, [sp, 0x74] | __asm ("ldrd r5, r8, [var_74h]");
0x0004fd16 mov r6, sb | r6 = sb;
0x0004fd18 movs r3, 0 | r3 = 0;
0x0004fd1a mov r2, r6 | r2 = r6;
0x0004fd1c movs r1, 0x47 | r1 = 0x47;
0x0004fd1e str r3, [sp] | *(sp) = r3;
0x0004fd20 mov r0, fp | r0 = fp;
0x0004fd22 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004fd24 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x0004fd28 ldr.w sl, [sp, 0x30] | sl = var_30h;
0x0004fd2c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fd30 mov r1, r5 | r1 = r5;
0x0004fd32 mov r0, fp | r0 = fp;
0x0004fd34 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0004fd38 ldr.w r2, [fp] | r2 = *(fp);
0x0004fd3c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0004fd3e ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x0004fd42 ldrb.w r0, [r2, 0x57] | r0 = *((r2 + 0x57));
0x0004fd46 subs r3, 1 | r3--;
0x0004fd48 it mi |
| if (r3 >= 1) {
0x0004fd4a addmi r3, r1, -1 | r3 = r1 + -1;
| }
0x0004fd4e cmp r0, 0 |
| if (r0 != 0) {
0x0004fd50 bne.w 0x4fefa | goto label_33;
| }
0x0004fd54 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0004fd58 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0004fd5c add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
| label_10:
0x0004fd60 movs r5, 0 | r5 = 0;
0x0004fd62 str.w sl, [sp, 0x2c] | __asm ("str.w sl, [var_2ch]");
0x0004fd66 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0004fd68 mov sl, r5 | sl = r5;
0x0004fd6a str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0004fd6c ldr r5, [sp, 0x7c] | r5 = var_7ch;
0x0004fd6e b 0x4fd7c |
| while (r4 != sl) {
0x0004fd70 ldr.w r2, [fp] | r2 = *(fp);
0x0004fd74 ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x0004fd78 ldrb.w r0, [r2, 0x57] | r0 = *((r2 + 0x57));
0x0004fd7c ldr r2, [r8, 4]! | r2 = *((r8 += 4));
0x0004fd80 mov ip, r5 |
0x0004fd82 cmp r2, 0 |
0x0004fd84 it lt |
| if (r2 >= 0) {
0x0004fd86 addlt r2, r1, -1 | r2 = r1 + -1;
| }
0x0004fd8a add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
| if (r0 == 0) {
0x0004fd8e cbnz r0, 0x4fd98 |
0x0004fd90 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x0004fd94 add.w ip, r0, r2, lsl 3 |
| }
0x0004fd98 add.w r2, sl, r6 | r2 = sl + r6;
0x0004fd9c str.w r1, [ip, 8] | __asm ("str.w r1, [ip, 8]");
0x0004fda0 mov r3, sl | r3 = sl;
0x0004fda2 movs r1, 0x5e | r1 = 0x5e;
0x0004fda4 str r2, [sp] | *(sp) = r2;
0x0004fda6 mov r0, fp | r0 = fp;
0x0004fda8 mov r2, sb | r2 = sb;
0x0004fdaa bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fdae mov r2, sl | r2 = sl;
0x0004fdb0 mov r1, r7 | r1 = r7;
0x0004fdb2 mov r0, fp | r0 = fp;
0x0004fdb4 bl 0x4f7e0 | fcn_0004f7e0 (r0, r1, r2);
0x0004fdb8 cmp r4, sl |
0x0004fdba add.w r2, sl, 1 | r2 = sl + 1;
0x0004fdbe mov sl, r2 | sl = r2;
0x0004fdc0 bne 0x4fd70 |
| }
0x0004fdc2 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x0004fdc6 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0004fdca ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0004fdce cmn r2, r3 |
| if (r2 < r3) {
0x0004fdd0 bmi.w 0x4ff54 | goto label_34;
| }
0x0004fdd2 strh r0, [r0, 6] | *((r0 + 6)) = r0;
0x0004fdd4 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0004fdd6 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0004fdd8 ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x0004fddc lsls r3, r3, 2 | r3 <<= 2;
0x0004fdde rsbs r3, r3, 0 | r3 -= ;
0x0004fde0 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_14:
0x0004fde2 ldr r1, [sp, 0x64] | r1 = var_64h;
0x0004fde4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0004fde6 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0004fdea b 0x4fad8 | goto label_5;
| label_31:
0x0004fdec ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004fdee ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0004fdf0 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x0004fdf2 itt pl |
| if (r1 < r3) {
0x0004fdf4 movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x0004fdf6 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0004fdf8 b 0x4fc3c | goto label_6;
| label_29:
0x0004fdfa ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0004fdfe cmp r6, 0 |
0x0004fe00 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0004fe04 it lt |
| if (r6 >= 0) {
0x0004fe06 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x0004fe0a add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0004fe0e add.w r4, r3, r4, lsl 3 | r4 = r3 + (r4 << 3);
0x0004fe12 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
0x0004fe16 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x0004fe18 b 0x4fb98 | goto label_7;
| label_28:
0x0004fe1a ldr r3, [pc, 0x194] |
0x0004fe1c add r3, pc | r3 = 0x9fdd2;
0x0004fe1e adds r3, 4 | r3 += 4;
0x0004fe20 b 0x4fb62 | goto label_8;
| label_26:
0x0004fe22 ldrh r5, [r7, 0x32] | r5 = *((r7 + 0x32));
0x0004fe24 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004fe26 subs r6, r5, 1 | r6 = r5 - 1;
0x0004fe28 ldr r4, [r3] | r4 = *(r3);
0x0004fe2a b 0x4fa04 | goto label_9;
| label_25:
0x0004fe2c ldr.w lr, [sp, 0x3c] | lr = var_3ch;
0x0004fe30 and r3, lr, 1 | r3 = lr & 1;
| label_16:
0x0004fe34 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004fe36 cmp r2, 0 |
0x0004fe38 ite ne |
| if (r2 == 0) {
0x0004fe3a movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x0004fe3c andeq r3, r3, 1 | r3 &= 1;
| }
0x0004fe40 cmp r3, 0 |
| if (r3 == 0) {
0x0004fe42 beq.w 0x4f874 | goto label_0;
| }
0x0004fe46 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004fe48 mov r0, fp | r0 = fp;
0x0004fe4a ldr r1, [pc, 0x168] |
0x0004fe4c movs r4, 0 | r4 = 0;
0x0004fe4e ldr r2, [r3] | r2 = *(r3);
0x0004fe50 add r1, pc | r1 = 0x9fe0a;
0x0004fe52 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0004fe56 ldr r5, [sp, 0x6c] | r5 = var_6ch;
0x0004fe58 movs r1, 0x62 | r1 = 0x62;
0x0004fe5a ldr r2, [sp, 0xac] | r2 = *(arg_ach);
0x0004fe5c mov r0, fp | r0 = fp;
0x0004fe5e str r4, [sp] | *(sp) = r4;
0x0004fe60 mov r3, r5 | r3 = r5;
0x0004fe62 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fe66 mov r2, r5 | r2 = r5;
0x0004fe68 mov r3, r4 | r3 = r4;
0x0004fe6a movs r1, 0x10 | r1 = 0x10;
0x0004fe6c str r4, [sp] | *(sp) = r4;
0x0004fe6e mov r0, fp | r0 = fp;
0x0004fe70 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fe74 mov r2, r4 | r2 = r4;
0x0004fe76 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0004fe78 movs r1, 0x4b | r1 = 0x4b;
0x0004fe7a str r4, [sp] | *(sp) = r4;
0x0004fe7c mov r5, r0 | r5 = r0;
0x0004fe7e mov r0, fp | r0 = fp;
0x0004fe80 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004fe84 ldr r3, [pc, 0x130] |
0x0004fe86 movs r1, 0x61 | r1 = 0x61;
0x0004fe88 ldr r6, [sp, 0x28] | r6 = var_28h;
0x0004fe8a mov r0, fp | r0 = fp;
0x0004fe8c ldr r2, [sp, 0x68] | r2 = var_68h;
0x0004fe8e add r3, pc | r3 = 0x9fe4a;
0x0004fe90 str r4, [sp, 8] | var_8h = r4;
0x0004fe92 str r3, [sp, 4] | var_4h = r3;
0x0004fe94 movs r3, 3 | r3 = 3;
0x0004fe96 str r6, [sp] | *(sp) = r6;
0x0004fe98 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0004fe9c str r4, [sp] | *(sp) = r4;
0x0004fe9e movs r1, 0x7f | r1 = 0x7f;
0x0004fea0 ldr r4, [sp, 0x38] | r4 = var_38h;
0x0004fea2 mov r0, fp | r0 = fp;
0x0004fea4 ldr r3, [sp, 0xa8] | r3 = *(x);
0x0004fea6 mov r2, r4 | r2 = r4;
0x0004fea8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004feac ldr r1, [sp, 0xa8] | r1 = *(x);
0x0004feae mov r3, r6 | r3 = r6;
0x0004feb0 mov r2, r4 | r2 = r4;
0x0004feb2 mov r0, fp | r0 = fp;
0x0004feb4 str r1, [sp] | *(sp) = r1;
0x0004feb6 movs r1, 0x80 | r1 = 0x80;
0x0004feb8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004febc ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0004fec0 cmp r3, 0 |
| if (r3 > 0) {
0x0004fec2 ble 0x4fed6 |
0x0004fec4 ldr.w r2, [fp, 0x68] | r2 = *(arg_68h);
0x0004fec8 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0004fecc add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0004fed0 movs r1, 8 | r1 = 8;
0x0004fed2 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0004fed6 ldr.w r2, [fp] | r2 = *(fp);
0x0004feda cmp r5, 0 |
0x0004fedc it lt |
| if (r5 >= 0) {
0x0004fede addlt r5, r3, -1 | r5 = r3 + -1;
| }
0x0004fee2 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0004fee4 movs r0, 0x57 | r0 = 0x57;
0x0004fee6 cmp r2, 0 |
| if (r2 != 0) {
0x0004fee8 bne 0x4ff60 | goto label_35;
| }
0x0004feea ldr.w r2, [fp, 0x68] | r2 = *(arg_68h);
0x0004feee add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0004fef2 add.w r2, r2, r5, lsl 3 | r2 += (r5 << 3);
| label_15:
0x0004fef6 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0004fef8 b 0x4f874 | goto label_0;
| label_33:
0x0004fefa ldr r3, [pc, 0xc0] |
0x0004fefc add r3, pc | r3 = 0x9febe;
0x0004fefe adds r3, 4 | r3 += 4;
0x0004ff00 b 0x4fd60 | goto label_10;
| label_32:
0x0004ff02 ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x0004ff04 cmp r3, 1 |
| if (r3 != 1) {
0x0004ff06 bne.w 0x4fc78 | goto label_11;
| }
0x0004ff0a ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
0x0004ff0e cmp r3, 0 |
| if (r3 == 0) {
0x0004ff10 beq.w 0x4fc78 | goto label_11;
| }
0x0004ff14 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004ff16 mov r3, r5 | r3 = r5;
0x0004ff18 movs r1, 0x33 | r1 = 0x33;
0x0004ff1a mov r0, fp | r0 = fp;
0x0004ff1c str r4, [sp] | *(sp) = r4;
0x0004ff1e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0004ff22 b 0x4fc78 | goto label_11;
| label_21:
0x0004ff24 str r1, [sp] | *(sp) = r1;
0x0004ff26 movs r3, 0 | r3 = 0;
0x0004ff28 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0004ff2a mov r0, sl | r0 = sl;
0x0004ff2c bl 0x42ffc | fcn_00042ffc (r0, r1, r2, r3, r4);
0x0004ff30 b 0x4f8f2 | goto label_12;
| label_20:
0x0004ff32 mov r4, r7 | r4 = r7;
0x0004ff34 str r7, [sp, 0x4c] | var_4ch = r7;
| label_17:
0x0004ff36 ldr r3, [r3] | r3 = *(r3);
0x0004ff38 mov r2, r5 | r2 = r5;
0x0004ff3a movs r1, 0x1c | r1 = 0x1c;
0x0004ff3c mov r0, sl | r0 = sl;
0x0004ff3e str r3, [sp] | *(sp) = r3;
0x0004ff40 movs r3, 0 | r3 = 0;
0x0004ff42 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x0004ff44 vmlal.u16 q1, d3, d0 | __asm ("vmlal.u16 q1, d3, d0");
| if (r3 != 0) {
0x0004ff48 bne.w 0x4f874 | goto label_0;
| }
0x0004ff4c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004ff4e ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x0004ff50 ldr r1, [r3] | r1 = *(r3);
0x0004ff52 b 0x4f8e0 | goto label_13;
| label_34:
0x0004ff54 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0004ff56 mov r1, fp | r1 = fp;
0x0004ff58 rsbs r2, r3, 0 | r2 = r3 - ;
0x0004ff5a bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0004ff5e b 0x4fde2 | goto label_14;
| label_35:
0x0004ff60 ldr r2, [pc, 0x5c] |
0x0004ff62 add r2, pc | r2 = 0x9ff26;
0x0004ff64 adds r2, 4 | r2 += 4;
0x0004ff66 b 0x4fef6 | goto label_15;
| label_22:
0x0004ff68 movs r3, 1 | r3 = 1;
0x0004ff6a b 0x4fe34 | goto label_16;
| label_19:
0x0004ff6c mov.w r2, 0x8000 | r2 = 0x8000;
0x0004ff70 movs r4, 0 | r4 = 0;
0x0004ff72 movt r2, 0xffff | r2 = (r2 & 0xFFFF) | 0xffff0000;
0x0004ff76 sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x0004ff7a movt r4, 0xfff8 | r4 = (r4 & 0xFFFF) | 0xfff80000;
0x0004ff7e str r2, [sp, 0x4c] | var_4ch = r2;
0x0004ff80 b 0x4ff36 | goto label_17;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x4ffc4 */
| #include <stdint.h>
|
; (fcn) fcn.0004ffc4 () | void fcn_0004ffc4 (int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_4ch, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004ffc4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004ffc8 mov r7, r3 | r7 = r3;
0x0004ffca ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0004ffcc sub sp, 0x1c |
0x0004ffce mov r4, r0 | r4 = r0;
0x0004ffd0 mov sb, r1 | sb = r1;
0x0004ffd2 ldr.w r8, [r0, 0x38] | r8 = *(arg_40hx38);
0x0004ffd6 mov r6, r2 | r6 = r2;
0x0004ffd8 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0004ffda add.w sl, r8, -1 | sl = r8 + -1;
0x0004ffde str r3, [sp, 0x10] | var_10h = r3;
0x0004ffe0 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x0004ffe2 str.w sl, [r0, 0x38] | __asm ("str.w sl, [r0, 0x38]");
| if (r3 != 0) {
0x0004ffe6 cbnz r3, 0x50036 | goto label_8;
| }
| label_0:
0x0004ffe8 ldr r3, [r4] | r3 = *(r4);
0x0004ffea ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0004ffee cbnz r3, 0x5002a | goto label_9;
| }
0x0004fff0 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x0004fff4 cmp r2, 0 |
0x0004fff6 bgt 0x50010 |
| while (1) {
0x0004fff8 ldrb r2, [r7] | r2 = *(r7);
0x0004fffa ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0004fffc subs r2, 0xa | r2 -= 0xa;
0x0004fffe cmp r2, 3 |
| if (r2 > 3) {
0x00050000 bhi.w 0x50290 | goto label_10;
| }
0x00050002 strh r6, [r0, 0xa] | *((r0 + 0xa)) = r6;
| /* switch table (5 cases) at 0x50008 */
0x00050004 tbh [pc, r2, lsl 1] | __asm ("tbh [pc, r2, lsl 1]");
0x00050010 movs r1, 1 | r1 = 1;
0x00050012 mov r3, sl | r3 = sl;
0x00050014 str r1, [sp] | *(sp) = r1;
0x00050016 mov r0, r5 | r0 = r5;
0x00050018 movs r1, 0x31 | r1 = 0x31;
0x0005001a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005001e ldr r1, [pc, 0x280] |
0x00050020 mov r0, r5 | r0 = r5;
0x00050022 add r1, pc | r1 = 0xa02c8;
0x00050024 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00050028 b 0x4fff8 |
| }
| label_9:
0x0005002a movs r3, 0 | r3 = 0;
0x0005002c str r3, [sp, 0x10] | var_10h = r3;
0x0005002e ldr r0, [sp, 0x10] | r0 = var_10h;
0x00050030 add sp, 0x1c |
0x00050032 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00050036 movs r3, 0 | r3 = 0;
0x00050038 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x0005003a movs r1, 0x10 | r1 = 0x10;
0x0005003c str r3, [sp] | *(sp) = r3;
0x0005003e mov r0, r5 | r0 = r5;
0x00050040 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050044 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00050046 mov fp, r0 |
0x00050048 ldrd r2, r1, [r6, 0xc] | __asm ("ldrd r2, r1, [r6, 0xc]");
0x0005004c adds r3, 1 | r3++;
0x0005004e str r3, [sp, 0x14] | var_14h = r3;
0x00050050 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
| if (r3 != 0) {
0x00050052 cbz r3, 0x5005c |
0x00050054 ldr r3, [r3] | r3 = *(r3);
0x00050056 ldr r0, [sp, 0x48] | r0 = *(arg_48h);
0x00050058 adds r3, 1 | r3++;
0x0005005a str r3, [r0] | *(r0) = r3;
| }
0x0005005c ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0005005e mov r0, r5 | r0 = r5;
0x00050060 strd r1, r3, [sp] | __asm ("strd r1, r3, [sp]");
0x00050064 mvn r3, 7 | r3 = ~7;
0x00050068 movs r1, 0x5a | r1 = 0x5a;
0x0005006a str r3, [sp, 8] | var_8h = r3;
0x0005006c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005006e bl 0x429f8 | r0 = fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00050072 adds r2, r0, 2 | r2 = r0 + 2;
0x00050074 mov r3, sl | r3 = sl;
0x00050076 str r2, [sp] | *(sp) = r2;
0x00050078 movs r1, 0xd | r1 = 0xd;
0x0005007a mov r0, r5 | r0 = r5;
0x0005007c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050080 ldr r3, [r5] | r3 = *(r5);
0x00050082 cmp.w fp, 0 |
0x00050084 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
0x00050086 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00050088 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0005008c it lt |
| if (r0 >= r0) {
0x0005008e addlt fp, r2, -1 |
| }
| if (r3 != 0) {
0x00050092 cbnz r3, 0x500c4 | goto label_11;
| }
0x00050094 ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x00050096 add.w fp, fp, fp, lsl 1 |
0x0005009a add.w r3, r3, fp, lsl 3 | r3 += (fp << 3);
| do {
0x0005009e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000500a0 movs r1, 0x50 | r1 = 0x50;
0x000500a2 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000500a4 mov r0, r5 | r0 = r5;
0x000500a6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000500a8 subs r2, 1 | r2--;
0x000500aa str r2, [sp] | *(sp) = r2;
0x000500ac ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x000500ae bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000500b2 movs r2, 0 | r2 = 0;
0x000500b4 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x000500b6 str r2, [sp] | *(sp) = r2;
0x000500b8 movs r1, 0x47 | r1 = 0x47;
0x000500ba movs r2, 1 | r2 = 1;
0x000500bc mov r0, r5 | r0 = r5;
0x000500be bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000500c0 ldc2l p7, c14, [sp], {0x91} | __asm ("ldc2l p7, c14, [sp], {0x91}");
0x000500c2 b 0x4ffe8 | goto label_0;
| label_11:
0x000500c4 ldr r3, [pc, 0x1dc] |
0x000500c6 add r3, pc | r3 = 0xa036e;
0x000500c8 adds r3, 4 | r3 += 4;
0x000500ca b 0x5009e |
| } while (1);
0x000500cc str r3, [sp] | *(sp) = r3;
0x000500ce movs r1, 0x4f | r1 = 0x4f;
0x000500d0 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000500d2 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x000500d4 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000500d6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| do {
| label_1:
0x000500da ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x000500de cmp r2, 0 |
| if (r2 != 0) {
0x000500e0 bne.w 0x50232 | goto label_12;
| }
| label_2:
0x000500e4 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000500e6 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000500ea cmn r2, r3 |
| if (r2 < r3) {
0x000500ec bmi.w 0x5024c | goto label_13;
| }
| label_3:
0x000500f0 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x000500f2 lsl.w r8, r8, 2 | r8 <<= 2;
0x000500f6 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000500f8 rsb.w r8, r8, 0 | r8 -= ;
0x000500fc str.w r2, [r3, r8] | __asm ("str.w r2, [r3, r8]");
| label_4:
0x00050100 movs r3, 0 | r3 = 0;
0x00050102 ldr r2, [sp, 0x40] | r2 = *(arg_40h);
0x00050104 mov r0, r5 | r0 = r5;
0x00050106 movs r1, 0x43 | r1 = 0x43;
0x00050108 str r3, [sp] | *(sp) = r3;
0x0005010a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005010e ldr r0, [sp, 0x10] | r0 = var_10h;
0x00050110 add sp, 0x1c |
0x00050112 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00050116 ldrb r2, [r4, 0x13] | r2 = *((r4 + 0x13));
0x00050118 cmp r2, 0 |
| if (r2 == 0) {
0x0005011a beq.w 0x5026a | goto label_14;
| }
0x0005011e subs r2, 1 | r2--;
0x00050120 uxtb r2, r2 | r2 = (int8_t) r2;
0x00050122 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x00050124 adds r2, 0x26 | r2 += 0x26;
0x00050126 ldr.w sl, [r4, r2, lsl 2] | offset_0 = r2 << 2;
| sl = *((r4 + offset_0));
| label_6:
0x0005012a str r3, [sp, 8] | var_8h = r3;
0x0005012c movs r1, 0x61 | r1 = 0x61;
0x0005012e str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00050132 mov r0, r5 | r0 = r5;
0x00050134 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x00050136 str r2, [sp, 4] | var_4h = r2;
0x00050138 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0005013a bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0005013e ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00050140 movs r1, 0x8a | r1 = 0x8a;
0x00050142 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00050144 mov r0, r5 | r0 = r5;
0x00050146 str r3, [sp, 4] | var_4h = r3;
0x00050148 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0005014a str r3, [sp] | *(sp) = r3;
0x0005014c mov r3, sl | r3 = sl;
0x0005014e bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x00050152 cmp.w sl, 0 |
0x00050156 beq 0x500da |
| } while (sl == 0);
0x00050158 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0005015a cmp r3, 7 |
| if (r3 > 7) {
0x0005015c bhi 0x500da | goto label_1;
| }
0x0005015e adds r2, r3, 1 | r2 = r3 + 1;
0x00050160 adds r3, 0x26 | r3 += 0x26;
0x00050162 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x00050164 str.w sl, [r4, r3, lsl 2] | __asm ("str.w sl, [r4, r3, lsl 2]");
0x00050168 b 0x500da | goto label_1;
0x0005016a ldrb r2, [r4, 0x13] | r2 = *((r4 + 0x13));
0x0005016c cmp r2, 0 |
| if (r2 == 0) {
0x0005016e beq 0x50258 | goto label_15;
| }
0x00050170 subs r1, r2, 1 | r1 = r2 - 1;
0x00050172 uxtb r1, r1 | r1 = (int8_t) r1;
0x00050174 add.w r0, r1, 0x26 | r0 = r1 + 0x26;
0x00050178 strb r1, [r4, 0x13] | *((r4 + 0x13)) = r1;
0x0005017a ldr.w fp, [r4, r0, lsl 2] | offset_1 = r0 << 2;
| fp = *((r4 + offset_1));
0x0005017e cmp r1, 0 |
| if (r1 == 0) {
0x00050180 beq.w 0x5028a | goto label_16;
| }
0x00050184 subs r2, 2 | r2 -= 2;
0x00050186 uxtb r2, r2 | r2 = (int8_t) r2;
0x00050188 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x0005018a adds r2, 0x26 | r2 += 0x26;
0x0005018c ldr.w sl, [r4, r2, lsl 2] | offset_2 = r2 << 2;
| sl = *((r4 + offset_2));
| label_5:
0x00050190 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00050192 movs r1, 0x61 | r1 = 0x61;
0x00050194 mov r0, r5 | r0 = r5;
0x00050196 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0005019a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005019e movs r3, 0 | r3 = 0;
0x000501a0 movs r1, 0x7f | r1 = 0x7f;
0x000501a2 str r3, [sp] | *(sp) = r3;
0x000501a4 mov r0, r5 | r0 = r5;
0x000501a6 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x000501a8 mov r3, sl | r3 = sl;
0x000501aa bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000501ae ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x000501b0 mov r3, fp | r3 = fp;
0x000501b2 movs r1, 0x80 | r1 = 0x80;
0x000501b4 mov r0, r5 | r0 = r5;
0x000501b6 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000501ba bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000501be ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000501c0 cmp r3, 0 |
| if (r3 > 0) {
0x000501c2 ble 0x501d4 |
0x000501c4 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x000501c6 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000501ca add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000501ce movs r3, 8 | r3 = 8;
0x000501d0 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x000501d4 cmp.w sl, 0 |
| if (sl == 0) {
0x000501d8 beq 0x501ec | goto label_17;
| }
0x000501da ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x000501dc cmp r3, 7 |
| if (r3 > 7) {
0x000501de bhi.w 0x500da | goto label_1;
| }
0x000501e2 adds r2, r3, 1 | r2 = r3 + 1;
0x000501e4 adds r3, 0x26 | r3 += 0x26;
0x000501e6 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x000501e8 str.w sl, [r4, r3, lsl 2] | __asm ("str.w sl, [r4, r3, lsl 2]");
| label_17:
0x000501ec cmp.w fp, 0 |
| if (fp == 0) {
0x000501f0 beq.w 0x500da | goto label_1;
| }
0x000501f4 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x000501f6 cmp r3, 7 |
| if (r3 > 7) {
0x000501f8 bhi.w 0x500da | goto label_1;
| }
0x000501fc adds r2, r3, 1 | r2 = r3 + 1;
0x000501fe adds r3, 0x26 | r3 += 0x26;
0x00050200 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x00050202 str.w fp, [r4, r3, lsl 2] | __asm ("str.w fp, [r4, r3, lsl 2]");
0x00050204 add sp, 0x8c |
0x00050206 b 0x500da | goto label_1;
0x00050208 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
| if (r0 == 0) {
0x0005020a cbz r0, 0x50276 | goto label_18;
| }
| label_7:
0x0005020c str r3, [sp] | *(sp) = r3;
0x0005020e movs r1, 0x4f | r1 = 0x4f;
0x00050210 mov r3, r0 | r3 = r0;
0x00050212 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00050214 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00050216 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005021a movs r3, 0 | r3 = 0;
0x0005021c ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0005021e movs r1, 0xb | r1 = 0xb;
0x00050220 mov r0, r5 | r0 = r5;
0x00050222 str r3, [sp] | *(sp) = r3;
0x00050224 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050228 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0005022c cmp r2, 0 |
| if (r2 == 0) {
0x0005022e beq.w 0x500e4 | goto label_2;
| }
| label_12:
0x00050232 movs r3, 0 | r3 = 0;
0x00050234 movs r1, 0x3c | r1 = 0x3c;
0x00050236 str r3, [sp] | *(sp) = r3;
0x00050238 mov r0, r5 | r0 = r5;
0x0005023a ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x0005023c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050240 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00050242 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00050246 cmn r2, r3 |
| if (r2 >= r3) {
0x00050248 bpl.w 0x500f0 | goto label_3;
| }
| label_13:
0x0005024c rsb.w r2, r8, 0 | r2 = r8 - ;
0x00050250 mov r1, r5 | r1 = r5;
0x00050252 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00050256 b 0x50100 | goto label_4;
| label_15:
0x00050258 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0005025a add.w fp, r2, 1 |
0x0005025e mov sl, fp | sl = fp;
| do {
0x00050260 add.w sl, sl, 1 | sl++;
0x00050264 str.w sl, [r4, 0x2c] | __asm ("str.w sl, [r4, 0x2c]");
0x00050268 b 0x50190 | goto label_5;
| label_14:
0x0005026a ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0005026c add.w sl, r2, 1 | sl = r2 + 1;
0x00050270 str.w sl, [r4, 0x2c] | __asm ("str.w sl, [r4, 0x2c]");
0x00050274 b 0x5012a | goto label_6;
| label_18:
0x00050276 mov r1, r3 | r1 = r3;
0x00050278 mov r0, r4 | r0 = r4;
0x0005027a str r3, [sp, 0x14] | var_14h = r3;
0x0005027c bl 0x27744 | fcn_00027744 (r0, r1);
0x00050280 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00050282 strd r0, r3, [r7, 0xc] | __asm ("strd r0, r3, [r7, 0xc]");
0x00050286 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00050288 b 0x5020c | goto label_7;
| label_16:
0x0005028a ldr.w sl, [r4, 0x2c] | sl = *((r4 + 0x2c));
0x0005028e b 0x50260 |
| } while (1);
| label_10:
0x00050290 movs r1, 0 | r1 = 0;
0x00050292 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00050294 mov r0, r5 | r0 = r5;
0x00050296 str r1, [sp] | *(sp) = r1;
0x00050298 movs r1, 0x54 | r1 = 0x54;
0x0005029a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005029e b 0x500da | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x502a8 */
| #include <stdint.h>
|
; (fcn) fcn.000502a8 () | void fcn_000502a8 (int16_t arg_8h, int16_t arg_13h, int16_t arg_1ch, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000502a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000502ac mov r4, r1 | r4 = r1;
0x000502ae sub sp, 0x44 |
0x000502b0 ldr r1, [r0, 0x38] | r1 = *(arg_68hx38);
0x000502b2 mov sb, r2 | sb = r2;
0x000502b4 mov fp, r0 |
0x000502b6 ldr r2, [sp, 0x68] | r2 = *(arg_68h);
0x000502b8 add.w sl, r1, -1 | sl = r1 + -1;
0x000502bc ldr.w r0, [sb, 0x18] | r0 = *((sb + 0x18));
0x000502c0 ldr.w r5, [sb] | r5 = *(sb);
0x000502c4 str r2, [sp, 0x2c] | var_2ch = r2;
0x000502c6 str r3, [sp, 0x14] | var_14h = r3;
0x000502c8 str r1, [sp, 0x30] | var_30h = r1;
0x000502ca ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000502ce ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000502d0 str.w sl, [fp, 0x38] | __asm ("str.w sl, [arg_38h]");
0x000502d4 ldrb r2, [r2] | r2 = *(r2);
0x000502d6 ldr.w r6, [fp, 8] | r6 = *(arg_8h);
0x000502da str r0, [sp, 0x1c] | var_1ch = r0;
0x000502dc str r2, [sp, 0x18] | var_18h = r2;
0x000502de ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x000502e0 str r1, [sp, 0x3c] | var_3ch = r1;
0x000502e2 str r2, [sp, 0x34] | var_34h = r2;
0x000502e4 cmp r3, 0 |
| if (r3 != 0) {
0x000502e6 bne.w 0x50668 | goto label_16;
| }
| label_8:
0x000502ea ldr r2, [sp, 0x18] | r2 = var_18h;
0x000502ec ldr.w r1, [sb, 8] | r1 = *((sb + 8));
0x000502f0 and r3, r2, 0xfb | r3 = r2 & 0xfb;
0x000502f4 cmp r3, 9 |
0x000502f6 str r1, [sp, 0x20] | var_20h = r1;
| if (r3 != 9) {
0x000502f8 beq 0x50354 |
0x000502fa cmp r2, 0xa |
| if (r2 != 0xa) {
0x000502fc beq 0x50340 |
0x000502fe ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x00050302 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00050304 and r1, r2, 0xfd | r1 = r2 & 0xfd;
0x00050308 cmp r3, 0 |
| if (r3 == 0) {
0x0005030a beq.w 0x5073c | goto label_17;
| }
0x0005030e subs r2, r3, 1 | r2 = r3 - 1;
0x00050310 cmp r1, 0xc |
0x00050312 uxtb r2, r2 | r2 = (int8_t) r2;
0x00050314 add.w r0, r2, 0x26 | r0 = r2 + 0x26;
0x00050318 strb.w r2, [fp, 0x13] | *(arg_13h) = r2;
0x0005031c ldr.w r0, [fp, r0, lsl 2] | offset_0 = r0 << 2;
| r0 = *((fp + offset_0));
0x00050320 str r0, [sp, 0x24] | var_24h = r0;
| if (r1 != 0xc) {
0x00050322 bne.w 0x5070a | goto label_14;
| }
0x00050326 cmp r2, 0 |
| if (r2 == 0) {
0x00050328 beq.w 0x5079e | goto label_18;
| }
0x0005032c subs r3, 2 | r3 -= 2;
0x0005032e uxtb r3, r3 | r3 = (int8_t) r3;
0x00050330 strb.w r3, [fp, 0x13] | *(arg_13h) = r3;
0x00050334 adds r3, 0x26 | r3 += 0x26;
0x00050336 ldr.w r8, [fp, r3, lsl 2] | offset_1 = r3 << 2;
| r8 = *((fp + offset_1));
0x0005033a movs r3, 0 | r3 = 0;
0x0005033c str r3, [sp, 0x14] | var_14h = r3;
0x0005033e b 0x5035e | goto label_12;
| }
0x00050340 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00050342 cbz r3, 0x50354 | goto label_19;
| }
0x00050344 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00050346 movs r2, 0 | r2 = 0;
0x00050348 str r2, [sp] | *(sp) = r2;
0x0005034a movs r1, 0x4b | r1 = 0x4b;
0x0005034c mov r0, r6 | r0 = r6;
0x0005034e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00050350 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
| label_19:
0x00050354 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00050356 ldr.w r8, [r3, 0xc] | r8 = *((r3 + 0xc));
0x0005035a movs r3, 0 | r3 = 0;
0x0005035c str r3, [sp, 0x24] | var_24h = r3;
| label_12:
0x0005035e ldrb.w r7, [sb, 0x20] | r7 = *((sb + 0x20));
0x00050362 ldr r2, [r5] | r2 = *(r5);
0x00050364 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00050368 ands r7, r7, 1 | r7 &= 1;
0x0005036c sub.w r3, r2, r3 | r3 = r2 - r3;
0x00050370 add.w r5, r3, 1 | r5 = r3 + 1;
0x00050374 str r3, [sp, 0x28] | var_28h = r3;
| if (r7 == r7) {
0x00050376 beq.w 0x5069a | goto label_20;
| }
0x0005037a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005037c ldr.w r4, [fp, 0x2c] | r4 = *(arg_2ch);
0x00050380 ldr.w sl, [fp, 0x28] | sl = *(arg_28h);
0x00050384 add r5, r3 | r5 += r3;
0x00050386 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x0005038a adds r4, 1 | r4++;
0x0005038c add.w r2, sl, 1 | r2 = sl + 1;
0x00050390 str.w r4, [fp, 0x2c] | __asm ("str.w r4, [arg_2ch]");
0x00050394 str.w r2, [fp, 0x28] | __asm ("str.w r2, [arg_28h]");
0x00050398 cmp r3, 0 |
| if (r3 != 0) {
0x0005039a bne 0x50430 | goto label_21;
| }
0x0005039c mov r3, r4 | r3 = r4;
0x0005039e mov r2, sl | r2 = sl;
0x000503a0 movs r1, 0x79 | r1 = 0x79;
0x000503a2 mov r0, r6 | r0 = r6;
0x000503a4 str r5, [sp] | *(sp) = r5;
0x000503a6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_1:
0x000503aa movs r3, 0 | r3 = 0;
0x000503ac movs r1, 0x21 | r1 = 0x21;
0x000503ae str r3, [sp] | *(sp) = r3;
0x000503b0 mov r0, r6 | r0 = r6;
0x000503b2 ldrd r3, r5, [sp, 0x1c] | __asm ("ldrd r3, r5, [var_1ch]");
0x000503b6 mov r2, r5 | r2 = r5;
0x000503b8 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x000503bc adds r1, r0, 1 | r1 = r0 + 1;
0x000503be mov r3, r4 | r3 = r4;
0x000503c0 str r1, [sp, 0x38] | var_38h = r1;
0x000503c2 mov r2, r5 | r2 = r5;
0x000503c4 movs r1, 0x85 | r1 = 0x85;
0x000503c6 mov r0, r6 | r0 = r6;
0x000503c8 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000503cc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_9:
0x000503d0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000503d2 subs r7, r3, 1 | r7 = r3 - 1;
0x000503d4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000503d6 cmp r3, 0 |
| if (r3 <= 0) {
0x000503d8 ble 0x50478 | goto label_22;
| }
0x000503da ldr r3, [sp, 0x34] | r3 = var_34h;
0x000503dc ldr r2, [sp, 0x14] | r2 = var_14h;
0x000503de add.w r4, r3, r2, lsl 4 | r4 = r3 + (r2 << 4);
| do {
0x000503e2 ldrh r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000503e4 adds r3, 0x10 | r3 += 0x10;
| if (r2 == 0) {
0x000503e6 cbnz r2, 0x503ea |
0x000503e8 adds r7, 1 | r7++;
| }
0x000503ea cmp r4, r3 |
0x000503ec bne 0x503e2 |
| } while (r4 != r3);
0x000503ee ldr r3, [sp, 0x14] | r3 = var_14h;
0x000503f0 str.w fp, [sp, 0x34] | __asm ("str.w fp, [var_34h]");
0x000503f4 subs r5, r3, 1 | r5 = r3 - 1;
0x000503f6 ldr r3, [pc, 0x3ac] |
0x000503f8 add r5, r8 | r5 += r8;
0x000503fa add r3, pc | r3 = 0xa0ba4;
0x000503fc mov fp, r3 |
0x000503fe b 0x50424 |
| while (r2 != 0) {
0x00050400 subs r3, r2, 1 | r3 = r2 - 1;
| label_0:
0x00050402 mov r2, sl | r2 = sl;
0x00050404 movs r1, 0x5e | r1 = 0x5e;
0x00050406 str r5, [sp] | *(sp) = r5;
0x00050408 mov r0, r6 | r0 = r6;
0x0005040a subs r4, 0x10 | r4 -= 0x10;
0x0005040c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050410 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00050412 mov r1, fp | r1 = fp;
0x00050414 mov r0, r6 | r0 = r6;
0x00050416 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0005041a cmp r5, r8 |
0x0005041c add.w r3, r5, -1 | r3 = r5 + -1;
0x00050420 mov r5, r3 | r5 = r3;
| if (r5 == r8) {
0x00050422 beq 0x50474 | goto label_23;
| }
0x00050424 ldrh r2, [r4, 4] | r2 = *((r4 + 4));
0x00050426 mov r3, r7 | r3 = r7;
0x00050428 cmp r2, 0 |
0x0005042a bne 0x50400 |
| }
0x0005042c subs r7, 1 | r7--;
0x0005042e b 0x50402 | goto label_0;
| label_21:
0x00050430 movs r3, 0 | r3 = 0;
0x00050432 movs r1, 0xe | r1 = 0xe;
0x00050434 mov r2, r3 | r2 = r3;
0x00050436 str r3, [sp] | *(sp) = r3;
0x00050438 mov r0, r6 | r0 = r6;
0x0005043a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005043e str r5, [sp] | *(sp) = r5;
0x00050440 mov r3, r4 | r3 = r4;
0x00050442 mov r5, r0 | r5 = r0;
0x00050444 mov r2, sl | r2 = sl;
0x00050446 movs r1, 0x79 | r1 = 0x79;
0x00050448 mov r0, r6 | r0 = r6;
0x0005044a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005044e cmp r5, 0 |
| if (r5 == 0) {
0x00050450 beq 0x503aa | goto label_1;
| }
0x00050452 ldr r3, [r6] | r3 = *(r6);
0x00050454 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x00050456 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0005045a it lt |
| if (r5 >= 0) {
0x0005045c addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x00050460 cmp r3, 0 |
| if (r3 != 0) {
0x00050462 bne.w 0x506fa | goto label_24;
| }
0x00050466 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x00050468 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0005046c add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_11:
0x00050470 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00050472 b 0x503aa | goto label_1;
| label_23:
0x00050474 ldr.w fp, [sp, 0x34] | fp = var_34h;
| label_22:
0x00050478 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005047a subs r3, 0xa | r3 -= 0xa;
0x0005047c cmp r3, 5 |
| if (r3 > 5) {
0x0005047e bhi.w 0x5064a | goto label_25;
| }
| /* switch table (7 cases) at 0x50486 */
0x00050482 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
0x00050492 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00050494 mov r2, sl | r2 = sl;
0x00050496 movs r1, 0x5e | r1 = 0x5e;
0x00050498 mov r0, r6 | r0 = r6;
0x0005049a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0005049c strh r0, [r0] | *(r0) = r0;
0x0005049e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000504a2 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000504a4 movs r3, 0 | r3 = 0;
0x000504a6 ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x000504a8 movs r1, 0x7f | r1 = 0x7f;
0x000504aa str r3, [sp] | *(sp) = r3;
0x000504ac mov r0, r6 | r0 = r6;
0x000504ae mov r3, r4 | r3 = r4;
0x000504b0 mov r2, r5 | r2 = r5;
0x000504b2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000504b6 mov r3, r8 | r3 = r8;
0x000504b8 mov r2, r5 | r2 = r5;
0x000504ba movs r1, 0x80 | r1 = 0x80;
0x000504bc mov r0, r6 | r0 = r6;
0x000504be str r4, [sp] | *(sp) = r4;
0x000504c0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000504c4 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x000504c6 cmp r3, 0 |
| if (r3 <= 0) {
0x000504c8 ble.w 0x50702 | goto label_26;
| }
0x000504cc ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x000504ce add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000504d2 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000504d6 movs r3, 8 | r3 = 8;
0x000504d8 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
0x000504dc ldr r3, [sp, 0x24] | r3 = var_24h;
0x000504de cmp r3, 0 |
| if (r3 != 0) {
0x000504e0 bne 0x505da | goto label_7;
| }
| do {
| label_2:
0x000504e2 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000504e4 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000504e8 cmn r2, r3 |
| if (r2 < r3) {
0x000504ea bmi 0x5059c | goto label_27;
| }
| label_3:
0x000504ec ldr r3, [sp, 0x30] | r3 = var_30h;
0x000504ee ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000504f0 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x000504f2 lsls r3, r3, 2 | r3 <<= 2;
0x000504f4 rsbs r3, r3, 0 | r3 -= ;
0x000504f6 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x000504f8 ldrb.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000504fc ands r3, r3, 1 | r3 &= 1;
| if (r3 == r3) {
0x00050500 beq 0x505b0 | goto label_28;
| }
| label_4:
0x00050502 movs r1, 0 | r1 = 0;
0x00050504 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00050506 str r1, [sp] | *(sp) = r1;
0x00050508 mov r0, r6 | r0 = r6;
0x0005050a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0005050c movs r1, 0x24 | r1 = 0x24;
0x0005050e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050512 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x00050516 cmp r2, 0 |
| if (r2 != 0) {
0x00050518 bne 0x505c6 | goto label_29;
| }
| label_5:
0x0005051a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0005051c ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0005051e mvns r2, r3 | r2 = ~r3;
0x00050520 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00050524 cmn r1, r3 |
| if (r1 < r3) {
0x00050526 bmi.w 0x506be | goto label_30;
| }
0x0005052a ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0005052c ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0005052e str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x00050532 add sp, 0x44 |
0x00050534 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00050538 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0005053a mov r2, r8 | r2 = r8;
0x0005053c ldr r5, [sp, 0x14] | r5 = var_14h;
0x0005053e movs r1, 0x61 | r1 = 0x61;
0x00050540 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00050542 mov r0, r6 | r0 = r6;
0x00050544 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00050546 str r5, [sp, 8] | var_8h = r5;
0x00050548 str r4, [sp] | *(sp) = r4;
0x0005054a str r3, [sp, 4] | var_4h = r3;
0x0005054c mov r3, r5 | r3 = r5;
0x0005054e bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00050552 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00050554 mov r3, r4 | r3 = r4;
0x00050556 movs r1, 0x8a | r1 = 0x8a;
0x00050558 mov r0, r6 | r0 = r6;
0x0005055a strd r8, r5, [sp] | __asm ("strd r8, r5, [sp]");
0x0005055e bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x00050562 cmp r4, 0 |
0x00050564 beq 0x504e2 |
| } while (r4 == 0);
0x00050566 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00050568 ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x0005056c cmp r2, 1 |
| if (r2 == 1) {
0x0005056e beq.w 0x5077e | goto label_31;
| }
0x00050572 ldr.w r2, [fp, 0x1c] | r2 = *(arg_1ch);
0x00050576 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00050578 cmp r1, r2 |
0x0005057a it gt |
| if (r1 > r2) {
0x0005057c strdgt r1, r8, [fp, 0x1c] | __asm ("strdgt r1, r8, [fp, 0x1c]");
| }
| label_6:
0x00050580 cmp r3, 7 |
| if (r3 > 7) {
0x00050582 bhi 0x504e2 | goto label_2;
| }
0x00050584 adds r2, r3, 1 | r2 = r3 + 1;
0x00050586 adds r3, 0x26 | r3 += 0x26;
0x00050588 strb.w r2, [fp, 0x13] | *(arg_13h) = r2;
0x0005058c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0005058e ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x00050590 str.w r2, [fp, r3, lsl 2] | __asm ("str.w r2, [fp, r3, lsl 2]");
0x00050594 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00050598 cmn r2, r3 |
| if (r2 >= r3) {
0x0005059a bpl 0x504ec | goto label_3;
| }
| label_27:
0x0005059c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005059e mov r1, r6 | r1 = r6;
0x000505a0 rsbs r2, r3, 0 | r2 = r3 - ;
0x000505a2 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x000505a6 ldrb.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000505aa ands r3, r3, 1 | r3 &= 1;
| if (r3 != r3) {
0x000505ae bne 0x50502 | goto label_4;
| }
| label_28:
0x000505b0 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000505b2 movs r1, 0x26 | r1 = 0x26;
0x000505b4 str r3, [sp] | *(sp) = r3;
0x000505b6 mov r0, r6 | r0 = r6;
0x000505b8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000505ba bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000505be ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x000505c2 cmp r2, 0 |
| if (r2 == 0) {
0x000505c4 beq 0x5051a | goto label_5;
| }
| label_29:
0x000505c6 movs r3, 0 | r3 = 0;
0x000505c8 movs r1, 0x43 | r1 = 0x43;
0x000505ca mov r0, r6 | r0 = r6;
0x000505cc str r3, [sp] | *(sp) = r3;
0x000505ce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000505d2 b 0x5051a | goto label_5;
0x000505d4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000505d6 cmp r3, 0 |
| if (r3 == 0) {
0x000505d8 beq 0x504e2 | goto label_2;
| }
| label_7:
0x000505da ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x000505de cmp.w r8, 0 |
| if (r8 == 0) {
0x000505e2 beq 0x50580 | goto label_6;
| }
0x000505e4 cmp r3, 7 |
| if (r3 > 7) {
0x000505e6 bhi.w 0x504e2 | goto label_2;
| }
0x000505ea adds r1, r3, 1 | r1 = r3 + 1;
0x000505ec add.w r2, r3, 0x26 | r2 = r3 + 0x26;
0x000505f0 uxtb r3, r1 | r3 = (int8_t) r1;
0x000505f2 strb.w r3, [fp, 0x13] | *(arg_13h) = r3;
0x000505f6 str.w r8, [fp, r2, lsl 2] | __asm ("str.w r8, [fp, r2, lsl 2]");
0x000505fa b 0x50580 | goto label_6;
0x000505fc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000505fe ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x00050600 ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x00050604 cmp r3, 0 |
| if (r3 == 0) {
0x00050606 beq.w 0x50716 | goto label_32;
| }
0x0005060a subs r3, 1 | r3--;
0x0005060c uxtb r3, r3 | r3 = (int8_t) r3;
0x0005060e strb.w r3, [fp, 0x13] | *(arg_13h) = r3;
0x00050612 adds r3, 0x26 | r3 += 0x26;
0x00050614 ldr.w r4, [fp, r3, lsl 2] | offset_2 = r3 << 2;
| r4 = *((fp + offset_2));
| label_13:
0x00050618 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005061a lsrs r2, r5, 0x1f | r2 = r5 >> 0x1f;
0x0005061c movs r1, 0x61 | r1 = 0x61;
0x0005061e str r4, [sp] | *(sp) = r4;
0x00050620 mov r0, r6 | r0 = r6;
0x00050622 subs r3, r3, r2 | r3 -= r2;
0x00050624 add r2, r8 | r2 += r8;
0x00050626 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005062a cmp r5, 0 |
| if (r5 < 0) {
0x0005062c blt.w 0x50764 | goto label_33;
| }
0x00050630 mov r3, r4 | r3 = r4;
0x00050632 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00050634 movs r1, 0x8a | r1 = 0x8a;
0x00050636 mov r0, r6 | r0 = r6;
0x00050638 str r5, [sp, 4] | var_4h = r5;
0x0005063a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0005063e bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x00050642 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00050644 cmp r3, 0 |
| if (r3 != 0) {
0x00050646 bne 0x505da | goto label_7;
| }
0x00050648 b 0x504e2 | goto label_2;
| label_25:
0x0005064a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005064c cmp r3, 9 |
0x0005064e ldr r3, [sp, 0x2c] | r3 = var_2ch;
| if (r3 == 9) {
0x00050650 beq 0x50722 | goto label_34;
| }
0x00050652 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00050654 movs r3, 0 | r3 = 0;
0x00050656 str r3, [sp] | *(sp) = r3;
0x00050658 movs r1, 0xb | r1 = 0xb;
0x0005065a mov r0, r6 | r0 = r6;
0x0005065c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005065e invalid |
0x00050662 cmp r3, 0 |
| if (r3 != 0) {
0x00050664 bne 0x505da | goto label_7;
| }
0x00050666 b 0x504e2 | goto label_2;
| label_16:
0x00050668 movs r2, 0 | r2 = 0;
0x0005066a movs r1, 9 | r1 = 9;
0x0005066c str r2, [sp] | *(sp) = r2;
0x0005066e mov r0, r6 | r0 = r6;
0x00050670 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x00050674 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050678 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0005067a mov r0, r6 | r0 = r6;
0x0005067c bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x00050680 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x00050682 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x00050686 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0005068a mvns r2, r2 | r2 = ~r2;
0x0005068c cmn r1, r3 |
| if (r1 < r3) {
0x0005068e bmi 0x5075c | goto label_35;
| }
0x00050690 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00050692 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x00050694 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x00050698 b 0x502ea | goto label_8;
| label_20:
0x0005069a ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch]");
0x0005069e movs r1, 0x22 | r1 = 0x22;
0x000506a0 mov r0, r6 | r0 = r6;
0x000506a2 str r7, [sp] | *(sp) = r7;
0x000506a4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000506a6 invalid |
0x000506aa str r0, [sp, 0x28] | var_28h = r0;
0x000506ac cmp r2, 0 |
0x000506ae bgt 0x506ca |
| while (r3 <= 0) {
| label_10:
0x000506b0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000506b2 ldr.w sl, [sp, 0x20] | sl = var_20h;
0x000506b6 str r5, [sp, 0x28] | var_28h = r5;
0x000506b8 adds r3, 1 | r3++;
0x000506ba str r3, [sp, 0x38] | var_38h = r3;
0x000506bc b 0x503d0 | goto label_9;
| label_30:
0x000506be mov r1, r6 | r1 = r6;
0x000506c0 add sp, 0x44 |
0x000506c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000506c4 ldr r7, [pc, 0x3c0] | r7 = *(0x50a88);
0x000506c6 b.w 0x430c8 | void (*0x430c8)() ();
0x000506ca movs r1, 1 | r1 = 1;
0x000506cc mov r3, sl | r3 = sl;
0x000506ce str r1, [sp] | *(sp) = r1;
0x000506d0 mov r0, r6 | r0 = r6;
0x000506d2 movs r1, 0x31 | r1 = 0x31;
0x000506d4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000506d8 ldr r1, [pc, 0xcc] |
0x000506da mov r0, r6 | r0 = r6;
0x000506dc add r1, pc | r1 = 0xa0e88;
0x000506de bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x000506e2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000506e4 cmp r3, 0 |
0x000506e6 ble 0x506b0 |
| }
0x000506e8 str r7, [sp] | *(sp) = r7;
0x000506ea mov.w r3, -1 | r3 = -1;
0x000506ee ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x000506f0 movs r1, 0x56 | r1 = 0x56;
0x000506f2 mov r0, r6 | r0 = r6;
0x000506f4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000506f8 b 0x506b0 | goto label_10;
| label_24:
0x000506fa ldr r3, [pc, 0xb0] |
0x000506fc add r3, pc | r3 = 0xa0eae;
0x000506fe adds r3, 4 | r3 += 4;
0x00050700 b 0x50470 | goto label_11;
| label_26:
0x00050702 cmp r4, 0 |
| if (r4 != 0) {
0x00050704 bne.w 0x505da | goto label_7;
| }
0x00050708 b 0x504e2 | goto label_2;
| label_14:
0x0005070a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0005070c mov r0, fp | r0 = fp;
0x0005070e bl 0x27744 | r0 = fcn_00027744 (r0, r1);
0x00050712 mov r8, r0 | r8 = r0;
0x00050714 b 0x5035e | goto label_12;
| label_32:
0x00050716 ldr.w r4, [fp, 0x2c] | r4 = *(arg_2ch);
0x0005071a adds r4, 1 | r4++;
0x0005071c str.w r4, [fp, 0x2c] | __asm ("str.w r4, [arg_2ch]");
0x00050720 b 0x50618 | goto label_13;
| label_34:
0x00050722 movs r1, 0 | r1 = 0;
0x00050724 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00050726 mov r0, r6 | r0 = r6;
0x00050728 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005072a str r1, [sp] | *(sp) = r1;
0x0005072c movs r1, 0x54 | r1 = 0x54;
0x0005072e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050732 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00050734 cmp r3, 0 |
| if (r3 != 0) {
0x00050736 bne.w 0x505da | goto label_7;
| }
0x0005073a b 0x504e2 | goto label_2;
| label_17:
0x0005073c ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x00050740 cmp r1, 0xc |
0x00050742 add.w r3, r3, 1 | r3++;
0x00050746 str r3, [sp, 0x24] | var_24h = r3;
0x00050748 str.w r3, [fp, 0x2c] | __asm ("str.w r3, [arg_2ch]");
| if (r1 != 0xc) {
0x0005074c bne 0x5070a | goto label_14;
| }
| label_15:
0x0005074e add.w r8, r3, 1 | r8 = r3 + 1;
0x00050752 movs r3, 0 | r3 = 0;
0x00050754 str.w r8, [fp, 0x2c] | __asm ("str.w r8, [arg_2ch]");
0x00050758 str r3, [sp, 0x14] | var_14h = r3;
0x0005075a b 0x5035e | goto label_12;
| label_35:
0x0005075c mov r1, r6 | r1 = r6;
0x0005075e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00050762 b 0x502ea | goto label_8;
| label_33:
0x00050764 mov r3, r4 | r3 = r4;
0x00050766 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00050768 movs r1, 0x80 | r1 = 0x80;
0x0005076a mov r0, r6 | r0 = r6;
0x0005076c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00050770 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00050774 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00050776 cmp r3, 0 |
| if (r3 != 0) {
0x00050778 bne.w 0x505da | goto label_7;
| }
0x0005077c b 0x504e2 | goto label_2;
| label_31:
0x0005077e cmp.w r8, 0 |
| if (r8 == 0) {
0x00050782 beq.w 0x50580 | goto label_6;
| }
0x00050786 cmp r3, 7 |
| if (r3 > 7) {
0x00050788 bhi.w 0x504e2 | goto label_2;
| }
0x0005078c adds r2, r3, 1 | r2 = r3 + 1;
0x0005078e adds r3, 0x26 | r3 += 0x26;
0x00050790 uxtb r2, r2 | r2 = (int8_t) r2;
0x00050792 strb.w r2, [fp, 0x13] | *(arg_13h) = r2;
0x00050796 str.w r8, [fp, r3, lsl 2] | __asm ("str.w r8, [fp, r3, lsl 2]");
0x0005079a mov r3, r2 | r3 = r2;
0x0005079c b 0x50580 | goto label_6;
| label_18:
0x0005079e ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x000507a2 b 0x5074e | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x513a8 */
| #include <stdint.h>
|
; (fcn) fcn.000513a8 () | void fcn_000513a8 (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x000513a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000513ac mov r8, r0 | r8 = r0;
0x000513ae ldr r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x000513b0 sub sp, 0x34 |
0x000513b2 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x000513b4 ldrh r6, [r0, 0x18] | r6 = *((r0 + 0x18));
0x000513b6 ldrh r5, [r0, 0x12] | r5 = *((r0 + 0x12));
0x000513b8 ldr r0, [r0, 0x34] | r0 = *((r0 + 0x34));
0x000513ba ldr r0, [r0, 0x28] | r0 = *((r0 + 0x28));
0x000513bc str r0, [sp, 0xc] | var_ch = r0;
0x000513be adds r0, r2, 7 | r0 = r2 + 7;
0x000513c0 ldrb r4, [r3, r0] | r4 = *((r3 + r0));
0x000513c2 str r0, [sp, 0x28] | var_28h = r0;
0x000513c4 lsls r0, r6, 1 | r0 = r6 << 1;
0x000513c6 cmp r4, r1 |
0x000513c8 add.w r7, r0, r5 | r7 = r0 + r5;
0x000513cc add.w r4, r3, r2 | r4 = r3 + r2;
0x000513d0 str r7, [sp, 0x24] | var_24h = r7;
| if (r4 <= r1) {
0x000513d2 bgt 0x5140e |
0x000513d4 ldrb r1, [r4, 1] | r1 = *((r4 + 1));
0x000513d6 ldrb r7, [r4, 2] | r7 = *((r4 + 2));
0x000513d8 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000513da orr.w r7, r7, r1, lsl 8 | r7 |= (r1 << 8);
0x000513de subs r2, 3 | r2 -= 3;
0x000513e0 cmp r2, r7 |
| if (r2 <= r7) {
0x000513e2 ble.w 0x51504 | goto label_8;
| }
| if (r7 == 0) {
0x000513e6 cbz r7, 0x5140e | goto label_3;
| }
0x000513e8 adds r1, r3, r7 | r1 = r3 + r7;
0x000513ea ldrb.w lr, [r3, r7] |
0x000513ee ldrb.w ip, [r1, 1] | ip = *((r1 + 1));
0x000513f2 orr.w fp, ip, lr, lsl 8 |
0x000513f6 cmp r2, fp |
| if (r2 <= fp) {
0x000513f8 ble.w 0x5164a | goto label_9;
| }
0x000513fc cmp.w fp, 0 |
| if (fp == 0) {
0x00051400 beq.w 0x5155a | goto label_10;
| }
0x00051404 ldrb.w r2, [r3, fp] | r2 = *((r3 + fp));
0x00051408 cmp r2, 0 |
| if (r2 == 0) {
0x0005140a beq.w 0x5154e | goto label_11;
| }
| }
| label_3:
0x0005140e ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x00051410 ldrb r1, [r4, 6] | r1 = *((r4 + 6));
0x00051412 orr.w fp, r1, r2, lsl 8 |
0x00051416 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00051418 sub.w lr, r2, 4 | lr = r2 - 4;
0x0005141c cmp r6, 0 |
| if (r6 == 0) {
0x0005141e beq.w 0x5166e | goto label_12;
| }
0x00051422 add r5, r3 | r5 += r3;
0x00051424 mov r6, r2 | r6 = r2;
0x00051426 sub.w r2, r2, fp | r2 -= fp;
0x00051428 lsls r3, r1, 8 | r3 = r1 << 8;
0x0005142a adds r1, r0, r5 | r1 = r0 + r5;
0x0005142c str r2, [sp, 0x1c] | var_1ch = r2;
0x0005142e add.w r2, r3, fp | r2 = r3 + fp;
0x00051432 mov.w sl, 0 | sl = 0;
0x00051436 str r1, [sp, 0x14] | var_14h = r1;
0x00051438 str r3, [sp, 8] | var_8h = r3;
0x0005143a str r2, [sp, 0x20] | var_20h = r2;
0x0005143c str r3, [sp, 0x18] | var_18h = r3;
0x0005143e str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h]");
0x00051442 str r4, [sp, 0x2c] | var_2ch = r4;
0x00051444 b 0x51458 |
| while (sl != 0) {
| label_1:
0x00051446 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00051448 mov r2, r7 | r2 = r7;
0x0005144a mov r1, sb | r1 = sb;
0x0005144c adds r0, r3, r6 | r0 = r3 + r6;
0x0005144e blx 0x65ac | EVP_CIPHER_CTX_free ();
| label_0:
0x00051452 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00051454 cmp r3, r5 |
| if (r3 == r5) {
0x00051456 beq 0x51516 | goto label_13;
| }
0x00051458 ldrh r4, [r5] | r4 = *(r5);
0x0005145a mov r0, r8 | r0 = r8;
0x0005145c ldr r3, [sp, 8] | r3 = var_8h;
0x0005145e rev16 r4, r4 | __asm ("rev16 r4, r4");
0x00051460 uxth r4, r4 | r4 = (int16_t) r4;
0x00051462 add.w sb, r3, r4 | sb = r3 + r4;
0x00051466 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00051468 cmp r3, r4 |
0x0005146a ite ge |
| if (r3 < r4) {
0x0005146c movge r2, 0 | r2 = 0;
| }
| if (r3 >= r4) {
0x0005146e movlt r2, 1 | r2 = 1;
| }
0x00051470 cmp fp, r4 |
0x00051472 it gt |
| if (fp <= r4) {
0x00051474 orrgt r2, r2, 1 | r2 |= 1;
| }
0x00051478 cmp r2, 0 |
| if (r2 != 0) {
0x0005147a bne 0x514f2 | goto label_14;
| }
0x0005147c ldr.w r2, [r8, 0x4c] | r2 = *((r8 + 0x4c));
0x00051480 mov r1, sb | r1 = sb;
0x00051482 blx r2 | r0 = uint32_t (*r2)(uint32_t, uint32_t) (r1, r2);
0x00051484 subs r6, r6, r0 | r6 -= r0;
0x00051486 mov r7, r0 | r7 = r0;
0x00051488 cmp fp, r6 |
0x0005148a asr.w r1, r6, 8 | r1 = r6 >> 8;
0x0005148e add.w r2, r4, r0 | r2 = r4 + r0;
| if (fp > r6) {
0x00051492 bgt 0x514cc | goto label_15;
| }
0x00051494 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00051496 cmp r2, r3 |
| if (r2 > r3) {
0x00051498 bgt 0x514cc | goto label_15;
| }
0x0005149a strb r1, [r5] | *(r5) = r1;
0x0005149c adds r5, 2 | r5 += 2;
0x0005149e strb r6, [r5, -0x1] | *((r5 - 0x1)) = r6;
0x000514a2 cmp.w sl, 0 |
0x000514a6 bne 0x51446 |
| }
0x000514a8 cmp r4, r6 |
0x000514aa ldr r2, [sp, 0x1c] | r2 = var_1ch;
| if (r4 == r6) {
0x000514ac beq 0x51452 | goto label_0;
| }
0x000514ae ldr.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x000514b2 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000514b4 ldr r3, [r3] | r3 = *(r3);
0x000514b6 ldr.w sl, [r3, 0xf0] | sl = *((r3 + 0xf0));
0x000514ba add.w r0, sl, fp | r0 = sl + fp;
0x000514be add.w sb, sl, r4 | sb = sl + r4;
0x000514c2 str.w sl, [sp, 8] | __asm ("str.w sl, [var_8h]");
0x000514c6 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000514ca b 0x51446 | goto label_1;
| label_15:
0x000514cc ldr r4, [pc, 0x1c8] |
0x000514ce movw r3, 0xc92 | r3 = 0xc92;
0x000514d2 ldr r2, [pc, 0x1c8] |
0x000514d4 ldr r1, [pc, 0x1c8] |
0x000514d6 add r4, pc | r4 = 0xa2b72;
0x000514d8 add r2, pc | r2 = 0xa2b7a;
0x000514da add r1, pc | r1 = 0xa2b7e;
| do {
| label_2:
0x000514dc adds r4, 0x14 | r4 += 0x14;
0x000514de movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x000514e2 movs r0, 0xb | r0 = 0xb;
0x000514e4 str r4, [sp] | *(sp) = r4;
0x000514e6 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000514ea movs r0, 0xb | r0 = 0xb;
0x000514ec add sp, 0x34 |
0x000514ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x000514f2 ldr r4, [pc, 0x1b0] |
0x000514f4 movw r3, 0xc8c | r3 = 0xc8c;
0x000514f8 ldr r2, [pc, 0x1ac] |
0x000514fa ldr r1, [pc, 0x1b0] |
0x000514fc add r4, pc | r4 = 0xa2ba6;
0x000514fe add r2, pc | r2 = 0xa2baa;
0x00051500 add r1, pc | r1 = 0xa2bb2;
0x00051502 b 0x514dc |
| } while (1);
| label_8:
0x00051504 ldr r4, [pc, 0x1a8] |
0x00051506 movw r3, 0xc5b | r3 = 0xc5b;
0x0005150a ldr r2, [pc, 0x1a8] |
0x0005150c ldr r1, [pc, 0x1a8] |
0x0005150e add r4, pc | r4 = 0xa2bc2;
0x00051510 add r2, pc | r2 = 0xa2bca;
0x00051512 add r1, pc | r1 = 0xa2bce;
0x00051514 b 0x514dc | goto label_2;
| label_13:
0x00051516 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00051518 ldr r4, [sp, 0x2c] | r4 = var_2ch;
| label_7:
0x0005151a ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005151c mov r2, r6 | r2 = r6;
0x0005151e movs r1, 0 | r1 = 0;
0x00051520 strb r1, [r3, r0] | *((r3 + r0)) = r1;
| label_6:
0x00051522 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00051524 ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x00051528 subs r2, r2, r0 | r2 -= r0;
0x0005152a cmp r2, r1 |
| if (r2 != r1) {
0x0005152c bne 0x51612 | goto label_16;
| }
0x0005152e ldr r2, [sp, 0x24] | r2 = var_24h;
0x00051530 asrs r1, r6, 8 | r1 = r6 >> 8;
0x00051532 movs r5, 0 | r5 = 0;
0x00051534 strb r6, [r4, 6] | *((r4 + 6)) = r6;
0x00051536 strb r1, [r4, 5] | *((r4 + 5)) = r1;
0x00051538 mov r1, r5 | r1 = r5;
0x0005153a adds r0, r3, r2 | r0 = r3 + r2;
0x0005153c strh.w r5, [r4, 1] | *((r4 + 1)) = r5;
0x00051540 subs r2, r6, r2 | r2 = r6 - r2;
0x00051542 blx 0x62ec | fcn_000062ec ();
0x00051546 mov r0, r5 | r0 = r5;
0x00051548 add sp, 0x34 |
0x0005154a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0005154e add.w r2, r3, fp | r2 = r3 + fp;
0x00051552 ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x00051554 cmp r2, 0 |
| if (r2 != 0) {
0x00051556 bne.w 0x5140e | goto label_3;
| }
| label_10:
0x0005155a ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x0005155c ldrb r0, [r4, 6] | r0 = *((r4 + 6));
0x0005155e ldrb.w sl, [r1, 3] | sl = *((r1 + 3));
0x00051562 orr.w sb, r0, r2, lsl 8 | sb = r0 | (r2 << 8);
0x00051566 ldrb r2, [r1, 2] | r2 = *((r1 + 2));
0x00051568 cmp r7, sb |
0x0005156a orr.w sl, sl, r2, lsl 8 | sl |= (r2 << 8);
| if (r7 <= sb) {
0x0005156e ble.w 0x51684 | goto label_17;
| }
0x00051572 add.w r1, r7, sl | r1 = r7 + sl;
0x00051576 cmp.w fp, 0 |
| if (fp == 0) {
0x0005157a beq 0x51624 | goto label_18;
| }
0x0005157c cmp fp, r1 |
| if (fp < r1) {
0x0005157e blt 0x5165c | goto label_19;
| }
0x00051580 add.w r2, r3, fp | r2 = r3 + fp;
0x00051584 ldrb r0, [r2, 2] | r0 = *((r2 + 2));
0x00051586 ldrb r2, [r2, 3] | r2 = *((r2 + 3));
0x00051588 orr.w r2, r2, r0, lsl 8 | r2 |= (r0 << 8);
0x0005158c ldr r0, [sp, 0xc] | r0 = var_ch;
0x0005158e str r2, [sp, 8] | var_8h = r2;
0x00051590 add r2, fp | r2 += fp;
0x00051592 cmp r2, r0 |
| if (r2 > r0) {
0x00051594 bgt 0x51672 | goto label_20;
| }
0x00051596 ldr r2, [sp, 8] | r2 = var_8h;
0x00051598 str r3, [sp, 0xc] | var_ch = r3;
0x0005159a adds r0, r2, r1 | r0 = r2 + r1;
0x0005159c add sl, r2 | sl += r2;
0x0005159e add r0, r3 | r0 += r3;
0x000515a0 sub.w r2, fp, r1 | r2 = fp - r1;
0x000515a4 add r1, r3 | r1 += r3;
0x000515a6 blx 0x6354 | realloc (r0, r1);
0x000515aa ldr r3, [sp, 0xc] | r3 = var_ch;
| label_5:
0x000515ac add.w r6, sl, sb | r6 = sl + sb;
0x000515b0 sub.w r2, r7, sb | r2 = r7 - sb;
0x000515b4 add.w r1, r3, sb | r1 = r3 + sb;
0x000515b8 adds r0, r3, r6 | r0 = r3 + r6;
0x000515ba str r3, [sp, 0xc] | var_ch = r3;
0x000515bc blx 0x6354 | realloc (r0, r1);
0x000515c0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000515c2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000515c4 add r5, r3 | r5 += r3;
0x000515c6 add.w ip, r3, r2 |
0x000515ca cmp ip, r5 |
| if (ip < r5) {
0x000515cc bls 0x51642 | goto label_21;
| }
0x000515ce adds r1, r5, 2 | r1 = r5 + 2;
0x000515d0 ldr.w lr, [sp, 8] | lr = var_8h;
0x000515d4 mov r0, r1 | r0 = r1;
0x000515d6 b 0x515f2 |
| while (r7 > r2) {
0x000515d8 asr.w r2, sb, 8 | r2 = sb >> 8;
0x000515dc strb r2, [r0, -0x2] | *((r0 - 0x2)) = r2;
0x000515e0 strb.w sb, [r5, 1] | *((r5 + 1)) = sb;
| label_4:
0x000515e4 cmp ip, r1 |
0x000515e6 mov r5, r1 | r5 = r1;
0x000515e8 add.w r0, r0, 2 | r0 += 2;
0x000515ec add.w r1, r1, 2 | r1 += 2;
| if (ip < r1) {
0x000515f0 bls 0x51642 | goto label_21;
| }
0x000515f2 ldrh r2, [r5] | r2 = *(r5);
0x000515f4 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x000515f6 uxth r2, r2 | r2 = (int16_t) r2;
0x000515f8 cmp r7, r2 |
0x000515fa add.w sb, sl, r2 | sb = sl + r2;
0x000515fe bgt 0x515d8 |
| }
0x00051600 cmp fp, r2 |
0x00051602 add r2, lr | r2 += lr;
0x00051604 ittt gt |
| if (fp > r2) {
0x00051606 asrgt sb, r2, 8 | __asm ("asrgt sb, r2, 8");
| }
| if (fp <= r2) {
0x0005160a strbgt sb, [r0, -0x2] | *((r0 - 0x2)) = sb;
| }
| if (fp > r2) {
0x0005160e strb r2, [r5, 1] | *((r5 + 1)) = r2;
| }
0x00051610 b 0x515e4 | goto label_4;
| label_16:
0x00051612 ldr r4, [pc, 0xa8] |
0x00051614 movw r3, 0xca5 | r3 = 0xca5;
0x00051618 ldr r2, [pc, 0xa4] |
0x0005161a ldr r1, [pc, 0xa8] |
0x0005161c add r4, pc | r4 = 0xa2cde;
0x0005161e add r2, pc | r2 = 0xa2ce2;
0x00051620 add r1, pc | r1 = 0xa2cea;
0x00051622 b 0x514dc | goto label_2;
| label_18:
0x00051624 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00051626 cmp r2, r1 |
0x00051628 it ge |
| if (r2 >= r1) {
0x0005162a strge fp, [sp, 8] | var_8h = fp;
| goto label_22;
| }
| if (r2 >= r1) {
| label_22:
0x0005162e bge 0x515ac | goto label_5;
| }
0x00051630 ldr r4, [pc, 0x94] |
0x00051632 movw r3, 0xc6f | r3 = 0xc6f;
0x00051636 ldr r2, [pc, 0x94] |
0x00051638 ldr r1, [pc, 0x94] |
0x0005163a add r4, pc | r4 = 0xa2d06;
0x0005163c add r2, pc | r2 = 0xa2d0e;
0x0005163e add r1, pc | r1 = 0xa2d12;
0x00051640 b 0x514dc | goto label_2;
| label_21:
0x00051642 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00051644 ldrb r2, [r3, r2] | r2 = *((r3 + r2));
0x00051646 add r2, r6 | r2 += r6;
0x00051648 b 0x51522 | goto label_6;
| label_9:
0x0005164a ldr r4, [pc, 0x88] |
0x0005164c movw r3, 0xc5e | r3 = 0xc5e;
0x00051650 ldr r2, [pc, 0x84] |
0x00051652 ldr r1, [pc, 0x88] |
0x00051654 add r4, pc | r4 = 0xa2d2e;
0x00051656 add r2, pc | r2 = 0xa2d32;
0x00051658 add r1, pc | r1 = 0xa2d3a;
0x0005165a b 0x514dc | goto label_2;
| label_19:
0x0005165c ldr r4, [pc, 0x80] |
0x0005165e movw r3, 0xc69 | r3 = 0xc69;
0x00051662 ldr r2, [pc, 0x80] |
0x00051664 ldr r1, [pc, 0x80] |
0x00051666 add r4, pc | r4 = 0xa2d4a;
0x00051668 add r2, pc | r2 = 0xa2d52;
0x0005166a add r1, pc | r1 = 0xa2d56;
0x0005166c b 0x514dc | goto label_2;
| label_12:
0x0005166e ldr r6, [sp, 0xc] | r6 = var_ch;
0x00051670 b 0x5151a | goto label_7;
| label_20:
0x00051672 ldr r4, [pc, 0x78] |
0x00051674 movw r3, 0xc6b | r3 = 0xc6b;
0x00051678 ldr r2, [pc, 0x74] |
0x0005167a ldr r1, [pc, 0x78] |
0x0005167c add r4, pc | r4 = 0xa2d6e;
0x0005167e add r2, pc | r2 = 0xa2d72;
0x00051680 add r1, pc | r1 = 0xa2d7a;
0x00051682 b 0x514dc | goto label_2;
| label_17:
0x00051684 ldr r4, [pc, 0x70] |
0x00051686 movw r3, 0xc66 | r3 = 0xc66;
0x0005168a ldr r2, [pc, 0x70] |
0x0005168c ldr r1, [pc, 0x70] |
0x0005168e add r4, pc | r4 = 0xa2d8a;
0x00051690 add r2, pc | r2 = 0xa2d92;
0x00051692 add r1, pc | r1 = 0xa2d96;
0x00051694 b 0x514dc | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x51704 */
| #include <stdint.h>
|
; (fcn) fcn.00051704 () | void fcn_00051704 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| arithmetic x;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00051704 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00051708 mov r7, r0 | r7 = r0;
0x0005170a ldrb r0, [r3, 9] | r0 = *((r3 + 9));
0x0005170c sub sp, 0x34 |
0x0005170e mov r4, r1 | r4 = r1;
0x00051710 ldr.w fp, [r3, 0x38] | fp = *((r3 + 0x38));
0x00051714 ldr r1, [r3, 0x34] | r1 = *((r3 + 0x34));
0x00051716 ldr r5, [r3, 0x40] | r5 = *((r3 + 0x40));
0x00051718 str r3, [sp, 0x24] | x = r3;
0x0005171a adds r3, r4, r2 | r3 = r4 + r2;
0x0005171c str r0, [sp, 0x1c] | var_1ch = r0;
0x0005171e str r3, [sp, 0x10] | var_10h = r3;
0x00051720 adds r3, r0, 5 | r3 = r0 + 5;
0x00051722 adds r0, 6 | r0 += 6;
0x00051724 str r2, [sp, 0x20] | var_20h = r2;
0x00051726 str r3, [sp, 0x28] | var_28h = r3;
0x00051728 ldrb.w r2, [fp, r3] | r2 = *((fp + r3));
0x0005172c ldrb.w r3, [fp, r0] | r3 = *((fp + r0));
0x00051730 str r0, [sp, 0x2c] | var_2ch = r0;
0x00051732 orr.w r3, r3, r2, lsl 8 | r3 |= (r2 << 8);
0x00051736 ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x00051738 ldr r1, [r1] | r1 = *(r1);
0x0005173a cmp r2, r3 |
0x0005173c add.w r0, fp, r2 | r0 = fp + r2;
0x00051740 ldr.w r1, [r1, 0xf0] | r1 = *((r1 + 0xf0));
0x00051744 it hs |
| if (r2 < r3) {
0x00051746 subhs r2, r2, r3 | r2 -= r3;
| }
0x00051748 str r0, [sp, 0x14] | var_14h = r0;
0x0005174a iteee lo |
| if (r2 >= r3) {
0x0005174c strlo fp, [sp, 0xc] | var_ch = fp;
| }
| if (r2 < r3) {
0x00051750 addhs r0, r1, r3 | r0 = r1 + r3;
| }
| if (r2 < r3) {
0x00051752 addhs r3, fp | r3 += fp;
| }
| if (r2 >= r3) {
0x00051754 str r3, [sp, 0xc] | var_ch = r3;
| }
0x00051756 str r1, [sp, 0x18] | var_18h = r1;
0x00051758 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005175a it lo |
| if (r2 >= r3) {
0x0005175c ldrlo r0, [sp, 0x18] | r0 = var_18h;
| }
0x0005175e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00051762 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00051764 cmp r4, r3 |
| if (r4 < r3) {
0x00051766 blt.w 0x5187e | goto label_2;
| }
0x0005176a add.w r3, r7, 0x28 | r3 = r7 + 0x28;
0x0005176e mov.w r8, 0 | r8 = 0;
| do {
0x00051772 ldr r2, [r3, 4]! | r2 = *((r3 += 4));
0x00051776 add.w r8, r8, 1 | r8++;
0x0005177a cmp r2, r4 |
| if (r2 > r4) {
0x0005177c bgt 0x51784 | goto label_1;
| }
0x0005177e cmp.w r8, 6 |
0x00051782 bne 0x51772 |
| } while (r8 != 6);
| label_1:
0x00051784 add.w r3, r8, 4 | r3 = r8 + 4;
0x00051788 adds r5, 2 | r5 += 2;
0x0005178a ldr.w sb, [r7, r3, lsl 2] | offset_0 = r3 << 2;
| sb = *((r7 + offset_0));
0x0005178e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00051790 b 0x517e4 |
| while (r1 >= r6) {
0x00051792 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00051794 cmp r1, r6 |
0x00051796 sub.w r6, r1, fp | r6 = r1 - fp;
| if (r1 >= r6) {
0x0005179a bhs 0x517fa | goto label_3;
| }
0x0005179c ldr r1, [sp, 0x14] | r1 = var_14h;
0x0005179e cmp r1, r0 |
0x000517a0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000517a2 add r1, r6 | r1 += r6;
| if (r1 <= r0) {
0x000517a4 blo 0x5186c | goto label_4;
| }
| label_0:
0x000517a6 subs r3, r3, r2 | r3 -= r2;
0x000517a8 adds r4, 1 | r4++;
0x000517aa sub.w r6, r3, fp | r6 = r3 - fp;
0x000517ae cmp r3, r5 |
0x000517b0 uxtb.w sl, r6 | sl = (int8_t) r6;
0x000517b4 ubfx r6, r6, 8, 8 | r6 = (r6 >> 8) & ((1 << 8) - 1);
0x000517b8 strb r6, [r5, -0x2] | *((r5 - 0x2)) = r6;
0x000517bc strb sl, [r5, -0x1] | *((r5 - 0x1)) = sl;
| if (r3 <= r5) {
0x000517c0 blo 0x51814 | goto label_5;
| }
0x000517c2 mov r0, r3 | r0 = r3;
0x000517c4 blx 0x6354 | realloc (r0, r1);
0x000517c8 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000517ca add.w r2, r7, r8, lsl 2 | r2 = r7 + (r8 << 2);
0x000517ce mov r3, r0 | r3 = r0;
0x000517d0 cmp r1, r4 |
| if (r1 <= r4) {
0x000517d2 ble 0x5183a | goto label_6;
| }
0x000517d4 ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x000517d6 cmp r1, r4 |
| if (r1 <= r4) {
0x000517d8 bgt 0x517e2 |
0x000517da ldr.w sb, [r2, 0x14] | sb = *((r2 + 0x14));
0x000517de add.w r8, r8, 1 | r8++;
| }
0x000517e2 adds r5, 2 | r5 += 2;
0x000517e4 ldrd r1, r2, [r7, 8] | __asm ("ldrd r1, r2, [r7, 8]");
0x000517e8 ldr r6, [sp, 0xc] | r6 = var_ch;
0x000517ea ldr.w r1, [r1, r4, lsl 2] | offset_1 = r4 << 2;
| r1 = *((r1 + offset_1));
0x000517ee ldrh.w r2, [r2, r4, lsl 1] | offset_2 = r4 << 1;
| r2 = *((r2 + offset_2));
0x000517f2 cmp r1, r6 |
0x000517f4 add.w r0, r1, r2 | r0 = r1 + r2;
0x000517f8 bhs 0x51792 |
| }
| label_3:
0x000517fa cmp r1, sb |
0x000517fc it lo |
| if (r1 >= sb) {
0x000517fe cmplo sb, r0 | __asm ("cmplo sb, r0");
| goto label_7;
| }
| if (r1 >= sb) {
| label_7:
0x00051800 bhs 0x517a6 | goto label_0;
| }
0x00051802 ldr r4, [pc, 0x80] |
0x00051804 movw r3, 0x2304 | r3 = 0x2304;
0x00051808 ldr r2, [pc, 0x7c] |
0x0005180a ldr r1, [pc, 0x80] |
0x0005180c add r4, pc | r4 = 0xa3096;
0x0005180e add r2, pc | r2 = 0xa309a;
0x00051810 add r1, pc | r1 = 0xa30a2;
0x00051812 b 0x51824 | goto label_8;
| label_5:
0x00051814 ldr r4, [pc, 0x78] |
0x00051816 movw r3, 0x230a | r3 = 0x230a;
0x0005181a ldr r2, [pc, 0x78] |
0x0005181c ldr r1, [pc, 0x78] |
0x0005181e add r4, pc | r4 = 0xa30b2;
0x00051820 add r2, pc | r2 = 0xa30ba;
0x00051822 add r1, pc | r1 = 0xa30be;
| do {
| label_8:
0x00051824 adds r4, 0x14 | r4 += 0x14;
0x00051826 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x0005182a movs r0, 0xb | r0 = 0xb;
0x0005182c str r4, [sp] | *(sp) = r4;
0x0005182e bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00051832 movs r0, 0xb | r0 = 0xb;
0x00051834 add sp, 0x34 |
0x00051836 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x0005183a ldr r0, [sp, 0x24] | r0 = x;
0x0005183c movs r2, 0 | r2 = 0;
0x0005183e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00051840 strb r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x00051842 strh r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00051844 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00051846 add r3, fp | r3 += fp;
0x00051848 strh.w r2, [r3, 1] | *((r3 + 1)) = r2;
0x0005184c ldrh r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x0005184e lsrs r1, r1, 8 | r1 >>= 8;
0x00051850 strb r1, [r3, 3] | *((r3 + 3)) = r1;
0x00051852 ldrh r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x00051854 mov r0, r2 | r0 = r2;
0x00051856 strb r1, [r3, 4] | *((r3 + 4)) = r1;
0x00051858 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0005185a strb.w r6, [fp, r1] | *((fp + r1)) = r6;
0x0005185e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00051860 strb.w sl, [fp, r1] | *((fp + r1)) = sl;
0x00051864 strb r2, [r3, 7] | *((r3 + 7)) = r2;
0x00051866 add sp, 0x34 |
0x00051868 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0005186c ldr r4, [pc, 0x2c] |
0x0005186e movw r3, 0x22ff | r3 = 0x22ff;
0x00051872 ldr r2, [pc, 0x2c] |
0x00051874 ldr r1, [pc, 0x2c] |
0x00051876 add r4, pc | r4 = 0xa3116;
0x00051878 add r2, pc | r2 = 0xa311e;
0x0005187a add r1, pc | r1 = 0xa3122;
0x0005187c b 0x51824 |
| } while (1);
| label_2:
0x0005187e mov.w r8, 0 | r8 = 0;
0x00051882 b 0x51784 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x51a68 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00051a68 () | void fcn_00051a68 (int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg1, uint32_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int32_t var_ch;
| int32_t var_ch_2;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_20h;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00051a68 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00051a6c sub sp, 0x34 |
0x00051a6e ldr.w r8, [sp, 0x5c] | r8 = *(arg_5ch);
0x00051a72 ldr r7, [sp, 0x64] | r7 = *(arg_64h);
0x00051a74 cmp r1, 0 |
| if (r1 != 0) {
0x00051a76 beq.w 0x51b9a |
0x00051a7a cmp.w r8, 0 |
0x00051a7e it ne |
| if (r8 != 0) {
0x00051a80 cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
| if (r8 == 0) {
0x00051a82 bne.w 0x51b9a |
0x00051a86 mov sl, r3 | sl = r3;
0x00051a88 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00051a8a mov r5, r2 | r5 = r2;
0x00051a8c mov r4, r1 | r4 = r1;
0x00051a8e clz r1, r7 | r1 &= r7;
0x00051a92 clz r2, r3 | r2 &= r3;
0x00051a96 lsrs r1, r1, 5 | r1 >>= 5;
0x00051a98 lsrs r2, r2, 5 | r2 >>= 5;
0x00051a9a cmp r1, r2 |
| if (r1 != r2) {
0x00051a9c bne 0x51b9a | goto label_5;
| }
0x00051a9e ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x00051aa0 clz r2, r3 | r2 &= r3;
0x00051aa4 ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x00051aa6 lsrs r2, r2, 5 | r2 >>= 5;
0x00051aa8 clz r3, r3 | r3 &= r3;
0x00051aac lsrs r3, r3, 5 | r3 >>= 5;
0x00051aae cmp r2, r3 |
| if (r2 != r3) {
0x00051ab0 bne 0x51b9a | goto label_5;
| }
0x00051ab2 adds r3, r5, 1 | r3 = r5 + 1;
0x00051ab4 cmp r3, 0x80 |
| if (r3 > 0x80) {
0x00051ab6 bhi 0x51b9a | goto label_5;
| }
0x00051ab8 mov r6, r0 | r6 = r0;
0x00051aba mov r0, r4 | r0 = r4;
0x00051abc blx 0x65dc | r0 = strcmp (r0, r1);
0x00051ac0 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x00051ac4 bic r0, r0, 0xff | r0 = BIT_MASK (r0, 0xff);
0x00051ac8 cmp r0, 0 |
| if (r0 != 0) {
0x00051aca bne 0x51b9a | goto label_5;
| }
0x00051acc mov.w sb, 0x800 |
0x00051ad0 movt sb, 0x38 | sb = 0x380800;
0x00051ad4 and.w sb, sl, sb | sb = sl & sb;
0x00051ad8 and sl, sl, 7 | sl &= 7;
0x00051adc cmp.w sl, 4 |
| if (sl == 4) {
0x00051ae0 beq.w 0x51c3a | goto label_6;
| }
| if (sl > 4) {
0x00051ae4 bgt 0x51bc0 | goto label_7;
| }
0x00051ae6 add.w r3, sl, -1 | r3 = sl + -1;
0x00051aea cmp r3, 2 |
0x00051aec it ls |
| if (r3 <= 2) {
0x00051aee uxtbls fp, sl | __asm ("uxtbls fp, sl");
| }
| if (r3 > 2) {
0x00051af2 bhi.w 0x51c22 | goto label_8;
| }
| label_1:
0x00051af6 movs r3, 0 | r3 = 0;
0x00051af8 mov r2, r5 | r2 = r5;
0x00051afa str r3, [sp] | *(sp) = r3;
0x00051afc mov r1, r4 | r1 = r4;
0x00051afe mov r3, fp | r3 = fp;
0x00051b00 mov r0, r6 | r0 = r6;
0x00051b02 bl 0x43a40 | r0 = fcn_00043a40 (r0, r1, r2, r3, r4, r5);
| if (r0 != 0) {
0x00051b06 cbz r0, 0x51b14 |
0x00051b08 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00051b0a and r3, r3, 3 | r3 &= 3;
0x00051b0c lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x00051b0e cmp r3, sl |
| if (r3 == sl) {
0x00051b10 beq.w 0x51c42 | goto label_9;
| }
| }
| label_3:
0x00051b14 orrs.w r3, r8, r7 | r3 = r8 | r7;
| if (r3 != r8) {
0x00051b18 beq 0x51b96 |
| label_4:
0x00051b1a movs r2, 1 | r2 = 1;
0x00051b1c mov r1, r4 | r1 = r4;
0x00051b1e str r2, [sp] | *(sp) = r2;
0x00051b20 mov r3, fp | r3 = fp;
0x00051b22 mov r2, r5 | r2 = r5;
0x00051b24 mov r0, r6 | r0 = r6;
0x00051b26 bl 0x43a40 | r0 = fcn_00043a40 (r0, r1, r2, r3, r4, r5);
0x00051b2a mov r4, r0 | r4 = r0;
0x00051b2c cmp r0, 0 |
| if (r0 == 0) {
0x00051b2e beq.w 0x51c70 | goto label_10;
| }
0x00051b32 ldr.w sl, [r0, 0x24] | sl = *((r0 + 0x24));
0x00051b36 cmp.w sl, 0 |
| if (sl != 0) {
0x00051b3a beq 0x51b4a |
0x00051b3c ldr.w r3, [sl] | r3 = *(sl);
0x00051b40 subs r3, 1 | r3--;
0x00051b42 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x00051b46 cmp r3, 0 |
| if (r3 == 0) {
0x00051b48 beq 0x51c2a | goto label_11;
| }
| }
| label_2:
0x00051b4a ldr r3, [sp, 0x70] | r3 = *(arg_70h);
| if (r3 != 0) {
0x00051b4c cbz r3, 0x51b56 |
0x00051b4e ldr r3, [r3] | r3 = *(r3);
0x00051b50 ldr r2, [sp, 0x70] | r2 = *(arg_70h);
0x00051b52 adds r3, 1 | r3++;
0x00051b54 str r3, [r2] | *(r2) = r3;
| }
0x00051b56 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00051b58 eor sb, sb, 0x200000 | sb ^= 0x200000;
0x00051b5c cmp.w r8, 0 |
0x00051b60 it eq |
| if (r8 != 0) {
0x00051b62 moveq r8, r3 | r8 = r3;
| }
0x00051b64 ldr r3, [sp, 0x70] | r3 = *(arg_70h);
0x00051b66 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00051b68 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00051b6a and r3, r3, 3 | r3 &= 3;
0x00051b6e orr.w r3, r3, sb | r3 |= sb;
0x00051b72 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00051b74 ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x00051b76 strd r8, r7, [sp, 0x20] | __asm ("strd r8, r7, [var_20h]");
0x00051b7a str r3, [sp, 0x28] | var_28h = r3;
0x00051b7c ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x00051b7e str r3, [sp, 0x2c] | var_2ch = r3;
0x00051b80 add.w r3, r4, 0x10 | r3 = r4 + 0x10;
0x00051b84 vldr d16, [sp, 0x20] | __asm ("vldr d16, [sp, 0x20]");
0x00051b88 vldr d17, [sp, 0x28] | __asm ("vldr d17, [sp, 0x28]");
0x00051b8c vst1.32 {d16, d17}, [r3] | __asm ("vst1.32 {d16, d17}, [r3]");
0x00051b90 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x00051b92 strb r5, [r4] | *(r4) = r5;
0x00051b94 str r3, [r4, 8] | *((r4 + 8)) = r3;
| }
0x00051b96 movs r0, 0 | r0 = 0;
0x00051b98 b 0x51bba |
| }
| } else {
| label_5:
0x00051b9a ldr r4, [pc, 0xe8] |
0x00051b9c movw r3, 0xb6e3 |
0x00051ba0 ldr r2, [pc, 0xe4] |
0x00051ba2 movs r0, 0x15 | r0 = 0x15;
0x00051ba4 ldr r1, [pc, 0xe4] |
0x00051ba6 movt r3, 2 | r3 = 0x2b6e3;
0x00051baa add r4, pc | r4 = 0xa3834;
0x00051bac adds r4, 0x14 | r4 += 0x14;
0x00051bae add r2, pc | r2 = 0xa383a;
0x00051bb0 add r1, pc | r1 = 0xa3840;
0x00051bb2 str r4, [sp] | *(sp) = r4;
0x00051bb4 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00051bb8 movs r0, 0x15 | r0 = 0x15;
| }
| do {
| label_0:
0x00051bba add sp, 0x34 |
0x00051bbc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x00051bc0 cmp.w sl, 5 |
| if (sl != 5) {
0x00051bc4 bne 0x51c22 | goto label_8;
| }
0x00051bc6 ldr r3, [sp, 0x70] | r3 = *(arg_70h);
0x00051bc8 mov r2, r5 | r2 = r5;
0x00051bca mov r1, r4 | r1 = r4;
0x00051bcc mov r0, r6 | r0 = r6;
0x00051bce str r3, [sp, 0x18] | var_18h = r3;
0x00051bd0 ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x00051bd2 str r3, [sp, 0x14] | var_14h = r3;
0x00051bd4 ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x00051bd6 strd r7, r3, [sp, 0xc] | __asm ("strd r7, r3, [var_ch]");
0x00051bda ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00051bdc strd r8, r3, [sp, 4] | __asm ("strd r8, r3, [var_4h]");
0x00051be0 ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x00051be2 str r3, [sp] | *(sp) = r3;
0x00051be4 orr r3, sb, 1 | r3 = sb | 1;
0x00051be8 bl 0x51a68 | r0 = fcn_00051a68 (r0, r1, r2, r3, r4, r5, r6);
0x00051bec cmp r0, 0 |
0x00051bee bne 0x51bba |
| } while (r0 != 0);
0x00051bf0 ldr r3, [sp, 0x70] | r3 = *(arg_70h);
0x00051bf2 mov r2, r5 | r2 = r5;
0x00051bf4 mov r1, r4 | r1 = r4;
0x00051bf6 mov r0, r6 | r0 = r6;
0x00051bf8 str r3, [sp, 0x18] | var_18h = r3;
0x00051bfa ldr r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x00051bfc str r3, [sp, 0x14] | var_14h = r3;
0x00051bfe ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x00051c00 strd r7, r3, [sp, 0xc] | __asm ("strd r7, r3, [var_ch]");
0x00051c04 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00051c06 strd r8, r3, [sp, 4] | __asm ("strd r8, r3, [var_4h]");
0x00051c0a ldr r3, [sp, 0x58] | r3 = *(arg_58h);
0x00051c0c str r3, [sp] | *(sp) = r3;
0x00051c0e orr r3, sb, 2 | r3 = sb | 2;
0x00051c12 bl 0x51a68 | r0 = fcn_00051a68 (r0, r1, r2, r3, r4, r5, r6);
0x00051c16 cmp r0, 0 |
| if (r0 != 0) {
0x00051c18 bne 0x51bba | goto label_0;
| }
0x00051c1a mov.w fp, 3 |
0x00051c1e mov sl, fp | sl = fp;
0x00051c20 b 0x51af6 | goto label_1;
| label_8:
0x00051c22 mov.w fp, 1 |
0x00051c26 mov sl, fp | sl = fp;
0x00051c28 b 0x51af6 | goto label_1;
| label_11:
0x00051c2a ldrd r3, r0, [sl, 4] | __asm ("ldrd r3, r0, [sl, 4]");
0x00051c2e blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00051c30 mov r1, sl | r1 = sl;
0x00051c32 mov r0, r6 | r0 = r6;
0x00051c34 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00051c38 b 0x51b4a | goto label_2;
| label_6:
0x00051c3a mov.w fp, 2 |
0x00051c3e mov sl, fp | sl = fp;
0x00051c40 b 0x51af6 | goto label_1;
| label_9:
0x00051c42 ldrsb.w r3, [r0] | r3 = *(r0);
0x00051c46 cmp r3, r5 |
| if (r3 != r5) {
0x00051c48 bne.w 0x51b14 | goto label_3;
| }
0x00051c4c ldr.w r3, [r6, 0xb8] | r3 = *((r6 + 0xb8));
| if (r3 != 0) {
0x00051c50 cbnz r3, 0x51c74 | goto label_12;
| }
0x00051c52 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00051c54 cmp r3, 0 |
| if (r3 == 0) {
0x00051c56 beq.w 0x51b1a | goto label_4;
| }
0x00051c58 add r7, sp, 0x180 | r7 = sp + 0x180;
0x00051c5a movs r1, 1 | r1 = 1;
| do {
0x00051c5c ldrb.w r2, [r3, 0x96] | r2 = *((r3 + 0x96));
0x00051c60 bfi r2, r1, 0, 2 | value_0 = BIT_MASK (0, 2);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x00051c64 strb.w r2, [r3, 0x96] | *((r3 + 0x96)) = r2;
0x00051c68 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00051c6a cmp r3, 0 |
0x00051c6c bne 0x51c5c |
| } while (r3 != 0);
0x00051c6e b 0x51b1a | goto label_4;
| label_10:
0x00051c70 movs r0, 7 | r0 = 7;
0x00051c72 b 0x51bba | goto label_0;
| label_12:
0x00051c74 ldr r2, [pc, 0x18] |
0x00051c76 mov r0, r6 | r0 = r6;
0x00051c78 movs r1, 5 | r1 = 5;
0x00051c7a add r2, pc | r2 = 0xa390e;
0x00051c7c bl 0x4a1f0 | fcn_0004a1f0 (r0, r1, r2);
0x00051c7e invalid |
0x00051c82 b 0x51bba | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x52468 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00052468 () | void fcn_00052468 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ah;
| int16_t var_3ch;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00052468 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005246c mov sb, r1 | sb = r1;
0x0005246e ldr r1, [pc, 0x320] |
0x00052470 mov r7, r3 | r7 = r3;
0x00052472 mov sl, r2 | sl = r2;
0x00052474 mov fp, r0 |
0x00052476 ldr r3, [pc, 0x31c] | r3 = *(0x52796);
0x00052478 add r1, pc | r1 = 0xa4c0e;
0x0005247a vpush {d8, d9} | __asm ("vpush {d8, d9}");
0x0005247e sub sp, 0x5c |
0x00052480 ldr r5, [r2, 4] | r5 = *((r2 + 4));
0x00052482 ldr r3, [r1, r3] |
0x00052484 ldr r3, [r3] | r3 = *(0xa4c0e);
0x00052486 str r3, [sp, 0x54] | var_54h = r3;
0x00052488 mov.w r3, 0 | r3 = 0;
0x0005248c cmp r7, 0 |
| if (r7 == 0) {
0x0005248e beq 0x52512 | goto label_17;
| }
0x00052490 ldrb.w r3, [sb, 1] | r3 = *((sb + 1));
0x00052494 cmp r3, 0x7f |
0x00052496 str r3, [sp, 0x28] | var_28h = r3;
| if (r3 > 0x7f) {
0x00052498 bhi.w 0x52898 | goto label_18;
| }
0x0005249c ldrb.w r1, [sb] | r1 = *(sb);
0x000524a0 movs r6, 2 | r6 = 2;
0x000524a2 str r1, [sp, 0x20] | var_20h = r1;
| label_10:
0x000524a4 ldr r0, [pc, 0x2f0] |
0x000524a6 add r0, pc | r0 = 0xa4c42;
0x000524a8 add r3, r0 | r3 += r0;
0x000524aa ldrb.w r3, [r3, 0x420] | r3 = *((r3 + 0x420));
| label_11:
0x000524ae add.w r8, r1, r3 | r8 = r1 + r3;
0x000524b2 adds r5, 0x28 | r5 += 0x28;
| do {
0x000524b4 cmp fp, r8 |
| if (fp <= r8) {
0x000524b6 blo 0x52536 | goto label_19;
| }
| label_0:
0x000524b8 ldr r3, [pc, 0x2e0] |
0x000524ba adds r7, 1 | r7++;
0x000524bc vldr d9, [pc, 0x2c0] | __asm ("vldr d9, [0x00052784]");
0x000524c0 adds r5, 0x28 | r5 += 0x28;
0x000524c2 add r3, pc | r3 = 0xa4c62;
0x000524c4 str r3, [sp, 0x14] | var_14h = r3;
| label_6:
0x000524c6 ldrh r3, [r5, -0x18] | r3 = *((r5 - 0x18));
0x000524ca sub.w r2, r5, 0x28 | r2 = r5 - 0x28;
0x000524ce ldrb.w r4, [sb, r6] | r4 = *((sb + r6));
0x000524d2 add.w r0, sb, r6 | r0 = sb + r6;
0x000524d6 str r2, [sp, 0x10] | var_10h = r2;
0x000524d8 subs r2, r7, 1 | r2 = r7 - 1;
0x000524da tst.w r3, 0x24 |
0x000524de str r2, [sp, 0xc] | var_ch_2 = r2;
0x000524e0 str r4, [sp, 0x24] | var_24h = r4;
| if ((r3 & 0x24) == 0) {
0x000524e2 beq 0x5257c | goto label_20;
| }
0x000524e4 cmp r4, 9 |
| if (r4 > 9) {
0x000524e6 bhi.w 0x525ee | goto label_4;
| }
0x000524ea cmp r4, 0 |
| if (r4 == 0) {
0x000524ec beq.w 0x5263c | goto label_3;
| }
0x000524f0 cmp r4, 7 |
0x000524f2 add.w r0, sb, r8 | r0 = sb + r8;
| if (r4 == 7) {
0x000524f6 beq.w 0x5261e | goto label_21;
| }
0x000524fa subs r3, r4, 1 | r3 = r4 - 1;
0x000524fc cmp r3, 5 |
| if (r3 > 5) {
0x000524fe bhi.w 0x52920 | goto label_22;
| }
| /* switch table (7 cases) at 0x52506 */
0x00052502 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_17:
0x00052512 ldrb.w r8, [sb] | r8 = *(sb);
0x00052516 cmp.w r8, 0x7f |
0x0005251a str.w r8, [sp, 0x20] | __asm ("str.w r8, [var_20h]");
0x0005251e it ls |
| if (r8 > 127) {
0x00052520 movls r6, 1 | r6 = 1;
| }
0x00052522 bls 0x524b4 |
| } while (r8 < 127);
0x00052524 add r1, sp, 0x20 | r1 += var_20h;
0x00052526 mov r0, sb | r0 = sb;
0x00052528 bl 0x273ac | fcn_000273ac (r0, r1);
0x0005252c ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x00052530 mov r6, r0 | r6 = r0;
0x00052532 cmp fp, r8 |
| if (fp >= r8) {
0x00052534 bhs 0x524b8 | goto label_0;
| }
| label_19:
0x00052536 ldr r0, [pc, 0x268] |
0x00052538 movw r3, 0x4e6d | r3 = 0x4e6d;
0x0005253c ldr r2, [pc, 0x264] |
0x0005253e ldr r1, [pc, 0x268] |
0x00052540 add r0, pc | r0 = 0xa4ce6;
0x00052542 add r2, pc | r2 = 0xa4cea;
0x00052544 add r1, pc | r1 = 0xa4cf2;
| label_14:
0x00052546 adds r0, 0x14 | r0 += 0x14;
0x00052548 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x0005254c str r0, [sp] | *(sp) = r0;
0x0005254e movs r0, 0xb | r0 = 0xb;
0x00052550 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00052554 movs r0, 0 | r0 = 0;
0x00052556 movs r3, 0xb | r3 = 0xb;
0x00052558 strb.w r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| do {
| label_1:
0x0005255c ldr r2, [pc, 0x24c] |
0x0005255e ldr r3, [pc, 0x234] | r3 = *(0x52796);
0x00052560 add r2, pc | r2 = 0xa4d10;
0x00052562 ldr r3, [r2, r3] | r3 = *(0xa4d10);
0x00052564 ldr r2, [r3] | r2 = *(0xa4d10);
0x00052566 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00052568 eors r2, r3 | r2 ^= r3;
0x0005256a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005256e bne.w 0x5291c | goto label_23;
| }
0x00052570 strh r5, [r2, 0xe] | *((r2 + 0xe)) = r5;
0x00052572 add sp, 0x5c |
0x00052574 vpop {d8, d9} | __asm ("vpop {d8, d9}");
0x00052578 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x0005257c lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
| if (r1 >= r3) {
0x0005257e bpl 0x52650 | goto label_24;
| }
0x00052580 cmp r4, 9 |
| if (r4 <= 9) {
0x00052582 bhi 0x525ee |
0x00052584 cmp r4, 0 |
| if (r4 == 0) {
0x00052586 beq 0x5263c | goto label_3;
| }
0x00052588 add r2, sp, 0x28 | r2 += var_28h;
0x0005258a mov r1, r4 | r1 = r4;
0x0005258c add.w r0, sb, r8 | r0 = sb + r8;
0x00052590 bl 0x25718 | fcn_00025718 (r0, r1, r2);
0x00052594 cmp r4, 7 |
| if (r4 == 7) {
0x00052596 beq.w 0x52880 | goto label_25;
| }
0x0005259a vldr d8, [r5, -0x28] | __asm ("vldr d8, [r5, -0x28]");
0x0005259e vcmpe.f64 d8, d9 | __asm ("vcmpe.f64 d8, d9");
0x000525a2 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r4 < 7) {
0x000525a6 bmi 0x525ee | goto label_4;
| }
0x000525a8 vldr d16, [pc, 0x1dc] | __asm ("vldr d16, [0x0005278c]");
0x000525ac vcmpe.f64 d8, d16 | __asm ("vcmpe.f64 d8, d16");
0x000525b0 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r4 >= 7) {
0x000525b4 bge 0x5263c | goto label_3;
| }
0x000525b6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000525b8 vmov r0, r1, d8 | __asm ("vmov r0, r1, d8");
0x000525bc ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x000525be str r3, [sp, 0x18] | var_18h = r3;
0x000525c0 bl 0xc50a0 | fcn_000c50a0 (r0, r1);
0x000525c4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000525c6 cmp r3, r0 |
0x000525c8 sbcs.w r2, r4, r1 | __asm ("sbcs.w r2, r4, r1");
| if (r3 < r0) {
0x000525cc blt 0x5263c | goto label_3;
| }
0x000525ce cmp r0, r3 |
0x000525d0 sbcs r1, r4 | __asm ("sbcs r1, r4");
| if (r0 < r3) {
0x000525d2 blt 0x525ee | goto label_4;
| }
0x000525d4 mov r0, r3 | r0 = r3;
0x000525d6 mov r1, r4 | r1 = r4;
0x000525d8 bl 0xc4d4c | r0 = fcn_000c4d4c (r0, r1, r2);
0x000525dc vmov d16, r0, r1 | __asm ("vmov d16, r0, r1");
0x000525e0 vcmpe.f64 d8, d16 | __asm ("vcmpe.f64 d8, d16");
0x000525e4 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 > r3) {
0x000525e8 bgt 0x5263c | goto label_3;
| }
| if (r0 >= r3) {
0x000525ea bpl.w 0x527ce | goto label_9;
| }
| }
| label_4:
0x000525ee ldr.w r4, [sl] | r4 = *(sl);
0x000525f2 movs r0, 1 | r0 = 1;
0x000525f4 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x000525f6 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000525f8 ldrb r3, [r3, r2] | r3 = *((r3 + r2));
0x000525fa cmp r3, 0 |
0x000525fc beq 0x5255c |
| } while (r3 == 0);
| label_2:
0x000525fe lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 >= r3) {
0x00052600 bpl 0x5261a | goto label_26;
| }
0x00052602 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00052604 and r3, r3, 1 | r3 &= 1;
0x00052608 cmp r2, 0 |
| if (r2 == 0) {
0x0005260a beq.w 0x528e6 | goto label_27;
| }
0x0005260e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00052610 ldrh r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00052612 and r2, r2, 1 | r2 &= 1;
| label_13:
0x00052616 cmp r3, r2 |
| if (r3 == r2) {
0x00052618 beq 0x5255c | goto label_1;
| }
| label_26:
0x0005261a rsbs r0, r0, 0 | r0 -= ;
0x0005261c b 0x5255c | goto label_1;
| label_21:
0x0005261e mov r1, r4 | r1 = r4;
0x00052620 add r2, sp, 0x28 | r2 += var_28h;
0x00052622 bl 0x256e0 | fcn_000256e0 (r0, r1, r2);
0x00052626 vldr d16, [pc, 0x158] | __asm ("vldr d16, [0x00052784]");
0x0005262a vldr d8, [sp, 0x28] | __asm ("vldr d8, [sp, 0x28]");
0x0005262e ldrd r3, r4, [r5, -0x28] | __asm ("ldrd r3, r4, [r5, -0x28]");
0x00052632 vcmpe.f64 d8, d16 | __asm ("vcmpe.f64 d8, d16");
0x00052636 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 >= r2) {
0x0005263a bpl 0x52730 | goto label_28;
| }
| label_3:
0x0005263c ldr.w r4, [sl] | r4 = *(sl);
0x00052640 mov.w r0, -1 | r0 = -1;
| label_15:
0x00052644 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00052646 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00052648 ldrb r3, [r3, r2] | r3 = *((r3 + r2));
0x0005264a cmp r3, 0 |
| if (r3 == 0) {
0x0005264c beq 0x5255c | goto label_1;
| }
0x0005264e b 0x525fe | goto label_2;
| label_24:
0x00052650 lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 >= r3) {
0x00052652 bpl 0x526e6 | goto label_29;
| }
0x00052654 cmp r4, 0x7f |
| if (r4 > 0x7f) {
0x00052656 bhi.w 0x52876 | goto label_30;
| }
| label_8:
0x0005265a cmp r4, 0xb |
| if (r4 < 0xb) {
0x0005265c bls 0x5263c | goto label_3;
| }
0x0005265e lsls r1, r4, 0x1f | r1 = r4 << 0x1f;
| if (r1 >= r4) {
0x00052660 bpl 0x525ee | goto label_4;
| }
0x00052662 subs r4, 0xc | r4 -= 0xc;
0x00052664 lsrs r4, r4, 1 | r4 >>= 1;
0x00052666 add.w r3, r4, r8 | r3 = r4 + r8;
0x0005266a str r4, [sp, 0x34] | var_34h = r4;
0x0005266c cmp fp, r3 |
| if (fp <= r3) {
0x0005266e blo.w 0x528ea | goto label_31;
| }
0x00052672 ldr.w r3, [sl] | r3 = *(sl);
0x00052676 ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x00052678 ldrh r2, [r3, 8] | r2 = *((r3 + 8));
0x0005267a cmp r2, r1 |
| if (r2 <= r1) {
0x0005267c ble.w 0x528ea | goto label_31;
| }
0x00052680 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00052682 add.w r0, sb, r8 | r0 = sb + r8;
0x00052686 add.w r2, r3, r2, lsl 2 | r2 = r3 + (r2 << 2);
0x0005268a ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0005268c cmp r2, 0 |
| if (r2 == 0) {
0x0005268e beq.w 0x52856 | goto label_32;
| }
0x00052692 ldrb r1, [r3, 4] | r1 = *((r3 + 4));
0x00052694 strb.w r1, [sp, 0x3a] | var_3ah = r1;
0x00052698 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0005269a ldr r1, [sp, 0x10] | r1 = var_10h;
0x0005269c str r0, [sp, 0x30] | var_30h = r0;
0x0005269e add r0, sp, 0x28 | r0 += var_28h;
0x000526a0 str r3, [sp, 0x3c] | var_3ch = r3;
0x000526a2 movs r3, 2 | r3 = 2;
0x000526a4 strh.w r3, [sp, 0x38] | var_38h = r3;
0x000526a8 add.w r3, sl, 0x17 | r3 = sl + 0x17;
0x000526ac bl 0x3def0 | r0 = fcn_0003def0 (r0, r1, r2, r3);
| label_5:
0x000526b0 cmp r0, 0 |
| if (r0 != 0) {
0x000526b2 bne.w 0x52900 | goto label_33;
| }
0x000526b6 ldrh.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000526ba cmp r3, r7 |
| if (r3 == r7) {
0x000526bc beq.w 0x5284a | goto label_34;
| }
0x000526c0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000526c2 cmp r3, 0x7f |
| if (r3 < 0x7f) {
0x000526c4 bls.w 0x527d8 | goto label_16;
| }
0x000526c8 sub.w r2, r3, 0xc | r2 = r3 - 0xc;
0x000526cc lsrs r3, r3, 7 | r3 >>= 7;
0x000526ce add.w r8, r8, r2, lsr 1 | r8 += (r2 >> 1);
0x000526d2 movs r2, 1 | r2 = 1;
| do {
0x000526d4 lsrs r3, r3, 7 | r3 >>= 7;
0x000526d6 adds r2, 1 | r2++;
0x000526d8 orr.w r3, r3, r0, lsl 25 | r3 |= (r0 << 25);
0x000526dc lsrs r0, r0, 7 | r0 >>= 7;
0x000526de orrs.w r1, r3, r0 | r1 = r3 | r0;
0x000526e2 bne 0x526d4 |
| } while (r1 != r3);
0x000526e4 b 0x527e4 | goto label_35;
| label_29:
0x000526e6 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 >= r3) {
0x000526e8 bpl.w 0x5283c | goto label_36;
| }
0x000526ec cmp r4, 0x7f |
| if (r4 > 0x7f) {
0x000526ee bhi.w 0x528b8 | goto label_37;
| }
| label_12:
0x000526f2 cmp r4, 0xb |
| if (r4 < 0xb) {
0x000526f4 bls 0x5263c | goto label_3;
| }
0x000526f6 lsls r0, r4, 0x1f | r0 = r4 << 0x1f;
| if (r0 < r4) {
0x000526f8 bmi 0x5263c | goto label_3;
| }
0x000526fa subs r4, 0xc | r4 -= 0xc;
0x000526fc lsrs r4, r4, 1 | r4 >>= 1;
0x000526fe add.w r2, r4, r8 | r2 = r4 + r8;
0x00052702 cmp fp, r2 |
| if (fp <= r2) {
0x00052704 blo.w 0x52906 | goto label_38;
| }
0x00052708 lsls r1, r3, 0x15 | r1 = r3 << 0x15;
| if (r1 < r3) {
0x0005270a bmi.w 0x528c6 | goto label_39;
| }
0x0005270e ldrd r1, r3, [r5, -0x20] | __asm ("ldrd r1, r3, [r5, -0x20]");
0x00052712 add.w r0, sb, r8 | r0 = sb + r8;
0x00052716 cmp r3, r4 |
0x00052718 mov r2, r3 | r2 = r3;
0x0005271a it ge |
| if (r3 < r4) {
0x0005271c movge r2, r4 | r2 = r4;
| }
0x0005271e str r3, [sp, 0x18] | var_18h = r3;
0x00052720 blx 0x66a8 | loc_imp_gmon_start_ ();
0x00052724 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00052726 cmp r0, 0 |
| if (r0 != 0) {
0x00052728 bne.w 0x52900 | goto label_33;
| }
0x0005272c subs r0, r4, r3 | r0 = r4 - r3;
0x0005272e b 0x526b0 | goto label_5;
| label_28:
0x00052730 vldr d16, [pc, 0x54] | __asm ("vldr d16, [0x0005278c]");
0x00052734 vcmpe.f64 d8, d16 | __asm ("vcmpe.f64 d8, d16");
0x00052738 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 >= r4) {
0x0005273c bge.w 0x525ee | goto label_4;
| }
0x00052740 vmov r0, r1, d8 | __asm ("vmov r0, r1, d8");
0x00052744 str r3, [sp, 0x18] | var_18h = r3;
0x00052746 bl 0xc50a0 | fcn_000c50a0 (r0, r1);
0x0005274a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005274c cmp r3, r0 |
0x0005274e sbcs.w r2, r4, r1 | __asm ("sbcs.w r2, r4, r1");
| if (r3 < r0) {
0x00052752 blt.w 0x525ee | goto label_4;
| }
0x00052756 cmp r0, r3 |
0x00052758 sbcs r1, r4 | __asm ("sbcs r1, r4");
| if (r0 < r3) {
0x0005275a blt.w 0x5263c | goto label_3;
| }
0x0005275e mov r0, r3 | r0 = r3;
0x00052760 mov r1, r4 | r1 = r4;
0x00052762 bl 0xc4d4c | r0 = fcn_000c4d4c (r0, r1, r2);
0x00052766 vmov d16, r0, r1 | __asm ("vmov d16, r0, r1");
0x0005276a vcmpe.f64 d8, d16 | __asm ("vcmpe.f64 d8, d16");
0x0005276e vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 > r3) {
0x00052772 bgt.w 0x525ee | goto label_4;
| }
| if (r0 < r3) {
0x00052776 bmi.w 0x5263c | goto label_3;
| }
0x0005277a b 0x527ce | goto label_9;
0x000527b0 ldr r3, [r0] | r3 = *(r0);
0x000527b2 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x000527b4 rev r3, r3 | r3 = SWAP32 (r3);
0x000527b6 rev r4, r4 | r4 = SWAP32 (r4);
| label_7:
0x000527b8 ldrd r1, r2, [r5, -0x28] | __asm ("ldrd r1, r2, [r5, -0x28]");
0x000527bc cmp r4, r1 |
0x000527be sbcs.w r0, r3, r2 | __asm ("sbcs.w r0, r3, r2");
| if (r4 < r1) {
0x000527c2 blt.w 0x5263c | goto label_3;
| }
0x000527c6 cmp r1, r4 |
0x000527c8 sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r1 < r4) {
0x000527ca blt.w 0x525ee | goto label_4;
| }
| label_9:
0x000527ce ldrh.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000527d2 cmp r3, r7 |
| if (r3 == r7) {
0x000527d4 beq 0x5284a | goto label_34;
| }
0x000527d6 ldr r3, [sp, 0x24] | r3 = var_24h;
| label_16:
0x000527d8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000527da add r3, r2 | r3 += r2;
0x000527dc movs r2, 1 | r2 = 1;
0x000527de ldrb.w r3, [r3, 0x420] | r3 = *((r3 + 0x420));
0x000527e2 add r8, r3 | r8 += r3;
| label_35:
0x000527e4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000527e6 add r6, r2 | r6 += r2;
0x000527e8 adds r7, 1 | r7++;
0x000527ea adds r5, 0x28 | r5 += 0x28;
0x000527ec cmp fp, r8 |
0x000527ee it hs |
| if (fp < r8) {
0x000527f0 cmphs r3, r6 | __asm ("cmphs r3, r6");
| goto label_40;
| }
| if (fp > r8) {
| label_40:
0x000527f2 bhi.w 0x524c6 | goto label_6;
| }
0x000527f6 b 0x5284a | goto label_34;
0x000527f8 ldrsb.w r2, [r0] | r2 = *(r0);
0x000527fc ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x000527fe ldr.w r4, [r0, 2] | r4 = *((r0 + 2));
0x00052802 orr.w r3, r3, r2, lsl 8 | r3 |= (r2 << 8);
0x00052806 rev r4, r4 | r4 = SWAP32 (r4);
0x00052808 b 0x527b8 | goto label_7;
0x0005280a ldr r4, [r0] | r4 = *(r0);
0x0005280c rev r4, r4 | r4 = SWAP32 (r4);
0x0005280e asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x00052810 b 0x527b8 | goto label_7;
0x00052812 ldrh.w r3, [r0, 1] | r3 = *((r0 + 1));
0x00052816 ldrsb.w r2, [r0] | r2 = *(r0);
0x0005281a rev16 r4, r3 | __asm ("rev16 r4, r3");
0x0005281c uxth r4, r4 | r4 = (int16_t) r4;
0x0005281e orr.w r4, r4, r2, lsl 16 | r4 |= (r2 << 16);
0x00052822 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x00052824 b 0x527b8 | goto label_7;
0x00052826 ldrsb.w r3, [r0] | r3 = *(r0);
0x0005282a ldrb r4, [r0, 1] | r4 = *((r0 + 1));
0x0005282c orr.w r4, r4, r3, lsl 8 | r4 |= (r3 << 8);
0x00052830 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x00052832 b 0x527b8 | goto label_7;
0x00052834 ldrsb.w r4, [r0] | r4 = *(r0);
0x00052838 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0005283a b 0x527b8 | goto label_7;
| label_36:
0x0005283c cmp r4, 0 |
| if (r4 != 0) {
0x0005283e bne.w 0x525ee | goto label_4;
| }
0x00052842 ldrh.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x00052846 cmp r3, r7 |
| if (r3 != r7) {
0x00052848 bne 0x52918 | goto label_41;
| }
| label_34:
0x0005284a movs r3, 1 | r3 = 1;
0x0005284c ldrsb.w r0, [sl, 0x16] | r0 = *((sl + 0x16));
0x00052850 strb.w r3, [sl, 0x1a] | *((sl + 0x1a)) = r3;
0x00052854 b 0x5255c | goto label_1;
| label_32:
0x00052856 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00052858 ldrd r1, r3, [r5, -0x20] | __asm ("ldrd r1, r3, [r5, -0x20]");
0x0005285c cmp r3, r4 |
0x0005285e mov r2, r3 | r2 = r3;
0x00052860 it ge |
| if (r3 < r4) {
0x00052862 movge r2, r4 | r2 = r4;
| }
0x00052864 str r3, [sp, 0x18] | var_18h = r3;
0x00052866 blx 0x66a8 | loc_imp_gmon_start_ ();
0x0005286a ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005286c cmp r0, 0 |
| if (r0 != 0) {
0x0005286e bne 0x528fc | goto label_42;
| }
0x00052870 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00052872 subs r0, r4, r2 | r0 = r4 - r2;
0x00052874 b 0x526b0 | goto label_5;
| label_30:
0x00052876 add r1, sp, 0x24 | r1 += var_24h;
0x00052878 bl 0x273ac | fcn_000273ac (r0, r1);
0x0005287c ldr r4, [sp, 0x24] | r4 = var_24h;
0x0005287e b 0x5265a | goto label_8;
| label_25:
0x00052880 vldr d17, [sp, 0x28] | __asm ("vldr d17, [sp, 0x28]");
0x00052884 vldr d16, [r5, -0x28] | __asm ("vldr d16, [r5, -0x28]");
0x00052888 vcmpe.f64 d17, d16 | __asm ("vcmpe.f64 d17, d16");
0x0005288c vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 < r4) {
0x00052890 bmi.w 0x5263c | goto label_3;
| }
| if (r0 <= r4) {
0x00052894 ble 0x527ce | goto label_9;
| }
0x00052896 b 0x525ee | goto label_4;
| label_18:
0x00052898 add r1, sp, 0x28 | r1 += var_28h;
0x0005289a add.w r0, sb, 1 | r0 = sb + 1;
0x0005289e bl 0x273ac | fcn_000273ac (r0, r1);
0x000528a2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000528a4 adds r6, r0, 1 | r6 = r0 + 1;
0x000528a6 ldrb.w r1, [sb] | r1 = *(sb);
0x000528aa cmp r3, 0x7f |
0x000528ac str r1, [sp, 0x20] | var_20h = r1;
| if (r3 < 0x7f) {
0x000528ae bls.w 0x524a4 | goto label_10;
| }
0x000528b2 subs r3, 0xc | r3 -= 0xc;
0x000528b4 lsrs r3, r3, 1 | r3 >>= 1;
0x000528b6 b 0x524ae | goto label_11;
| label_37:
0x000528b8 add r1, sp, 0x24 | r1 += var_24h;
0x000528ba str r3, [sp, 0x18] | var_18h = r3;
0x000528bc bl 0x273ac | fcn_000273ac (r0, r1);
0x000528c0 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000528c2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000528c4 b 0x526f2 | goto label_12;
| if (r4 == 0) {
| label_39:
0x000528c6 cbz r4, 0x528de | goto label_43;
| }
0x000528c8 add.w r3, sb, r8 | r3 = sb + r8;
0x000528cc adds r1, r4, r3 | r1 = r4 + r3;
0x000528ce b 0x528d4 |
| while (r2 == 0) {
0x000528d0 cmp r3, r1 |
| if (r3 == r1) {
0x000528d2 beq 0x528de | goto label_43;
| }
0x000528d4 ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x000528d8 cmp r2, 0 |
0x000528da beq 0x528d0 |
| }
0x000528dc b 0x525ee | goto label_4;
| label_43:
0x000528de ldr r0, [r5, -0x28] | r0 = *((r5 - 0x28));
0x000528e2 subs r0, r4, r0 | r0 = r4 - r0;
0x000528e4 b 0x526b0 | goto label_5;
| label_27:
0x000528e6 movs r2, 1 | r2 = 1;
0x000528e8 b 0x52616 | goto label_13;
| label_31:
0x000528ea ldr r0, [pc, 0x3c] |
0x000528ec movw r3, 0x4eba | r3 = 0x4eba;
0x000528f0 ldr r2, [pc, 0x38] |
0x000528f2 ldr r1, [pc, 0x3c] |
0x000528f4 add r0, pc | r0 = 0xa5222;
0x000528f6 add r2, pc | r2 = 0xa5226;
0x000528f8 add r1, pc | r1 = 0xa522e;
0x000528fa b 0x52546 | goto label_14;
| label_42:
0x000528fc mov r4, r3 | r4 = r3;
0x000528fe b 0x52644 | goto label_15;
| label_33:
0x00052900 invalid |
0x00052904 b 0x52644 | goto label_15;
| label_38:
0x00052906 ldr r0, [pc, 0x2c] |
0x00052908 movw r3, 0x4ed8 | r3 = 0x4ed8;
0x0005290c ldr r2, [pc, 0x28] |
0x0005290e ldr r1, [pc, 0x2c] |
0x00052910 add r0, pc | r0 = 0xa524a;
0x00052912 add r2, pc | r2 = 0xa524e;
0x00052914 add r1, pc | r1 = 0xa5256;
0x00052916 b 0x52546 | goto label_14;
| label_41:
0x00052918 mov r3, r4 | r3 = r4;
0x0005291a b 0x527d8 | goto label_16;
| label_23:
0x0005291c blx 0x6430 | fcn_00006430 ();
| label_22:
0x00052920 subs r4, 8 | r4 -= 8;
0x00052922 movs r3, 0 | r3 = 0;
0x00052924 b 0x527b8 | goto label_7;
0x00071638 adr r4, 0x19c | r4 = 0x19c;
0x0007163a vqshlu.s32 d20, d1, 0x1b | __asm ("vqshlu.s32 d20, d1, 0x1b");
0x0007163c mov r1, r2 | r1 = r2;
0x0007163e push {r4, lr} |
0x00071640 movs r2, 0 | r2 = 0;
0x00071642 mov r4, r0 | r4 = r0;
0x00071644 bl 0x7142c | fcn_0007142c (r0, r1, r2, r3, r4);
0x00071648 ldr r1, [r4] | r1 = *(r4);
0x0007164a subs r2, r0, 0 | r2 = r0 - 0;
0x0007164c it ne |
| if (r2 == r0) {
0x0007164e movne r2, 1 | r2 = 1;
| }
0x00071650 ldrh r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00071652 ands r3, r3, 0x9000 | r3 &= 0x9000;
| if (r3 == r3) {
0x00071656 bne 0x71662 |
0x00071658 movs r0, 4 | r0 = 4;
0x0007165a strd r2, r3, [r1] | __asm ("strd r2, r3, [r1]");
0x0007165e strh r0, [r1, 0x10] | *((r1 + 0x10)) = r0;
0x00071660 pop {r4, pc} |
| }
0x00071662 pop.w {r4, lr} |
0x00071666 movs r3, 0 | r3 = 0;
0x00071668 mov r0, r1 | r0 = r1;
0x0007166a b.w 0x2d2d8 | return void (*0x2d2d8)() ();
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x536c8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x53948 */
| #include <stdint.h>
|
; (fcn) fcn.00053948 () | void fcn_00053948 (int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00053948 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005394c sub sp, 0x2c |
0x0005394e ldr r6, [pc, 0x138] |
0x00053950 mov ip, r1 |
0x00053952 ldr r5, [pc, 0x138] | r5 = *(0x53a8e);
0x00053954 add r6, pc | r6 = 0xa73e2;
0x00053956 ldr r4, [sp, 0x50] | r4 = *(arg_50h);
0x00053958 ldr r1, [sp, 0x54] | r1 = *(arg_54h);
0x0005395a ldr r5, [r6, r5] |
0x0005395c ldr r7, [sp, 0x58] | r7 = *(arg_58h);
0x0005395e ldr r5, [r5] | r5 = *(0xa73e2);
0x00053960 str r5, [sp, 0x24] | var_24h = r5;
0x00053962 mov.w r5, 0 | r5 = 0;
0x00053966 mov r5, r2 | r5 = r2;
0x00053968 adds r2, r4, r1 | r2 = r4 + r1;
0x0005396a cmp r4, r2 |
0x0005396c str r2, [sp, 0xc] | var_ch = r2;
| if (r4 >= r2) {
0x0005396e bge 0x53a58 | goto label_4;
| }
0x00053970 ldr r1, [r7, 0x28] | r1 = *((r7 + 0x28));
0x00053972 mov lr, r0 | lr = r0;
0x00053974 cmp r4, r1 |
| if (r4 < r1) {
0x00053976 blt.w 0x53a7c | goto label_5;
| }
0x0005397a add.w r1, r7, 0x28 | r1 = r7 + 0x28;
0x0005397e mov.w r8, 0 | r8 = 0;
| do {
0x00053982 ldr r2, [r1, 4]! | r2 = *((r1 += 4));
0x00053986 add.w r8, r8, 1 | r8++;
0x0005398a cmp r2, r4 |
| if (r2 > r4) {
0x0005398c bgt 0x53994 | goto label_3;
| }
0x0005398e cmp.w r8, 6 |
0x00053992 bne 0x53982 |
| } while (r8 != 6);
| label_3:
0x00053994 adds r6, r3, 2 | r6 = r3 + 2;
0x00053996 add.w r3, r8, 4 | r3 = r8 + 4;
0x0005399a ldr.w sl, [r7, r3, lsl 2] | offset_0 = r3 << 2;
| sl = *((r7 + offset_0));
0x0005399e add r3, sp, 0x20 | r3 += var_20h;
0x000539a0 ldr.w fp, [r5] | fp = *(r5);
0x000539a4 strd ip, r5, [sp, 0x18] | __asm ("strd ip, r5, [var_1ch]");
0x000539a8 ldr.w sb, [lr, 0x38] | sb = *((lr + 0x38));
0x000539ac mov r5, sl | r5 = sl;
0x000539ae strd r3, lr, [sp, 0x10] | __asm ("strd r3, lr, [var_10h]");
0x000539b2 b 0x53a08 |
| while (r3 == 0) {
0x000539b4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000539b6 sub.w r3, fp, r3 | r3 = fp - r3;
0x000539ba cmp r3, sl |
| if (r3 < sl) {
0x000539bc blt 0x53a36 | goto label_2;
| }
| label_1:
0x000539be sub.w fp, fp, sl |
0x000539c2 mov r3, fp | r3 = fp;
| label_0:
0x000539c4 ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x000539c6 ldr.w r0, [r2, r4, lsl 2] | offset_1 = r4 << 2;
| r0 = *((r2 + offset_1));
0x000539ca add.w r2, r0, sl | r2 = r0 + sl;
0x000539ce cmp r2, r5 |
| if (r2 >= r5) {
0x000539d0 bls 0x539d6 |
0x000539d2 cmp r0, r5 |
| if (r0 <= r5) {
0x000539d4 blo 0x53a5c | goto label_6;
| }
| }
0x000539d6 mov r1, r0 | r1 = r0;
0x000539d8 mov r2, sl | r2 = sl;
0x000539da mov r0, r3 | r0 = r3;
0x000539dc adds r4, 1 | r4++;
0x000539de blx 0x6354 | r0 = realloc (r0, r1);
0x000539e2 sub.w r3, r0, sb | r3 = r0 - sb;
0x000539e6 strb r3, [r6, -0x1] | *((r6 - 0x1)) = r3;
0x000539ea asrs r3, r3, 8 | r3 >>= 8;
0x000539ec strb r3, [r6, -0x2] | *((r6 - 0x2)) = r3;
0x000539f0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000539f2 cmp r3, r4 |
| if (r3 == r4) {
0x000539f4 beq 0x53a52 | goto label_7;
| }
0x000539f6 add.w r3, r7, r8, lsl 2 | r3 = r7 + (r8 << 2);
0x000539fa adds r6, 2 | r6 += 2;
0x000539fc ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x000539fe cmp r2, r4 |
0x00053a00 itt le |
| if (r2 > r4) {
0x00053a02 ldrle r5, [r3, 0x14] | r5 = *((r3 + 0x14));
| }
| if (r2 > r4) {
0x00053a04 addle r8, r8, 1 | r8++;
| }
0x00053a08 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00053a0a ldrh.w sl, [r3, r4, lsl 1] | offset_2 = r4 << 1;
| sl = *((r3 + offset_2));
0x00053a0e ldrb.w r3, [sb, 1] | r3 = *((sb + 1));
| if (r3 != 0) {
0x00053a12 cbnz r3, 0x53a1c | goto label_8;
| }
0x00053a14 ldrb.w r3, [sb, 2] | r3 = *((sb + 2));
0x00053a18 cmp r3, 0 |
0x00053a1a beq 0x539b4 |
| }
| label_8:
0x00053a1c ldr r2, [sp, 0x10] | r2 = var_10h;
0x00053a1e mov r1, sl | r1 = sl;
0x00053a20 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00053a22 bl 0x51298 | r0 = fcn_00051298 (r0, r1, r2);
0x00053a26 mov r3, r0 | r3 = r0;
0x00053a28 cmp r0, 0 |
| if (r0 != 0) {
0x00053a2a bne 0x539c4 | goto label_0;
| }
0x00053a2c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00053a2e sub.w r3, fp, r3 | r3 = fp - r3;
0x00053a32 cmp r3, sl |
| if (r3 >= sl) {
0x00053a34 bge 0x539be | goto label_1;
| }
| label_2:
0x00053a36 movs r0, 1 | r0 = 1;
| do {
0x00053a38 ldr r2, [pc, 0x54] |
0x00053a3a ldr r3, [pc, 0x50] | r3 = *(0x53a8e);
0x00053a3c add r2, pc | r2 = 0xa74d0;
0x00053a3e ldr r3, [r2, r3] | r3 = *(0xa74d0);
0x00053a40 ldr r2, [r3] | r2 = *(0xa74d0);
0x00053a42 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00053a44 eors r2, r3 | r2 ^= r3;
0x00053a46 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00053a4a bne 0x53a82 | goto label_9;
| }
0x00053a4c add sp, 0x2c |
0x00053a4e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x00053a52 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00053a54 str.w fp, [r5] | __asm ("str.w fp, [r5]");
| label_4:
0x00053a58 movs r0, 0 | r0 = 0;
0x00053a5a b 0x53a38 |
| } while (1);
| label_6:
0x00053a5c ldr r4, [pc, 0x34] | r4 = *(0x53a94);
0x00053a5e movw r3, 0x235f |
0x00053a62 ldr r2, [pc, 0x34] | r2 = *(0x53a9a);
0x00053a64 movt r3, 1 | r3 = 0x1235f;
0x00053a68 ldr r1, [pc, 0x30] | r1 = *(0x53a9c);
0x00053a6a movs r0, 0xb | r0 = 0xb;
| do {
0x00053a6c add r4, pc | r4 += pc;
0x00053a6e adds r4, 0x14 | r4 += 0x14;
0x00053a70 add r2, pc | r2 += pc;
0x00053a72 add r1, pc | r1 += pc;
0x00053a74 str r4, [sp] | *(sp) = r4;
0x00053a76 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00053a7a b 0x53a36 | goto label_2;
| label_5:
0x00053a7c mov.w r8, 0 | r8 = 0;
0x00053a80 b 0x53994 | goto label_3;
| label_9:
0x00053a82 blx 0x6430 | fcn_00006430 ();
0x00053a86 nop |
0x00053a88 str r4, [r0, 0x44] | *((r0 + 0x44)) = r4;
0x00053a8a movs r1, r1 |
0x00053a8c lsls r4, r6, 8 | r4 = r6 << 8;
0x00053a8e movs r0, r0 |
0x00053a90 str r4, [r3, 0x34] | *((r3 + 0x34)) = r4;
0x00053a92 movs r1, r1 |
0x00053a94 strh r4, [r2, 0x30] | *((r2 + 0x30)) = r4;
0x00053a96 movs r7, r0 | r7 = r0;
0x00053a98 bvc 0x53aa4 | __asm ("bvc 0x53aa4");
0x00053a9a movs r7, r0 | r7 = r0;
0x00053a9c bvs 0x53a6c | __asm ("bvs 0x53a6c");
| } while (1);
0x00053a9e movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x53aa0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00053aa0 () | void fcn_00053aa0 (uint32_t arg1, int16_t arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x00053aa0 push {r4, r5, r6, lr} |
0x00053aa2 sub sp, 8 |
0x00053aa4 cmp r0, 0 |
| if (r0 == 0) {
0x00053aa6 beq 0x53b90 | goto label_2;
| }
0x00053aa8 mov r4, r0 | r4 = r0;
0x00053aaa ldr r3, [r0] | r3 = *(r0);
0x00053aac cmp r3, 0 |
| if (r3 == 0) {
0x00053aae beq.w 0x53bba | goto label_3;
| }
0x00053ab2 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00053ab4 mov r5, r1 | r5 = r1;
| if (r0 != 0) {
0x00053ab6 cbz r0, 0x53ac0 |
0x00053ab8 ldr r3, [pc, 0x10c] |
0x00053aba add r3, pc |
0x00053abc ldr r3, [r3, 0x50] | r3 = *(0xa76d6);
0x00053abe blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00053ac0 ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
0x00053ac4 cmp r3, 1 |
| if (r3 != 1) {
0x00053ac6 bne 0x53b46 | goto label_4;
| }
0x00053ac8 cmp r5, 0 |
| if (r5 <= 0) {
0x00053aca ble 0x53b02 | goto label_5;
| }
0x00053acc ldrsh.w r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00053ad0 cmp r3, r5 |
| if (r3 < r5) {
0x00053ad2 blt 0x53b02 | goto label_5;
| }
0x00053ad4 ldr r6, [r4, 0x64] | r6 = *((r4 + 0x64));
0x00053ad6 subs r5, 1 | r5--;
0x00053ad8 add.w r3, r5, r5, lsl 2 | r3 = r5 + (r5 << 2);
0x00053adc add.w r6, r6, r3, lsl 3 | r6 += (r3 << 3);
0x00053ae0 ldrh r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00053ae2 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) != 0) {
0x00053ae6 bne 0x53b20 | goto label_6;
| }
0x00053ae8 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x00053aea cbnz r3, 0x53b20 |
| while (1) {
0x00053aec ldr r2, [r4] | r2 = *(r4);
0x00053aee movs r3, 1 | r3 = 1;
0x00053af0 movs r1, 0 | r1 = 0;
0x00053af2 strh r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x00053af4 str r1, [r2, 0x40] | *((r2 + 0x40)) = r1;
0x00053af6 ldr.w r2, [r4, 0xd8] | r2 = *((r4 + 0xd8));
| if (r2 != 0) {
0x00053afa cbnz r2, 0x53b28 | goto label_7;
| }
| label_0:
0x00053afc movs r0, 0 | r0 = 0;
0x00053afe add sp, 8 |
0x00053b00 pop {r4, r5, r6, pc} |
| label_5:
0x00053b02 ldr r0, [r4] | r0 = *(r4);
0x00053b04 movs r1, 0x19 | r1 = 0x19;
0x00053b06 str r1, [r0, 0x40] | *((r0 + 0x40)) = r1;
0x00053b08 bl 0x2e6d4 | fcn_0002e6d4 (r0, r1);
0x00053b0c ldr r3, [r4] | r3 = *(r4);
0x00053b0e ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
| if (r0 != 0) {
0x00053b10 cbz r0, 0x53b1a |
0x00053b12 ldr r3, [pc, 0xb8] |
0x00053b14 add r3, pc |
0x00053b16 ldr r3, [r3, 0x58] | r3 = *(0xa773e);
0x00053b18 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00053b1a movs r0, 0x19 | r0 = 0x19;
0x00053b1c add sp, 8 |
0x00053b1e pop {r4, r5, r6, pc} |
| label_6:
0x00053b20 mov r0, r6 | r0 = r6;
0x00053b22 bl 0x2d36c | fcn_0002d36c (r0);
0x00053b26 b 0x53aec |
| }
| label_7:
0x00053b28 cmp r5, 0x1e |
0x00053b2a ite le |
| if (r5 > 0x1e) {
0x00053b2c lslle r3, r5 | r3 <<= r5;
| }
| if (r5 <= 0x1e) {
0x00053b2e movgt r3, -0x80000000 | r3 = -0x80000000;
| }
0x00053b32 tst r2, r3 |
| if ((r2 & r3) == 0) {
0x00053b34 beq 0x53afc | goto label_0;
| }
0x00053b36 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x00053b3a movs r2, 1 | r2 = 1;
0x00053b3c bfi r3, r2, 0, 2 | value_0 = BIT_MASK (0, 2);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x00053b40 strb.w r3, [r4, 0x96] | *((r4 + 0x96)) = r3;
0x00053b44 b 0x53afc | goto label_0;
| label_4:
0x00053b46 ldr r0, [r4] | r0 = *(r4);
0x00053b48 movs r1, 0x15 | r1 = 0x15;
0x00053b4a str r1, [r0, 0x40] | *((r0 + 0x40)) = r1;
0x00053b4c bl 0x2e6d4 | fcn_0002e6d4 (r0, r1);
0x00053b50 ldr r3, [r4] | r3 = *(r4);
0x00053b52 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
| if (r0 != 0) {
0x00053b54 cbz r0, 0x53b5e |
0x00053b56 ldr r3, [pc, 0x78] |
0x00053b58 add r3, pc |
0x00053b5a ldr r3, [r3, 0x58] | r3 = *(0xa7786);
0x00053b5c blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00053b5e ldr r1, [pc, 0x74] |
0x00053b60 movs r0, 0x15 | r0 = 0x15;
0x00053b62 ldr.w r2, [r4, 0xc4] | r2 = *((r4 + 0xc4));
0x00053b66 ldr r4, [pc, 0x70] |
0x00053b68 add r1, pc | r1 = 0xa7742;
0x00053b6a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00053b6e ldr r2, [pc, 0x6c] |
0x00053b70 add r4, pc | r4 = 0xa774e;
0x00053b72 ldr r1, [pc, 0x6c] |
0x00053b74 movw r3, 0x5703 |
0x00053b78 adds r4, 0x14 | r4 += 0x14;
0x00053b7a movt r3, 1 | r3 = 0x15703;
0x00053b7e add r2, pc | r2 = 0xa7760;
0x00053b80 movs r0, 0x15 | r0 = 0x15;
0x00053b82 add r1, pc | r1 = 0xa7768;
0x00053b84 str r4, [sp] | *(sp) = r4;
0x00053b86 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| do {
0x00053b8a movs r0, 0x15 | r0 = 0x15;
0x00053b8c add sp, 8 |
0x00053b8e pop {r4, r5, r6, pc} |
| label_2:
0x00053b90 ldr r1, [pc, 0x50] |
0x00053b92 movs r0, 0x15 | r0 = 0x15;
0x00053b94 add r1, pc | r1 = 0xa777c;
0x00053b96 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| label_1:
0x00053b9a ldr r4, [pc, 0x4c] |
0x00053b9c movw r3, 0x56fb |
0x00053ba0 ldr r2, [pc, 0x48] |
0x00053ba2 movt r3, 1 | r3 = 0x156fb;
0x00053ba6 ldr r1, [pc, 0x48] |
0x00053ba8 movs r0, 0x15 | r0 = 0x15;
0x00053baa add r4, pc | r4 = 0xa7798;
0x00053bac adds r4, 0x14 | r4 += 0x14;
0x00053bae add r2, pc | r2 = 0xa779e;
0x00053bb0 add r1, pc | r1 = 0xa77a6;
0x00053bb2 str r4, [sp] | *(sp) = r4;
0x00053bb4 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00053bb8 b 0x53b8a |
| } while (1);
| label_3:
0x00053bba ldr r1, [pc, 0x38] |
0x00053bbc movs r0, 0x15 | r0 = 0x15;
0x00053bbe add r1, pc | r1 = 0xa77b8;
0x00053bc0 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00053bc4 b 0x53b9a | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x55920 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00055920 () | void fcn_00055920 (int16_t arg_1h, int16_t arg_8h, arithmetic x, int16_t arg_38h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_108h, int16_t arg_10ch, int16_t arg_84h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_1ch_2;
| int16_t var_30h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_3;
| int16_t var_18h;
| arithmetic var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_1ch_3;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_5dh;
| int16_t var_60h;
| int16_t var_64h;
| arithmetic var_68h;
| int16_t var_48h_2;
| int16_t var_4ch_2;
| int16_t var_50h_2;
| int16_t var_54h_2;
| int16_t var_58h_2;
| int16_t var_5ch_2;
| int16_t var_64h_2;
| int16_t var_68h_2;
| int32_t var_68h_3;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ah;
| int16_t var_84h;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_cch;
| int16_t var_10h_2;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00055920 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00055924 sub sp, 0x24 |
0x00055926 str r1, [sp, 8] | var_8h = r1;
0x00055928 mov r4, r3 | r4 = r3;
0x0005592a mov r5, r0 | r5 = r0;
0x0005592c mov r6, r2 | r6 = r2;
0x0005592e ldr r1, [pc, 0x174] |
0x00055930 ldr r3, [pc, 0x174] | r3 = *(0x55aa8);
0x00055932 ldr r7, [r0, 0x14] | r7 = *((r0 + 0x14));
0x00055934 add r1, pc | r1 = 0xab3de;
0x00055936 ldr r3, [r1, r3] |
0x00055938 ldr r3, [r3] | r3 = *(0xab3de);
0x0005593a str r3, [sp, 0x1c] | var_1ch = r3;
0x0005593c mov.w r3, 0 | r3 = 0;
0x00055940 cmp r2, 0 |
| if (r2 == 0) {
0x00055942 beq.w 0x55a98 | goto label_39;
| }
0x00055946 ldr r3, [pc, 0x164] |
0x00055948 mov sl, r4 | sl = r4;
0x0005594a add.w fp, sp, 0x18 |
0x0005594e strd r7, r4, [sp, 0x10] | __asm ("strd r7, r4, [var_b0h]");
0x00055952 add r3, pc | r3 = 0xab404;
0x00055954 str r3, [sp, 0xc] | var_cch = r3;
| do {
| label_0:
0x00055956 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| if (r3 == 0) {
0x00055958 cbz r3, 0x559ba | goto label_1;
| }
0x0005595a mov r1, r6 | r1 = r6;
0x0005595c mov r0, r5 | r0 = r5;
0x0005595e bl 0x558c4 | r0 = fcn_000558c4 (r0, r1);
0x00055962 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00055964 cbnz r0, 0x559ba | goto label_1;
| }
0x00055966 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00055968 mov r2, fp | r2 = fp;
0x0005596a mov r1, r6 | r1 = r6;
0x0005596c add.w sb, sl, -1 | sb = sl + -1;
0x00055970 ldr.w r4, [r0, 0xdc] | r4 = *((r0 + 0xdc));
0x00055974 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00055976 mov r4, r0 | r4 = r0;
0x00055978 cmp r0, 0 |
| if (r0 != 0) {
0x0005597a bne 0x55a78 | goto label_40;
| }
0x0005597c ldr r1, [sp, 8] | r1 = var_8h;
0x0005597e ldr r0, [sp, 0x18] | r0 = var_b4h;
0x00055980 ldr r3, [r5] | r3 = *(r5);
0x00055982 ldr.w r8, [r0, 4] | r8 = *((r0 + 4));
0x00055986 ldrb r2, [r3, 0x11] | r2 = *((r3 + 0x11));
| if (r1 == 0) {
0x00055988 cbz r1, 0x559de | goto label_41;
| }
0x0005598a ldr.w r7, [r8, 4] | r7 = *((r8 + 4));
0x0005598e rev r7, r7 | r7 = SWAP32 (r7);
0x00055990 cmp r2, 0 |
| if (r2 != 0) {
0x00055992 bne 0x55a38 | goto label_42;
| }
| label_4:
0x00055994 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x00055996 lsrs r2, r2, 2 | r2 >>= 2;
0x00055998 subs r2, 2 | r2 -= 2;
0x0005599a cmp r2, r7 |
| if (r2 >= r7) {
0x0005599c bhs 0x559fa | goto label_43;
| }
0x0005599e ldr r1, [sp, 0xc] | r1 = var_cch;
0x000559a0 mov r2, r6 | r2 = r6;
0x000559a2 mov r0, r5 | r0 = r5;
0x000559a4 sub.w sl, sl, 2 | sl -= 2;
0x000559a8 bl 0x55764 | fcn_00055764 (r0);
| label_3:
0x000559ac ldr r0, [sp, 0x18] | r0 = var_b4h;
0x000559ae ldr.w r6, [r8] | r6 = *(r8);
0x000559b2 rev r6, r6 | r6 = SWAP32 (r6);
| if (r0 != 0) {
0x000559b4 cbnz r0, 0x559f0 | goto label_44;
| }
0x000559b6 cmp r6, 0 |
0x000559b8 bne 0x55956 |
| } while (r6 != 0);
| label_1:
0x000559ba ldrd r7, r4, [sp, 0x10] | __asm ("ldrd r7, r4, [var_b0h]");
0x000559be cmp.w sl, 0 |
| if (sl != 0) {
0x000559c2 bne 0x55a56 | goto label_6;
| }
| label_5:
0x000559c4 ldr r2, [pc, 0xe8] |
0x000559c6 ldr r3, [pc, 0xe0] | r3 = *(0x55aaa);
0x000559c8 add r2, pc | r2 = 0xab47c;
0x000559ca ldr r3, [r2, r3] | r3 = *(0xab47c);
0x000559cc ldr r2, [r3] | r2 = *(0xab47c);
0x000559ce ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000559d0 eors r2, r3 | r2 ^= r3;
0x000559d2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000559d6 bne 0x55a9e | goto label_45;
| }
0x000559d8 add sp, 0x24 |
0x000559da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_41:
0x000559de ldr.w r1, [r8] | r1 = *(r8);
0x000559e2 rev r1, r1 | r1 = SWAP32 (r1);
| if (r2 != 0) {
0x000559e4 cbz r2, 0x559ec |
0x000559e6 cmp.w sb, 0 |
| if (sb != 0) {
0x000559ea bne 0x55a48 | goto label_46;
| }
| }
0x000559ec mov r6, r1 | r6 = r1;
0x000559ee mov sl, sb | sl = sb;
| label_44:
0x000559f0 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x000559f4 cmp r6, 0 |
| if (r6 != 0) {
0x000559f6 bne 0x55956 | goto label_0;
| }
0x000559f8 b 0x559ba | goto label_1;
| label_43:
0x000559fa cmp r7, 0 |
| if (r7 <= 0) {
0x000559fc ble 0x55a32 | goto label_47;
| }
0x000559fe add.w r6, r8, 8 | r6 = r8 + 8;
0x00055a02 b 0x55a16 |
| while (r3 == 0) {
| label_2:
0x00055a04 mov r1, sl | r1 = sl;
0x00055a06 mov r0, r5 | r0 = r5;
0x00055a08 adds r4, 1 | r4++;
0x00055a0a adds r6, 4 | r6 += 4;
0x00055a0c bl 0x558c4 | fcn_000558c4 (r0, r1);
0x00055a10 cmp r4, r7 |
| if (r4 == r7) {
0x00055a12 beq 0x55a32 | goto label_47;
| }
0x00055a14 ldr r3, [r5] | r3 = *(r5);
0x00055a16 ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x00055a18 ldr.w sl, [r6] | sl = *(r6);
0x00055a1c rev.w sl, sl | sl = SWAP32 (sl);
0x00055a20 cmp r3, 0 |
0x00055a22 beq 0x55a04 |
| }
0x00055a24 movs r3, 0 | r3 = 0;
0x00055a26 movs r2, 2 | r2 = 2;
0x00055a28 mov r1, sl | r1 = sl;
0x00055a2a mov r0, r5 | r0 = r5;
0x00055a2c bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x00055a30 b 0x55a04 | goto label_2;
| label_47:
0x00055a32 sub.w sl, sb, r7 | sl = sb - r7;
0x00055a36 b 0x559ac | goto label_3;
| label_42:
0x00055a38 mov r3, r4 | r3 = r4;
0x00055a3a movs r2, 2 | r2 = 2;
0x00055a3c mov r1, r6 | r1 = r6;
0x00055a3e mov r0, r5 | r0 = r5;
0x00055a40 bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x00055a44 ldr r3, [r5] | r3 = *(r5);
0x00055a46 b 0x55994 | goto label_4;
| label_46:
0x00055a48 mov r3, r6 | r3 = r6;
0x00055a4a movs r2, 4 | r2 = 4;
0x00055a4c mov r0, r5 | r0 = r5;
0x00055a4e mov sl, sb | sl = sb;
0x00055a50 bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x00055a54 b 0x559ac | goto label_3;
| label_6:
0x00055a56 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00055a58 cmp r3, r7 |
| if (r3 != r7) {
0x00055a5a bne 0x559c4 | goto label_5;
| }
0x00055a5c sub.w r6, r4, sl | r6 = r4 - sl;
| label_8:
0x00055a60 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 == 0) {
0x00055a62 cbz r3, 0x55a92 | goto label_48;
| }
0x00055a64 ldr r2, [pc, 0x4c] |
0x00055a66 add r2, pc | r2 = 0xab51e;
| label_7:
0x00055a68 ldr r1, [pc, 0x4c] |
0x00055a6a mov r3, r6 | r3 = r6;
0x00055a6c mov r0, r5 | r0 = r5;
0x00055a6e str r4, [sp] | *(sp) = r4;
0x00055a70 add r1, pc | r1 = 0xab52c;
0x00055a72 bl 0x55764 | fcn_00055764 (r0);
0x00055a76 b 0x559c4 | goto label_5;
| label_40:
0x00055a78 ldr r1, [pc, 0x40] |
0x00055a7a mov sl, sb | sl = sb;
0x00055a7c mov r2, r6 | r2 = r6;
0x00055a7e mov r0, r5 | r0 = r5;
0x00055a80 ldrd r7, r4, [sp, 0x10] | __asm ("ldrd r7, r4, [var_b0h]");
0x00055a84 add r1, pc | r1 = 0xab544;
0x00055a86 bl 0x55764 | fcn_00055764 (r0);
0x00055a8a cmp.w sl, 0 |
| if (sl == 0) {
0x00055a8e beq 0x559c4 | goto label_5;
| }
0x00055a90 b 0x55a56 | goto label_6;
| label_48:
0x00055a92 ldr r2, [pc, 0x2c] |
0x00055a94 add r2, pc | r2 = 0xab55a;
0x00055a96 b 0x55a68 | goto label_7;
| label_39:
0x00055a98 cmp r4, 0 |
| if (r4 != 0) {
0x00055a9a bne 0x55a60 | goto label_8;
| }
0x00055a9c b 0x559c4 | goto label_5;
| label_45:
0x00055a9e blx 0x6430 | fcn_00006430 ();
0x00055aa2 nop |
0x00055aa4 add r4, ip | r4 += ip;
0x00055aa6 movs r1, r1 |
0x00055aa8 lsls r4, r6, 8 | r4 = r6 << 8;
0x00055aaa movs r0, r0 |
0x00055aac pop {r1, r3, r4, r5, r6} |
0x00055aae movs r7, r0 | r7 = r0;
0x00055ab0 mvns r0, r2 | r0 = ~r2;
0x00055ab2 movs r1, r1 |
0x00055ab4 adds r6, r2, r2 | r6 = r2 + r2;
0x00055ab6 movs r0, r1 | r0 = r1;
| if (r4 != 0) {
0x00055ab8 cbnz r4, 0x55b1c | goto label_49;
| }
0x00055aba movs r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00055abc cbnz r0, 0x55b0c | goto label_50;
| }
0x00055abe movs r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00055ac0 cbnz r0, 0x55b06 | goto label_51;
| }
0x00055ac2 movs r7, r0 | r7 = r0;
0x00055ac4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00055ac8 mov sl, r2 | sl = r2;
0x00055aca ldr.w r2, [pc, 0x518] |
0x00055ace sub sp, 0x8c |
0x00055ad0 ldr.w r3, [pc, 0x514] | r3 = *(0x55fe8);
0x00055ad4 add r2, pc | r2 = 0xababe;
0x00055ad6 ldr.w r8, [r0] | r8 = *(r0);
0x00055ada ldr r7, [r0, 0x24] | r7 = *((r0 + 0x24));
0x00055adc ldr r3, [r2, r3] |
0x00055ade ldr r3, [r3] | r3 = *(0xababe);
0x00055ae0 str r3, [sp, 0x84] | var_84h = r3;
0x00055ae2 mov.w r3, 0 | r3 = 0;
0x00055ae6 movs r3, 0 | r3 = 0;
0x00055ae8 str r3, [sp, 0x64] | var_64h_2 = r3;
0x00055aea ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x00055aec str r3, [sp, 0x10] | var_34h = r3;
0x00055aee ldr r3, [r0, 0x20] | r3 = *((r0 + 0x20));
0x00055af0 str r3, [sp, 0xc] | var_30h = r3;
0x00055af2 ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x00055af6 str r3, [sp, 8] | var_2ch = r3;
0x00055af8 cbnz r1, 0x55b20 |
| while (r0 != 0) {
0x00055afa mov.w sb, 0 | sb = 0;
| label_9:
0x00055afe ldr.w r2, [pc, 0x4ec] | r2 = *(0x55fee);
0x00055b02 ldr.w r3, [pc, 0x4e4] | r3 = *(0x55fea);
| label_51:
0x00055b06 add r2, pc | r2 += pc;
0x00055b08 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00055b0a ldr r2, [r3] | r2 = *(r3);
| label_50:
0x00055b0c ldr r3, [sp, 0x84] | r3 = *(arg_84h);
0x00055b0e eors r2, r3 | r2 ^= r3;
0x00055b10 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00055b14 bne.w 0x55fe0 | goto label_52;
| }
0x00055b18 mov r0, sb | r0 = sb;
0x00055b1a add sp, 0x8c |
| label_49:
0x00055b1c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00055b20 mov r4, r0 | r4 = r0;
0x00055b22 mov r6, r1 | r6 = r1;
0x00055b24 bl 0x558c4 | r0 = fcn_000558c4 (r0, r1);
0x00055b28 mov sb, r0 | sb = r0;
0x00055b2a cmp r0, 0 |
0x00055b2c bne 0x55afa |
| }
0x00055b2e ldr.w r3, [pc, 0x4c0] |
0x00055b32 add r2, sp, 0x64 | r2 += var_64h_2;
0x00055b34 mov r1, r6 | r1 = r6;
0x00055b36 str r6, [r4, 0x20] | *((r4 + 0x20)) = r6;
0x00055b38 add r3, pc | r3 = 0xabb2e;
0x00055b3a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00055b3c mov r3, r0 | r3 = r0;
0x00055b3e mov r0, r8 | r0 = r8;
0x00055b40 bl 0x22b3c | r0 = fcn_00022b3c (r0, r1, r2);
0x00055b44 cmp r0, 0 |
| if (r0 != 0) {
0x00055b46 bne.w 0x55d30 | goto label_53;
| }
0x00055b4a ldr.w fp, [sp, 0x64] | fp = var_64h_2;
0x00055b4e ldrb.w r3, [fp] | r3 = *(fp);
0x00055b52 strb.w r0, [fp] | *(fp) = r0;
0x00055b56 mov r0, fp | r0 = fp;
0x00055b58 str r3, [sp, 0x2c] | var_50h = r3;
0x00055b5a bl 0x53214 | r0 = fcn_00053214 (r0);
0x00055b5e cmp r0, 0 |
| if (r0 != 0) {
0x00055b60 bne.w 0x55d52 | goto label_54;
| }
0x00055b64 mov r0, fp | r0 = fp;
0x00055b66 bl 0x50d48 | fcn_00050d48 (r0);
0x00055b6a str r0, [sp, 0x30] | var_54h = r0;
0x00055b6c cmp r0, 0 |
| if (r0 != 0) {
0x00055b6e bne.w 0x55f8e | goto label_55;
| }
0x00055b72 ldr.w r5, [fp, 0x38] | r5 = *(arg_38h);
0x00055b76 ldrb.w r3, [fp, 9] | r3 = *(x);
0x00055b7a ldr.w r2, [pc, 0x478] |
0x00055b7e str r5, [sp, 0x1c] | var_1ch_3 = r5;
0x00055b80 adds r0, r5, r3 | r0 = r5 + r3;
0x00055b82 adds r3, 0xc | r3 += 0xc;
0x00055b84 add r2, pc | r2 = 0xabb7e;
0x00055b86 str r0, [sp, 0x5c] | var_5ch_2 = r0;
0x00055b88 str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x00055b8a ldrb r1, [r0, 5] | r1 = *((r0 + 5));
0x00055b8c ldrb r2, [r0, 6] | r2 = *((r0 + 6));
0x00055b8e orr.w r2, r2, r1, lsl 8 | r2 |= (r1 << 8);
0x00055b92 ldrb r1, [r0, 3] | r1 = *((r0 + 3));
0x00055b94 subs r2, 1 | r2--;
0x00055b96 uxth r2, r2 | r2 = (int16_t) r2;
0x00055b98 str r2, [sp, 0x44] | var_68h = r2;
0x00055b9a ldrb r2, [r0, 4] | r2 = *((r0 + 4));
0x00055b9c orr.w r2, r2, r1, lsl 8 | r2 |= (r1 << 8);
0x00055ba0 subs r1, r2, 1 | r1 = r2 - 1;
0x00055ba2 ldrb.w r2, [fp, 8] | r2 = *(arg_8h);
0x00055ba6 str r1, [sp, 0x34] | var_58h = r1;
0x00055ba8 sub.w r3, r3, r2, lsl 2 | r3 -= (r2 << 2);
0x00055bac add.w r3, r3, r1, lsl 1 | r3 += (r1 << 1);
0x00055bb0 adds r1, r5, r3 | r1 = r5 + r3;
0x00055bb2 ldr r3, [sp, 0x44] | r3 = var_68h;
0x00055bb4 str r1, [sp, 0x4c] | var_4ch_2 = r1;
0x00055bb6 adds r3, 1 | r3++;
0x00055bb8 str r3, [sp, 0x50] | var_50h_2 = r3;
0x00055bba cmp r2, 0 |
| if (r2 == 0) {
0x00055bbc beq.w 0x55d64 | goto label_56;
| }
0x00055bc0 ldr r3, [sp, 0x30] | r3 = var_54h;
0x00055bc2 mov.w ip, -1 |
0x00055bc6 ldr r5, [r4, 0x40] | r5 = *((r4 + 0x40));
0x00055bc8 str r3, [r5] | *(r5) = r3;
0x00055bca movs r3, 1 | r3 = 1;
0x00055bcc str r3, [sp, 0x24] | var_48h = r3;
| label_11:
0x00055bce ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x00055bd0 ldr r2, [sp, 0xb4] | r2 = var_b4h;
0x00055bd2 str r3, [sp, 0x18] | var_3ch = r3;
0x00055bd4 ldr r3, [sp, 0x34] | r3 = var_58h;
0x00055bd6 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00055bd8 beq.w 0x55dd2 | goto label_57;
| }
0x00055bdc ldr.w r3, [pc, 0x418] |
0x00055be0 movs r1, 1 | r1 = 1;
0x00055be2 ldr.w sb, [sp, 0x34] | sb = var_58h;
0x00055be6 str r1, [sp, 0x20] | var_44h = r1;
0x00055be8 add r3, pc | r3 = 0xabbe4;
0x00055bea ldr r1, [sp, 8] | r1 = var_2ch;
0x00055bec str r3, [sp, 0x3c] | var_60h = r3;
0x00055bee ldr r3, [sp, 0x4c] | r3 = var_4ch_2;
0x00055bf0 str.w sl, [sp, 0x58] | __asm ("str.w sl, [var_58h_2]");
0x00055bf4 subs r1, 4 | r1 -= 4;
0x00055bf6 ldr.w sl, [sp, 0x50] | sl = var_50h_2;
0x00055bfa str r7, [sp, 0x54] | var_54h_2 = r7;
0x00055bfc mov r7, r3 | r7 = r3;
0x00055bfe str r6, [sp, 0x40] | var_64h = r6;
0x00055c00 mov r6, sb | r6 = sb;
0x00055c02 mov sb, r2 | sb = r2;
0x00055c04 str r1, [sp, 0x14] | var_38h = r1;
0x00055c06 str.w ip, [sp, 0x28] | __asm ("str.w ip, [var_4ch]");
0x00055c0a str r5, [sp, 0x48] | var_48h_2 = r5;
0x00055c0c str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_5ch]");
| do {
0x00055c10 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00055c12 cmp r3, 0 |
| if (r3 == 0) {
0x00055c14 beq 0x55cfc | goto label_58;
| }
0x00055c16 ldrh r5, [r7], -2 | r5 = *(r7);
| r7 += -2;
0x00055c1a str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x00055c1c rev16 r5, r5 | __asm ("rev16 r5, r5");
0x00055c1e uxth r5, r5 | r5 = (int16_t) r5;
0x00055c20 cmp sl, r5 |
| if (sl > r5) {
0x00055c22 bhi.w 0x55d8e | goto label_59;
| }
0x00055c26 ldr r3, [sp, 0x14] | r3 = var_38h;
0x00055c28 cmp r5, r3 |
| if (r5 > r3) {
0x00055c2a bhi.w 0x55d8e | goto label_59;
| }
0x00055c2e ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00055c30 add r2, sp, 0x68 | r2 += var_68h_2;
0x00055c32 mov r0, fp | r0 = fp;
0x00055c34 add.w r8, r3, r5 | r8 = r3 + r5;
0x00055c38 ldr.w r3, [fp, 0x50] | r3 = *(arg_84h);
0x00055c3c mov r1, r8 | r1 = r8;
0x00055c3e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055c40 ldrh.w r3, [sp, 0x7a] | r3 = var_7ah;
0x00055c44 ldr r2, [sp, 8] | r2 = var_2ch;
0x00055c46 add r3, r5 | r3 += r5;
0x00055c48 cmp r3, r2 |
| if (r3 > r2) {
0x00055c4a bhi.w 0x55f56 | goto label_60;
| }
0x00055c4e ldrb.w r3, [fp, 1] | r3 = *(arg_1h);
| if (r3 != 0) {
0x00055c52 cbz r3, 0x55c80 |
0x00055c54 ldr r1, [sp, 0x24] | r1 = var_48h;
0x00055c56 ldrd r2, r3, [sp, 0x68] | __asm ("ldrd r2, r3, [var_68h_2]");
0x00055c5a cmp r1, 0 |
| if (r1 == 0) {
0x00055c5c beq.w 0x55f46 | goto label_61;
| }
0x00055c60 ldr r1, [sp, 0x18] | r1 = var_3ch;
0x00055c62 cmp r1, r2 |
0x00055c64 sbcs.w sb, sb, r3 | __asm ("sbcs.w sb, sb, r3");
0x00055c68 ite lt |
| if (r1 >= r2) {
0x00055c6a movlt r1, 1 | r1 = 1;
| }
| if (r1 < r2) {
0x00055c6c movge r1, 0 | r1 = 0;
| }
| label_14:
0x00055c6e cmp r1, 0 |
| if (r1 != 0) {
0x00055c70 bne.w 0x55f70 | goto label_62;
| }
| label_17:
0x00055c74 mov sb, r3 | sb = r3;
0x00055c76 str r3, [sp, 0xb4] | var_b4h = r3;
0x00055c78 movs r3, 0 | r3 = 0;
0x00055c7a str r2, [sp, 0xb0] | var_b0h = r2;
0x00055c7c str r2, [sp, 0x18] | var_3ch = r2;
0x00055c7e str r3, [sp, 0x24] | var_48h = r3;
| }
0x00055c80 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00055c82 ldrh.w r2, [sp, 0x78] | r2 = var_78h;
0x00055c86 cmp r3, r2 |
| if (r3 >= r2) {
0x00055c88 bls 0x55cbe |
0x00055c8a subs r3, 5 | r3 -= 5;
0x00055c8c ldr r1, [sp, 0x14] | r1 = var_38h;
0x00055c8e subs r0, r3, r2 | r0 = r3 - r2;
0x00055c90 ldr r3, [sp, 8] | r3 = var_2ch;
0x00055c92 add r0, r3 | r0 += r3;
0x00055c94 bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x00055c98 ldrh.w r3, [sp, 0x7a] | r3 = var_7ah;
0x00055c9c str r0, [sp, 0x50] | var_50h_2 = r0;
0x00055c9e add r3, r8 | r3 += r8;
0x00055ca0 ldr r8, [r3, -0x4] | r8 = *((r3 - 0x4));
0x00055ca4 ldr r3, [sp, 0x38] | r3 = var_5ch;
0x00055ca6 rev.w r8, r8 | r8 = SWAP32 (r8);
0x00055caa ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x00055cac cmp r3, 0 |
| if (r3 != 0) {
0x00055cae bne.w 0x55f80 | goto label_63;
| }
| label_18:
0x00055cb2 ldr r3, [sp, 0x50] | r3 = var_50h_2;
0x00055cb4 mov r2, r8 | r2 = r8;
0x00055cb6 movs r1, 0 | r1 = 0;
0x00055cb8 mov r0, r4 | r0 = r4;
0x00055cba bl 0x55920 | fcn_00055920 (r0, r1, r2, r3, r4, r5, r6);
| }
0x00055cbe ldrb.w r3, [fp, 8] | r3 = *(arg_8h);
0x00055cc2 cmp r3, 0 |
| if (r3 != 0) {
0x00055cc4 bne 0x55da4 | goto label_64;
| }
0x00055cc6 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00055cc8 ldr r5, [r3, r5] | r5 = *((r3 + r5));
0x00055cca ldr r3, [sp, 0x38] | r3 = var_5ch;
0x00055ccc rev r5, r5 | r5 = SWAP32 (r5);
0x00055cce ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x00055cd0 cmp r3, 0 |
| if (r3 != 0) {
0x00055cd2 bne.w 0x55f62 | goto label_65;
| }
| label_16:
0x00055cd6 ldr r3, [sp, 0x18] | r3 = var_3ch;
0x00055cd8 mov r1, r5 | r1 = r5;
0x00055cda add r2, sp, 0xb0 | r2 += var_b0h;
0x00055cdc mov r0, r4 | r0 = r4;
0x00055cde strd r3, sb, [sp] | __asm ("strd r3, sb, [sp]");
0x00055ce2 bl 0x55ac4 | void (*0x55ac4)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
0x00055ce6 ldr r3, [sp, 0x28] | r3 = var_4ch;
0x00055ce8 cmp r0, r3 |
| if (r0 != r3) {
0x00055cea bne 0x55db8 | goto label_66;
| }
0x00055cec ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x00055cee ldr.w sb, [sp, 0xb4] | sb = var_b4h;
0x00055cf2 str r3, [sp, 0x18] | var_3ch = r3;
0x00055cf4 movs r3, 0 | r3 = 0;
0x00055cf6 str r3, [sp, 0x24] | var_48h = r3;
| label_12:
0x00055cf8 subs r6, 1 | r6--;
0x00055cfa bhs 0x55c10 |
| } while (r6 >= 1);
| label_58:
0x00055cfc ldr.w sl, [sp, 0x58] | sl = var_58h_2;
0x00055d00 ldr r3, [sp, 0x18] | r3 = var_3ch;
0x00055d02 ldr.w ip, [sp, 0x28] | ip = var_4ch;
0x00055d06 ldr r5, [sp, 0x48] | r5 = var_48h_2;
0x00055d08 strd r3, sb, [sl] | __asm ("strd r3, sb, [sl]");
0x00055d0c movs r3, 0 | r3 = 0;
0x00055d0e str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00055d10 add.w sb, ip, 1 | sb = ip + 1;
0x00055d14 ldr r3, [sp, 0x20] | r3 = var_44h;
0x00055d16 mov sl, sb | sl = sb;
0x00055d18 ldr r7, [sp, 0x54] | r7 = var_54h_2;
0x00055d1a ldr r6, [sp, 0x40] | r6 = var_64h;
0x00055d1c cmp r3, 0 |
| if (r3 != 0) {
0x00055d1e bne 0x55de0 | goto label_67;
| }
0x00055d20 ldr r3, [sp, 0x2c] | r3 = var_50h;
0x00055d22 strb.w r3, [fp] | *(fp) = r3;
| do {
| label_10:
0x00055d26 ldr.w r0, [fp, 0x48] | r0 = *(arg_48h);
0x00055d2a bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00055d2e b 0x55d46 | goto label_68;
| label_53:
0x00055d30 ldr r1, [pc, 0x2c8] |
0x00055d32 mov r2, r0 | r2 = r0;
0x00055d34 mov r0, r4 | r0 = r4;
0x00055d36 add r1, pc | r1 = 0xabd36;
0x00055d38 bl 0x55764 | fcn_00055764 (r0);
0x00055d3c ldr.w fp, [sp, 0x64] | fp = var_64h_2;
0x00055d40 cmp.w fp, 0 |
0x00055d44 bne 0x55d26 |
| } while (fp != 0);
| label_68:
0x00055d46 ldr r3, [sp, 0x10] | r3 = var_34h;
0x00055d48 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00055d4a ldr r3, [sp, 0xc] | r3 = var_30h;
0x00055d4c strd r3, r7, [r4, 0x20] | __asm ("strd r3, r7, [r4, 0x20]");
0x00055d50 b 0x55afe | goto label_9;
| label_54:
0x00055d52 ldr r1, [pc, 0x2ac] |
0x00055d54 mov r2, r0 | r2 = r0;
0x00055d56 mov r0, r4 | r0 = r4;
0x00055d58 add r1, pc | r1 = 0xabd5e;
0x00055d5a bl 0x55764 | fcn_00055764 (r0);
| label_19:
0x00055d5e mov.w sb, 0 | sb = 0;
0x00055d62 b 0x55d26 | goto label_10;
| label_56:
0x00055d64 ldrb.w r3, [r8, 0x11] | r3 = *((r8 + 0x11));
0x00055d68 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x00055d6a rev r5, r5 | r5 = SWAP32 (r5);
0x00055d6c cmp r3, 0 |
| if (r3 != 0) {
0x00055d6e bne.w 0x55f9c | goto label_69;
| }
| label_20:
0x00055d72 vldr d16, [sp, 0xb0] | __asm ("vldr d16, [sp, 0xb0]");
0x00055d76 movs r3, 0 | r3 = 0;
0x00055d78 mov r1, r5 | r1 = r5;
0x00055d7a add r2, sp, 0xb0 | r2 += var_b0h;
0x00055d7c mov r0, r4 | r0 = r4;
0x00055d7e mov r5, r3 | r5 = r3;
0x00055d80 vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00055d84 str r3, [sp, 0x24] | var_48h = r3;
0x00055d86 bl 0x55ac4 | r0 = void (*0x55ac4)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
0x00055d8a mov ip, r0 |
0x00055d8c b 0x55bce | goto label_11;
| label_59:
0x00055d8e ldr r3, [sp, 0x14] | r3 = var_38h;
0x00055d90 mov r2, r5 | r2 = r5;
0x00055d92 ldr r1, [sp, 0x3c] | r1 = var_60h;
0x00055d94 mov r0, r4 | r0 = r4;
0x00055d96 str r3, [sp] | *(sp) = r3;
0x00055d98 mov r3, sl | r3 = sl;
0x00055d9a bl 0x55764 | fcn_00055764 (r0);
| label_15:
0x00055d9e movs r3, 0 | r3 = 0;
0x00055da0 str r3, [sp, 0x20] | var_44h = r3;
0x00055da2 b 0x55cf8 | goto label_12;
| label_64:
0x00055da4 ldrh.w r1, [sp, 0x7a] | r1 = var_7ah;
0x00055da8 ldr r0, [sp, 0x48] | r0 = var_48h_2;
0x00055daa subs r1, 1 | r1--;
0x00055dac add r1, r5 | r1 += r5;
0x00055dae orr.w r1, r1, r5, lsl 16 | r1 |= (r5 << 16);
0x00055db2 bl 0x22bcc | fcn_00022bcc (r0, r1);
0x00055db6 b 0x55cf8 | goto label_12;
| label_66:
0x00055db8 ldr r1, [pc, 0x248] |
0x00055dba str r0, [sp, 0x28] | var_4ch = r0;
0x00055dbc mov r0, r4 | r0 = r4;
0x00055dbe add r1, pc | r1 = 0xabdc6;
0x00055dc0 bl 0x55764 | fcn_00055764 (r0);
0x00055dc4 movs r3, 0 | r3 = 0;
0x00055dc6 ldr.w sb, [sp, 0xb4] | sb = var_b4h;
0x00055dca str r3, [sp, 0x24] | var_48h = r3;
0x00055dcc ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x00055dce str r3, [sp, 0x18] | var_3ch = r3;
0x00055dd0 b 0x55cf8 | goto label_12;
| label_57:
0x00055dd2 ldr r3, [sp, 0x18] | r3 = var_3ch;
0x00055dd4 strd r3, r2, [sl] | __asm ("strd r3, r2, [sl]");
0x00055dd8 add.w sl, ip, 1 | sl = ip + 1;
0x00055ddc movs r3, 0 | r3 = 0;
0x00055dde str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| label_67:
0x00055de0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00055de2 cmp r3, 0 |
| if (r3 <= 0) {
0x00055de4 ble.w 0x55f42 | goto label_70;
| }
0x00055de8 ldrb.w r3, [fp, 8] | r3 = *(arg_8h);
| if (r3 != 0) {
0x00055dec cbnz r3, 0x55e38 | goto label_71;
| }
0x00055dee ldr r5, [r4, 0x40] | r5 = *((r4 + 0x40));
0x00055df0 str r3, [r5] | *(r5) = r3;
0x00055df2 ldr r3, [sp, 0x34] | r3 = var_58h;
0x00055df4 adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 == r3) {
0x00055df6 beq 0x55e38 | goto label_71;
| }
0x00055df8 ldr.w sb, [sp, 0x4c] | sb = var_4ch_2;
0x00055dfc mov r8, r3 | r8 = r3;
0x00055dfe strd r7, r4, [sp, 0x14] | __asm ("strd r7, r4, [var_38h]");
0x00055e02 mov r4, sb | r4 = sb;
0x00055e04 ldr.w sb, [sp, 0x1c] | sb = var_1ch_3;
| do {
0x00055e08 ldrh r7, [r4], -2 | r7 = *(r4);
| r4 += -2;
0x00055e0c mov r0, fp | r0 = fp;
0x00055e0e ldr.w r3, [fp, 0x4c] | r3 = *(arg_4ch);
0x00055e12 add.w r8, r8, -1 | r8 += -1;
0x00055e16 rev16 r7, r7 | __asm ("rev16 r7, r7");
0x00055e18 uxth r7, r7 | r7 = (int16_t) r7;
0x00055e1a add.w r1, sb, r7 | r1 = sb + r7;
0x00055e1e blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00055e20 adds r1, r0, r7 | r1 = r0 + r7;
0x00055e22 mov r0, r5 | r0 = r5;
0x00055e24 subs r1, 1 | r1--;
0x00055e26 orr.w r1, r1, r7, lsl 16 | r1 |= (r7 << 16);
0x00055e2a bl 0x22bcc | fcn_00022bcc (r0, r1);
0x00055e2e cmp.w r8, -1 |
0x00055e32 bne 0x55e08 |
| } while (r8 != -1);
0x00055e34 ldrd r7, r4, [sp, 0x14] | __asm ("ldrd r7, r4, [var_38h]");
| label_71:
0x00055e38 ldr r2, [sp, 0x5c] | r2 = var_5ch_2;
0x00055e3a ldrb r3, [r2, 1] | r3 = *((r2 + 1));
0x00055e3c ldrb.w r8, [r2, 2] | r8 = *((r2 + 2));
0x00055e40 orrs.w r8, r8, r3, lsl 8 | r8 |= (r3 << 8);
0x00055e44 itt ne |
| if (r8 == r8) {
0x00055e46 ldrne sb, [sp, 0x1c] | sb = var_1ch_3;
| }
| if (r8 != r8) {
0x00055e4a mov r0, r5 | r0 = r5;
| }
| if (r8 == r8) {
0x00055e4c beq 0x55e76 | goto label_72;
| }
| do {
0x00055e4e add.w r5, sb, r8 | r5 = sb + r8;
0x00055e52 ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x00055e54 ldrb r1, [r5, 3] | r1 = *((r5 + 3));
0x00055e56 orr.w r1, r1, r3, lsl 8 | r1 |= (r3 << 8);
0x00055e5a add r1, r8 | r1 += r8;
0x00055e5c subs r1, 1 | r1--;
0x00055e5e orr.w r1, r1, r8, lsl 16 | r1 |= (r8 << 16);
0x00055e62 bl 0x22bcc | fcn_00022bcc (r0, r1);
0x00055e66 ldrb.w r3, [sb, r8] | r3 = *((sb + r8));
0x00055e6a ldrb.w r8, [r5, 1] | r8 = *((r5 + 1));
0x00055e6e orrs.w r8, r8, r3, lsl 8 | r8 |= (r3 << 8);
0x00055e72 bne 0x55e4e |
| } while (r8 != r8);
0x00055e74 mov r5, r0 | r5 = r0;
| label_72:
0x00055e76 ldr r3, [sp, 8] | r3 = var_2ch;
0x00055e78 ldr r1, [r5] | r1 = *(r5);
0x00055e7a ldr r0, [sp, 0x44] | r0 = var_68h;
0x00055e7c subs r3, 1 | r3--;
0x00055e7e str r3, [sp, 0x24] | var_48h = r3;
0x00055e80 cmp r1, 0 |
| if (r1 == 0) {
0x00055e82 beq.w 0x55fd8 | goto label_73;
| }
0x00055e86 ldr.w ip, [sp, 0x30] | ip = var_54h;
0x00055e8a mov.w sb, -1 | sb = -1;
0x00055e8e strd fp, r7, [sp, 0x1c] | __asm ("strd fp, r7, [var_44h]");
0x00055e92 mov lr, r6 | lr = r6;
0x00055e94 mov fp, r4 |
0x00055e96 mov r4, r0 | r4 = r0;
| label_13:
0x00055e98 ldr.w r3, [r5, r1, lsl 2] | offset_0 = r1 << 2;
| r3 = *((r5 + offset_0));
0x00055e9c mov r2, r4 | r2 = r4;
0x00055e9e ldr r4, [r5, 4] | r4 = *((r5 + 4));
0x00055ea0 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00055ea2 str.w sb, [r5, r1, lsl 2] | __asm ("str.w sb, [r5, r1, lsl 2]");
0x00055ea6 ldr r1, [r5] | r1 = *(r5);
0x00055ea8 subs r1, 1 | r1--;
0x00055eaa cmp r1, 1 |
0x00055eac str r1, [r5] | *(r5) = r1;
| if (r1 < 1) {
0x00055eae bls 0x55efc | goto label_74;
| }
0x00055eb0 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00055eb2 movs r6, 2 | r6 = 2;
0x00055eb4 movs r7, 1 | r7 = 1;
0x00055eb6 mov r8, r2 | r8 = r2;
0x00055eb8 strd ip, r4, [sp, 0x14] | __asm ("strd ip, r4, [var_38h]");
0x00055ebc str r0, [sp, 8] | var_2ch = r0;
0x00055ebe b 0x55ed2 |
| while (r0 >= r2) {
0x00055ec0 str.w r2, [r5, r7, lsl 2] | __asm ("str.w r2, [r5, r7, lsl 2]");
0x00055ec4 lsls r6, r3, 1 | r6 = r3 << 1;
0x00055ec6 str.w r0, [ip] | __asm ("str.w r0, [ip]");
0x00055eca ldr r1, [r5] | r1 = *(r5);
0x00055ecc cmp r6, r1 |
| if (r6 > r1) {
0x00055ece bhi 0x55ef6 | goto label_75;
| }
0x00055ed0 mov r7, r3 | r7 = r3;
0x00055ed2 adds r3, r6, 1 | r3 = r6 + 1;
0x00055ed4 ldr.w r0, [r5, r7, lsl 3] | offset_1 = r7 << 3;
| r0 = *((r5 + offset_1));
0x00055ed8 ldr.w r2, [r5, r3, lsl 2] | offset_2 = r3 << 2;
| r2 = *((r5 + offset_2));
0x00055edc lsls r4, r3, 2 | r4 = r3 << 2;
0x00055ede add.w ip, r5, r4 |
0x00055ee2 cmp r0, r2 |
0x00055ee4 ldr r0, [sp, 8] | r0 = var_2ch;
0x00055ee6 itttt ls |
| if (r0 > r2) {
0x00055ee8 subls r4, 4 | r4 -= 4;
| }
| if (r0 > r2) {
0x00055eea movls r3, r6 | r3 = r6;
| }
| if (r0 > r2) {
0x00055eec ldrls r2, [r5, r4] | r2 = *((r5 + r4));
| }
| if (r0 > r2) {
0x00055eee addls ip, r5, r4 |
| }
0x00055ef2 cmp r0, r2 |
0x00055ef4 bhs 0x55ec0 |
| }
| label_75:
0x00055ef6 ldrd ip, r4, [sp, 0x14] | __asm ("ldrd ip, r4, [var_38h]");
0x00055efa mov r2, r8 | r2 = r8;
| label_74:
0x00055efc uxth r2, r2 | r2 = (int16_t) r2;
0x00055efe lsrs r3, r4, 0x10 | r3 = r4 >> 0x10;
0x00055f00 cmp r2, r3 |
| if (r2 >= r3) {
0x00055f02 bhs 0x55fb0 | goto label_76;
| }
0x00055f04 subs r3, 1 | r3--;
0x00055f06 add r3, ip | r3 += ip;
0x00055f08 sub.w ip, r3, r2 |
0x00055f0c cmp r1, 0 |
| if (r1 != 0) {
0x00055f0e bne 0x55e98 | goto label_13;
| }
0x00055f10 mov r0, r4 | r0 = r4;
0x00055f12 ldr r7, [sp, 0x20] | r7 = var_44h;
0x00055f14 mov r4, fp | r4 = fp;
0x00055f16 ldr.w fp, [sp, 0x1c] | fp = var_1ch_3;
0x00055f1a uxth.w r8, r0 | r8 = (int16_t) r0;
0x00055f1e mov r6, lr | r6 = lr;
0x00055f20 str.w ip, [sp, 0x30] | __asm ("str.w ip, [var_54h]");
| do {
0x00055f24 ldr r2, [sp, 0x24] | r2 = var_48h;
0x00055f26 ldr r3, [sp, 0x30] | r3 = var_54h;
0x00055f28 add r3, r2 | r3 += r2;
0x00055f2a sub.w r2, r3, r8 | r2 = r3 - r8;
| label_21:
0x00055f2e ldr r3, [sp, 0x5c] | r3 = var_5ch_2;
0x00055f30 ldrb r3, [r3, 7] | r3 = *((r3 + 7));
0x00055f32 cmp r3, r2 |
| if (r3 != r2) {
0x00055f34 beq 0x55f42 |
0x00055f36 ldr r1, [pc, 0xd0] |
0x00055f38 mov r0, r4 | r0 = r4;
0x00055f3a str r6, [sp] | *(sp) = r6;
0x00055f3c add r1, pc | r1 = 0xabf4a;
0x00055f3e bl 0x55764 | fcn_00055764 (r0);
| }
| label_70:
0x00055f42 mov sb, sl | sb = sl;
0x00055f44 b 0x55d26 | goto label_10;
| label_61:
0x00055f46 ldr r1, [sp, 0x18] | r1 = var_3ch;
0x00055f48 cmp r2, r1 |
0x00055f4a sbcs.w sb, r3, sb | __asm ("sbcs.w sb, r3, sb");
0x00055f4e ite ge |
| if (r2 < r1) {
0x00055f50 movge r1, 1 | r1 = 1;
| }
| if (r2 >= r1) {
0x00055f52 movlt r1, 0 | r1 = 0;
| }
0x00055f54 b 0x55c6e | goto label_14;
| label_60:
0x00055f56 ldr r1, [pc, 0xb4] |
0x00055f58 mov r0, r4 | r0 = r4;
0x00055f5a add r1, pc | r1 = 0xabf6c;
0x00055f5c bl 0x55764 | fcn_00055764 (r0);
0x00055f60 b 0x55d9e | goto label_15;
| label_65:
0x00055f62 ldr r3, [sp, 0x40] | r3 = var_64h;
0x00055f64 movs r2, 5 | r2 = 5;
0x00055f66 mov r1, r5 | r1 = r5;
0x00055f68 mov r0, r4 | r0 = r4;
0x00055f6a bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x00055f6e b 0x55cd6 | goto label_16;
| label_62:
0x00055f70 ldr r1, [pc, 0x9c] |
0x00055f72 mov r0, r4 | r0 = r4;
0x00055f74 add r1, pc | r1 = 0xabf88;
0x00055f76 bl 0x55764 | fcn_00055764 (r0);
0x00055f7a ldrd r2, r3, [sp, 0x68] | __asm ("ldrd r2, r3, [var_68h_2]");
0x00055f7e b 0x55c74 | goto label_17;
| label_63:
0x00055f80 ldr r3, [sp, 0x40] | r3 = var_64h;
0x00055f82 movs r2, 3 | r2 = 3;
0x00055f84 mov r1, r8 | r1 = r8;
0x00055f86 mov r0, r4 | r0 = r4;
0x00055f88 bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x00055f8c b 0x55cb2 | goto label_18;
| label_55:
0x00055f8e ldr r1, [pc, 0x84] |
0x00055f90 mov r2, r0 | r2 = r0;
0x00055f92 mov r0, r4 | r0 = r4;
0x00055f94 add r1, pc | r1 = 0xabfae;
0x00055f96 bl 0x55764 | fcn_00055764 (r0);
0x00055f9a b 0x55d5e | goto label_19;
| label_69:
0x00055f9c ldr r3, [pc, 0x78] |
0x00055f9e movs r2, 5 | r2 = 5;
0x00055fa0 mov r1, r5 | r1 = r5;
0x00055fa2 mov r0, r4 | r0 = r4;
0x00055fa4 add r3, pc | r3 = 0xabfc0;
0x00055fa6 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00055fa8 mov r3, r6 | r3 = r6;
0x00055faa bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x00055fae b 0x55d72 | goto label_20;
| label_76:
0x00055fb0 ldr r1, [pc, 0x68] |
0x00055fb2 mov r4, fp | r4 = fp;
0x00055fb4 mov r8, r2 | r8 = r2;
0x00055fb6 mov r0, r4 | r0 = r4;
0x00055fb8 mov r2, r3 | r2 = r3;
0x00055fba mov r3, lr | r3 = lr;
0x00055fbc add r1, pc | r1 = 0xabfdc;
0x00055fbe ldr r7, [sp, 0x20] | r7 = var_44h;
0x00055fc0 ldr.w fp, [sp, 0x1c] | fp = var_1ch_3;
0x00055fc4 mov r6, lr | r6 = lr;
0x00055fc6 str.w ip, [sp, 0x30] | __asm ("str.w ip, [var_54h]");
0x00055fca bl 0x55764 | fcn_00055764 (r0);
0x00055fce ldr r3, [r5] | r3 = *(r5);
0x00055fd0 cmp r3, 0 |
0x00055fd2 beq 0x55f24 |
| } while (r3 == 0);
0x00055fd4 mov sb, sl | sb = sl;
0x00055fd6 b 0x55d26 | goto label_10;
| label_73:
0x00055fd8 ldr r3, [sp, 0x24] | r3 = var_48h;
0x00055fda ldr r2, [sp, 0x44] | r2 = var_68h;
0x00055fdc subs r2, r3, r2 | r2 = r3 - r2;
0x00055fde b 0x55f2e | goto label_21;
| label_52:
0x00055fe0 blx 0x6430 | r0 = fcn_00006430 ();
0x00055fe4 cmn r4, r0 |
0x00055fe6 movs r1, r1 |
0x00055fe8 lsls r4, r6, 8 | r4 = r6 << 8;
0x00055fea movs r0, r0 |
0x00055fec cmp r2, r2 |
0x00055fee movs r1, r1 |
0x00055ff0 revsh r0, r3 | __asm ("revsh r0, r3");
0x00055ff2 movs r7, r0 | r7 = r0;
| if (r0 == 0) {
0x00055ff4 cbnz r0, 0x56038 |
0x00055ff6 movs r7, r0 | r7 = r0;
0x00055ff8 revsh r4, r2 | __asm ("revsh r4, r2");
0x00055ffa movs r7, r0 | r7 = r0;
0x00055ffc invalid |
| }
0x00056038 ldrh r4, [r0, 0x18] | r4 = *((r0 + 0x18));
0x0005603a ldr r4, [r5, 4] | r4 = *((r5 + 4));
0x0005603c sub sp, 0xd4 |
0x0005603e ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x00056040 mov.w fp, 0 |
0x00056044 ldr.w sb, [sp, 0x10c] | sb = *(arg_10ch);
0x00056048 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0005604a ldr r3, [r3] | r3 = *(r3);
0x0005604c str r3, [sp, 0xcc] | var_cch = r3;
0x0005604e mov.w r3, 0 | r3 = 0;
0x00056052 ldr r3, [r2] | r3 = *(r2);
0x00056054 vldr d9, [r1, 0x20] | __asm ("vldr d9, [r1, 0x20]");
| if (r3 == 0) {
0x00056058 cbnz r3, 0x5606c |
0x0005605a ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0005605c mov.w fp, 1 |
0x00056060 sub.w sl, r3, 1 | sl = r3 - 1;
0x00056064 clz sl, sl | sl &= sl;
0x00056068 lsr.w sl, sl, 5 | sl >>= 5;
0x0005606a subs r2, r3, r1 | r2 = r3 - r1;
| }
0x0005606c ldrb r3, [r5, 9] | r3 = *((r5 + 9));
| if (r3 != 0) {
0x0005606e cbz r3, 0x5607c |
0x00056070 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00056072 adds r3, 1 | r3++;
0x00056074 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00056076 ldrb r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x00056078 cmp r3, 0 |
| if (r3 == 0) {
0x0005607a beq 0x56162 | goto label_77;
| }
| }
| label_25:
0x0005607c ldr r3, [r4] | r3 = *(r4);
0x0005607e ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x00056080 ldr r1, [sp, 0x108] | r1 = *(arg_108h);
0x00056082 vldr d16, [pc, 0x294] | __asm ("vldr d16, [0x0005631c]");
0x00056086 str r3, [sp, 0x24] | var_24h = r3;
0x00056088 add r3, sp, 0x68 | r3 += var_68h;
0x0005608a str r6, [sp, 0x64] | var_64h = r6;
0x0005608c movs r6, 0 | r6 = 0;
0x0005608e str r3, [sp, 0x4c] | var_4ch = r3;
0x00056090 mov.w r3, 0x100 | r3 = 0x100;
0x00056094 str r4, [sp, 0x20] | var_20h = r4;
0x00056096 str r1, [sp, 0x30] | var_30h = r1;
0x00056098 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x0005609c str r2, [sp, 0x2c] | var_2ch = r2;
0x0005609e strd r6, r6, [sp, 0x34] | __asm ("strd r6, r6, [var_38h]");
0x000560a2 strd r6, r6, [sp, 0x3c] | __asm ("strd r6, r6, [var_3ch]");
0x000560a6 str r6, [sp, 0x44] | var_44h = r6;
0x000560a8 str r6, [sp, 0x28] | var_28h = r6;
0x000560aa str r6, [sp, 0x60] | var_60h = r6;
0x000560ac str r6, [sp, 0x48] | var_48h = r6;
0x000560ae str r6, [sp, 0x58] | var_58h = r6;
0x000560b0 strh.w r3, [sp, 0x5c] | var_5ch = r3;
0x000560b4 cmp r2, 0 |
| if (r2 != 0) {
0x000560b6 bne 0x5616a | goto label_78;
| }
| label_37:
0x000560b8 movs r0, 0 | r0 = 0;
| label_28:
0x000560ba bl 0x26f64 | fcn_00026f64 (r0);
0x000560be ldr r0, [sp, 0x28] | r0 = var_28h;
0x000560c0 bl 0x26dbc | fcn_00026dbc (r0);
0x000560c4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000560c6 cmp r3, 0 |
| if (r3 != 0) {
0x000560c8 bne.w 0x56232 | goto label_79;
| }
0x000560cc ldr r3, [sp, 0x34] | r3 = var_34h;
| label_27:
0x000560ce str.w r3, [sb] | __asm ("str.w r3, [sb]");
| if (r3 == 0) {
0x000560d2 cbz r3, 0x5610e | goto label_80;
| }
0x000560d4 ldrb r3, [r5, 9] | r3 = *((r5 + 9));
0x000560d6 cmp r3, 0 |
0x000560d8 bne 0x56138 |
| while (r3 != 0) {
0x000560da ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000560dc cmp r3, 0 |
| if (r3 == 0) {
0x000560de beq 0x5614e | goto label_81;
| }
| label_22:
0x000560e0 ldr r2, [sp, 0x58] | r2 = var_58h;
0x000560e2 movs r1, 0 | r1 = 0;
0x000560e4 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x000560e6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000560e8 cmp r3, 0 |
| if (r3 != 0) {
0x000560ea bne 0x56152 | goto label_82;
| }
| label_24:
0x000560ec ldr r0, [sp, 0x4c] | r0 = var_4ch;
| label_23:
0x000560ee ldr r2, [pc, 0x240] |
0x000560f0 ldr r3, [pc, 0x238] | r3 = *(0x5632c);
0x000560f2 add r2, pc | r2 = 0xac428;
0x000560f4 ldr r3, [r2, r3] | r3 = *(0xac428);
0x000560f6 ldr r2, [r3] | r2 = *(0xac428);
0x000560f8 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000560fa eors r2, r3 | r2 ^= r3;
0x000560fc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00056100 bne.w 0x56472 | goto label_83;
| }
0x00056104 add sp, 0xd4 |
0x00056106 vpop {d8, d9} | __asm ("vpop {d8, d9}");
0x0005610a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_80:
0x0005610e ldrb.w r3, [sp, 0x5d] | r3 = var_5dh;
0x00056112 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 < r3) {
0x00056114 bpl 0x5612c |
0x00056116 ldr r1, [sp, 0x4c] | r1 = var_4ch;
| if (r1 != 0) {
0x00056118 cbz r1, 0x56124 |
0x0005611a ldr r0, [sp, 0x48] | r0 = var_48h;
0x0005611c bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00056120 ldrb.w r3, [sp, 0x5d] | r3 = var_5dh;
| }
0x00056124 bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x00056128 strb.w r3, [sp, 0x5d] | var_5dh = r3;
| }
0x0005612c ldrb r2, [r5, 9] | r2 = *((r5 + 9));
0x0005612e movs r3, 0 | r3 = 0;
0x00056130 str r3, [sp, 0x50] | var_50h = r3;
0x00056132 str r3, [sp, 0x58] | var_58h = r3;
0x00056134 str r3, [sp, 0x4c] | var_4ch = r3;
| if (r2 == 0) {
0x00056136 cbz r2, 0x5614e | goto label_81;
| }
0x00056138 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0005613a subs r3, 1 | r3--;
0x0005613c str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0005613e cmp r3, 0 |
0x00056140 bne 0x560da |
| }
0x00056142 mov r0, r5 | r0 = r5;
0x00056144 bl 0x22944 | fcn_00022944 (r0);
0x00056148 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0005614a cmp r3, 0 |
| if (r3 != 0) {
0x0005614c bne 0x560e0 | goto label_22;
| }
| label_81:
0x0005614e movs r0, 0 | r0 = 0;
0x00056150 b 0x560ee | goto label_23;
| label_82:
0x00056152 ldrb.w r3, [sp, 0x5d] | r3 = var_5dh;
0x00056156 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x00056158 bmi 0x560ec | goto label_24;
| }
0x0005615a add r0, sp, 0x48 | r0 += var_48h;
0x0005615c bl 0x39478 | fcn_00039478 (r0);
0x00056160 b 0x560ee | goto label_23;
| label_77:
0x00056162 mov r0, r5 | r0 = r5;
0x00056164 bl 0x2adac | fcn_0002adac (r0);
0x00056168 b 0x5607c | goto label_25;
| label_78:
0x0005616a lsrs r2, r2, 3 | r2 >>= 3;
0x0005616c mov r1, r6 | r1 = r6;
0x0005616e adds r2, 1 | r2++;
0x00056170 mov r0, r2 | r0 = r2;
0x00056172 str r2, [sp, 8] | var_8h_2 = r2;
0x00056174 bl 0x28c3c | fcn_00028c3c (r0);
0x00056178 ldr r2, [sp, 8] | r2 = var_8h_2;
0x0005617a mov r3, r0 | r3 = r0;
0x0005617c cmp r0, 0 |
| if (r0 == 0) {
0x0005617e beq 0x56260 | goto label_84;
| }
0x00056180 mov r1, r6 | r1 = r6;
0x00056182 str r0, [sp, 8] | var_8h_2 = r0;
0x00056184 blx 0x62ec | fcn_000062ec ();
0x00056188 ldr r3, [sp, 8] | r3 = var_8h_2;
0x0005618a ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x0005618c str r3, [sp, 0x28] | var_28h = r3;
0x0005618e bl 0x2922c | fcn_0002922c (r0);
0x00056192 str r0, [sp, 0x60] | var_60h = r0;
0x00056194 cmp r0, 0 |
| if (r0 == 0) {
0x00056196 beq.w 0x56438 | goto label_85;
| }
0x0005619a ldr r3, [pc, 0x198] |
0x0005619c ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0005619e add r3, pc | r3 = 0xac4d8;
0x000561a0 ldr.w r0, [r3, 0x118] | r0 = *(0xac5f0);
0x000561a4 bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x000561a8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000561aa adds r0, 1 | r0++;
0x000561ac cmp r3, r0 |
| if (r3 > r0) {
0x000561ae blo 0x561c2 |
0x000561b0 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000561b2 lsrs r2, r0, 3 | r2 = r0 >> 3;
0x000561b4 movs r3, 1 | r3 = 1;
0x000561b6 and r0, r0, 7 | r0 &= 7;
0x000561ba lsls r3, r0 | r3 <<= r0;
0x000561bc ldrb r0, [r1, r2] | r0 = *((r1 + r2));
0x000561be orrs r3, r0 | r3 |= r0;
0x000561c0 strb r3, [r1, r2] | *((r1 + r2)) = r3;
| }
0x000561c2 cmp.w sl, 0 |
| if (sl != 0) {
0x000561c6 bne 0x562aa | goto label_86;
| }
0x000561c8 cmp.w fp, 0 |
| if (fp == 0) {
0x000561cc beq 0x5626a | goto label_31;
| }
| label_30:
0x000561ce ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000561d0 cmp.w r8, 0 |
0x000561d4 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000561d6 bic r3, r3, 0x200000 | r3 = BIT_MASK (r3, 0x200000);
0x000561da str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
| if (r8 <= 0) {
0x000561dc ble.w 0x5645e | goto label_87;
| }
| label_29:
0x000561e0 vldr d8, [pc, 0x13c] | __asm ("vldr d8, [0x00056324]");
0x000561e4 subs r7, 4 | r7 -= 4;
0x000561e6 movs r6, 0 | r6 = 0;
0x000561e8 eor sl, fp, 1 | sl = fp ^ 1;
0x000561ec b 0x561fe | goto label_88;
| label_26:
0x000561ee add r2, sp, 0x18 | r2 += var_18h;
0x000561f0 vstr d8, [sp] | __asm ("vstr d8, [sp]");
0x000561f4 bl 0x55ac4 | void (*0x55ac4)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
| do {
0x000561f8 adds r6, 1 | r6++;
0x000561fa cmp r8, r6 |
| if (r8 <= r6) {
0x000561fc ble 0x562d2 | goto label_89;
| }
| label_88:
0x000561fe ldr r3, [sp, 0x30] | r3 = var_30h;
0x00056200 cmp r3, 0 |
| if (r3 == 0) {
0x00056202 beq 0x562d2 | goto label_89;
| }
0x00056204 ldr r1, [r7, 4]! | r1 = *((r7 += 4));
0x00056208 cmp r1, 0 |
0x0005620a beq 0x561f8 |
| } while (r1 == 0);
0x0005620c ldrb r3, [r4, 0x11] | r3 = *((r4 + 0x11));
0x0005620e add r0, sp, 0x20 | r0 += var_20h;
0x00056210 cmp r3, 0 |
0x00056212 it ne |
| if (r3 != 0) {
0x00056214 cmpne r1, 1 | __asm ("cmpne r1, 1");
| }
0x00056216 ite ne |
| if (r3 == 0) {
0x00056218 movne r3, 1 | r3 = 1;
| }
| if (r3 != 0) {
0x0005621a moveq r3, 0 | r3 = 0;
| }
0x0005621c tst.w r3, sl |
| if ((r3 & sl) == 0) {
0x00056220 beq 0x561ee | goto label_26;
| }
0x00056222 movs r3, 0 | r3 = 0;
0x00056224 movs r2, 1 | r2 = 1;
0x00056226 str r0, [sp, 8] | var_8h_2 = r0;
0x00056228 bl 0x55810 | fcn_00055810 (r0, r1, r2, r3);
0x0005622c ldr r1, [r7] | r1 = *(r7);
0x0005622e ldr r0, [sp, 8] | r0 = var_8h_2;
0x00056230 b 0x561ee | goto label_26;
| label_79:
0x00056232 ldrb.w r3, [sp, 0x5d] | r3 = var_5dh;
0x00056236 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 < r3) {
0x00056238 bpl 0x56250 |
0x0005623a ldr r1, [sp, 0x4c] | r1 = var_4ch;
| if (r1 != 0) {
0x0005623c cbz r1, 0x56248 |
0x0005623e ldr r0, [sp, 0x48] | r0 = var_48h;
0x00056240 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00056244 ldrb.w r3, [sp, 0x5d] | r3 = var_5dh;
| }
0x00056248 bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x0005624c strb.w r3, [sp, 0x5d] | var_5dh = r3;
| }
0x00056250 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00056252 movs r2, 0 | r2 = 0;
0x00056254 str r2, [sp, 0x50] | var_50h = r2;
0x00056256 str r2, [sp, 0x58] | var_58h = r2;
0x00056258 adds r3, 1 | r3++;
0x0005625a str r2, [sp, 0x4c] | var_4ch = r2;
0x0005625c str r3, [sp, 0x34] | var_34h = r3;
0x0005625e b 0x560ce | goto label_27;
| label_84:
0x00056260 movs r2, 1 | r2 = 1;
0x00056262 ldr r0, [sp, 0x60] | r0 = var_60h;
0x00056264 str r3, [sp, 0x28] | var_28h = r3;
0x00056266 str r2, [sp, 0x38] | var_38h = r2;
0x00056268 b 0x560ba | goto label_28;
| label_31:
0x0005626a ldrb r3, [r4, 0x11] | r3 = *((r4 + 0x11));
0x0005626c ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0005626e ldr r6, [r2, 0x38] | r6 = *((r2 + 0x38));
0x00056270 cmp r3, 0 |
| if (r3 == 0) {
0x00056272 beq.w 0x5641c | goto label_90;
| }
0x00056276 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0005627a ble.w 0x5643e | goto label_91;
| }
0x0005627e add.w r0, r7, r8, lsl 2 | r0 = r7 + (r8 << 2);
0x00056282 mov r3, r7 | r3 = r7;
0x00056284 mov r2, fp | r2 = fp;
| do {
0x00056286 ldr r1, [r3], 4 | r1 = *(r3);
| r3 += 4;
0x0005628a cmp r2, r1 |
0x0005628c it lo |
| if (r2 >= r1) {
0x0005628e movlo r2, r1 | r2 = r1;
| }
0x00056290 cmp r0, r3 |
0x00056292 bne 0x56286 |
| } while (r0 != r3);
0x00056294 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x00056296 rev r3, r3 | r3 = SWAP32 (r3);
0x00056298 cmp r3, r2 |
| if (r3 != r2) {
0x0005629a bne.w 0x56446 | goto label_92;
| }
0x0005629e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000562a0 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000562a2 bic r3, r3, 0x200000 | r3 = BIT_MASK (r3, 0x200000);
0x000562a6 str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x000562a8 b 0x561e0 | goto label_29;
| label_86:
0x000562aa ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000562ac movs r1, 1 | r1 = 1;
0x000562ae ldr r2, [pc, 0x88] |
0x000562b0 add r0, sp, 0x20 | r0 += var_20h;
0x000562b2 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x000562b4 add r2, pc | r2 = 0xac5f2;
0x000562b6 str r2, [sp, 0x3c] | var_3ch = r2;
0x000562b8 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x000562ba ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000562bc rev r2, r2 | r2 = SWAP32 (r2);
0x000562be rev r3, r3 | r3 = SWAP32 (r3);
0x000562c0 bl 0x55920 | fcn_00055920 (r0, r1, r2, r3, r4, r5, r6);
0x000562c4 movs r3, 0 | r3 = 0;
0x000562c6 str r3, [sp, 0x3c] | var_3ch = r3;
0x000562c8 cmp.w fp, 0 |
| if (fp != 0) {
0x000562cc bne.w 0x561ce | goto label_30;
| }
0x000562d0 b 0x5626a | goto label_31;
| label_89:
0x000562d2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000562d4 vstr d9, [r3, 0x20] | __asm ("vstr d9, [r3, 0x20]");
0x000562d8 cmp.w fp, 0 |
| if (fp != 0) {
0x000562dc bne.w 0x563fe | goto label_93;
| }
| label_36:
0x000562e0 ldr.w fp, [sp, 0x2c] | fp = var_2ch;
0x000562e4 cmp.w fp, 0 |
| if (fp == 0) {
0x000562e8 beq.w 0x563fe | goto label_93;
| }
0x000562ec ldr r3, [pc, 0x4c] |
0x000562ee movw sl, 0xcccd |
0x000562f2 movt sl, 0xcccc | sl = 0xcccccccd;
0x000562f6 strd r5, sb, [sp, 0x10] | __asm ("strd r5, sb, [var_10h]");
0x000562fa mov.w r8, -1 | r8 = -1;
0x000562fe mov r5, fp | r5 = fp;
0x00056300 add r3, pc | r3 = 0xac640;
0x00056302 mov fp, sl |
0x00056304 str r3, [sp, 8] | var_8h_2 = r3;
0x00056306 movs r6, 1 | r6 = 1;
0x00056308 ldr r3, [pc, 0x34] |
0x0005630a mov sl, r4 | sl = r4;
0x0005630c add r3, pc | r3 = 0xac650;
0x0005630e str r3, [sp, 0xc] | var_ch = r3;
0x00056310 b 0x56388 |
| while (r2 != r7) {
| label_34:
0x00056344 cmp r6, 1 |
| if (r6 < 1) {
0x00056346 bls 0x56418 | goto label_94;
| }
0x00056348 ldr.w r1, [sl, 0x28] | r1 = *((sl + 0x28));
0x0005634c mov r0, r8 | r0 = r8;
0x0005634e umull r3, r1, fp, r1 | r3:r1 = fp * r1;
0x00056352 lsrs r1, r1, 2 | r1 >>= 2;
0x00056354 adds r1, 1 | r1++;
0x00056356 bl 0xc4764 | fcn_000c4764 (r0);
0x0005635a ldr r3, [pc, 0x11c] |
0x0005635c sub.w r4, r8, r1 | r4 = r8 - r1;
0x00056360 ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
0x00056364 add r3, pc | r3 = 0xac7e2;
0x00056366 ldr.w r0, [r3, 0x118] | r0 = *(0xac8fa);
0x0005636a bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x0005636e adds r3, r4, 2 | r3 = r4 + 2;
0x00056370 adds r0, 1 | r0++;
0x00056372 cmp r3, r0 |
0x00056374 it eq |
| if (r3 != r0) {
0x00056376 addeq r3, r4, 3 | r3 = r4 + 3;
| }
| label_35:
0x00056378 cmp r6, r3 |
| if (r6 == r3) {
0x0005637a beq 0x56402 | goto label_95;
| }
| label_33:
0x0005637c ldr r5, [sp, 0x2c] | r5 = var_2ch;
| label_32:
0x0005637e adds r6, 1 | r6++;
0x00056380 add.w r8, r8, 1 | r8++;
0x00056384 cmp r5, r6 |
| if (r5 <= r6) {
0x00056386 blo 0x563fa | goto label_96;
| }
0x00056388 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0005638a cmp r2, 0 |
| if (r2 == 0) {
0x0005638c beq 0x563fa | goto label_96;
| }
0x0005638e ldr r2, [sp, 0x28] | r2 = var_28h;
0x00056390 lsrs r4, r6, 3 | r4 = r6 >> 3;
0x00056392 and r1, r6, 7 | r1 = r6 & 7;
0x00056396 movs r7, 1 | r7 = 1;
0x00056398 ldrb r2, [r2, r4] | r2 = *((r2 + r4));
0x0005639a lsls r7, r1 | r7 <<= r1;
0x0005639c ands r2, r7 | r2 &= r7;
0x0005639e bne 0x56344 |
| }
0x000563a0 cmp r6, 1 |
0x000563a2 it ls |
| if (r6 > 1) {
0x000563a4 movls r1, r2 | r1 = r2;
| }
| if (r6 >= 1) {
0x000563a6 bls 0x563da |
0x000563a8 ldr.w r1, [sl, 0x28] | r1 = *((sl + 0x28));
0x000563ac mov r0, r8 | r0 = r8;
0x000563ae umull r2, r1, fp, r1 | r2:r1 = fp * r1;
0x000563b2 lsrs r1, r1, 2 | r1 >>= 2;
0x000563b4 adds r1, 1 | r1++;
0x000563b6 bl 0xc4764 | fcn_000c4764 (r0);
0x000563ba ldr r3, [sp, 0xc] | r3 = var_ch;
0x000563bc sub.w sb, r8, r1 | sb = r8 - r1;
0x000563c0 ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
0x000563c4 ldr.w r0, [r3, 0x118] | r0 = *((r3 + 0x118));
0x000563c8 bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x000563cc add.w r1, sb, 2 | r1 = sb + 2;
0x000563d0 adds r0, 1 | r0++;
0x000563d2 cmp r1, r0 |
0x000563d4 it eq |
| if (r1 == r0) {
0x000563d6 addeq r1, sb, 3 | r1 = sb + 3;
| goto label_97;
| }
| }
| label_97:
0x000563da cmp r6, r1 |
| if (r6 != r1) {
0x000563dc bne 0x563e6 | goto label_98;
| }
0x000563de ldrb.w r2, [sl, 0x11] | r2 = *((sl + 0x11));
0x000563e2 cmp r2, 0 |
| if (r2 != 0) {
0x000563e4 bne 0x5637e | goto label_32;
| }
| label_98:
0x000563e6 ldr r1, [sp, 8] | r1 = var_8h_2;
0x000563e8 mov r2, r6 | r2 = r6;
0x000563ea add r0, sp, 0x20 | r0 += var_20h;
0x000563ec bl 0x55764 | fcn_00055764 (r0);
0x000563f0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000563f2 ldrb r3, [r3, r4] | r3 = *((r3 + r4));
0x000563f4 tst r3, r7 |
| if ((r3 & r7) == 0) {
0x000563f6 beq 0x5637c | goto label_33;
| }
0x000563f8 b 0x56344 | goto label_34;
| label_96:
0x000563fa ldrd r5, sb, [sp, 0x10] | __asm ("ldrd r5, sb, [var_10h]");
| label_93:
0x000563fe ldr r0, [sp, 0x60] | r0 = var_60h;
0x00056400 b 0x560ba | goto label_28;
| label_95:
0x00056402 ldrb.w r3, [sl, 0x11] | r3 = *((sl + 0x11));
0x00056406 cmp r3, 0 |
| if (r3 == 0) {
0x00056408 beq 0x5637c | goto label_33;
| }
0x0005640a ldr r1, [pc, 0x70] |
0x0005640c mov r2, r6 | r2 = r6;
0x0005640e add r0, sp, 0x20 | r0 += var_20h;
0x00056410 add r1, pc | r1 = 0xac892;
0x00056412 bl 0x55764 | fcn_00055764 (r0);
0x00056416 b 0x5637c | goto label_33;
| label_94:
0x00056418 movs r3, 0 | r3 = 0;
0x0005641a b 0x56378 | goto label_35;
| label_90:
0x0005641c ldr r3, [r6, 0x40] | r3 = *((r6 + 0x40));
| if (r3 != 0) {
0x0005641e cbnz r3, 0x56452 | goto label_99;
| }
| label_38:
0x00056420 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00056422 cmp.w r8, 0 |
0x00056426 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x00056428 bic r3, r3, 0x200000 | r3 = BIT_MASK (r3, 0x200000);
0x0005642c str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
| if (r8 > 0) {
0x0005642e bgt.w 0x561e0 | goto label_29;
| }
| do {
0x00056432 vstr d9, [r2, 0x20] | __asm ("vstr d9, [r2, 0x20]");
0x00056436 b 0x562e0 | goto label_36;
| label_85:
0x00056438 movs r3, 1 | r3 = 1;
0x0005643a str r3, [sp, 0x38] | var_38h = r3;
0x0005643c b 0x560b8 | goto label_37;
| label_91:
0x0005643e ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
| if (r3 != 0) {
0x00056440 cbz r3, 0x56466 |
0x00056442 rev r3, r3 | r3 = SWAP32 (r3);
0x00056444 mov r2, fp | r2 = fp;
| label_92:
0x00056446 ldr r1, [pc, 0x38] |
0x00056448 add r0, sp, 0x20 | r0 += var_20h;
0x0005644a add r1, pc | r1 = 0xac8d0;
0x0005644c bl 0x55764 | fcn_00055764 (r0);
0x00056450 b 0x56420 | goto label_38;
| label_99:
0x00056452 ldr r1, [pc, 0x30] |
0x00056454 add r0, sp, 0x20 | r0 += var_20h;
0x00056456 add r1, pc | r1 = 0xac8e0;
0x00056458 bl 0x55764 | fcn_00055764 (r0);
0x0005645c b 0x56420 | goto label_38;
| label_87:
0x0005645e ldr r0, [sp, 0x60] | r0 = var_60h;
0x00056460 vstr d9, [r2, 0x20] | __asm ("vstr d9, [r2, 0x20]");
0x00056464 b 0x560ba | goto label_28;
| }
0x00056466 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00056468 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x0005646a bic r3, r3, 0x200000 | r3 = BIT_MASK (r3, 0x200000);
0x0005646e str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x00056470 b 0x56432 |
| } while (1);
| label_83:
0x00056472 blx 0x6430 | fcn_00006430 ();
0x00056476 nop |
0x00056478 subs r7, 0x30 | r7 -= 0x30;
0x0005647a movs r1, r1 |
0x0005647c push {r2} |
0x0005647e movs r7, r0 | r7 = r0;
| if (r2 == 0) {
0x00056480 cbz r2, 0x564d6 | void (*0x564d6)() ();
| }
0x00056482 movs r7, r0 | r7 = r0;
| if (r6 == 0) {
0x00056484 cbz r6, 0x564e2 | void (*0x564e2)() ();
| }
0x00056486 movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x56514 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00056514 () | void fcn_00056514 (int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00056514 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00056518 mov r5, r2 | r5 = r2;
0x0005651a ldr r2, [r0] | r2 = *(r0);
0x0005651c sub sp, 0x3c |
0x0005651e mov sb, r1 | sb = r1;
0x00056520 mov sl, r3 | sl = r3;
0x00056522 str r0, [sp, 0x24] | var_24h = r0;
0x00056524 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00056526 str r2, [sp, 8] | var_8h = r2;
0x00056528 cmp r3, 0 |
| if (r3 == 0) {
0x0005652a beq.w 0x56720 | goto label_11;
| }
0x0005652e mov r0, r3 | r0 = r3;
0x00056530 blx 0x65dc | r0 = strcmp (r0, r1);
0x00056534 mov fp, r0 |
0x00056536 cmp r5, 0 |
| if (r5 == 0) {
0x00056538 beq.w 0x5677e | goto label_12;
| }
0x0005653c mov r0, r5 | r0 = r5;
0x0005653e movs r7, 0 | r7 = 0;
0x00056540 blx 0x65dc | r0 = strcmp (r0, r1);
0x00056544 bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
0x00056548 mov r4, r6 | r4 = r6;
| label_7:
0x0005654a ldr.w r8, [sp, 8] | r8 = var_8h;
0x0005654e mov r2, sl | r2 = sl;
0x00056550 ldr r1, [pc, 0x258] |
0x00056552 mov r0, r8 | r0 = r8;
0x00056554 add r1, pc | r1 = 0xacd04;
0x00056556 bl 0x4a320 | fcn_0004a320 (r0);
0x0005655a str r0, [sp, 0xc] | var_ch = r0;
0x0005655c cmp r0, 0 |
| if (r0 == 0) {
0x0005655e beq.w 0x56786 | goto label_13;
| }
0x00056562 blx 0x65dc | r0 = strcmp (r0, r1);
0x00056566 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x0005656a subs r3, r0, 1 | r3 = r0 - 1;
0x0005656c mov r0, r8 | r0 = r8;
0x0005656e mov r2, r3 | r2 = r3;
0x00056570 str r3, [sp, 0x10] | var_10h = r3;
0x00056572 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00056576 smlal r4, r7, r3, r2 | __asm ("smlal r4, r7, r3, r2");
0x0005657a adds r4, 1 | r4++;
0x0005657c adc r3, r7, 0 | __asm ("adc r3, r7, 0");
0x00056580 cmp r0, 0 |
| if (r0 == 0) {
0x00056582 beq.w 0x566a4 | goto label_14;
| }
0x00056586 mov r2, r4 | r2 = r4;
0x00056588 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x0005658c mov r8, r0 | r8 = r0;
0x0005658e cmp.w r8, 0 |
| if (r8 == 0) {
0x00056592 beq.w 0x566b6 | goto label_5;
| }
| label_1:
0x00056596 bic r3, fp, 0xc0000000 | r3 = BIT_MASK (fp, 0xc0000000);
0x0005659a mov r2, r4 | r2 = r4;
0x0005659c movs r1, 0 | r1 = 0;
0x0005659e mov r0, r8 | r0 = r8;
0x000565a0 str r3, [sp, 0x28] | var_28h = r3;
0x000565a2 blx 0x62ec | fcn_000062ec ();
0x000565a6 movs r3, 0 | r3 = 0;
0x000565a8 strd r3, r3, [sp, 0x1c] | __asm ("strd r3, r3, [var_20h]");
| label_6:
0x000565ac mov r2, r6 | r2 = r6;
0x000565ae mov r1, r5 | r1 = r5;
0x000565b0 mov r0, r8 | r0 = r8;
0x000565b2 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000565b6 ldr.w r4, [sb] | r4 = *(sb);
0x000565ba cmp r4, 0 |
| if (r4 == 0) {
0x000565bc beq 0x5667c | goto label_15;
| }
0x000565be ldr r3, [pc, 0x1f0] |
0x000565c0 add r3, pc | r3 = 0xacd76;
0x000565c2 str r3, [sp, 0x30] | var_30h = r3;
0x000565c4 ldr r3, [pc, 0x1ec] |
0x000565c6 add r3, pc | r3 = 0xacd7e;
0x000565c8 str r3, [sp, 0x34] | var_34h = r3;
0x000565ca ldr r3, [pc, 0x1ec] |
0x000565cc add r3, pc | r3 = 0xacd8a;
0x000565ce str r3, [sp, 0x18] | var_18h = r3;
0x000565d0 lsls r3, r6, 1 | r3 = r6 << 1;
0x000565d2 str r3, [sp, 0x2c] | var_2ch = r3;
0x000565d4 mov r3, sl | r3 = sl;
0x000565d6 mov sl, r5 | sl = r5;
0x000565d8 mov r5, r3 | r5 = r3;
| label_0:
0x000565da ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x000565dc mov ip, sb |
0x000565de ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000565e0 cmp r2, 0 |
| if (r2 == 0) {
0x000565e2 beq.w 0x5671a | goto label_16;
| }
0x000565e6 mov r7, r4 | r7 = r4;
0x000565e8 mov r3, r2 | r3 = r2;
| do {
0x000565ea ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x000565ec cmp r0, r1 |
0x000565ee it hi |
| if (r0 <= r1) {
0x000565f0 movhi r7, r3 | r7 = r3;
| }
0x000565f2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000565f4 it hi |
| if (r0 <= r1) {
0x000565f6 movhi r1, r0 | r1 = r0;
| }
0x000565f8 cmp r3, 0 |
0x000565fa bne 0x565ea |
| } while (r3 != 0);
0x000565fc cmp r4, r7 |
0x000565fe ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
| if (r4 != r7) {
0x00056600 bne 0x56608 | goto label_17;
| }
0x00056602 b 0x56610 | goto label_4;
| do {
0x00056604 mov r4, r2 | r4 = r2;
0x00056606 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| label_17:
0x00056608 cmp r2, r7 |
0x0005660a bne 0x56604 |
| } while (r2 != r7);
0x0005660c add.w ip, r4, 0xc |
| label_4:
0x00056610 ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x00056612 str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x00056616 cmp r5, 0 |
| if (r5 == 0) {
0x00056618 beq 0x566d0 | goto label_18;
| }
0x0005661a ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0005661c cmp r3, 0 |
| if (r3 != 0) {
0x0005661e bne 0x566ba | goto label_19;
| }
0x00056620 ldrb r3, [r1] | r3 = *(r1);
0x00056622 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00056624 add r3, r0 | r3 += r0;
0x00056626 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0005662a tst.w r3, 0x46 |
| if ((r3 & 0x46) == 0) {
0x0005662e beq 0x566ba | goto label_19;
| }
0x00056630 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x00056634 mov r3, r5 | r3 = r5;
| label_3:
0x00056636 cmp fp, r2 |
0x00056638 sub.w r4, r1, sl | r4 = r1 - sl;
| if (fp != r2) {
0x0005663c beq 0x56660 |
0x0005663e adds r1, r4, r2 | r1 = r4 + r2;
0x00056640 add.w r0, fp, r4 | r0 = fp + r4;
0x00056644 subs r2, r6, r1 | r2 = r6 - r1;
0x00056646 add r0, r8 | r0 += r8;
0x00056648 add r1, r8 | r1 += r8;
0x0005664a str r3, [sp, 0x14] | var_14h = r3;
0x0005664c blx 0x6354 | realloc (r0, r1);
0x00056650 ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x00056652 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00056654 subs r2, r6, r2 | r2 = r6 - r2;
0x00056656 add.w r6, r2, fp | r6 = r2 + fp;
0x0005665a movs r2, 0 | r2 = 0;
0x0005665c strb.w r2, [r8, r6] | *((r8 + r6)) = r2;
| }
0x00056660 mov r1, r3 | r1 = r3;
0x00056662 mov r2, fp | r2 = fp;
0x00056664 add.w r0, r8, r4 | r0 = r8 + r4;
0x00056668 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0005666c ldr r0, [sp, 8] | r0 = var_8h;
0x0005666e mov r1, r7 | r1 = r7;
0x00056670 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00056674 ldr.w r4, [sb] | r4 = *(sb);
0x00056678 cmp r4, 0 |
| if (r4 != 0) {
0x0005667a bne 0x565da | goto label_0;
| }
| label_15:
0x0005667c mov.w r2, -1 | r2 = -1;
0x00056680 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00056682 mov r1, r8 | r1 = r8;
0x00056684 movs r3, 1 | r3 = 1;
0x00056686 str r2, [sp] | *(sp) = r2;
0x00056688 movs r4, 0 | r4 = 0;
0x0005668a bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x0005668e ldr r0, [sp, 8] | r0 = var_8h;
0x00056690 mov r1, r8 | r1 = r8;
0x00056692 bl 0x2d144 | fcn_0002d144 (r0, r1);
| label_2:
0x00056696 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00056698 bl 0x26dbc | fcn_00026dbc (r0);
0x0005669c mov r0, r4 | r0 = r4;
0x0005669e add sp, 0x3c |
0x000566a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x000566a4 mov r1, r3 | r1 = r3;
0x000566a6 mov r0, r4 | r0 = r4;
0x000566a8 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000566ac mov r8, r0 | r8 = r0;
0x000566ae cmp.w r8, 0 |
| if (r8 != 0) {
0x000566b2 bne.w 0x56596 | goto label_1;
| }
| label_5:
0x000566b6 movs r4, 7 | r4 = 7;
0x000566b8 b 0x56696 | goto label_2;
| label_19:
0x000566ba ldrb r3, [r1, r2] | r3 = *((r1 + r2));
0x000566bc ldr.w fp, [sp, 0x10] | fp = var_10h;
0x000566c0 cmp r3, 0x22 |
0x000566c2 it ne |
| if (r3 != 0x22) {
0x000566c4 ldrne r3, [sp, 0xc] | r3 = var_ch;
| goto label_20;
| }
| if (r3 != 0x22) {
| label_20:
0x000566c6 bne 0x56636 | goto label_3;
| }
0x000566c8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000566ca add.w fp, fp, 1 |
0x000566ce b 0x56636 | goto label_3;
| label_18:
0x000566d0 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000566d2 mov r0, r4 | r0 = r4;
0x000566d4 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000566d8 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x000566da mov r0, r4 | r0 = r4;
0x000566dc strb r5, [r4, r3] | *((r4 + r3)) = r5;
0x000566de bl 0x21524 | fcn_00021524 (r0);
0x000566e2 ldrd r2, r3, [r7, 4] | __asm ("ldrd r2, r3, [r7, 4]");
0x000566e6 ldrb r3, [r2, r3] | r3 = *((r2 + r3));
0x000566e8 cmp r3, 0x27 |
0x000566ea it ne |
| if (r3 == 0x27) {
0x000566ec ldrne r3, [sp, 0x34] | r3 = var_34h;
| }
| if (r3 == 0x27) {
0x000566ee bne 0x566f4 |
0x000566f0 ldr r3, [pc, 0xc8] |
0x000566f2 add r3, pc | r3 = 0xaceb2;
| }
0x000566f4 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000566f6 str r3, [sp] | *(sp) = r3;
0x000566f8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000566fa ldr r3, [sp, 0x20] | r3 = var_20h;
0x000566fc mov r1, r4 | r1 = r4;
0x000566fe ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00056700 bl 0x56488 | fcn_00056488 (r0, r1);
0x00056704 mov r0, r4 | r0 = r4;
0x00056706 cmp r4, 0 |
| if (r4 == 0) {
0x00056708 beq 0x5679c | goto label_21;
| }
0x0005670a blx 0x65dc | r0 = strcmp (r0, r1);
0x0005670e bic fp, r0, 0xc0000000 | fp = BIT_MASK (r0, 0xc0000000);
| label_9:
0x00056712 ldrd r1, r2, [r7, 4] | __asm ("ldrd r1, r2, [r7, 4]");
0x00056716 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00056718 b 0x56636 | goto label_3;
| label_16:
0x0005671a mov r3, r2 | r3 = r2;
0x0005671c mov r7, r4 | r7 = r4;
0x0005671e b 0x56610 | goto label_4;
| label_11:
0x00056720 cmp r5, 0 |
| if (r5 == 0) {
0x00056722 beq 0x567a2 | goto label_22;
| }
0x00056724 mov r0, r5 | r0 = r5;
0x00056726 blx 0x65dc | strcmp (r0, r1);
0x0005672a movs r1, 2 | r1 = 2;
0x0005672c bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
0x00056730 movs r3, 1 | r3 = 1;
0x00056732 mov r2, sl | r2 = sl;
0x00056734 umlal r3, r2, r6, r1 | __asm ("umlal r3, r2, r6, r1");
0x00056738 adds r1, r3, r3 | r1 = r3 + r3;
0x0005673a adc.w r0, r2, r2 | __asm ("adc.w r0, r2, r2");
0x0005673e adds r4, r1, r3 | r4 = r1 + r3;
0x00056740 adc.w r3, r2, r0 | __asm ("adc.w r3, r2, r0");
0x00056744 mov r2, r4 | r2 = r4;
| label_10:
0x00056746 ldr r0, [sp, 8] | r0 = var_8h;
| if (r0 == 0) {
0x00056748 cbz r0, 0x56790 | goto label_23;
| }
0x0005674a bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0005674e str r0, [sp, 0xc] | var_ch = r0;
| label_8:
0x00056750 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00056752 cmp r3, 0 |
| if (r3 == 0) {
0x00056754 beq 0x566b6 | goto label_5;
| }
0x00056756 mov r2, r4 | r2 = r4;
0x00056758 mov r0, r3 | r0 = r3;
0x0005675a mov r4, r3 | r4 = r3;
0x0005675c movs r1, 0 | r1 = 0;
0x0005675e blx 0x62ec | fcn_000062ec ();
0x00056762 add.w r3, r4, r6, lsl 1 | r3 = r4 + (r6 << 1);
0x00056766 mov r8, r4 | r8 = r4;
0x00056768 adds r3, 1 | r3++;
0x0005676a str r3, [sp, 0x20] | var_20h = r3;
0x0005676c add.w r3, r4, r6, lsl 2 | r3 = r4 + (r6 << 2);
0x00056770 adds r3, 2 | r3 += 2;
0x00056772 str r3, [sp, 0x1c] | var_1ch = r3;
0x00056774 movs r3, 0 | r3 = 0;
0x00056776 str r3, [sp, 0xc] | var_ch = r3;
0x00056778 str r3, [sp, 0x28] | var_28h = r3;
0x0005677a str r3, [sp, 0x10] | var_10h = r3;
0x0005677c b 0x565ac | goto label_6;
| label_12:
0x0005677e mov r6, r5 | r6 = r5;
0x00056780 mov r4, r5 | r4 = r5;
0x00056782 mov r7, r5 | r7 = r5;
0x00056784 b 0x5654a | goto label_7;
| label_13:
0x00056786 movs r4, 7 | r4 = 7;
0x00056788 mov r0, r4 | r0 = r4;
0x0005678a add sp, 0x3c |
0x0005678c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x00056790 mov r0, r2 | r0 = r2;
0x00056792 mov r1, r3 | r1 = r3;
0x00056794 bl 0x28c3c | fcn_00028c3c (r0);
0x00056798 str r0, [sp, 0xc] | var_ch = r0;
0x0005679a b 0x56750 | goto label_8;
| label_21:
0x0005679c ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x000567a0 b 0x56712 | goto label_9;
| label_22:
0x000567a2 movs r2, 3 | r2 = 3;
0x000567a4 mov r3, r5 | r3 = r5;
0x000567a6 mov r4, r2 | r4 = r2;
0x000567a8 mov r6, r5 | r6 = r5;
0x000567aa b 0x56746 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x56914 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00056914 () | void fcn_00056914 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_25h;
| int16_t var_28h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00056914 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00056918 mov sl, r0 | sl = r0;
0x0005691a ldr r0, [pc, 0x2b4] |
0x0005691c mov r8, r2 | r8 = r2;
0x0005691e sub sp, 0x64 |
0x00056920 mov r6, r1 | r6 = r1;
0x00056922 ldr r2, [pc, 0x2b0] | r2 = *(0x56bd6);
0x00056924 movs r1, 0 | r1 = 0;
0x00056926 vmov.i32 d17, 0 | __asm ("vmov.i32 d17, 0");
0x0005692a add r0, pc | r0 = 0xad500;
0x0005692c vldr d16, [pc, 0x298] | __asm ("vldr d16, [0x00056bcc]");
0x00056930 ldr r3, [pc, 0x2a4] |
0x00056932 vstr d17, [sp, 0x10] | __asm ("vstr d17, [sp, 0x10]");
0x00056936 vstr d16, [sp, 0x18] | __asm ("vstr d16, [sp, 0x18]");
0x0005693a add r3, pc | r3 = 0xad516;
0x0005693c ldr r2, [r0, r2] |
0x0005693e ldr r2, [r2] | r2 = *(0xad500);
0x00056940 str r2, [sp, 0x5c] | var_5ch = r2;
0x00056942 mov.w r2, 0 | r2 = 0;
0x00056946 ldrb r2, [r6] | r2 = *(r6);
0x00056948 str r1, [sp, 0x20] | var_20h = r1;
0x0005694a strh.w r1, [sp, 0x24] | var_24h = r1;
0x0005694e add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00056952 ldr.w r5, [r3, 0x9a8] | r5 = *((r3 + 0x9a8));
0x00056956 movs r3, 1 | r3 = 1;
| if (r5 != 0) {
0x00056958 cbz r5, 0x56966 |
0x0005695a mov r0, r5 | r0 = r5;
0x0005695c blx 0x65dc | r0 = strcmp (r0, r1);
0x00056960 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00056964 adds r3, 1 | r3++;
| }
0x00056966 ldrb r7, [r5, r3] | r7 = *((r5 + r3));
0x00056968 add r5, r3 | r5 += r3;
0x0005696a cmp r7, 0 |
| if (r7 == 0) {
0x0005696c beq.w 0x56bb6 | goto label_12;
| }
0x00056970 cmp r7, 0x49 |
| if (r7 == 0x49) {
0x00056972 beq.w 0x56aba | goto label_13;
| }
| label_4:
0x00056976 ldr r3, [pc, 0x264] |
0x00056978 movs r4, 0 | r4 = 0;
0x0005697a mov r1, r4 | r1 = r4;
0x0005697c mov sb, r4 | sb = r4;
0x0005697e add.w fp, sp, 0x10 |
0x00056982 str.w sl, [sp, 8] | __asm ("str.w sl, [var_8h]");
0x00056986 add r3, pc | r3 = 0xad568;
0x00056988 str r3, [sp, 4] | var_4h = r3;
| label_0:
0x0005698a cmp r7, 0x50 |
| if (r7 != 0x50) {
0x0005698c bne.w 0x56ae8 | goto label_14;
| }
0x00056990 adds r7, r4, 1 | r7 = r4 + 1;
0x00056992 ldrb r3, [r5, r7] | r3 = *((r5 + r7));
0x00056994 cmp r3, 0x34 |
| if (r3 == 0x34) {
0x00056996 beq.w 0x56b54 | goto label_15;
| }
0x0005699a cmp r3, 0x58 |
| if (r3 == 0x58) {
0x0005699c beq.w 0x56b38 | goto label_16;
| }
0x000569a0 subs r3, 0x31 | r3 -= 0x31;
0x000569a2 cmp r3, 2 |
| if (r3 > 2) {
0x000569a4 bhi.w 0x56c6c | goto label_17;
| }
| /* switch table (3 cases) at 0x569ac */
0x000569a8 tbb [pc, r3] | __asm ("tbb [0x000569b0]");
0x000569b0 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
| label_1:
0x000569b2 adds r3, r1, 2 | r3 = r1 + 2;
0x000569b4 ldrb r0, [r5, r3] | r0 = *((r5 + r3));
0x000569b6 add r3, r5 | r3 += r5;
0x000569b8 cmp r0, 0x40 |
| if (r0 != 0x40) {
0x000569ba bne 0x569e2 | goto label_18;
| }
| do {
0x000569bc ldrb r0, [r3, 1] | r0 = *((r3 + 1));
0x000569be cmp r0, 0x50 |
| if (r0 != 0x50) {
0x000569c0 bne 0x569e2 | goto label_18;
| }
0x000569c2 adds r7, r4, 4 | r7 = r4 + 4;
0x000569c4 ldrb r3, [r5, r7] | r3 = *((r5 + r7));
0x000569c6 subs r3, 0x31 | r3 -= 0x31;
0x000569c8 cmp r3, 3 |
| if (r3 > 3) {
0x000569ca bhi.w 0x56c68 | goto label_19;
| }
| /* switch table (4 cases) at 0x569d2 */
0x000569ce tbb [pc, r3] | __asm ("tbb [0x000569d4]");
0x000569d6 adds r3, r1, 2 | r3 = r1 + 2;
0x000569d8 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x000569da ldrb r0, [r5, r3] | r0 = *((r5 + r3));
0x000569dc add r3, r5 | r3 += r5;
0x000569de cmp r0, 0x40 |
0x000569e0 beq 0x569bc |
| } while (r0 == 0x40);
| label_18:
0x000569e2 ldrb r1, [r3] | r1 = *(r3);
0x000569e4 cmp r1, 0x40 |
| if (r1 == 0x40) {
0x000569e6 beq.w 0x56b84 | goto label_20;
| }
| label_8:
0x000569ea ldr r1, [pc, 0x1f4] |
0x000569ec add r0, sp, 0x10 | r0 += var_10h;
0x000569ee str r3, [sp, 0xc] | var_ch = r3;
0x000569f0 add r1, pc | r1 = 0xad5d6;
0x000569f2 bl 0x37e84 | fcn_00037e84 ();
0x000569f6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000569f8 movs r2, 4 | r2 = 4;
0x000569fa ldr r1, [pc, 0x1e8] |
0x000569fc mov r0, r3 | r0 = r3;
0x000569fe add r1, pc | r1 = 0xad5e8;
0x00056a00 blx 0x61c0 | r0 = fcn_000061c0 ();
0x00056a04 cmp r0, 0 |
| if (r0 == 0) {
0x00056a06 beq.w 0x56c3c | goto label_21;
| }
| label_2:
0x00056a0a mov r4, r7 | r4 = r7;
| label_6:
0x00056a0c adds r4, 1 | r4++;
0x00056a0e ldrb r7, [r5, r4] | r7 = *((r5 + r4));
0x00056a10 mov r1, r4 | r1 = r4;
0x00056a12 cmp r7, 0 |
| if (r7 != 0) {
0x00056a14 bne 0x5698a | goto label_0;
| }
0x00056a16 ldr.w sl, [sp, 8] | sl = var_8h;
| label_5:
0x00056a1a ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
| if (r2 != 0) {
0x00056a1c cbz r2, 0x56a28 |
0x00056a1e ldr r1, [pc, 0x1c8] |
0x00056a20 add r0, sp, 0x10 | r0 += var_10h;
0x00056a22 add r1, pc | r1 = 0xad610;
0x00056a24 bl 0x37e84 | fcn_00037e84 ();
| }
| label_7:
0x00056a28 ldrb.w r3, [sp, 0x24] | r3 = var_24h;
0x00056a2c ands r3, r3, 7 | r3 &= 7;
0x00056a30 it ne |
| if (r3 == r3) {
0x00056a32 movne r3, 1 | r3 = 1;
| }
0x00056a34 cmp.w sl, 0 |
0x00056a38 ite eq |
| if (sl != 0) {
0x00056a3a moveq r3, 0 | r3 = 0;
| }
| if (sl == 0) {
0x00056a3c andne r3, r3, 1 | r3 &= 1;
| }
0x00056a40 cmp r3, 0 |
| if (r3 != 0) {
0x00056a42 bne.w 0x56c20 | goto label_22;
| }
| label_9:
0x00056a46 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00056a48 cmp r3, 0 |
| if (r3 == 0) {
0x00056a4a beq.w 0x56c58 | goto label_23;
| }
0x00056a4e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00056a50 movs r1, 0 | r1 = 0;
0x00056a52 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x00056a54 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x00056a56 cbz r3, 0x56a62 |
0x00056a58 ldrb.w r3, [sp, 0x25] | r3 = var_25h;
0x00056a5c lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00056a5e bpl.w 0x56c5c | goto label_24;
| }
| }
0x00056a62 ldr r0, [sp, 0x14] | r0 = var_14h;
| label_11:
0x00056a64 ldr r2, [pc, 0x184] |
0x00056a66 ldr r3, [pc, 0x16c] | r3 = *(0x56bd6);
0x00056a68 add r2, pc | r2 = 0xad658;
0x00056a6a ldr r3, [r2, r3] | r3 = *(0xad658);
0x00056a6c ldr r2, [r3] | r2 = *(0xad658);
0x00056a6e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00056a70 eors r2, r3 | r2 ^= r3;
0x00056a72 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00056a76 bne.w 0x56c64 | goto label_25;
| }
0x00056a7a add sp, 0x64 |
0x00056a7c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00056a80 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00056a82 b 0x569b2 | goto label_1;
0x00056a84 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| do {
| label_3:
0x00056a86 adds r1, 5 | r1 += 5;
0x00056a88 ldrb r0, [r5, r1] | r0 = *((r5 + r1));
0x00056a8a add r1, r5 | r1 += r5;
0x00056a8c cmp r0, 0x2b |
| if (r0 == 0x2b) {
0x00056a8e bne 0x56a9a |
0x00056a90 ldrb r1, [r1, 1] | r1 = *((r1 + 1));
0x00056a92 cmp r1, 0x31 |
0x00056a94 itt eq |
| if (r1 != 0x31) {
0x00056a96 addeq r7, r4, 6 | r7 = r4 + 6;
| }
| if (r1 == 0x31) {
0x00056a98 addeq r3, 1 | r3++;
| goto label_26;
| }
| }
| label_26:
0x00056a9a cmp r3, 1 |
| if (r3 <= 1) {
0x00056a9c ble.w 0x56c02 | goto label_27;
| }
0x00056aa0 add r3, r2 | r3 += r2;
0x00056aa2 ldr r1, [sp, 4] | r1 = var_4h;
0x00056aa4 subs r3, 1 | r3--;
0x00056aa6 mov r0, fp | r0 = fp;
0x00056aa8 bl 0x37e84 | fcn_00037e84 ();
0x00056aac b 0x56a0a | goto label_2;
0x00056aae ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00056ab0 b 0x56a86 |
| } while (1);
0x00056ab2 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00056ab4 b 0x56a86 | goto label_3;
0x00056ab6 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00056ab8 b 0x56a86 | goto label_3;
| label_13:
0x00056aba ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00056abc cmp r3, 0x46 |
| if (r3 != 0x46) {
0x00056abe bne.w 0x56976 | goto label_4;
| }
0x00056ac2 ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x00056ac4 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00056ac6 bne.w 0x56976 | goto label_4;
| }
0x00056aca ldr r2, [pc, 0x124] |
0x00056acc add r4, sp, 0x28 | r4 += var_28h;
0x00056ace adds r3, r5, 3 | r3 = r5 + 3;
0x00056ad0 mov r1, r4 | r1 = r4;
0x00056ad2 movs r0, 0x32 | r0 = 0x32;
0x00056ad4 mov r5, r4 | r5 = r4;
0x00056ad6 add r2, pc | r2 = 0xad6cc;
0x00056ad8 bl 0x56488 | fcn_00056488 (r0, r1);
0x00056adc ldrb.w r7, [sp, 0x28] | r7 = var_28h;
0x00056ae0 cmp r7, 0 |
| if (r7 != 0) {
0x00056ae2 bne.w 0x56976 | goto label_4;
| }
0x00056ae6 b 0x56a1a | goto label_5;
| label_14:
0x00056ae8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00056aea ldr r2, [sp, 0x18] | r2 = var_18h;
0x00056aec adds r0, r3, 1 | r0 = r3 + 1;
0x00056aee adc r1, sb, 0 | __asm ("adc r1, sb, 0");
0x00056af2 cmp r0, r2 |
0x00056af4 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r0 < r2) {
0x00056af8 bge 0x56b02 |
0x00056afa ldr r2, [sp, 0x14] | r2 = var_14h;
0x00056afc str r0, [sp, 0x20] | var_20h = r0;
0x00056afe strb r7, [r2, r3] | *((r2 + r3)) = r7;
0x00056b00 b 0x56a0c | goto label_6;
| }
0x00056b02 movs r1, 1 | r1 = 1;
0x00056b04 mov r0, fp | r0 = fp;
0x00056b06 bl 0x3bcf4 | r0 = fcn_0003bcf4 (r0, r1);
0x00056b0a cmp r0, 0 |
| if (r0 <= 0) {
0x00056b0c ble.w 0x56a0c | goto label_6;
| }
0x00056b10 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00056b12 cmp r0, 1 |
0x00056b14 sub.w r3, r0, 2 | r3 = r0 - 2;
0x00056b18 add.w r2, r1, 1 | r2 = r1 + 1;
0x00056b1c str r2, [sp, 0x20] | var_20h = r2;
0x00056b1e ldr r2, [sp, 0x14] | r2 = var_14h;
0x00056b20 strb r7, [r2, r1] | *((r2 + r1)) = r7;
| if (r0 == 1) {
0x00056b22 beq.w 0x56a0c | goto label_6;
| }
| do {
0x00056b26 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00056b28 subs r3, 1 | r3--;
0x00056b2a ldr r1, [sp, 0x14] | r1 = var_14h;
0x00056b2c adds r0, r2, 1 | r0 = r2 + 1;
0x00056b2e str r0, [sp, 0x20] | var_20h = r0;
0x00056b30 strb r7, [r1, r2] | *((r1 + r2)) = r7;
0x00056b32 adds r2, r3, 1 | r2 = r3 + 1;
0x00056b34 bne 0x56b26 |
| } while (r2 != r3);
0x00056b36 b 0x56a0c | goto label_6;
| label_16:
0x00056b38 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x00056b3a cmp r1, 0 |
| if (r1 == 0) {
0x00056b3c beq.w 0x56a0a | goto label_2;
| }
0x00056b40 ldrb r3, [r1] | r3 = *(r1);
0x00056b42 cmp r3, 0 |
| if (r3 == 0) {
0x00056b44 beq.w 0x56a0a | goto label_2;
| }
0x00056b48 add r0, sp, 0x10 | r0 += var_10h;
0x00056b4a ldr.w sl, [sp, 8] | sl = var_8h;
0x00056b4e bl 0x3bf28 | fcn_0003bf28 (r0, r1);
0x00056b52 b 0x56a28 | goto label_7;
| label_15:
0x00056b54 ldr r4, [sp, 0x20] | r4 = var_20h;
0x00056b56 ldr.w sl, [sp, 0x18] | sl = var_18h;
0x00056b5a cmp.w r8, 0 |
| if (r8 == 0) {
0x00056b5e beq 0x56c0e | goto label_28;
| }
0x00056b60 mov r0, r8 | r0 = r8;
0x00056b62 blx 0x65dc | r0 = strcmp (r0, r1);
0x00056b66 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x00056b6a adds r1, r2, r4 | r1 = r2 + r4;
0x00056b6c cmp r1, sl |
| if (r1 >= sl) {
0x00056b6e bhs 0x56c16 | goto label_29;
| }
0x00056b70 cmp r2, 0 |
| if (r2 == 0) {
0x00056b72 beq.w 0x56a0a | goto label_2;
| }
0x00056b76 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00056b78 str r1, [sp, 0x20] | var_20h = r1;
0x00056b7a mov r1, r8 | r1 = r8;
0x00056b7c add r0, r4 | r0 += r4;
0x00056b7e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00056b82 b 0x56a0a | goto label_2;
| label_20:
0x00056b84 ldrb r1, [r3, 1] | r1 = *((r3 + 1));
0x00056b86 cmp r1, 0x4e |
| if (r1 != 0x4e) {
0x00056b88 bne.w 0x569ea | goto label_8;
| }
0x00056b8c ldrb r1, [r3, 2] | r1 = *((r3 + 2));
0x00056b8e cmp r1, 0x50 |
| if (r1 != 0x50) {
0x00056b90 bne.w 0x569ea | goto label_8;
| }
0x00056b94 ldrsb.w r3, [r6, 1] | r3 = *((r6 + 1));
0x00056b98 ldr r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x00056b9a adds r3, 0xf | r3 += 0xf;
| if (r3 == 0xf) {
0x00056b9c bne 0x56bf4 |
0x00056b9e ldrb r3, [r1, 0x1a] | r3 = *((r1 + 0x1a));
0x00056ba0 cmp r3, 1 |
| if (r3 == 1) {
0x00056ba2 beq 0x56bf4 | goto label_30;
| }
| if (r3 > 1) {
0x00056ba4 bhi 0x56c48 | goto label_31;
| }
0x00056ba6 ldrb.w r3, [sp, 0x24] | r3 = var_24h;
| if (r3 != 0) {
0x00056baa cbnz r3, 0x56bfe | goto label_10;
| }
0x00056bac ldr r3, [sp, 0x20] | r3 = var_20h;
0x00056bae adds r7, r4, 2 | r7 = r4 + 2;
0x00056bb0 subs r3, 2 | r3 -= 2;
0x00056bb2 str r3, [sp, 0x20] | var_20h = r3;
0x00056bb4 b 0x56bfe | goto label_10;
| label_12:
0x00056bb6 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x00056bb8 cmp r1, 0 |
| if (r1 == 0) {
0x00056bba beq 0x56c58 | goto label_23;
| }
0x00056bbc add r0, sp, 0x10 | r0 += var_10h;
0x00056bbe bl 0x3bf28 | fcn_0003bf28 (r0, r1);
0x00056bc2 b 0x56a28 | goto label_7;
| }
| label_30:
0x00056bf4 ldr r1, [pc, 0x78] |
0x00056bf6 add r0, sp, 0x10 | r0 += var_10h;
0x00056bf8 add r1, pc | r1 = 0xad86c;
0x00056bfa bl 0x37e84 | fcn_00037e84 ();
| label_10:
0x00056bfe adds r4, r7, 3 | r4 = r7 + 3;
0x00056c00 b 0x56a0c | goto label_6;
| label_27:
0x00056c02 ldr r1, [pc, 0x70] |
0x00056c04 add r0, sp, 0x10 | r0 += var_10h;
0x00056c06 add r1, pc | r1 = 0xad880;
0x00056c08 bl 0x37e84 | fcn_00037e84 ();
0x00056c0c b 0x56a0a | goto label_2;
| label_28:
0x00056c0e cmp r4, sl |
| if (r4 <= sl) {
0x00056c10 blo.w 0x56a0a | goto label_2;
| }
0x00056c14 mov r2, r8 | r2 = r8;
| label_29:
0x00056c16 mov r1, r8 | r1 = r8;
0x00056c18 add r0, sp, 0x10 | r0 += var_10h;
0x00056c1a bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x00056c1e b 0x56a0a | goto label_2;
| label_22:
0x00056c20 ldrb.w r3, [sl, 0x57] | r3 = *((sl + 0x57));
0x00056c24 cmp r3, 0 |
| if (r3 != 0) {
0x00056c26 bne.w 0x56a46 | goto label_9;
| }
0x00056c2a ldrb.w r3, [sl, 0x58] | r3 = *((sl + 0x58));
0x00056c2e cmp r3, 0 |
| if (r3 != 0) {
0x00056c30 bne.w 0x56a46 | goto label_9;
| }
0x00056c34 mov r0, sl | r0 = sl;
0x00056c36 bl 0x38024 | fcn_00038024 (r0);
0x00056c3a b 0x56a46 | goto label_9;
| label_21:
0x00056c3c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00056c3e adds r4, 5 | r4 += 5;
0x00056c40 cmp r3, 0 |
| if (r3 == 0) {
0x00056c42 beq.w 0x56a0c | goto label_6;
| }
0x00056c46 b 0x56a0a | goto label_2;
| label_31:
0x00056c48 ldr r1, [pc, 0x2c] |
0x00056c4a add r3, r2 | r3 += r2;
0x00056c4c subs r3, 1 | r3--;
0x00056c4e add r0, sp, 0x10 | r0 += var_10h;
0x00056c50 add r1, pc | r1 = 0xad8cc;
0x00056c52 bl 0x37e84 | fcn_00037e84 ();
0x00056c56 b 0x56bfe | goto label_10;
| label_23:
0x00056c58 movs r0, 0 | r0 = 0;
0x00056c5a b 0x56a64 | goto label_11;
| label_24:
0x00056c5c add r0, sp, 0x10 | r0 += var_10h;
0x00056c5e bl 0x39478 | fcn_00039478 (r0);
0x00056c62 b 0x56a64 | goto label_11;
| label_25:
0x00056c64 blx 0x6430 | fcn_00006430 ();
| label_19:
0x00056c68 ldrh r3, [r6, 2] | r3 = *((r6 + 2));
0x00056c6a b 0x56a86 | goto label_3;
| label_17:
0x00056c6c ldrh r2, [r6, 2] | r2 = *((r6 + 2));
0x00056c6e b 0x569b2 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x57bfc */
| #include <stdint.h>
|
; (fcn) fcn.00057bfc () | void fcn_00057bfc (int16_t arg1, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00057bfc push {r4, r5, r6, r7, lr} |
0x00057bfe mov r5, r0 | r5 = r0;
0x00057c00 mov r4, r2 | r4 = r2;
0x00057c02 mov r6, r3 | r6 = r3;
0x00057c04 sub sp, 0x14 |
0x00057c06 movs r0, 0x1e | r0 = 0x1e;
0x00057c08 blx 0x650c | fcn_0000650c ();
0x00057c0c orr.w r3, r4, r6 | r3 = r4 | r6;
0x00057c10 cmp r3, 0 |
0x00057c12 it ne |
| if (r3 != 0) {
0x00057c14 cmpne r5, 0 | __asm ("cmpne r5, 0");
| }
0x00057c16 bne 0x57c1c |
| while (r0 == 0) {
0x00057c18 add sp, 0x14 |
0x00057c1a pop {r4, r5, r6, r7, pc} |
0x00057c1c mov r7, r0 | r7 = r0;
0x00057c1e mov r1, r0 | r1 = r0;
0x00057c20 mov r0, r5 | r0 = r5;
0x00057c22 bl 0xc4764 | fcn_000c4764 (r0);
0x00057c26 adds r4, r1, r4 | r4 = r1 + r4;
0x00057c28 sub.w r5, r5, r1 | r5 -= r1;
0x00057c2c ldr r1, [pc, 0x40] |
0x00057c2e adc r6, r6, 0 | __asm ("adc r6, r6, 0");
0x00057c32 mov r2, r5 | r2 = r5;
0x00057c34 movs r0, 0x10 | r0 = 0x10;
0x00057c36 str r7, [sp, 8] | var_8h = r7;
0x00057c38 add r1, pc | r1 = 0xaf8ac;
0x00057c3a strd r4, r6, [sp] | __asm ("strd r4, r6, [sp]");
0x00057c3e bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00057c42 mov r1, r4 | r1 = r4;
0x00057c44 mov r0, r5 | r0 = r5;
0x00057c46 blx 0x661c | r0 = fcn_0000661c ();
0x00057c4a mov r7, r0 | r7 = r0;
0x00057c4c cmp r0, 0 |
0x00057c4e beq 0x57c18 |
| }
0x00057c50 blx 0x6670 | fcn_00006670 ();
0x00057c54 ldr r1, [pc, 0x1c] |
0x00057c56 mov r2, r5 | r2 = r5;
0x00057c58 ldr r3, [r0] | r3 = *(r0);
0x00057c5a movs r0, 1 | r0 = 1;
0x00057c5c str r7, [sp, 8] | var_8h = r7;
0x00057c5e add r1, pc | r1 = 0xaf8d6;
0x00057c60 strd r4, r6, [sp] | __asm ("strd r4, r6, [sp]");
0x00057c64 str r3, [sp, 0xc] | var_ch = r3;
0x00057c66 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00057c6a add sp, 0x14 |
0x00057c6c pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x57cc8 */
| #include <stdint.h>
|
; (fcn) fcn.00057cc8 () | void fcn_00057cc8 (int16_t arg1, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00057cc8 push {r4, r5, r6, r7, lr} |
0x00057cca mov r5, r0 | r5 = r0;
0x00057ccc mov r4, r2 | r4 = r2;
0x00057cce mov r6, r3 | r6 = r3;
0x00057cd0 sub sp, 0x14 |
0x00057cd2 movs r0, 0x1e | r0 = 0x1e;
0x00057cd4 blx 0x650c | fcn_0000650c ();
0x00057cd8 orr.w r3, r4, r6 | r3 = r4 | r6;
0x00057cdc cmp r3, 0 |
0x00057cde it ne |
| if (r3 != 0) {
0x00057ce0 cmpne r5, 0 | __asm ("cmpne r5, 0");
| }
0x00057ce2 bne 0x57ce8 |
| while (r0 == 0) {
0x00057ce4 add sp, 0x14 |
0x00057ce6 pop {r4, r5, r6, r7, pc} |
0x00057ce8 mov r1, r0 | r1 = r0;
0x00057cea mov r0, r5 | r0 = r5;
0x00057cec bl 0xc4764 | fcn_000c4764 (r0);
0x00057cf0 adds r4, r1, r4 | r4 = r1 + r4;
0x00057cf2 sub.w r5, r5, r1 | r5 -= r1;
0x00057cf6 ldr r1, [pc, 0x40] |
0x00057cf8 adc r6, r6, 0 | __asm ("adc r6, r6, 0");
0x00057cfc mov r2, r5 | r2 = r5;
0x00057cfe movs r0, 0x10 | r0 = 0x10;
0x00057d00 strd r4, r6, [sp] | __asm ("strd r4, r6, [sp]");
0x00057d04 add r1, pc | r1 = 0xafa42;
0x00057d06 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00057d0a mov r1, r4 | r1 = r4;
0x00057d0c mov r0, r5 | r0 = r5;
0x00057d0e blx 0x6290 | r0 = fcn_00006290 ();
0x00057d12 mov r7, r0 | r7 = r0;
0x00057d14 cmp r0, 0 |
0x00057d16 beq 0x57ce4 |
| }
0x00057d18 blx 0x6670 | fcn_00006670 ();
0x00057d1c ldr r1, [pc, 0x1c] |
0x00057d1e mov r2, r5 | r2 = r5;
0x00057d20 ldr r3, [r0] | r3 = *(r0);
0x00057d22 movs r0, 1 | r0 = 1;
0x00057d24 str r7, [sp, 8] | var_8h = r7;
0x00057d26 add r1, pc | r1 = 0xafa66;
0x00057d28 strd r4, r6, [sp] | __asm ("strd r4, r6, [sp]");
0x00057d2c str r3, [sp, 0xc] | var_ch = r3;
0x00057d2e bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00057d32 add sp, 0x14 |
0x00057d34 pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x57d40 */
| #include <stdint.h>
|
; (fcn) fcn.00057d40 () | void fcn_00057d40 (int16_t arg1) {
| int32_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
0x00057d40 ldr r3, [r0, 0x5c] | r3 = *((r0 + 0x5c));
0x00057d42 push.w {r4, r5, r6, r7, r8, lr} |
0x00057d46 mov r4, r0 | r4 = r0;
0x00057d48 ldr r1, [r0, 0x30] | r1 = *((r0 + 0x30));
0x00057d4a sub sp, 8 |
0x00057d4c ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00057d4e ldr r0, [r0, 0x60] | r0 = *((r0 + 0x60));
0x00057d50 ldr.w r8, [r4, 0x14] | r8 = *((r4 + 0x14));
0x00057d54 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00057d56 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00057d58 mov r5, r0 | r5 = r0;
0x00057d5a ldr r7, [r4, 0x18] | r7 = *((r4 + 0x18));
0x00057d5c str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x00057d5e lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x00057d60 ite mi |
| if (r3 >= r3) {
0x00057d62 addmi r6, r0, r8 | r6 = r0 + r8;
| }
| if (r3 >= r3) {
0x00057d66 mov r6, r8 | r6 = r8;
| }
0x00057d68 mov r0, r6 | r0 = r6;
0x00057d6a mov r1, r7 | r1 = r7;
0x00057d6c bl 0xc4a14 | fcn_000c4a14 (r0, r1);
| if (r1 != 0) {
0x00057d70 cbz r1, 0x57d76 |
0x00057d72 mla r6, r0, r7, r7 | __asm ("mla r6, r0, r7, r7");
| }
0x00057d76 ldr r1, [pc, 0x1c] |
0x00057d78 mov r3, r7 | r3 = r7;
0x00057d7a strd r5, r6, [sp] | __asm ("strd r5, r6, [sp]");
0x00057d7e mov r2, r8 | r2 = r8;
0x00057d80 movs r0, 8 | r0 = 8;
0x00057d82 add r1, pc | r1 = 0xafb1c;
0x00057d84 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00057d88 movs r0, 0 | r0 = 0;
0x00057d8a str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x00057d8c add sp, 8 |
0x00057d8e pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x58538 */
| #include <stdint.h>
|
; (fcn) fcn.00058538 () | void fcn_00058538 (int16_t arg1, int16_t arg2) {
| int32_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
0x00058538 push {r4, r5, r6, r7, lr} |
0x0005853a mov r3, r1 | r3 = r1;
0x0005853c mov r6, r1 | r6 = r1;
0x0005853e ldr r1, [pc, 0x60] |
0x00058540 sub sp, 0x14 |
0x00058542 mov r2, r0 | r2 = r0;
0x00058544 mov r4, r0 | r4 = r0;
0x00058546 movs r0, 0x10 | r0 = 0x10;
0x00058548 add r1, pc | r1 = 0xb0aee;
0x0005854a bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x0005854e mov r1, r6 | r1 = r6;
0x00058550 mov r0, r4 | r0 = r4;
0x00058552 bl 0x28c3c | fcn_00028c3c (r0);
0x00058556 ldr r1, [pc, 0x4c] |
0x00058558 mov r5, r0 | r5 = r0;
0x0005855a mov r2, r0 | r2 = r0;
0x0005855c strd r4, r6, [sp] | __asm ("strd r4, r6, [sp]");
0x00058560 movs r0, 0x10 | r0 = 0x10;
0x00058562 add r1, pc | r1 = 0xb0b0c;
0x00058564 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
| if (r5 == 0) {
0x00058568 cbz r5, 0x5858e | goto label_0;
| }
0x0005856a ldr r1, [pc, 0x3c] |
0x0005856c movs r7, 0 | r7 = 0;
0x0005856e mov r2, r5 | r2 = r5;
0x00058570 movs r0, 0x10 | r0 = 0x10;
0x00058572 stm.w sp, {r4, r6, r7} | *(sp) = r4;
| *((sp + 4)) = r6;
| *((sp + 8)) = r7;
0x00058576 add r1, pc | r1 = 0xb0b24;
0x00058578 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x0005857c orrs.w r3, r4, r6 | r3 = r4 | r6;
| if (r3 == r4) {
0x00058580 beq 0x5858e | goto label_0;
| }
0x00058582 mov ip, r5 |
0x00058584 adds r3, r5, r4 | r3 = r5 + r4;
| do {
0x00058586 strb r7, [ip], 1 | *(ip) = r7;
| ip++;
0x0005858a cmp ip, r3 |
0x0005858c bne 0x58586 |
| } while (ip != r3);
| label_0:
0x0005858e mov r0, r5 | r0 = r5;
0x00058590 mov r2, r4 | r2 = r4;
0x00058592 mov r3, r6 | r3 = r6;
0x00058594 bl 0x57bfc | fcn_00057bfc (r0, r1, r2);
0x00058598 mov r0, r5 | r0 = r5;
0x0005859a add sp, 0x14 |
0x0005859c pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x58da4 */
| #include <stdint.h>
|
; (fcn) fcn.00058da4 () | void fcn_00058da4 (int16_t arg1) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| r0 = arg1;
0x00058da4 ldr r3, [pc, 0x7c] |
0x00058da6 push {r4, r5, r6, r7, lr} |
0x00058da8 mov r4, r0 | r4 = r0;
0x00058daa sub sp, 0x14 |
0x00058dac add r3, pc | r3 = 0xb1bd4;
0x00058dae ldr.w r2, [r3, 0x2f4] | r2 = *(0xb1ec8);
| if (r2 == 0) {
0x00058db2 cbnz r2, 0x58dba |
0x00058db4 movs r2, 1 | r2 = 1;
0x00058db6 str.w r2, [r3, 0x2f4] | __asm ("str.w r2, [r3, 0x2f4]");
| }
0x00058dba ldr r3, [pc, 0x6c] |
0x00058dbc add r3, pc | r3 = 0xb1bea;
0x00058dbe ldr.w r2, [r3, 0x2f8] | r2 = *(0xb1ee2);
| if (r2 == 0) {
0x00058dc2 cbz r2, 0x58e12 | goto label_0;
| }
0x00058dc4 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00058dc6 mov r0, r4 | r0 = r4;
0x00058dc8 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00058dca ldr r1, [pc, 0x60] |
0x00058dcc mov r5, r0 | r5 = r0;
0x00058dce mov r3, r0 | r3 = r0;
0x00058dd0 strd r4, r0, [sp] | __asm ("strd r4, r0, [sp]");
0x00058dd4 mov r2, r4 | r2 = r4;
0x00058dd6 movs r0, 0x10 | r0 = 0x10;
0x00058dd8 add r1, pc | r1 = 0xb1c0a;
0x00058dda asrs r7, r5, 0x1f | r7 = r5 >> 0x1f;
0x00058ddc bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
| if (r4 == 0) {
0x00058de0 cbz r4, 0x58e08 | goto label_1;
| }
0x00058de2 ldr r1, [pc, 0x4c] |
0x00058de4 movs r6, 0 | r6 = 0;
0x00058de6 mov r2, r4 | r2 = r4;
0x00058de8 movs r0, 0x10 | r0 = 0x10;
0x00058dea str r6, [sp, 8] | var_8h = r6;
0x00058dec add r1, pc | r1 = 0xb1c22;
0x00058dee strd r5, r7, [sp] | __asm ("strd r5, r7, [sp]");
0x00058df2 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00058df6 orrs.w r3, r5, r7 | r3 = r5 | r7;
| if (r3 == r5) {
0x00058dfa beq 0x58e08 | goto label_1;
| }
0x00058dfc mov r1, r4 | r1 = r4;
0x00058dfe adds r2, r4, r5 | r2 = r4 + r5;
| do {
0x00058e00 strb r6, [r1], 1 | *(r1) = r6;
| r1++;
0x00058e04 cmp r1, r2 |
0x00058e06 bne 0x58e00 |
| } while (r1 != r2);
| label_1:
0x00058e08 mov r2, r5 | r2 = r5;
0x00058e0a mov r3, r7 | r3 = r7;
0x00058e0c mov r0, r4 | r0 = r4;
0x00058e0e bl 0x57cc8 | fcn_00057cc8 (r0, r1, r2);
| label_0:
0x00058e12 ldr r3, [pc, 0x20] |
0x00058e14 mov r0, r4 | r0 = r4;
0x00058e16 add r3, pc |
0x00058e18 ldr r3, [r3, 0x20] | r3 = *(0xb1c70);
0x00058e1a add sp, 0x14 |
0x00058e1c pop.w {r4, r5, r6, r7, lr} |
0x00058e20 bx r3 | return uint32_t (*r3)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x58e94 */
| #include <stdint.h>
|
; (fcn) fcn.00058e94 () | void fcn_00058e94 (int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, uint32_t arg2, int16_t arg3, int16_t arg4, arithmetic x) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| r0 = x;
0x00058e94 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00058e98 sub sp, 0x24 |
0x00058e9a ldr r6, [r0, 0x24] | r6 = *(arg_48hx24);
0x00058e9c mov r5, r0 | r5 = r0;
0x00058e9e mov sb, r3 | sb = r3;
0x00058ea0 ldr r7, [sp, 0x48] | r7 = *(arg_48h);
0x00058ea2 ldr r4, [sp, 0x50] | r4 = *(arg_50h);
0x00058ea4 str r2, [sp, 0x14] | var_14h = r2;
0x00058ea6 subs r6, r7, r6 | r6 = r7 - r6;
0x00058ea8 str r6, [sp] | *(sp) = r6;
0x00058eaa add.w fp, r4, r6 |
0x00058eae ldrd sl, r0, [r0, 0x54] | __asm ("ldrd sl, r0, [arg_48hx54]");
0x00058eb2 cmp r1, 0 |
0x00058eb4 it ne |
| if (r1 == 0) {
0x00058eb6 movne sl, r0 | sl = r0;
| }
0x00058eb8 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x00058eba movs r0, 8 | r0 = 8;
0x00058ebc add.w r8, r6, r1 | r8 = r6 + r1;
0x00058ec0 ldr r1, [pc, 0x214] |
0x00058ec2 add r1, pc | r1 = 0xb1f9e;
0x00058ec4 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00058ec8 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00058eca add.w r2, r4, r8 | r2 = r4 + r8;
0x00058ece str r2, [sp, 0x18] | var_18h = r2;
0x00058ed0 cmp r3, 0 |
| if (r3 == 0) {
0x00058ed2 beq 0x58fa6 | goto label_3;
| }
0x00058ed4 cmp.w sb, 1 |
| if (sb != 1) {
0x00058ed8 bne 0x58f64 | goto label_4;
| }
0x00058eda ldr r3, [r5, 0x5c] | r3 = *((r5 + 0x5c));
0x00058edc mov r1, fp | r1 = fp;
0x00058ede ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00058ee0 ldr r0, [r5, 0x60] | r0 = *((r5 + 0x60));
0x00058ee2 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00058ee4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 == 0) {
0x00058ee6 cbnz r0, 0x58f36 |
0x00058ee8 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00058eea mov r1, sb | r1 = sb;
0x00058eec ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x00058ef0 strd r6, r4, [sp, 8] | __asm ("strd r6, r4, [var_8h]");
0x00058ef4 strd fp, r3, [sp] | __asm ("strd fp, r3, [sp]");
0x00058ef8 ldr r3, [r5, 0x5c] | r3 = *((r5 + 0x5c));
0x00058efa ldr r0, [r5, 0x60] | r0 = *((r5 + 0x60));
0x00058efc ldr.w r8, [r3, 0x1c] | r8 = *((r3 + 0x1c));
0x00058f00 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00058f02 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00058f04 cmp r0, 0 |
| if (r0 != 0) {
0x00058f06 bne.w 0x5905a | goto label_5;
| }
0x00058f0a ldr r3, [r5, 0x40] | r3 = *((r5 + 0x40));
0x00058f0c lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00058f0e bpl 0x58f9e | goto label_2;
| }
0x00058f10 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00058f12 mov r1, sl | r1 = sl;
0x00058f14 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00058f16 mov r0, r5 | r0 = r5;
0x00058f18 str r3, [sp, 4] | var_4h = r3;
0x00058f1a ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00058f1c add r3, r6 | r3 += r6;
0x00058f1e str r3, [sp] | *(sp) = r3;
0x00058f20 mov r3, r4 | r3 = r4;
0x00058f22 bl 0x332f4 | r0 = fcn_000332f4 (r0, r1, r2, r3, r4, r5);
0x00058f26 cmp r0, 0 |
| if (r0 == 0) {
0x00058f28 beq 0x58f9e | goto label_2;
| }
0x00058f2a ldr r1, [pc, 0x1b0] |
0x00058f2c mov r0, sb | r0 = sb;
0x00058f2e ldr r2, [sp, 0x14] | r2 = var_14h;
0x00058f30 add r1, pc | r1 = 0xb2012;
0x00058f32 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
| }
0x00058f36 asrs r6, r7, 0x1f | r6 = r7 >> 0x1f;
| if (r4 == 0) {
| label_0:
0x00058f38 cbz r4, 0x58f5c | goto label_6;
| }
0x00058f3a ldr r1, [pc, 0x1a4] |
0x00058f3c movs r5, 0 | r5 = 0;
0x00058f3e strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x00058f42 mov r2, r4 | r2 = r4;
0x00058f44 movs r0, 0x10 | r0 = 0x10;
0x00058f46 str r5, [sp, 8] | var_8h = r5;
0x00058f48 add r1, pc | r1 = 0xb202e;
0x00058f4a bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00058f4e orrs r6, r7 | r6 |= r7;
| if (r6 == r7) {
0x00058f50 beq 0x58f5c | goto label_6;
| }
0x00058f52 add r7, r4 | r7 += r4;
| do {
0x00058f54 strb r5, [r4], 1 | *(r4) = r5;
| r4++;
0x00058f58 cmp r7, r4 |
0x00058f5a bne 0x58f54 |
| } while (r7 != r4);
| label_6:
0x00058f5c movs r0, 1 | r0 = 1;
0x00058f5e add sp, 0x24 |
0x00058f60 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00058f64 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00058f66 mov r0, fp | r0 = fp;
0x00058f68 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00058f6a adds r1, r3, r6 | r1 = r3 + r6;
0x00058f6c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00058f70 ldr r3, [r5, 0x40] | r3 = *((r5 + 0x40));
0x00058f72 cmp.w sb, 0 |
0x00058f76 ite ne |
| if (sb == 0) {
0x00058f78 movne r3, 0 | r3 = 0;
| }
| if (sb != 0) {
0x00058f7a andeq r3, r3, 1 | r3 &= 1;
| }
0x00058f7e cbnz r3, 0x58fb6 |
| while (r3 != 0) {
| label_1:
0x00058f80 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00058f82 mov r1, sb | r1 = sb;
0x00058f84 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x00058f88 str r6, [sp, 8] | var_8h = r6;
0x00058f8a strd fp, r3, [sp] | __asm ("strd fp, r3, [sp]");
0x00058f8e str r4, [sp, 0xc] | var_ch = r4;
0x00058f90 ldr r3, [r5, 0x5c] | r3 = *((r5 + 0x5c));
0x00058f92 ldr r0, [r5, 0x60] | r0 = *((r5 + 0x60));
0x00058f94 ldr r6, [r3, 0x1c] | r6 = *((r3 + 0x1c));
0x00058f96 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00058f98 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00058f9a cmp r0, 0 |
| if (r0 != 0) {
0x00058f9c bne 0x5905a | goto label_5;
| }
| label_2:
0x00058f9e movs r0, 0 | r0 = 0;
0x00058fa0 add sp, 0x24 |
0x00058fa2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00058fa6 ldr r1, [pc, 0x13c] |
0x00058fa8 movs r0, 1 | r0 = 1;
0x00058faa ldr r2, [sp, 0x14] | r2 = var_14h;
0x00058fac asrs r6, r7, 0x1f | r6 = r7 >> 0x1f;
0x00058fae add r1, pc | r1 = 0xb2098;
0x00058fb0 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00058fb4 b 0x58f38 | goto label_0;
0x00058fb6 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x00058fb8 cmp r3, 0 |
0x00058fba bne 0x58f80 |
| }
0x00058fbc ldr r3, [sp, 0x18] | r3 = var_18h;
0x00058fbe mov r1, sl | r1 = sl;
0x00058fc0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00058fc2 mov r0, r5 | r0 = r5;
0x00058fc4 str r3, [sp, 4] | var_4h = r3;
0x00058fc6 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00058fc8 add r3, r6 | r3 += r6;
0x00058fca str r3, [sp] | *(sp) = r3;
0x00058fcc ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00058fce bl 0x332f4 | fcn_000332f4 (r0, r1, r2, r3, r4, r5);
0x00058fd2 str r0, [sp, 0x1c] | var_1ch = r0;
0x00058fd4 cmp r0, 0 |
| if (r0 != 0) {
0x00058fd6 bne 0x5906c | goto label_7;
| }
0x00058fd8 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00058fda movs r0, 8 | r0 = 8;
0x00058fdc ldr r1, [pc, 0x108] |
0x00058fde add r8, r3 | r8 += r3;
0x00058fe0 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00058fe2 add r1, pc | r1 = 0xb20ce;
0x00058fe4 mov r2, r8 | r2 = r8;
0x00058fe6 str r3, [sp] | *(sp) = r3;
0x00058fe8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00058fea bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00058fee ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00058ff0 cmp r3, 0 |
| if (r3 <= 0) {
0x00058ff2 ble 0x58f80 | goto label_1;
| }
0x00058ff4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00058ff6 subs r3, 1 | r3--;
0x00058ff8 ldr.w ip, [sp, 0x1c] | ip = var_1ch;
0x00058ffc add.w r0, r8, r3 | r0 = r8 + r3;
0x00059000 subs r1, r2, 1 | r1 = r2 - 1;
0x00059002 add.w r2, r8, -1 | r2 = r8 + -1;
| do {
0x00059006 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0005900a ldrb lr, [r1, 1]! |
0x0005900e cmp r2, r0 |
0x00059010 eor.w r3, r3, lr | r3 ^= lr;
0x00059014 orr.w ip, ip, r3 |
0x00059018 bne 0x59006 |
| } while (r2 != r0);
0x0005901a mov r3, ip | r3 = ip;
0x0005901c cmp r3, 0 |
| if (r3 == 0) {
0x0005901e beq 0x58f80 | goto label_1;
| }
0x00059020 asr.w r8, r7, 0x1f | r8 = r7 >> 0x1f;
0x00059024 ldr r0, [r5, 0x50] | r0 = *((r5 + 0x50));
0x00059026 mov r6, r8 | r6 = r8;
0x00059028 bl 0x2f6a4 | r0 = fcn_0002f6a4 (r0);
| if (r0 == 0) {
0x0005902c cbz r0, 0x5904c | goto label_8;
| }
0x0005902e orrs.w r3, r7, r8 | r3 = r7 | r8;
| if (r3 == r7) {
0x00059032 beq 0x590ac | goto label_9;
| }
0x00059034 ldr r3, [sp, 0x4c] | r3 = *(arg_4ch);
0x00059036 movs r5, 0 | r5 = 0;
0x00059038 mov sb, r5 | sb = r5;
0x0005903a subs r3, 1 | r3--;
0x0005903c adds r1, r3, r7 | r1 = r3 + r7;
| do {
0x0005903e ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00059042 cmp r1, r3 |
0x00059044 orr.w r5, r5, r2 | r5 |= r2;
0x00059048 bne 0x5903e |
| } while (r1 != r3);
| if (r5 != 0) {
0x0005904a cbz r5, 0x5907c |
| label_8:
0x0005904c ldr r1, [pc, 0x9c] |
0x0005904e movs r0, 1 | r0 = 1;
0x00059050 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00059052 add r1, pc | r1 = 0xb2142;
0x00059054 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00059058 b 0x58f38 | goto label_0;
| label_5:
0x0005905a ldr r1, [pc, 0x94] |
0x0005905c mov r2, sb | r2 = sb;
0x0005905e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00059060 movs r0, 1 | r0 = 1;
0x00059062 asrs r6, r7, 0x1f | r6 = r7 >> 0x1f;
0x00059064 add r1, pc | r1 = 0xb215a;
0x00059066 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x0005906a b 0x58f38 | goto label_0;
| label_7:
0x0005906c ldr r1, [pc, 0x84] |
0x0005906e movs r0, 1 | r0 = 1;
0x00059070 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00059072 asrs r6, r7, 0x1f | r6 = r7 >> 0x1f;
0x00059074 add r1, pc | r1 = 0xb216c;
0x00059076 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x0005907a b 0x58f38 | goto label_0;
| }
0x0005907c ldr r1, [pc, 0x78] |
0x0005907e movs r0, 2 | r0 = 2;
0x00059080 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00059082 add r1, pc | r1 = 0xb217e;
0x00059084 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00059088 cmp r4, 0 |
| if (r4 == 0) {
0x0005908a beq 0x58f9e | goto label_2;
| }
0x0005908c ldr r1, [pc, 0x6c] |
0x0005908e mov r2, r4 | r2 = r4;
0x00059090 strd r7, r8, [sp] | __asm ("strd r7, r8, [sp]");
0x00059094 add r7, r4 | r7 += r4;
0x00059096 movs r0, 0x10 | r0 = 0x10;
0x00059098 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x0005909c add r1, pc | r1 = 0xb219c;
0x0005909e bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
| do {
0x000590a2 strb r5, [r4], 1 | *(r4) = r5;
| r4++;
0x000590a6 cmp r7, r4 |
0x000590a8 bne 0x590a2 |
| } while (r7 != r4);
0x000590aa b 0x58f9e | goto label_2;
| label_9:
0x000590ac ldr r1, [pc, 0x50] |
0x000590ae movs r0, 2 | r0 = 2;
0x000590b0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000590b2 add r1, pc | r1 = 0xb21b6;
0x000590b4 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000590b8 cmp r4, 0 |
| if (r4 == 0) {
0x000590ba beq.w 0x58f9e | goto label_2;
| }
0x000590be vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000590c2 movs r3, 0 | r3 = 0;
0x000590c4 ldr r1, [pc, 0x3c] |
0x000590c6 mov r2, r4 | r2 = r4;
0x000590c8 movs r0, 0x10 | r0 = 0x10;
0x000590ca str r3, [sp, 8] | var_8h = r3;
0x000590cc vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x000590d0 add r1, pc | r1 = 0xb21d8;
0x000590d2 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000590d6 b 0x58f9e | goto label_2;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x5a4b8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x5b860 */
| #include <stdint.h>
|
; (fcn) fcn.0005b860 () | void fcn_0005b860 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0005b860 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005b864 sub sp, 0x24 |
0x0005b866 ldrb r3, [r2] | r3 = *(r2);
0x0005b868 mov sl, r2 | sl = r2;
0x0005b86a str r0, [sp, 0x10] | var_10h = r0;
0x0005b86c cmp r3, 7 |
| if (r3 == 7) {
0x0005b86e beq 0x5b87a | goto label_8;
| }
0x0005b870 mov r6, sl | r6 = sl;
| do {
| label_2:
0x0005b872 mov r0, r6 | r0 = r6;
0x0005b874 add sp, 0x24 |
0x0005b876 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0005b87a add.w r3, r1, r1, lsl 1 | r3 = r1 + (r1 << 1);
0x0005b87e ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x0005b880 mov ip, r1 |
0x0005b882 lsl.w lr, r3, 2 | lr = r3 << 2;
0x0005b886 ldrb.w r3, [r6, lr] | r3 = *((r6 + lr));
0x0005b88a add r6, lr | r6 += lr;
0x0005b88c cmp r3, 7 |
| if (r3 != 7) {
0x0005b88e bne.w 0x5ba84 | goto label_9;
| }
0x0005b892 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0005b896 cmp r3, 1 |
0x0005b898 ittt hi |
| if (r3 <= 1) {
0x0005b89a movhi fp, 1 |
| }
| if (r3 <= 1) {
0x0005b89e strhi ip, [sp, 0x14] | var_14h = ip;
| }
| if (r3 > 1) {
0x0005b8a2 strd lr, r1, [sp, 0x18] | __asm ("strd lr, r1, [var_18h]");
| }
0x0005b8a6 bls 0x5b872 |
| } while (r3 < 1);
| label_1:
0x0005b8a8 add.w r8, fp, fp, lsl 1 | r8 = fp + (fp << 1);
0x0005b8ac lsl.w r8, r8, 2 | r8 <<= 2;
0x0005b8b0 add.w r3, r8, 0xc | r3 = r8 + 0xc;
0x0005b8b4 add.w r2, sl, r8 | r2 = sl + r8;
0x0005b8b8 ldr.w r8, [r6, 4] | r8 = *((r6 + 4));
0x0005b8bc ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
0x0005b8c0 str r3, [sp, 0xc] | var_ch = r3;
0x0005b8c2 add r3, sl | r3 += sl;
0x0005b8c4 cmp.w r8, 1 |
0x0005b8c8 ldrd r7, sb, [r2, 4] | __asm ("ldrd r7, sb, [r2, 4]");
0x0005b8cc str r3, [sp, 8] | var_8h = r3;
| if (r8 < 1) {
0x0005b8ce bls 0x5b93c | goto label_10;
| }
0x0005b8d0 mov r3, r8 | r3 = r8;
0x0005b8d2 movs r5, 1 | r5 = 1;
0x0005b8d4 mov r8, r7 | r8 = r7;
0x0005b8d6 str r1, [sp, 4] | var_4h = r1;
0x0005b8d8 mov r7, r3 | r7 = r3;
0x0005b8da b 0x5b8f2 |
| while (r1 != r8) {
| label_0:
0x0005b8dc adds r4, 0xc | r4 += 0xc;
0x0005b8de movs r3, 2 | r3 = 2;
0x0005b8e0 ldrb r1, [r6, r4] | r1 = *((r6 + r4));
0x0005b8e2 add r4, r6 | r4 += r6;
0x0005b8e4 cmp r1, 5 |
0x0005b8e6 itt hi |
| if (r1 <= 5) {
0x0005b8e8 ldrhi r3, [r4, 4] | r3 = *((r4 + 4));
| }
| if (r1 <= 5) {
0x0005b8ea addhi r3, 2 | r3 += 2;
| }
0x0005b8ec add r5, r3 | r5 += r3;
0x0005b8ee cmp r5, r7 |
| if (r5 >= r7) {
0x0005b8f0 bhs 0x5b938 | goto label_11;
| }
0x0005b8f2 add.w r4, r5, r5, lsl 1 | r4 = r5 + (r5 << 1);
0x0005b8f6 lsls r4, r4, 2 | r4 <<= 2;
0x0005b8f8 adds r3, r6, r4 | r3 = r6 + r4;
0x0005b8fa ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0005b8fc cmp r1, r8 |
0x0005b8fe bne 0x5b8dc |
| }
0x0005b900 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0005b902 mov r2, r8 | r2 = r8;
0x0005b904 mov r1, sb | r1 = sb;
0x0005b906 blx 0x61c0 | r0 = fcn_000061c0 ();
0x0005b90a cmp r0, 0 |
| if (r0 != 0) {
0x0005b90c bne 0x5b8dc | goto label_0;
| }
0x0005b90e adds r4, 0xc | r4 += 0xc;
0x0005b910 mov r3, r7 | r3 = r7;
0x0005b912 adds r0, r6, r4 | r0 = r6 + r4;
0x0005b914 mov r7, r8 | r7 = r8;
0x0005b916 ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x0005b918 mov r8, r3 | r8 = r3;
0x0005b91a ldr r1, [sp, 4] | r1 = var_4h;
0x0005b91c tst.w r2, 0x14 |
| if ((r2 & 0x14) != 0) {
0x0005b920 bne 0x5b978 | goto label_12;
| }
| if (r1 != 0) {
0x0005b922 cbnz r1, 0x5b942 | goto label_13;
| }
0x0005b924 movs r3, 2 | r3 = 2;
0x0005b926 orr r2, r2, 4 | r2 |= 4;
0x0005b92a strb r2, [r0, 1] | *((r0 + 1)) = r2;
| label_3:
0x0005b92c ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0005b930 add fp, r3 |
0x0005b932 cmp r2, fp |
| if (r2 > fp) {
0x0005b934 bhi 0x5b8a8 | goto label_1;
| }
0x0005b936 b 0x5b872 | goto label_2;
| label_11:
0x0005b938 ldr r1, [sp, 4] | r1 = var_4h;
0x0005b93a mov r7, r8 | r7 = r8;
| do {
| if (r1 != 0) {
| label_10:
0x0005b93c cbnz r1, 0x5b988 | goto label_14;
| }
| label_4:
0x0005b93e movs r3, 2 | r3 = 2;
0x0005b940 b 0x5b92c | goto label_3;
| label_13:
0x0005b942 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0005b944 ldr r2, [sp, 8] | r2 = var_8h;
0x0005b946 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0005b948 adds r1, r3, 1 | r1 = r3 + 1;
0x0005b94a add r1, r5 | r1 += r5;
0x0005b94c bl 0x5b860 | r0 = fcn_0005b860 (r0, r1, r2);
0x0005b950 cmp r0, 0 |
| if (r0 == 0) {
0x0005b952 beq.w 0x5ba8e | goto label_15;
| }
0x0005b956 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005b958 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0005b95a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005b95c add r6, r3 | r6 += r3;
0x0005b95e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005b960 add r4, r6 | r4 += r6;
0x0005b962 ldr.w r8, [r6, 4] | r8 = *((r6 + 4));
0x0005b966 cmp r4, r0 |
0x0005b968 ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
| if (r4 != r0) {
0x0005b96c beq 0x5b978 |
0x0005b96e ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x0005b970 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x0005b972 orr r2, r2, 0x10 | r2 |= 0x10;
0x0005b976 strb r2, [r4, 1] | *((r4 + 1)) = r2;
| }
| label_12:
0x0005b978 cmp r5, r8 |
0x0005b97a bhs 0x5b93c |
| } while (r5 >= r8);
| label_5:
0x0005b97c cmp r1, 5 |
| if (r1 < 5) {
0x0005b97e bls 0x5b93e | goto label_4;
| }
0x0005b980 ldr r3, [sp, 8] | r3 = var_8h;
0x0005b982 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005b984 adds r3, 2 | r3 += 2;
0x0005b986 b 0x5b92c | goto label_3;
| label_14:
0x0005b988 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0005b98a ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x0005b98c cmp r2, 0 |
| if (r2 == 0) {
0x0005b98e beq 0x5ba3e | goto label_16;
| }
0x0005b990 ldrd r3, r1, [r1] | __asm ("ldrd r3, r1, [r1]");
0x0005b994 cmp r3, r1 |
| if (r3 >= r1) {
0x0005b996 bhs 0x5ba3e | goto label_16;
| }
0x0005b998 add.w r0, r3, r3, lsl 1 | r0 = r3 + (r3 << 1);
0x0005b99c movs r5, 7 | r5 = 7;
0x0005b99e movs r6, 2 | r6 = 2;
0x0005b9a0 strh.w r5, [r2, r0, lsl 2] | offset_0 = r0 << 2;
| *((r2 + offset_0)) = r5;
0x0005b9a4 add.w r0, r2, r0, lsl 2 | r0 = r2 + (r0 << 2);
0x0005b9a8 movs r5, 0 | r5 = 0;
0x0005b9aa mov r4, r3 | r4 = r3;
0x0005b9ac strd r6, r5, [r0, 4] | __asm ("strd r6, r5, [r0, 4]");
0x0005b9b0 adds r3, 1 | r3++;
0x0005b9b2 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0005b9b4 cmp r3, r1 |
0x0005b9b6 str r3, [r0] | *(r0) = r3;
| if (r3 >= r1) {
0x0005b9b8 bhs 0x5ba5a | goto label_17;
| }
| do {
0x0005b9ba add.w r0, r3, r3, lsl 1 | r0 = r3 + (r3 << 1);
0x0005b9be movs r5, 5 | r5 = 5;
0x0005b9c0 adds r3, 1 | r3++;
0x0005b9c2 strh.w r5, [r2, r0, lsl 2] | offset_1 = r0 << 2;
| *((r2 + offset_1)) = r5;
0x0005b9c6 add.w r2, r2, r0, lsl 2 | r2 += (r0 << 2);
0x0005b9ca cmp r3, r1 |
0x0005b9cc strd r7, sb, [r2, 4] | __asm ("strd r7, sb, [r2, 4]");
0x0005b9d0 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0005b9d2 str r3, [r2] | *(r2) = r3;
0x0005b9d4 ldr r2, [r2, 8] | r2 = *((r2 + 8));
| if (r3 >= r1) {
0x0005b9d6 bhs 0x5ba74 | goto label_18;
| }
| label_6:
0x0005b9d8 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0005b9dc mov.w r0, 1 | r0 = 1;
0x0005b9e0 strh.w r0, [r2, r1, lsl 2] | offset_2 = r1 << 2;
| *((r2 + offset_2)) = r0;
0x0005b9e4 add.w r1, r2, r1, lsl 2 | r1 = r2 + (r1 << 2);
0x0005b9e8 movs r0, 0 | r0 = 0;
0x0005b9ea strd r0, r0, [r1, 4] | __asm ("strd r0, r0, [r1, 4]");
0x0005b9ee mov r2, r3 | r2 = r3;
0x0005b9f0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0005b9f2 adds r3, 1 | r3++;
0x0005b9f4 str r3, [r1] | *(r1) = r3;
| label_7:
0x0005b9f6 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0005b9f8 ldrb r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x0005b9fa cmp r3, 0 |
| if (r3 != 0) {
0x0005b9fc bne 0x5ba8e | goto label_15;
| }
0x0005b9fe mov r0, sl | r0 = sl;
0x0005ba00 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0005ba04 bl 0x24b58 | fcn_00024b58 (r0);
0x0005ba08 ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x0005ba0a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0005ba0c str r4, [sp, 0x14] | var_14h = r4;
0x0005ba0e add.w r3, r6, r2, lsl 2 | r3 = r6 + (r2 << 2);
0x0005ba12 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0005ba16 subs r1, r4, r1 | r1 = r4 - r1;
0x0005ba18 add.w r2, r6, r2, lsl 2 | r2 = r6 + (r2 << 2);
0x0005ba1c str r1, [r2, 8] | *((r2 + 8)) = r1;
0x0005ba1e ldr r1, [sp, 0x18] | r1 = var_18h;
0x0005ba20 add r6, r1 | r6 += r1;
0x0005ba22 ldrb r1, [r2, 1] | r1 = *((r2 + 1));
0x0005ba24 orr r1, r1, 0x20 | r1 |= 0x20;
0x0005ba28 strb r1, [r2, 1] | *((r2 + 1)) = r1;
0x0005ba2a ldr r2, [sp, 8] | r2 = var_8h;
0x0005ba2c str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0005ba2e ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0005ba30 orr r2, r2, 0x10 | r2 |= 0x10;
0x0005ba34 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0005ba36 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005ba38 ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
0x0005ba3c b 0x5b97c | goto label_5;
| label_16:
0x0005ba3e ldr r5, [sp, 0x10] | r5 = var_10h;
0x0005ba40 movs r2, 2 | r2 = 2;
0x0005ba42 movs r3, 0 | r3 = 0;
0x0005ba44 movs r1, 7 | r1 = 7;
0x0005ba46 mov r0, r5 | r0 = r5;
0x0005ba48 bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005ba4c ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0005ba4e mov r4, r0 | r4 = r0;
| if (r2 == 0) {
0x0005ba50 cbz r2, 0x5ba5a | goto label_17;
| }
0x0005ba52 ldrd r3, r1, [r5] | __asm ("ldrd r3, r1, [r5]");
0x0005ba56 cmp r3, r1 |
0x0005ba58 blo 0x5b9ba |
| } while (r3 <= r1);
| label_17:
0x0005ba5a ldr r5, [sp, 0x10] | r5 = var_10h;
0x0005ba5c mov r2, r7 | r2 = r7;
0x0005ba5e mov r3, sb | r3 = sb;
0x0005ba60 movs r1, 5 | r1 = 5;
0x0005ba62 mov r0, r5 | r0 = r5;
0x0005ba64 bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005ba68 ldr r2, [r5, 8] | r2 = *((r5 + 8));
| if (r2 == 0) {
0x0005ba6a cbz r2, 0x5ba74 | goto label_18;
| }
0x0005ba6c ldrd r3, r1, [r5] | __asm ("ldrd r3, r1, [r5]");
0x0005ba70 cmp r3, r1 |
| if (r3 <= r1) {
0x0005ba72 blo 0x5b9d8 | goto label_6;
| }
| label_18:
0x0005ba74 movs r3, 0 | r3 = 0;
0x0005ba76 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0005ba78 mov r2, r3 | r2 = r3;
0x0005ba7a movs r1, 1 | r1 = 1;
0x0005ba7c bl 0x5b7d4 | r0 = fcn_0005b7d4 (r0, r1, r2, r3);
0x0005ba80 mov r2, r0 | r2 = r0;
0x0005ba82 b 0x5b9f6 | goto label_7;
| label_9:
0x0005ba84 mov r0, sl | r0 = sl;
0x0005ba86 mov r6, sl | r6 = sl;
0x0005ba88 bl 0x24b58 | fcn_00024b58 (r0);
0x0005ba8c b 0x5b872 | goto label_2;
| label_15:
0x0005ba8e movs r6, 0 | r6 = 0;
0x0005ba90 b 0x5b872 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x5ba94 */
| #include <stdint.h>
|
; (fcn) fcn.0005ba94 () | void fcn_0005ba94 (int16_t arg_48h, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0005ba94 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005ba98 mov r4, r1 | r4 = r1;
0x0005ba9a mov sb, r2 | sb = r2;
0x0005ba9c ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x0005ba9e lsls r6, r4, 1 | r6 = r4 << 1;
0x0005baa0 sub sp, 0x24 |
0x0005baa2 ldrb r2, [r2] | r2 = *(r2);
0x0005baa4 adds r5, r6, r4 | r5 = r6 + r4;
0x0005baa6 str r1, [sp, 4] | var_4h = r1;
0x0005baa8 add.w r5, r1, r5, lsl 2 | r5 = r1 + (r5 << 2);
0x0005baac cmp r2, 0 |
| if (r2 == 0) {
0x0005baae beq.w 0x5bbe8 | goto label_15;
| }
0x0005bab2 mov fp, r3 |
0x0005bab4 ldr.w r3, [pc, 0x49c] |
0x0005bab8 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x0005babc add r3, pc | r3 = 0xb7a14;
0x0005babe strd r3, r0, [sp, 0x14] | __asm ("strd r3, r0, [var_14h]");
| label_2:
0x0005bac2 ldrb.w ip, [r5, 1] | ip = *((r5 + 1));
0x0005bac6 ands r3, ip, 8 | r3 = ip & 8;
| if (r3 != ip) {
0x0005baca bne.w 0x5bd76 | goto label_10;
| }
0x0005bace cmp r2, 0x2e |
| if (r2 != 0x2e) {
0x0005bad0 bne.w 0x5bbf0 | goto label_17;
| }
0x0005bad4 ldrb r3, [r5] | r3 = *(r5);
0x0005bad6 cmp r3, 7 |
| if (r3 != 7) {
0x0005bad8 bne.w 0x5bd76 | goto label_10;
| }
0x0005badc ldrb.w r3, [sb, 1] | r3 = *((sb + 1));
0x0005bae0 add.w r2, sb, 1 | r2 = sb + 1;
0x0005bae4 str r2, [sp, 0x10] | var_10h = r2;
0x0005bae6 cmp r3, 0x22 |
| if (r3 == 0x22) {
0x0005bae8 beq.w 0x5bd80 | goto label_18;
| }
0x0005baec cmp r3, 0 |
0x0005baee it ne |
| if (r3 != 0) {
0x0005baf0 cmpne r3, 0x2e | __asm ("cmpne r3, 0x2e");
| }
0x0005baf2 ite ne |
| if (r3 == 0) {
0x0005baf4 movne r2, 1 | r2 = 1;
| }
| if (r3 != 0) {
0x0005baf6 moveq r2, 0 | r2 = 0;
| }
0x0005baf8 cmp r3, 0x5b |
0x0005bafa ite eq |
| if (r3 != 0x5b) {
0x0005bafc moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x5b) {
0x0005bafe andne r2, r2, 1 | r2 &= 1;
| }
0x0005bb02 cmp r2, 0 |
| if (r2 == 0) {
0x0005bb04 beq.w 0x5beba | goto label_19;
| }
0x0005bb08 add.w r3, sb, 2 | r3 = sb + 2;
| do {
0x0005bb0c ldrb r1, [r3] | r1 = *(r3);
0x0005bb0e mov r0, r3 | r0 = r3;
0x0005bb10 adds r3, 1 | r3++;
0x0005bb12 cmp r1, 0 |
0x0005bb14 it ne |
| if (r1 != 0) {
0x0005bb16 cmpne r1, 0x2e | __asm ("cmpne r1, 0x2e");
| }
0x0005bb18 ite ne |
| if (r1 == 0) {
0x0005bb1a movne r2, 1 | r2 = 1;
| }
| if (r1 != 0) {
0x0005bb1c moveq r2, 0 | r2 = 0;
| }
0x0005bb1e cmp r1, 0x5b |
0x0005bb20 ite eq |
| if (r1 != 0x5b) {
0x0005bb22 moveq r2, 0 | r2 = 0;
| }
| if (r1 == 0x5b) {
0x0005bb24 andne r2, r2, 1 | r2 &= 1;
| }
0x0005bb28 cmp r2, 0 |
0x0005bb2a bne 0x5bb0c |
| } while (r2 != 0);
0x0005bb2c sub.w r0, r0, sb | r0 -= sb;
0x0005bb30 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005bb32 add.w fp, r0, -1 |
0x0005bb36 mov r7, fp | r7 = fp;
0x0005bb38 str r3, [sp, 8] | var_8h = r3;
| label_4:
0x0005bb3a ldr.w sb, [r5, 4] | sb = *((r5 + 4));
0x0005bb3e add.w sl, r7, 2 | sl = r7 + 2;
0x0005bb42 mov r2, r7 | r2 = r7;
0x0005bb44 mov.w r8, 1 | r8 = 1;
0x0005bb48 mov r7, sl | r7 = sl;
0x0005bb4a mov sl, r6 | sl = r6;
0x0005bb4c mov r6, sb | r6 = sb;
| label_0:
0x0005bb4e cmp r8, r6 |
| if (r8 < r6) {
0x0005bb50 bls 0x5bb78 | goto label_20;
| }
| do {
0x0005bb52 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0005bb54 ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 == r3) {
0x0005bb58 beq.w 0x5bcee | goto label_21;
| }
0x0005bb5c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0005bb5e mov.w r8, 1 | r8 = 1;
0x0005bb62 add r4, r3 | r4 += r3;
0x0005bb64 ldr r3, [sp, 4] | r3 = var_4h;
0x0005bb66 lsl.w sl, r4, 1 | sl = r4 << 1;
0x0005bb6a add.w r5, sl, r4 | r5 = sl + r4;
0x0005bb6e add.w r5, r3, r5, lsl 2 | r5 = r3 + (r5 << 2);
0x0005bb72 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x0005bb74 cmp r8, r6 |
0x0005bb76 bhi 0x5bb52 |
| } while (r8 > r6);
| label_20:
0x0005bb78 add.w sb, r8, r8, lsl 1 | sb = r8 + (r8 << 1);
0x0005bb7c lsl.w sb, sb, 2 | sb <<= 2;
0x0005bb80 add.w r3, r5, sb | r3 = r5 + sb;
0x0005bb84 ldrb r0, [r3, 1] | r0 = *((r3 + 1));
0x0005bb86 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0005bb88 lsls r0, r0, 0x1f | r0 <<= 0x1f;
| if (r0 >= r0) {
0x0005bb8a bpl 0x5bbb2 | goto label_22;
| }
0x0005bb8c cmp r2, r1 |
0x0005bb8e it eq |
| if (r2 != r1) {
0x0005bb90 ldreq r0, [r3, 8] | r0 = *((r3 + 8));
| }
| if (r2 == r1) {
0x0005bb92 beq 0x5bbba | goto label_23;
| }
| do {
| label_1:
0x0005bb94 add.w r3, sb, 0xc | r3 = sb + 0xc;
0x0005bb98 add.w r8, r8, 1 | r8++;
0x0005bb9c ldrb r1, [r5, r3] | r1 = *((r5 + r3));
0x0005bb9e add.w sb, r5, r3 | sb = r5 + r3;
0x0005bba2 cmp r1, 5 |
0x0005bba4 itet hi |
| if (r1 <= 5) {
0x0005bba6 ldrhi r3, [sb, 4] | r3 = *((sb + 4));
| }
| if (r1 <= 5) {
0x0005bbaa movhi r3, 1 | r3 = 1;
| }
| if (r1 > 5) {
0x0005bbac adds r3, 1 | r3++;
| }
0x0005bbae add r8, r3 | r8 += r3;
0x0005bbb0 b 0x5bb4e | goto label_0;
| label_22:
0x0005bbb2 cmp r7, r1 |
0x0005bbb4 bne 0x5bb94 |
| } while (r7 != r1);
0x0005bbb6 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0005bbb8 adds r0, 1 | r0++;
| label_23:
0x0005bbba ldr r1, [sp, 8] | r1 = var_8h;
0x0005bbbc str r2, [sp, 0xc] | var_ch = r2;
0x0005bbbe blx 0x61c0 | fcn_000061c0 ();
0x0005bbc2 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0005bbc4 cmp r0, 0 |
| if (r0 != 0) {
0x0005bbc6 bne 0x5bb94 | goto label_1;
| }
0x0005bbc8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005bbca add r8, r4 | r8 += r4;
0x0005bbcc add.w r4, r8, 1 | r4 = r8 + 1;
0x0005bbd0 add r3, fp | r3 += fp;
0x0005bbd2 mov sb, r3 | sb = r3;
| label_6:
0x0005bbd4 ldr r3, [sp, 4] | r3 = var_4h;
0x0005bbd6 lsls r6, r4, 1 | r6 = r4 << 1;
0x0005bbd8 ldrb.w r2, [sb] | r2 = *(sb);
0x0005bbdc adds r5, r6, r4 | r5 = r6 + r4;
0x0005bbde add.w r5, r3, r5, lsl 2 | r5 = r3 + (r5 << 2);
0x0005bbe2 cmp r2, 0 |
| if (r2 != 0) {
0x0005bbe4 bne.w 0x5bac2 | goto label_2;
| }
| label_15:
0x0005bbe8 mov r0, r5 | r0 = r5;
0x0005bbea add sp, 0x24 |
0x0005bbec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x0005bbf0 cmp r2, 0x5b |
| if (r2 != 0x5b) {
0x0005bbf2 bne 0x5bce6 | goto label_5;
| }
0x0005bbf4 ldrb.w lr, [sb, 1] |
0x0005bbf8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005bbfa add r2, lr | r2 += lr;
0x0005bbfc ldrb.w r2, [r2, 0x40] | r2 = *((r2 + 0x40));
0x0005bc00 ands r2, r2, 4 | r2 &= 4;
| if (r2 == r2) {
0x0005bc04 beq.w 0x5beb4 | goto label_24;
| }
0x0005bc08 ldr.w r8, [pc, 0x34c] |
0x0005bc0c add.w r1, sb, 1 | r1 = sb + 1;
0x0005bc10 mov r2, lr | r2 = lr;
0x0005bc12 add r8, pc | r8 = 0xb7b6e;
| do {
0x0005bc14 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0005bc18 mov r7, r1 | r7 = r1;
0x0005bc1a add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x0005bc1e sub.w r3, r2, 0x30 | r3 = r2 - 0x30;
0x0005bc22 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0005bc26 add.w r0, r8, r2 | r0 = r8 + r2;
0x0005bc2a ldrb.w r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x0005bc2e tst.w r0, 4 |
0x0005bc32 bne 0x5bc14 |
| } while ((r0 & 4) != 0);
0x0005bc34 rsb.w r1, sb, 1 | r1 = 1 - sb;
0x0005bc38 add r1, r7 | r1 += r7;
0x0005bc3a cmp r1, 1 |
0x0005bc3c ite hi |
| if (r1 <= 1) {
0x0005bc3e movhi r0, 0 | r0 = 0;
| }
| if (r1 > 1) {
0x0005bc40 movls r0, 1 | r0 = 1;
| }
0x0005bc42 cmp r2, 0x5d |
0x0005bc44 it ne |
| if (r2 == 0x5d) {
0x0005bc46 orrne r0, r0, 1 | r0 |= 1;
| }
0x0005bc4a cmp r0, 0 |
| if (r0 == 0) {
0x0005bc4c beq.w 0x5be42 | goto label_25;
| }
| label_14:
0x0005bc50 cmp.w lr, 0x23 |
| if (lr != 0x23) {
0x0005bc54 bne 0x5bce6 | goto label_5;
| }
0x0005bc56 ldrb r2, [r5] | r2 = *(r5);
0x0005bc58 mov lr, r4 | lr = r4;
0x0005bc5a cmp r2, 6 |
| if (r2 != 6) {
0x0005bc5c bne.w 0x5bd76 | goto label_10;
| }
0x0005bc60 ldr.w r8, [r5, 4] | r8 = *((r5 + 4));
0x0005bc64 mov r7, ip | r7 = ip;
0x0005bc66 mov r0, r5 | r0 = r5;
0x0005bc68 str r4, [sp, 8] | var_8h = r4;
0x0005bc6a mov sl, r8 | sl = r8;
| label_3:
0x0005bc6c add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0005bc70 cmp r1, sl |
0x0005bc72 add.w r2, r0, r2, lsl 2 | r2 = r0 + (r2 << 2);
| if (r1 < sl) {
0x0005bc76 bls 0x5bca2 | goto label_26;
| }
| do {
0x0005bc78 ands r7, r7, 0x20 | r7 &= 0x20;
0x0005bc7c mov.w r1, 1 | r1 = 1;
| if (r7 == r7) {
0x0005bc80 beq 0x5bcc4 | goto label_27;
| }
0x0005bc82 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0005bc84 add lr, r2 | lr += r2;
0x0005bc86 ldr r2, [sp, 4] | r2 = var_4h;
0x0005bc88 add.w r0, lr, lr, lsl 1 | r0 = lr + (lr << 1);
0x0005bc8c add.w r0, r2, r0, lsl 2 | r0 = r2 + (r0 << 2);
0x0005bc90 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0005bc94 ldr.w sl, [r0, 4] | sl = *((r0 + 4));
0x0005bc98 add.w r2, r0, r2, lsl 2 | r2 = r0 + (r2 << 2);
0x0005bc9c ldrb r7, [r0, 1] | r7 = *((r0 + 1));
0x0005bc9e cmp r1, sl |
0x0005bca0 bhi 0x5bc78 |
| } while (r1 > sl);
| label_26:
0x0005bca2 ldrb.w fp, [r2, 1] | fp = *((r2 + 1));
0x0005bca6 movs r4, 1 | r4 = 1;
0x0005bca8 tst.w fp, 4 |
0x0005bcac ldrb.w fp, [r2] | fp = *(r2);
0x0005bcb0 it eq |
| if ((fp & 4) != 0) {
0x0005bcb2 addeq r3, r3, r4 | r3 += r4;
| }
0x0005bcb4 cmp.w fp, 5 |
0x0005bcb8 ittt hi |
| if (fp <= 5) {
0x0005bcba ldrhi r2, [r2, 4] | r2 = *((r2 + 4));
| }
| if (fp <= 5) {
0x0005bcbc addhi r2, 1 | r2++;
| }
| if (fp <= 5) {
0x0005bcbe movhi r4, r2 | r4 = r2;
| }
0x0005bcc0 add r1, r4 | r1 += r4;
0x0005bcc2 b 0x5bc6c | goto label_3;
| label_27:
0x0005bcc4 ldrb.w r2, [sb, 2] | r2 = *((sb + 2));
0x0005bcc8 ldr r4, [sp, 8] | r4 = var_8h;
0x0005bcca cmp r2, 0x2d |
| if (r2 != 0x2d) {
0x0005bccc bne 0x5bdb8 | goto label_28;
| }
0x0005bcce ldr.w lr, [pc, 0x28c] |
0x0005bcd2 ldrb.w r2, [sb, 3] | r2 = *((sb + 3));
0x0005bcd6 add lr, pc | lr = 0xb7c38;
0x0005bcd8 add.w r1, lr, r2 | r1 = lr + r2;
0x0005bcdc ldrb.w r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x0005bce0 lsls r1, r1, 0x1d | r1 <<= 0x1d;
| if (r1 < r1) {
0x0005bce2 bmi.w 0x5be7e | goto label_29;
| }
| label_5:
0x0005bce6 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0005bce8 str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x0005bcec b 0x5bd76 | goto label_10;
| label_21:
0x0005bcee mov r5, fp | r5 = fp;
0x0005bcf0 ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x0005bcf4 mov r6, sl | r6 = sl;
0x0005bcf6 mov sb, r2 | sb = r2;
0x0005bcf8 ldr.w sl, [sp, 0x18] | sl = var_18h;
0x0005bcfc cmp.w fp, 0 |
| if (fp != 0) {
0x0005bd00 beq 0x5bd76 |
0x0005bd02 ldr r2, [sp, 4] | r2 = var_4h;
0x0005bd04 cmp r2, 0 |
| if (r2 == 0) {
0x0005bd06 beq 0x5bde6 | goto label_30;
| }
0x0005bd08 ldrd r8, r2, [sl] | __asm ("ldrd r8, r2, [sl]");
0x0005bd0c cmp r8, r2 |
| if (r8 >= r2) {
0x0005bd0e bhs 0x5bde6 | goto label_30;
| }
0x0005bd10 add.w r2, r8, r8, lsl 1 | r2 = r8 + (r8 << 1);
0x0005bd14 ldr r0, [sp, 4] | r0 = var_4h;
0x0005bd16 movs r1, 7 | r1 = 7;
0x0005bd18 lsls r2, r2, 2 | r2 <<= 2;
0x0005bd1a strh r1, [r0, r2] | *((r0 + r2)) = r1;
0x0005bd1c add r2, r0 | r2 += r0;
0x0005bd1e str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0005bd20 movs r3, 2 | r3 = 2;
0x0005bd22 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0005bd24 add.w r3, r8, 1 | r3 = r8 + 1;
0x0005bd28 str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_7:
0x0005bd2c ldrd r7, r3, [sl] | __asm ("ldrd r7, r3, [sl]");
0x0005bd30 cmp r7, r3 |
| if (r7 >= r3) {
0x0005bd32 bhs 0x5bdfe | goto label_31;
| }
0x0005bd34 add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x0005bd38 ldr r1, [sp, 4] | r1 = var_4h;
0x0005bd3a movs r2, 5 | r2 = 5;
0x0005bd3c lsls r3, r3, 2 | r3 <<= 2;
0x0005bd3e strh r2, [r1, r3] | *((r1 + r3)) = r2;
0x0005bd40 add r3, r1 | r3 += r1;
0x0005bd42 ldr r2, [sp, 8] | r2 = var_8h;
0x0005bd44 str.w sb, [r3, 4] | __asm ("str.w sb, [r3, 4]");
0x0005bd48 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0005bd4a adds r3, r7, 1 | r3 = r7 + 1;
0x0005bd4c str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_8:
0x0005bd50 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0005bd52 mov r2, fp | r2 = fp;
0x0005bd54 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0005bd56 mov r0, sl | r0 = sl;
0x0005bd58 add r1, r5 | r1 += r5;
0x0005bd5a bl 0x5bf60 | fcn_0005bf60 (r0, r1, r2, r3);
0x0005bd5e ldrb.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x0005bd62 cmp r0, 0 |
0x0005bd64 mov r5, r0 | r5 = r0;
0x0005bd66 clz r3, r3 | r3 &= r3;
0x0005bd6a lsr.w r3, r3, 5 | r3 >>= 5;
0x0005bd6e it eq |
| if (r0 != 0) {
0x0005bd70 moveq r3, 0 | r3 = 0;
| }
0x0005bd72 cmp r3, 0 |
| if (r3 != 0) {
0x0005bd74 bne 0x5be4e | goto label_32;
| }
| }
| label_10:
0x0005bd76 movs r5, 0 | r5 = 0;
0x0005bd78 mov r0, r5 | r0 = r5;
0x0005bd7a add sp, 0x24 |
0x0005bd7c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x0005bd80 ldrb.w r3, [sb, 2] | r3 = *((sb + 2));
0x0005bd84 add.w r0, sb, 2 | r0 = sb + 2;
0x0005bd88 str r0, [sp, 8] | var_8h = r0;
0x0005bd8a cmp r3, 0 |
0x0005bd8c it ne |
| if (r3 != 0) {
0x0005bd8e cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
0x0005bd90 ite ne |
| if (r3 == 0) {
0x0005bd92 movne r2, 1 | r2 = 1;
| }
| if (r3 != 0) {
0x0005bd94 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0) {
0x0005bd96 beq.w 0x5beae | goto label_33;
| }
0x0005bd9a movs r1, 1 | r1 = 1;
| do {
0x0005bd9c ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0005bda0 mov r7, r1 | r7 = r1;
0x0005bda2 adds r1, 1 | r1++;
0x0005bda4 cmp r3, 0 |
0x0005bda6 it ne |
| if (r3 != 0) {
0x0005bda8 cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
0x0005bdaa bne 0x5bd9c |
| } while (r3 != 0);
| label_13:
0x0005bdac cmp r3, 0 |
| if (r3 == 0) {
0x0005bdae beq.w 0x5beba | goto label_19;
| }
0x0005bdb2 add.w fp, r1, 1 |
0x0005bdb6 b 0x5bb3a | goto label_4;
| label_28:
0x0005bdb8 movs r1, 2 | r1 = 2;
| label_12:
0x0005bdba cmp r2, 0x5d |
| if (r2 != 0x5d) {
0x0005bdbc bne 0x5bce6 | goto label_5;
| }
| label_11:
0x0005bdbe adds r1, 1 | r1++;
0x0005bdc0 mov r7, r8 | r7 = r8;
0x0005bdc2 add sb, r1 | sb += r1;
0x0005bdc4 movs r2, 1 | r2 = 1;
| label_9:
0x0005bdc6 cmp r2, r7 |
| if (r2 > r7) {
0x0005bdc8 bhi 0x5be0e | goto label_34;
| }
0x0005bdca add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x0005bdce add.w r1, r5, r1, lsl 2 | r1 = r5 + (r1 << 2);
0x0005bdd2 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x0005bdd4 and r0, r0, 4 | r0 &= 4;
| if (r3 != 0) {
0x0005bdd8 cbnz r3, 0x5be2e | goto label_35;
| }
| if (r0 != 0) {
0x0005bdda cbnz r0, 0x5be32 | goto label_36;
| }
0x0005bddc tst.w ip, 0x20 |
| if ((ip & 0x20) != 0) {
0x0005bde0 bne 0x5be14 | goto label_37;
| }
0x0005bde2 add r4, r2 | r4 += r2;
0x0005bde4 b 0x5bbd4 | goto label_6;
| label_30:
0x0005bde6 movs r3, 0 | r3 = 0;
0x0005bde8 movs r2, 2 | r2 = 2;
0x0005bdea movs r1, 7 | r1 = 7;
0x0005bdec mov r0, sl | r0 = sl;
0x0005bdee bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005bdf2 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0005bdf6 mov r8, r0 | r8 = r0;
0x0005bdf8 str r3, [sp, 4] | var_4h = r3;
0x0005bdfa cmp r3, 0 |
| if (r3 != 0) {
0x0005bdfc bne 0x5bd2c | goto label_7;
| }
| label_31:
0x0005bdfe ldr r3, [sp, 8] | r3 = var_8h;
0x0005be00 mov r2, sb | r2 = sb;
0x0005be02 movs r1, 5 | r1 = 5;
0x0005be04 mov r0, sl | r0 = sl;
0x0005be06 bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005be08 stc2l p6, c4, [r5], 0x1c | __asm ("stc2l p6, c4, [r5], 0x1c");
0x0005be0c b 0x5bd50 | goto label_8;
| label_34:
0x0005be0e ands ip, ip, 0x20 |
| if (ip == ip) {
0x0005be12 beq 0x5bec2 | goto label_38;
| }
| label_37:
0x0005be14 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0005be16 movs r2, 1 | r2 = 1;
0x0005be18 add r4, r1 | r4 += r1;
0x0005be1a ldr r1, [sp, 4] | r1 = var_4h;
0x0005be1c lsl.w r6, r4, r2 | r6 = r4 << r2;
0x0005be20 adds r5, r6, r4 | r5 = r6 + r4;
0x0005be22 add.w r5, r1, r5, lsl 2 | r5 = r1 + (r5 << 2);
0x0005be26 ldr r7, [r5, 4] | r7 = *((r5 + 4));
0x0005be28 ldrb.w ip, [r5, 1] | ip = *((r5 + 1));
0x0005be2c b 0x5bdc6 | goto label_9;
| if (r0 == 0) {
| label_35:
0x0005be2e cbnz r0, 0x5be32 |
0x0005be30 subs r3, 1 | r3--;
| }
| label_36:
0x0005be32 ldrb r0, [r1] | r0 = *(r1);
0x0005be34 cmp r0, 5 |
0x0005be36 itet hi |
| if (r0 <= 5) {
0x0005be38 ldrhi r1, [r1, 4] | r1 = *((r1 + 4));
| }
| if (r0 > 5) {
0x0005be3a movls r1, 1 | r1 = 1;
| }
| if (r0 <= 5) {
0x0005be3c addhi r1, 1 | r1++;
| }
0x0005be3e add r2, r1 | r2 += r1;
0x0005be40 b 0x5bdc6 | goto label_9;
| label_25:
0x0005be42 ldrb r2, [r5] | r2 = *(r5);
0x0005be44 cmp r2, 6 |
| if (r2 != 6) {
0x0005be46 bne 0x5bd76 | goto label_10;
| }
0x0005be48 ldr.w r8, [r5, 4] | r8 = *((r5 + 4));
0x0005be4c b 0x5bdbe | goto label_11;
| label_32:
0x0005be4e ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x0005be52 adds r1, r6, r4 | r1 = r6 + r4;
0x0005be54 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x0005be58 sub.w r4, r8, r4 | r4 = r8 - r4;
0x0005be5c mov r0, r5 | r0 = r5;
0x0005be5e add.w r1, r2, r1, lsl 2 | r1 = r2 + (r1 << 2);
0x0005be62 add.w r2, r2, r7, lsl 2 | r2 += (r7 << 2);
0x0005be66 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x0005be68 str r4, [r1, 8] | *((r1 + 8)) = r4;
0x0005be6a orr r3, r3, 0x20 | r3 |= 0x20;
0x0005be6e strb r3, [r1, 1] | *((r1 + 1)) = r3;
0x0005be70 ldrb r3, [r2, 1] | r3 = *((r2 + 1));
0x0005be72 orr r3, r3, 1 | r3 |= 1;
0x0005be76 strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x0005be78 add sp, 0x24 |
0x0005be7a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x0005be7e add.w r1, sb, 3 | r1 = sb + 3;
| do {
0x0005be82 add.w r7, r7, r7, lsl 2 | r7 += (r7 << 2);
0x0005be86 mov sl, r1 | sl = r1;
0x0005be88 add.w r7, r2, r7, lsl 1 | r7 = r2 + (r7 << 1);
0x0005be8c ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0005be90 subs r7, 0x30 | r7 -= 0x30;
0x0005be92 add.w r0, lr, r2 | r0 = lr + r2;
0x0005be96 ldrb.w r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x0005be9a lsls r0, r0, 0x1d | r0 <<= 0x1d;
0x0005be9c bmi 0x5be82 |
| } while (r0 < r0);
0x0005be9e cmp r3, r7 |
| if (r3 <= r7) {
0x0005bea0 blo.w 0x5bd76 | goto label_10;
| }
0x0005bea4 rsb.w r1, sb, 1 | r1 = 1 - sb;
0x0005bea8 subs r3, r3, r7 | r3 -= r7;
0x0005beaa add r1, sl | r1 += sl;
0x0005beac b 0x5bdba | goto label_12;
| label_33:
0x0005beae mov r7, r2 | r7 = r2;
0x0005beb0 movs r1, 1 | r1 = 1;
0x0005beb2 b 0x5bdac | goto label_13;
| label_24:
0x0005beb4 mov r3, r2 | r3 = r2;
0x0005beb6 movs r1, 1 | r1 = 1;
0x0005beb8 b 0x5bc50 | goto label_14;
| label_19:
0x0005beba ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0005bebc ldr r2, [sp, 0x10] | r2 = var_10h;
0x0005bebe str r2, [r3] | *(r3) = r2;
0x0005bec0 b 0x5bd76 | goto label_10;
| label_38:
0x0005bec2 ldrd sl, fp, [sp, 0x18] | __asm ("ldrd sl, fp, [var_1ch]");
0x0005bec6 clz r3, r3 | r3 &= r3;
0x0005beca lsrs r3, r3, 5 | r3 >>= 5;
0x0005becc mov lr, ip | lr = ip;
0x0005bece cmp.w fp, 0 |
0x0005bed2 it eq |
| if (fp != 0) {
0x0005bed4 moveq r3, 0 | r3 = 0;
| }
0x0005bed6 cmp r3, 0 |
| if (r3 == 0) {
0x0005bed8 beq.w 0x5bd76 | goto label_10;
| }
0x0005bedc ldr r3, [sp, 4] | r3 = var_4h;
| if (r3 == 0) {
0x0005bede cbz r3, 0x5bf42 | goto label_39;
| }
0x0005bee0 ldrd r7, r3, [sl] | __asm ("ldrd r7, r3, [sl]");
0x0005bee4 cmp r7, r3 |
| if (r7 >= r3) {
0x0005bee6 bhs 0x5bf42 | goto label_39;
| }
0x0005bee8 add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x0005beec ldr r1, [sp, 4] | r1 = var_4h;
0x0005beee movs r2, 6 | r2 = 6;
0x0005bef0 lsls r3, r3, 2 | r3 <<= 2;
0x0005bef2 strh r2, [r1, r3] | *((r1 + r3)) = r2;
0x0005bef4 add r3, r1 | r3 += r1;
0x0005bef6 movs r2, 1 | r2 = 1;
0x0005bef8 str.w ip, [r3, 8] | __asm ("str.w ip, [r3, 8]");
0x0005befc str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0005befe adds r3, r7, r2 | r3 = r7 + r2;
0x0005bf00 str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_16:
0x0005bf04 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0005bf06 mov r2, fp | r2 = fp;
0x0005bf08 mov r1, sb | r1 = sb;
0x0005bf0a mov r0, sl | r0 = sl;
0x0005bf0c bl 0x5bf60 | fcn_0005bf60 (r0, r1, r2, r3);
0x0005bf10 ldrb.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x0005bf14 cmp r0, 0 |
0x0005bf16 mov r5, r0 | r5 = r0;
0x0005bf18 clz r3, r3 | r3 &= r3;
0x0005bf1c lsr.w r3, r3, 5 | r3 >>= 5;
0x0005bf20 it eq |
| if (r0 != 0) {
0x0005bf22 moveq r3, 0 | r3 = 0;
| }
0x0005bf24 cmp r3, 0 |
| if (r3 == 0) {
0x0005bf26 beq.w 0x5bd76 | goto label_10;
| }
0x0005bf2a ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0005bf2e add r6, r4 | r6 += r4;
0x0005bf30 subs r7, r7, r4 | r7 -= r4;
0x0005bf32 add.w r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x0005bf36 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0005bf38 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x0005bf3a orr r2, r2, 0x20 | r2 |= 0x20;
0x0005bf3e strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0005bf40 b 0x5bbe8 | goto label_15;
| label_39:
0x0005bf42 movs r3, 0 | r3 = 0;
0x0005bf44 movs r2, 1 | r2 = 1;
0x0005bf46 movs r1, 6 | r1 = 6;
0x0005bf48 mov r0, sl | r0 = sl;
0x0005bf4a bl 0x5b7d4 | r0 = fcn_0005b7d4 (r0, r1, r2, r3);
0x0005bf4e mov r7, r0 | r7 = r0;
0x0005bf50 b 0x5bf04 | goto label_16;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x5c04c */
| #include <stdint.h>
|
; (fcn) fcn.0005c04c () | void fcn_0005c04c (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0005c04c push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x0005c050 mov r6, r0 | r6 = r0;
0x0005c052 ldr r5, [r0, 0xc] | r5 = *((r0 + 0xc));
0x0005c054 mov r7, r1 | r7 = r1;
0x0005c056 ldr.w r3, [pc, 0x56c] |
0x0005c05a ldrb r4, [r5, r1] | r4 = *((r5 + r1));
0x0005c05c adds r0, r5, r1 | r0 = r5 + r1;
0x0005c05e add r3, pc | r3 = 0xb8628;
0x0005c060 adds r2, r3, r4 | r2 = r3 + r4;
0x0005c062 ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
| if (r2 == 0) {
0x0005c066 cbz r2, 0x5c082 | goto label_14;
| }
0x0005c068 adds r2, r1, 1 | r2 = r1 + 1;
0x0005c06a add.w ip, r5, r2 |
| do {
0x0005c06e mov r0, ip | r0 = ip;
0x0005c070 ldrb r4, [ip], 1 | r4 = *(ip);
| ip++;
0x0005c074 mov r7, r2 | r7 = r2;
0x0005c076 adds r2, 1 | r2++;
0x0005c078 adds r1, r3, r4 | r1 = r3 + r4;
0x0005c07a ldrb.w r1, [r1, 0x820] | r1 = *((r1 + 0x820));
0x0005c07e cmp r1, 0 |
0x0005c080 bne 0x5c06e |
| } while (r1 != 0);
| label_14:
0x0005c082 cmp r4, 0x7b |
| if (r4 == 0x7b) {
0x0005c084 beq 0x5c158 | goto label_15;
| }
0x0005c086 cmp r4, 0x5b |
| if (r4 == 0x5b) {
0x0005c088 beq.w 0x5c36c | goto label_16;
| }
0x0005c08c cmp r4, 0x22 |
| if (r4 != 0x22) {
0x0005c08e beq 0x5c0d4 |
0x0005c090 cmp r4, 0x6e |
| if (r4 == 0x6e) {
0x0005c092 beq.w 0x5c438 | goto label_17;
| }
0x0005c096 cmp r4, 0x74 |
| if (r4 == 0x74) {
0x0005c098 beq.w 0x5c278 | goto label_18;
| }
0x0005c09c cmp r4, 0x66 |
| if (r4 != 0x66) {
0x0005c09e bne.w 0x5c2dc | goto label_19;
| }
0x0005c0a2 ldr.w r1, [pc, 0x524] |
0x0005c0a6 movs r2, 5 | r2 = 5;
0x0005c0a8 add r1, pc | r1 = 0xb8676;
0x0005c0aa blx 0x61c0 | r0 = fcn_000061c0 ();
| if (r0 == 0) {
0x0005c0ae cbnz r0, 0x5c0c8 |
0x0005c0b0 ldr.w r3, [pc, 0x518] |
0x0005c0b4 adds r7, 5 | r7 += 5;
0x0005c0b6 ldrb r2, [r5, r7] | r2 = *((r5 + r7));
0x0005c0b8 add r3, pc | r3 = 0xb8688;
0x0005c0ba add r3, r2 | r3 += r2;
0x0005c0bc ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0005c0c0 tst.w r3, 6 |
| if ((r3 & 6) == 0) {
0x0005c0c4 beq.w 0x5c542 | goto label_20;
| }
| }
| label_3:
0x0005c0c8 subs r4, 0 |
0x0005c0ca it ne |
| if (r4 == 0) {
0x0005c0cc movne r4, 1 | r4 = 1;
| }
0x0005c0ce rsbs r0, r4, 0 | r0 = r4 - ;
| label_4:
0x0005c0d0 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
0x0005c0d4 adds r2, r7, 1 | r2 = r7 + 1;
0x0005c0d6 ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x0005c0d8 cmp r3, 0x1f |
| if (r3 < 0x1f) {
0x0005c0da bls 0x5c12a | goto label_2;
| }
0x0005c0dc movw r1, 0x1011 |
0x0005c0e0 mov.w r8, 0 | r8 = 0;
0x0005c0e4 movt r1, 5 | r1 = 0x51011;
0x0005c0e8 mov.w ip, 1 |
0x0005c0ec b 0x5c0fc |
| while (r3 != 0x5c) {
0x0005c0ee cmp r3, 0x22 |
| if (r3 == 0x22) {
0x0005c0f0 beq.w 0x5c4ca | goto label_21;
| }
0x0005c0f4 mov r2, r4 | r2 = r4;
| label_1:
0x0005c0f6 ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x0005c0f8 cmp r3, 0x1f |
| if (r3 < 0x1f) {
0x0005c0fa bls 0x5c12a | goto label_2;
| }
0x0005c0fc cmp r3, 0x5c |
0x0005c0fe add.w r4, r2, 1 | r4 = r2 + 1;
0x0005c102 bne 0x5c0ee |
| }
0x0005c104 ldrb r3, [r5, r4] | r3 = *((r5 + r4));
0x0005c106 add r4, r5 | r4 += r5;
0x0005c108 cmp r3, 0x5c |
0x0005c10a it ne |
| if (r3 != 0x5c) {
0x0005c10c cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
| if (r3 == 0x5c) {
0x0005c10e beq 0x5c150 | goto label_22;
| }
0x0005c110 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x0005c112 beq 0x5c150 | goto label_22;
| }
0x0005c114 subs r3, 0x62 | r3 -= 0x62;
0x0005c116 uxtb r3, r3 | r3 = (int8_t) r3;
0x0005c118 cmp r3, 0x13 |
| if (r3 > 0x13) {
0x0005c11a bhi 0x5c12a | goto label_2;
| }
0x0005c11c lsl.w lr, ip, r3 | lr = ip << r3;
0x0005c120 tst.w lr, r1 |
| if ((lr & r1) != 0) {
0x0005c124 bne 0x5c150 | goto label_22;
| }
0x0005c126 cmp r3, 0x13 |
0x0005c128 beq 0x5c132 |
| while (r3 >= r3) {
| label_2:
0x0005c12a mov.w r0, -1 | r0 = -1;
0x0005c12e pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
0x0005c132 ldr.w r8, [pc, 0x49c] |
0x0005c136 add.w lr, r5, 5 | lr = r5 + 5;
0x0005c13a add lr, r2 | lr += r2;
0x0005c13c add r8, pc | r8 = 0xb8712;
| label_0:
0x0005c13e ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0005c142 add r3, r8 | r3 += r8;
0x0005c144 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0005c146 adds r0, 0x40 | r0 += 0x40;
0x0005c148 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0005c14a bpl 0x5c12a |
| }
0x0005c14c cmp lr, r4 |
| if (lr != r4) {
0x0005c14e bne 0x5c13e | goto label_0;
| }
| label_22:
0x0005c150 adds r2, 2 | r2 += 2;
0x0005c152 mov.w r8, 2 | r8 = 2;
0x0005c156 b 0x5c0f6 | goto label_1;
| label_15:
0x0005c158 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0005c15a cmp r2, 0 |
| if (r2 == 0) {
0x0005c15c beq.w 0x5c2c8 | goto label_23;
| }
0x0005c160 ldrd r3, r1, [r6] | __asm ("ldrd r3, r1, [r6]");
0x0005c164 cmp r3, r1 |
| if (r3 >= r1) {
0x0005c166 bhs.w 0x5c2c8 | goto label_23;
| }
0x0005c16a add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0005c16e mov r8, r3 | r8 = r3;
0x0005c170 movs r4, 0 | r4 = 0;
0x0005c172 lsls r1, r1, 2 | r1 <<= 2;
0x0005c174 adds r3, 1 | r3++;
0x0005c176 mov.w ip, 7 |
0x0005c17a adds r0, r2, r1 | r0 = r2 + r1;
0x0005c17c strh.w ip, [r2, r1] | *((r2 + r1)) = ip;
0x0005c180 strd r4, r4, [r0, 4] | __asm ("strd r4, r4, [r0, 4]");
0x0005c184 str r3, [r6] | *(r6) = r3;
| label_5:
0x0005c186 cmp.w r8, 0 |
| if (r8 < 0) {
0x0005c18a blt 0x5c12a | goto label_2;
| }
0x0005c18c adds r4, r7, 1 | r4 = r7 + 1;
0x0005c18e ldr.w r7, [pc, 0x444] |
0x0005c192 ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
0x0005c194 add r7, pc | r7 = 0xb876e;
| label_6:
0x0005c196 ldrb r3, [r5, r4] | r3 = *((r5 + r4));
0x0005c198 add r3, r7 | r3 += r7;
0x0005c19a ldrb.w r3, [r3, 0x820] | r3 = *((r3 + 0x820));
0x0005c19e cmp r3, 0 |
| if (r3 != 0) {
0x0005c1a0 bne.w 0x5c2d8 | goto label_24;
| }
0x0005c1a4 adds r1, 1 | r1++;
0x0005c1a6 uxth r1, r1 | r1 = (int16_t) r1;
0x0005c1a8 cmp.w r1, 0x7d0 |
0x0005c1ac strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r1 > 0x7d0) {
0x0005c1ae bhi 0x5c12a | goto label_2;
| }
0x0005c1b0 mov r1, r4 | r1 = r4;
0x0005c1b2 mov r0, r6 | r0 = r6;
0x0005c1b4 bl 0x5c04c | r0 = fcn_0005c04c (r0, r1);
0x0005c1b8 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 < r0) {
0x0005c1ba blt.w 0x5c57e | goto label_25;
| }
0x0005c1be ldrb r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x0005c1c0 cmp r2, 0 |
| if (r2 != 0) {
0x0005c1c2 bne 0x5c12a | goto label_2;
| }
0x0005c1c4 ldr r2, [r6] | r2 = *(r6);
0x0005c1c6 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0005c1c8 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0005c1cc lsls r2, r2, 2 | r2 <<= 2;
0x0005c1ce subs r2, 0xc | r2 -= 0xc;
0x0005c1d0 ldrb r0, [r1, r2] | r0 = *((r1 + r2));
0x0005c1d2 add r1, r2 | r1 += r2;
0x0005c1d4 cmp r0, 5 |
| if (r0 != 5) {
0x0005c1d6 bne 0x5c12a | goto label_2;
| }
0x0005c1d8 ldrb r2, [r1, 1] | r2 = *((r1 + 1));
0x0005c1da orr r2, r2, 0x40 | r2 |= 0x40;
0x0005c1de strb r2, [r1, 1] | *((r1 + 1)) = r2;
0x0005c1e0 mov r1, r3 | r1 = r3;
0x0005c1e2 ldrb r4, [r5, r3] | r4 = *((r5 + r3));
0x0005c1e4 add r3, r5 | r3 += r5;
0x0005c1e6 adds r2, r7, r4 | r2 = r7 + r4;
0x0005c1e8 ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
| if (r2 == 0) {
0x0005c1ec cbz r2, 0x5c208 | goto label_26;
| }
0x0005c1ee ldr r1, [pc, 0x3e8] |
0x0005c1f0 add r1, pc | r1 = 0xb87ce;
| do {
0x0005c1f2 mov r0, r3 | r0 = r3;
0x0005c1f4 ldrb r4, [r3, 1]! | r4 = *((r3 += 1));
0x0005c1f8 adds r2, r1, r4 | r2 = r1 + r4;
0x0005c1fa ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
0x0005c1fe cmp r2, 0 |
0x0005c200 bne 0x5c1f2 |
| } while (r2 != 0);
0x0005c202 rsb.w r1, r5, 1 | r1 = 1 - r5;
0x0005c206 add r1, r0 | r1 += r0;
| label_26:
0x0005c208 cmp r4, 0x3a |
| if (r4 != 0x3a) {
0x0005c20a bne 0x5c12a | goto label_2;
| }
0x0005c20c adds r1, 1 | r1++;
0x0005c20e mov r0, r6 | r0 = r6;
0x0005c210 bl 0x5c04c | fcn_0005c04c (r0, r1);
0x0005c214 ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
0x0005c216 subs r3, r0, 0 | r3 = r0 - 0;
0x0005c218 add.w r1, r1, -1 | r1 += -1;
0x0005c21c uxth r1, r1 | r1 = (int16_t) r1;
0x0005c21e strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r3 < r0) {
0x0005c220 blt 0x5c12a | goto label_2;
| }
0x0005c222 ldr r0, [pc, 0x3b8] |
0x0005c224 mov r4, r3 | r4 = r3;
0x0005c226 ldrb.w ip, [r5, r3] | ip = *((r5 + r3));
0x0005c22a add r3, r5 | r3 += r5;
0x0005c22c add r0, pc | r0 = 0xb880e;
0x0005c22e add.w r2, r0, ip | r2 = r0 + ip;
0x0005c232 ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
| if (r2 == 0) {
0x0005c236 cbz r2, 0x5c250 | goto label_27;
| }
| do {
0x0005c238 mov lr, r3 | lr = r3;
0x0005c23a ldrb ip, [r3, 1]! | ip = *((r3 += 1));
0x0005c23e add.w r2, r0, ip | r2 = r0 + ip;
0x0005c242 ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
0x0005c246 cmp r2, 0 |
0x0005c248 bne 0x5c238 |
| } while (r2 != 0);
0x0005c24a rsb.w r4, r5, 1 | r4 = 1 - r5;
0x0005c24e add r4, lr | r4 += lr;
| label_27:
0x0005c250 cmp.w ip, 0x2c |
| if (ip == 0x2c) {
0x0005c254 beq 0x5c2d8 | goto label_24;
| }
0x0005c256 cmp.w ip, 0x7d |
| if (ip != 0x7d) {
0x0005c25a bne.w 0x5c12a | goto label_2;
| }
0x0005c25e ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0005c260 add.w r1, r8, r8, lsl 1 | r1 = r8 + (r8 << 1);
0x0005c264 ldr r3, [r6] | r3 = *(r6);
0x0005c266 adds r0, r4, 1 | r0 = r4 + 1;
0x0005c268 add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x0005c26c subs r3, 1 | r3--;
0x0005c26e sub.w r3, r3, r8 | r3 -= r8;
0x0005c272 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0005c274 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_18:
0x0005c278 ldr r1, [pc, 0x364] |
0x0005c27a movs r2, 4 | r2 = 4;
0x0005c27c add r1, pc | r1 = 0xb8860;
0x0005c27e blx 0x61c0 | r0 = fcn_000061c0 ();
0x0005c282 cmp r0, 0 |
| if (r0 != 0) {
0x0005c284 bne.w 0x5c0c8 | goto label_3;
| }
0x0005c288 ldr r3, [pc, 0x358] |
0x0005c28a adds r7, 4 | r7 += 4;
0x0005c28c ldrb r2, [r5, r7] | r2 = *((r5 + r7));
0x0005c28e add r3, pc | r3 = 0xb8876;
0x0005c290 add r3, r2 | r3 += r2;
0x0005c292 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0005c294 adds r0, 0x40 | r0 += 0x40;
0x0005c296 ands r3, r3, 6 | r3 &= 6;
| if (r3 != r3) {
0x0005c29a bne.w 0x5c0c8 | goto label_3;
| }
0x0005c29e ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0005c2a0 cmp r1, 0 |
| if (r1 == 0) {
0x0005c2a2 beq.w 0x5c5ac | goto label_28;
| }
0x0005c2a6 ldrd r2, r0, [r6] | __asm ("ldrd r2, r0, [r6]");
0x0005c2aa cmp r2, r0 |
| if (r2 >= r0) {
0x0005c2ac bhs.w 0x5c5ac | goto label_28;
| }
0x0005c2b0 add.w r0, r2, r2, lsl 1 | r0 = r2 + (r2 << 1);
0x0005c2b4 movs r4, 1 | r4 = 1;
0x0005c2b6 adds r2, 1 | r2++;
0x0005c2b8 lsls r0, r0, 2 | r0 <<= 2;
0x0005c2ba strh r4, [r1, r0] | *((r1 + r0)) = r4;
0x0005c2bc add r1, r0 | r1 += r0;
0x0005c2be strd r3, r3, [r1, 4] | __asm ("strd r3, r3, [r1, 4]");
0x0005c2c2 mov r0, r7 | r0 = r7;
0x0005c2c4 str r2, [r6] | *(r6) = r2;
0x0005c2c6 b 0x5c0d0 | goto label_4;
| label_23:
0x0005c2c8 movs r3, 0 | r3 = 0;
0x0005c2ca movs r1, 7 | r1 = 7;
0x0005c2cc mov r2, r3 | r2 = r3;
0x0005c2ce mov r0, r6 | r0 = r6;
0x0005c2d0 bl 0x5b7d4 | r0 = fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c2d4 mov r8, r0 | r8 = r0;
0x0005c2d6 b 0x5c186 | goto label_5;
| label_24:
0x0005c2d8 adds r4, 1 | r4++;
0x0005c2da b 0x5c196 | goto label_6;
| label_19:
0x0005c2dc sub.w r3, r4, 0x30 | r3 = r4 - 0x30;
0x0005c2e0 cmp r4, 0x2d |
0x0005c2e2 it ne |
| if (r4 != 0x2d) {
0x0005c2e4 cmpne r3, 9 | __asm ("cmpne r3, 9");
| }
| if (r4 > 0x2d) {
0x0005c2e6 bhi.w 0x5c50a | goto label_29;
| }
0x0005c2ea cmp r4, 0x30 |
| if (r4 <= 0x30) {
0x0005c2ec bhi 0x5c2fe |
0x0005c2ee cmp r4, 0x2d |
0x0005c2f0 ite eq |
| if (r4 != 0x2d) {
0x0005c2f2 addeq r3, r7, 1 | r3 = r7 + 1;
| }
| if (r4 == 0x2d) {
0x0005c2f4 movne r3, r7 | r3 = r7;
| }
0x0005c2f6 ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x0005c2f8 cmp r2, 0x30 |
| if (r2 == 0x30) {
0x0005c2fa beq.w 0x5c51c | goto label_30;
| }
| }
| label_11:
0x0005c2fe movs r3, 0 | r3 = 0;
0x0005c300 adds r4, r7, 1 | r4 = r7 + 1;
0x0005c302 mov ip, r3 |
0x0005c304 b 0x5c340 | goto label_31;
| label_7:
0x0005c306 and r2, r2, 0xdf | r2 &= 0xdf;
0x0005c30a cmp r2, 0x45 |
| if (r2 != 0x45) {
0x0005c30c bne.w 0x5c496 | goto label_32;
| }
0x0005c310 cmp r1, 0x2f |
0x0005c312 it ls |
| if (r1 > 0x2f) {
0x0005c314 orrls r3, r3, 1 | r3 |= 1;
| }
0x0005c318 cmp r3, 0 |
| if (r3 != 0) {
0x0005c31a bne.w 0x5c12a | goto label_2;
| }
0x0005c31e adds r2, r4, 1 | r2 = r4 + 1;
0x0005c320 ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x0005c322 sub.w r1, r3, 0x2b | r1 = r3 - 0x2b;
0x0005c326 tst.w r1, 0xfd |
0x0005c32a itt eq |
| if ((r1 & 0xfd) != 0) {
0x0005c32c ldrbeq r3, [lr, 2] | r3 = *((lr + 2));
| }
| if ((r1 & 0xfd) == 0) {
0x0005c330 mov r4, r2 | r4 = r2;
| }
0x0005c332 subs r3, 0x30 | r3 -= 0x30;
0x0005c334 cmp r3, 9 |
| if (r3 > 9) {
0x0005c336 bhi.w 0x5c12a | goto label_2;
| }
0x0005c33a movs r3, 1 | r3 = 1;
0x0005c33c mov ip, r3 |
| do {
| label_8:
0x0005c33e adds r4, 1 | r4++;
| label_31:
0x0005c340 ldrb r2, [r5, r4] | r2 = *((r5 + r4));
0x0005c342 sub.w r1, r2, 0x30 | r1 = r2 - 0x30;
0x0005c346 cmp r1, 9 |
0x0005c348 bls 0x5c33e |
| } while (r1 < 9);
0x0005c34a cmp r2, 0x2e |
0x0005c34c add.w lr, r5, r4 | lr = r5 + r4;
0x0005c350 ldrb r1, [lr, -0x1] | r1 = *((lr - 0x1));
| if (r2 != 0x2e) {
0x0005c354 bne 0x5c306 | goto label_7;
| }
0x0005c356 cmp r1, 0x2d |
0x0005c358 ite ne |
| if (r1 == 0x2d) {
0x0005c35a movne r2, ip | r2 = ip;
| }
| if (r1 != 0x2d) {
0x0005c35c orreq r2, ip, 1 | r2 = ip | 1;
| }
0x0005c360 cmp r2, 0 |
| if (r2 != 0) {
0x0005c362 bne.w 0x5c12a | goto label_2;
| }
0x0005c366 mov.w ip, 1 |
0x0005c36a b 0x5c33e | goto label_8;
| label_16:
0x0005c36c ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0005c36e cmp r2, 0 |
| if (r2 == 0) {
0x0005c370 beq.w 0x5c486 | goto label_33;
| }
0x0005c374 ldrd r3, r1, [r6] | __asm ("ldrd r3, r1, [r6]");
0x0005c378 cmp r3, r1 |
| if (r3 >= r1) {
0x0005c37a bhs.w 0x5c486 | goto label_33;
| }
0x0005c37e add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0005c382 mov r8, r3 | r8 = r3;
0x0005c384 movs r4, 0 | r4 = 0;
0x0005c386 lsls r1, r1, 2 | r1 <<= 2;
0x0005c388 adds r3, 1 | r3++;
0x0005c38a mov.w ip, 6 |
0x0005c38e adds r0, r2, r1 | r0 = r2 + r1;
0x0005c390 strh.w ip, [r2, r1] | *((r2 + r1)) = ip;
0x0005c394 strd r4, r4, [r0, 4] | __asm ("strd r4, r4, [r0, 4]");
0x0005c398 str r3, [r6] | *(r6) = r3;
| label_10:
0x0005c39a cmp.w r8, 0 |
| if (r8 < 0) {
0x0005c39e blt.w 0x5c12a | goto label_2;
| }
0x0005c3a2 add.w r3, r8, r8, lsl 1 | r3 = r8 + (r8 << 1);
0x0005c3a6 adds r4, r7, 1 | r4 = r7 + 1;
0x0005c3a8 ldr.w sb, [pc, 0x23c] |
0x0005c3ac movs r2, 0 | r2 = 0;
0x0005c3ae lsls r7, r3, 2 | r7 = r3 << 2;
0x0005c3b0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0005c3b2 add sb, pc | sb = 0xb899e;
0x0005c3b4 add r3, r7 | r3 += r7;
0x0005c3b6 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0005c3b8 ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
| label_9:
0x0005c3ba ldrb r3, [r5, r4] | r3 = *((r5 + r4));
0x0005c3bc add r3, sb | r3 += sb;
0x0005c3be ldrb.w r3, [r3, 0x820] | r3 = *((r3 + 0x820));
0x0005c3c2 cmp r3, 0 |
| if (r3 != 0) {
0x0005c3c4 bne 0x5c434 | goto label_34;
| }
0x0005c3c6 adds r1, 1 | r1++;
0x0005c3c8 uxth r1, r1 | r1 = (int16_t) r1;
0x0005c3ca cmp.w r1, 0x7d0 |
0x0005c3ce strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r1 > 0x7d0) {
0x0005c3d0 bhi.w 0x5c12a | goto label_2;
| }
0x0005c3d4 mov r1, r4 | r1 = r4;
0x0005c3d6 mov r0, r6 | r0 = r6;
0x0005c3d8 bl 0x5c04c | fcn_0005c04c (r0, r1);
0x0005c3dc ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
0x0005c3de subs r3, r0, 0 | r3 = r0 - 0;
0x0005c3e0 add.w r1, r1, -1 | r1 += -1;
0x0005c3e4 uxth r1, r1 | r1 = (int16_t) r1;
0x0005c3e6 strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r3 < r0) {
0x0005c3e8 blt.w 0x5c568 | goto label_35;
| }
0x0005c3ec ldrb r0, [r5, r3] | r0 = *((r5 + r3));
0x0005c3ee mov r4, r3 | r4 = r3;
0x0005c3f0 add r3, r5 | r3 += r5;
0x0005c3f2 add.w r2, sb, r0 | r2 = sb + r0;
0x0005c3f6 ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
| if (r2 == 0) {
0x0005c3fa cbz r2, 0x5c416 | goto label_36;
| }
0x0005c3fc ldr r4, [pc, 0x1ec] |
0x0005c3fe add r4, pc | r4 = 0xb89ee;
| do {
0x0005c400 mov ip, r3 |
0x0005c402 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x0005c406 adds r2, r4, r0 | r2 = r4 + r0;
0x0005c408 ldrb.w r2, [r2, 0x820] | r2 = *((r2 + 0x820));
0x0005c40c cmp r2, 0 |
0x0005c40e bne 0x5c400 |
| } while (r2 != 0);
0x0005c410 rsb.w r4, r5, 1 | r4 = 1 - r5;
0x0005c414 add r4, ip | r4 += ip;
| label_36:
0x0005c416 cmp r0, 0x2c |
| if (r0 == 0x2c) {
0x0005c418 beq 0x5c434 | goto label_34;
| }
0x0005c41a cmp r0, 0x5d |
| if (r0 != 0x5d) {
0x0005c41c bne.w 0x5c12a | goto label_2;
| }
0x0005c420 ldr r3, [r6] | r3 = *(r6);
0x0005c422 adds r0, r4, 1 | r0 = r4 + 1;
0x0005c424 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0005c426 subs r3, 1 | r3--;
0x0005c428 add r2, r7 | r2 += r7;
0x0005c42a sub.w r3, r3, r8 | r3 -= r8;
0x0005c42e str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0005c430 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_34:
0x0005c434 adds r4, 1 | r4++;
0x0005c436 b 0x5c3ba | goto label_9;
| label_17:
0x0005c438 ldr r1, [pc, 0x1b4] |
0x0005c43a movs r2, 4 | r2 = 4;
0x0005c43c add r1, pc | r1 = 0xb8a30;
0x0005c43e blx 0x61c0 | r0 = fcn_000061c0 ();
0x0005c442 cmp r0, 0 |
| if (r0 != 0) {
0x0005c444 bne.w 0x5c0c8 | goto label_3;
| }
0x0005c448 ldr r3, [pc, 0x1a8] |
0x0005c44a adds r7, 4 | r7 += 4;
0x0005c44c ldrb r2, [r5, r7] | r2 = *((r5 + r7));
0x0005c44e add r3, pc | r3 = 0xb8a46;
0x0005c450 add r3, r2 | r3 += r2;
0x0005c452 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0005c456 ands r3, r3, 6 | r3 &= 6;
| if (r3 != r3) {
0x0005c45a bne.w 0x5c0c8 | goto label_3;
| }
0x0005c45e ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0005c460 cmp r1, 0 |
| if (r1 == 0) {
0x0005c462 beq.w 0x5c59c | goto label_37;
| }
0x0005c464 strh r3, [r3, 4] | *((r3 + 4)) = r3;
0x0005c466 ldrd r2, r0, [r6] | __asm ("ldrd r2, r0, [r6]");
0x0005c46a cmp r2, r0 |
| if (r2 >= r0) {
0x0005c46c bhs.w 0x5c59c | goto label_37;
| }
0x0005c470 add.w r0, r2, r2, lsl 1 | r0 = r2 + (r2 << 1);
0x0005c474 adds r2, 1 | r2++;
0x0005c476 lsls r0, r0, 2 | r0 <<= 2;
0x0005c478 strh r3, [r1, r0] | *((r1 + r0)) = r3;
0x0005c47a add r1, r0 | r1 += r0;
0x0005c47c strd r3, r3, [r1, 4] | __asm ("strd r3, r3, [r1, 4]");
0x0005c480 mov r0, r7 | r0 = r7;
0x0005c482 str r2, [r6] | *(r6) = r2;
0x0005c484 b 0x5c0d0 | goto label_4;
| label_33:
0x0005c486 movs r3, 0 | r3 = 0;
0x0005c488 movs r1, 6 | r1 = 6;
0x0005c48a mov r2, r3 | r2 = r3;
0x0005c48c mov r0, r6 | r0 = r6;
0x0005c48e bl 0x5b7d4 | r0 = fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c492 mov r8, r0 | r8 = r0;
0x0005c494 b 0x5c39a | goto label_10;
| label_32:
0x0005c496 cmp r1, 0x2f |
| if (r1 < 0x2f) {
0x0005c498 bls.w 0x5c12a | goto label_2;
| }
0x0005c49c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0005c49e add.w r1, ip, 3 | r1 = ip + 3;
0x0005c4a2 subs r2, r4, r7 | r2 = r4 - r7;
0x0005c4a4 cmp r3, 0 |
| if (r3 == 0) {
0x0005c4a6 beq 0x5c52a | goto label_38;
| }
0x0005c4a8 ldrd r5, r7, [r6] | __asm ("ldrd r5, r7, [r6]");
0x0005c4ac cmp r5, r7 |
| if (r5 >= r7) {
0x0005c4ae bhs 0x5c52a | goto label_38;
| }
0x0005c4b0 add.w r7, r5, r5, lsl 1 | r7 = r5 + (r5 << 1);
0x0005c4b4 adds r5, 1 | r5++;
0x0005c4b6 lsls r7, r7, 2 | r7 <<= 2;
0x0005c4b8 strb r1, [r3, r7] | *((r3 + r7)) = r1;
0x0005c4ba add r3, r7 | r3 += r7;
0x0005c4bc strd r2, r0, [r3, 4] | __asm ("strd r2, r0, [r3, 4]");
0x0005c4c0 movs r2, 0 | r2 = 0;
0x0005c4c2 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0005c4c4 str r5, [r6] | *(r6) = r5;
| do {
0x0005c4c6 mov r0, r4 | r0 = r4;
0x0005c4c8 b 0x5c0d0 | goto label_4;
| label_21:
0x0005c4ca ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0005c4cc rsb.w r7, r7, 1 | r7 = 1 - r7;
0x0005c4d0 add r2, r7 | r2 += r7;
| if (r3 == 0) {
0x0005c4d2 cbz r3, 0x5c536 | goto label_39;
| }
0x0005c4d4 ldrd r1, r5, [r6] | __asm ("ldrd r1, r5, [r6]");
0x0005c4d8 cmp r1, r5 |
| if (r1 >= r5) {
0x0005c4da bhs 0x5c536 | goto label_39;
| }
0x0005c4dc add.w r5, r1, r1, lsl 1 | r5 = r1 + (r1 << 1);
0x0005c4e0 movs r7, 5 | r7 = 5;
0x0005c4e2 adds r1, 1 | r1++;
0x0005c4e4 lsls r5, r5, 2 | r5 <<= 2;
0x0005c4e6 strh r7, [r3, r5] | *((r3 + r5)) = r7;
0x0005c4e8 add r3, r5 | r3 += r5;
0x0005c4ea strd r2, r0, [r3, 4] | __asm ("strd r2, r0, [r3, 4]");
0x0005c4ee str r1, [r6] | *(r6) = r1;
| label_12:
0x0005c4f0 ldrb r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0005c4f2 cmp r3, 0 |
0x0005c4f4 bne 0x5c4c6 |
| } while (r3 != 0);
0x0005c4f6 ldr r3, [r6] | r3 = *(r6);
0x0005c4f8 mov r0, r4 | r0 = r4;
0x0005c4fa ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0005c4fc add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0005c500 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0005c504 strb r8, [r3, -0xb] | *((r3 - 0xb)) = r8;
0x0005c508 b 0x5c0d0 | goto label_4;
| label_29:
0x0005c50a cmp r4, 0x7d |
| if (r4 == 0x7d) {
0x0005c50c beq 0x5c5bc | goto label_40;
| }
0x0005c50e cmp r4, 0x5d |
0x0005c510 it eq |
| if (r4 == 0x5d) {
0x0005c512 mvneq r0, 2 | r0 = ~2;
| goto label_41;
| }
| if (r4 == 0x5d) {
| label_41:
0x0005c516 beq.w 0x5c0d0 | goto label_4;
| }
0x0005c51a b 0x5c0c8 | goto label_3;
| label_30:
0x0005c51c add r3, r5 | r3 += r5;
0x0005c51e ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0005c520 subs r3, 0x30 | r3 -= 0x30;
0x0005c522 cmp r3, 9 |
| if (r3 > 9) {
0x0005c524 bhi.w 0x5c2fe | goto label_11;
| }
0x0005c528 b 0x5c12a | goto label_2;
| label_38:
0x0005c52a mov r3, r0 | r3 = r0;
0x0005c52c mov r0, r6 | r0 = r6;
0x0005c52e bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c532 mov r0, r4 | r0 = r4;
0x0005c534 b 0x5c0d0 | goto label_4;
| label_39:
0x0005c536 mov r3, r0 | r3 = r0;
0x0005c538 movs r1, 5 | r1 = 5;
0x0005c53a mov r0, r6 | r0 = r6;
0x0005c53c bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c540 b 0x5c4f0 | goto label_12;
| label_20:
0x0005c542 ldr r2, [r6, 8] | r2 = *((r6 + 8));
| if (r2 == 0) {
0x0005c544 cbz r2, 0x5c58c | goto label_42;
| }
0x0005c546 ldrd r3, r1, [r6] | __asm ("ldrd r3, r1, [r6]");
0x0005c54a cmp r3, r1 |
| if (r3 >= r1) {
0x0005c54c bhs 0x5c58c | goto label_42;
| }
0x0005c54e add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0005c552 movs r4, 2 | r4 = 2;
0x0005c554 movs r0, 0 | r0 = 0;
0x0005c556 lsls r1, r1, 2 | r1 <<= 2;
0x0005c558 adds r3, 1 | r3++;
0x0005c55a strh r4, [r2, r1] | *((r2 + r1)) = r4;
0x0005c55c add r2, r1 | r2 += r1;
0x0005c55e strd r0, r0, [r2, 4] | __asm ("strd r0, r0, [r2, 4]");
0x0005c562 mov r0, r7 | r0 = r7;
0x0005c564 str r3, [r6] | *(r6) = r3;
0x0005c566 b 0x5c0d0 | goto label_4;
| label_35:
0x0005c568 adds r3, 3 | r3 += 3;
| if (r3 != 3) {
0x0005c56a bne.w 0x5c12a | goto label_2;
| }
| label_13:
0x0005c56e ldr r3, [r6] | r3 = *(r6);
0x0005c570 add.w r8, r8, 1 | r8++;
0x0005c574 cmp r3, r8 |
| if (r3 != r8) {
0x0005c576 bne.w 0x5c12a | goto label_2;
| }
0x0005c57a adds r0, r4, 1 | r0 = r4 + 1;
0x0005c57c b 0x5c0d0 | goto label_4;
| label_25:
0x0005c57e ldrh r2, [r6, 0x16] | r2 = *((r6 + 0x16));
0x0005c580 adds r3, 2 | r3 += 2;
0x0005c582 add.w r2, r2, -1 | r2 += -1;
0x0005c586 strh r2, [r6, 0x16] | *((r6 + 0x16)) = r2;
| if (r3 == 2) {
0x0005c588 beq 0x5c56e | goto label_13;
| }
0x0005c58a b 0x5c12a | goto label_2;
| label_42:
0x0005c58c movs r3, 0 | r3 = 0;
0x0005c58e movs r1, 2 | r1 = 2;
0x0005c590 mov r2, r3 | r2 = r3;
0x0005c592 mov r0, r6 | r0 = r6;
0x0005c594 bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c598 mov r0, r7 | r0 = r7;
0x0005c59a b 0x5c0d0 | goto label_4;
| label_37:
0x0005c59c movs r3, 0 | r3 = 0;
0x0005c59e mov r0, r6 | r0 = r6;
0x0005c5a0 mov r2, r3 | r2 = r3;
0x0005c5a2 mov r1, r3 | r1 = r3;
0x0005c5a4 bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c5a8 mov r0, r7 | r0 = r7;
0x0005c5aa b 0x5c0d0 | goto label_4;
| label_28:
0x0005c5ac movs r3, 0 | r3 = 0;
0x0005c5ae movs r1, 1 | r1 = 1;
0x0005c5b0 mov r2, r3 | r2 = r3;
0x0005c5b2 mov r0, r6 | r0 = r6;
0x0005c5b4 bl 0x5b7d4 | fcn_0005b7d4 (r0, r1, r2, r3);
0x0005c5b8 mov r0, r7 | r0 = r7;
0x0005c5ba b 0x5c0d0 | goto label_4;
| label_40:
0x0005c5bc mvn r0, 1 | r0 = ~1;
0x0005c5c0 b 0x5c0d0 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x5e8a8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0005e8a8 () | void fcn_0005e8a8 (int16_t arg1, int16_t arg3, arithmetic x) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_18h_2;
| int16_t var_20h;
| arithmetic var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_44h;
| r0 = arg1;
| r2 = arg3;
| r1 = x;
0x0005e8a8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005e8ac mov r5, r0 | r5 = r0;
0x0005e8ae ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x0005e8b0 mov r0, r1 | r0 = r1;
0x0005e8b2 sub sp, 0x4c |
0x0005e8b4 ldr r4, [pc, 0x368] |
0x0005e8b6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005e8b8 ldr.w sl, [r1, 8] | sl = *((r1 + 8));
0x0005e8bc ldr r1, [pc, 0x364] | r1 = *(0x5ec24);
0x0005e8be add r4, pc | r4 = 0xbd4e2;
0x0005e8c0 ldr r3, [r3] | r3 = *(r3);
0x0005e8c2 ldr r1, [r4, r1] |
0x0005e8c4 mov r4, r2 | r4 = r2;
0x0005e8c6 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0005e8c8 ldr r1, [r1] | r1 = *(0xbd4e2);
0x0005e8ca str r1, [sp, 0x44] | var_44h = r1;
0x0005e8cc mov.w r1, 0 | r1 = 0;
0x0005e8d0 str r3, [sp, 0x24] | var_24h = r3;
0x0005e8d2 cmp.w sl, 0 |
| if (sl == 0) {
0x0005e8d6 beq.w 0x5eba2 | goto label_18;
| }
| label_4:
0x0005e8da movs r1, 1 | r1 = 1;
0x0005e8dc mov r0, sl | r0 = sl;
0x0005e8de bl 0x38214 | fcn_00038214 (r0, r1);
0x0005e8e2 ldr.w r3, [sl] | r3 = *(sl);
0x0005e8e6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0005e8ea cbnz r3, 0x5e904 |
0x0005e8ec ldr.w r0, [sl, 0x74] | r0 = *((sl + 0x74));
0x0005e8f0 mov r1, r4 | r1 = r4;
0x0005e8f2 str r3, [sp, 4] | var_4h = r3;
0x0005e8f4 movs r3, 1 | r3 = 1;
0x0005e8f6 str r3, [sp] | *(sp) = r3;
0x0005e8f8 mov.w r2, -1 | r2 = -1;
0x0005e8fc mov.w r3, -1 | r3 = -1;
0x0005e900 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
| }
0x0005e904 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005e906 cmp r3, 0 |
| if (r3 == 0) {
0x0005e908 beq.w 0x5ebae | goto label_19;
| }
0x0005e90c ldr r3, [r3] | r3 = *(r3);
0x0005e90e cmp r3, 0 |
| if (r3 == 0) {
0x0005e910 beq.w 0x5ebae | goto label_19;
| }
0x0005e914 ldr r6, [r5, 0x40] | r6 = *((r5 + 0x40));
0x0005e916 ands r6, r6, 1 | r6 &= 1;
| if (r6 == r6) {
0x0005e91a beq.w 0x5ead0 | goto label_20;
| }
0x0005e91e mov r0, r5 | r0 = r5;
0x0005e920 bl 0x58bc8 | r0 = fcn_00058bc8 (r0, r1);
0x0005e924 cmp r0, 0 |
| if (r0 != 0) {
0x0005e926 bne.w 0x5ec16 | goto label_21;
| }
0x0005e92a ldr r0, [sp, 0x24] | r0 = var_24h;
0x0005e92c add r1, sp, 0x38 | r1 += var_38h;
0x0005e92e ldr r3, [r0] | r3 = *(r0);
0x0005e930 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0005e932 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0005e934 ldr r0, [r5, 0x28] | r0 = *((r5 + 0x28));
0x0005e936 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x0005e938 bl 0x58538 | fcn_00058538 (r0, r1);
0x0005e93c ldr r4, [r5, 0x1c] | r4 = *((r5 + 0x1c));
0x0005e93e mov r8, r0 | r8 = r0;
0x0005e940 ldrd r0, r1, [sp, 0x38] | __asm ("ldrd r0, r1, [var_38h]");
0x0005e944 mov r2, r4 | r2 = r4;
0x0005e946 asr.w sb, r4, 0x1f | sb = r4 >> 0x1f;
0x0005e94a strd r0, r1, [sp, 0x18] | __asm ("strd r0, r1, [var_18h]");
0x0005e94e mov r3, sb | r3 = sb;
0x0005e950 bl 0xc4fc4 | r0 = fcn_000c4fc4 (r0, r1, r2, r3);
0x0005e954 cmp r0, 1 |
0x0005e956 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r0 < 1) {
0x0005e95a blt.w 0x5ea8e | goto label_22;
| }
0x0005e95e ldr r3, [pc, 0x2c8] |
0x0005e960 mov fp, sb |
0x0005e962 str.w sl, [sp, 0x28] | __asm ("str.w sl, [var_28h]");
0x0005e966 add r3, pc | r3 = 0xbd594;
0x0005e968 str r3, [sp, 0x2c] | var_2ch = r3;
0x0005e96a ldr r3, [pc, 0x2c0] |
0x0005e96c add r3, pc | r3 = 0xbd59e;
0x0005e96e str r3, [sp, 0x30] | var_30h = r3;
0x0005e970 ldr r3, [pc, 0x2bc] |
0x0005e972 add r3, pc | r3 = 0xbd5a6;
0x0005e974 str r3, [sp, 0x34] | var_34h = r3;
| label_0:
0x0005e976 ldr r2, [r5, 0x50] | r2 = *((r5 + 0x50));
0x0005e978 mov.w sl, 0 | sl = 0;
0x0005e97c ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x0005e97e ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x0005e980 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0005e982 subs r1, r4, r1 | r1 = r4 - r1;
0x0005e984 adds r3, r1, r0 | r3 = r1 + r0;
0x0005e986 ldr r2, [r2] | r2 = *(r2);
0x0005e988 str r3, [sp, 0x20] | var_20h = r3;
0x0005e98a ldr.w r7, [r2, 0xa4] | r7 = *((r2 + 0xa4));
0x0005e98e subs r2, r6, 1 | r2 = r6 - 1;
0x0005e990 mul r2, r4, r2 | r2 = r4 * r2;
0x0005e994 cmp r7, r6 |
0x0005e996 str r2, [sp, 0x14] | var_14h = r2;
| if (r7 == r6) {
0x0005e998 beq 0x5ea6c | goto label_3;
| }
0x0005e99a cmp r6, 1 |
0x0005e99c it ne |
| if (r6 == 1) {
0x0005e99e movne r7, r4 | r7 = r4;
| }
| if (r6 == 1) {
0x0005e9a0 beq.w 0x5eb16 | goto label_23;
| }
| label_2:
0x0005e9a4 ldr r2, [r5, 0x4c] | r2 = *((r5 + 0x4c));
| if (r2 == 0) {
0x0005e9a6 cbz r2, 0x5e9d0 | goto label_24;
| }
0x0005e9a8 mov.w sb, 0 | sb = 0;
0x0005e9ac ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0005e9ae movs r0, 0x10 | r0 = 0x10;
0x0005e9b0 strd r4, fp, [sp] | __asm ("strd r4, fp, [sp]");
0x0005e9b4 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x0005e9b8 str r2, [sp, 0x18] | var_18h = r2;
0x0005e9ba bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x0005e9be orrs.w r3, r4, fp | r3 = r4 | fp;
| if (r3 == r4) {
0x0005e9c2 beq 0x5e9d0 | goto label_24;
| }
0x0005e9c4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005e9c6 add r4, r2 | r4 += r2;
| do {
0x0005e9c8 strb sb, [r2], 1 | *(r2) = sb;
| r2++;
0x0005e9cc cmp r4, r2 |
0x0005e9ce bne 0x5e9c8 |
| } while (r4 != r2);
| label_24:
0x0005e9d0 cmp.w r8, 0 |
| if (r8 == 0) {
0x0005e9d4 beq 0x5ea06 | goto label_25;
| }
0x0005e9d6 ldr r4, [r5, 0x28] | r4 = *((r5 + 0x28));
0x0005e9d8 mov.w sb, 0 | sb = 0;
0x0005e9dc ldr r1, [sp, 0x30] | r1 = var_30h;
0x0005e9de mov r2, r8 | r2 = r8;
0x0005e9e0 movs r0, 0x10 | r0 = 0x10;
0x0005e9e2 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x0005e9e6 str r4, [sp] | *(sp) = r4;
0x0005e9e8 asr.w fp, r4, 0x1f |
0x0005e9ec str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x0005e9f0 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x0005e9f4 orrs.w r3, r4, fp | r3 = r4 | fp;
| if (r3 == r4) {
0x0005e9f8 beq 0x5ea06 | goto label_25;
| }
0x0005e9fa add r4, r8 | r4 += r8;
0x0005e9fc mov r3, r8 | r3 = r8;
| do {
0x0005e9fe strb sb, [r3], 1 | *(r3) = sb;
| r3++;
0x0005ea02 cmp r4, r3 |
0x0005ea04 bne 0x5e9fe |
| } while (r4 != r3);
| label_25:
0x0005ea06 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0005ea08 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005ea0a ldr r3, [r0] | r3 = *(r0);
0x0005ea0c strd r2, sl, [sp] | __asm ("strd r2, sl, [sp]");
0x0005ea10 mov r2, r7 | r2 = r7;
0x0005ea12 ldr r1, [r5, 0x4c] | r1 = *((r5 + 0x4c));
0x0005ea14 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0005ea16 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005ea18 mov r4, r0 | r4 = r0;
0x0005ea1a cmp r0, 0 |
| if (r0 == 0) {
0x0005ea1c beq 0x5eaf6 | goto label_26;
| }
0x0005ea1e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005ea20 mov r1, r7 | r1 = r7;
0x0005ea22 ldr r0, [pc, 0x210] |
0x0005ea24 mov r2, r6 | r2 = r6;
0x0005ea26 movs r4, 0 | r4 = 0;
0x0005ea28 strd r3, sl, [sp] | __asm ("strd r3, sl, [sp]");
0x0005ea2c add r0, pc | r0 = 0xbd666;
0x0005ea2e bl 0x5cb60 | fcn_0005cb60 ();
| label_1:
0x0005ea32 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0005ea36 mov r2, r4 | r2 = r4;
0x0005ea38 mov r7, r0 | r7 = r0;
0x0005ea3a movs r3, 1 | r3 = 1;
0x0005ea3c movs r1, 0x75 | r1 = 0x75;
0x0005ea3e str r4, [sp] | *(sp) = r4;
0x0005ea40 mov r0, sb | r0 = sb;
0x0005ea42 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005ea46 mov r2, r7 | r2 = r7;
0x0005ea48 mov r1, r0 | r1 = r0;
0x0005ea4a mvn r3, 5 | r3 = ~5;
0x0005ea4e mov r0, sb | r0 = sb;
0x0005ea50 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0005ea54 movs r3, 1 | r3 = 1;
0x0005ea56 str r4, [sp] | *(sp) = r4;
0x0005ea58 mov r2, r3 | r2 = r3;
0x0005ea5a movs r1, 0x54 | r1 = 0x54;
0x0005ea5c mov r0, sb | r0 = sb;
0x0005ea5e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005ea62 ldr r4, [r5, 0x1c] | r4 = *((r5 + 0x1c));
0x0005ea64 ldrd r2, r3, [sp, 0x38] | __asm ("ldrd r2, r3, [var_38h]");
0x0005ea68 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
| label_3:
0x0005ea6c asr.w fp, r4, 0x1f |
0x0005ea70 ldrd r0, r1, [sp, 0x18] | __asm ("ldrd r0, r1, [var_18h]");
0x0005ea74 adds r6, 1 | r6++;
0x0005ea76 mov r2, r4 | r2 = r4;
0x0005ea78 mov r3, fp | r3 = fp;
0x0005ea7a bl 0xc4fc4 | r0 = fcn_000c4fc4 (r0, r1, r2, r3);
0x0005ea7e cmp r0, r6 |
0x0005ea80 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r0 >= r6) {
0x0005ea84 bge.w 0x5e976 | goto label_0;
| }
0x0005ea88 ldr.w sl, [sp, 0x28] | sl = var_28h;
0x0005ea8c mov sb, fp | sb = fp;
| label_22:
0x0005ea8e ldrd r0, r1, [sp, 0x18] | __asm ("ldrd r0, r1, [var_18h]");
0x0005ea92 mov r2, r4 | r2 = r4;
0x0005ea94 mov r3, sb | r3 = sb;
0x0005ea96 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x0005ea9a orrs.w r1, r3, r2 | r1 = r3 | r2;
| if (r1 != r3) {
0x0005ea9e bne.w 0x5ebd6 | goto label_27;
| }
| label_6:
0x0005eaa2 cmp.w r8, 0 |
| if (r8 == 0) {
0x0005eaa6 beq 0x5eab2 | goto label_5;
| }
0x0005eaa8 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0005eaaa mov r0, r8 | r0 = r8;
0x0005eaac asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0005eaae bl 0x581fc | fcn_000581fc (r0, r1, r2);
| do {
| label_5:
0x0005eab2 ldr r2, [pc, 0x184] |
0x0005eab4 ldr r3, [pc, 0x16c] | r3 = *(0x5ec24);
0x0005eab6 add r2, pc | r2 = 0xbd6f4;
0x0005eab8 ldr r3, [r2, r3] | r3 = *(0xbd6f4);
0x0005eaba ldr r2, [r3] | r2 = *(0xbd6f4);
0x0005eabc ldr r3, [sp, 0x44] | r3 = var_44h;
0x0005eabe eors r2, r3 | r2 ^= r3;
0x0005eac0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005eac4 bne.w 0x5ec1c | goto label_28;
| }
0x0005eac8 movs r0, 0 | r0 = 0;
0x0005eaca add sp, 0x4c |
0x0005eacc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x0005ead0 ldr r1, [pc, 0x168] |
0x0005ead2 mov r2, r6 | r2 = r6;
0x0005ead4 movs r3, 1 | r3 = 1;
0x0005ead6 mov r0, sl | r0 = sl;
0x0005ead8 str r6, [sp, 8] | var_8h = r6;
0x0005eada add r1, pc | r1 = 0xbd71a;
0x0005eadc strd r6, r1, [sp] | __asm ("strd r6, r1, [sp]");
0x0005eae0 movs r1, 0x75 | r1 = 0x75;
0x0005eae2 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0005eae6 movs r3, 1 | r3 = 1;
0x0005eae8 movs r1, 0x54 | r1 = 0x54;
0x0005eaea mov r2, r3 | r2 = r3;
0x0005eaec mov r0, sl | r0 = sl;
0x0005eaee str r6, [sp] | *(sp) = r6;
0x0005eaf0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005eaf4 b 0x5eab2 |
| } while (1);
| label_26:
0x0005eaf6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005eaf8 mov r2, r6 | r2 = r6;
0x0005eafa str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x0005eafe mov r0, r5 | r0 = r5;
0x0005eb00 str r3, [sp] | *(sp) = r3;
0x0005eb02 ldr r3, [r5, 0x4c] | r3 = *((r5 + 0x4c));
0x0005eb04 ldr r1, [r5, 0x54] | r1 = *((r5 + 0x54));
0x0005eb06 bl 0x332f4 | fcn_000332f4 (r0, r1, r2, r3, r4, r5);
0x0005eb08 invalid |
| if (r0 != 0) {
0x0005eb0a cbz r0, 0x5eb38 |
0x0005eb0c ldr r0, [sp, 0x34] | r0 = var_34h;
0x0005eb0e mov r1, r6 | r1 = r6;
0x0005eb10 bl 0x5cb60 | fcn_0005cb60 ();
0x0005eb14 b 0x5ea32 | goto label_1;
| label_23:
0x0005eb16 ldr r7, [r5, 0x2c] | r7 = *((r5 + 0x2c));
0x0005eb18 mov r1, r7 | r1 = r7;
0x0005eb1a asr.w sl, r7, 0x1f | sl = r7 >> 0x1f;
| if (r7 == 0) {
0x0005eb1e cbnz r7, 0x5eb26 |
0x0005eb20 movs r1, 0x10 | r1 = 0x10;
0x0005eb22 mov sl, r7 | sl = r7;
0x0005eb24 mov r7, r1 | r7 = r1;
| }
0x0005eb26 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005eb28 adds r2, r2, r1 | r2 += r1;
0x0005eb2a adc sl, sl, 0 | __asm ("adc sl, sl, 0");
0x0005eb2e str r2, [sp, 0x14] | var_14h = r2;
0x0005eb30 subs r3, r3, r7 | r3 -= r7;
0x0005eb32 subs r7, r4, r7 | r7 = r4 - r7;
0x0005eb34 str r3, [sp, 0x20] | var_20h = r3;
0x0005eb36 b 0x5e9a4 | goto label_2;
| }
0x0005eb38 ldr r4, [r5, 0x28] | r4 = *((r5 + 0x28));
0x0005eb3a ldr r1, [r5, 0x4c] | r1 = *((r5 + 0x4c));
0x0005eb3c cmp r4, 0 |
| if (r4 <= 0) {
0x0005eb3e ble 0x5eb96 | goto label_29;
| }
0x0005eb40 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005eb42 subs r4, 1 | r4--;
0x0005eb44 add r4, r8 | r4 += r8;
0x0005eb46 add.w r2, r8, -1 | r2 = r8 + -1;
0x0005eb4a subs r3, 1 | r3--;
0x0005eb4c add r1, r3 | r1 += r3;
| do {
0x0005eb4e ldrb r7, [r2, 1]! | r7 = *((r2 += 1));
0x0005eb52 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x0005eb56 cmp r4, r2 |
0x0005eb58 eor.w r3, r3, r7 | r3 ^= r7;
0x0005eb5c orr.w r0, r0, r3 | r0 |= r3;
0x0005eb60 bne 0x5eb4e |
| } while (r4 != r2);
| if (r0 != 0) {
0x0005eb62 cbz r0, 0x5eb96 |
0x0005eb64 ldr r0, [pc, 0xd8] |
0x0005eb66 mov r1, r6 | r1 = r6;
0x0005eb68 movs r4, 0 | r4 = 0;
0x0005eb6a add r0, pc | r0 = 0xbd7ae;
0x0005eb6c bl 0x5cb60 | fcn_0005cb60 ();
0x0005eb70 ldr r7, [sp, 0x28] | r7 = var_28h;
0x0005eb72 mvn r3, 5 | r3 = ~5;
0x0005eb76 mov r2, r4 | r2 = r4;
0x0005eb78 movs r1, 0x75 | r1 = 0x75;
0x0005eb7a str r0, [sp, 4] | var_4h = r0;
0x0005eb7c str r3, [sp, 8] | var_8h = r3;
0x0005eb7e mov r0, r7 | r0 = r7;
0x0005eb80 movs r3, 1 | r3 = 1;
0x0005eb82 str r4, [sp] | *(sp) = r4;
0x0005eb84 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0005eb88 movs r3, 1 | r3 = 1;
0x0005eb8a movs r1, 0x54 | r1 = 0x54;
0x0005eb8c mov r2, r3 | r2 = r3;
0x0005eb8e mov r0, r7 | r0 = r7;
0x0005eb90 str r4, [sp] | *(sp) = r4;
0x0005eb92 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
| label_29:
0x0005eb96 ldrd r2, r3, [sp, 0x38] | __asm ("ldrd r2, r3, [var_38h]");
0x0005eb9a ldr r4, [r5, 0x1c] | r4 = *((r5 + 0x1c));
0x0005eb9c strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
0x0005eba0 b 0x5ea6c | goto label_3;
| label_18:
0x0005eba2 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0005eba4 cbz r3, 0x5ec08 |
| while (1) {
0x0005eba6 bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x0005ebaa mov sl, r0 | sl = r0;
0x0005ebac b 0x5e8da | goto label_4;
| label_19:
0x0005ebae ldr r1, [pc, 0x94] |
0x0005ebb0 add r1, pc | r1 = 0xbd7fa;
| label_7:
0x0005ebb2 movs r4, 0 | r4 = 0;
0x0005ebb4 movs r3, 1 | r3 = 1;
0x0005ebb6 mov r2, r4 | r2 = r4;
0x0005ebb8 strd r4, r1, [sp] | __asm ("strd r4, r1, [sp]");
0x0005ebbc mov r0, sl | r0 = sl;
0x0005ebbe movs r1, 0x75 | r1 = 0x75;
0x0005ebc0 str r4, [sp, 8] | var_8h = r4;
0x0005ebc2 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0005ebc6 movs r3, 1 | r3 = 1;
0x0005ebc8 movs r1, 0x54 | r1 = 0x54;
0x0005ebca mov r2, r3 | r2 = r3;
0x0005ebcc mov r0, sl | r0 = sl;
0x0005ebce str r4, [sp] | *(sp) = r4;
0x0005ebd0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005ebd4 b 0x5eab2 | goto label_5;
| label_27:
0x0005ebd6 ldr r0, [pc, 0x70] |
0x0005ebd8 mov r1, r6 | r1 = r6;
0x0005ebda movs r4, 0 | r4 = 0;
0x0005ebdc add r0, pc | r0 = 0xbd82a;
0x0005ebde bl 0x5cb60 | fcn_0005cb60 ();
0x0005ebe2 mvn r3, 5 | r3 = ~5;
0x0005ebe6 mov r2, r4 | r2 = r4;
0x0005ebe8 str r0, [sp, 4] | var_4h = r0;
0x0005ebea movs r1, 0x75 | r1 = 0x75;
0x0005ebec str r3, [sp, 8] | var_8h = r3;
0x0005ebee mov r0, sl | r0 = sl;
0x0005ebf0 movs r3, 1 | r3 = 1;
0x0005ebf2 str r4, [sp] | *(sp) = r4;
0x0005ebf4 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0005ebf8 movs r3, 1 | r3 = 1;
0x0005ebfa mov r0, sl | r0 = sl;
0x0005ebfc mov r2, r3 | r2 = r3;
0x0005ebfe movs r1, 0x54 | r1 = 0x54;
0x0005ec00 str r4, [sp] | *(sp) = r4;
0x0005ec02 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0005ec06 b 0x5eaa2 | goto label_6;
0x0005ec08 ldr r3, [r0] | r3 = *(r0);
0x0005ec0a ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0005ec0c lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0005ec0e itt pl |
| if (r3 < r3) {
0x0005ec10 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0005ec12 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0005ec14 b 0x5eba6 |
| }
| label_21:
0x0005ec16 ldr r1, [pc, 0x34] |
0x0005ec18 add r1, pc | r1 = 0xbd86a;
0x0005ec1a b 0x5ebb2 | goto label_7;
| label_28:
0x0005ec1c blx 0x6430 | fcn_00006430 ();
0x0005ec20 push {r1, r3, r4, r6, r7} |
0x0005ec22 movs r0, r1 | r0 = r1;
0x0005ec24 lsls r4, r6, 8 | r4 = r6 << 8;
0x0005ec26 movs r0, r0 |
0x0005ec28 subs r0, 0x7a | r0 -= 0x7a;
0x0005ec2a movs r7, r0 | r7 = r0;
0x0005ec2c subs r0, 0x74 | r0 -= 0x74;
0x0005ec2e movs r7, r0 | r7 = r0;
0x0005ec30 strb r2, [r3, r4] | *((r3 + r4)) = r2;
0x0005ec32 movs r7, r0 | r7 = r0;
0x0005ec34 strb r0, [r5, r0] | *((r5 + r0)) = r0;
0x0005ec36 movs r7, r0 | r7 = r0;
0x0005ec38 uxtb r2, r4 | r2 = (int8_t) r4;
0x0005ec3a movs r0, r1 | r0 = r1;
0x0005ec3c strh r2, [r6, r4] | *((r6 + r4)) = r2;
0x0005ec3e movs r7, r0 | r7 = r0;
0x0005ec40 strh r6, [r0, r5] | *((r0 + r5)) = r6;
0x0005ec42 movs r7, r0 | r7 = r0;
0x0005ec44 strh r0, [r0, r1] | *((r0 + r1)) = r0;
0x0005ec46 movs r7, r0 | r7 = r0;
0x0005ec48 strh r4, [r7, r3] | *((r7 + r3)) = r4;
0x0005ec4a movs r7, r0 | r7 = r0;
0x0005ec4c strh r4, [r4, r0] | *((r4 + r0)) = r4;
0x0005ec4e movs r7, r0 | r7 = r0;
0x0005ec50 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x0005ec54 mov r4, r0 | r4 = r0;
0x0005ec56 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0005ec58 mov r6, r2 | r6 = r2;
0x0005ec5a subs r2, 0 |
0x0005ec5c mov r7, r1 | r7 = r1;
0x0005ec5e it ne |
| if (r2 == 0) {
0x0005ec60 movne r2, 1 | r2 = 1;
| }
0x0005ec62 mov r8, r3 | r8 = r3;
0x0005ec64 cmp r0, 0 |
0x0005ec66 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x0005ec68 it ne |
| if (r0 == 0) {
0x0005ec6a movne r2, 0 | r2 = 0;
| }
0x0005ec6c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0005ec6e cmp r2, 0 |
| if (r2 != 0) {
0x0005ec70 bne 0x5ed58 | goto label_30;
| }
0x0005ec72 add r1, r7 | r1 += r7;
0x0005ec74 mov r2, r7 | r2 = r7;
0x0005ec76 cmp r1, r3 |
| if (r1 > r3) {
0x0005ec78 bhi 0x5ed3a | goto label_12;
| }
0x0005ec7a cmp r0, 0 |
| if (r0 == 0) {
0x0005ec7c beq 0x5ecfa | goto label_11;
| }
| label_10:
0x0005ec7e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0005ec80 cmp r3, r7 |
| if (r3 != r7) {
0x0005ec82 bne 0x5ed7a | goto label_31;
| }
0x0005ec84 cmp r6, 0 |
| if (r6 == 0) {
0x0005ec86 beq 0x5ed6a | goto label_15;
| }
0x0005ec88 cmp r7, 0 |
| if (r7 <= 0) {
0x0005ec8a ble 0x5ed66 | goto label_17;
| }
| label_14:
0x0005ec8c ldr.w sb, [pc, 0x104] |
0x0005ec90 subs r6, 4 | r6 -= 4;
0x0005ec92 mov.w r8, 0 | r8 = 0;
0x0005ec96 add sb, pc | sb = 0xbda2e;
0x0005ec98 b 0x5ecdc | goto label_32;
| label_8:
0x0005ec9a bl 0x25da0 | r0 = fcn_00025da0 ();
0x0005ec9e cmp r0, 0 |
| if (r0 != 0) {
0x0005eca0 bne 0x5ed30 | goto label_33;
| }
0x0005eca2 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0005eca6 cmp r0, 0 |
| if (r0 != 0) {
0x0005eca8 bne 0x5ed30 | goto label_33;
| }
| label_9:
0x0005ecaa bic r5, r5, 0xc0000000 | r5 = BIT_MASK (r5, 0xc0000000);
0x0005ecae movs r1, 0 | r1 = 0;
0x0005ecb0 adds r5, 1 | r5++;
0x0005ecb2 mov r0, r5 | r0 = r5;
0x0005ecb4 bl 0x28c3c | fcn_00028c3c (r0);
0x0005ecb8 mov r2, r5 | r2 = r5;
0x0005ecba mov r5, r0 | r5 = r0;
0x0005ecbc cmp r0, 0 |
| if (r0 == 0) {
0x0005ecbe beq 0x5ed30 | goto label_33;
| }
0x0005ecc0 ldr r1, [r6] | r1 = *(r6);
0x0005ecc2 blx 0x65ac | EVP_CIPHER_CTX_free ();
| do {
0x0005ecc6 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0005ecc8 add.w r8, r8, 1 | r8++;
0x0005eccc ldr r2, [r4] | r2 = *(r4);
0x0005ecce cmp r7, r8 |
0x0005ecd0 add.w r1, r3, 1 | r1 = r3 + 1;
0x0005ecd4 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0005ecd6 str.w r5, [r2, r3, lsl 2] | __asm ("str.w r5, [r2, r3, lsl 2]");
| if (r7 == r8) {
0x0005ecda beq 0x5ed70 | goto label_34;
| }
| label_32:
0x0005ecdc ldr r5, [r6, 4]! | r5 = *((r6 += 4));
0x0005ece0 mov r0, r5 | r0 = r5;
0x0005ece2 cmp r5, 0 |
0x0005ece4 beq 0x5ecc6 |
| } while (r5 == 0);
0x0005ece6 blx 0x65dc | strcmp (r0, r1);
0x0005ecea ldr.w r3, [sb, 0xd0] | r3 = *((sb + 0xd0));
0x0005ecee mov r5, r0 | r5 = r0;
0x0005ecf0 cmp r3, 0 |
| if (r3 == 0) {
0x0005ecf2 beq 0x5ec9a | goto label_8;
| }
0x0005ecf4 dmb ish | __asm ("dmb ish");
0x0005ecf8 b 0x5ecaa | goto label_9;
| label_11:
0x0005ecfa cmp r7, 0 |
0x0005ecfc str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
| if (r7 <= 0) {
0x0005ecfe ble 0x5ed8e | goto label_35;
| }
| label_13:
0x0005ed00 ldr.w sb, [pc, 0x94] |
0x0005ed04 sub.w r8, r8, 4 | r8 -= 4;
0x0005ed08 movs r5, 0 | r5 = 0;
0x0005ed0a add sb, pc | sb = 0xbdaa6;
0x0005ed0c b 0x5ed20 |
| while (r0 != 0) {
0x0005ed0e ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0005ed10 cmp r7, r5 |
0x0005ed12 ldr r3, [r4] | r3 = *(r4);
0x0005ed14 add.w r1, r2, 1 | r1 = r2 + 1;
0x0005ed18 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0005ed1a str.w r0, [r3, r2, lsl 2] | __asm ("str.w r0, [r3, r2, lsl 2]");
| if (r7 == r5) {
0x0005ed1e beq 0x5ed74 | goto label_36;
| }
0x0005ed20 ldr r1, [r8, 4]! | r1 = *((r8 += 4));
0x0005ed24 mov r0, sb | r0 = sb;
0x0005ed26 adds r5, 1 | r5++;
0x0005ed28 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x0005ed2c cmp r0, 0 |
0x0005ed2e bne 0x5ed0e |
| }
| do {
| label_33:
0x0005ed30 movs r3, 7 | r3 = 7;
| label_16:
0x0005ed32 movs r0, 1 | r0 = 1;
0x0005ed34 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0005ed36 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_12:
0x0005ed3a add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x0005ed3e ldr r0, [r4] | r0 = *(r4);
0x0005ed40 movs r3, 0 | r3 = 0;
0x0005ed42 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x0005ed44 lsls r2, r2, 2 | r2 <<= 2;
0x0005ed46 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x0005ed4a cmp r0, 0 |
0x0005ed4c beq 0x5ed30 |
| } while (r0 == 0);
0x0005ed4e str r0, [r4] | *(r4) = r0;
0x0005ed50 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0005ed52 cmp r0, 0 |
| if (r0 != 0) {
0x0005ed54 bne 0x5ec7e | goto label_10;
| }
0x0005ed56 b 0x5ecfa | goto label_11;
| label_30:
0x0005ed58 lsls r2, r7, 1 | r2 = r7 << 1;
0x0005ed5a add r1, r2 | r1 += r2;
0x0005ed5c cmp r1, r3 |
| if (r1 > r3) {
0x0005ed5e bhi 0x5ed3a | goto label_12;
| }
0x0005ed60 cmp r7, 0 |
0x0005ed62 str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
| if (r7 > 0) {
0x0005ed64 bgt 0x5ed00 | goto label_13;
| }
| do {
| label_17:
0x0005ed66 adds r0, 1 | r0++;
0x0005ed68 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| label_15:
0x0005ed6a movs r0, 0 | r0 = 0;
0x0005ed6c pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_34:
0x0005ed70 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0005ed72 b 0x5ed66 |
| } while (1);
| label_36:
0x0005ed74 cmp r6, 0 |
| if (r6 != 0) {
0x0005ed76 bne 0x5ec8c | goto label_14;
| }
0x0005ed78 b 0x5ed6a | goto label_15;
| label_31:
0x0005ed7a ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0005ed7c bl 0x26dbc | fcn_00026dbc (r0);
0x0005ed80 ldr r0, [pc, 0x18] |
0x0005ed82 add r0, pc | r0 = 0xbdb22;
0x0005ed84 bl 0x5cb60 | fcn_0005cb60 ();
0x0005ed88 movs r3, 1 | r3 = 1;
0x0005ed8a str r0, [r4, 4] | *((r4 + 4)) = r0;
0x0005ed8c b 0x5ed32 | goto label_16;
| label_35:
0x0005ed8e cmp r6, 0 |
| if (r6 == 0) {
0x0005ed90 beq 0x5ed6a | goto label_15;
| }
0x0005ed92 b 0x5ed66 | goto label_17;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x5ee20).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6153c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006153c () | void fcn_0006153c (int16_t arg_0h, int16_t arg_8h, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006153c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00061540 add.w sl, r2, r3 | sl = r2 + r3;
0x00061544 cmp r2, sl |
0x00061546 sub sp, 0x14 |
| if (r2 >= sl) {
0x00061548 bhs 0x61604 | goto label_6;
| }
0x0006154a ldr.w sb, [pc, 0x278] |
0x0006154e mov r6, r1 | r6 = r1;
0x00061550 mov.w r1, 0xf800 | r1 = 0xf800;
0x00061554 movw r8, 0x9fdf |
0x00061558 movt r1, 0xffff | r1 = (r1 & 0xFFFF) | 0xffff0000;
0x0006155c movt r8, 0x802 | r8 = 0x8029fdf;
0x00061560 add sb, pc | sb = 0xc2d2a;
0x00061562 movs r7, 0 | r7 = 0;
0x00061564 mov fp, r2 |
0x00061566 mov r5, sl | r5 = sl;
0x00061568 mov r4, r1 | r4 = r1;
0x0006156a str r0, [sp, 4] | var_4h = r0;
0x0006156c str r2, [sp, 8] | var_8h = r2;
0x0006156e b 0x6157c |
| while (r0 < 0xbf) {
| label_2:
0x00061570 bl 0x27b20 | r0 = fcn_00027b20 (r0);
0x00061574 cmp r6, r0 |
| if (r6 != r0) {
0x00061576 bne 0x615f4 | goto label_3;
| }
| label_0:
0x00061578 cmp r5, fp |
| if (r5 < fp) {
0x0006157a bls 0x615fc | goto label_11;
| }
| label_1:
0x0006157c mov r3, fp | r3 = fp;
0x0006157e ldrb r0, [r3], 1 | r0 = *(r3);
| r3++;
0x00061582 cmp r0, 0xbf |
0x00061584 it ls |
| if (r0 > 0xbf) {
0x00061586 movls fp, r3 |
| }
0x00061588 bls 0x61570 |
| }
0x0006158a cmp r5, r3 |
0x0006158c add r0, sb | r0 += sb;
0x0006158e ldrb sl, [r0, -0xc0] | sl = *((r0 - 0xc0));
| if (r5 != r3) {
0x00061592 bne 0x615a0 | goto label_12;
| }
0x00061594 b 0x61782 | goto label_13;
| do {
0x00061596 cmp r5, r3 |
0x00061598 add.w sl, r0, sl, lsl 6 | sl = r0 + (sl << 6);
0x0006159c mov fp, r3 |
| if (r5 == r3) {
0x0006159e beq 0x615b4 | goto label_14;
| }
| label_12:
0x000615a0 mov fp, r3 |
0x000615a2 ldrb r0, [r3], 1 | r0 = *(r3);
| r3++;
0x000615a6 and ip, r0, 0xc0 |
0x000615aa and r0, r0, 0x3f | r0 &= 0x3f;
0x000615ae cmp.w ip, 0x80 |
0x000615b2 beq 0x61596 |
| } while (ip == 0x80);
| label_14:
0x000615b4 cmp.w sl, 0x7f |
| if (sl < 0x7f) {
0x000615b8 bls 0x6160c | goto label_15;
| }
0x000615ba and.w r3, sl, r4 | r3 = sl & r4;
0x000615be cmp.w r3, 0xd800 |
| if (r3 == 0xd800) {
0x000615c2 beq 0x6160c | goto label_15;
| }
0x000615c4 bic r0, sl, 1 | r0 = BIT_MASK (sl, 1);
0x000615c8 movw r3, 0xfffe | r3 = 0xfffe;
0x000615cc cmp r0, r3 |
| if (r0 == r3) {
0x000615ce beq 0x6160c | goto label_15;
| }
0x000615d0 mov r0, sl | r0 = sl;
0x000615d2 bl 0x27b20 | r0 = fcn_00027b20 (r0);
0x000615d6 cmp r0, r6 |
| if (r0 == r6) {
0x000615d8 beq 0x61578 | goto label_0;
| }
0x000615da sub.w r0, sl, 0x300 | r0 = sl - 0x300;
0x000615de cmp r0, 0x31 |
| if (r0 > 0x31) {
0x000615e0 bhi 0x615f4 | goto label_3;
| }
0x000615e2 cmp.w sl, 0x320 |
| if (sl >= 0x320) {
0x000615e6 bge 0x61612 | goto label_16;
| }
0x000615e8 movs r3, 1 | r3 = 1;
0x000615ea lsls r3, r0 | r3 <<= r0;
0x000615ec and.w r3, r3, r8 | r3 &= r8;
0x000615f0 cmp r3, 0 |
| if (r3 != 0) {
0x000615f2 bne 0x61578 | goto label_0;
| }
| label_3:
0x000615f4 cmp r5, fp |
0x000615f6 add.w r7, r7, 1 | r7++;
| if (r5 > fp) {
0x000615fa bhi 0x6157c | goto label_1;
| }
| label_11:
0x000615fc mov sl, r5 | sl = r5;
0x000615fe ldrd fp, r5, [sp, 4] | __asm ("ldrd fp, r5, [var_4h]");
| if (r7 != 0) {
0x00061602 cbnz r7, 0x6162c | goto label_17;
| }
| label_6:
0x00061604 movs r0, 0 | r0 = 0;
0x00061606 add sp, 0x14 |
0x00061608 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x0006160c movw r0, 0xfffd | r0 = 0xfffd;
0x00061610 b 0x61570 | goto label_2;
| label_16:
0x00061612 sub.w sl, sl, 0x320 | sl -= 0x320;
0x00061616 movs r3, 1 | r3 = 1;
0x00061618 lsl.w r3, r3, sl | r3 <<= sl;
0x0006161c movw r0, 0x61f8 |
0x00061620 movt r0, 3 | r0 = 0xNaN;
0x00061624 ands r3, r0 | r3 &= r0;
0x00061626 cmp r3, 0 |
| if (r3 != 0) {
0x00061628 bne 0x61578 | goto label_0;
| }
0x0006162a b 0x615f4 | goto label_3;
| label_17:
0x0006162c ldr r3, [pc, 0x198] |
0x0006162e ldrd r4, sb, [fp, 8] | __asm ("ldrd r4, sb, [arg_8h]");
0x00061632 add r3, pc |
0x00061634 ldr.w r3, [r3, 0xd0] | r3 = *(0xc2ece);
0x00061638 cmp r3, 0 |
| if (r3 != 0) {
0x0006163a bne.w 0x61790 | goto label_18;
| }
0x0006163e bl 0x25da0 | r0 = fcn_00025da0 ();
0x00061642 cmp r0, 0 |
| if (r0 != 0) {
0x00061644 bne.w 0x61756 | goto label_19;
| }
0x00061648 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0006164c cmp r0, 0 |
| if (r0 != 0) {
0x0006164e bne.w 0x61756 | goto label_19;
| }
| label_10:
0x00061652 adds r2, r4, r7 | r2 = r4 + r7;
0x00061654 mov r0, sb | r0 = sb;
0x00061656 lsls r2, r2, 2 | r2 <<= 2;
0x00061658 movs r3, 0 | r3 = 0;
0x0006165a bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x0006165e mov r7, r0 | r7 = r0;
0x00061660 cmp r0, 0 |
| if (r0 == 0) {
0x00061662 beq 0x61756 | goto label_19;
| }
0x00061664 ldr.w r8, [pc, 0x164] |
0x00061668 mov.w lr, 0xf800 | lr = 0xf800;
0x0006166c movw ip, 0x9fdf |
0x00061670 movt lr, 0xffff | lr = (lr & 0xFFFF) | 0xffff0000;
0x00061674 movt ip, 0x802 | ip = 0x8029fdf;
0x00061678 ldr.w sb, [fp, 8] | sb = *(arg_8h);
0x0006167c add r8, pc | r8 = 0xc2e4c;
0x0006167e strd fp, lr, [sp, 8] | __asm ("strd fp, lr, [var_8h]");
0x00061682 str.w ip, [sp, 4] | __asm ("str.w ip, [var_4h]");
0x00061686 b 0x61696 |
| while (r4 < 0xbf) {
| label_8:
0x00061688 mov r0, r4 | r0 = r4;
0x0006168a bl 0x27b20 | r0 = fcn_00027b20 (r0);
0x0006168e cmp r6, r0 |
| if (r6 != r0) {
0x00061690 bne 0x61708 | goto label_7;
| }
| label_4:
0x00061692 cmp sl, r5 |
| if (sl < r5) {
0x00061694 bls 0x6174c | goto label_20;
| }
| label_5:
0x00061696 ldrb r4, [r5], 1 | r4 = *(r5);
| r5++;
0x0006169a cmp r4, 0xbf |
0x0006169c bls 0x61688 |
| }
0x0006169e cmp sl, r5 |
0x000616a0 add r4, r8 | r4 += r8;
0x000616a2 ldrb r4, [r4, -0xc0] | r4 = *((r4 - 0xc0));
| if (sl == r5) {
0x000616a6 beq 0x617a6 | goto label_21;
| }
0x000616a8 mov r2, r5 | r2 = r5;
0x000616aa b 0x616b6 |
| while (r1 == 0x80) {
0x000616ac cmp sl, r2 |
0x000616ae add.w r4, r3, r4, lsl 6 | r4 = r3 + (r4 << 6);
0x000616b2 mov r5, r2 | r5 = r2;
| if (sl == r2) {
0x000616b4 beq 0x616c8 | goto label_22;
| }
0x000616b6 mov r5, r2 | r5 = r2;
0x000616b8 ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x000616bc and r1, r3, 0xc0 | r1 = r3 & 0xc0;
0x000616c0 and r3, r3, 0x3f | r3 &= 0x3f;
0x000616c4 cmp r1, 0x80 |
0x000616c6 beq 0x616ac |
| }
| label_22:
0x000616c8 cmp r4, 0x7f |
| if (r4 < 0x7f) {
0x000616ca bls 0x61776 | goto label_23;
| }
0x000616cc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000616ce and.w r2, r4, r3 | r2 = r4 & r3;
0x000616d0 lsls r3, r0, 8 | r3 = r0 << 8;
0x000616d2 cmp.w r2, 0xd800 |
| if (r2 == 0xd800) {
0x000616d6 beq 0x61776 | goto label_23;
| }
0x000616d8 bic r1, r4, 1 | r1 = BIT_MASK (r4, 1);
0x000616dc movw r2, 0xfffe | r2 = 0xfffe;
0x000616e0 cmp r1, r2 |
| if (r1 == r2) {
0x000616e2 beq 0x61776 | goto label_23;
| }
0x000616e4 mov r0, r4 | r0 = r4;
0x000616e6 bl 0x27b20 | r0 = fcn_00027b20 (r0);
0x000616ea cmp r0, r6 |
| if (r0 == r6) {
0x000616ec beq 0x61692 | goto label_4;
| }
0x000616ee sub.w r1, r4, 0x300 | r1 = r4 - 0x300;
0x000616f2 cmp r1, 0x31 |
| if (r1 > 0x31) {
0x000616f4 bhi 0x61708 | goto label_7;
| }
0x000616f6 cmp.w r4, 0x320 |
| if (r4 >= 0x320) {
0x000616fa bge 0x6175e | goto label_24;
| }
0x000616fc ldr r3, [sp, 4] | r3 = var_4h;
0x000616fe movs r2, 1 | r2 = 1;
0x00061700 lsls r2, r1 | r2 <<= r1;
0x00061702 ands r2, r3 | r2 &= r3;
0x00061704 cmp r2, 0 |
| if (r2 != 0) {
0x00061706 bne 0x61692 | goto label_4;
| }
| label_7:
0x00061708 cmp.w sb, 0 |
0x0006170c it le |
| if (sb > 0) {
0x0006170e movle fp, r7 |
| }
| if (sb <= 0) {
0x00061710 ble 0x61740 | goto label_9;
| }
0x00061712 mov r1, r7 | r1 = r7;
0x00061714 movs r2, 0 | r2 = 0;
0x00061716 b 0x6171e |
| while (r3 < r4) {
0x00061718 adds r2, 1 | r2++;
0x0006171a cmp r2, sb |
| if (r2 == sb) {
0x0006171c beq 0x6177c | goto label_25;
| }
0x0006171e mov fp, r1 |
0x00061720 ldr r3, [r1], 4 | r3 = *(r1);
| r1 += 4;
0x00061724 cmp r3, r4 |
0x00061726 blt 0x61718 |
| }
0x00061728 cmp sb, r2 |
| if (sb > r2) {
0x0006172a ble 0x61740 |
0x0006172c adds r0, r2, 1 | r0 = r2 + 1;
0x0006172e sub.w r2, sb, r2 | r2 = sb - r2;
0x00061732 lsls r0, r0, 2 | r0 <<= 2;
0x00061734 lsls r2, r2, 2 | r2 <<= 2;
0x00061736 subs r1, r0, 4 | r1 = r0 - 4;
0x00061738 add r0, r7 | r0 += r7;
0x0006173a add r1, r7 | r1 += r7;
0x0006173c blx 0x6354 | realloc (r0, r1);
| }
| label_9:
0x00061740 cmp sl, r5 |
0x00061742 add.w sb, sb, 1 | sb++;
0x00061746 str.w r4, [fp] | __asm ("str.w r4, [fp]");
| if (sl > r5) {
0x0006174a bhi 0x61696 | goto label_5;
| }
| label_20:
0x0006174c ldr.w fp, [sp, 8] | fp = var_8h;
0x00061750 strd sb, r7, [fp, 8] | __asm ("strd sb, r7, [fp, 8]");
0x00061754 b 0x61604 | goto label_6;
| label_19:
0x00061756 movs r0, 7 | r0 = 7;
0x00061758 add sp, 0x14 |
0x0006175a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x0006175e sub.w r1, r4, 0x320 | r1 = r4 - 0x320;
0x00061762 movs r2, 1 | r2 = 1;
0x00061764 lsls r2, r1 | r2 <<= r1;
0x00061766 movw r1, 0x61f8 |
0x0006176a movt r1, 3 | r1 = 0xNaN;
0x0006176e ands r2, r1 | r2 &= r1;
0x00061770 cmp r2, 0 |
| if (r2 != 0) {
0x00061772 bne 0x61692 | goto label_4;
| }
0x00061774 b 0x61708 | goto label_7;
| label_23:
0x00061776 movw r4, 0xfffd | r4 = 0xfffd;
0x0006177a b 0x61688 | goto label_8;
| label_25:
0x0006177c add.w fp, r7, sb, lsl 2 |
0x00061780 b 0x61740 | goto label_9;
| label_13:
0x00061782 cmp.w sl, 0x7f |
| if (sl <= 0x7f) {
0x00061786 bhi 0x61796 |
0x00061788 mov fp, r5 |
0x0006178a movw r0, 0xfffd | r0 = 0xfffd;
0x0006178e b 0x61570 | goto label_2;
| label_18:
0x00061790 dmb ish | __asm ("dmb ish");
0x00061794 b 0x61652 | goto label_10;
| }
0x00061796 mov r0, sl | r0 = sl;
0x00061798 mov fp, r5 |
0x0006179a bl 0x27b20 | r0 = fcn_00027b20 (r0);
0x0006179e cmp r6, r0 |
| if (r6 == r0) {
0x000617a0 beq.w 0x61578 | goto label_0;
| }
0x000617a4 b 0x615f4 | goto label_3;
| label_21:
0x000617a6 cmp r4, 0x7f |
| if (r4 <= 0x7f) {
0x000617a8 bhi 0x617b2 |
0x000617aa mov r5, sl | r5 = sl;
0x000617ac movw r4, 0xfffd | r4 = 0xfffd;
0x000617b0 b 0x61688 | goto label_8;
| }
0x000617b2 mov r0, r4 | r0 = r4;
0x000617b4 mov r5, sl | r5 = sl;
0x000617b6 bl 0x27b20 | r0 = fcn_00027b20 (r0);
0x000617ba cmp r0, r6 |
| if (r0 == r6) {
0x000617bc beq.w 0x61692 | goto label_4;
| }
0x000617c0 b 0x61708 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x61b70 */
| #include <stdint.h>
|
; (fcn) fcn.00061b70 () | void fcn_00061b70 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00061b70 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00061b74 mov r5, r0 | r5 = r0;
0x00061b76 ldr r3, [pc, 0xbc] |
0x00061b78 mov r6, r1 | r6 = r1;
0x00061b7a add r3, pc |
0x00061b7c ldr.w r3, [r3, 0xd0] | r3 = *(0xc3884);
0x00061b80 cmp r3, 0 |
| if (r3 != 0) {
0x00061b82 bne 0x61c28 | goto label_4;
| }
0x00061b84 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00061b88 cmp r0, 0 |
| if (r0 != 0) {
0x00061b8a bne 0x61c18 | goto label_5;
| }
0x00061b8c bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00061b90 cmp r0, 0 |
| if (r0 != 0) {
0x00061b92 bne 0x61c18 | goto label_5;
| }
| label_2:
0x00061b94 lsls r4, r6, 3 | r4 = r6 << 3;
0x00061b96 movs r1, 0 | r1 = 0;
0x00061b98 mov r0, r4 | r0 = r4;
0x00061b9a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00061b9e mov sb, r0 | sb = r0;
0x00061ba0 cmp r0, 0 |
| if (r0 == 0) {
0x00061ba2 beq 0x61c18 | goto label_5;
| }
0x00061ba4 mov r2, r4 | r2 = r4;
0x00061ba6 movs r1, 0 | r1 = 0;
0x00061ba8 blx 0x62ec | fcn_000062ec ();
0x00061bac ldr r0, [r5, 0x10] | r0 = *((r5 + 0x10));
0x00061bae bl 0x26dbc | fcn_00026dbc (r0);
0x00061bb2 ldrb r3, [r5] | r3 = *(r5);
0x00061bb4 strd r6, sb, [r5, 0xc] | __asm ("strd r6, sb, [r5, 0xc]");
0x00061bb8 cmp r3, 1 |
| if (r3 == 1) {
0x00061bba beq 0x61c2e | goto label_6;
| }
0x00061bbc ldr r7, [pc, 0x78] |
0x00061bbe add r7, pc | r7 = 0xc37fa;
| label_3:
0x00061bc0 ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x00061bc2 mov.w r8, 0 | r8 = 0;
0x00061bc6 subs r6, 1 | r6--;
0x00061bc8 str.w r8, [r5, 8] | __asm ("str.w r8, [r5, 8]");
| if (r4 != 0) {
0x00061bcc cbnz r4, 0x61bf2 | goto label_7;
| }
0x00061bce b 0x61c22 | goto label_8;
| do {
0x00061bd0 ldr.w ip, [r3, 4] | ip = *((r3 + 4));
0x00061bd4 strd r3, ip, [r2] | __asm ("strd r3, ip, [r2]");
0x00061bd8 cmp.w ip, 0 |
| if (ip == 0) {
0x00061bdc beq 0x61c1e | goto label_9;
| }
0x00061bde str.w r2, [ip] | __asm ("str.w r2, [ip]");
| label_1:
0x00061be2 str r2, [r3, 4] | *((r3 + 4)) = r2;
| label_0:
0x00061be4 ldr.w r3, [sb, r0, lsl 3] | offset_0 = r0 << 3;
| r3 = *((sb + offset_0));
0x00061be8 adds r3, 1 | r3++;
0x00061bea str.w r3, [sb, r0, lsl 3] | __asm ("str.w r3, [sb, r0, lsl 3]");
0x00061bee str r2, [r1, 4] | *((r1 + 4)) = r2;
| if (r4 == 0) {
0x00061bf0 cbz r4, 0x61c22 | goto label_8;
| }
| label_7:
0x00061bf2 ldrd r0, r1, [r4, 0xc] | __asm ("ldrd r0, r1, [r4, 0xc]");
0x00061bf6 blx r7 | uint32_t (*r7)(uint32_t) (r0);
0x00061bf8 ands r0, r6 | r0 &= r6;
0x00061bfa mov r2, r4 | r2 = r4;
0x00061bfc add.w r1, sb, r0, lsl 3 | r1 = sb + (r0 << 3);
0x00061c00 ldr r4, [r4] | r4 = *(r4);
0x00061c02 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00061c04 cmp r3, 0 |
0x00061c06 bne 0x61bd0 |
| } while (r3 != 0);
0x00061c08 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00061c0a str r3, [r2] | *(r2) = r3;
| if (r3 != 0) {
0x00061c0c cbz r3, 0x61c10 |
0x00061c0e str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
0x00061c10 str.w r8, [r2, 4] | __asm ("str.w r8, [r2, 4]");
0x00061c14 str r2, [r5, 8] | *((r5 + 8)) = r2;
0x00061c16 b 0x61be4 | goto label_0;
| label_5:
0x00061c18 movs r0, 1 | r0 = 1;
0x00061c1a pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_9:
0x00061c1e str r2, [r5, 8] | *((r5 + 8)) = r2;
0x00061c20 b 0x61be2 | goto label_1;
| label_8:
0x00061c22 movs r0, 0 | r0 = 0;
0x00061c24 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x00061c28 dmb ish | __asm ("dmb ish");
0x00061c2c b 0x61b94 | goto label_2;
| label_6:
0x00061c2e ldr r7, [pc, 0xc] |
0x00061c30 add r7, pc | r7 = 0xc3872;
0x00061c32 b 0x61bc0 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x61c40 */
| #include <stdint.h>
|
; (fcn) fcn.00061c40 () | void fcn_00061c40 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00061c40 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00061c44 mov r4, r0 | r4 = r0;
0x00061c46 ldrb r0, [r0] | r0 = *(r0);
0x00061c48 sub sp, 8 |
0x00061c4a mov r8, r1 | r8 = r1;
0x00061c4c mov r7, r2 | r7 = r2;
0x00061c4e mov sb, r3 | sb = r3;
0x00061c50 cmp r0, 1 |
| if (r0 == 1) {
0x00061c52 beq 0x61d24 | goto label_8;
| }
0x00061c54 ldr r3, [pc, 0x15c] |
0x00061c56 add r3, pc | r3 = 0xc3a0e;
| label_1:
0x00061c58 mov r1, r7 | r1 = r7;
0x00061c5a mov r0, r8 | r0 = r8;
0x00061c5c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00061c5e ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x00061c60 mov sl, r0 | sl = r0;
0x00061c62 mov r3, r7 | r3 = r7;
0x00061c64 mov r2, r8 | r2 = r8;
0x00061c66 subs r5, 1 | r5--;
0x00061c68 ands r5, r0 | r5 &= r0;
0x00061c6a str r5, [sp] | *(sp) = r5;
0x00061c6c ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00061c6e ldrb r0, [r4] | r0 = *(r4);
0x00061c70 bl 0x29d8c | r0 = fcn_00029d8c (r0, r1, r2, r3);
0x00061c74 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x00061c76 cbz r0, 0x61c8c | goto label_9;
| }
0x00061c78 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x00061c7a cmp.w sb, 0 |
| if (sb == 0) {
0x00061c7e beq 0x61d30 | goto label_10;
| }
0x00061c80 str.w sb, [r0, 8] | __asm ("str.w sb, [r0, 8]");
| do {
| label_2:
0x00061c84 mov r0, r7 | r0 = r7;
0x00061c86 add sp, 8 |
0x00061c88 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x00061c8c cmp.w sb, 0 |
| if (sb == 0) {
0x00061c90 beq 0x61d1a | goto label_11;
| }
0x00061c92 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00061c94 cmp r1, 0 |
| if (r1 == 0) {
0x00061c96 beq 0x61d82 | goto label_12;
| }
| label_4:
0x00061c98 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00061c9a cmp r3, r1 |
| if (r3 < r1) {
0x00061c9c blt 0x61cb0 | goto label_13;
| }
0x00061c9e lsls r1, r1, 1 | r1 <<= 1;
0x00061ca0 mov r0, r4 | r0 = r4;
0x00061ca2 bl 0x61b70 | r0 = fcn_00061b70 (r0, r1);
| if (r0 == 0) {
0x00061ca6 cbz r0, 0x61cb0 | goto label_13;
| }
| label_3:
0x00061ca8 movs r3, 0 | r3 = 0;
0x00061caa str r3, [r4, 4] | *((r4 + 4)) = r3;
| label_0:
0x00061cac mov r7, sb | r7 = sb;
0x00061cae b 0x61c84 |
| } while (1);
| label_13:
0x00061cb0 movs r0, 0x14 | r0 = 0x14;
0x00061cb2 movs r1, 0 | r1 = 0;
0x00061cb4 bl 0x5ac48 | r0 = fcn_0005ac48 (r0, r1);
0x00061cb8 mov r5, r0 | r5 = r0;
0x00061cba cmp r0, 0 |
| if (r0 == 0) {
0x00061cbc beq 0x61cac | goto label_0;
| }
0x00061cbe ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00061cc0 cmp r3, 0 |
0x00061cc2 it ne |
| if (r3 != 0) {
0x00061cc4 cmpne r8, 0 | __asm ("cmpne r8, 0");
| }
| if (r3 == 0) {
0x00061cc8 beq 0x61d2a | goto label_14;
| }
0x00061cca asrs r1, r7, 0x1f | r1 = r7 >> 0x1f;
0x00061ccc mov r0, r7 | r0 = r7;
0x00061cce bl 0x5ac48 | fcn_0005ac48 (r0, r1);
0x00061cd2 str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x00061cd4 cmp r0, 0 |
| if (r0 == 0) {
0x00061cd6 beq 0x61da2 | goto label_15;
| }
0x00061cd8 mov r1, r8 | r1 = r8;
0x00061cda mov r2, r7 | r2 = r7;
0x00061cdc blx 0x65ac | EVP_CIPHER_CTX_free ();
| do {
0x00061ce0 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00061ce2 str r7, [r5, 0x10] | *((r5 + 0x10)) = r7;
0x00061ce4 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00061ce6 adds r3, 1 | r3++;
0x00061ce8 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00061cea ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00061cec subs r3, 1 | r3--;
0x00061cee and.w r3, r3, sl | r3 &= sl;
0x00061cf2 add.w r0, r1, r3, lsl 3 | r0 = r1 + (r3 << 3);
0x00061cf6 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00061cf8 cmp r2, 0 |
| if (r2 == 0) {
0x00061cfa beq 0x61d92 | goto label_16;
| }
0x00061cfc ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x00061cfe str r2, [r5] | *(r5) = r2;
0x00061d00 str r6, [r5, 4] | *((r5 + 4)) = r6;
0x00061d02 cmp r6, 0 |
| if (r6 == 0) {
0x00061d04 beq 0x61dac | goto label_17;
| }
0x00061d06 str r5, [r6] | *(r6) = r5;
| label_6:
0x00061d08 str r5, [r2, 4] | *((r2 + 4)) = r5;
| label_5:
0x00061d0a ldr.w r2, [r1, r3, lsl 3] | offset_0 = r3 << 3;
| r2 = *((r1 + offset_0));
0x00061d0e adds r2, 1 | r2++;
0x00061d10 str.w r2, [r1, r3, lsl 3] | __asm ("str.w r2, [r1, r3, lsl 3]");
0x00061d14 str r5, [r0, 4] | *((r0 + 4)) = r5;
0x00061d16 str.w sb, [r5, 8] | __asm ("str.w sb, [r5, 8]");
0x00061d18 str r0, [sp, 0x20] | *((sp + 0x20)) = r0;
| label_11:
0x00061d1a movs r7, 0 | r7 = 0;
0x00061d1c mov r0, r7 | r0 = r7;
0x00061d1e add sp, 8 |
0x00061d20 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_8:
0x00061d24 ldr r3, [pc, 0x90] |
0x00061d26 add r3, pc | r3 = 0xc3ae2;
0x00061d28 b 0x61c58 | goto label_1;
| label_14:
0x00061d2a str.w r8, [r0, 0xc] | __asm ("str.w r8, [r0, 0xc]");
0x00061d2e b 0x61ce0 |
| } while (1);
| label_10:
0x00061d30 ldrd r3, r2, [r0] | __asm ("ldrd r3, r2, [r0]");
0x00061d34 cmp r2, 0 |
| if (r2 == 0) {
0x00061d36 beq 0x61db0 | goto label_18;
| }
0x00061d38 str r3, [r2] | *(r2) = r3;
| if (r3 != 0) {
| label_7:
0x00061d3a cbz r3, 0x61d3e |
0x00061d3c str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
0x00061d3e ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00061d40 add.w r1, r2, r5, lsl 3 | r1 = r2 + (r5 << 3);
0x00061d44 ldr r0, [r1, 4] | r0 = *((r1 + 4));
0x00061d46 cmp r6, r0 |
0x00061d48 it eq |
| if (r6 != r0) {
0x00061d4a streq r3, [r1, 4] | *((r1 + 4)) = r3;
| }
0x00061d4c ldr.w r3, [r2, r5, lsl 3] | offset_1 = r5 << 3;
| r3 = *((r2 + offset_1));
0x00061d50 subs r3, 1 | r3--;
0x00061d52 cmp r3, 0 |
0x00061d54 str.w r3, [r2, r5, lsl 3] | __asm ("str.w r3, [r2, r5, lsl 3]");
0x00061d58 itt le |
| if (r3 > 0) {
0x00061d5a movle r3, 0 | r3 = 0;
| }
| if (r3 > 0) {
0x00061d5c strle r3, [r1, 4] | *((r1 + 4)) = r3;
| }
0x00061d5e ldrb r3, [r4, 1] | r3 = *((r4 + 1));
| if (r3 != 0) {
0x00061d60 cbz r3, 0x61d6a |
0x00061d62 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| if (r0 == 0) {
0x00061d64 cbz r0, 0x61d6a | goto label_19;
| }
0x00061d66 bl 0x26dbc | fcn_00026dbc (r0);
| }
| label_19:
0x00061d6a mov r0, r6 | r0 = r6;
0x00061d6c bl 0x26dbc | fcn_00026dbc (r0);
0x00061d70 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00061d72 subs r3, 1 | r3--;
0x00061d74 cmp r3, 0 |
0x00061d76 str r3, [r4, 4] | *((r4 + 4)) = r3;
| if (r3 > 0) {
0x00061d78 bgt 0x61c84 | goto label_2;
| }
0x00061d7a mov r0, r4 | r0 = r4;
0x00061d7c bl 0x2716c | fcn_0002716c (r0);
0x00061d80 b 0x61c84 | goto label_2;
| label_12:
0x00061d82 movs r1, 8 | r1 = 8;
0x00061d84 mov r0, r4 | r0 = r4;
0x00061d86 bl 0x61b70 | r0 = fcn_00061b70 (r0, r1);
0x00061d8a cmp r0, 0 |
| if (r0 != 0) {
0x00061d8c bne 0x61ca8 | goto label_3;
| }
0x00061d8e ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00061d90 b 0x61c98 | goto label_4;
| label_16:
0x00061d92 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00061d94 str r2, [r5] | *(r5) = r2;
| if (r2 != 0) {
0x00061d96 cbz r2, 0x61d9a |
0x00061d98 str r5, [r2, 4] | *((r2 + 4)) = r5;
| }
0x00061d9a movs r2, 0 | r2 = 0;
0x00061d9c str r2, [r5, 4] | *((r5 + 4)) = r2;
0x00061d9e str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00061da0 b 0x61d0a | goto label_5;
| label_15:
0x00061da2 mov r0, r5 | r0 = r5;
0x00061da4 mov r7, sb | r7 = sb;
0x00061da6 bl 0x26dbc | fcn_00026dbc (r0);
0x00061daa b 0x61c84 | goto label_2;
| label_17:
0x00061dac str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00061dae b 0x61d08 | goto label_6;
| label_18:
0x00061db0 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00061db2 b 0x61d3a | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x62520 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00062520 () | void fcn_00062520 (int16_t arg_1a0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_2ch;
| int16_t var_30h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00062520 push {r4, r5, r6, r7, lr} |
0x00062522 mov r4, r0 | r4 = r0;
0x00062524 mov r6, r2 | r6 = r2;
0x00062526 mov r0, r2 | r0 = r2;
0x00062528 mov r5, r1 | r5 = r1;
0x0006252a sub sp, 0x34 |
0x0006252c ldr r2, [pc, 0xd4] |
0x0006252e ldr r3, [pc, 0xd8] | r3 = *(0x6260a);
0x00062530 ldr r1, [pc, 0xd8] |
0x00062532 add r2, pc | r2 = 0xc4b3a;
0x00062534 ldr r3, [r2, r3] |
0x00062536 add r1, pc | r1 = 0xc4b46;
0x00062538 ldr r3, [r3] | r3 = *(0xc4b3a);
0x0006253a str r3, [sp, 0x2c] | var_2ch = r3;
0x0006253c mov.w r3, 0 | r3 = 0;
0x00062540 bl 0x25e74 | r0 = fcn_00025e74 (r0, r1);
| if (r0 != 0) {
0x00062544 cbz r0, 0x6254a |
0x00062546 ldrb r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x00062548 cbnz r3, 0x625a2 | goto label_1;
| }
| }
0x0006254a ldr r1, [pc, 0xc4] |
0x0006254c mov r0, r6 | r0 = r6;
0x0006254e add r1, pc | r1 = 0xc4b64;
0x00062550 bl 0x25e74 | r0 = fcn_00025e74 (r0, r1);
0x00062554 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x00062556 cbz r0, 0x62584 | goto label_2;
| }
0x00062558 blx 0x65dc | strcmp (r0, r1);
0x0006255c mov r2, r7 | r2 = r7;
0x0006255e bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00062562 mov r1, r5 | r1 = r5;
0x00062564 mov r0, r4 | r0 = r4;
0x00062566 bl 0x62484 | fcn_00062484 (r0, r1, r2, r3);
| label_0:
0x0006256a movs r0, 1 | r0 = 1;
| do {
0x0006256c ldr r2, [pc, 0xa4] |
0x0006256e ldr r3, [pc, 0x98] | r3 = *(0x6260a);
0x00062570 add r2, pc | r2 = 0xc4b88;
0x00062572 ldr r3, [r2, r3] | r3 = *(0xc4b88);
0x00062574 ldr r2, [r3] | r2 = *(0xc4b88);
0x00062576 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00062578 eors r2, r3 | r2 ^= r3;
0x0006257a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006257e bne 0x625fe | goto label_3;
| }
0x00062580 add sp, 0x34 |
0x00062582 pop {r4, r5, r6, r7, pc} |
| label_2:
0x00062584 ldr r1, [pc, 0x90] |
0x00062586 mov r0, r6 | r0 = r6;
0x00062588 add r1, pc | r1 = 0xc4ba4;
0x0006258a bl 0x25e74 | r0 = fcn_00025e74 (r0, r1);
0x0006258e cmp r0, 0 |
0x00062590 beq 0x6256c |
| } while (r0 == 0);
0x00062592 mov r2, r0 | r2 = r0;
0x00062594 mov.w r3, -1 | r3 = -1;
0x00062598 mov r1, r5 | r1 = r5;
0x0006259a mov r0, r4 | r0 = r4;
0x0006259c bl 0x62484 | fcn_00062484 (r0, r1, r2, r3);
0x000625a0 b 0x6256a | goto label_0;
| label_1:
0x000625a2 ldr r6, [pc, 0x78] |
0x000625a4 movs r3, 0 | r3 = 0;
0x000625a6 add.w ip, r0, -1 |
0x000625aa mov r1, r3 | r1 = r3;
0x000625ac add r6, pc | r6 = 0xc4bce;
0x000625ae b 0x625de |
| while (r2 < r2) {
0x000625b0 ubfx r2, r0, 6, 1 | r2 = (r0 >> 6) & ((1 << 1) - 1);
0x000625b4 add.w r2, r2, r2, lsl 3 | r2 += (r2 << 3);
0x000625b8 add r2, r0 | r2 += r0;
0x000625ba lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
0x000625bc and r2, r2, 0xf | r2 &= 0xf;
0x000625c0 add.w r1, r2, r1, lsl 4 | r1 = r2 + (r1 << 4);
0x000625c4 itt mi |
| if (r0 >= r3) {
0x000625c6 addmi r2, sp, 0x30 | r2 += var_30h;
| }
| if (r0 >= r3) {
0x000625c8 addmi r2, r2, r3, asr 1 | r2 += (r3 >> 1);
| }
0x000625cc add.w r3, r3, 1 | r3++;
0x000625d0 and r1, r1, 0xff | r1 &= 0xff;
0x000625d4 it mi |
| if (r0 >= r3) {
0x000625d6 strbmi r1, [r2, -0x2c] | *((r2 - 0x2c)) = r1;
| }
0x000625da cmp r3, 0x50 |
| if (r3 == 0x50) {
0x000625dc beq 0x625fa | goto label_4;
| }
0x000625de ldrb r0, [ip, 1]! | r0 = *((ip += 1));
0x000625e2 adds r2, r6, r0 | r2 = r6 + r0;
0x000625e4 ldrb.w r2, [r2, 0x40] | r2 = *((r2 + 0x40));
0x000625e8 lsls r2, r2, 0x1c | r2 <<= 0x1c;
0x000625ea bmi 0x625b0 |
| }
0x000625ec asrs r3, r3, 1 | r3 >>= 1;
| do {
0x000625ee add r2, sp, 4 | r2 += var_4h;
0x000625f0 mov r1, r5 | r1 = r5;
0x000625f2 mov r0, r4 | r0 = r4;
0x000625f4 bl 0x62484 | fcn_00062484 (r0, r1, r2, r3);
0x000625f8 b 0x6256a | goto label_0;
| label_4:
0x000625fa movs r3, 0x28 | r3 = 0x28;
0x000625fc b 0x625ee |
| } while (1);
| label_3:
0x000625fe blx 0x6430 | fcn_00006430 ();
0x00062602 nop |
0x00062604 ldrb r6, [r4, 1] | r6 = *((r4 + 1));
0x00062606 movs r0, r1 | r0 = r1;
0x00062608 lsls r4, r6, 8 | r4 = r6 << 8;
0x0006260a movs r0, r0 |
0x0006260c movs r0, 0x82 | r0 = 0x82;
0x0006260e movs r7, r0 | r7 = r0;
0x00062610 lsls r2, r0, 0xb | r2 = r0 << 0xb;
0x00062612 movs r7, r0 | r7 = r0;
0x00062614 ldrb r0, [r5] | r0 = *(r5);
0x00062616 movs r0, r1 | r0 = r1;
0x00062618 movs r0, 0x38 | r0 = 0x38;
0x0006261a movs r7, r0 | r7 = r0;
0x0006261c ldr r0, [sp, 0x1a0] | r0 = *(arg_1a0h);
0x0006261e movs r7, r0 | r7 = r0;
0x00062620 push {r4, r5, r6, lr} |
0x00062622 mov r5, r1 | r5 = r1;
0x00062624 ldr r1, [pc, 0x20] |
0x00062626 mov r4, r0 | r4 = r0;
0x00062628 mov r6, r2 | r6 = r2;
0x0006262a movs r0, 8 | r0 = 8;
0x0006262c mov r2, r4 | r2 = r4;
0x0006262e add r1, pc | r1 = 0xc4c7a;
0x00062630 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x00062634 ldr r1, [pc, 0x14] |
0x00062636 mov r3, r6 | r3 = r6;
0x00062638 mov r2, r5 | r2 = r5;
0x0006263a mov r0, r4 | r0 = r4;
0x0006263c pop.w {r4, r5, r6, lr} |
0x00062640 add r1, pc | r1 = 0xc4c90;
0x00062642 b.w 0x62484 | return void (*0x62484)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x62714 */
| #include <stdint.h>
|
; (fcn) fcn.00062714 () | void fcn_00062714 (uint32_t arg1, uint32_t arg2) {
| int16_t var_3h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_104h;
| r0 = arg1;
| r1 = arg2;
0x00062714 ldr r2, [pc, 0x238] |
0x00062716 cmp r1, 0 |
0x00062718 it ne |
| if (r1 != 0) {
0x0006271a cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x0006271c ldr r3, [pc, 0x234] | r3 = *(0x62954);
0x0006271e push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00062722 sub sp, 0x108 |
0x00062724 add r2, pc | r2 = 0xc5078;
0x00062726 ldr r4, [pc, 0x230] |
0x00062728 mov r6, r0 | r6 = r0;
0x0006272a mov sl, r1 | sl = r1;
0x0006272c ldr r3, [r2, r3] |
0x0006272e it le |
| if (r1 > 0) {
0x00062730 movle r5, 1 | r5 = 1;
| }
0x00062732 add r4, pc | r4 = 0xc5090;
0x00062734 it gt |
| if (r1 <= 0) {
0x00062736 movgt r5, 0 | r5 = 0;
| }
0x00062738 ldr r3, [r3] | r3 = *(0xc5078);
0x0006273a str r3, [sp, 0x104] | var_104h = r3;
0x0006273c mov.w r3, 0 | r3 = 0;
0x00062740 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x00062742 cmp r3, 0 |
| if (r3 == 0) {
0x00062744 beq.w 0x628f2 | goto label_5;
| }
0x00062748 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0006274a movs r0, 5 | r0 = 5;
0x0006274c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0006274e mov r7, r0 | r7 = r0;
0x00062750 cmp r0, 0 |
| if (r0 == 0) {
0x00062752 beq.w 0x628f2 | goto label_5;
| }
0x00062756 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00062758 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0006275a cmp r5, 0 |
| if (r5 != 0) {
0x0006275c bne.w 0x628ca | goto label_6;
| }
| label_2:
0x00062760 ldr.w r8, [pc, 0x1f8] |
0x00062764 add r8, pc | r8 = 0xc50c4;
0x00062766 ldrb.w r4, [r8, 0x310] | r4 = *((r8 + 0x310));
0x0006276a cmp r4, 0 |
| if (r4 == 0) {
0x0006276c beq 0x627fa | goto label_7;
| }
0x0006276e ldrb.w r4, [r8, 0x312] | r4 = *((r8 + 0x312));
0x00062772 ldrb.w r0, [r8, 0x311] | r0 = *((r8 + 0x311));
| label_0:
0x00062776 ldr.w lr, [pc, 0x1e8] |
0x0006277a mov r1, sl | r1 = sl;
0x0006277c rsb.w sb, r1, 1 | sb = 1 - r1;
0x00062780 add sl, r6 | sl += r6;
0x00062782 add sb, r0 | sb += r0;
0x00062784 add lr, pc | lr = 0xc50ea;
| do {
0x00062786 add.w r3, r1, sb | r3 = r1 + sb;
0x0006278a uxtb r3, r3 | r3 = (int8_t) r3;
0x0006278c add r3, lr | r3 += lr;
0x0006278e ldrb.w ip, [r3, 0x313] | ip = *((r3 + 0x313));
0x00062792 add r4, ip | r4 += ip;
0x00062794 uxtb r4, r4 | r4 = (int8_t) r4;
0x00062796 add.w r5, lr, r4 | r5 = lr + r4;
0x0006279a ldrb.w r8, [r5, 0x313] | r8 = *((r5 + 0x313));
0x0006279e strb.w r8, [r3, 0x313] | *((r3 + 0x313)) = r8;
0x000627a2 strb.w ip, [r5, 0x313] | *((r5 + 0x313)) = ip;
0x000627a6 ldrb.w r2, [r3, 0x313] | r2 = *((r3 + 0x313));
0x000627aa add r2, ip | r2 += ip;
0x000627ac uxtb r2, r2 | r2 = (int8_t) r2;
0x000627ae add r2, lr | r2 += lr;
0x000627b0 ldrb.w r2, [r2, 0x313] | r2 = *((r2 + 0x313));
0x000627b4 strb r2, [r1], 1 | *(r1) = r2;
| r1++;
0x000627b8 cmp r1, sl |
0x000627ba bne 0x62786 |
| } while (r1 != sl);
0x000627bc add r0, r6 | r0 += r6;
0x000627be strb.w r8, [r3, 0x313] | *((r3 + 0x313)) = r8;
0x000627c2 strb.w r4, [lr, 0x312] | *((lr + 0x312)) = r4;
0x000627c6 strb.w ip, [r5, 0x313] | *((r5 + 0x313)) = ip;
0x000627ca strb.w r0, [lr, 0x311] | *((lr + 0x311)) = r0;
0x000627ce cmp r7, 0 |
| if (r7 == 0) {
0x000627d0 beq.w 0x62904 | goto label_8;
| }
0x000627d4 ldr r2, [pc, 0x18c] |
0x000627d6 ldr r3, [pc, 0x17c] | r3 = *(0x62956);
0x000627d8 add r2, pc | r2 = 0xc5140;
0x000627da ldr r3, [r2, r3] | r3 = *(0xc5140);
0x000627dc ldr r2, [r3] | r2 = *(0xc5140);
0x000627de ldr r3, [sp, 0x104] | r3 = var_104h;
0x000627e0 eors r2, r3 | r2 ^= r3;
0x000627e2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000627e6 bne.w 0x628ee | goto label_3;
| }
0x000627ea ldr r3, [pc, 0x17c] |
0x000627ec mov r0, r7 | r0 = r7;
0x000627ee add r3, pc |
0x000627f0 ldr r3, [r3, 0x58] | r3 = *(0xc51b4);
| label_1:
0x000627f2 add sp, 0x108 |
0x000627f4 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000627f8 bx r3 | return uint32_t (*r3)() ();
| label_7:
0x000627fa mov r0, r4 | r0 = r4;
0x000627fc bl 0x62650 | fcn_00062650 (r0);
0x00062800 strh.w r4, [r8, 0x311] | *((r8 + 0x311)) = r4;
0x00062804 cmp r0, 0 |
| if (r0 == 0) {
0x00062806 beq.w 0x6291e | goto label_9;
| }
0x0006280a ldr r2, [pc, 0x160] |
0x0006280c add r2, pc | r2 = 0xc517e;
0x0006280e ldr.w r5, [r2, 0x114] | r5 = *(0xc5292);
0x00062812 cmp r5, 0 |
| if (r5 != 0) {
0x00062814 bne.w 0x6292e | goto label_10;
| }
0x00062818 ldr r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x0006281a add r2, sp, 4 | r2 += var_4h;
0x0006281c mov.w r1, 0x100 | r1 = 0x100;
0x00062820 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x00062822 ldrb.w r4, [r8, 0x312] | r4 = *((r8 + 0x312));
0x00062826 ldrb.w r0, [r8, 0x311] | r0 = *((r8 + 0x311));
| label_4:
0x0006282a ldr r2, [pc, 0x144] |
0x0006282c vmov.i32 q2, 0x10 | __asm ("vmov.i32 q2, 0x10");
0x00062830 vmov.i32 q3, 4 | __asm ("vmov.i32 q3, 4");
0x00062834 add r2, pc | r2 = 0xc51aa;
0x00062836 vmov.i32 q15, 8 | __asm ("vmov.i32 q15, 8");
0x0006283a vmov.i32 q14, 0xc | __asm ("vmov.i32 q14, 0xc");
0x0006283e add.w r8, r2, 0x310 | r8 = r2 + 0x310;
0x00062842 addw r3, r2, 0x313 | __asm ("addw r3, r2, 0x313");
0x00062846 vldr d18, [pc, 0xf8] | __asm ("vldr d18, [0x00062944]");
0x0006284a vldr d19, [pc, 0xfc] | __asm ("vldr d19, [0x0006294c]");
0x0006284e addw r2, r2, 0x413 | __asm ("addw r2, r2, 0x413");
| do {
0x00062852 vorr q8, q9, q9 | __asm ("vorr q8, q9, q9");
0x00062856 vadd.i32 q9, q9, q2 | __asm ("vadd.i32 q9, q9, q2");
0x0006285a vadd.i32 q10, q8, q3 | __asm ("vadd.i32 q10, q8, q3");
0x0006285e vadd.i32 q13, q8, q15 | __asm ("vadd.i32 q13, q8, q15");
0x00062862 vadd.i32 q12, q8, q14 | __asm ("vadd.i32 q12, q8, q14");
0x00062866 vmovn.i32 d22, q8 | __asm ("vmovn.i32 d22, q8");
0x0006286a vmovn.i32 d23, q10 | __asm ("vmovn.i32 d23, q10");
0x0006286e vmovn.i32 d20, q13 | __asm ("vmovn.i32 d20, q13");
0x00062872 vmovn.i32 d21, q12 | __asm ("vmovn.i32 d21, q12");
0x00062876 vmovn.i16 d16, q11 | __asm ("vmovn.i16 d16, q11");
0x0006287a vmovn.i16 d17, q10 | __asm ("vmovn.i16 d17, q10");
0x0006287e vst1.8 {d16, d17}, [r3]! | __asm ("vst1.8 {d16, d17}, [r3]!");
0x00062882 cmp r2, r3 |
0x00062884 bne 0x62852 |
| } while (r2 != r3);
0x00062886 ldr.w lr, [pc, 0xec] |
0x0006288a add.w r8, r8, 0x102 | r8 += 0x102;
0x0006288e add.w ip, sp, 3 |
0x00062892 add lr, pc | lr = 0xc520c;
0x00062894 addw r2, lr, 0x312 | __asm ("addw r2, lr, 0x312");
| do {
0x00062898 ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x0006289c ldrb r3, [ip, 1]! | r3 = var_4h;
0x000628a0 cmp r2, r8 |
0x000628a2 add r3, r1 | r3 += r1;
0x000628a4 add r3, r4 | r3 += r4;
0x000628a6 uxtb r4, r3 | r4 = (int8_t) r3;
0x000628a8 add.w r3, lr, r4 | r3 = lr + r4;
0x000628ac ldrb.w sb, [r3, 0x313] | sb = *((r3 + 0x313));
0x000628b0 strb.w r1, [r3, 0x313] | *((r3 + 0x313)) = r1;
0x000628b4 strb.w sb, [r2] | *(r2) = sb;
0x000628b8 bne 0x62898 |
| } while (r2 != r8);
0x000628ba strb.w r1, [r3, 0x313] | *((r3 + 0x313)) = r1;
0x000628be movs r3, 1 | r3 = 1;
0x000628c0 strb.w sb, [lr, 0x412] | *((lr + 0x412)) = sb;
0x000628c4 strb.w r3, [lr, 0x310] | *((lr + 0x310)) = r3;
0x000628c8 b 0x62776 | goto label_0;
| label_6:
0x000628ca ldr r3, [pc, 0xac] |
0x000628cc movs r2, 0 | r2 = 0;
0x000628ce add r3, pc | r3 = 0xc524c;
0x000628d0 strb.w r2, [r3, 0x310] | *((r3 + 0x310)) = r2;
0x000628d4 ldr r2, [pc, 0xa4] |
0x000628d6 ldr r3, [pc, 0x7c] | r3 = *(0x62956);
0x000628d8 add r2, pc | r2 = 0xc5258;
0x000628da ldr r3, [r2, r3] | r3 = *(0xc5258);
0x000628dc ldr r2, [r3] | r2 = *(0xc5258);
0x000628de ldr r3, [sp, 0x104] | r3 = var_104h;
0x000628e0 eors r2, r3 | r2 ^= r3;
0x000628e2 mov.w r3, 0 | r3 = 0;
0x000628e6 itt eq |
| if (r2 != r3) {
0x000628e8 ldreq r3, [r4, 0x58] | r3 = *((r4 + 0x58));
| }
| if (r2 == r3) {
0x000628ea moveq r0, r7 | r0 = r7;
| goto label_11;
| }
| if (r2 == r3) {
| label_11:
0x000628ec beq 0x627f2 | goto label_1;
| }
| label_3:
0x000628ee blx 0x6430 | fcn_00006430 ();
| label_5:
0x000628f2 movs r7, 0 | r7 = 0;
0x000628f4 cmp r5, 0 |
| if (r5 == 0) {
0x000628f6 beq.w 0x62760 | goto label_2;
| }
0x000628fa ldr r3, [pc, 0x84] |
0x000628fc movs r2, 0 | r2 = 0;
0x000628fe add r3, pc | r3 = 0xc5284;
0x00062900 strb.w r2, [r3, 0x310] | *((r3 + 0x310)) = r2;
| label_8:
0x00062904 ldr r2, [pc, 0x7c] |
0x00062906 ldr r3, [pc, 0x4c] | r3 = *(0x62956);
0x00062908 add r2, pc | r2 = 0xc5290;
0x0006290a ldr r3, [r2, r3] | r3 = *(0xc5290);
0x0006290c ldr r2, [r3] | r2 = *(0xc5290);
0x0006290e ldr r3, [sp, 0x104] | r3 = var_104h;
0x00062910 eors r2, r3 | r2 ^= r3;
0x00062912 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00062916 bne 0x628ee | goto label_3;
| }
0x00062918 add sp, 0x108 |
0x0006291a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x0006291e mov.w r2, 0x100 | r2 = 0x100;
0x00062922 mov r1, r4 | r1 = r4;
0x00062924 add r0, sp, 4 | r0 += var_4h;
0x00062926 blx 0x62ec | fcn_000062ec ();
| do {
0x0006292a movs r0, 0 | r0 = 0;
0x0006292c b 0x6282a | goto label_4;
| label_10:
0x0006292e movs r2, 0xfc | r2 = 0xfc;
0x00062930 mov r1, r4 | r1 = r4;
0x00062932 add r0, sp, 8 | r0 += var_8h;
0x00062934 blx 0x62ec | fcn_000062ec ();
0x00062938 str r5, [sp, 4] | var_4h = r5;
0x0006293a b 0x6292a |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x629c4 */
| #include <stdint.h>
|
; (fcn) fcn.000629c4 () | void fcn_000629c4 (int16_t arg_0h, int16_t arg_57h, int16_t arg_58h, int16_t arg1, int16_t arg2, arithmetic arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000629c4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000629c8 mov sl, r2 | sl = r2;
0x000629ca ldr.w r2, [pc, 0x424] |
0x000629ce mov fp, r3 |
0x000629d0 sub sp, 0x64 |
0x000629d2 mov sb, r0 | sb = r0;
0x000629d4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000629d8 ldr.w r3, [pc, 0x418] | r3 = *(0x62df4);
0x000629dc add r2, pc | r2 = 0xc57d2;
0x000629de vstr d16, [sp, 0x48] | __asm ("vstr d16, [sp, 0x48]");
0x000629e2 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x000629e6 ldr r3, [r2, r3] |
0x000629e8 ldr r3, [r3] | r3 = *(0xc57d2);
0x000629ea str r3, [sp, 0x5c] | var_5ch = r3;
0x000629ec mov.w r3, 0 | r3 = 0;
0x000629f0 str r1, [sp, 0x14] | var_14h = r1;
0x000629f2 cmp r1, 0 |
| if (r1 == 0) {
0x000629f4 beq.w 0x62d60 | goto label_20;
| }
0x000629f8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000629fa ldr r4, [r3] | r4 = *(r3);
0x000629fc add.w r5, r4, r4, lsl 1 | r5 = r4 + (r4 << 1);
0x00062a00 lsls r5, r5, 2 | r5 <<= 2;
0x00062a02 cmp r0, 0 |
| if (r0 == 0) {
0x00062a04 beq.w 0x62c12 | goto label_21;
| }
0x00062a08 mov r2, r5 | r2 = r5;
0x00062a0a movs r3, 0 | r3 = 0;
0x00062a0c bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x00062a10 str r0, [sp, 0x34] | var_34h = r0;
| label_4:
0x00062a12 ldr r3, [sp, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x00062a14 cbz r3, 0x62a20 |
0x00062a16 mov r2, r5 | r2 = r5;
0x00062a18 movs r1, 0 | r1 = 0;
0x00062a1a mov r0, r3 | r0 = r3;
0x00062a1c blx 0x62ec | fcn_000062ec ();
| }
0x00062a20 movw r3, 0x7fff | r3 = 0x7fff;
0x00062a24 cmp r3, r4 |
0x00062a26 it ge |
| if (r3 < r4) {
0x00062a28 movge r3, r4 | r3 = r4;
| }
0x00062a2a cmp r4, 0 |
0x00062a2c strh.w r3, [sl] | *(sl) = r3;
0x00062a30 str r3, [sp, 0x2c] | var_2ch = r3;
0x00062a32 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00062a34 str.w r3, [fp] | __asm ("str.w r3, [fp]");
| if (r4 <= 0) {
0x00062a38 ble.w 0x62dc8 | goto label_22;
| }
0x00062a3c ldr r5, [pc, 0x3b8] |
0x00062a3e add.w r8, r3, 0xc | r8 = r3 + 0xc;
0x00062a42 ldr r6, [pc, 0x3b8] |
0x00062a44 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00062a46 ldr r7, [pc, 0x3b8] |
0x00062a48 add r5, pc | r5 = 0xc5844;
0x00062a4a ldr r2, [pc, 0x3b8] |
0x00062a4c add r6, pc | r6 = 0xc584e;
0x00062a4e adds r3, 8 | r3 += 8;
0x00062a50 strd sl, fp, [sp, 0x38] | __asm ("strd sl, fp, [var_0hx38]");
0x00062a54 str r3, [sp, 0xc] | var_ch = r3;
0x00062a56 mov fp, sb |
0x00062a58 add r7, pc | r7 = 0xc585e;
0x00062a5a mov sb, r5 | sb = r5;
0x00062a5c movs r3, 1 | r3 = 1;
0x00062a5e mov r5, r6 | r5 = r6;
0x00062a60 add r2, pc | r2 = 0xc586a;
0x00062a62 str r2, [sp, 0x30] | var_30h = r2;
| label_0:
0x00062a64 ldrb.w r6, [fp, 0x57] | r6 = *(arg_57h);
0x00062a68 subs r2, r3, 1 | r2 = r3 - 1;
0x00062a6a str r2, [sp, 0x18] | var_18h = r2;
0x00062a6c cmp r6, 0 |
| if (r6 != 0) {
0x00062a6e bne.w 0x62d58 | goto label_23;
| }
0x00062a72 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00062a74 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00062a76 cmp r1, 0 |
| if (r1 == 0) {
0x00062a78 beq.w 0x62cee | goto label_24;
| }
0x00062a7c ldr r2, [sp, 0x14] | r2 = var_14h;
0x00062a7e add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x00062a82 ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x00062a84 lsls r4, r2, 0x1e | r4 = r2 << 0x1e;
| if (r4 != r2) {
0x00062a86 bne.w 0x62cee | goto label_24;
| }
| label_12:
0x00062a8a ldr.w ip, [pc, 0x37c] |
0x00062a8e add.w lr, r1, -1 | lr = r1 + -1;
0x00062a92 mov r4, lr | r4 = lr;
0x00062a94 add ip, pc | ip = 0xc58a2;
| do {
| label_5:
0x00062a96 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x00062a9a ldrb r0, [ip], 1 | r0 = *(ip);
| ip++;
0x00062a9e cmp r2, r0 |
| if (r2 == r0) {
0x00062aa0 beq.w 0x62c1e | goto label_25;
| }
0x00062aa4 add r2, sb | r2 += sb;
0x00062aa6 add r0, sb | r0 += sb;
0x00062aa8 ldrb.w sl, [r2, 0x140] | sl = *((r2 + 0x140));
0x00062aac ldrb.w r2, [r0, 0x140] | r2 = *((r0 + 0x140));
0x00062ab0 cmp sl, r2 |
0x00062ab2 beq 0x62a96 |
| } while (sl == r2);
0x00062ab4 ldr r4, [pc, 0x354] |
0x00062ab6 add r4, pc | r4 = 0xc58c6;
| do {
| label_7:
0x00062ab8 ldrb r2, [lr, 1]! | r2 = *((lr += 1));
0x00062abc ldrb r0, [r4], 1 | r0 = *(r4);
| r4++;
0x00062ac0 cmp r2, r0 |
| if (r2 == r0) {
0x00062ac2 beq.w 0x62c36 | goto label_26;
| }
0x00062ac6 add r2, r5 | r2 += r5;
0x00062ac8 add r0, r5 | r0 += r5;
0x00062aca ldrb.w ip, [r2, 0x140] | ip = *((r2 + 0x140));
0x00062ace ldrb.w r2, [r0, 0x140] | r2 = *((r0 + 0x140));
0x00062ad2 cmp ip, r2 |
0x00062ad4 beq 0x62ab8 |
| } while (ip == r2);
0x00062ad6 mov r0, fp | r0 = fp;
0x00062ad8 str r3, [sp, 0x10] | var_10h = r3;
0x00062ada bl 0x392f0 | fcn_000392f0 (r0, r1);
0x00062ade ldr r3, [sp, 0x10] | r3 = var_10h;
0x00062ae0 mov r4, r0 | r4 = r0;
| label_6:
0x00062ae2 movs r2, 0 | r2 = 0;
0x00062ae4 str r2, [sp, 0x44] | var_44h = r2;
0x00062ae6 cmp r4, 0 |
| if (r4 == 0) {
0x00062ae8 beq 0x62b5e | goto label_27;
| }
0x00062aea ldr r2, [pc, 0x324] |
0x00062aec add.w sl, sp, 0x48 | sl += var_48h;
0x00062af0 ldr r1, [pc, 0x320] |
0x00062af2 str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x00062af6 add r2, pc | r2 = 0xc590c;
0x00062af8 str r5, [sp, 0x24] | var_24h = r5;
0x00062afa add r1, pc | r1 = 0xc5912;
0x00062afc mov r5, r2 | r5 = r2;
0x00062afe mov sb, r1 | sb = r1;
0x00062b00 str r3, [sp, 0x1c] | var_1ch = r3;
0x00062b02 str r6, [sp, 0x28] | var_28h = r6;
| do {
| label_2:
0x00062b04 movs r2, 0 | r2 = 0;
0x00062b06 mov r1, r4 | r1 = r4;
0x00062b08 mov r0, sl | r0 = sl;
0x00062b0a bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x00062b0e ldr r2, [r0, 8] | r2 = var_50h;
0x00062b10 cmp r2, 0 |
| if (r2 == 0) {
0x00062b12 beq.w 0x62c72 | goto label_28;
| }
0x00062b16 ldrsb.w r2, [r2, 9] | r2 = *((r2 + 9));
0x00062b1a mov r0, r4 | r0 = r4;
0x00062b1c cmp r2, 0 |
0x00062b1e ittt lt |
| if (r2 < 0) {
0x00062b20 ldrhlt r2, [r8, -0x2] | __asm ("ldrhlt r2, [r8, -0x2]");
| }
| if (r2 >= 0) {
0x00062b24 orrlt r2, r2, 0x400 | r2 |= 0x400;
| }
| if (r2 < 0) {
0x00062b28 strh r2, [r8, -0x2] | *((r8 - 0x2)) = r2;
| }
0x00062b2c blx 0x65dc | r0 = strcmp (r0, r1);
0x00062b30 bics r0, r0, 0xc0000000 | __asm ("bics r0, r0, 0xc0000000");
0x00062b34 it eq |
| if (r2 != 0) {
0x00062b36 moveq r2, r0 | r2 = r0;
| }
| if (r2 != 0) {
0x00062b38 bne.w 0x62c3e | goto label_29;
| }
| label_9:
0x00062b3c ldr r6, [sp, 0x44] | r6 = var_44h;
0x00062b3e mov r3, r4 | r3 = r4;
0x00062b40 mov r1, r5 | r1 = r5;
0x00062b42 mov r0, fp | r0 = fp;
0x00062b44 adds r6, 1 | r6++;
0x00062b46 str r6, [sp] | *(sp) = r6;
0x00062b48 str r6, [sp, 0x44] | var_44h = r6;
0x00062b4a bl 0x4a320 | fcn_0004a320 (r0);
0x00062b4e cmp r6, 3 |
0x00062b50 mov r4, r0 | r4 = r0;
| if (r6 > 3) {
0x00062b52 bhi 0x62bea | goto label_30;
| }
| label_1:
0x00062b54 cmp r4, 0 |
0x00062b56 bne 0x62b04 |
| } while (r4 != 0);
| label_3:
0x00062b58 ldrd r3, sb, [sp, 0x1c] | __asm ("ldrd r3, sb, [var_20h]");
0x00062b5c ldr r5, [sp, 0x24] | r5 = var_24h;
| label_27:
0x00062b5e ldrd r2, r1, [sp, 0x14] | __asm ("ldrd r2, r1, [var_14h]");
0x00062b62 str r4, [r8, -0xc] | *((r8 - 0xc)) = r4;
0x00062b66 add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x00062b6a movs r1, 0 | r1 = 0;
0x00062b6c strb r1, [r8, -0x5] | *((r8 - 0x5)) = r1;
0x00062b70 ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x00062b72 lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
| if (r1 < r2) {
0x00062b74 bpl 0x62b82 |
0x00062b76 ldrh r2, [r8, -0x2] | r2 = *((r8 - 0x2));
0x00062b7a orr r2, r2, 0x400 | r2 |= 0x400;
0x00062b7e strh r2, [r8, -0x2] | *((r8 - 0x2)) = r2;
| }
| label_11:
0x00062b82 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00062b84 add.w r8, r8, 0xc | r8 += 0xc;
0x00062b88 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00062b8a adds r3, 1 | r3++;
0x00062b8c adds r2, 0x10 | r2 += 0x10;
0x00062b8e str r2, [sp, 0xc] | var_ch = r2;
0x00062b90 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00062b92 cmp r2, r1 |
| if (r2 > r1) {
0x00062b94 bgt.w 0x62a64 | goto label_0;
| }
0x00062b98 mov sb, fp | sb = fp;
0x00062b9a ldrd sl, fp, [sp, 0x38] | __asm ("ldrd sl, fp, [var_38h]");
0x00062b9e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00062ba0 str r3, [sp, 0x18] | var_18h = r3;
| label_15:
0x00062ba2 ldr r4, [sp, 0x50] | r4 = var_50h;
0x00062ba4 movs r5, 0 | r5 = 0;
0x00062ba6 ldr r0, [sp, 0x54] | r0 = var_54h;
0x00062ba8 str r5, [sp, 0x50] | var_50h = r5;
0x00062baa bl 0x26dbc | fcn_00026dbc (r0);
0x00062bae str r5, [sp, 0x54] | var_54h = r5;
0x00062bb0 str r5, [sp, 0x48] | var_48h = r5;
| if (r4 == 0) {
0x00062bb2 cbz r4, 0x62bc0 | goto label_31;
| }
| do {
0x00062bb4 mov r0, r4 | r0 = r4;
0x00062bb6 ldr r4, [r4] | r4 = *(r4);
0x00062bb8 bl 0x26dbc | fcn_00026dbc (r0);
0x00062bbc cmp r4, 0 |
0x00062bbe bne 0x62bb4 |
| } while (r4 != 0);
| label_31:
0x00062bc0 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x00062bc4 movs r5, 0 | r5 = 0;
0x00062bc6 str r5, [sp, 0x4c] | var_4ch = r5;
0x00062bc8 cmp r3, 0 |
| if (r3 != 0) {
0x00062bca bne.w 0x62d96 | goto label_32;
| }
| label_16:
0x00062bce ldr r2, [pc, 0x248] |
0x00062bd0 ldr r3, [pc, 0x220] | r3 = *(0x62df4);
0x00062bd2 add r2, pc | r2 = 0xc59f0;
0x00062bd4 ldr r3, [r2, r3] | r3 = *(0xc59f0);
0x00062bd6 ldr r2, [r3] | r2 = *(0xc59f0);
0x00062bd8 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00062bda eors r2, r3 | r2 ^= r3;
0x00062bdc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00062be0 bne.w 0x62de4 | goto label_33;
| }
0x00062be4 add sp, 0x64 |
0x00062be6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x00062bea ldr.w r2, [sb, 0xd0] | r2 = *((sb + 0xd0));
0x00062bee cmp r2, 0 |
| if (r2 != 0) {
0x00062bf0 bne 0x62c6c | goto label_34;
| }
0x00062bf2 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00062bf6 cmp r0, 0 |
| if (r0 != 0) {
0x00062bf8 bne 0x62b54 | goto label_1;
| }
0x00062bfa bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00062bfe cmp r0, 0 |
| if (r0 != 0) {
0x00062c00 bne 0x62b54 | goto label_1;
| }
| label_10:
0x00062c02 add r1, sp, 0x44 | r1 += var_44h;
0x00062c04 movs r0, 4 | r0 = 4;
0x00062c06 bl 0x62714 | fcn_00062714 (r0, r1);
0x00062c0a cmp r4, 0 |
| if (r4 != 0) {
0x00062c0c bne.w 0x62b04 | goto label_2;
| }
0x00062c10 b 0x62b58 | goto label_3;
| label_21:
0x00062c12 mov r0, r5 | r0 = r5;
0x00062c14 mov r1, sb | r1 = sb;
0x00062c16 bl 0x28c3c | fcn_00028c3c (r0);
0x00062c1a str r0, [sp, 0x34] | var_34h = r0;
0x00062c1c b 0x62a12 | goto label_4;
| label_25:
0x00062c1e cmp r2, 0 |
| if (r2 != 0) {
0x00062c20 bne.w 0x62a96 | goto label_5;
| }
| label_8:
0x00062c24 mov r2, r3 | r2 = r3;
0x00062c26 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00062c28 mov r0, fp | r0 = fp;
0x00062c2a str r3, [sp, 0x10] | var_10h = r3;
0x00062c2c bl 0x4a320 | fcn_0004a320 (r0);
0x00062c30 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00062c32 mov r4, r0 | r4 = r0;
0x00062c34 b 0x62ae2 | goto label_6;
| label_26:
0x00062c36 cmp r2, 0 |
| if (r2 != 0) {
0x00062c38 bne.w 0x62ab8 | goto label_7;
| }
0x00062c3c b 0x62c24 | goto label_8;
| label_29:
0x00062c3e subs r2, r0, 1 | r2 = r0 - 1;
0x00062c40 it ne |
| if (r2 == r0) {
0x00062c42 addne r6, r4, r0 | r6 = r4 + r0;
| }
| if (r2 != r0) {
0x00062c44 bne 0x62c4c | goto label_35;
| }
0x00062c46 b 0x62c62 | goto label_36;
| do {
0x00062c48 subs r2, 1 | r2--;
| if (r2 == 1) {
0x00062c4a beq 0x62c62 | goto label_36;
| }
| label_35:
0x00062c4c ldrb r1, [r6, -0x1]! | r1 = *((r6 -= 0x1));
0x00062c50 adds r3, r7, r1 | r3 = r7 + r1;
0x00062c52 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00062c56 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x00062c58 bmi 0x62c48 |
| } while (r3 < r3);
0x00062c5a cmp r1, 0x3a |
0x00062c5c it ne |
| if (r1 == 0x3a) {
0x00062c5e movne r2, r0 | r2 = r0;
| }
0x00062c60 b 0x62b3c | goto label_9;
| label_36:
0x00062c62 ldrb r1, [r4] | r1 = *(r4);
0x00062c64 cmp r1, 0x3a |
0x00062c66 it ne |
| if (r1 == 0x3a) {
0x00062c68 movne r2, r0 | r2 = r0;
| }
0x00062c6a b 0x62b3c | goto label_9;
| label_34:
0x00062c6c dmb ish | __asm ("dmb ish");
0x00062c70 b 0x62c02 | goto label_10;
| label_28:
0x00062c72 str r4, [r8, -0xc] | *((r8 - 0xc)) = r4;
0x00062c76 ldrb r2, [r4] | r2 = *(r4);
0x00062c78 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00062c7a ldr r6, [sp, 0x28] | r6 = var_28h;
0x00062c7c ldrd sb, r5, [sp, 0x20] | __asm ("ldrd sb, r5, [var_20h]");
0x00062c80 cmp r2, 0 |
| if (r2 == 0) {
0x00062c82 beq 0x62d54 | goto label_37;
| }
0x00062c84 ldr r0, [pc, 0x194] |
0x00062c86 mov r1, r4 | r1 = r4;
0x00062c88 add r0, pc | r0 = 0xc5aa8;
| do {
0x00062c8a add r2, r0 | r2 += r0;
0x00062c8c ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x00062c90 add r6, r2 | r6 += r2;
0x00062c92 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x00062c96 uxtb r6, r6 | r6 = (int8_t) r6;
0x00062c98 cmp r2, 0 |
0x00062c9a bne 0x62c8a |
| } while (r2 != 0);
| label_14:
0x00062c9c ldrd r2, r1, [sp, 0x14] | __asm ("ldrd r2, r1, [var_14h]");
0x00062ca0 mov r0, sl | r0 = sl;
0x00062ca2 strb r6, [r8, -0x5] | *((r8 - 0x5)) = r6;
0x00062ca6 add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x00062caa mov r1, r4 | r1 = r4;
0x00062cac ldr r4, [sp, 0xc] | r4 = var_ch;
0x00062cae ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x00062cb0 str r3, [sp, 0x18] | var_18h = r3;
0x00062cb2 lsls r2, r2, 0x1f | r2 <<= 0x1f;
0x00062cb4 ittt mi |
| if (r2 < r2) {
0x00062cb6 ldrhmi r2, [r8, -0x2] | __asm ("ldrhmi r2, [r8, -0x2]");
| }
| if (r2 >= r2) {
0x00062cba orrmi r2, r2, 0x400 | r2 |= 0x400;
| }
| if (r2 < r2) {
0x00062cbe strh r2, [r8, -0x2] | *((r8 - 0x2)) = r2;
| }
0x00062cc2 mov r2, r4 | r2 = r4;
0x00062cc4 bl 0x2df94 | r0 = fcn_0002df94 (r0, r1, r2, r3, r4);
0x00062cc8 cmp r0, r4 |
0x00062cca ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r0 != r4) {
0x00062ccc bne.w 0x62b82 | goto label_11;
| }
0x00062cd0 ldrb.w r2, [fp, 0x57] | r2 = *(arg_57h);
0x00062cd4 cmp r2, 0 |
| if (r2 != 0) {
0x00062cd6 bne.w 0x62b82 | goto label_11;
| }
0x00062cda ldrb.w r2, [fp, 0x58] | r2 = *(arg_58h);
0x00062cde cmp r2, 0 |
| if (r2 != 0) {
0x00062ce0 bne.w 0x62b82 | goto label_11;
| }
0x00062ce4 mov r0, fp | r0 = fp;
0x00062ce6 bl 0x38024 | fcn_00038024 (r0);
0x00062cea ldr r3, [sp, 0x18] | r3 = var_18h;
0x00062cec b 0x62b82 | goto label_11;
| label_24:
0x00062cee ldr r2, [sp, 0xc] | r2 = var_ch;
0x00062cf0 ldr r2, [r2] | r2 = *(r2);
| if (r2 != 0) {
0x00062cf2 cbnz r2, 0x62d04 | goto label_38;
| }
0x00062cf4 b 0x62de8 | goto label_39;
| do {
0x00062cf6 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00062cf8 itet mi |
| if (r0 >= r0) {
0x00062cfa ldrmi r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| }
| if (r0 < r0) {
0x00062cfc ldrpl r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| }
| if (r0 >= r0) {
0x00062cfe ldrmi r2, [r2, 8] | r2 = *((r2 + 8));
| }
0x00062d00 cmp r2, 0 |
| if (r2 == 0) {
0x00062d02 beq 0x62de8 | goto label_39;
| }
| label_38:
0x00062d04 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00062d06 tst.w r0, 0x82000 |
0x00062d0a bne 0x62cf6 |
| } while ((r0 & 0x82000) != 0);
0x00062d0c b 0x62d14 |
| while (r0 == 0x8d) {
0x00062d0e ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00062d10 cmp r2, 0 |
| if (r2 == 0) {
0x00062d12 beq 0x62de8 | goto label_39;
| }
0x00062d14 ldrb r0, [r2] | r0 = *(r2);
0x00062d16 cmp r0, 0x8d |
0x00062d18 beq 0x62d0e |
| }
0x00062d1a cmp r0, 0xa7 |
| if (r0 == 0xa7) {
0x00062d1c beq 0x62d2c | goto label_40;
| }
0x00062d1e cmp r0, 0x3b |
0x00062d20 it eq |
| if (r0 != 0x3b) {
0x00062d22 ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
| label_13:
0x00062d24 cmp r1, 0 |
| if (r1 == 0) {
0x00062d26 beq.w 0x62c24 | goto label_8;
| }
0x00062d2a b 0x62a8a | goto label_12;
| label_40:
0x00062d2c ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00062d2e tst.w r0, 0x3000000 |
| if ((r0 & 0x3000000) != 0) {
0x00062d32 bne 0x62d24 | goto label_13;
| }
0x00062d34 ldr r0, [r2, 0x2c] | r0 = *((r2 + 0x2c));
0x00062d36 cmp r0, 0 |
| if (r0 == 0) {
0x00062d38 beq 0x62d24 | goto label_13;
| }
0x00062d3a ldrsh.w r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x00062d3e cmp r2, 0 |
| if (r2 < 0) {
0x00062d40 blt 0x62d88 | goto label_41;
| }
| label_17:
0x00062d42 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x00062d44 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00062d48 ldr.w r1, [r1, r2, lsl 2] | offset_0 = r2 << 2;
| r1 = *((r1 + offset_0));
0x00062d4c cmp r1, 0 |
| if (r1 == 0) {
0x00062d4e beq.w 0x62c24 | goto label_8;
| }
0x00062d52 b 0x62a8a | goto label_12;
| label_37:
0x00062d54 mov r6, r2 | r6 = r2;
0x00062d56 b 0x62c9c | goto label_14;
| label_23:
0x00062d58 mov sb, fp | sb = fp;
0x00062d5a ldrd sl, fp, [sp, 0x38] | __asm ("ldrd sl, fp, [var_38h]");
0x00062d5e b 0x62ba2 | goto label_15;
| label_20:
0x00062d60 strh.w r1, [sl] | *(sl) = r1;
0x00062d64 mov r0, r1 | r0 = r1;
0x00062d66 str.w r1, [fp] | __asm ("str.w r1, [fp]");
0x00062d6a mov r4, r1 | r4 = r1;
0x00062d6c bl 0x26dbc | fcn_00026dbc (r0);
0x00062d70 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x00062d74 str r4, [sp, 0x4c] | var_4ch = r4;
0x00062d76 cmp r3, 0 |
| if (r3 == 0) {
0x00062d78 beq.w 0x62bce | goto label_16;
| }
| label_18:
0x00062d7c movs r3, 0 | r3 = 0;
0x00062d7e str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00062d82 strh.w r3, [sl] | *(sl) = r3;
0x00062d86 b 0x62bce | goto label_16;
| label_41:
0x00062d88 ldrsh.w r2, [r0, 0x20] | r2 = *((r0 + 0x20));
0x00062d8c cmp r2, 0 |
| if (r2 >= 0) {
0x00062d8e bge 0x62d42 | goto label_17;
| }
0x00062d90 ldr r1, [pc, 0x8c] |
0x00062d92 add r1, pc | r1 = 0xc5bb6;
0x00062d94 b 0x62a8a | goto label_12;
| label_32:
0x00062d96 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x00062d98 cbz r3, 0x62ddc | goto label_42;
| }
0x00062d9a ldr r3, [sp, 0x18] | r3 = var_18h;
0x00062d9c ldr r6, [sp, 0x34] | r6 = var_34h;
0x00062d9e add.w r4, r3, r3, lsl 1 | r4 = r3 + (r3 << 1);
| do {
0x00062da2 ldr.w r1, [r6, r5, lsl 2] | offset_1 = r5 << 2;
| r1 = *((r6 + offset_1));
| if (r1 != 0) {
0x00062da6 cbz r1, 0x62dae |
0x00062da8 mov r0, sb | r0 = sb;
0x00062daa bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00062dae adds r5, 3 | r5 += 3;
0x00062db0 cmp r5, r4 |
0x00062db2 bne 0x62da2 |
| } while (r5 != r4);
| label_19:
0x00062db4 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00062db6 mov r0, sb | r0 = sb;
0x00062db8 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00062dbc movs r3, 0 | r3 = 0;
0x00062dbe str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00062dc2 strh.w r3, [sl] | *(sl) = r3;
0x00062dc6 b 0x62bce | goto label_16;
| label_22:
0x00062dc8 movs r0, 0 | r0 = 0;
0x00062dca bl 0x26dbc | fcn_00026dbc (r0);
0x00062dce movs r3, 0 | r3 = 0;
0x00062dd0 str r3, [sp, 0x4c] | var_4ch = r3;
0x00062dd2 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x00062dd6 cmp r3, 0 |
| if (r3 == 0) {
0x00062dd8 beq.w 0x62bce | goto label_16;
| }
| label_42:
0x00062ddc ldr r3, [sp, 0x34] | r3 = var_34h;
0x00062dde cmp r3, 0 |
| if (r3 == 0) {
0x00062de0 beq 0x62d7c | goto label_18;
| }
0x00062de2 b 0x62db4 | goto label_19;
| label_33:
0x00062de4 blx 0x6430 | fcn_00006430 ();
| label_39:
0x00062de8 movs r3, 0 | r3 = 0;
0x00062dea ldrb r3, [r3] | r3 = *(r3);
0x00062dec udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6340c */
| #include <stdint.h>
|
; (fcn) fcn.0006340c () | void fcn_0006340c (int16_t arg1, int16_t arg2) {
| int16_t var_0h_3;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x0006340c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00063410 mov r4, r1 | r4 = r1;
0x00063412 ldrb.w r3, [r1, 0x2b] | r3 = *((r1 + 0x2b));
0x00063416 sub sp, 0x1c |
0x00063418 mov r5, r0 | r5 = r0;
0x0006341a ldr r1, [pc, 0x200] |
0x0006341c ldr r2, [pc, 0x200] | r2 = *(0x63620);
0x0006341e cmp r3, 1 |
0x00063420 ldr r6, [r0] | r6 = *(r0);
0x00063422 add r1, pc | r1 = 0xc6a44;
0x00063424 ldr r2, [r1, r2] |
0x00063426 ldr r2, [r2] | r2 = imp.atan;
0x00063428 str r2, [sp, 0x14] | var_14h = r2;
0x0006342a mov.w r2, 0 | r2 = 0;
| if (r3 == 1) {
0x0006342e beq.w 0x63546 | goto label_8;
| }
0x00063432 ldrsh.w r7, [r4, 0x22] | r7 = *((r4 + 0x22));
0x00063436 cmp r7, 0 |
0x00063438 it gt |
| if (r7 <= 0) {
0x0006343a movgt r7, 0 | r7 = 0;
| }
| if (r7 > 0) {
0x0006343c bgt 0x63508 | goto label_0;
| }
| if (r7 == 0) {
0x0006343e bne 0x634fc |
0x00063440 ldr r1, [r4, 0x2c] | r1 = *((r4 + 0x2c));
0x00063442 mov r2, r7 | r2 = r7;
0x00063444 mov r0, r6 | r0 = r6;
0x00063446 bl 0x39f48 | r0 = fcn_00039f48 (r0, r1, r2, r3);
0x0006344a mov r8, r0 | r8 = r0;
0x0006344c cmp r0, 0 |
| if (r0 == 0) {
0x0006344e beq 0x63524 | goto label_9;
| }
0x00063450 ldrb.w sb, [r5, 0xd0] | sb = *((r5 + 0xd0));
0x00063454 mov r0, r5 | r0 = r5;
0x00063456 strb.w r7, [r5, 0xd0] | *((r5 + 0xd0)) = r7;
0x0006345a ldr.w r1, [r8, 0x20] | r1 = *((r8 + 0x20));
0x0006345e ldr.w fp, [r5, 0x28] | fp = *((r5 + 0x28));
0x00063462 ldr.w sl, [r5, 0x64] | sl = *((r5 + 0x64));
0x00063466 bl 0x23528 | fcn_00023528 (r0, r1);
0x0006346a ldr.w r3, [r6, 0x130] | r3 = *((r6 + 0x130));
0x0006346e movw r2, 0xffff | r2 = 0xffff;
0x00063472 strh r2, [r4, 0x22] | *((r4 + 0x22)) = r2;
0x00063474 mov r1, r8 | r1 = r8;
0x00063476 strh.w r7, [r6, 0x134] | *((r6 + 0x134)) = r7;
0x0006347a movs r2, 0x40 | r2 = 0x40;
0x0006347c adds r3, 1 | r3++;
0x0006347e mov r0, r5 | r0 = r5;
0x00063480 str.w r3, [r6, 0x130] | __asm ("str.w r3, [r6, 0x130]");
0x00063484 ldr.w r3, [r6, 0x168] | r3 = *((r6 + 0x168));
0x00063488 str.w r7, [r6, 0x168] | __asm ("str.w r7, [r6, 0x168]");
0x0006348c str r3, [sp, 0xc] | var_ch_2 = r3;
0x0006348e bl 0x62e24 | fcn_00062e24 (r0, r1, r2);
0x00063492 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00063494 mov r7, r0 | r7 = r0;
0x00063496 str.w r3, [r6, 0x168] | __asm ("str.w r3, [r6, 0x168]");
0x0006349a str.w fp, [r5, 0x28] | __asm ("str.w fp, [r5, 0x28]");
0x0006349e str.w sl, [r5, 0x64] | __asm ("str.w sl, [r5, 0x64]");
0x000634a2 cmp r0, 0 |
| if (r0 == 0) {
0x000634a4 beq 0x6358e | goto label_10;
| }
0x000634a6 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x000634a8 cmp r1, 0 |
| if (r1 == 0) {
0x000634aa beq 0x63572 | goto label_11;
| }
0x000634ac adds r3, r4, 4 | r3 = r4 + 4;
0x000634ae ldr r0, [r5] | r0 = *(r5);
0x000634b0 add.w r2, r4, 0x22 | r2 = r4 + 0x22;
0x000634b4 bl 0x629c4 | fcn_000629c4 (r0, r1, r2, r3, r4, r5, r6);
0x000634b8 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x000634ba cmp r3, 0 |
| if (r3 == 0) {
0x000634bc beq 0x63596 | goto label_12;
| }
| label_4:
0x000634be ldrsh.w r3, [r4, 0x22] | r3 = *((r4 + 0x22));
| label_6:
0x000634c2 strh r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000634c4 ldr.w r3, [r6, 0x210] | r3 = *((r6 + 0x210));
0x000634c8 cmp r3, 0 |
| if (r3 == 0) {
0x000634ca beq 0x63566 | goto label_13;
| }
| label_2:
0x000634cc mov r1, r7 | r1 = r7;
0x000634ce mov r0, r6 | r0 = r6;
0x000634d0 bl 0x310dc | fcn_000310dc (r0, r1);
| label_3:
0x000634d4 movs r7, 0 | r7 = 0;
| label_5:
0x000634d6 mov r1, r8 | r1 = r8;
0x000634d8 movs r2, 1 | r2 = 1;
0x000634da mov r0, r6 | r0 = r6;
0x000634dc bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
0x000634e0 ldr.w r3, [r6, 0x130] | r3 = *((r6 + 0x130));
0x000634e4 subs r3, 1 | r3--;
0x000634e6 str.w r3, [r6, 0x130] | __asm ("str.w r3, [r6, 0x130]");
0x000634ea cmp r3, 0 |
| if (r3 != 0) {
0x000634ec bne 0x63562 | goto label_14;
| }
0x000634ee ldrh.w r3, [r6, 0x136] | r3 = *((r6 + 0x136));
| label_1:
0x000634f2 strh.w r3, [r6, 0x134] | *((r6 + 0x134)) = r3;
0x000634f6 strb.w sb, [r5, 0xd0] | *((r5 + 0xd0)) = sb;
0x000634fa b 0x63526 | goto label_15;
| }
0x000634fc ldr r1, [pc, 0x124] |
0x000634fe movs r7, 1 | r7 = 1;
0x00063500 ldr r2, [r4] | r2 = *(r4);
0x00063502 add r1, pc | r1 = 0xc6b2a;
0x00063504 bl 0x37f78 | fcn_00037f78 (r0, r1);
| do {
| label_0:
0x00063508 ldr r2, [pc, 0x11c] |
0x0006350a ldr r3, [pc, 0x114] | r3 = *(0x63622);
0x0006350c add r2, pc | r2 = 0xc6b38;
0x0006350e ldr r3, [r2, r3] | r3 = *(0xc6b38);
0x00063510 ldr r2, [r3] | r2 = *(0xc6b38);
0x00063512 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00063514 eors r2, r3 | r2 ^= r3;
0x00063516 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006351a bne 0x63618 | goto label_16;
| }
0x0006351c mov r0, r7 | r0 = r7;
0x0006351e add sp, 0x1c |
0x00063520 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x00063524 movs r7, 1 | r7 = 1;
| label_15:
0x00063526 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x00063528 ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
0x0006352c orr r3, r3, 2 | r3 |= 2;
0x00063530 strh.w r3, [r2, 0x4e] | *((r2 + 0x4e)) = r3;
0x00063534 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x00063538 cmp r3, 0 |
0x0006353a beq 0x63508 |
| } while (r3 == 0);
0x0006353c mov r1, r4 | r1 = r4;
0x0006353e mov r0, r6 | r0 = r6;
0x00063540 bl 0x30cfc | fcn_00030cfc (r0, r1);
0x00063544 b 0x63508 | goto label_0;
| label_8:
0x00063546 ldr r1, [r6, 0x38] | r1 = *((r6 + 0x38));
0x00063548 adds r3, r1, 1 | r3 = r1 + 1;
0x0006354a str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
0x0006354c ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x0006354e cbnz r3, 0x63556 | goto label_17;
| }
0x00063550 b 0x635b6 | goto label_18;
| do {
0x00063552 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
| if (r3 == 0) {
0x00063554 cbz r3, 0x635b6 | goto label_18;
| }
| label_17:
0x00063556 ldr r2, [r3] | r2 = *(r3);
0x00063558 cmp r6, r2 |
0x0006355a bne 0x63552 |
| } while (r6 != r2);
0x0006355c movs r7, 0 | r7 = 0;
| label_7:
0x0006355e str r1, [r6, 0x38] | *((r6 + 0x38)) = r1;
0x00063560 b 0x63508 | goto label_0;
| label_14:
0x00063562 movs r3, 0 | r3 = 0;
0x00063564 b 0x634f2 | goto label_1;
| label_13:
0x00063566 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x00063568 subs r3, 1 | r3--;
0x0006356a str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x0006356c cmp r3, 0 |
| if (r3 == 0) {
0x0006356e beq 0x634cc | goto label_2;
| }
0x00063570 b 0x634d4 | goto label_3;
| label_11:
0x00063572 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x00063574 and r2, r3, 0x62 | r2 = r3 & 0x62;
0x00063578 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0006357a orrs r3, r2 | r3 |= r2;
0x0006357c ldrsh.w r2, [r0, 0x22] | r2 = *((r0 + 0x22));
0x00063580 strh r2, [r4, 0x22] | *((r4 + 0x22)) = r2;
0x00063582 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00063584 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00063586 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00063588 strh r1, [r0, 0x22] | *((r0 + 0x22)) = r1;
0x0006358a str r1, [r0, 4] | *((r0 + 4)) = r1;
0x0006358c b 0x634be | goto label_4;
| label_10:
0x0006358e movs r7, 1 | r7 = 1;
0x00063590 str.w r0, [r4, 0x22] | __asm ("str.w r0, [r4, 0x22]");
0x00063594 b 0x634d6 | goto label_5;
| label_12:
0x00063596 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x0006359a ldr r2, [r3] | r2 = *(r3);
0x0006359c ldrsh.w r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x000635a0 cmp r3, r2 |
| if (r3 != r2) {
0x000635a2 bne 0x634c2 | goto label_6;
| }
0x000635a4 movs r3, 0x40 | r3 = 0x40;
0x000635a6 mov r2, r8 | r2 = r8;
0x000635a8 mov r1, r4 | r1 = r4;
0x000635aa mov r0, r5 | r0 = r5;
0x000635ac bl 0x464f8 | fcn_000464f8 (r0, r1, r2, r3, r4, r5, r6);
0x000635b0 ldrsh.w r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x000635b4 b 0x634c2 | goto label_6;
| label_18:
0x000635b6 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x000635b8 movs r2, 0 | r2 = 0;
0x000635ba add.w r0, r6, 0x180 | r0 = r6 + 0x180;
0x000635be ldr r7, [r3] | r7 = *(r3);
0x000635c0 mov r1, r7 | r1 = r7;
0x000635c2 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x000635c6 ldr r2, [r0, 8] | r2 = *((r0 + 8));
| if (r2 == 0) {
0x000635c8 cbz r2, 0x63604 | goto label_19;
| }
0x000635ca movs r3, 0 | r3 = 0;
0x000635cc add r0, sp, 0x10 | r0 += var_10h_2;
0x000635ce str r3, [sp, 0x10] | var_10h_2 = r3;
0x000635d0 mov r1, r4 | r1 = r4;
0x000635d2 ldr r3, [r2] | r3 = *(r2);
0x000635d4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000635d6 str r0, [sp] | *(sp) = r0;
0x000635d8 mov r0, r6 | r0 = r6;
0x000635da bl 0x4a370 | fcn_0004a370 (r0, r1, r2, r3, r4);
0x000635de ldr r4, [sp, 0x10] | r4 = var_10h_2;
0x000635e0 mov r7, r0 | r7 = r0;
0x000635e2 cbnz r0, 0x635f4 |
| if (r4 != 0) {
| while (1) {
0x000635e4 cbz r4, 0x635ee |
0x000635e6 mov r1, r4 | r1 = r4;
0x000635e8 mov r0, r6 | r0 = r6;
0x000635ea bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000635ee ldr r1, [r6, 0x38] | r1 = *((r6 + 0x38));
0x000635f0 subs r1, 1 | r1--;
0x000635f2 b 0x6355e | goto label_7;
0x000635f4 ldr r1, [pc, 0x34] |
0x000635f6 mov r2, r4 | r2 = r4;
0x000635f8 mov r0, r5 | r0 = r5;
0x000635fa add r1, pc | r1 = 0xc6c2a;
0x000635fc bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00063600 str r7, [r5, 0xc] | *((r5 + 0xc)) = r7;
0x00063602 b 0x635e4 |
| }
| label_19:
0x00063604 ldr r1, [pc, 0x28] |
0x00063606 mov r2, r7 | r2 = r7;
0x00063608 mov r0, r5 | r0 = r5;
0x0006360a movs r7, 1 | r7 = 1;
0x0006360c add r1, pc | r1 = 0xc6c40;
0x0006360e bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00063612 ldr r1, [r6, 0x38] | r1 = *((r6 + 0x38));
0x00063614 subs r1, 1 | r1--;
0x00063616 b 0x6355e | goto label_7;
| label_16:
0x00063618 blx 0x6430 | fcn_00006430 ();
0x0006361c ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x0006361e movs r0, r1 | r0 = r1;
0x00063620 lsls r4, r6, 8 | r4 = r6 << 8;
0x00063622 movs r0, r0 |
0x00063624 asrs r6, r6, 3 | r6 >>= 3;
0x00063626 movs r7, r0 | r7 = r0;
0x00063628 ldr r4, [r1, 8] | r4 = *((r1 + 8));
0x0006362a movs r0, r1 | r0 = r1;
0x0006362c subs r3, 0x76 | r3 -= 0x76;
0x0006362e movs r6, r0 | r6 = r0;
0x00063630 lsrs r0, r3, 0x1f | r0 = r3 >> 0x1f;
0x00063632 movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x63634 */
| #include <stdint.h>
|
; (fcn) fcn.00063634 () | void fcn_00063634 (int16_t arg1) {
| int16_t var_0h_2;
| int16_t var_18h_2;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_3ch;
| int16_t var_44h;
| r0 = arg1;
0x00063634 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00063638 movs r3, 0 | r3 = 0;
0x0006363a sub sp, 0x4c |
0x0006363c ldr.w r6, [r0, 0xf4] | r6 = *(var_0h_2xf4);
0x00063640 mov r5, r0 | r5 = r0;
0x00063642 ldr r2, [pc, 0x23c] |
0x00063644 str r3, [sp, 0x28] | var_28h = r3;
0x00063646 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [sp, 0x2c]");
0x0006364a strd r3, r3, [sp, 0x34] | __asm ("strd r3, r3, [sp, 0x34]");
0x0006364e add r2, pc | r2 = 0xc6ed4;
0x00063650 strd r3, r3, [sp, 0x3c] | __asm ("strd r3, r3, [sp, 0x3c]");
0x00063654 ldr r3, [pc, 0x22c] | r3 = *(0x63884);
0x00063656 ldr r4, [r6, 0x18] | r4 = *((r6 + 0x18));
0x00063658 ldr.w sb, [r0] | sb = *(r0);
0x0006365c ldr r3, [r2, r3] |
0x0006365e ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00063660 ldr r3, [r3] | r3 = *(0xc6ed4);
0x00063662 str r3, [sp, 0x44] | var_44h = r3;
0x00063664 mov.w r3, 0 | r3 = 0;
0x00063668 str r0, [sp, 0x24] | var_24h = r0;
0x0006366a ldr.w r0, [sb, 0x10] | r0 = *((sb + 0x10));
0x0006366e cmp r4, 0 |
| if (r4 == 0) {
0x00063670 beq.w 0x63876 | goto label_5;
| }
0x00063674 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00063676 cmp r4, r3 |
| if (r4 == r3) {
0x00063678 beq 0x6368a | goto label_4;
| }
0x0006367a add.w r3, r0, 0x10 | r3 = r0 + 0x10;
| do {
0x0006367e mov r0, r3 | r0 = r3;
0x00063680 adds r3, 0x10 | r3 += 0x10;
0x00063682 ldr r2, [r3, -0x4] | r2 = *((r3 - 0x4));
0x00063686 cmp r4, r2 |
0x00063688 bne 0x6367e |
| } while (r4 != r2);
| label_4:
0x0006368a ldr r2, [r0] | r2 = *(r0);
0x0006368c mov r0, sb | r0 = sb;
0x0006368e bl 0x56ec0 | fcn_00056ec0 (r0, r1, r2, r3);
0x00063692 str r0, [r5, 0x78] | *((r5 + 0x78)) = r0;
0x00063694 mov r1, r0 | r1 = r0;
0x00063696 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x00063698 strb.w r3, [r5, 0x94] | *((r5 + 0x94)) = r3;
| if (r0 == 0) {
0x0006369c cbz r0, 0x636c6 | goto label_6;
| }
0x0006369e mov r0, r5 | r0 = r5;
0x000636a0 bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x000636a4 mov r3, r0 | r3 = r0;
0x000636a6 cbz r0, 0x636c6 |
| while (r8 == 0) {
| label_0:
0x000636a8 ldr r1, [pc, 0x1dc] |
0x000636aa ldr r2, [pc, 0x1d8] | r2 = *(0x63886);
0x000636ac add r1, pc | r1 = 0xc6f38;
0x000636ae ldr r2, [r1, r2] | r2 = *(0xc6f38);
0x000636b0 ldr r1, [r2] | r1 = *(0xc6f38);
0x000636b2 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000636b4 eors r1, r2 | r1 ^= r2;
0x000636b6 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x000636ba bne.w 0x6387c | goto label_7;
| }
0x000636be mov r0, r3 | r0 = r3;
0x000636c0 add sp, 0x4c |
0x000636c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x000636c6 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x000636c8 mov.w r8, 1 | r8 = 1;
0x000636cc mov r3, r1 | r3 = r1;
| if (r1 != 0) {
0x000636ce cbz r1, 0x636e0 |
0x000636d0 add r0, sp, 0x24 | r0 += var_24h;
0x000636d2 bl 0x48a9c | r0 = fcn_00048a9c (r0, r1);
0x000636d6 clz r8, r0 | r8 &= r0;
0x000636da mov r3, r0 | r3 = r0;
0x000636dc lsr.w r8, r8, 5 | r8 >>= 5;
| }
0x000636e0 ldr r4, [r6, 0x1c] | r4 = *((r6 + 0x1c));
0x000636e2 cmp r4, 0 |
0x000636e4 ite eq |
| if (r4 != 0) {
0x000636e6 moveq r8, 0 | r8 = 0;
| }
| if (r4 != 0) {
0x000636ea and r8, r8, 1 | r8 &= 1;
| }
0x000636ee cmp.w r8, 0 |
0x000636f2 beq 0x636a8 |
| }
0x000636f4 add.w sl, sp, 0x24 | sl += var_24h;
0x000636f8 movs r7, 0 | r7 = 0;
| label_1:
0x000636fa ldr r1, [r4, 8] | r1 = *((r4 + 8));
| if (r1 == 0) {
0x000636fc cbz r1, 0x63710 | goto label_8;
| }
0x000636fe mov r2, sl | r2 = sl;
0x00063700 mov r0, r5 | r0 = r5;
0x00063702 bl 0x36278 | fcn_00036278 (r0, r1, r2);
0x00063706 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| if (r3 == 0) {
0x00063708 cbz r3, 0x63710 | goto label_8;
| }
0x0006370a ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0006370c cmp r3, 0 |
| if (r3 != 0) {
0x0006370e bne 0x636a8 | goto label_0;
| }
| label_8:
0x00063710 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00063712 mov fp, r8 |
0x00063714 cmp r3, 0 |
| if (r3 == 0) {
0x00063716 beq.w 0x63824 | goto label_9;
| }
0x0006371a mov r1, r4 | r1 = r4;
0x0006371c mov r0, r5 | r0 = r5;
0x0006371e bl 0x45430 | r0 = fcn_00045430 (r0, r1);
0x00063722 mov r6, r0 | r6 = r0;
0x00063724 cmp r0, 0 |
| if (r0 == 0) {
0x00063726 beq.w 0x63838 | goto label_10;
| }
0x0006372a ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x0006372c mov r2, r0 | r2 = r0;
0x0006372e movs r3, 0 | r3 = 0;
0x00063730 mov r0, r5 | r0 = r5;
0x00063732 strd r7, r7, [sp, 0xc] | __asm ("strd r7, r7, [sp, 0xc]");
0x00063736 strd r7, r7, [sp, 4] | __asm ("strd r7, r7, [sp, 4]");
0x0006373a str r7, [sp] | *(sp) = r7;
0x0006373c bl 0x3af54 | r0 = fcn_0003af54 (r0, r1, r2, r3, r4, r5, r6);
0x00063740 mov r1, r0 | r1 = r0;
0x00063742 cmp r0, 0 |
| if (r0 == 0) {
0x00063744 beq 0x6380e | goto label_11;
| }
0x00063746 movs r2, 0 | r2 = 0;
0x00063748 str r0, [sp, 0x1c] | var_1ch = r0;
0x0006374a mov r0, r5 | r0 = r5;
0x0006374c bl 0x36278 | fcn_00036278 (r0, r1, r2);
0x00063750 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00063752 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00063754 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00063756 str r2, [sp, 0x18] | var_18h_2 = r2;
| if (r3 != 0) {
0x00063758 cbz r3, 0x6375c |
0x0006375a str r7, [r1, 0x1c] | *((r1 + 0x1c)) = r7;
| }
0x0006375c mov.w fp, 0 |
0x00063760 movs r2, 1 | r2 = 1;
0x00063762 mov r0, sb | r0 = sb;
0x00063764 str.w fp, [r1, 0x20] | __asm ("str.w fp, [r1, 0x20]");
0x00063768 bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
0x0006376c ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
| if (r2 == 0) {
0x0006376e cbz r2, 0x637a0 | goto label_12;
| }
0x00063770 ldr r1, [r2] | r1 = *(r2);
0x00063772 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00063774 cmp r1, fp |
0x00063776 ite le |
| if (r1 > fp) {
0x00063778 movle r1, 0 | r1 = 0;
| }
| if (r1 <= fp) {
0x0006377a movgt r1, 1 | r1 = 1;
| }
0x0006377c cmp r3, fp |
0x0006377e it ne |
| if (r3 == fp) {
0x00063780 movne r1, 0 | r1 = 0;
| }
| if (r1 == 0) {
0x00063782 cbz r1, 0x637a0 | goto label_12;
| }
| do {
0x00063784 add.w r1, r2, fp, lsl 6 | r1 = r2 + (fp << 6);
0x00063788 ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
| if (r1 != 0) {
0x0006378a cbz r1, 0x63796 |
0x0006378c movs r2, 0 | r2 = 0;
0x0006378e mov r0, r5 | r0 = r5;
0x00063790 bl 0x36278 | fcn_00036278 (r0, r1, r2);
0x00063794 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
| }
0x00063796 ldr r1, [r2] | r1 = *(r2);
0x00063798 add.w fp, fp, 1 |
0x0006379c cmp r1, fp |
0x0006379e bgt 0x63784 |
| } while (r1 > fp);
| label_12:
0x000637a0 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x000637a4 cmp r3, 0 |
| if (r3 != 0) {
0x000637a6 bne 0x6383c | goto label_13;
| }
0x000637a8 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x000637aa str r6, [sp, 0x28] | var_28h = r6;
0x000637ac cmp r2, 0 |
| if (r2 != 0) {
0x000637ae bne 0x63870 | goto label_14;
| }
0x000637b0 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x000637b2 add r3, sp, 0x24 | r3 += var_24h;
0x000637b4 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r1 != 0) {
0x000637b6 cbz r1, 0x637c6 |
0x000637b8 mov r0, r3 | r0 = r3;
0x000637ba bl 0x48a9c | fcn_00048a9c (r0, r1);
0x000637be ldr.w fp, [sp, 0x18] | fp = var_18h_2;
0x000637c2 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x000637c4 cbnz r0, 0x63816 | goto label_2;
| }
| }
0x000637c6 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x000637c8 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000637ca bl 0x48718 | fcn_00048718 (r0, r1);
0x000637ce ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000637d0 clz fp, r0 |
0x000637d4 lsr.w fp, fp, 5 |
0x000637d8 mov r3, r0 | r3 = r0;
0x000637da cmp r2, 0 |
0x000637dc ite eq |
| if (r2 != 0) {
0x000637de moveq r1, 0 | r1 = 0;
| }
| if (r2 == 0) {
0x000637e0 andne r1, fp, 1 | r1 = fp & 1;
| }
| if (r1 != 0) {
0x000637e4 cbz r1, 0x63816 |
0x000637e6 ldr r1, [r2] | r1 = *(r2);
0x000637e8 mov.w r3, 0x200 | r3 = 0x200;
0x000637ec str r6, [r2, 0x20] | *((r2 + 0x20)) = r6;
0x000637ee ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000637f0 str r2, [sp, 0x2c] | var_2ch = r2;
0x000637f2 str r2, [sp, 0x18] | var_18h_2 = r2;
0x000637f4 str r3, [sp, 0x3c] | var_3ch = r3;
0x000637f6 bl 0x48718 | fcn_00048718 (r0, r1);
0x000637fa ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x000637fc mov r3, r0 | r3 = r0;
| if (r0 == 0) {
0x000637fe cbz r0, 0x63844 | goto label_15;
| }
| label_3:
0x00063800 movs r2, 0 | r2 = 0;
0x00063802 clz fp, r3 |
0x00063806 lsr.w fp, fp, 5 |
0x0006380a str r2, [sp, 0x3c] | var_3ch = r2;
0x0006380c b 0x63816 | goto label_2;
| label_11:
0x0006380e mov r6, r0 | r6 = r0;
0x00063810 mov fp, r0 |
0x00063812 movs r3, 7 | r3 = 7;
0x00063814 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
| }
| label_2:
0x00063816 mov r1, r6 | r1 = r6;
0x00063818 mov r0, sb | r0 = sb;
0x0006381a str r3, [sp, 0x18] | var_18h_2 = r3;
0x0006381c str r7, [sp, 0x28] | var_28h = r7;
0x0006381e bl 0x30a7c | fcn_00030a7c (r0, r1);
0x00063822 ldr r3, [sp, 0x18] | r3 = var_18h_2;
| label_9:
0x00063824 ldr r4, [r4, 0x28] | r4 = *((r4 + 0x28));
0x00063826 cmp r4, 0 |
0x00063828 ite eq |
| if (r4 != 0) {
0x0006382a moveq r2, 0 | r2 = 0;
| }
| if (r4 == 0) {
0x0006382c andne r2, fp, 1 | r2 = fp & 1;
| }
0x00063830 cmp r2, 0 |
| if (r2 != 0) {
0x00063832 bne.w 0x636fa | goto label_1;
| }
0x00063836 b 0x636a8 | goto label_0;
| label_10:
0x00063838 movs r3, 7 | r3 = 7;
0x0006383a b 0x636a8 | goto label_0;
| label_13:
0x0006383c mov.w fp, 0 |
0x00063840 movs r3, 7 | r3 = 7;
0x00063842 b 0x63816 | goto label_2;
| label_15:
0x00063844 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x00063846 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00063848 bl 0x48718 | fcn_00048718 (r0, r1);
0x0006384c ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x0006384e mov r3, r0 | r3 = r0;
0x00063850 cmp r0, 0 |
| if (r0 != 0) {
0x00063852 bne 0x63800 | goto label_3;
| }
0x00063854 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x00063856 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00063858 bl 0x48a9c | fcn_00048a9c (r0, r1);
0x0006385c ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x0006385e mov r3, r0 | r3 = r0;
0x00063860 cmp r0, 0 |
| if (r0 != 0) {
0x00063862 bne 0x63800 | goto label_3;
| }
0x00063864 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00063866 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00063868 bl 0x48a9c | r0 = fcn_00048a9c (r0, r1);
0x0006386c mov r3, r0 | r3 = r0;
0x0006386e b 0x63800 | goto label_3;
| label_14:
0x00063870 mov fp, r3 |
0x00063872 movs r3, 1 | r3 = 1;
0x00063874 b 0x63816 | goto label_2;
| label_5:
0x00063876 sub.w r0, r0, 0x80000 | r0 -= 0x80000;
0x0006387a b 0x6368a | goto label_4;
| label_7:
0x0006387c blx 0x6430 | fcn_00006430 ();
0x00063880 str r2, [r1, 0x74] | *((r1 + 0x74)) = r2;
0x00063882 movs r0, r1 | r0 = r1;
0x00063884 lsls r4, r6, 8 | r4 = r6 << 8;
0x00063886 movs r0, r0 |
0x00063888 str r4, [r5, 0x6c] | *((r5 + 0x6c)) = r4;
0x0006388a movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x64a8c */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00064a8c () | void fcn_00064a8c (arithmetic x) {
| arithmetic var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_10h_2;
| r0 = x;
0x00064a8c mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00064a90 mov r4, r0 | r4 = r0;
0x00064a92 ldr.w r8, [r0, 0x9c] | r8 = *((r0 + 0x9c));
0x00064a96 sub sp, 0x18 |
0x00064a98 ldr.w r5, [r0, 0xa8] | r5 = *((r0 + 0xa8));
0x00064a9c ldr r3, [r0, 0x68] | r3 = *((r0 + 0x68));
0x00064a9e ldr.w r6, [r0, 0xf0] | r6 = *((r0 + 0xf0));
0x00064aa2 cmp r5, r8 |
0x00064aa4 ldr r0, [r0, 0x50] | r0 = *((r0 + 0x50));
0x00064aa6 it hs |
| if (r5 < r8) {
0x00064aa8 movhs r5, r8 | r5 = r8;
| }
0x00064aaa cmp r3, 0 |
0x00064aac ldr r1, [r4, 0x54] | r1 = *((r4 + 0x54));
| if (r3 <= 0) {
0x00064aae ble 0x64acc | goto label_2;
| }
0x00064ab0 add.w ip, r3, r3, lsl 1 |
0x00064ab4 ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x00064ab6 add.w ip, r3, ip, lsl 4 |
| do {
0x00064aba ldrd r2, r7, [r3, 8] | __asm ("ldrd r2, r7, [r3, 8]");
0x00064abe orrs r7, r2 | r7 |= r2;
0x00064ac0 it eq |
| if (r7 == r2) {
0x00064ac2 strdeq r0, r1, [r3, 8] | __asm ("strdeq r0, r1, [r3, 8]");
| }
0x00064ac6 adds r3, 0x30 | r3 += 0x30;
0x00064ac8 cmp r3, ip |
0x00064aca bne 0x64aba |
| } while (r3 != ip);
| label_2:
0x00064acc orrs.w r3, r0, r1 | r3 = r0 | r1;
| if (r3 != r0) {
0x00064ad0 beq 0x64af0 |
0x00064ad2 subs r0, 1 | r0--;
0x00064ad4 mov.w r3, 0 | r3 = 0;
0x00064ad8 sbc r1, r1, 0 | __asm ("sbc r1, r1, 0");
0x00064adc mov r2, r8 | r2 = r8;
0x00064ade bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00064ae2 adds r0, 1 | r0++;
0x00064ae4 adc r3, r1, 0 | __asm ("adc r3, r1, 0");
0x00064ae8 umull r0, r1, r0, r8 | r0:r1 = r0 * r8;
0x00064aec mla r1, r8, r3, r1 | __asm ("mla r1, r8, r3, r1");
| }
0x00064af0 strd r0, r1, [sp, 8] | __asm ("strd r0, r1, [var_8h]");
0x00064af4 strd r0, r1, [sp, 0x10] | __asm ("strd r0, r1, [var_10h]");
0x00064af8 ldrb r3, [r4, 7] | r3 = *((r4 + 7));
0x00064afa vldr d16, [sp, 8] | __asm ("vldr d16, [sp, 8]");
0x00064afe vldr d17, [sp, 0x10] | __asm ("vldr d17, [sp, 0x10]");
0x00064b02 vstr d16, [r4, 0x50] | __asm ("vstr d16, [r4, 0x50]");
0x00064b06 vstr d17, [r4, 0x58] | __asm ("vstr d17, [r4, 0x58]");
| if (r3 == 0) {
0x00064b0a cbnz r3, 0x64b22 |
0x00064b0c ldrb r3, [r4, 5] | r3 = *((r4 + 5));
0x00064b0e cmp r3, 4 |
| if (r3 == 4) {
0x00064b10 beq 0x64b22 | goto label_3;
| }
0x00064b12 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x00064b14 ldr r3, [r0] | r3 = *(r0);
0x00064b16 cmp r3, 0 |
| if (r3 == 0) {
0x00064b18 beq 0x64bbe | goto label_4;
| }
0x00064b1a ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00064b1c blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x00064b1e lsls r3, r0, 0x16 | r3 = r0 << 0x16;
| if (r3 >= r0) {
0x00064b20 bpl 0x64bbe | goto label_4;
| }
| }
| label_3:
0x00064b22 ldr r3, [pc, 0xa4] |
0x00064b24 add r3, pc | r3 = 0xc96f2;
0x00064b26 ldm r3!, {r0, r1} | r0 = *(r3!);
| r1 = *((r3! + 4));
0x00064b28 mov.w r3, -1 | r3 = -1;
0x00064b2c str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00064b2e str r0, [r6] | *(r6) = r0;
0x00064b30 str r1, [r6, 4] | *((r6 + 4)) = r1;
| label_1:
0x00064b32 ldr r3, [pc, 0x98] |
0x00064b34 add r3, pc |
0x00064b36 ldr.w r3, [r3, 0xd0] | r3 = *(0xc97d6);
0x00064b3a cmp r3, 0 |
| if (r3 != 0) {
0x00064b3c bne 0x64bb8 | goto label_5;
| }
0x00064b3e bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 == 0) {
0x00064b42 cbnz r0, 0x64b54 |
0x00064b44 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x00064b48 cbnz r0, 0x64b54 | goto label_6;
| }
| label_0:
0x00064b4a add.w r1, r4, 0x34 | r1 = r4 + 0x34;
0x00064b4e movs r0, 4 | r0 = 4;
0x00064b50 bl 0x62714 | fcn_00062714 (r0, r1);
| }
| label_6:
0x00064b54 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00064b56 sub.w r2, r5, 0x1c | r2 = r5 - 0x1c;
0x00064b5a movs r1, 0 | r1 = 0;
0x00064b5c add.w r0, r6, 0x1c | r0 = r6 + 0x1c;
0x00064b60 movs r7, 0 | r7 = 0;
0x00064b62 rev r3, r3 | r3 = SWAP32 (r3);
0x00064b64 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00064b66 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00064b68 rev r3, r3 | r3 = SWAP32 (r3);
0x00064b6a str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x00064b6c ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
0x00064b70 rev r3, r3 | r3 = SWAP32 (r3);
0x00064b72 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x00064b74 ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x00064b78 rev r3, r3 | r3 = SWAP32 (r3);
0x00064b7a str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x00064b7c blx 0x62ec | fcn_000062ec ();
0x00064b80 b 0x64ba2 |
| while (r7 <= r3) {
0x00064b82 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x00064b84 vldr d16, [r4, 0x50] | __asm ("vldr d16, [r4, 0x50]");
0x00064b88 ldr r3, [r0] | r3 = *(r0);
0x00064b8a vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00064b8e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00064b90 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00064b92 ldrd r3, r2, [r4, 0x50] | __asm ("ldrd r3, r2, [r4, 0x50]");
0x00064b96 adds r3, r3, r5 | r3 += r5;
0x00064b98 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00064b9c strd r3, r2, [r4, 0x50] | __asm ("strd r3, r2, [r4, 0x50]");
| if (r0 != 0) {
0x00064ba0 cbnz r0, 0x64bb2 | goto label_7;
| }
0x00064ba2 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
0x00064ba6 mov r2, r5 | r2 = r5;
0x00064ba8 mov r1, r6 | r1 = r6;
0x00064baa cmp r7, r3 |
0x00064bac add r7, r5 | r7 += r5;
0x00064bae blo 0x64b82 |
| }
0x00064bb0 movs r0, 0 | r0 = 0;
| label_7:
0x00064bb2 add sp, 0x18 |
0x00064bb4 pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x00064bb8 dmb ish | __asm ("dmb ish");
0x00064bbc b 0x64b4a | goto label_0;
| label_4:
0x00064bbe movs r3, 0 | r3 = 0;
0x00064bc0 str r3, [r6] | *(r6) = r3;
0x00064bc2 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00064bc4 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00064bc6 b 0x64b32 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x65100 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00065100 () | void fcn_00065100 (int16_t arg_ch, int16_t arg_10h, int16_t arg_dch, int16_t arg_ech, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00065100 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00065104 sub sp, 0x34 |
0x00065106 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
0x0006510a mov sl, r0 | sl = r0;
0x0006510c mov r4, r1 | r4 = r1;
0x0006510e ldr r2, [pc, 0x230] |
0x00065110 ldr r3, [pc, 0x230] | r3 = *(0x65344);
0x00065112 ldr r5, [r0, 4] | r5 = *((r0 + 4));
0x00065114 add r2, pc | r2 = 0xca45a;
0x00065116 ldr r3, [r2, r3] |
0x00065118 ldrb r2, [r5, 9] | r2 = *((r5 + 9));
0x0006511a ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0006511c ldr r3, [r3] | r3 = *(0xca45a);
0x0006511e str r3, [sp, 0x2c] | var_2ch = r3;
0x00065120 mov.w r3, 0 | r3 = 0;
0x00065124 ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x00065126 ldr.w fp, [r1] | fp = *(r1);
0x0006512a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006512c ldr r7, [r1, 0x24] | r7 = *((r1 + 0x24));
0x0006512e ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x00065130 ldr r6, [r3, 0x28] | r6 = *((r3 + 0x28));
0x00065132 str r0, [sp, 0x10] | var_10h = r0;
0x00065134 subs r6, r0, r6 | r6 = r0 - r6;
0x00065136 cmp r2, 0 |
| if (r2 == 0) {
0x00065138 beq.w 0x6531e | goto label_8;
| }
0x0006513c ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0006513e ldrb r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x00065140 adds r0, r2, 1 | r0 = r2 + 1;
0x00065142 str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x00065144 cmp r3, 0 |
| if (r3 == 0) {
0x00065146 beq.w 0x652b4 | goto label_9;
| }
0x0006514a ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x0006514c ldrb.w r8, [r1, 0x16] | r8 = *((r1 + 0x16));
0x00065150 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x00065152 sub.w sb, r7, r3 | sb = r7 - r3;
0x00065156 cmp r2, 0 |
| if (r2 == 0) {
0x00065158 beq.w 0x652dc | goto label_10;
| }
| label_2:
0x0006515c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006515e cmp r8, sb |
0x00065160 it lt |
| if (r8 >= sb) {
0x00065162 movlt r8, sb | r8 = sb;
| }
0x00065164 cmp r7, r3 |
| if (r7 == r3) {
0x00065166 beq.w 0x652f0 | goto label_11;
| }
| label_3:
0x0006516a ldrb.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x0006516e movs r5, 8 | r5 = 8;
| if (r3 == 0) {
0x00065170 cbnz r3, 0x6517e |
0x00065172 ldrb.w r5, [fp, 0x10] | r5 = *(arg_10h);
0x00065176 subs r5, 0 |
0x00065178 it ne |
| if (r5 == 0) {
0x0006517a movne r5, 1 | r5 = 1;
| }
0x0006517c lsls r5, r5, 3 | r5 <<= 3;
| }
0x0006517e ldr.w r3, [fp, 0xec] | r3 = *(arg_ech);
0x00065182 cmp r3, 0 |
| if (r3 == 0) {
0x00065184 beq.w 0x652f2 | goto label_12;
| }
0x00065188 cmp r6, r8 |
0x0006518a it eq |
| if (r6 != r8) {
0x0006518c moveq r5, 8 | r5 = 8;
| }
| if (r6 == r8) {
0x0006518e beq.w 0x65302 | goto label_13;
| }
| label_5:
0x00065192 mov r2, r6 | r2 = r6;
0x00065194 ldr r6, [sp, 0x10] | r6 = var_10h;
0x00065196 add r1, sp, 0x28 | r1 += var_28h;
0x00065198 mov r0, fp | r0 = fp;
0x0006519a str r6, [sp, 0x28] | var_28h = r6;
0x0006519c bl 0x33fa0 | r0 = fcn_00033fa0 (r0, r1, r2);
0x000651a0 mov r5, r0 | r5 = r0;
0x000651a2 cmp r0, 0 |
| if (r0 != 0) {
0x000651a4 bne.w 0x65302 | goto label_13;
| }
0x000651a8 ldr r5, [sp, 0x28] | r5 = var_28h;
0x000651aa subs r5, r5, r6 | r5 -= r6;
0x000651ac it ne |
| if (r5 == r5) {
0x000651ae movne r5, 1 | r5 = 1;
| }
0x000651b0 lsls r5, r5, 3 | r5 <<= 3;
| label_4:
0x000651b2 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000651b4 umull lr, ip, r4, r2 | lr:ip = r4 * r2;
0x000651b8 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000651ba str r3, [sp, 0x24] | var_24h = r3;
0x000651bc mla ip, r4, r3, ip | __asm ("mla ip, r4, r3, ip");
0x000651c0 subs.w r4, lr, r2 | r4 = lr - r2;
0x000651c4 sbc.w r6, ip, r3 | __asm ("sbc.w r6, ip, r3");
0x000651c8 cmp r4, lr |
0x000651ca sbcs.w r3, r6, ip | __asm ("sbcs.w r3, r6, ip");
0x000651ce ite lt |
| if (r4 >= lr) {
0x000651d0 movlt r3, 1 | r3 = 1;
| }
| if (r4 < lr) {
0x000651d2 movge r3, 0 | r3 = 0;
| }
0x000651d4 cmp r5, 0 |
0x000651d6 ite ne |
| if (r5 == 0) {
0x000651d8 movne r3, 0 | r3 = 0;
| }
| if (r5 != 0) {
0x000651da andeq r3, r3, 1 | r3 &= 1;
| }
0x000651de str r3, [sp, 0x14] | var_14h = r3;
0x000651e0 cmp r3, 0 |
| if (r3 == 0) {
0x000651e2 beq.w 0x65302 | goto label_13;
| }
0x000651e6 ldr r3, [pc, 0x160] |
0x000651e8 cmp r2, r7 |
0x000651ea it ge |
| if (r2 < r7) {
0x000651ec movge r2, r7 | r2 = r7;
| }
0x000651ee asr.w sb, r7, 0x1f | sb = r7 >> 0x1f;
0x000651f2 str r2, [sp, 0x20] | var_20h = r2;
0x000651f4 add r3, pc | r3 = 0xca542;
0x000651f6 strd lr, ip, [sp, 8] | __asm ("strd lr, ip, [var_8h]");
0x000651fa str r3, [sp, 4] | var_4h = r3;
0x000651fc b 0x65226 |
| while (r0 != 0) {
| label_0:
0x000651fe mov.w r8, 0 | r8 = 0;
| label_1:
0x00065202 ldr r0, [sp, 0x28] | r0 = var_28h;
| if (r0 != 0) {
0x00065204 cbz r0, 0x6520a |
0x00065206 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
| label_6:
0x0006520a ldr r3, [sp, 8] | r3 = var_8h;
0x0006520c adds r4, r4, r7 | r4 += r7;
0x0006520e adc.w r6, sb, r6 | __asm ("adc.w r6, sb, r6");
0x00065212 cmp r4, r3 |
0x00065214 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00065216 sbcs.w r3, r6, r3 | __asm ("sbcs.w r3, r6, r3");
0x0006521a and r3, r8, 1 | r3 = r8 & 1;
0x0006521e it ge |
| if (r4 < r3) {
0x00065220 movge r3, 0 | r3 = 0;
| }
0x00065222 cmp r3, 0 |
| if (r3 == 0) {
0x00065224 beq 0x65302 | goto label_13;
| }
0x00065226 movs r3, 0 | r3 = 0;
0x00065228 mov r2, r7 | r2 = r7;
0x0006522a str r3, [sp, 0x28] | var_28h = r3;
0x0006522c mov r0, r4 | r0 = r4;
0x0006522e mov r3, sb | r3 = sb;
0x00065230 mov r1, r6 | r1 = r6;
0x00065232 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00065236 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0006523a mov r5, r0 | r5 = r0;
0x0006523c mov r8, r2 | r8 = r2;
0x0006523e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00065240 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00065242 ldr r3, [sp, 4] | r3 = var_4h;
0x00065244 ldr.w r0, [r3, 0x118] | r0 = *((r3 + 0x118));
0x00065248 bl 0xc4508 | r0 = fcn_000c4508 (r0, r1, r2);
0x0006524c cmp r5, r0 |
0x0006524e add.w r1, r5, 1 | r1 = r5 + 1;
| if (r5 == r0) {
0x00065252 beq 0x652fa | goto label_14;
| }
0x00065254 ldr.w r5, [fp, 0xdc] | r5 = *(arg_dch);
0x00065258 movs r3, 0 | r3 = 0;
0x0006525a add r2, sp, 0x28 | r2 += var_28h;
0x0006525c mov r0, fp | r0 = fp;
0x0006525e blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00065260 mov r5, r0 | r5 = r0;
0x00065262 cmp r0, 0 |
0x00065264 bne 0x651fe |
| }
0x00065266 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00065268 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x0006526c mov r5, r0 | r5 = r0;
0x0006526e cmp r0, 0 |
| if (r0 != 0) {
0x00065270 bne 0x651fe | goto label_0;
| }
0x00065272 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00065274 mov r0, r4 | r0 = r4;
0x00065276 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00065278 mov r1, r6 | r1 = r6;
0x0006527a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006527c add r8, r3 | r8 += r3;
0x0006527e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00065280 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00065284 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00065286 mov r1, r2 | r1 = r2;
0x00065288 mov r0, r8 | r0 = r8;
0x0006528a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006528c add r1, r3 | r1 += r3;
0x0006528e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00065292 orrs.w r3, r4, r6 | r3 = r4 | r6;
0x00065296 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00065298 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0006529a strb r5, [r3] | *(r3) = r5;
0x0006529c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006529e eor r3, r3, 1 | r3 ^= 1;
0x000652a2 and r3, r3, 1 | r3 &= 1;
0x000652a6 it ne |
| if (r3 == r4) {
0x000652a8 movne r3, 0 | r3 = 0;
| }
0x000652aa cmp r3, 0 |
| if (r3 != 0) {
0x000652ac bne 0x6532a | goto label_15;
| }
| label_7:
0x000652ae ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x000652b2 b 0x65202 | goto label_1;
| label_9:
0x000652b4 mov r0, r5 | r0 = r5;
0x000652b6 bl 0x2adac | fcn_0002adac (r0);
0x000652ba ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000652bc ldrb r2, [r5, 9] | r2 = *((r5 + 9));
0x000652be ldrd r3, r1, [r0, 0x24] | __asm ("ldrd r3, r1, [r0, 0x24]");
0x000652c2 ldrb.w r8, [r0, 0x16] | r8 = *((r0 + 0x16));
0x000652c6 sub.w sb, r3, r1 | sb = r3 - r1;
0x000652ca cmp r2, 0 |
| if (r2 == 0) {
0x000652cc beq.w 0x6515c | goto label_2;
| }
0x000652d0 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000652d2 subs r2, 1 | r2--;
0x000652d4 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x000652d6 cmp r2, 0 |
| if (r2 != 0) {
0x000652d8 bne.w 0x6515c | goto label_2;
| }
| label_10:
0x000652dc mov r0, r5 | r0 = r5;
0x000652de bl 0x22944 | fcn_00022944 (r0);
0x000652e2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000652e4 cmp r8, sb |
0x000652e6 it lt |
| if (r8 >= sb) {
0x000652e8 movlt r8, sb | r8 = sb;
| }
0x000652ea cmp r7, r3 |
| if (r7 != r3) {
0x000652ec bne.w 0x6516a | goto label_3;
| }
| label_11:
0x000652f0 movs r5, 0 | r5 = 0;
| label_12:
0x000652f2 cmp r6, r8 |
| if (r6 == r8) {
0x000652f4 beq.w 0x651b2 | goto label_4;
| }
0x000652f8 b 0x65192 | goto label_5;
| label_14:
0x000652fa ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x000652fe movs r5, 0 | r5 = 0;
0x00065300 b 0x6520a | goto label_6;
| label_13:
0x00065302 ldr r2, [pc, 0x48] |
0x00065304 ldr r3, [pc, 0x3c] | r3 = *(0x65344);
0x00065306 add r2, pc | r2 = 0xca658;
0x00065308 ldr r3, [r2, r3] | r3 = *(0xca658);
0x0006530a ldr r2, [r3] | r2 = *(0xca658);
0x0006530c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0006530e eors r2, r3 | r2 ^= r3;
0x00065310 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00065314 bne 0x6533a |
0x00065316 mov r0, r5 | r0 = r5;
0x00065318 add sp, 0x34 |
0x0006531a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0006531e ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x00065320 ldrb.w r8, [r1, 0x16] | r8 = *((r1 + 0x16));
0x00065324 sub.w sb, r7, r3 | sb = r7 - r3;
0x00065328 b 0x6515c | goto label_2;
| label_15:
0x0006532a ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x0006532e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00065330 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00065332 rev r3, r3 | r3 = SWAP32 (r3);
0x00065334 str.w r3, [r8, 0x1c] | __asm ("str.w r3, [r8, 0x1c]");
0x00065338 b 0x652ae | goto label_7;
| }
0x0006533a blx 0x6430 | fcn_00006430 ();
0x0006533e nop |
0x00065340 ldr r4, [pc, 0x210] | r4 = *(0x65554);
0x00065342 movs r0, r1 | r0 = r1;
0x00065344 lsls r4, r6, 8 | r4 = r6 << 8;
0x00065346 movs r0, r0 |
0x00065348 str r0, [r4, r2] | *((r4 + r2)) = r0;
0x0006534a movs r0, r1 | r0 = r1;
0x0006534c ldr r2, [pc, 0x248] | r2 = *(0x65598);
0x0006534e movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x65c38 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00065c38 () | void fcn_00065c38 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x00065c38 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00065c3c sub sp, 0x5c |
0x00065c3e str r1, [sp, 0xc] | var_ch = r1;
0x00065c40 movs r4, 1 | r4 = 1;
0x00065c42 movs r2, 0 | r2 = 0;
0x00065c44 mov r5, r0 | r5 = r0;
0x00065c46 ldr.w r1, [pc, 0x4b8] |
0x00065c4a strd r2, r4, [sp, 0x30] | __asm ("strd r2, r4, [sp, 0x30]");
0x00065c4e ldr.w r2, [pc, 0x4b4] | r2 = *(0x66106);
0x00065c52 add r1, pc | r1 = 0xcbd58;
0x00065c54 ldr.w r3, [r5, 0xa8] | r3 = *((r5 + 0xa8));
0x00065c58 ldr r0, [r0, 0x44] | r0 = *(var_0hx44);
0x00065c5a ldr r2, [r1, r2] |
0x00065c5c add r1, sp, 0x40 | r1 += var_40h;
0x00065c5e ldr r4, [r5] | r4 = *(r5);
0x00065c60 ldr r2, [r2] | r2 = *(0xcbd58);
0x00065c62 str r2, [sp, 0x54] | var_54h = r2;
0x00065c64 mov.w r2, 0 | r2 = 0;
0x00065c68 str r3, [sp, 0x38] | var_38h = r3;
0x00065c6a ldr r3, [r0] | r3 = *(r0);
0x00065c6c ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00065c6e blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 == 0) {
0x00065c70 cbz r0, 0x65ca0 | goto label_11;
| }
0x00065c72 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00065c74 mov r6, r0 | r6 = r0;
0x00065c76 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
| do {
| label_1:
0x00065c78 mov r0, r5 | r0 = r5;
0x00065c7a bl 0x2b554 | fcn_0002b554 (r0);
0x00065c7e ldr.w r2, [pc, 0x488] |
0x00065c82 ldr.w r3, [pc, 0x480] | r3 = *(0x66106);
0x00065c86 add r2, pc | r2 = 0xcbd94;
0x00065c88 ldr r3, [r2, r3] | r3 = *(0xcbd94);
0x00065c8a ldr r2, [r3] | r2 = *(0xcbd94);
0x00065c8c ldr r3, [sp, 0x54] | r3 = var_54h;
0x00065c8e eors r2, r3 | r2 ^= r3;
0x00065c90 mov.w r3, 0 | r3 = 0;
0x00065c92 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x00065c94 bne.w 0x660cc | goto label_12;
| }
0x00065c98 mov r0, r6 | r0 = r6;
0x00065c9a add sp, 0x5c |
0x00065c9c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00065ca0 ldr r3, [r5] | r3 = *(r5);
0x00065ca2 ldr.w r7, [r5, 0xf0] | r7 = *((r5 + 0xf0));
0x00065ca4 strb r0, [r6, 3] | *((r6 + 3)) = r0;
0x00065ca6 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x00065ca8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00065caa mov r1, r7 | r1 = r7;
0x00065cac adds r2, 1 | r2++;
0x00065cae bl 0x3415c | r0 = fcn_0003415c (r0, r1, r2);
0x00065cb2 mov r6, r0 | r6 = r0;
0x00065cb4 cmp r0, 0 |
| if (r0 != 0) {
0x00065cb6 bne.w 0x66066 | goto label_13;
| }
0x00065cb8 strh r6, [r2, 0xe] | *((r2 + 0xe)) = r6;
0x00065cba ldrb r3, [r7] | r3 = *(r7);
| if (r3 == 0) {
0x00065cbc cbz r3, 0x65cd4 | goto label_14;
| }
0x00065cbe mov r1, r7 | r1 = r7;
0x00065cc0 mov r0, r4 | r0 = r4;
0x00065cc2 ldr r7, [r4, 0x20] | r7 = *((r4 + 0x20));
0x00065cc4 add r3, sp, 0x34 | r3 += var_34h;
0x00065cc6 mov r2, r6 | r2 = r6;
0x00065cc8 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 == 0) {
0x00065cca cbz r0, 0x65cd4 | goto label_14;
| }
0x00065ccc ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00065cce mov r6, r0 | r6 = r0;
0x00065cd0 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00065cd2 b 0x65c78 |
| } while (1);
| label_14:
0x00065cd4 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x00065cd8 cmp.w r8, 0 |
0x00065cda lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x00065cdc beq 0x65dc4 | goto label_15;
| }
0x00065cde add r3, sp, 0x30 | r3 += var_30h;
0x00065ce0 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00065ce2 str r3, [sp, 0x1c] | var_1ch = r3;
0x00065ce4 add r3, sp, 0x2c | r3 += var_2ch;
0x00065ce6 str r3, [sp, 0x18] | var_18h = r3;
0x00065ce8 add.w sl, r5, 0x50 | sl = r5 + 0x50;
0x00065cec ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x00065cf0 mov.w r8, 0 | r8 = 0;
0x00065cf4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00065cf8 mov fp, sl |
0x00065cfa and sb, r4, 1 | sb = r4 & 1;
0x00065cfe str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x00065d02 vstr d16, [r5, 0x50] | __asm ("vstr d16, [r5, 0x50]");
| label_0:
0x00065d06 movs r7, 1 | r7 = 1;
| label_2:
0x00065d08 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00065d0a mov r0, r5 | r0 = r5;
0x00065d0c str r1, [sp, 4] | var_4h = r1;
0x00065d0e ldr r1, [sp, 0x18] | r1 = var_18h;
0x00065d10 str r1, [sp] | *(sp) = r1;
0x00065d12 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00065d14 bl 0x35130 | r0 = fcn_00035130 (r0, r1, r2, r3, r4, r5);
0x00065d18 mov sl, r0 | sl = r0;
0x00065d1a cmp r0, 0 |
| if (r0 != 0) {
0x00065d1c bne.w 0x6606c | goto label_16;
| }
0x00065d20 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00065d22 ldr.w sb, [r5, 0x9c] | sb = *((r5 + 0x9c));
0x00065d26 adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x00065d28 bne 0x65d4c |
0x00065d2a ldr r3, [sp, 0x40] | r3 = var_40h;
0x00065d2c subs.w r0, r3, sb | r0 = r3 - sb;
0x00065d30 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00065d32 sbc r1, r3, 0 | __asm ("sbc r1, r3, 0");
0x00065d36 ldr.w r3, [r5, 0xa8] | r3 = *((r5 + 0xa8));
0x00065d3a adds.w r2, r3, 8 | r2 = r3 + 8;
0x00065d3e ldr.w r3, [r5, 0xac] | r3 = *((r5 + 0xac));
0x00065d42 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00065d46 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00065d4a str r0, [sp, 0x2c] | var_2ch = r0;
| }
0x00065d4c ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x00065d4e str r3, [sp, 0x10] | var_10h = r3;
0x00065d50 ldr r3, [r5, 0x54] | r3 = *((r5 + 0x54));
0x00065d52 str r3, [sp, 0x14] | var_14h = r3;
0x00065d54 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00065d56 orrs r0, r3 | r0 |= r3;
| if (r0 == r3) {
0x00065d58 beq.w 0x65ffc | goto label_17;
| }
| label_4:
0x00065d5c ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [var_10h]");
0x00065d60 cmp sl, r2 |
0x00065d62 it eq |
| if (sl == r2) {
0x00065d64 cmpeq sb, r3 | __asm ("cmpeq sb, r3");
| }
| if (sl == r2) {
0x00065d66 beq.w 0x66020 | goto label_18;
| }
| label_3:
0x00065d6a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00065d6c cmp r3, 0 |
| if (r3 == 0) {
0x00065d6e beq.w 0x660c8 | goto label_19;
| }
0x00065d72 add.w sb, r6, r3 | sb = r6 + r3;
| if (r4 == 0) {
0x00065d76 cbz r4, 0x65d9e | goto label_20;
| }
0x00065d78 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00065d7a ldr r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x00065d7c adds r2, 1 | r2++;
0x00065d7e str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
| if (r3 == 0) {
0x00065d80 cbz r3, 0x65d8a | goto label_21;
| }
| do {
0x00065d82 str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x00065d84 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x00065d86 cmp r3, 0 |
0x00065d88 bne 0x65d82 |
| } while (r3 != 0);
| label_21:
0x00065d8a ldr.w r0, [r5, 0xf4] | r0 = *((r5 + 0xf4));
0x00065d8e movs r1, 0 | r1 = 0;
0x00065d90 bl 0x2d040 | fcn_0002d040 (r0, r1);
0x00065d94 b 0x65d9e |
| while (r0 == 0) {
0x00065d96 adds r6, 1 | r6++;
0x00065d98 cmp r6, sb |
| if (r6 == sb) {
0x00065d9a beq.w 0x65ff2 | goto label_22;
| }
| label_20:
0x00065d9e movs r3, 1 | r3 = 1;
0x00065da0 movs r2, 0 | r2 = 0;
0x00065da2 mov r1, fp | r1 = fp;
0x00065da4 mov r0, r5 | r0 = r5;
0x00065da6 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00065daa bl 0x653b4 | r0 = fcn_000653b4 (r0, r1, r2, r3, r4);
0x00065dae cmp r0, 0 |
0x00065db0 beq 0x65d96 |
| }
0x00065db2 cmp r0, 0x65 |
| if (r0 != 0x65) {
0x00065db4 bne.w 0x6609e | goto label_23;
| }
0x00065db8 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x00065dbc movs r4, 0 | r4 = 0;
0x00065dbe strd r2, r3, [r5, 0x50] | __asm ("strd r2, r3, [r5, 0x50]");
0x00065dc2 b 0x65d06 | goto label_0;
| label_15:
0x00065dc4 str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch]");
| label_8:
0x00065dc8 mov.w r2, -1 | r2 = -1;
0x00065dcc add r1, sp, 0x38 | r1 += var_38h;
0x00065dce mov r0, r5 | r0 = r5;
0x00065dd0 bl 0x33fa0 | fcn_00033fa0 (r0, r1, r2);
0x00065dd4 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00065dd6 mov r6, r0 | r6 = r0;
0x00065dd8 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00065dda cmp r0, 0 |
| if (r0 != 0) {
0x00065ddc bne.w 0x65fd6 | goto label_5;
| }
0x00065de0 ldr r3, [r5] | r3 = *(r5);
0x00065de2 ldr.w r4, [r5, 0xf0] | r4 = *((r5 + 0xf0));
0x00065de6 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x00065de8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00065dea add.w sl, r4, 4 | sl = r4 + 4;
0x00065dee mov r1, sl | r1 = sl;
0x00065df0 adds r2, 1 | r2++;
0x00065df2 bl 0x3415c | r0 = fcn_0003415c (r0, r1, r2);
0x00065df6 mov r6, r0 | r6 = r0;
0x00065df8 cmp r0, 0 |
| if (r0 != 0) {
0x00065dfa bne.w 0x65fd6 | goto label_5;
| }
0x00065dfe ldrb r3, [r5, 0x11] | r3 = *((r5 + 0x11));
0x00065e00 subs r3, 1 | r3--;
0x00065e02 cmp r3, 2 |
| if (r3 > 2) {
0x00065e04 bhi.w 0x6608e | goto label_24;
| }
| label_6:
0x00065e08 ldrb r1, [r4, 4] | r1 = *((r4 + 4));
0x00065e0a movs r2, 0 | r2 = 0;
0x00065e0c mov r0, r5 | r0 = r5;
0x00065e0e subs r1, 0 |
0x00065e10 it ne |
| if (r1 == 0) {
0x00065e12 movne r1, 1 | r1 = 1;
| }
0x00065e14 bl 0x349b0 | r0 = fcn_000349b0 (r0, r1, r2);
0x00065e18 mov r6, r0 | r6 = r0;
0x00065e1a cmp r0, 0 |
| if (r0 != 0) {
0x00065e1c bne.w 0x65fd6 | goto label_5;
| }
0x00065e20 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x00065e22 cmp r3, 0 |
| if (r3 == 0) {
0x00065e24 beq.w 0x65fd6 | goto label_5;
| }
0x00065e28 ldr r6, [sp, 0x34] | r6 = var_34h;
0x00065e2a cmp r6, 0 |
| if (r6 == 0) {
0x00065e2c beq.w 0x65fd6 | goto label_5;
| }
0x00065e30 str r0, [r4] | *(r4) = r0;
0x00065e32 mov r7, r0 | r7 = r0;
0x00065e34 ldr.w sb, [r5] | sb = *(r5);
0x00065e38 ldr.w r6, [sb, 4] | r6 = *((sb + 4));
0x00065e3c lsls r6, r6, 1 | r6 <<= 1;
0x00065e3e asrs r1, r6, 0x1f | r1 = r6 >> 0x1f;
0x00065e40 mov r0, r6 | r0 = r6;
0x00065e42 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00065e46 mov r4, r0 | r4 = r0;
0x00065e48 cmp r0, 0 |
| if (r0 == 0) {
0x00065e4a beq.w 0x660e8 | goto label_25;
| }
0x00065e4e mov r2, r6 | r2 = r6;
0x00065e50 mov r1, r7 | r1 = r7;
0x00065e52 blx 0x62ec | fcn_000062ec ();
0x00065e56 str r7, [sp] | *(sp) = r7;
0x00065e58 movw r3, 0x4001 | r3 = 0x4001;
0x00065e5c ldr.w r6, [sb, 0x18] | r6 = *((sb + 0x18));
0x00065e60 mov r2, r4 | r2 = r4;
0x00065e62 mov r1, sl | r1 = sl;
0x00065e64 mov r0, sb | r0 = sb;
0x00065e66 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00065e68 ldr.w fp, [sb, 4] | fp = *((sb + 4));
0x00065e6c mov r6, r0 | r6 = r0;
0x00065e6e cmp r0, 0 |
| if (r0 != 0) {
0x00065e70 bne.w 0x660f8 | goto label_26;
| }
0x00065e74 ldr r3, [r4] | r3 = *(r4);
0x00065e76 add r1, sp, 0x48 | r1 += var_48h;
0x00065e78 mov r0, r4 | r0 = r4;
0x00065e7a ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00065e7c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00065e7e mov r6, r0 | r6 = r0;
0x00065e80 cmp r0, 0 |
| if (r0 != 0) {
0x00065e82 bne.w 0x660f8 | goto label_26;
| }
0x00065e86 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00065e8a ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00065e8c adds r1, r3, 1 | r1 = r3 + 1;
0x00065e8e ldr r3, [sp, 0x48] | r3 = var_48h;
0x00065e90 str r1, [sp, 0x20] | var_20h = r1;
0x00065e92 adds r3, 4 | r3 += 4;
0x00065e94 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00065e98 adds r3, r3, r1 | r3 += r1;
0x00065e9a adc.w r1, r2, r1, asr 31 | __asm ("adc.w r1, r2, r1, asr 31");
0x00065e9e adds r0, r3, 2 | r0 = r3 + 2;
0x00065ea0 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00065ea4 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00065ea8 mov r7, r0 | r7 = r0;
0x00065eaa cmp r0, 0 |
| if (r0 == 0) {
0x00065eac beq.w 0x660f0 | goto label_27;
| }
0x00065eb0 mov r1, r0 | r1 = r0;
0x00065eb2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00065eb4 movs r0, r2 | r0 = r2;
0x00065eb6 str r6, [r1], 4 | *(r1) = r6;
| r1 += 4;
0x00065eba mov r0, r4 | r0 = r4;
0x00065ebc ldr r3, [r4] | r3 = *(r4);
0x00065ebe ldr r2, [sp, 0x48] | r2 = var_48h;
0x00065ec0 vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00065ec4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00065ec6 str r1, [sp, 0x14] | var_14h = r1;
0x00065ec8 str r2, [sp, 0x10] | var_10h = r2;
0x00065eca blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00065ecc mov r6, r0 | r6 = r0;
0x00065ece cmp r0, 0 |
| if (r0 != 0) {
0x00065ed0 bne.w 0x660f8 | goto label_26;
| }
0x00065ed4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00065ed6 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00065ed8 strb r0, [r1, r3] | *((r1 + r3)) = r0;
0x00065eda ldr r3, [sp, 0x48] | r3 = var_48h;
0x00065edc add r3, r1 | r3 += r1;
0x00065ede strb r0, [r3, 1] | *((r3 + 1)) = r0;
0x00065ee0 ldrd r0, r3, [sp, 0x48] | __asm ("ldrd r0, r3, [var_48h]");
0x00065ee4 cmp r0, 1 |
0x00065ee6 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r0 < 1) {
0x00065eea blt 0x65f9a | goto label_28;
| }
0x00065eec ldr r2, [sp, 0x10] | r2 = var_10h;
0x00065eee add.w r3, r4, fp | r3 = r4 + fp;
0x00065ef2 strd r8, r7, [sp, 0x14] | __asm ("strd r8, r7, [sp, 0x14]");
0x00065ef6 mov fp, r1 |
0x00065ef8 str r5, [sp, 0x1c] | var_1ch = r5;
0x00065efa mov r7, r1 | r7 = r1;
0x00065efc adds r2, 2 | r2 += 2;
0x00065efe mov r8, r4 | r8 = r4;
0x00065f00 adds r2, r1, r2 | r2 = r1 + r2;
0x00065f02 mov r5, r3 | r5 = r3;
0x00065f04 str r2, [sp, 0x10] | var_10h = r2;
0x00065f06 add r2, sp, 0x3c | r2 += var_3ch;
0x00065f08 str r2, [sp, 0x24] | var_24h_2 = r2;
| do {
0x00065f0a ldr.w r4, [sb, 0x20] | r4 = *((sb + 0x20));
0x00065f0e movs r2, 0 | r2 = 0;
0x00065f10 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x00065f12 mov r1, fp | r1 = fp;
0x00065f14 mov r0, sb | r0 = sb;
0x00065f16 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00065f18 mov r4, r0 | r4 = r0;
0x00065f1a cmp r0, 0 |
| if (r0 != 0) {
0x00065f1c bne.w 0x660d0 | goto label_29;
| }
0x00065f20 ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r3 != 0) {
0x00065f22 cbz r3, 0x65f72 |
0x00065f24 str r0, [sp] | *(sp) = r0;
0x00065f26 movw r3, 0x4001 | r3 = 0x4001;
0x00065f2a ldr.w r4, [sb, 0x18] | r4 = *((sb + 0x18));
0x00065f2e mov r2, r5 | r2 = r5;
0x00065f30 mov r1, fp | r1 = fp;
0x00065f32 mov r0, sb | r0 = sb;
0x00065f34 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00065f36 mov r4, r0 | r4 = r0;
0x00065f38 cmp r0, 0 |
| if (r0 != 0) {
0x00065f3a bne.w 0x660d0 | goto label_29;
| }
0x00065f3e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00065f40 mov r0, r5 | r0 = r5;
0x00065f42 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00065f44 bl 0x3415c | fcn_0003415c (r0, r1, r2);
0x00065f48 ldr r3, [r5] | r3 = *(r5);
0x00065f4a mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x00065f4c cbz r3, 0x65f58 |
0x00065f4e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00065f50 mov r0, r5 | r0 = r5;
0x00065f52 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00065f54 movs r3, 0 | r3 = 0;
0x00065f56 str r3, [r5] | *(r5) = r3;
| }
0x00065f58 cmp r4, 0 |
| if (r4 != 0) {
0x00065f5a bne.w 0x660d0 | goto label_29;
| }
0x00065f5e ldr r0, [sp, 0x10] | r0 = var_10h;
0x00065f60 ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x00065f62 cbz r3, 0x65f72 | goto label_30;
| }
0x00065f64 mov r1, sl | r1 = sl;
0x00065f66 blx 0x6634 | r0 = fcn_00006634 ();
0x00065f6a mov r4, r0 | r4 = r0;
0x00065f6c cmp r0, 0 |
| if (r0 == 0) {
0x00065f6e beq.w 0x660d0 | goto label_29;
| }
| }
| label_30:
0x00065f72 mov r0, fp | r0 = fp;
0x00065f74 blx 0x65dc | r0 = strcmp (r0, r1);
0x00065f78 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00065f7c ldrd r0, r1, [sp, 0x48] | __asm ("ldrd r0, r1, [var_48h]");
0x00065f80 adds r3, 1 | r3++;
0x00065f82 add fp, r3 |
0x00065f84 sub.w r2, fp, r7 | r2 = fp - r7;
0x00065f88 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00065f8a cmp r2, r0 |
0x00065f8c sbcs r3, r1 | __asm ("sbcs r3, r1");
0x00065f8e blt 0x65f0a |
| } while (r2 < r0);
0x00065f90 mov r4, r8 | r4 = r8;
0x00065f92 ldr r7, [sp, 0x18] | r7 = var_18h;
0x00065f94 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x00065f98 ldr r5, [sp, 0x1c] | r5 = var_1ch;
| label_28:
0x00065f9a ldr r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x00065f9c cbz r3, 0x65fa8 |
0x00065f9e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00065fa0 mov r0, r4 | r0 = r4;
0x00065fa2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00065fa4 movs r3, 0 | r3 = 0;
0x00065fa6 str r3, [r4] | *(r4) = r3;
| }
0x00065fa8 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00065fac cmp r3, 0 |
| if (r3 == 0) {
0x00065fae beq.w 0x660f8 | goto label_26;
| }
0x00065fb2 mov r1, sl | r1 = sl;
0x00065fb4 mov r0, sb | r0 = sb;
0x00065fb6 movs r2, 0 | r2 = 0;
0x00065fb8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00065fba mov r6, r0 | r6 = r0;
0x00065fbc mov r0, r7 | r0 = r7;
0x00065fbe bl 0x26dbc | fcn_00026dbc (r0);
| label_10:
0x00065fc2 ldr r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x00065fc4 cbz r3, 0x65fd0 |
0x00065fc6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00065fc8 mov r0, r4 | r0 = r4;
0x00065fca blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00065fcc movs r3, 0 | r3 = 0;
0x00065fce str r3, [r4] | *(r4) = r3;
| }
0x00065fd0 mov r0, r4 | r0 = r4;
0x00065fd2 bl 0x26dbc | fcn_00026dbc (r0);
| label_5:
0x00065fd6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00065fd8 cmp r3, 0 |
| if (r3 == 0) {
0x00065fda beq.w 0x65c78 | goto label_1;
| }
0x00065fde ldr r1, [pc, 0x12c] |
0x00065fe0 mov r2, r8 | r2 = r8;
0x00065fe2 ldr.w r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
0x00065fe6 movw r0, 0x21b | r0 = 0x21b;
0x00065fea add r1, pc | r1 = 0xcc0fc;
0x00065fec bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00065ff0 b 0x65c78 | goto label_1;
| label_22:
0x00065ff2 mov r4, r0 | r4 = r0;
| label_9:
0x00065ff4 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x00065ff8 mov r6, sb | r6 = sb;
0x00065ffa b 0x65d08 | goto label_2;
| label_17:
0x00065ffc ldr r3, [r5, 0x58] | r3 = *((r5 + 0x58));
0x00065ffe ldr r2, [r5, 0x5c] | r2 = *((r5 + 0x5c));
0x00066000 ldrd r1, r0, [sp, 0x10] | __asm ("ldrd r1, r0, [var_10h]");
0x00066004 adds.w r3, sb, r3 | r3 = sb + r3;
0x00066008 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0006600c cmp r2, r0 |
0x0006600e it eq |
| if (r2 == r0) {
0x00066010 cmpeq r3, r1 | __asm ("cmpeq r3, r1");
| }
| if (r2 != r0) {
0x00066012 beq 0x66042 |
0x00066014 ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [var_10h]");
0x00066018 cmp sl, r2 |
0x0006601a it eq |
| if (sl == r2) {
0x0006601c cmpeq sb, r3 | __asm ("cmpeq sb, r3");
| }
| if (sl != r2) {
0x0006601e bne 0x660c8 | goto label_19;
| }
| label_18:
0x00066020 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00066024 mov r0, r5 | r0 = r5;
0x00066026 mov r1, sb | r1 = sb;
0x00066028 bl 0x24f84 | r0 = fcn_00024f84 (r0, r1);
0x0006602c cmp r0, 0 |
| if (r0 != 0) {
0x0006602e bne 0x660c0 | goto label_31;
| }
0x00066030 ldr.w r3, [r5, 0xa0] | r3 = *((r5 + 0xa0));
0x00066034 str.w sb, [r5, 0x1c] | __asm ("str.w sb, [r5, 0x1c]");
0x00066038 cmp sb, r3 |
0x0006603a it hi |
| if (sb <= r3) {
0x0006603c strhi sb, [r5, 0xa0] | *((r5 + 0xa0)) = sb;
| }
0x00066040 b 0x65d6a | goto label_3;
| }
0x00066042 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00066044 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00066046 subs r0, r3, r1 | r0 = r3 - r1;
0x00066048 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006604a sbc.w r1, r3, r2 | __asm ("sbc.w r1, r3, r2");
0x0006604e ldr.w r3, [r5, 0xa8] | r3 = *((r5 + 0xa8));
0x00066052 adds.w r2, r3, 8 | r2 = r3 + 8;
0x00066056 ldr.w r3, [r5, 0xac] | r3 = *((r5 + 0xac));
0x0006605a adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0006605e bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00066062 str r0, [sp, 0x2c] | var_2ch = r0;
0x00066064 b 0x65d5c | goto label_4;
| label_13:
0x00066066 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00066068 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0006606a b 0x65c78 | goto label_1;
| label_16:
0x0006606c cmp r0, 0x65 |
0x0006606e ldr.w sb, [sp, 0x20] | sb = var_20h;
0x00066072 mov fp, r0 |
| if (r0 == 0x65) {
0x00066074 beq 0x660ae | goto label_32;
| }
| label_7:
0x00066076 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00066078 mov r2, sb | r2 = sb;
0x0006607a cmp r6, 0 |
0x0006607c ite eq |
| if (r6 != 0) {
0x0006607e moveq r2, 0 | r2 = 0;
| }
| if (r6 == 0) {
0x00066080 andne r2, r2, 1 | r2 &= 1;
| }
0x00066084 mov r8, r6 | r8 = r6;
0x00066086 str r2, [sp, 0xc] | var_ch = r2;
0x00066088 mov r6, fp | r6 = fp;
0x0006608a strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0006608c b 0x65fd6 | goto label_5;
| label_24:
0x0006608e mov r1, r0 | r1 = r0;
0x00066090 mov r0, r5 | r0 = r5;
0x00066092 bl 0x2c858 | r0 = fcn_0002c858 (r0, r1);
0x00066096 mov r6, r0 | r6 = r0;
0x00066098 cmp r0, 0 |
| if (r0 != 0) {
0x0006609a bne 0x65fd6 | goto label_5;
| }
0x0006609c b 0x65e08 | goto label_6;
| label_23:
0x0006609e movw r3, 0x20a | r3 = 0x20a;
0x000660a2 ldr.w sb, [sp, 0x20] | sb = var_20h;
0x000660a6 cmp r0, r3 |
0x000660a8 it ne |
| if (r0 != r3) {
0x000660aa movne fp, r0 | goto label_33;
| }
| if (r0 != r3) {
| label_33:
0x000660ac bne 0x66076 | goto label_7;
| }
| label_32:
0x000660ae mov r3, sb | r3 = sb;
0x000660b0 mov r8, r6 | r8 = r6;
0x000660b2 cmp r6, 0 |
0x000660b4 ite eq |
| if (r6 != 0) {
0x000660b6 moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x000660b8 andne r3, r3, 1 | r3 &= 1;
| }
0x000660bc str r3, [sp, 0xc] | var_ch = r3;
0x000660be b 0x65dc8 | goto label_8;
| label_31:
0x000660c0 ldr.w sb, [sp, 0x20] | sb = var_20h;
0x000660c4 mov fp, r0 |
0x000660c6 b 0x66076 | goto label_7;
| label_19:
0x000660c8 mov sb, r6 | sb = r6;
0x000660ca b 0x65ff4 | goto label_9;
| label_12:
0x000660cc blx 0x6430 | fcn_00006430 ();
| label_29:
0x000660d0 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000660d2 str r4, [sp, 0x10] | var_10h = r4;
0x000660d4 mov r4, r8 | r4 = r8;
0x000660d6 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000660d8 mov r0, r7 | r0 = r7;
0x000660da ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x000660de bl 0x26dbc | fcn_00026dbc (r0);
0x000660e2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000660e4 mov r6, r3 | r6 = r3;
0x000660e6 b 0x65fc2 | goto label_10;
| label_25:
0x000660e8 movs r6, 7 | r6 = 7;
0x000660ea bl 0x26dbc | fcn_00026dbc (r0);
0x000660ee b 0x65fd6 | goto label_5;
| label_27:
0x000660f0 movs r6, 7 | r6 = 7;
0x000660f2 bl 0x26dbc | fcn_00026dbc (r0);
0x000660f6 b 0x65fc2 | goto label_10;
| label_26:
0x000660f8 mov r0, r7 | r0 = r7;
0x000660fa bl 0x26dbc | fcn_00026dbc (r0);
0x000660fe b 0x65fc2 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6683c */
| #include <stdint.h>
|
; (fcn) fcn.0006683c () | void fcn_0006683c (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0006683c push.w {r4, r5, r6, r7, r8, lr} |
0x00066840 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 == 0) {
0x00066842 cbz r3, 0x6686a | goto label_0;
| }
0x00066844 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x00066846 mov r4, r0 | r4 = r0;
0x00066848 mov r6, r1 | r6 = r1;
| if (r2 != 0) {
0x0006684a cbz r2, 0x6685c |
0x0006684c ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0006684e adds r2, 1 | r2++;
0x00066850 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x00066852 ldrb r2, [r0, 0xa] | r2 = *((r0 + 0xa));
| if (r2 != 0) {
0x00066854 cbnz r2, 0x6685c | goto label_4;
| }
0x00066856 bl 0x2adac | fcn_0002adac (r0);
0x0006685a ldrb r3, [r4, 8] | r3 = *((r4 + 8));
| }
| label_4:
0x0006685c cmp r3, 2 |
| if (r3 == 2) {
0x0006685e beq 0x66884 | goto label_5;
| }
0x00066860 mov r0, r4 | r0 = r4;
0x00066862 bl 0x66768 | fcn_00066768 (r0);
0x00066866 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00066868 cbnz r3, 0x66872 |
| while (r3 != 0) {
| label_0:
0x0006686a movs r5, 0 | r5 = 0;
| label_1:
0x0006686c mov r0, r5 | r0 = r5;
0x0006686e pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x00066872 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00066874 subs r3, 1 | r3--;
0x00066876 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00066878 cmp r3, 0 |
0x0006687a bne 0x6686a |
| }
0x0006687c mov r0, r4 | r0 = r4;
0x0006687e bl 0x22944 | fcn_00022944 (r0);
0x00066882 b 0x6686a | goto label_0;
| label_5:
0x00066884 ldr.w r8, [r4, 4] | r8 = *((r4 + 4));
0x00066888 ldr.w r7, [r8] | r7 = *(r8);
0x0006688c ldr r5, [r7, 0x2c] | r5 = *((r7 + 0x2c));
| if (r5 == 0) {
0x0006688e cbnz r5, 0x668c4 |
0x00066890 ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x00066892 adds r3, 1 | r3++;
0x00066894 str r3, [r7, 0x6c] | *((r7 + 0x6c)) = r3;
0x00066896 ldrb r3, [r7, 0x11] | r3 = *((r7 + 0x11));
0x00066898 cmp r3, 2 |
| if (r3 == 2) {
0x0006689a bne 0x668a0 |
0x0006689c ldrb r3, [r7, 4] | r3 = *((r7 + 4));
| if (r3 != 0) {
0x0006689e cbnz r3, 0x668ec | goto label_6;
| }
| }
| label_2:
0x000668a0 ldrb r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000668a2 movs r2, 1 | r2 = 1;
0x000668a4 mov r0, r7 | r0 = r7;
0x000668a6 bl 0x349b0 | r0 = fcn_000349b0 (r0, r1, r2);
0x000668aa uxtb r3, r0 | r3 = (int8_t) r0;
0x000668ac mov r5, r0 | r5 = r0;
0x000668ae cmp r3, 0xa |
0x000668b0 it ne |
| if (r3 != 0xa) {
0x000668b2 cmpne r3, 0xd | __asm ("cmpne r3, 0xd");
| }
| if (r3 != 0xa) {
0x000668b4 bne 0x668c4 | goto label_7;
| }
0x000668b6 ldr r3, [pc, 0x68] |
0x000668b8 str r0, [r7, 0x2c] | *((r7 + 0x2c)) = r0;
0x000668ba add r3, pc | r3 = 0xcd1e0;
0x000668bc str.w r3, [r7, 0xdc] | __asm ("str.w r3, [r7, 0xdc]");
0x000668c0 movs r3, 6 | r3 = 6;
0x000668c2 strb r3, [r7, 0x11] | *((r7 + 0x11)) = r3;
| }
| label_7:
0x000668c4 eor r1, r6, 1 | r1 = r6 ^ 1;
0x000668c8 cmp r5, 0 |
0x000668ca ite eq |
| if (r5 != 0) {
0x000668cc moveq r1, 0 | r1 = 0;
| }
| if (r5 == 0) {
0x000668ce andne r1, r1, 1 | r1 &= 1;
| }
| if (r1 == 0) {
0x000668d2 cbz r1, 0x668f6 | goto label_8;
| }
0x000668d4 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x000668d6 cmp r3, 0 |
| if (r3 == 0) {
0x000668d8 beq 0x6686c | goto label_1;
| }
0x000668da ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000668dc subs r3, 1 | r3--;
0x000668de str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x000668e0 cmp r3, 0 |
| if (r3 != 0) {
0x000668e2 bne 0x6686c | goto label_1;
| }
0x000668e4 mov r0, r4 | r0 = r4;
0x000668e6 bl 0x22944 | fcn_00022944 (r0);
0x000668ea b 0x6686c | goto label_1;
| label_6:
0x000668ec ldrb r3, [r7, 5] | r3 = *((r7 + 5));
0x000668ee cmp r3, 1 |
0x000668f0 it eq |
| if (r3 == 1) {
0x000668f2 strbeq r3, [r7, 0x11] | *((r7 + 0x11)) = r3;
| goto label_9;
| }
| if (r3 != 1) {
| label_9:
0x000668f4 bne 0x668a0 | goto label_2;
| }
| label_8:
0x000668f6 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000668f8 movs r2, 1 | r2 = 1;
0x000668fa ldr.w r0, [r8, 0x40] | r0 = *((r8 + 0x40));
0x000668fe subs r3, 1 | r3--;
0x00066900 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00066902 strb.w r2, [r8, 0x14] | *((r8 + 0x14)) = r2;
0x00066906 bl 0x33430 | fcn_00033430 (r0);
0x0006690a movs r3, 0 | r3 = 0;
0x0006690c mov r0, r4 | r0 = r4;
0x0006690e str.w r3, [r8, 0x40] | __asm ("str.w r3, [r8, 0x40]");
0x00066912 bl 0x66768 | fcn_00066768 (r0);
0x00066916 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00066918 cmp r3, 0 |
| if (r3 == 0) {
0x0006691a beq 0x6686a | goto label_0;
| }
0x0006691c b 0x66872 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x678f8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.000678f8 () | void fcn_000678f8 (int16_t arg_60h, int16_t arg_64h, int16_t arg_88h, int16_t arg_200h, int16_t arg_248h, int16_t arg_278h, int16_t arg_2c0h, int16_t arg_2e0h, int16_t arg_318h, int16_t arg_358h, int16_t arg_398h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_24h_2;
| int16_t var_28h_3;
| int16_t var_2ah;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000678f8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000678fc mov r6, r0 | r6 = r0;
0x000678fe ldr r0, [pc, 0x3e0] |
0x00067900 mov r5, r1 | r5 = r1;
0x00067902 sub sp, 0x3c |
0x00067904 ldr r1, [pc, 0x3dc] | r1 = *(0x67ce4);
0x00067906 ldr.w sl, [r5, 4] | sl = *((r5 + 4));
0x0006790a add r0, pc | r0 = 0xcf5f0;
0x0006790c ldr.w r8, [r6] | r8 = *(r6);
0x00067910 ldr r1, [r0, r1] |
0x00067912 cmp.w sl, 2 |
0x00067916 ldr r1, [r1] | r1 = *(0xcf5f0);
0x00067918 str r1, [sp, 0x34] | var_34h = r1;
0x0006791a mov.w r1, 0 | r1 = 0;
0x0006791e str r3, [sp, 8] | var_8h = r3;
| if (sl < 2) {
0x00067920 bls.w 0x67b3e | goto label_16;
| }
0x00067924 mov r7, r2 | r7 = r2;
0x00067926 ldrb.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x0006792a ldr.w sb, [r5, 0x48] | sb = *((r5 + 0x48));
0x0006792e cmp r2, 0 |
| if (r2 != 0) {
0x00067930 bne.w 0x67b2e | goto label_17;
| }
| label_3:
0x00067934 ldrh.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x00067938 lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 < r2) {
0x0006793a bmi 0x67a16 | goto label_18;
| }
| label_0:
0x0006793c ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0006793e mov r0, r8 | r0 = r8;
0x00067940 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x00067942 eor r4, r3, 1 | r4 = r3 ^ 1;
0x00067946 and r4, r4, 1 | r4 &= 1;
0x0006794a ands.w r4, r4, r2, lsr 3 | r4 &= (r2 >> 3);
0x0006794e bic r2, r2, 8 | r2 = BIT_MASK (r2, 8);
0x00067952 strh.w r2, [sb, 0x1c] | *((sb + 0x1c)) = r2;
0x00067956 itet ne |
| if (r4 == r4) {
0x00067958 ldrne r3, [sb, 0x18] | r3 = *((sb + 0x18));
| }
| if (r4 != r4) {
0x0006795a addeq r0, 0x18 | r0 += 0x18;
| }
| if (r4 == r4) {
0x0006795c strne r4, [sp, 0xc] | var_ch_2 = r4;
| }
0x0006795e str r3, [sp, 0xc] | var_ch_2 = r3;
0x00067960 bl 0x2bc28 | r0 = fcn_0002bc28 (r0, r1);
0x00067964 mov fp, r0 |
0x00067966 cmp r0, 0 |
| if (r0 == 0) {
0x00067968 beq.w 0x67be0 | goto label_19;
| }
0x0006796c ldrsh.w r1, [r0, 0x1e] | r1 = *((r0 + 0x1e));
0x00067970 cmp r1, 1 |
| if (r1 > 1) {
0x00067972 bgt.w 0x67b7a | goto label_20;
| }
0x00067976 ldrh r1, [r0, 0x1c] | r1 = *((r0 + 0x1c));
0x00067978 ldrh.w ip, [sb, 0x1c] | ip = *((sb + 0x1c));
0x0006797c and r1, r1, 8 | r1 &= 8;
0x00067980 orr.w r1, r1, ip | r1 |= ip;
0x00067984 strh.w r1, [sb, 0x1c] | *((sb + 0x1c)) = r1;
0x00067988 ldrb.w r1, [r8, 0xc] | r1 = *((r8 + 0xc));
0x0006798c cmp r1, 0 |
| if (r1 == 0) {
0x0006798e beq.w 0x67b62 | goto label_21;
| }
0x00067992 ldr.w r1, [r8, 0x1c] | r1 = *((r8 + 0x1c));
0x00067996 adds r1, 1 | r1++;
0x00067998 bl 0x22588 | fcn_00022588 (r0, r1);
| label_4:
0x0006799c ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000679a0 mov r0, sb | r0 = sb;
0x000679a2 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x000679a4 mov r4, r3 | r4 = r3;
0x000679a6 bl 0x22588 | fcn_00022588 (r0, r1);
0x000679aa ldrh.w r1, [sb, 0x1c] | r1 = *((sb + 0x1c));
0x000679ae tst.w r1, 0x11 |
| if ((r1 & 0x11) != 0) {
0x000679b2 beq 0x679c8 |
| label_8:
0x000679b4 movw r0, 0xffef | r0 = 0xffef;
0x000679b8 lsls r2, r1, 0x1f | r2 = r1 << 0x1f;
0x000679ba and.w r0, r0, r1 | r0 &= r1;
0x000679be it pl |
| if (r2 >= r1) {
0x000679c0 strhpl r0, [sb, 0x1c] | __asm ("strhpl r0, [sb, 0x1c]");
| }
| if (r2 < r1) {
0x000679c4 bmi.w 0x67b68 | goto label_22;
| }
| }
| label_5:
0x000679c8 ldrb.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x000679cc cmp r3, 0 |
0x000679ce it ne |
| if (r3 != 0) {
0x000679d0 cmpne fp, 0 | __asm ("cmpne fp, 0");
| }
| if (r3 != 0) {
0x000679d4 bne.w 0x67bb2 | goto label_23;
| }
| label_7:
0x000679d8 ldr r1, [sp, 0xc] | r1 = var_ch_2;
| if (r1 == 0) {
0x000679da cbz r1, 0x67a3e | goto label_24;
| }
0x000679dc ldr.w r4, [r8, 0xdc] | r4 = *((r8 + 0xdc));
0x000679e0 movs r3, 0 | r3 = 0;
0x000679e2 add r2, sp, 0x18 | r2 += var_18h;
0x000679e4 mov r0, r8 | r0 = r8;
0x000679e6 mov sb, r1 | sb = r1;
0x000679e8 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x000679ea mov fp, r0 |
| if (r0 == 0) {
0x000679ec cbz r0, 0x67a28 | goto label_25;
| }
0x000679ee ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000679f2 cmp sb, r3 |
| if (sb < r3) {
0x000679f4 bls.w 0x67c1a | goto label_26;
| }
| do {
| label_1:
0x000679f8 ldr r2, [pc, 0x2ec] |
0x000679fa ldr r3, [pc, 0x2e8] | r3 = *(0x67ce6);
0x000679fc add r2, pc | r2 = 0xcf6e8;
0x000679fe ldr r3, [r2, r3] | r3 = *(0xcf6e8);
0x00067a00 ldr r2, [r3] | r2 = *(0xcf6e8);
0x00067a02 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00067a04 eors r2, r3 | r2 ^= r3;
0x00067a06 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00067a0a bne.w 0x67cdc | goto label_27;
| }
0x00067a0e mov r0, fp | r0 = fp;
0x00067a10 add sp, 0x3c |
0x00067a12 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x00067a16 mov r0, sb | r0 = sb;
0x00067a18 bl 0x33db4 | r0 = fcn_00033db4 (r0);
0x00067a1c mov fp, r0 |
0x00067a1e cmp r0, 0 |
0x00067a20 bne 0x679f8 |
| } while (r0 != 0);
0x00067a22 ldrh.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x00067a26 b 0x6793c | goto label_0;
| label_25:
0x00067a28 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00067a2a ldrh r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x00067a2c tst.w r3, 0x11 |
| if ((r3 & 0x11) != 0) {
0x00067a30 bne.w 0x67bfc | goto label_28;
| }
0x00067a34 orr r2, r3, 8 | r2 = r3 | 8;
| label_9:
0x00067a38 strh r2, [r0, 0x1c] | *((r0 + 0x1c)) = r2;
| label_10:
0x00067a3a bl 0x2a5a4 | fcn_0002a5a4 (r0);
| label_24:
0x00067a3e ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00067a40 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00067a42 movs r3, 0 | r3 = 0;
0x00067a44 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00067a46 and r3, r7, 0xfb | r3 = r7 & 0xfb;
0x00067a4a cmp r3, 1 |
| if (r3 == 1) {
0x00067a4c beq.w 0x67b9a | goto label_29;
| }
0x00067a50 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x00067a52 ldr r1, [r3] | r1 = *(r3);
0x00067a54 cmp r1, 0 |
| if (r1 != 0) {
0x00067a56 bne.w 0x67bc2 | goto label_30;
| }
| label_6:
0x00067a5a ldr r1, [sp, 8] | r1 = var_8h;
0x00067a5c movs r3, 0 | r3 = 0;
0x00067a5e add r2, sp, 0x10 | r2 += var_10h;
0x00067a60 mov r0, r6 | r0 = r6;
0x00067a62 bl 0x22b3c | r0 = fcn_00022b3c (r0, r1, r2);
0x00067a66 mov fp, r0 |
0x00067a68 str r0, [sp, 0x14] | var_14h_2 = r0;
0x00067a6a cmp r0, 0 |
| if (r0 != 0) {
0x00067a6c bne 0x679f8 | goto label_1;
| }
0x00067a6e ldr r4, [sp, 0x10] | r4 = var_10h;
0x00067a70 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00067a72 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x00067a76 mov fp, r0 |
0x00067a78 str r0, [sp, 0x14] | var_14h_2 = r0;
0x00067a7a cmp r0, 0 |
| if (r0 != 0) {
0x00067a7c bne.w 0x67c42 | goto label_31;
| }
0x00067a80 cmp r7, 4 |
| if (r7 == 4) {
0x00067a82 beq.w 0x67c2a | goto label_32;
| }
0x00067a86 ldrb r3, [r4] | r3 = *(r4);
0x00067a88 cmp r3, 0 |
| if (r3 == 0) {
0x00067a8a beq.w 0x67c7a | goto label_33;
| }
| label_13:
0x00067a8e ldrh r5, [r4, 0x18] | r5 = *((r4 + 0x18));
0x00067a90 cmp r5, 0 |
| if (r5 == 0) {
0x00067a92 beq.w 0x67c56 | goto label_34;
| }
0x00067a96 add.w r8, sp, 0x18 | r8 += var_18h;
0x00067a9a b 0x67ab0 |
| while (r7 != 3) {
0x00067a9c ldr r2, [r0, r3] | r2 = *((r0 + r3));
0x00067a9e rev r2, r2 | r2 = SWAP32 (r2);
0x00067aa0 cmp sl, r2 |
| if (sl == r2) {
0x00067aa2 beq.w 0x67c4a | goto label_35;
| }
| label_2:
0x00067aa6 add.w fp, fp, 1 |
0x00067aaa cmp r5, fp |
| if (r5 == fp) {
0x00067aac beq.w 0x67c56 | goto label_34;
| }
0x00067ab0 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00067ab2 cmp r7, 3 |
0x00067ab4 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x00067ab6 ldrh.w r2, [r3, fp, lsl 1] | offset_0 = fp << 1;
| r2 = *((r3 + offset_0));
0x00067aba ldrh r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x00067abc rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00067abe and.w r3, r3, r2 | r3 &= r2;
0x00067ac2 add.w sb, r0, r3 | sb = r0 + r3;
0x00067ac6 bne 0x67a9c |
| }
0x00067ac8 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00067aca mov r2, r8 | r2 = r8;
0x00067acc mov r1, sb | r1 = sb;
0x00067ace mov r0, r4 | r0 = r4;
0x00067ad0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00067ad2 ldrh.w r2, [sp, 0x28] | r2 = var_28h_3;
0x00067ad6 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x00067ad8 cmp r2, r3 |
| if (r2 >= r3) {
0x00067ada bhs 0x67aa6 | goto label_2;
| }
0x00067adc ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00067ade ldrh.w r2, [sp, 0x2a] | r2 = var_2ah;
0x00067ae2 ldr r1, [r3, 0x28] | r1 = *((r3 + 0x28));
0x00067ae4 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00067ae6 add r3, r1 | r3 += r1;
0x00067ae8 add.w r1, sb, r2 | r1 = sb + r2;
0x00067aec cmp r1, r3 |
| if (r1 > r3) {
0x00067aee bhi.w 0x67cca | goto label_36;
| }
0x00067af2 subs r2, 4 | r2 -= 4;
0x00067af4 ldr.w r3, [sb, r2] | r3 = *((sb + r2));
0x00067af8 rev r3, r3 | r3 = SWAP32 (r3);
0x00067afa cmp sl, r3 |
| if (sl != r3) {
0x00067afc bne 0x67aa6 | goto label_2;
| }
0x00067afe mov r3, r2 | r3 = r2;
0x00067b00 ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x00067b02 cmp r5, fp |
0x00067b04 rev r2, r2 | r2 = SWAP32 (r2);
0x00067b06 str.w r2, [sb, r3] | __asm ("str.w r2, [sb, r3]");
| if (r5 == fp) {
0x00067b0a beq.w 0x67cb8 | goto label_37;
| }
| label_11:
0x00067b0e movs r3, 0 | r3 = 0;
0x00067b10 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00067b12 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00067b14 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| label_12:
0x00067b18 add r4, sp, 0x14 | r4 += var_14h_2;
0x00067b1a ldr r3, [sp, 8] | r3 = var_8h;
0x00067b1c ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x00067b1e mov r2, r7 | r2 = r7;
0x00067b20 mov r0, r6 | r0 = r6;
0x00067b22 str r4, [sp] | *(sp) = r4;
0x00067b24 bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x00067b28 ldr.w fp, [sp, 0x14] | fp = var_14h_2;
0x00067b2c b 0x679f8 | goto label_1;
| label_17:
0x00067b2e mov r0, sb | r0 = sb;
0x00067b30 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x00067b34 mov fp, r0 |
0x00067b36 cmp r0, 0 |
| if (r0 == 0) {
0x00067b38 beq.w 0x67934 | goto label_3;
| }
0x00067b3c b 0x679f8 | goto label_1;
| label_16:
0x00067b3e ldr r4, [pc, 0x1ac] |
0x00067b40 movw r3, 0x1532 |
0x00067b42 strh r2, [r6, r4] | *((r6 + r4)) = r2;
0x00067b44 ldr r2, [pc, 0x1a8] |
0x00067b46 movt r3, 1 | r3 = 0x11532;
0x00067b4a ldr r1, [pc, 0x1a8] |
0x00067b4c movs r0, 0xb | r0 = 0xb;
0x00067b4e add r4, pc | r4 = "prettyprint";
0x00067b50 adds r4, 0x14 | r4 += 0x14;
0x00067b52 add r2, pc | r2 = 0xcf846;
0x00067b54 add r1, pc | r1 = 0xcf84e;
0x00067b56 str r4, [sp] | *(sp) = r4;
0x00067b58 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| do {
| label_14:
0x00067b5c mov.w fp, 0xb |
0x00067b60 b 0x679f8 | goto label_1;
| label_21:
0x00067b62 bl 0x22550 | fcn_00022550 (r0);
0x00067b66 b 0x6799c | goto label_4;
| label_22:
0x00067b68 eor r0, r0, 3 | r0 ^= 3;
0x00067b6c movs r1, 2 | r1 = 2;
0x00067b6e strh.w r0, [sb, 0x1c] | *((sb + 0x1c)) = r0;
0x00067b72 mov r0, sb | r0 = sb;
0x00067b74 bl 0x2245c | fcn_0002245c (r0, r1);
0x00067b78 b 0x679c8 | goto label_5;
| label_20:
0x00067b7a ldr r4, [pc, 0x17c] |
0x00067b7c bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067b80 ldr r2, [pc, 0x178] |
0x00067b82 movw r3, 0xef9f | r3 = 0xef9f;
0x00067b86 ldr r1, [pc, 0x178] |
0x00067b88 add r4, pc | r4 = 0xcf886;
0x00067b8a adds r4, 0x14 | r4 += 0x14;
0x00067b8c movs r0, 0xb | r0 = 0xb;
0x00067b8e add r2, pc | r2 = 0xcf88e;
0x00067b90 str r4, [sp] | *(sp) = r4;
0x00067b92 add r1, pc | r1 = 0xcf898;
0x00067b94 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00067b98 b 0x67b5c |
| } while (1);
| label_29:
0x00067b9a mov r0, r5 | r0 = r5;
0x00067b9c bl 0x67474 | r0 = fcn_00067474 (r0);
0x00067ba0 mov fp, r0 |
0x00067ba2 str r0, [sp, 0x14] | var_14h_2 = r0;
0x00067ba4 cmp r0, 0 |
| if (r0 != 0) {
0x00067ba6 bne.w 0x679f8 | goto label_1;
| }
0x00067baa cmp r7, 1 |
| if (r7 == 1) {
0x00067bac beq.w 0x679f8 | goto label_1;
| }
0x00067bb0 b 0x67a5a | goto label_6;
| label_23:
0x00067bb2 mov r0, fp | r0 = fp;
0x00067bb4 mov r1, r4 | r1 = r4;
0x00067bb6 bl 0x22588 | fcn_00022588 (r0, r1);
0x00067bba mov r0, fp | r0 = fp;
0x00067bbc bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067bc0 b 0x679d8 | goto label_7;
| label_30:
0x00067bc2 add r3, sp, 0x14 | r3 += var_14h_2;
0x00067bc4 rev r1, r1 | r1 = SWAP32 (r1);
0x00067bc6 str r3, [sp] | *(sp) = r3;
0x00067bc8 movs r2, 4 | r2 = 4;
0x00067bca ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00067bcc mov r0, r6 | r0 = r6;
0x00067bce bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x00067bd2 ldr.w fp, [sp, 0x14] | fp = var_14h_2;
0x00067bd6 cmp.w fp, 0 |
| if (fp == 0) {
0x00067bda beq.w 0x67a5a | goto label_6;
| }
0x00067bde b 0x679f8 | goto label_1;
| label_19:
0x00067be0 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00067be4 mov r0, sb | r0 = sb;
0x00067be6 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x00067be8 mov r4, r3 | r4 = r3;
0x00067bea bl 0x22588 | fcn_00022588 (r0, r1);
0x00067bee ldrh.w r1, [sb, 0x1c] | r1 = *((sb + 0x1c));
0x00067bf2 tst.w r1, 0x11 |
| if ((r1 & 0x11) != 0) {
0x00067bf6 bne.w 0x679b4 | goto label_8;
| }
0x00067bfa b 0x679d8 | goto label_7;
| label_28:
0x00067bfc bic r2, r3, 0x10 | r2 = BIT_MASK (r3, 0x10);
0x00067c00 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x00067c02 orr r2, r2, 8 | r2 |= 8;
| if (r3 >= r3) {
0x00067c06 bpl.w 0x67a38 | goto label_9;
| }
0x00067c0a eor r2, r2, 3 | r2 ^= 3;
0x00067c0e movs r1, 2 | r1 = 2;
0x00067c10 strh r2, [r0, 0x1c] | *((r0 + 0x1c)) = r2;
0x00067c12 bl 0x2245c | fcn_0002245c (r0, r1);
0x00067c16 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00067c18 b 0x67a3a | goto label_10;
| label_26:
0x00067c1a ldr.w r2, [r8, 0xf0] | r2 = *((r8 + 0xf0));
0x00067c1e ldr.w r0, [r8, 0x3c] | r0 = *((r8 + 0x3c));
0x00067c22 ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x00067c24 bl 0x25570 | fcn_00025570 (r0, r1, r2);
0x00067c28 b 0x679f8 | goto label_1;
| label_32:
0x00067c2a ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x00067c2c ldr r3, [r2] | r3 = *(r2);
0x00067c2e rev r3, r3 | r3 = SWAP32 (r3);
0x00067c30 cmp sl, r3 |
| if (sl != r3) {
0x00067c32 bne 0x67c92 | goto label_38;
| }
0x00067c34 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00067c36 rev r3, r3 | r3 = SWAP32 (r3);
0x00067c38 str r3, [r2] | *(r2) = r3;
0x00067c3a ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00067c3c bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067c3e ldc2 p7, c14, [r2], 0x1a8 | __asm ("ldc2 p7, c14, [r2], 0x1a8");
| label_31:
0x00067c42 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00067c44 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067c48 b 0x679f8 | goto label_1;
| label_35:
0x00067c4a ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x00067c4c cmp r5, fp |
0x00067c4e rev r2, r2 | r2 = SWAP32 (r2);
0x00067c50 str r2, [r0, r3] | *((r0 + r3)) = r2;
| if (r5 != fp) {
0x00067c52 bne.w 0x67b0e | goto label_11;
| }
| label_34:
0x00067c56 cmp r7, 5 |
| if (r7 != 5) {
0x00067c58 bne 0x67cb8 | goto label_37;
| }
0x00067c5a ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00067c5c ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x00067c5e adds r3, 8 | r3 += 8;
0x00067c60 ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x00067c62 rev r2, r2 | r2 = SWAP32 (r2);
0x00067c64 cmp sl, r2 |
| if (sl != r2) {
0x00067c66 bne 0x67cb8 | goto label_37;
| }
0x00067c68 ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x00067c6a rev r2, r2 | r2 = SWAP32 (r2);
0x00067c6c str r2, [r1, r3] | *((r1 + r3)) = r2;
0x00067c6e movs r3, 0 | r3 = 0;
0x00067c70 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00067c72 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00067c74 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067c78 b 0x67b18 | goto label_12;
| label_33:
0x00067c7a mov r0, r4 | r0 = r4;
0x00067c7c bl 0x53214 | r0 = fcn_00053214 (r0);
0x00067c80 mov r3, r0 | r3 = r0;
0x00067c82 cmp r0, 0 |
| if (r0 == 0) {
0x00067c84 beq.w 0x67a8e | goto label_13;
| }
0x00067c86 add r7, sp, 0xc | r7 = sp + 0xc;
0x00067c88 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00067c8a mov fp, r3 |
0x00067c8c bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067c90 b 0x679f8 | goto label_1;
| label_38:
0x00067c92 ldr r0, [pc, 0x70] |
0x00067c94 movw r3, 0x14ea | r3 = 0x14ea;
0x00067c98 ldr r2, [pc, 0x6c] |
0x00067c9a ldr r1, [pc, 0x70] |
0x00067c9c add r0, pc | r0 = 0xcf9a6;
0x00067c9e add r2, pc | r2 = 0xcf9aa;
0x00067ca0 add r1, pc | r1 = 0xcf9b2;
| do {
| label_15:
0x00067ca2 adds r0, 0x14 | r0 += 0x14;
0x00067ca4 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x00067ca8 str r0, [sp] | *(sp) = r0;
0x00067caa movs r0, 0xb | r0 = 0xb;
0x00067cac bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00067cae ldc2 p12, c6, [r2, 0x280]! | __asm ("ldc2 p12, c6, [r2, 0x280]!");
0x00067cb2 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00067cb6 b 0x67b5c | goto label_14;
| label_37:
0x00067cb8 ldr r0, [pc, 0x54] |
0x00067cba movw r3, 0x150f | r3 = 0x150f;
0x00067cbe ldr r2, [pc, 0x54] |
0x00067cc0 ldr r1, [pc, 0x54] |
0x00067cc2 add r0, pc | r0 = 0xcf9d6;
0x00067cc4 add r2, pc | r2 = 0xcf9de;
0x00067cc6 add r1, pc | r1 = 0xcf9e2;
0x00067cc8 b 0x67ca2 |
| } while (1);
| label_36:
0x00067cca ldr r0, [pc, 0x50] |
0x00067ccc movw r3, 0x14fd | r3 = 0x14fd;
0x00067cd0 ldr r2, [pc, 0x4c] |
0x00067cd2 ldr r1, [pc, 0x50] |
0x00067cd4 add r0, pc | r0 = 0xcf9f6;
0x00067cd6 add r2, pc | r2 = 0xcf9fa;
0x00067cd8 add r1, pc | r1 = 0xcfa02;
0x00067cda b 0x67ca2 | goto label_15;
| label_27:
0x00067cdc blx 0x6430 | fcn_00006430 ();
0x00067ce0 movs r4, 0x8e | r4 = 0x8e;
0x00067ce2 movs r0, r1 | r0 = r1;
0x00067ce4 lsls r4, r6, 8 | r4 = r6 << 8;
0x00067ce6 movs r0, r0 |
0x00067ce8 movs r3, 0x9c | r3 = 0x9c;
0x00067cea movs r0, r1 | r0 = r1;
0x00067cec cmp r2, r6 |
0x00067cee movs r6, r0 | r6 = r0;
0x00067cf0 str r6, [sp, 0x88] | *(arg_88h) = r6;
0x00067cf2 movs r6, r0 | r6 = r0;
0x00067cf4 str r6, [sp, 0x10] | var_10h = r6;
0x00067cf6 movs r6, r0 | r6 = r0;
0x00067cf8 add r8, pc | r8 += pc;
0x00067cfa movs r6, r0 | r6 = r0;
0x00067cfc str r5, [sp, 0x398] | *(arg_398h) = r5;
0x00067cfe movs r6, r0 | r6 = r0;
0x00067d00 str r5, [sp, 0x318] | *(arg_318h) = r5;
0x00067d02 movs r6, r0 | r6 = r0;
0x00067d04 mvns r4, r4 | r4 = ~r4;
0x00067d06 movs r6, r0 | r6 = r0;
0x00067d08 str r4, [sp, 0x358] | *(arg_358h) = r4;
0x00067d0a movs r6, r0 | r6 = r0;
0x00067d0c str r4, [sp, 0x2e0] | *(arg_2e0h) = r4;
0x00067d0e movs r6, r0 | r6 = r0;
0x00067d10 bics r6, r7 | __asm ("bics r6, r7");
0x00067d12 movs r6, r0 | r6 = r0;
0x00067d14 str r4, [sp, 0x2c0] | *(arg_2c0h) = r4;
0x00067d16 movs r6, r0 | r6 = r0;
0x00067d18 str r4, [sp, 0x248] | *(arg_248h) = r4;
0x00067d1a movs r6, r0 | r6 = r0;
0x00067d1c bics r4, r5 | __asm ("bics r4, r5");
0x00067d1e movs r6, r0 | r6 = r0;
0x00067d20 str r4, [sp, 0x278] | *(arg_278h) = r4;
0x00067d22 movs r6, r0 | r6 = r0;
0x00067d24 str r4, [sp, 0x200] | *(arg_200h) = r4;
0x00067d26 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x67f88 */
| #include <stdint.h>
|
; (fcn) fcn.00067f88 () | void fcn_00067f88 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_28h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x00067f88 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00067f8c mov r4, r3 | r4 = r3;
0x00067f8e ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00067f90 sub sp, 8 |
0x00067f92 mov r7, r0 | r7 = r0;
0x00067f94 mov r6, r1 | r6 = r1;
0x00067f96 ldr r5, [sp, 0x28] | r5 = var_28h;
0x00067f98 sub.w sb, r3, r4 | sb = r3 - r4;
0x00067f9c cmp.w sb, 0 |
| if (sb <= 0) {
0x00067fa0 ble 0x67fc8 | goto label_3;
| }
0x00067fa2 cmp sb, r5 |
0x00067fa4 mov r8, r2 | r8 = r2;
0x00067fa6 it ge |
| if (sb < r5) {
0x00067fa8 movge sb, r5 | sb = r5;
| }
| if (sb < r5) {
0x00067faa blt 0x67ffc | goto label_4;
| }
0x00067fac ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x00067fb0 mov r2, sb | r2 = sb;
0x00067fb2 mov r0, r6 | r0 = r6;
0x00067fb4 add r1, r4 | r1 += r4;
0x00067fb6 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
| if (r0 != 0) {
0x00067fba cbnz r0, 0x68020 | goto label_5;
| }
| do {
| label_0:
0x00067fbc mov.w sl, 0 | sl = 0;
| label_2:
0x00067fc0 mov r0, sl | r0 = sl;
0x00067fc2 add sp, 8 |
0x00067fc4 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x00067fc8 cmp r5, 0 |
0x00067fca ble 0x67fbc |
| } while (r5 <= 0);
0x00067fcc subs r3, r1, 1 | r3 = r1 - 1;
0x00067fce movs r4, 0 | r4 = 0;
0x00067fd0 b 0x67fd8 | goto label_6;
| label_1:
0x00067fd2 adds r4, 1 | r4++;
0x00067fd4 cmp r5, r4 |
| if (r5 == r4) {
0x00067fd6 beq 0x67fbc | goto label_0;
| }
| label_6:
0x00067fd8 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00067fdc cmp r2, 0 |
| if (r2 == 0) {
0x00067fde beq 0x67fd2 | goto label_1;
| }
0x00067fe0 cmp r5, r4 |
| if (r5 <= r4) {
0x00067fe2 ble 0x67fbc | goto label_0;
| }
0x00067fe4 ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x00067fe6 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x00067fea mov sl, r0 | sl = r0;
0x00067fec cmp r0, 0 |
| if (r0 != 0) {
0x00067fee bne 0x67fc0 | goto label_2;
| }
0x00067ff0 mov r1, r0 | r1 = r0;
0x00067ff2 subs r2, r5, r4 | r2 = r5 - r4;
0x00067ff4 adds r0, r6, r4 | r0 = r6 + r4;
0x00067ff6 blx 0x62ec | fcn_000062ec ();
0x00067ffa b 0x67fc0 | goto label_2;
| label_4:
0x00067ffc sub.w r5, r5, sb | r5 -= sb;
0x00068000 add r1, sb | r1 += sb;
0x00068002 str r5, [sp] | *(sp) = r5;
0x00068004 bl 0x67f88 | r0 = fcn_00067f88 (r0, r1, r2, r3);
0x00068008 mov sl, r0 | sl = r0;
0x0006800a cmp r0, 0 |
| if (r0 != 0) {
0x0006800c bne 0x67fc0 | goto label_2;
| }
0x0006800e ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x00068012 mov r2, sb | r2 = sb;
0x00068014 mov r0, r6 | r0 = r6;
0x00068016 add r1, r4 | r1 += r4;
0x00068018 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x0006801c cmp r0, 0 |
| if (r0 == 0) {
0x0006801e beq 0x67fbc | goto label_0;
| }
| label_5:
0x00068020 ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x00068022 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x00068026 mov sl, r0 | sl = r0;
0x00068028 cmp r0, 0 |
| if (r0 != 0) {
0x0006802a bne 0x67fc0 | goto label_2;
| }
0x0006802c ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x00068030 mov r2, sb | r2 = sb;
0x00068032 mov r0, r6 | r0 = r6;
0x00068034 add r1, r4 | r1 += r4;
0x00068036 blx 0x6354 | realloc (r0, r1);
0x0006803a b 0x67fc0 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x684d8 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.000684d8 () | void fcn_000684d8 (int16_t arg_38h, int16_t arg_3ch, int16_t arg1, uint32_t arg2) {
| int16_t var_1ch;
| int16_t var_0h;
| int16_t var_4ch;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x000684d8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000684dc sub sp, 0x18 |
0x000684de ldr r5, [pc, 0x15c] |
0x000684e0 mov r6, r0 | r6 = r0;
0x000684e2 ldr r4, [pc, 0x15c] | r4 = *(0x68642);
0x000684e4 ldrh.w r0, [sp, 0x3c] | r0 = *(arg_3ch);
0x000684e8 add r5, pc | r5 = 0xd0b2a;
0x000684ea ldr r4, [r5, r4] |
0x000684ec add r2, r0 | r2 += r0;
0x000684ee cmp r1, r2 |
0x000684f0 ldr r4, [r4] | r4 = *(0xd0b2a);
0x000684f2 str r4, [sp, 0x14] | var_14h = r4;
0x000684f4 mov.w r4, 0 | r4 = 0;
0x000684f8 ldrh.w r4, [sp, 0x38] | r4 = *(arg_38h);
| if (r1 <= r2) {
0x000684fc blo.w 0x68626 | goto label_6;
| }
0x00068500 ldr r1, [r6, 0x28] | r1 = *((r6 + 0x28));
0x00068502 subs r3, 1 | r3--;
0x00068504 ldr sl, [r2, -0x4] | sl = *((r2 - 0x4));
0x00068508 subs r0, r3, r4 | r0 = r3 - r4;
0x0006850a subs r1, 4 | r1 -= 4;
0x0006850c add r0, r1 | r0 += r1;
0x0006850e rev.w sl, sl | sl = SWAP32 (sl);
0x00068512 bl 0xc4508 | r0 = fcn_000c4508 (r0, r1, r2);
0x00068516 subs r5, r0, 1 | r5 = r0 - 1;
0x00068518 cmp r0, 0 |
| if (r0 == 0) {
0x0006851a beq.w 0x68622 | goto label_7;
| }
0x0006851e cmp.w sl, 1 |
0x00068522 mov.w r3, 0 | r3 = 0;
0x00068526 itt hi |
| if (sl <= 1) {
0x00068528 addhi r8, sp, 0xc | r8 += var_ch;
| }
| if (sl > 1) {
0x0006852c add r7, sp, 0x10 | r7 += var_10h;
| }
0x0006852e strd r3, r3, [sp, 0xc] | __asm ("strd r3, r3, [var_ch]");
| if (sl < 1) {
0x00068532 bls 0x685c8 | goto label_8;
| }
| label_0:
0x00068534 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x00068536 cmp r3, sl |
| if (r3 <= sl) {
0x00068538 blo 0x685c8 | goto label_8;
| }
0x0006853a cmp r5, 0 |
| if (r5 != 0) {
0x0006853c bne 0x685e8 | goto label_9;
| }
0x0006853e ldr.w sb, [sp, 0x10] | sb = var_10h;
0x00068542 cmp.w sb, 0 |
| if (sb == 0) {
0x00068546 beq 0x68604 | goto label_10;
| }
| label_3:
0x00068548 ldr.w r3, [sb, 0x48] | r3 = *((sb + 0x48));
0x0006854c ldrsh.w r3, [r3, 0x1e] | r3 = *((r3 + 0x1e));
0x00068550 cmp r3, 1 |
| if (r3 == 1) {
0x00068552 beq 0x6859a | goto label_11;
| }
0x00068554 ldr r4, [pc, 0xec] |
0x00068556 movw r3, 0x20cf |
0x0006855a ldr r2, [pc, 0xec] |
0x0006855c movs r0, 0xb | r0 = 0xb;
0x0006855e ldr r1, [pc, 0xec] |
0x00068560 movt r3, 1 | r3 = 0x120cf;
0x00068564 add r4, pc | r4 = 0xd0bac;
0x00068566 adds r4, 0x14 | r4 += 0x14;
0x00068568 add r2, pc | r2 = 0xd0bb6;
0x0006856a add r1, pc | r1 = 0xd0bbc;
0x0006856c str r4, [sp] | *(sp) = r4;
0x0006856e bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00068572 ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
| if (r0 != 0) {
0x00068576 cbz r0, 0x6857c |
0x00068578 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
| label_1:
0x0006857c movs r4, 0xb | r4 = 0xb;
| do {
| label_2:
0x0006857e ldr r2, [pc, 0xd0] |
0x00068580 ldr r3, [pc, 0xbc] | r3 = *(0x68640);
0x00068582 add r2, pc | r2 = 0xd0bd8;
0x00068584 ldr r3, [r2, r3] | r3 = *(0xd0bd8);
0x00068586 ldr r2, [r3] | r2 = *(0xd0bd8);
0x00068588 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006858a eors r2, r3 | r2 ^= r3;
0x0006858c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00068590 bne 0x68638 | goto label_12;
| }
0x00068592 mov r0, r4 | r0 = r4;
0x00068594 add sp, 0x18 |
0x00068596 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_11:
0x0006859a mov r2, sl | r2 = sl;
0x0006859c mov r1, sb | r1 = sb;
0x0006859e mov r0, r6 | r0 = r6;
0x000685a0 bl 0x68198 | r0 = fcn_00068198 (r0, r1, r2, r3);
0x000685a4 mov r4, r0 | r4 = r0;
0x000685a6 ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
| if (r0 != 0) {
0x000685aa cbz r0, 0x685b0 |
0x000685ac bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
| label_4:
0x000685b0 cmp r4, 0 |
0x000685b2 bne 0x6857e |
| } while (r4 != 0);
0x000685b4 ldr.w sl, [sp, 0xc] | sl = var_ch;
| if (r5 == 0) {
0x000685b8 cbz r5, 0x68622 | goto label_7;
| }
0x000685ba cmp.w sl, 1 |
0x000685be add.w r5, r5, -1 | r5 += -1;
0x000685c2 strd r4, r4, [sp, 0xc] | __asm ("strd r4, r4, [var_ch]");
| if (sl > 1) {
0x000685c6 bhi 0x68534 | goto label_0;
| }
| label_8:
0x000685c8 ldr r4, [pc, 0x88] |
0x000685ca movw r3, 0x20bb | r3 = 0x20bb;
0x000685ce ldr r2, [pc, 0x88] |
0x000685d0 ldr r1, [pc, 0x88] |
0x000685d2 add r4, pc | r4 = 0xd0c2a;
0x000685d4 add r2, pc | r2 = 0xd0c32;
0x000685d6 add r1, pc | r1 = 0xd0c36;
| label_5:
0x000685d8 adds r4, 0x14 | r4 += 0x14;
0x000685da movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x000685de movs r0, 0xb | r0 = 0xb;
0x000685e0 str r4, [sp] | *(sp) = r4;
0x000685e2 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000685e6 b 0x6857c | goto label_1;
| label_9:
0x000685e8 mov r3, r8 | r3 = r8;
0x000685ea mov r2, r7 | r2 = r7;
0x000685ec mov r1, sl | r1 = sl;
0x000685ee mov r0, r6 | r0 = r6;
0x000685f0 bl 0x52ec4 | r0 = fcn_00052ec4 (r0, r1, r2, r3, r4, r5);
0x000685f4 mov r4, r0 | r4 = r0;
0x000685f6 cmp r0, 0 |
| if (r0 != 0) {
0x000685f8 bne 0x6857e | goto label_2;
| }
0x000685fa ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000685fe cmp.w sb, 0 |
| if (sb != 0) {
0x00068602 bne 0x68548 | goto label_3;
| }
| label_10:
0x00068604 mov r1, sl | r1 = sl;
0x00068606 mov r0, r6 | r0 = r6;
0x00068608 bl 0x2bc6c | r0 = fcn_0002bc6c (r0, r1);
0x0006860c mov sb, r0 | sb = r0;
0x0006860e str r0, [sp, 0x10] | var_10h = r0;
0x00068610 cmp r0, 0 |
| if (r0 != 0) {
0x00068612 bne 0x68548 | goto label_3;
| }
0x00068614 mov r1, r0 | r1 = r0;
0x00068616 mov r2, sl | r2 = sl;
0x00068618 mov r0, r6 | r0 = r6;
0x0006861a bl 0x68198 | r0 = fcn_00068198 (r0, r1, r2, r3);
0x0006861e mov r4, r0 | r4 = r0;
0x00068620 b 0x685b0 | goto label_4;
| label_7:
0x00068622 movs r4, 0 | r4 = 0;
0x00068624 b 0x6857e | goto label_2;
| label_6:
0x00068626 ldr r4, [pc, 0x38] |
0x00068628 movw r3, 0x20aa | r3 = 0x20aa;
0x0006862c ldr r2, [pc, 0x34] |
0x0006862e ldr r1, [pc, 0x38] |
0x00068630 add r4, pc | r4 = 0xd0c96;
0x00068632 add r2, pc | r2 = 0xd0c9a;
0x00068634 add r1, pc | r1 = 0xd0ca2;
0x00068636 b 0x685d8 | goto label_5;
| label_12:
0x00068638 blx 0x6430 | fcn_00006430 ();
0x0006863c adds r0, r6, r2 | r0 = r6 + r2;
0x0006863e movs r0, r1 | r0 = r1;
0x00068640 lsls r4, r6, 8 | r4 = r6 << 8;
0x00068642 movs r0, r0 |
0x00068644 subs r3, 0x1c | r3 -= 0x1c;
0x00068646 movs r6, r0 | r6 = r0;
0x00068648 ldrh r4, [r1, 0x20] | r4 = *((r1 + 0x20));
0x0006864a movs r6, r0 | r6 = r0;
0x0006864c ldrh r6, [r5, 0x1e] | r6 = *((r5 + 0x1e));
0x0006864e movs r6, r0 | r6 = r0;
0x00068650 adds r6, r2, r0 | r6 = r2 + r0;
0x00068652 movs r0, r1 | r0 = r1;
0x00068654 subs r2, 0xae | r2 -= 0xae;
0x00068656 movs r6, r0 | r6 = r0;
0x00068658 ldrh r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0006865a movs r6, r0 | r6 = r0;
0x0006865c ldrh r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x0006865e movs r6, r0 | r6 = r0;
0x00068660 subs r2, 0x50 | r2 -= 0x50;
0x00068662 movs r6, r0 | r6 = r0;
0x00068664 ldrh r2, [r0, 0x1a] | r2 = *((r0 + 0x1a));
0x00068666 movs r6, r0 | r6 = r0;
0x00068668 ldrh r4, [r4, 0x18] | r4 = *((r4 + 0x18));
0x0006866a movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6866c */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0006866c () | void fcn_0006866c (int16_t arg_1h_2, int16_t arg_48h, int16_t arg_4ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h_2;
| arithmetic x;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006866c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00068670 mov r5, r2 | r5 = r2;
0x00068672 ldr r2, [pc, 0x258] |
0x00068674 mov r6, r3 | r6 = r3;
0x00068676 sub sp, 0x24 |
0x00068678 mov r4, r0 | r4 = r0;
0x0006867a ldr r3, [pc, 0x254] | r3 = *(0x688d2);
0x0006867c mov r7, r1 | r7 = r1;
0x0006867e add r2, pc | r2 = 0xd0f50;
0x00068680 ldr r0, [sp, 0x48] | r0 = *(arg_48h);
0x00068682 ldrd r8, sl, [sp, 0x4c] | __asm ("ldrd r8, sl, [arg_4ch]");
0x00068686 ldr r3, [r2, r3] |
0x00068688 ldr r3, [r3] | r3 = *(0xd0f50);
0x0006868a str r3, [sp, 0x1c] | var_1ch = r3;
0x0006868c mov.w r3, 0 | r3 = 0;
0x00068690 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00068692 cbnz r3, 0x6869c |
0x00068694 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00068696 adds r2, r6, 1 | r2 = r6 + 1;
0x00068698 cmp r2, r3 |
| if (r2 < r3) {
0x0006869a blt 0x686e6 | goto label_8;
| }
| }
| if (r0 != 0) {
0x0006869c cbz r0, 0x686a8 |
0x0006869e mov r1, r5 | r1 = r5;
0x000686a0 mov r2, r6 | r2 = r6;
0x000686a2 mov r5, r0 | r5 = r0;
0x000686a4 blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x000686a8 cmp.w r8, 0 |
0x000686ac bne 0x686dc |
| while (1) {
0x000686ae ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000686b0 adds r2, r3, 1 | r2 = r3 + 1;
0x000686b2 strb r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x000686b4 add.w r2, r4, r3, lsl 2 | r2 = r4 + (r3 << 2);
0x000686b8 add.w r3, r4, r3, lsl 1 | r3 = r4 + (r3 << 1);
0x000686bc str r5, [r2, 0x24] | *((r2 + 0x24)) = r5;
0x000686be strh r7, [r3, 0x1c] | *((r3 + 0x1c)) = r7;
| label_0:
0x000686c0 ldr r2, [pc, 0x210] |
0x000686c2 ldr r3, [pc, 0x20c] | r3 = *(0x688d2);
0x000686c4 add r2, pc | r2 = 0xd0f9c;
0x000686c6 ldr r3, [r2, r3] | r3 = *(0xd0f9c);
0x000686c8 ldr r2, [r3] | r2 = *(0xd0f9c);
0x000686ca ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000686cc eors r2, r3 | r2 ^= r3;
0x000686ce mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000686d2 bne.w 0x688c6 | goto label_9;
| }
0x000686d6 add sp, 0x24 |
0x000686d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000686dc rev.w r8, r8 | r8 = SWAP32 (r8);
0x000686e0 str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x000686e4 b 0x686ae |
| }
| label_8:
0x000686e6 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000686e8 bl 0x650a4 | r0 = fcn_000650a4 (r0);
| if (r0 == 0) {
0x000686ec cbnz r0, 0x68748 |
0x000686ee ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000686f0 ldrh.w fp, [r4, 0x12] | fp = *((r4 + 0x12));
0x000686f4 ldrb r1, [r4, 9] | r1 = *((r4 + 9));
0x000686f6 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000686f8 str r0, [sp, 0x18] | x = r0;
0x000686fa add.w fp, fp, r2, lsl 1 |
0x000686fe adds r2, r1, 5 | r2 = r1 + 5;
0x00068700 ldrh.w sb, [r3, r2] | sb = *((r3 + r2));
0x00068704 str r1, [sp, 8] | var_8h_2 = r1;
0x00068706 str r2, [sp, 0xc] | var_ch = r2;
0x00068708 rev16.w sb, sb | __asm ("rev16.w sb, sb");
0x0006870c uxth.w sb, sb | sb = (int16_t) sb;
0x00068710 cmp fp, sb |
| if (fp <= sb) {
0x00068712 ble 0x6874e | goto label_10;
| }
0x00068714 cmp.w sb, 0 |
| if (sb == 0) {
0x00068718 bne 0x68728 |
0x0006871a ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0006871c ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x0006871e cmp.w r2, 0x10000 |
0x00068720 subs r7, 0x80 | r7 -= 0x80;
0x00068722 it eq |
| if (r7 != 0x80) {
0x00068724 moveq sb, r2 | sb = r2;
| }
| if (r7 == 0x80) {
0x00068726 beq 0x6874e | goto label_10;
| }
| }
0x00068728 ldr r0, [pc, 0x1ac] |
0x0006872a movw r3, 0xd26 | r3 = 0xd26;
0x0006872e ldr r2, [pc, 0x1ac] |
0x00068730 ldr r1, [pc, 0x1ac] |
0x00068732 add r0, pc | r0 = 0xd100e;
0x00068734 add r2, pc | r2 = 0xd1016;
0x00068736 add r1, pc | r1 = 0xd101a;
| label_7:
0x00068738 adds r0, 0x14 | r0 += 0x14;
0x0006873a movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x0006873e str r0, [sp] | *(sp) = r0;
0x00068740 movs r0, 0xb | r0 = 0xb;
0x00068742 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00068746 movs r0, 0xb | r0 = 0xb;
| }
| label_4:
0x00068748 str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x0006874c b 0x686c0 | goto label_0;
| label_10:
0x0006874e ldr r2, [sp, 8] | r2 = var_8h_2;
0x00068750 adds r2, r3, r2 | r2 = r3 + r2;
0x00068752 ldrb r1, [r2, 2] | r1 = *((r2 + 2));
0x00068754 cmp r1, 0 |
| if (r1 == 0) {
0x00068756 beq 0x6882a | goto label_11;
| }
| label_1:
0x00068758 add.w r2, fp, 1 | r2 += arg_1h_2;
0x0006875c cmp r2, sb |
| if (r2 < sb) {
0x0006875e blt.w 0x68884 | goto label_12;
| }
| label_2:
0x00068762 add.w fp, fp, 2 |
0x00068766 add fp, r6 |
0x00068768 cmp sb, fp |
| if (sb < fp) {
0x0006876a blt 0x68840 | goto label_13;
| }
0x0006876c ldr r1, [sp, 8] | r1 = var_8h_2;
0x0006876e adds r2, r6, 2 | r2 = r6 + 2;
0x00068770 adds r1, 6 | r1 += 6;
0x00068772 add.w ip, r1, r3 |
| label_5:
0x00068776 sub.w sb, sb, r6 | sb -= r6;
0x0006877a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006877c uxtb.w r0, sb | r0 = (int8_t) sb;
0x00068780 ubfx fp, sb, 8, 8 | fp = (sb >> 8) & ((1 << 8) - 1);
0x00068784 strb.w fp, [r3, r1] | *((r3 + r1)) = fp;
0x00068788 str r0, [sp, 8] | var_8h_2 = r0;
0x0006878a strb.w r0, [ip] | *(ip) = r0;
| label_6:
0x0006878e ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00068790 uxth r2, r2 | r2 = (int16_t) r2;
0x00068792 add.w r0, r3, sb | r0 = r3 + sb;
0x00068796 subs r1, r1, r2 | r1 -= r2;
0x00068798 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0006879a cmp.w r8, 0 |
| if (r8 == 0) {
0x0006879e beq 0x68832 | goto label_14;
| }
0x000687a0 add.w r0, sb, 4 | r0 = sb + 4;
0x000687a4 subs r2, r6, 4 | r2 = r6 - 4;
0x000687a6 add r0, r3 | r0 += r3;
0x000687a8 adds r1, r5, 4 | r1 = r5 + 4;
0x000687aa str r3, [sp, 0xc] | var_ch = r3;
0x000687ac rev.w r8, r8 | r8 = SWAP32 (r8);
0x000687b0 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000687b4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000687b6 str.w r8, [r3, sb] | __asm ("str.w r8, [r3, sb]");
| label_3:
0x000687ba ldr.w r8, [r4, 0x40] | r8 = *((r4 + 0x40));
0x000687be ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000687c0 str r3, [sp, 0xc] | var_ch = r3;
0x000687c2 add.w r6, r8, r7, lsl 1 | r6 = r8 + (r7 << 1);
0x000687c6 subs r2, r2, r7 | r2 -= r7;
0x000687c8 lsls r2, r2, 1 | r2 <<= 1;
0x000687ca mov r1, r6 | r1 = r6;
0x000687cc adds r0, r6, 2 | r0 = r6 + 2;
0x000687ce blx 0x6354 | realloc (r0, r1);
0x000687d2 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000687d4 strb.w fp, [r8, r7, lsl 1] | offset_0 = r7 << 1;
| *((r8 + offset_0)) = fp;
0x000687d8 strb r3, [r6, 1] | *((r6 + 1)) = r3;
0x000687da ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000687dc ldrb r1, [r4, 9] | r1 = *((r4 + 9));
0x000687de ldr r3, [sp, 0xc] | r3 = var_ch;
0x000687e0 adds r2, 1 | r2++;
0x000687e2 adds r1, 4 | r1 += 4;
0x000687e4 strh r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x000687e6 ldrb r2, [r3, r1] | r2 = *((r3 + r1));
0x000687e8 adds r2, 1 | r2++;
0x000687ea uxtb r2, r2 | r2 = (int8_t) r2;
0x000687ec strb r2, [r3, r1] | *((r3 + r1)) = r2;
| if (r2 == 0) {
0x000687ee cbnz r2, 0x687fa |
0x000687f0 ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x000687f2 adds r2, 3 | r2 += 3;
0x000687f4 ldrb r1, [r3, r2] | r1 = *((r3 + r2));
0x000687f6 adds r1, 1 | r1++;
0x000687f8 strb r1, [r3, r2] | *((r3 + r2)) = r1;
| }
0x000687fa ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000687fc ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x000687fe cmp r3, 0 |
| if (r3 == 0) {
0x00068800 beq.w 0x686c0 | goto label_0;
| }
0x00068804 ldr r2, [pc, 0xdc] |
0x00068806 ldr r3, [pc, 0xc8] | r3 = *(0x688d2);
0x00068808 add r2, pc | r2 = "USE TEMP B-TREE FOR %s(DISTINCT)";
0x0006880a ldr r3, [r2, r3] | r3 = "USE TEMP B-TREE FOR %s(DISTINCT)";
0x0006880c ldr r2, [r3] | r2 = "USE TEMP B-TREE FOR %s(DISTINCT)";
0x0006880e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00068810 eors r2, r3 | r2 ^= r3;
0x00068812 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00068816 bne 0x688c6 | goto label_9;
| }
0x00068818 mov r3, sl | r3 = sl;
0x0006881a mov r2, r5 | r2 = r5;
0x0006881c mov r1, r4 | r1 = r4;
0x0006881e mov r0, r4 | r0 = r4;
0x00068820 add sp, 0x24 |
0x00068822 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00068826 b.w 0x673c4 | void (*0x673c4)() ();
| label_11:
0x0006882a ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x0006882c cmp r2, 0 |
| if (r2 != 0) {
0x0006882e bne 0x68758 | goto label_1;
| }
0x00068830 b 0x68762 | goto label_2;
| label_14:
0x00068832 mov r2, r6 | r2 = r6;
0x00068834 mov r1, r5 | r1 = r5;
0x00068836 str r3, [sp, 0xc] | var_ch = r3;
0x00068838 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006883c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006883e b 0x687ba | goto label_3;
| label_13:
0x00068840 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00068842 adds r2, r6, 2 | r2 = r6 + 2;
0x00068844 mov r0, r4 | r0 = r4;
0x00068846 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00068848 str r2, [sp, 0x10] | var_10h_2 = r2;
0x0006884a subs r1, r1, r2 | r1 -= r2;
0x0006884c cmp r1, 4 |
0x0006884e it ge |
| if (r1 < 4) {
0x00068850 movge r1, 4 | r1 = 4;
| }
0x00068852 bl 0x513a8 | fcn_000513a8 (r0, r1);
0x00068856 str r0, [sp, 0x18] | x = r0;
0x00068858 cmp r0, 0 |
| if (r0 != 0) {
0x0006885a bne.w 0x68748 | goto label_4;
| }
0x0006885e ldr r1, [sp, 8] | r1 = var_8h_2;
0x00068860 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x00068862 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00068864 adds r1, 6 | r1 += 6;
0x00068866 ldrb.w sb, [r3, r1] | sb = *((r3 + r1));
0x0006886a add.w ip, r1, r3 |
0x0006886e ldrb r0, [r3, r2] | r0 = *((r3 + r2));
0x00068870 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00068872 orr.w sb, sb, r0, lsl 8 | sb |= (r0 << 8);
0x00068876 add.w sb, sb, -1 | sb += -1;
0x0006887a uxth.w sb, sb | sb = (int16_t) sb;
0x0006887e add.w sb, sb, 1 | sb++;
0x00068882 b 0x68776 | goto label_5;
| label_12:
0x00068884 add r2, sp, 0x18 | r2 += x;
0x00068886 mov r1, r6 | r1 = r6;
0x00068888 mov r0, r4 | r0 = r4;
0x0006888a str r3, [sp, 0x10] | var_10h_2 = r3;
0x0006888c bl 0x51298 | fcn_00051298 (r0, r1, r2);
0x00068890 ldr r3, [sp, 0x10] | r3 = var_10h_2;
| if (r0 != 0) {
0x00068892 cbz r0, 0x688aa |
0x00068894 sub.w sb, r0, r3 | sb = r0 - r3;
0x00068898 cmp fp, sb |
| if (fp >= sb) {
0x0006889a bge 0x688b4 | goto label_15;
| }
0x0006889c uxtb.w r2, sb | r2 = (int8_t) sb;
0x000688a0 ubfx fp, sb, 8, 8 | fp = (sb >> 8) & ((1 << 8) - 1);
0x000688a4 str r2, [sp, 8] | var_8h_2 = r2;
0x000688a6 adds r2, r6, 2 | r2 = r6 + 2;
0x000688a8 b 0x6878e | goto label_6;
| }
0x000688aa ldr r0, [sp, 0x18] | r0 = x;
0x000688ac cmp r0, 0 |
| if (r0 == 0) {
0x000688ae beq.w 0x68762 | goto label_2;
| }
0x000688b2 b 0x68748 | goto label_4;
| label_15:
0x000688b4 ldr r0, [pc, 0x30] |
0x000688b6 movw r3, 0xd38 | r3 = 0xd38;
0x000688ba ldr r2, [pc, 0x30] |
0x000688bc ldr r1, [pc, 0x30] |
0x000688be add r0, pc | r0 = 0xd11aa;
0x000688c0 add r2, pc | r2 = 0xd11b2;
0x000688c2 add r1, pc | r1 = 0xd11b6;
0x000688c4 b 0x68738 | goto label_7;
| label_9:
0x000688c6 blx 0x6430 | fcn_00006430 ();
0x000688ca nop |
0x000688cc asrs r2, r3, 0x1c | r2 = r3 >> 0x1c;
0x000688ce movs r0, r1 | r0 = r1;
0x000688d0 lsls r4, r6, 8 | r4 = r6 << 8;
0x000688d2 movs r0, r0 |
0x000688d4 asrs r4, r2, 0x1b | r4 = r2 >> 0x1b;
0x000688d6 movs r0, r1 | r0 = r1;
0x000688d8 subs r1, 0x4e | r1 -= 0x4e;
0x000688da movs r6, r0 | r6 = r0;
0x000688dc ldrh r0, [r0, 0x12] | r0 = *((r0 + 0x12));
0x000688de movs r6, r0 | r6 = r0;
0x000688e0 ldrh r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000688e2 movs r6, r0 | r6 = r0;
0x000688e4 asrs r0, r2, 0x16 | r0 = r2 >> 0x16;
0x000688e6 movs r0, r1 | r0 = r1;
0x000688e8 adds r7, 0xc2 | r7 += 0xc2;
0x000688ea movs r6, r0 | r6 = r0;
0x000688ec ldrh r4, [r6, 4] | r4 = *((r6 + 4));
0x000688ee movs r6, r0 | r6 = r0;
0x000688f0 ldrh r6, [r2, 4] | r6 = *((r2 + 4));
0x000688f2 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x688f4 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000688f4 () | void fcn_000688f4 (int16_t arg_1h_2, int16_t arg_3h, int16_t arg_14h, int16_t arg_44h, int16_t arg_46h, int16_t arg_74h, int16_t arg_7ch, int16_t arg_1h, int16_t arg_48h, int16_t arg1) {
| int16_t var_2h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| arithmetic var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| arithmetic x;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_dch;
| int16_t var_e0h;
| int16_t var_f4h;
| int16_t var_108h;
| int16_t var_11ch;
| int16_t var_130h;
| int16_t var_144h;
| int16_t var_148h;
| int16_t var_14ch;
| int16_t var_150h;
| int16_t var_154h;
| int16_t var_16ch;
| int16_t var_184h;
| int16_t var_188h;
| int16_t var_18ch;
| int16_t var_190h;
| int16_t var_19ch;
| int16_t var_1a0h;
| r0 = arg1;
0x000688f4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000688f8 movs r3, 0 | r3 = 0;
0x000688fa sub sp, 0x1a4 |
0x000688fc ldr.w r2, [pc, 0xb00] |
0x00068900 mov fp, r0 |
0x00068902 str r3, [sp, 0x54] | var_54h = r3;
0x00068904 add r3, sp, 0xa8 | r3 += var_a8h;
0x00068906 str r3, [sp, 0x24] | var_24h = r3;
0x00068908 add r2, pc | r2 = 0xd1d0c;
0x0006890a ldr.w r3, [pc, 0xaf8] | r3 = *(0x69406);
0x0006890e str r0, [sp, 0x38] | var_38h = r0;
0x00068910 ldr r3, [r2, r3] |
0x00068912 ldr r3, [r3] | r3 = *(0xd1d0c);
0x00068914 str r3, [sp, 0x19c] | var_19ch = r3;
0x00068916 mov.w r3, 0 | r3 = 0;
| label_1:
0x0006891a ldr.w r4, [fp, 0x74] | r4 = *(arg_74h);
0x0006891e ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00068920 cmp r3, 0 |
| if (r3 < 0) {
0x00068922 blt.w 0x68bf6 | goto label_62;
| }
| label_2:
0x00068926 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00068928 cbnz r3, 0x68974 |
0x0006892a ldr.w r2, [fp, 0x14] | r2 = *(arg_14h);
0x0006892e ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00068930 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x00068932 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00068936 cmp.w r3, r2, lsl 1 |
| if (r3 > r2) {
0x0006893a ble 0x68944 |
0x0006893c ldrsb.w r3, [fp, 0x44] | r3 = *(arg_44h);
0x00068940 cmp r3, 0 |
| if (r3 != 0) {
0x00068942 bne 0x689bc | goto label_63;
| }
| }
| label_3:
0x00068944 movs r3, 0 | r3 = 0;
0x00068946 str r3, [sp, 0x10] | var_10h = r3;
| label_0:
0x00068948 ldr r3, [sp, 0x54] | r3 = var_54h;
| if (r3 != 0) {
0x0006894a cbz r3, 0x68952 |
0x0006894c mov r0, r3 | r0 = r3;
0x0006894e bl 0x26f64 | fcn_00026f64 (r0);
| }
0x00068952 ldr.w r2, [pc, 0xab4] |
0x00068956 ldr.w r3, [pc, 0xaac] | r3 = *(0x69406);
0x0006895a add r2, pc | r2 = "sqlcipher_openssl_add_random: leaving SQLCIPHER_MUTEX_PROVIDER_RAND";
0x0006895c ldr r3, [r2, r3] | r3 = "sqlcipher_openssl_add_random: leaving SQLCIPHER_MUTEX_PROVIDER_RAND";
0x0006895e ldr r2, [r3] | r2 = "sqlcipher_openssl_add_random: leaving SQLCIPHER_MUTEX_PROVIDER_RAND";
0x00068960 ldr r3, [sp, 0x19c] | r3 = var_19ch;
0x00068962 eors r2, r3 | r2 ^= r3;
0x00068964 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00068968 bne.w 0x69a14 | goto label_64;
| }
0x0006896c ldr r0, [sp, 0x10] | r0 = var_10h;
0x0006896e add sp, 0x1a4 |
0x00068970 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00068974 ldrsb.w r3, [fp, 0x44] | r3 = *(arg_44h);
| if (r3 != 0) {
0x00068978 cbnz r3, 0x689bc | goto label_63;
| }
0x0006897a ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0006897e ldr r3, [r3, 8] | r3 = *((r3 + 8));
| if (r3 == 0) {
0x00068980 cbz r3, 0x6899c | goto label_65;
| }
| do {
0x00068982 cmp fp, r3 |
| if (fp != r3) {
0x00068984 beq 0x68996 |
0x00068986 ldrb r2, [r3] | r2 = *(r3);
| if (r2 != 0) {
0x00068988 cbnz r2, 0x68996 | goto label_66;
| }
0x0006898a ldr r1, [r3, 0x74] | r1 = *((r3 + 0x74));
0x0006898c ldr.w r2, [fp, 0x74] | r2 = *(arg_74h);
0x00068990 cmp r1, r2 |
| if (r1 == r2) {
0x00068992 beq.w 0x68cb0 | goto label_67;
| }
| }
| label_66:
0x00068996 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00068998 cmp r3, 0 |
0x0006899a bne 0x68982 |
| } while (r3 != 0);
| label_65:
0x0006899c ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0006899e movs r3, 0 | r3 = 0;
0x000689a0 ldr r6, [r4, 0x34] | r6 = *((r4 + 0x34));
0x000689a2 strd r3, r3, [sp, 0xac] | __asm ("strd r3, r3, [sp, 0xac]");
0x000689a6 bl 0x650a4 | fcn_000650a4 (r0);
0x000689aa str r0, [sp, 0x10] | var_10h = r0;
0x000689ac str r0, [sp, 0xa8] | var_a8h = r0;
0x000689ae cmp r0, 0 |
| if (r0 == 0) {
0x000689b0 beq.w 0x68c04 | goto label_68;
| }
0x000689b4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000689b6 movs r2, 0 | r2 = 0;
0x000689b8 str r2, [r3, 0x7c] | *((r3 + 0x7c)) = r2;
0x000689ba b 0x68948 | goto label_0;
| label_63:
0x000689bc add.w r1, r3, 0x1d | r1 = r3 + 0x1d;
0x000689c0 add.w r2, r3, 0x23 | r2 = r3 + 0x23;
0x000689c4 ldr.w r5, [fp, r1, lsl 2] | offset_0 = r1 << 2;
| r5 = *((fp + offset_0));
0x000689c8 str r3, [sp, 0x14] | *(arg_14h) = r3;
0x000689ca ldrh.w r3, [fp, r2, lsl 1] | offset_1 = r2 << 1;
| r3 = *((fp + offset_1));
0x000689ce ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
0x000689d0 str r5, [sp, 0x20] | var_20h = r5;
0x000689d2 str r3, [sp, 0x40] | var_40h = r3;
0x000689d4 bl 0x650a4 | fcn_000650a4 (r0);
0x000689d8 str r0, [sp, 0x10] | var_10h = r0;
0x000689da cmp r0, 0 |
| if (r0 != 0) {
0x000689dc bne.w 0x68c8a | goto label_69;
| }
0x000689e0 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000689e2 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000689e4 cmp r2, 0 |
| if (r2 < 0) {
0x000689e6 blt.w 0x68cf2 | goto label_70;
| }
| label_4:
0x000689ea ldrb r2, [r4, 2] | r2 = *((r4 + 2));
| if (r2 != 0) {
0x000689ec cbz r2, 0x689f6 |
0x000689ee ldrb r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x000689f0 cmp r5, 1 |
| if (r5 == 1) {
0x000689f2 beq.w 0x6910e | goto label_71;
| }
| }
| label_18:
0x000689f6 ldr.w r2, [fp, 0x14] | r2 = *(arg_14h);
0x000689fa str r3, [sp, 0x14] | *(arg_14h) = r3;
0x000689fc ldr r0, [r2, 0x24] | r0 = *((r2 + 0x24));
0x000689fe bl 0x2922c | fcn_0002922c (r0);
0x00068a02 ldrb.w r2, [fp, 3] | r2 = *(arg_3h);
0x00068a06 mov.w r3, 0 | r3 = 0;
0x00068a0a strb.w r3, [sp, 0x188] | var_188h = r3;
0x00068a0e movs r3, 0 | r3 = 0;
0x00068a10 str r3, [sp, 0xa8] | var_a8h = r3;
0x00068a12 mov r6, r0 | r6 = r0;
0x00068a14 str r3, [sp, 0x184] | var_184h = r3;
0x00068a16 add r3, sp, 0x144 | r3 += var_144h;
0x00068a18 and r5, r2, 1 | r5 = r2 & 1;
0x00068a1c str r0, [sp, 0x48] | var_48h = r0;
0x00068a1e movs r2, 0x40 | r2 = 0x40;
0x00068a20 mov r0, r3 | r0 = r3;
0x00068a22 movs r1, 0 | r1 = 0;
0x00068a24 str r3, [sp, 0x3c] | var_3ch = r3;
0x00068a26 str r5, [sp, 0x74] | *(arg_74h) = r5;
0x00068a28 blx 0x62ec | fcn_000062ec ();
0x00068a2c ldr r3, [sp, 0x20] | r3 = var_20h;
0x00068a2e ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x00068a30 str r2, [sp, 0x58] | var_58h = r2;
0x00068a32 cmp r6, 0 |
| if (r6 == 0) {
0x00068a34 beq.w 0x693a6 | goto label_72;
| }
0x00068a38 ldrb r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00068a3a ldrh r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x00068a3c ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00068a3e adds r1, r2, r0 | r1 = r2 + r0;
0x00068a40 cmp r1, 1 |
| if (r1 <= 1) {
0x00068a42 ble.w 0x690f8 | goto label_73;
| }
0x00068a46 ldr r6, [sp, 0x40] | r6 = var_40h;
0x00068a48 rsb.w r5, r5, 2 | r5 = 2 - r5;
0x00068a4c str r5, [sp, 0x30] | var_30h = r5;
0x00068a4e cmp r6, 0 |
| if (r6 == 0) {
0x00068a50 beq.w 0x68d2c | goto label_74;
| }
0x00068a54 ldr r5, [sp, 0x40] | r5 = var_40h;
0x00068a56 cmp r5, r1 |
| if (r5 == r1) {
0x00068a58 beq.w 0x693e0 | goto label_75;
| }
0x00068a5c ldr r1, [sp, 0x40] | r1 = var_40h;
0x00068a5e ldr r5, [sp, 0x30] | r5 = var_30h;
0x00068a60 subs r1, 1 | r1--;
0x00068a62 str r1, [sp, 0x1c] | var_1ch_2 = r1;
0x00068a64 add r1, r5 | r1 += r5;
0x00068a66 subs r2, r1, r2 | r2 = r1 - r2;
| label_7:
0x00068a68 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00068a6a cmp r0, r2 |
0x00068a6c ldr r5, [r1, 0x38] | r5 = *((r1 + 0x38));
| if (r0 == r2) {
0x00068a6e beq.w 0x695fe | goto label_76;
| }
0x00068a72 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00068a74 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x00068a76 ldrh.w r1, [r1, r2, lsl 1] | offset_2 = r2 << 1;
| r1 = *((r1 + offset_2));
0x00068a7a ldrh r2, [r0, 0x1a] | r2 = *((r0 + 0x1a));
0x00068a7c rev16 r1, r1 | __asm ("rev16 r1, r1");
0x00068a7e ands r2, r1 | r2 &= r1;
0x00068a80 adds r2, r5, r2 | r2 = r5 + r2;
0x00068a82 str r2, [sp, 0x68] | var_68h = r2;
| label_17:
0x00068a84 ldr r2, [sp, 0x68] | r2 = var_68h;
0x00068a86 add r5, sp, 0xd4 | r5 += var_d4h;
0x00068a88 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00068a8a add r1, sp, 0xcc | r1 += var_cch;
0x00068a8c add r0, sp, 0x11c | r0 += var_11ch;
0x00068a8e str r5, [sp, 0x34] | var_34h = r5;
0x00068a90 ldr r2, [r2] | r2 = *(r2);
0x00068a92 str r4, [sp, 0x28] | var_28h = r4;
0x00068a94 ldr r4, [sp, 0x20] | r4 = var_20h;
0x00068a96 rev r2, r2 | r2 = SWAP32 (r2);
0x00068a98 str.w fp, [sp, 0x2c] | __asm ("str.w fp, [var_2ch]");
0x00068a9c str r2, [sp, 0xac] | var_ach = r2;
0x00068a9e lsls r2, r7, 2 | r2 = r7 << 2;
0x00068aa0 str r1, [sp, 0x5c] | var_5ch = r1;
0x00068aa2 add.w sb, r5, r2 | sb = r5 + r2;
0x00068aa6 ldr r5, [sp, 0x58] | r5 = var_58h;
0x00068aa8 add.w sl, r1, r2 | sl = r1 + r2;
0x00068aac add.w r8, r0, r2 | r8 = r0 + r2;
0x00068ab0 str r2, [sp, 0x78] | var_78h = r2;
0x00068ab2 movs r2, 0 | r2 = 0;
0x00068ab4 mov fp, r2 |
0x00068ab6 str r0, [sp, 0x70] | var_70h = r0;
0x00068ab8 str r3, [sp, 0x4c] | var_4ch = r3;
| do {
0x00068aba movs r3, 0 | r3 = 0;
0x00068abc ldr r1, [sp, 0xac] | r1 = var_ach;
0x00068abe str r3, [sp] | *(sp) = r3;
0x00068ac0 mov r2, sb | r2 = sb;
0x00068ac2 mov r0, r5 | r0 = r5;
0x00068ac4 bl 0x532f4 | r0 = fcn_000532f4 (r0, r1, r2, r3, r4);
0x00068ac8 mov r3, r0 | r3 = r0;
0x00068aca str r0, [sp, 0xa8] | var_a8h = r0;
0x00068acc cmp r0, 0 |
| if (r0 != 0) {
0x00068ace bne.w 0x69602 | goto label_77;
| }
0x00068ad2 ldr r2, [sb], -4 | r2 = *(sb);
| sb += -4;
0x00068ad6 ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x00068ad8 cmp r1, 0 |
| if (r1 < 0) {
0x00068ada blt.w 0x68d32 | goto label_78;
| }
| label_8:
0x00068ade ldrh r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x00068ae0 subs r7, 1 | r7--;
0x00068ae2 adds r2, 4 | r2 += 4;
0x00068ae4 add fp, r2 |
0x00068ae6 adds r2, r7, 1 | r2 = r7 + 1;
| if (r2 == r7) {
0x00068ae8 beq.w 0x68d82 | goto label_79;
| }
0x00068aec ldrb r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00068aee ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00068af0 ldr r6, [sp, 0xa8] | r6 = var_a8h;
0x00068af2 adds r3, r7, r3 | r3 = r7 + r3;
| if (r2 != 0) {
0x00068af4 cbz r2, 0x68afe |
0x00068af6 ldrh r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00068af8 cmp r1, r3 |
| if (r1 == r3) {
0x00068afa beq.w 0x68d64 | goto label_80;
| }
| }
0x00068afe ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
0x00068b00 subs r2, r3, r2 | r2 = r3 - r2;
0x00068b02 ldrh.w ip, [r4, 0x1a] | ip = *((r4 + 0x1a));
0x00068b06 mov r0, r4 | r0 = r4;
0x00068b08 str r3, [sp, 0x14] | *(arg_14h) = r3;
0x00068b0a ldrh.w r2, [r1, r2, lsl 1] | offset_3 = r2 << 1;
| r2 = *((r1 + offset_3));
0x00068b0e ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x00068b10 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x00068b12 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00068b14 and.w ip, ip, r2 |
0x00068b18 ldr.w lr, [r1, ip] |
0x00068b1c add r1, ip | r1 += ip;
0x00068b1e str r1, [sl, -0x4] | *((sl - 0x4)) = r1;
0x00068b22 str r1, [sp, 0x18] | var_18h = r1;
0x00068b24 rev.w r2, lr | lr = SWAP32 (r2);
0x00068b28 str r2, [sp, 0xac] | var_ach = r2;
0x00068b2a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00068b2c mov r2, r0 | r2 = r0;
0x00068b2e str r0, [r8, -0x4] | *((r8 - 0x4)) = r0;
0x00068b32 ldrh r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00068b34 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00068b36 and r0, r0, 0xc | r0 &= 0xc;
| if (r0 != 0) {
0x00068b3a cbz r0, 0x68b50 |
0x00068b3c ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x00068b3e ldr r1, [sp, 0x18] | r1 = var_18h;
0x00068b40 sub.w lr, r1, r0 | lr = r1 - r0;
0x00068b42 lsrs r0, r0, 0x18 | r0 >>= 0x18;
0x00068b44 ldr r0, [r5, 0x28] | r0 = *((r5 + 0x28));
0x00068b46 add.w ip, r2, lr |
0x00068b4a cmp ip, r0 |
| if (ip <= r0) {
0x00068b4c ble.w 0x68d08 | goto label_81;
| }
| }
| if (r6 != 0) {
| label_6:
0x00068b50 cbnz r6, 0x68b6c | goto label_82;
| }
0x00068b52 ldrb r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00068b54 mov r0, r4 | r0 = r4;
0x00068b56 subs r1, r3, r1 | r1 = r3 - r1;
0x00068b58 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00068b5a bl 0x511b8 | fcn_000511b8 (r0, r1, r2, r3);
0x00068b5e ldr r6, [sp, 0xa8] | r6 = var_a8h;
| label_10:
0x00068b60 sub.w sl, sl, 4 | sl -= 4;
0x00068b64 sub.w r8, r8, 4 | r8 -= 4;
0x00068b68 cmp r6, 0 |
0x00068b6a beq 0x68aba |
| } while (r6 == 0);
| label_82:
0x00068b6c ldrd r4, fp, [sp, 0x28] | __asm ("ldrd r4, fp, [var_28h]");
| label_36:
0x00068b70 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00068b72 adds r2, r7, 1 | r2 = r7 + 1;
0x00068b74 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00068b76 lsls r2, r2, 2 | r2 <<= 2;
0x00068b78 movs r1, 0 | r1 = 0;
0x00068b7a adds r3, 1 | r3++;
0x00068b7c str r3, [sp, 0x28] | var_28h = r3;
0x00068b7e blx 0x62ec | fcn_000062ec ();
0x00068b82 movs r3, 0 | r3 = 0;
0x00068b84 str r3, [sp, 0x64] | var_64h = r3;
| label_9:
0x00068b86 ldr r5, [sp, 0x34] | r5 = var_34h;
0x00068b88 ldr r7, [sp, 0x10] | r7 = var_10h;
0x00068b8a ldr.w r8, [sp, 0x28] | r8 = var_28h;
| do {
0x00068b8e ldr r3, [r5], 4 | r3 = *(r5);
| r5 += 4;
| if (r3 != 0) {
0x00068b92 cbz r3, 0x68b9a |
0x00068b94 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x00068b96 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x00068b9a adds r7, 1 | r7++;
0x00068b9c cmp r7, r8 |
0x00068b9e bne 0x68b8e |
| } while (r7 != r8);
0x00068ba0 ldr r3, [sp, 0x64] | r3 = var_64h;
| if (r3 == 0) {
0x00068ba2 cbz r3, 0x68bba | goto label_22;
| }
0x00068ba4 add r5, sp, 0xe0 | r5 += var_e0h;
0x00068ba6 add.w r7, r5, r3, lsl 2 | r7 = r5 + (r3 << 2);
| do {
0x00068baa ldr r3, [r5], 4 | r3 = *(r5);
| r5 += 4;
| if (r3 != 0) {
0x00068bae cbz r3, 0x68bb6 |
0x00068bb0 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x00068bb2 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x00068bb6 cmp r5, r7 |
0x00068bb8 bne 0x68baa |
| } while (r5 != r7);
| label_22:
0x00068bba ldr r3, [sp, 0x54] | r3 = var_54h;
| if (r3 != 0) {
0x00068bbc cbz r3, 0x68bc4 |
0x00068bbe ldr r0, [sp, 0x54] | r0 = var_54h;
0x00068bc0 bl 0x26f64 | fcn_00026f64 (r0);
| }
0x00068bc4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00068bc6 str r3, [sp, 0x54] | var_54h = r3;
| label_19:
0x00068bc8 mov.w r3, 0 | r3 = 0;
0x00068bcc ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00068bce strb r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00068bd0 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00068bd4 ldrb.w r3, [fp, 0x44] | r3 = *(arg_44h);
0x00068bd8 subs r3, 1 | r3--;
0x00068bda sxtb r3, r3 | r3 = (int32_t) r3;
0x00068bdc add.w r2, r3, 0x1e | r2 = r3 + 0x1e;
0x00068be0 strb.w r3, [fp, 0x44] | *(arg_44h) = r3;
0x00068be4 ldr.w r3, [fp, r2, lsl 2] | offset_4 = r2 << 2;
| r3 = *((fp + offset_4));
0x00068be8 str.w r3, [fp, 0x74] | __asm ("str.w r3, [arg_74h]");
0x00068bec cmp r6, 0 |
| if (r6 == 0) {
0x00068bee beq.w 0x6891a | goto label_1;
| }
0x00068bf2 str r6, [sp, 0x10] | var_10h = r6;
0x00068bf4 b 0x68948 | goto label_0;
| label_62:
0x00068bf6 mov r0, r4 | r0 = r4;
0x00068bf8 bl 0x50d48 | r0 = fcn_00050d48 (r0);
0x00068bfc cmp r0, 0 |
| if (r0 == 0) {
0x00068bfe beq.w 0x68926 | goto label_2;
| }
0x00068c02 b 0x68944 | goto label_3;
| label_68:
0x00068c04 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00068c06 add r2, sp, 0xb0 | r2 += var_b0h;
0x00068c08 str r0, [sp] | *(sp) = r0;
0x00068c0a add r1, sp, 0xac | r1 += var_ach;
0x00068c0c mov r0, r6 | r0 = r6;
0x00068c0e bl 0x66bc4 | fcn_00066bc4 (r0, r1, r2, r3, r4, r5, r6);
0x00068c12 ldr r5, [sp, 0xac] | r5 = var_ach;
0x00068c14 str r0, [sp, 0x10] | var_10h = r0;
0x00068c16 str r0, [sp, 0xa8] | var_a8h = r0;
0x00068c18 cmp r0, 0 |
| if (r0 != 0) {
0x00068c1a bne 0x68cd8 | goto label_83;
| }
0x00068c1c ldr r2, [sp, 0x24] | r2 = var_24h;
0x00068c1e mov r1, r5 | r1 = r5;
0x00068c20 mov r0, r4 | r0 = r4;
0x00068c22 bl 0x67540 | fcn_00067540 (r0, r1, r2);
0x00068c26 ldrb r3, [r6, 0x11] | r3 = *((r6 + 0x11));
0x00068c28 cmp r3, 0 |
0x00068c2a bne 0x68ce0 |
| while (1) {
0x00068c2c ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x00068c2e str r3, [sp, 0x10] | var_10h = r3;
0x00068c30 cmp r3, 0 |
| if (r3 != 0) {
0x00068c32 bne.w 0x69e56 | goto label_84;
| }
0x00068c36 ldrb r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00068c38 add.w r1, r4, 0x1c | r1 = r4 + 0x1c;
0x00068c3c add.w r0, r5, 0x1c | r0 = r5 + 0x1c;
0x00068c40 lsls r2, r2, 1 | r2 <<= 1;
0x00068c42 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00068c46 ldrb r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00068c48 add.w r1, r4, 0x24 | r1 = r4 + 0x24;
0x00068c4c add.w r0, r5, 0x24 | r0 = r5 + 0x24;
0x00068c50 lsls r2, r2, 2 | r2 <<= 2;
0x00068c52 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00068c56 ldrb r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00068c58 mov r0, r4 | r0 = r4;
0x00068c5a ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x00068c5c strb r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x00068c5e ldrb r1, [r3] | r1 = *(r3);
0x00068c60 and r1, r1, 0xf7 | r1 &= 0xf7;
0x00068c64 bl 0x50af0 | fcn_00050af0 (r0, r1);
0x00068c68 ldrb r0, [r4, 9] | r0 = *((r4 + 9));
0x00068c6a movs r1, 1 | r1 = 1;
0x00068c6c ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00068c6e ldr r2, [sp, 0xb0] | r2 = var_b0h;
0x00068c70 add r3, r0 | r3 += r0;
0x00068c72 rev r2, r2 | r2 = SWAP32 (r2);
0x00068c74 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00068c76 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00068c78 str.w r5, [fp, 0x7c] | __asm ("str.w r5, [arg_7ch]");
0x00068c7c strb.w r1, [fp, 0x44] | *(arg_44h) = r1;
0x00068c80 str.w r3, [fp, 0x46] | __asm ("str.w r3, [arg_46h]");
0x00068c84 strd r5, r4, [fp, 0x74] | __asm ("strd r5, r4, [fp, 0x74]");
0x00068c88 b 0x6891a | goto label_1;
| label_69:
0x00068c8a mov r2, r4 | r2 = r4;
| label_5:
0x00068c8c movs r3, 0 | r3 = 0;
0x00068c8e ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00068c90 strb r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x00068c92 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00068c96 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00068c98 ldrb.w r3, [r1, 0x44] | r3 = *((r1 + 0x44));
0x00068c9c subs r3, 1 | r3--;
0x00068c9e sxtb r3, r3 | r3 = (int32_t) r3;
0x00068ca0 add.w r2, r3, 0x1e | r2 = r3 + 0x1e;
0x00068ca4 strb.w r3, [r1, 0x44] | *((r1 + 0x44)) = r3;
0x00068ca8 ldr.w r3, [r1, r2, lsl 2] | offset_5 = r2 << 2;
| r3 = *((r1 + offset_5));
0x00068cac str r3, [r1, 0x74] | *((r1 + 0x74)) = r3;
0x00068cae b 0x68948 | goto label_0;
| label_67:
0x00068cb0 ldr.w r4, [pc, 0x758] |
0x00068cb4 movw r3, 0x287b |
0x00068cb8 ldr.w r2, [pc, 0x754] |
0x00068cbc movs r0, 0xb | r0 = 0xb;
0x00068cbe ldr.w r1, [pc, 0x754] |
0x00068cc2 movt r3, 1 | r3 = 0x1287b;
0x00068cc6 add r4, pc | r4 = 0xd20d6;
0x00068cc8 str r0, [sp, 0x10] | var_10h = r0;
0x00068cca adds r4, 0x14 | r4 += 0x14;
0x00068ccc add r2, pc | r2 = 0xd20e0;
0x00068cce add r1, pc | r1 = 0xd20e8;
0x00068cd0 str r4, [sp] | *(sp) = r4;
0x00068cd2 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00068cd6 b 0x68948 | goto label_0;
| label_83:
0x00068cd8 ldrb r3, [r6, 0x11] | r3 = *((r6 + 0x11));
0x00068cda cmp r3, 0 |
| if (r3 == 0) {
0x00068cdc beq.w 0x69e56 | goto label_84;
| }
0x00068ce0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00068ce2 mov r0, r6 | r0 = r6;
0x00068ce4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00068ce6 ldr r1, [sp, 0xb0] | r1 = var_b0h;
0x00068ce8 str r2, [sp] | *(sp) = r2;
0x00068cea movs r2, 5 | r2 = 5;
0x00068cec bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x00068cf0 b 0x68c2c |
| }
| label_70:
0x00068cf2 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00068cf4 str r3, [sp, 0x14] | *(arg_14h) = r3;
0x00068cf6 bl 0x50d48 | fcn_00050d48 (r0);
0x00068cfa ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00068cfc cmp r0, 0 |
| if (r0 == 0) {
0x00068cfe beq.w 0x689ea | goto label_4;
| }
0x00068d02 mov r2, r4 | r2 = r4;
0x00068d04 str r0, [sp, 0x10] | var_10h = r0;
0x00068d06 b 0x68c8c | goto label_5;
| label_81:
0x00068d08 str r3, [sp, 0x44] | *(arg_44h) = r3;
0x00068d0a ldr r3, [sp, 0x48] | r3 = var_48h;
0x00068d0c strd r1, r2, [sp, 0x14] | __asm ("strd r1, r2, [sp, 0x14]");
0x00068d10 add.w r0, lr, r3 | r0 = lr + r3;
0x00068d14 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00068d18 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x00068d1a ldr r1, [sp, 0x14] | r1 = *(arg_14h);
0x00068d1c ldr r3, [sp, 0x48] | r3 = var_48h;
0x00068d1e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00068d20 subs r1, r1, r0 | r1 -= r0;
0x00068d22 add r1, r3 | r1 += r3;
0x00068d24 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00068d26 str r1, [sl, -0x4] | *((sl - 0x4)) = r1;
0x00068d2a b 0x68b50 | goto label_6;
| label_74:
0x00068d2c subs r2, r5, r2 | r2 = r5 - r2;
0x00068d2e str r6, [sp, 0x1c] | var_1ch_2 = r6;
0x00068d30 b 0x68a68 | goto label_7;
| label_78:
0x00068d32 str r0, [sp, 0x18] | var_18h = r0;
0x00068d34 mov r0, r2 | r0 = r2;
0x00068d36 str r2, [sp, 0x14] | *(arg_14h) = r2;
0x00068d38 bl 0x50d48 | fcn_00050d48 (r0);
0x00068d3a strb lr, [r6], -0xdd |
0x00068d3e movs r3, 5 | r3 = 5;
0x00068d40 mov r6, r0 | r6 = r0;
0x00068d42 str r0, [sp, 0xa8] | var_a8h = r0;
0x00068d44 cmp r0, 0 |
| if (r0 == 0) {
0x00068d46 beq.w 0x68ade | goto label_8;
| }
0x00068d4a ldr r0, [sp, 0x30] | r0 = var_30h;
0x00068d4c lsls r2, r7, 2 | r2 = r7 << 2;
0x00068d4e ldr r4, [sp, 0x28] | r4 = var_28h;
0x00068d50 mov r1, r3 | r1 = r3;
0x00068d52 ldr.w fp, [sp, 0x2c] | fp = var_2ch;
0x00068d56 adds r0, 1 | r0++;
0x00068d58 str r3, [sp, 0x64] | var_64h = r3;
0x00068d5a str r0, [sp, 0x28] | var_28h = r0;
0x00068d5c ldr r0, [sp, 0x34] | r0 = var_34h;
0x00068d5e blx 0x62ec | fcn_000062ec ();
0x00068d62 b 0x68b86 | goto label_9;
| label_80:
0x00068d64 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00068d66 mov r0, r4 | r0 = r4;
0x00068d68 ldr r3, [r1] | r3 = *(r1);
0x00068d6a str r1, [sl, -0x4] | *((sl - 0x4)) = r1;
0x00068d6e rev r3, r3 | r3 = SWAP32 (r3);
0x00068d70 str r3, [sp, 0xac] | var_ach = r3;
0x00068d72 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x00068d74 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00068d76 mov.w r3, 0 | r3 = 0;
0x00068d7a str r0, [r8, -0x4] | *((r8 - 0x4)) = r0;
0x00068d7e strb r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00068d80 b 0x68b60 | goto label_10;
| label_79:
0x00068d82 str r3, [sp, 0x64] | var_64h = r3;
0x00068d84 mov r2, fp | r2 = fp;
0x00068d86 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00068d88 adds r2, 3 | r2 += 3;
0x00068d8a bic r6, r2, 3 | r6 = BIT_MASK (r2, 3);
0x00068d8e ldr r4, [sp, 0x28] | r4 = var_28h;
0x00068d90 lsls r5, r6, 1 | r5 = r6 << 1;
0x00068d92 ldr.w fp, [sp, 0x2c] | fp = var_2ch;
0x00068d96 str r3, [sp, 0x14] | *(arg_14h) = r3;
0x00068d98 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00068d9a adds r2, r5, r6 | r2 = r5 + r6;
0x00068d9c ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x00068d9e add.w r0, r0, r2, lsl 1 | r0 += (r2 << 1);
0x00068da2 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00068da4 bl 0x28c3c | fcn_00028c3c (r0);
0x00068da8 ldr r2, [sp, 0xd4] | r2 = var_d4h;
0x00068daa ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00068dac str r0, [sp, 0x18] | var_18h = r0;
0x00068dae str r0, [sp, 0x14c] | var_14ch = r0;
0x00068db0 str r2, [sp, 0x44] | *(arg_44h) = r2;
0x00068db2 cmp r0, 0 |
| if (r0 == 0) {
0x00068db4 beq.w 0x693f0 | goto label_85;
| }
0x00068db8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00068dba mov.w lr, 0 | lr = 0;
0x00068dbe ldr r1, [sp, 0x44] | r1 = *(arg_44h);
0x00068dc0 mov sb, lr | sb = lr;
0x00068dc2 str r4, [sp, 0x7c] | *(arg_7ch) = r4;
0x00068dc4 str r3, [sp, 0x84] | var_84h = r3;
0x00068dc6 add.w r2, r2, r6, lsl 2 | r2 += (r6 << 2);
0x00068dca str r1, [sp, 0x148] | var_148h = r1;
0x00068dcc str.w lr, [sp, 0x50] | __asm ("str.w lr, [var_50h]");
0x00068dd0 adds r0, r2, r5 | r0 = r2 + r5;
0x00068dd2 str r2, [sp, 0x14] | *(arg_14h) = r2;
0x00068dd4 str r2, [sp, 0x150] | var_150h = r2;
0x00068dd6 ldrb r2, [r1, 8] | r2 = *((r1 + 8));
0x00068dd8 str r0, [sp, 0x60] | var_60h = r0;
0x00068dda str.w fp, [sp, 0x80] | __asm ("str.w fp, [var_80h]");
0x00068dde lsls r2, r2, 2 | r2 <<= 2;
0x00068de0 str r2, [sp, 0x6c] | var_6ch = r2;
0x00068de2 ldrb r2, [r1, 2] | r2 = *((r1 + 2));
0x00068de4 str r2, [sp, 0x2c] | var_2ch = r2;
0x00068de6 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00068de8 adds r2, 1 | r2++;
0x00068dea str r2, [sp, 0x28] | var_28h = r2;
0x00068dec add r2, sp, 0x108 | r2 += var_108h;
0x00068dee str r2, [sp, 0x4c] | var_4ch = r2;
| label_11:
0x00068df0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00068df2 ldr.w r6, [r3, sb, lsl 2] | offset_6 = sb << 2;
| r6 = *((r3 + offset_6));
0x00068df6 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00068df8 ldr r4, [r6, 0x38] | r4 = *((r6 + 0x38));
0x00068dfa ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x00068dfc ldrh.w r8, [r6, 0x12] | r8 = *((r6 + 0x12));
0x00068e00 ldrb r1, [r4] | r1 = *(r4);
0x00068e02 ldrb r2, [r3] | r2 = *(r3);
0x00068e04 ldrh.w fp, [r6, 0x18] | fp = *((r6 + 0x18));
0x00068e08 add r8, r4 | r8 += r4;
0x00068e0a ldrh r5, [r6, 0x1a] | r5 = *((r6 + 0x1a));
0x00068e0c cmp r1, r2 |
| if (r1 != r2) {
0x00068e0e bne.w 0x69354 | goto label_86;
| }
0x00068e12 ldr.w sl, [sp, 0x144] | sl = var_144h;
0x00068e16 movs r1, 0 | r1 = 0;
0x00068e18 ldrb r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00068e1a ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00068e1c mov r7, sl | r7 = sl;
0x00068e1e add r2, fp | r2 += fp;
0x00068e20 lsls r2, r2, 1 | r2 <<= 1;
0x00068e22 add.w r0, r3, sl, lsl 1 | r0 = r3 + (sl << 1);
0x00068e26 blx 0x62ec | fcn_000062ec ();
0x00068e2a ldrb r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x00068e2c cmp r1, 0 |
| if (r1 != 0) {
0x00068e2e bne.w 0x6902a | goto label_87;
| }
| label_14:
0x00068e32 ldrh r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x00068e34 ldrh r1, [r6, 0x12] | r1 = *((r6 + 0x12));
0x00068e36 add.w r1, r1, r3, lsl 1 | r1 += (r3 << 1);
0x00068e3a add r1, r4 | r1 += r4;
0x00068e3c cmp r1, r8 |
| if (r1 < r8) {
0x00068e3e bls 0x68e6a | goto label_88;
| }
0x00068e40 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00068e42 mov r2, r8 | r2 = r8;
0x00068e44 add.w r0, r3, r7, lsl 2 | r0 = r3 + (r7 << 2);
| do {
0x00068e48 ldrh r3, [r2], 2 | r3 = *(r2);
| r2 += 2;
0x00068e4c rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00068e4e cmp r1, r2 |
0x00068e50 and.w r3, r3, r5 | r3 &= r5;
0x00068e54 add r3, r4 | r3 += r4;
0x00068e56 str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x00068e58 subs r3, 4 | r3 -= 4;
0x00068e5a bhi 0x68e48 |
| } while (r3 > 4);
0x00068e5c subs r1, 1 | r1--;
0x00068e5e adds r7, 1 | r7++;
0x00068e60 sub.w r1, r1, r8 | r1 -= r8;
0x00068e64 add.w r7, r7, r1, lsr 1 | r7 += (r1 >> 1);
0x00068e68 str r7, [sp, 0x144] | var_144h = r7;
| label_88:
0x00068e6a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00068e6c str.w r7, [r3, sb, lsl 2] | __asm ("str.w r7, [r3, sb, lsl 2]");
0x00068e70 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00068e72 clz r4, r3 | r4 &= r3;
0x00068e76 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00068e78 lsrs r4, r4, 5 | r4 >>= 5;
0x00068e7a cmp sb, r3 |
0x00068e7c ite ge |
| if (sb < r3) {
0x00068e7e movge r3, 0 | r3 = 0;
| }
| if (sb >= r3) {
0x00068e80 andlt r3, r4, 1 | r3 = r4 & 1;
| }
0x00068e84 cmp r3, 0 |
| if (r3 != 0) {
0x00068e86 bne.w 0x6907a | goto label_89;
| }
| label_15:
0x00068e8a ldr r3, [sp, 0x28] | r3 = var_28h;
0x00068e8c add.w sb, sb, 1 | sb++;
0x00068e90 cmp sb, r3 |
| if (sb != r3) {
0x00068e92 bne 0x68df0 | goto label_11;
| }
0x00068e94 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00068e96 add.w sl, sp, 0xf4 | sl += var_f4h;
0x00068e9a ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x00068e9c mov.w ip, 0 |
0x00068ea0 ldr r3, [sp, 0x84] | r3 = var_84h;
0x00068ea2 mov r5, sl | r5 = sl;
0x00068ea4 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x00068ea6 mov r8, ip | r8 = ip;
0x00068ea8 subs r1, 0xc | r1 -= 0xc;
0x00068eaa ldr r0, [sp, 0x34] | r0 = var_34h;
0x00068eac str r4, [sp, 0x90] | var_90h = r4;
0x00068eae adds r2, r1, r2 | r2 = r1 + r2;
0x00068eb0 ldr r1, [sp, 0x78] | r1 = var_78h;
0x00068eb2 ldrd r4, fp, [sp, 0x7c] | __asm ("ldrd r4, fp, [arg_7ch]");
0x00068eb6 str r2, [sp, 0x84] | var_84h = r2;
0x00068eb8 add r2, sp, 0xd8 | r2 += var_d8h;
0x00068eba add r2, r1 | r2 += r1;
0x00068ebc ldr.w sb, [sp, 0x70] | sb = var_70h;
0x00068ec0 str r2, [sp, 0x5c] | var_5ch = r2;
0x00068ec2 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00068ec4 str.w fp, [sp, 0x88] | __asm ("str.w fp, [var_88h]");
0x00068ec8 mov fp, r0 |
0x00068eca str r0, [sp, 0x98] | var_98h = r0;
0x00068ecc str r2, [sp, 0x50] | var_50h = r2;
0x00068ece str.w sl, [sp, 0x94] | __asm ("str.w sl, [var_94h]");
0x00068ed2 str r4, [sp, 0x60] | var_60h = r4;
0x00068ed4 strd r3, sb, [sp, 0x7c] | __asm ("strd r3, sb, [sp, 0x7c]");
0x00068ed8 str.w sl, [sp, 0x8c] | __asm ("str.w sl, [var_8ch]");
| label_12:
0x00068edc ldr r3, [sp, 0x50] | r3 = var_50h;
0x00068ede add r2, sp, 0x1a0 | r2 += var_1a0h;
0x00068ee0 ldr r4, [fp], 4 | r4 = *(fp);
| fp += 4;
0x00068ee4 add.w r0, r2, r8, lsl 2 | r0 = r2 + (r8 << 2);
0x00068ee8 ldr sl, [r3], 4 | sl = *(r3);
| r3 += 4;
0x00068eec str r3, [sp, 0x50] | var_50h = r3;
0x00068eee ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00068ef0 str sl, [r0, -0x34] | *((r0 - 0x34)) = sl;
0x00068ef4 str r3, [r0, -0x4c] | *((r0 - 0x4c)) = r3;
0x00068ef8 cmp.w r8, 0 |
| if (r8 == 0) {
0x00068efc beq.w 0x6921e | goto label_90;
| }
0x00068f00 ldr r3, [r0, -0x38] | r3 = *((r0 - 0x38));
0x00068f04 cmp sl, r3 |
0x00068f06 it ne |
| if (sl == r3) {
0x00068f08 addne r8, r8, 1 | r8++;
| }
| label_20:
0x00068f0c ldr r3, [sp, 0x2c] | r3 = var_2ch;
| if (r3 == 0) {
0x00068f0e cbnz r3, 0x68f2c |
0x00068f10 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00068f12 add r2, sp, 0x1a0 | r2 += var_1a0h;
0x00068f14 add.w r0, r2, r8, lsl 2 | r0 = r2 + (r8 << 2);
0x00068f18 add.w r8, r8, 1 | r8++;
0x00068f1c ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x00068f1e str r3, [r0, -0x4c] | *((r0 - 0x4c)) = r3;
0x00068f22 mov r3, r0 | r3 = r0;
0x00068f24 add.w r0, sl, 1 | r0 = sl + 1;
0x00068f28 str r0, [r3, -0x34] | *((r3 - 0x34)) = r0;
| }
0x00068f2c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00068f2e add.w r7, r4, 0x20 | r7 = r4 + 0x20;
0x00068f32 ldr r2, [sp, 0x84] | r2 = var_84h;
0x00068f34 movs r6, 0 | r6 = 0;
0x00068f36 subs r3, r2, r3 | r3 = r2 - r3;
0x00068f38 str r3, [sb], 4 | *(sb) = r3;
| sb += 4;
0x00068f3c ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00068f3e cbz r3, 0x68f5e | goto label_91;
| }
| do {
0x00068f40 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x00068f42 mov r0, r4 | r0 = r4;
0x00068f44 ldr r1, [r7, 4]! | r1 = *((r7 += 4));
0x00068f48 adds r6, 1 | r6++;
0x00068f4a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00068f4c ldr r3, [sb, -0x4] | r3 = *((sb - 0x4));
0x00068f50 adds r2, r0, 2 | r2 = r0 + 2;
0x00068f52 add r3, r2 | r3 += r2;
0x00068f54 str r3, [sb, -0x4] | *((sb - 0x4)) = r3;
0x00068f58 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00068f5a cmp r6, r3 |
0x00068f5c blt 0x68f40 |
| } while (r6 < r3);
| label_91:
0x00068f5e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00068f60 str sl, [r5], 4 | *(r5) = sl;
| r5 += 4;
0x00068f64 cmp r3, fp |
| if (r3 != fp) {
0x00068f66 bne 0x68edc | goto label_12;
| }
0x00068f68 ldrd fp, sl, [sp, 0x88] | __asm ("ldrd fp, sl, [var_88h]");
0x00068f6c mov.w ip, 2 |
0x00068f70 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00068f72 movs r1, 1 | r1 = 1;
0x00068f74 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x00068f78 mov r7, sl | r7 = sl;
0x00068f7a ldr.w sl, [sp, 0x84] | sl = var_84h;
0x00068f7e ldrd r3, r5, [sp, 0x7c] | __asm ("ldrd r3, r5, [arg_7ch]");
0x00068f82 mov sb, r2 | sb = r2;
0x00068f84 ldr r4, [sp, 0x60] | r4 = var_60h;
0x00068f86 str.w fp, [sp, 0x80] | __asm ("str.w fp, [var_80h]");
0x00068f8a mov fp, ip |
0x00068f8c str r1, [sp, 0x50] | var_50h = r1;
0x00068f8e str r4, [sp, 0x7c] | *(arg_7ch) = r4;
0x00068f90 str r3, [sp, 0x88] | var_88h = r3;
| label_24:
0x00068f92 ldr r2, [r5], 4 | r2 = *(r5);
| r5 += 4;
0x00068f96 cmp sl, r2 |
0x00068f98 it ge |
| if (sl < r2) {
0x00068f9a ldrge r3, [r7] | r3 = *(r7);
| }
| if (sl >= r2) {
0x00068f9c bge.w 0x6922a | goto label_92;
| }
0x00068fa0 mov r3, r8 | r3 = r8;
0x00068fa2 mov r2, sl | r2 = sl;
0x00068fa4 b 0x68fb4 |
| while (r3 != 0) {
| label_13:
0x00068fa6 ldr r0, [r5] | r0 = *(r5);
0x00068fa8 cmp r2, r4 |
0x00068faa str r6, [r7] | *(r7) = r6;
0x00068fac add r0, r1 | r0 += r1;
0x00068fae str r0, [r5] | *(r5) = r0;
| if (r2 >= r4) {
0x00068fb0 bge.w 0x69224 | goto label_93;
| }
0x00068fb4 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00068fb6 cmp r1, sb |
| if (r1 >= sb) {
0x00068fb8 blt 0x68fcc |
0x00068fba cmp.w fp, 6 |
0x00068fbe mov sb, fp | sb = fp;
| if (fp == 6) {
0x00068fc0 beq.w 0x69382 | goto label_94;
| }
0x00068fc4 movs r1, 0 | r1 = 0;
0x00068fc6 str r1, [r5] | *(r5) = r1;
0x00068fc8 ldr r1, [sp, 0x144] | r1 = var_144h;
0x00068fca str r1, [r7, 4] | *((r7 + 4)) = r1;
| }
0x00068fcc ldr.w r8, [r7] | r8 = *(r7);
0x00068fd0 ldr r1, [sp, 0x14] | r1 = *(arg_14h);
0x00068fd2 add.w r6, r8, -1 | r6 = r8 + -1;
0x00068fd6 ldrh.w r0, [r1, r6, lsl 1] | offset_7 = r6 << 1;
| r0 = *((r1 + offset_7));
0x00068fda lsl.w sl, r6, 1 | sl = r6 << 1;
| if (r0 == 0) {
0x00068fde cbnz r0, 0x68ff0 |
0x00068fe0 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00068fe2 mov r1, r6 | r1 = r6;
0x00068fe4 strd r3, r2, [sp, 0x5c] | __asm ("strd r3, r2, [sp, 0x5c]");
0x00068fe8 bl 0x22bac | fcn_00022bac (r0, r1, r2);
0x00068fec ldrd r3, r2, [sp, 0x5c] | __asm ("ldrd r3, r2, [var_5ch]");
| }
0x00068ff0 ldr r4, [r5, -0x4] | r4 = *((r5 - 0x4));
0x00068ff4 adds r1, r0, 2 | r1 = r0 + 2;
0x00068ff6 subs r4, r4, r1 | r4 -= r1;
0x00068ff8 str r4, [r5, -0x4] | *((r5 - 0x4)) = r4;
0x00068ffc cmp r3, 0 |
0x00068ffe bne 0x68fa6 |
| }
0x00069000 ldr r1, [sp, 0x144] | r1 = var_144h;
0x00069002 cmp r8, r1 |
0x00069004 it ge |
| if (r8 >= r1) {
0x00069006 movge r1, r3 | r1 = r3;
| goto label_95;
| }
| if (r8 >= r1) {
| label_95:
0x00069008 bge 0x68fa6 | goto label_13;
| }
0x0006900a ldr r1, [sp, 0x14] | r1 = *(arg_14h);
0x0006900c add sl, r1 | sl += r1;
0x0006900e ldrh.w r1, [sl, 2] | r1 = *((sl + 2));
| if (r1 == 0) {
0x00069012 cbnz r1, 0x69026 |
0x00069014 mov r1, r8 | r1 = r8;
0x00069016 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00069018 strd r3, r2, [sp, 0x5c] | __asm ("strd r3, r2, [sp, 0x5c]");
0x0006901c bl 0x22bac | fcn_00022bac (r0, r1, r2);
0x00069020 ldrd r3, r2, [sp, 0x5c] | __asm ("ldrd r3, r2, [var_5ch]");
0x00069022 adds r2, 0x17 | r2 += 0x17;
0x00069024 mov r1, r0 | r1 = r0;
| }
0x00069026 adds r1, 2 | r1 += 2;
0x00069028 b 0x68fa6 | goto label_13;
| label_87:
0x0006902a ldrh r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0006902c cmp fp, r0 |
| if (fp <= r0) {
0x0006902e blo.w 0x694b0 | goto label_96;
| }
| if (r0 == 0) {
0x00069032 cbz r0, 0x69058 | goto label_97;
| }
0x00069034 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00069036 mov r2, r8 | r2 = r8;
0x00069038 add.w r8, r8, r0, lsl 1 | r8 += (r0 << 1);
0x0006903c add.w r7, r3, sl, lsl 2 | r7 = r3 + (sl << 2);
| do {
0x00069040 ldrh r3, [r2], 2 | r3 = *(r2);
| r2 += 2;
0x00069044 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00069046 cmp r8, r2 |
0x00069048 and.w r3, r3, r5 | r3 &= r5;
0x0006904c add r3, r4 | r3 += r4;
0x0006904e str r3, [r7], 4 | *(r7) = r3;
| r7 += 4;
0x00069052 bne 0x69040 |
| } while (r8 != r2);
0x00069054 add.w r7, sl, r0 | r7 = sl + r0;
| label_97:
0x00069058 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006905a add.w r3, r6, 0x20 | r3 = r6 + 0x20;
0x0006905e movs r0, 4 | r0 = 4;
0x00069060 smlabb ip, r0, r1, r3 | __asm ("smlabb ip, r0, r1, r3");
0x00069064 add.w r2, r2, r7, lsl 2 | r2 += (r7 << 2);
| do {
0x00069068 ldr r0, [r3, 4]! | r0 = *((r3 += 4));
0x0006906c cmp ip, r3 |
0x0006906e str r0, [r2], 4 | *(r2) = r0;
| r2 += 4;
0x00069072 bne 0x69068 |
| } while (ip != r3);
0x00069074 add r7, r1 | r7 += r1;
0x00069076 str r7, [sp, 0x144] | var_144h = r7;
0x00069078 b 0x68e32 | goto label_14;
| label_89:
0x0006907a ldr r3, [sp, 0x70] | r3 = var_70h;
0x0006907c ldr r5, [sp, 0x14] | r5 = *(arg_14h);
0x0006907e ldr r1, [sp, 0x50] | r1 = var_50h;
0x00069080 ldr.w r2, [r3, sb, lsl 2] | offset_8 = sb << 2;
| r2 = *((r3 + offset_8));
0x00069084 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00069086 strh.w r2, [r5, r7, lsl 1] | offset_9 = r7 << 1;
| *((r5 + offset_9)) = r2;
0x0006908a uxth r2, r2 | r2 = (int16_t) r2;
0x0006908c add r3, r1 | r3 += r1;
0x0006908e mov r0, r3 | r0 = r3;
0x00069090 add r1, r2 | r1 += r2;
0x00069092 str r1, [sp, 0x50] | var_50h = r1;
0x00069094 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x00069096 ldr.w r1, [r1, sb, lsl 2] | offset_10 = sb << 2;
| r1 = *((r1 + offset_10));
0x0006909a blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006909e ldrh.w r2, [r5, r7, lsl 1] | offset_11 = r7 << 1;
| r2 = *((r5 + offset_11));
0x000690a2 mov r3, r0 | r3 = r0;
0x000690a4 ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x000690a6 subs r2, r2, r1 | r2 -= r1;
0x000690a8 adds r1, r0, r1 | r1 = r0 + r1;
0x000690aa ldr r0, [sp, 0x18] | r0 = var_18h;
0x000690ac uxth r2, r2 | r2 = (int16_t) r2;
0x000690ae str.w r1, [r0, r7, lsl 2] | __asm ("str.w r1, [r0, r7, lsl 2]");
0x000690b2 add.w r1, r5, r7, lsl 1 | r1 = r5 + (r7 << 1);
0x000690b6 strh.w r2, [r5, r7, lsl 1] | offset_12 = r7 << 1;
| *((r5 + offset_12)) = r2;
0x000690ba ldrb r0, [r6, 8] | r0 = *((r6 + 8));
| if (r0 != 0) {
0x000690bc cbnz r0, 0x690cc | goto label_98;
| }
0x000690be ldr r2, [r6, 0x38] | r2 = *((r6 + 0x38));
0x000690c0 ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x000690c2 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000690c4 str r2, [r3, r1] | *((r3 + r1)) = r2;
| do {
| label_16:
0x000690c6 adds r7, 1 | r7++;
0x000690c8 str r7, [sp, 0x144] | var_144h = r7;
0x000690ca b 0x68e8a | goto label_15;
| label_98:
0x000690cc cmp r2, 3 |
0x000690ce bhi 0x690c6 |
| } while (r2 > 3);
0x000690d0 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000690d2 movs r5, 0 | r5 = 0;
0x000690d4 subs r2, r3, 1 | r2 = r3 - 1;
0x000690d6 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000690d8 add r2, r3 | r2 += r3;
| do {
0x000690da mov r0, r2 | r0 = r2;
0x000690dc strb r5, [r2, 1]! | *((r2 += 1)) = r5;
0x000690e0 ldrh r3, [r1] | r3 = *(r1);
0x000690e2 adds r3, 1 | r3++;
0x000690e4 uxth r3, r3 | r3 = (int16_t) r3;
0x000690e6 cmp r3, 3 |
0x000690e8 strh r3, [r1] | *(r1) = r3;
0x000690ea bls 0x690da |
| } while (r3 < 3);
0x000690ec ldr r3, [sp, 0x60] | r3 = var_60h;
0x000690ee rsb.w r3, r3, 2 | r3 = 2 - r3;
0x000690f2 add r3, r0 | r3 += r0;
0x000690f4 str r3, [sp, 0x50] | var_50h = r3;
0x000690f6 b 0x690c6 | goto label_16;
| label_73:
0x000690f8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000690fa ldr r5, [r2, 0x38] | r5 = *((r2 + 0x38));
0x000690fc movs r2, 0 | r2 = 0;
0x000690fe str r2, [sp, 0x1c] | var_1ch_2 = r2;
| label_25:
0x00069100 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00069102 str r1, [sp, 0x30] | var_30h = r1;
0x00069104 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
0x00069106 adds r2, 8 | r2 += 8;
0x00069108 adds r2, r5, r2 | r2 = r5 + r2;
0x0006910a str r2, [sp, 0x68] | var_68h = r2;
0x0006910c b 0x68a84 | goto label_17;
| label_71:
0x0006910e ldrh r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00069110 ldrh r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00069112 cmp r2, r1 |
| if (r2 != r1) {
0x00069114 bne.w 0x689f6 | goto label_18;
| }
0x00069118 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0006911a ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x0006911c cmp r1, 1 |
| if (r1 == 1) {
0x0006911e beq.w 0x689f6 | goto label_18;
| }
0x00069122 ldrh r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x00069124 ldr r0, [sp, 0x40] | r0 = var_40h;
0x00069126 cmp r1, r0 |
| if (r1 != r0) {
0x00069128 bne.w 0x689f6 | goto label_18;
| }
0x0006912c ldr.w sb, [r4, 0x34] | sb = *((r4 + 0x34));
0x00069130 cmp r2, 0 |
| if (r2 == 0) {
0x00069132 beq.w 0x69a28 | goto label_99;
| }
0x00069136 movs r3, 0 | r3 = 0;
0x00069138 add r2, sp, 0xac | r2 += var_ach;
0x0006913a add r1, sp, 0xa4 | r1 += var_a4h;
0x0006913c mov r0, sb | r0 = sb;
0x0006913e str r3, [sp] | *(sp) = r3;
0x00069140 bl 0x66bc4 | r0 = fcn_00066bc4 (r0, r1, r2, r3, r4, r5, r6);
0x00069144 mov r6, r0 | r6 = r0;
0x00069146 str r0, [sp, 0xa8] | var_a8h = r0;
0x00069148 cmp r0, 0 |
| if (r0 != 0) {
0x0006914a bne.w 0x68bc8 | goto label_19;
| }
0x0006914e ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00069150 mov r0, r4 | r0 = r4;
0x00069152 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x00069154 add.w r8, sp, 0xb0 | r8 += var_b0h;
0x00069158 str r1, [sp, 0xb0] | var_b0h = r1;
0x0006915a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0006915c ldr r7, [sp, 0xa4] | r7 = var_a4h;
0x0006915e movs r1, 0xd | r1 = 0xd;
0x00069160 strh.w r0, [sp, 0xa2] | x = r0;
0x00069164 mov r0, r7 | r0 = r7;
0x00069166 bl 0x50af0 | fcn_00050af0 (r0, r1);
0x0006916a ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0006916c mov r1, r6 | r1 = r6;
0x0006916e mov r2, r5 | r2 = r5;
0x00069170 add r0, sp, 0x144 | r0 += var_144h;
0x00069172 str.w r8, [sp, 0x14c] | __asm ("str.w r8, [var_14ch]");
0x00069176 str r3, [sp, 0x154] | var_154h = r3;
0x00069178 add.w r3, sp, 0xa2 | r3 += x;
0x0006917c str r3, [sp, 0x150] | var_150h = r3;
0x0006917e movs r3, 2 | r3 = 2;
0x00069180 str r3, [sp, 0x16c] | var_16ch = r3;
0x00069182 mov r3, r7 | r3 = r7;
0x00069184 str r5, [sp, 0x144] | var_144h = r5;
0x00069186 str r4, [sp, 0x148] | var_148h = r4;
0x00069188 bl 0x51704 | r0 = fcn_00051704 (r0, r1, r2, r3, r4);
0x0006918c mov r6, r0 | r6 = r0;
0x0006918e str r0, [sp, 0xa8] | var_a8h = r0;
0x00069190 cmp r0, 0 |
| if (r0 != 0) {
0x00069192 bne.w 0x69a18 | goto label_100;
| }
0x00069196 ldrh.w r0, [sp, 0xa2] | r0 = x;
0x0006919a mvn r3, 1 | r3 = ~1;
0x0006919e ldrh r1, [r7, 0x12] | r1 = *((r7 + 0x12));
0x000691a0 ldr.w r2, [sb, 0x28] | r2 = *((sb + 0x28));
0x000691a4 subs r3, r3, r0 | r3 -= r0;
0x000691a6 ldr.w r8, [sp, 0xac] | r8 = var_ach;
0x000691aa subs r3, r3, r1 | r3 -= r1;
0x000691ac add r3, r2 | r3 += r2;
0x000691ae str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x000691b0 ldrb.w r3, [sb, 0x11] | r3 = *((sb + 0x11));
0x000691b4 cmp r3, 0 |
| if (r3 != 0) {
0x000691b6 bne.w 0x69a52 | goto label_101;
| }
| label_40:
0x000691ba ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000691bc ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x000691be subs r3, 1 | r3--;
0x000691c0 ldrh.w r2, [r2, r3, lsl 1] | offset_13 = r3 << 1;
| r2 = *((r2 + offset_13));
0x000691c4 ldrh r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x000691c6 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x000691c8 ands r3, r2 | r3 &= r2;
0x000691ca ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x000691cc add r2, r3 | r2 += r3;
0x000691ce add.w r0, r2, 9 | r0 = r2 + 9;
| do {
0x000691d2 mov r1, r2 | r1 = r2;
0x000691d4 adds r2, 1 | r2++;
0x000691d6 str r2, [sp, 0xb0] | var_b0h = r2;
0x000691d8 cmp r0, r2 |
0x000691da ldrb r5, [r2, -0x1] | r5 = *((r2 - 0x1));
0x000691de ite ls |
| if (r0 > r2) {
0x000691e0 movls r3, 0 | r3 = 0;
| }
| if (r0 <= r2) {
0x000691e2 movhi r3, 1 | r3 = 1;
| }
0x000691e4 ands.w r3, r3, r5, lsr 7 | r3 &= (r5 >> 7);
0x000691e8 bne 0x691d2 |
| } while (r3 != r3);
0x000691ea adds r1, 0xa | r1 += 0xa;
0x000691ec add r3, sp, 0x190 | r3 += var_190h;
| do {
0x000691ee adds r2, 1 | r2++;
0x000691f0 str r2, [sp, 0xb0] | var_b0h = r2;
0x000691f2 cmp r1, r2 |
0x000691f4 ldrb r5, [r2, -0x1] | r5 = *((r2 - 0x1));
0x000691f8 ite ls |
| if (r1 > r2) {
0x000691fa movls r0, 0 | r0 = 0;
| }
| if (r1 <= r2) {
0x000691fc movhi r0, 1 | r0 = 1;
| }
0x000691fe strb r5, [r3], 1 | *(r3) = r5;
| r3++;
0x00069202 ands.w r0, r0, r5, lsr 7 | r0 &= (r5 >> 7);
0x00069206 bne 0x691ee |
| } while (r0 != r0);
0x00069208 cmp r6, 0 |
| if (r6 == 0) {
0x0006920a beq.w 0x69e6c | goto label_102;
| }
| label_61:
0x0006920e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00069210 rev.w r1, r8 | r8 = SWAP32 (r1);
0x00069214 ldrb r2, [r3, 9] | r2 = *((r3 + 9));
0x00069216 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x00069218 add r3, r2 | r3 += r2;
0x0006921a str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006921c b 0x69a1e | goto label_103;
| label_90:
0x0006921e mov.w r8, 1 | r8 = 1;
0x00069222 b 0x68f0c | goto label_20;
| label_93:
0x00069224 mov r8, r3 | r8 = r3;
0x00069226 mov sl, r2 | sl = r2;
0x00069228 mov r3, r6 | r3 = r6;
| label_92:
0x0006922a ldr r6, [sp, 0x144] | r6 = var_144h;
0x0006922c sub.w r2, fp, 2 | r2 = fp - 2;
0x00069230 str r2, [sp, 0x60] | var_60h = r2;
0x00069232 cmp r6, r3 |
| if (r6 <= r3) {
0x00069234 ble 0x6927e | goto label_23;
| }
0x00069236 ldr r2, [sp, 0x14] | r2 = *(arg_14h);
0x00069238 add.w r4, r2, r3, lsl 1 | r4 = r2 + (r3 << 1);
| do {
| label_21:
0x0006923c ldrh r0, [r4], 2 | r0 = *(r4);
| r4 += 2;
| if (r0 == 0) {
0x00069240 cbnz r0, 0x6924e |
0x00069242 mov r1, r3 | r1 = r3;
0x00069244 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00069246 str r3, [sp, 0x5c] | var_5ch = r3;
0x00069248 bl 0x22bac | r0 = fcn_00022bac (r0, r1, r2);
0x0006924a ldc2 p11, c9, [r0], 0x5c | __asm ("ldc2 p11, c9, [r0], 0x5c");
| }
0x0006924e ldr r2, [r5, -0x4] | r2 = *((r5 - 0x4));
0x00069252 adds r0, 2 | r0 += 2;
0x00069254 add r2, r0 | r2 += r0;
0x00069256 cmp sl, r2 |
| if (sl < r2) {
0x00069258 blt.w 0x693aa | goto label_104;
| }
0x0006925c adds r3, 1 | r3++;
0x0006925e str r2, [r5, -0x4] | *((r5 - 0x4)) = r2;
0x00069262 str r3, [r7] | *(r7) = r3;
0x00069264 cmp.w r8, 0 |
0x00069266 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x00069268 bne 0x69272 |
0x0006926a cmp r3, r6 |
0x0006926c it ge |
| if (r3 < r6) {
0x0006926e movge r0, r8 | r0 = r8;
| }
| if (r3 < r6) {
0x00069270 blt 0x69338 | goto label_105;
| }
| }
0x00069272 ldr r2, [r5] | r2 = *(r5);
0x00069274 cmp r3, r6 |
0x00069276 sub.w r2, r2, r0 | r2 -= r0;
0x0006927a str r2, [r5] | *(r5) = r2;
0x0006927c bne 0x6923c |
| } while (r3 != r6);
| label_23:
0x0006927e ldr.w r8, [sp, 0x60] | r8 = var_60h;
0x00069282 mov ip, fp |
0x00069284 ldr r3, [sp, 0x88] | r3 = var_88h;
0x00069286 add.w r2, ip, -1 | r2 = ip + -1;
0x0006928a ldr.w fp, [sp, 0x80] | fp = var_80h;
0x0006928e ldr.w sl, [sp, 0x8c] | sl = var_8ch;
0x00069292 mov r0, r8 | r0 = r8;
0x00069294 ldr r4, [sp, 0x7c] | r4 = *(arg_7ch);
0x00069296 str r6, [sp, 0x50] | var_50h = r6;
0x00069298 str r2, [sp, 0x7c] | *(arg_7ch) = r2;
| label_58:
0x0006929a ldr r1, [sp, 0x70] | r1 = var_70h;
0x0006929c lsls r2, r0, 2 | r2 = r0 << 2;
0x0006929e str r0, [sp, 0x5c] | var_5ch = r0;
0x000692a0 add r1, r2 | r1 += r2;
0x000692a2 subs r2, 4 | r2 -= 4;
0x000692a4 add.w sb, sl, r2 | sb = sl + r2;
0x000692a8 str r1, [sp, 0x60] | var_60h = r1;
0x000692aa cmp r0, 0 |
| if (r0 == 0) {
0x000692ac beq.w 0x694ea | goto label_106;
| }
0x000692b0 str r4, [sp, 0x70] | var_70h = r4;
0x000692b2 ldr r4, [sp, 0x74] | r4 = *(arg_74h);
0x000692b4 str.w fp, [sp, 0x80] | __asm ("str.w fp, [var_80h]");
0x000692b8 mov fp, sb |
0x000692ba str r3, [sp, 0x8c] | var_8ch = r3;
0x000692bc str r0, [sp, 0x9c] | var_9ch = r0;
| label_27:
0x000692be ldr r3, [sp, 0x60] | r3 = var_60h;
0x000692c0 ldr.w r7, [fp] | r7 = *(fp);
0x000692c4 str.w fp, [sp, 0x88] | __asm ("str.w fp, [var_88h]");
0x000692c8 ldrd sb, r6, [r3, -0x4] | __asm ("ldrd sb, r6, [r3, -0x4]");
0x000692cc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000692ce subs r5, r7, 1 | r5 = r7 - 1;
0x000692d0 subs r1, r7, r3 | r1 = r7 - r3;
0x000692d2 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000692d4 ldrh.w r0, [r3, r1, lsl 1] | offset_14 = r1 << 1;
| r0 = *((r3 + offset_14));
0x000692d8 add.w r8, r3, r1, lsl 1 | r8 = r3 + (r1 << 1);
| if (r0 == 0) {
0x000692dc cbnz r0, 0x692e4 |
0x000692de ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000692e0 bl 0x22bac | fcn_00022bac (r0, r1, r2);
| }
0x000692e4 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000692e6 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x000692e8 add.w r7, r3, r7, lsl 1 | r7 = r3 + (r7 << 1);
0x000692ec ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000692ee subs.w sl, r3, r2 | sl = r3 - r2;
0x000692f2 mov r3, fp | r3 = fp;
0x000692f4 it ne |
| if (sl == r3) {
0x000692f6 movne sl, 1 | sl = 1;
| }
0x000692fa mov fp, sb |
0x000692fc lsl.w sl, sl, 1 | sl <<= 1;
0x00069300 mov sb, r3 | sb = r3;
| do {
0x00069302 ldrh r3, [r7, -0x2]! | r3 = *((r7 -= 0x2));
| if (r3 == 0) {
0x00069306 cbnz r3, 0x69310 |
0x00069308 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0006930a mov r1, r5 | r1 = r5;
0x0006930c bl 0x22bac | fcn_00022bac (r0, r1, r2);
| }
0x00069310 cmp r6, 0 |
| if (r6 != 0) {
0x00069312 bne.w 0x69430 | goto label_107;
| }
0x00069316 ldrh.w r1, [r8] | r1 = *(r8);
0x0006931a ldrh r3, [r7] | r3 = *(r7);
| label_26:
0x0006931c adds r3, 2 | r3 += 2;
0x0006931e adds r1, 2 | r1 += 2;
0x00069320 sub.w fp, fp, r3 |
0x00069324 subs r3, r5, 1 | r3 = r5 - 1;
0x00069326 add r6, r1 | r6 += r1;
0x00069328 sub.w r8, r8, 2 | r8 -= 2;
0x0006932c str.w r5, [sb] | __asm ("str.w r5, [sb]");
| if (r3 < r5) {
0x00069330 bmi.w 0x694a8 | goto label_108;
| }
0x00069334 mov r5, r3 | r5 = r3;
0x00069336 b 0x69302 |
| } while (1);
| label_105:
0x00069338 ldrh r2, [r4] | r2 = *(r4);
| if (r2 == 0) {
0x0006933a cbnz r2, 0x6934a |
0x0006933c mov r1, r3 | r1 = r3;
0x0006933e ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00069340 str r3, [sp, 0x5c] | var_5ch = r3;
0x00069342 bl 0x22bac | fcn_00022bac (r0, r1, r2);
0x00069346 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00069348 mov r2, r0 | r2 = r0;
| }
0x0006934a ldr r1, [r5] | r1 = *(r5);
0x0006934c adds r2, 2 | r2 += 2;
0x0006934e subs r1, r1, r2 | r1 -= r2;
0x00069350 str r1, [r5] | *(r5) = r1;
0x00069352 b 0x6923c | goto label_21;
| label_86:
0x00069354 ldr r3, [pc, 0xc0] |
0x00069356 movs r0, 0xb | r0 = 0xb;
0x00069358 ldr r2, [pc, 0xc0] |
0x0006935a ldr r1, [pc, 0xc4] |
0x0006935c add r3, pc | r3 = 0xd2778;
0x0006935e ldrd r4, fp, [sp, 0x7c] | __asm ("ldrd r4, fp, [arg_7ch]");
0x00069362 adds r3, 0x14 | r3 += 0x14;
0x00069364 add r2, pc | r2 = 0xd2784;
0x00069366 str r3, [sp] | *(sp) = r3;
0x00069368 movw r3, 0x25e4 |
0x0006936c movt r3, 1 | r3 = 0x125e4;
0x00069370 add r1, pc | r1 = 0xd2796;
0x00069372 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| do {
| label_28:
0x00069376 movs r6, 0xb | r6 = 0xb;
0x00069378 str r6, [sp, 0xa8] | var_a8h = r6;
| label_33:
0x0006937a ldr r0, [sp, 0x18] | r0 = var_18h;
0x0006937c bl 0x26dbc | fcn_00026dbc (r0);
0x00069380 b 0x68b86 | goto label_9;
| label_94:
0x00069382 ldr r3, [pc, 0xa0] |
0x00069384 movs r0, 0xb | r0 = 0xb;
0x00069386 ldr r2, [pc, 0xa0] |
0x00069388 ldr r1, [pc, 0xa0] |
0x0006938a add r3, pc | r3 = 0xd27b4;
0x0006938c ldrd r4, fp, [sp, 0x7c] | __asm ("ldrd r4, fp, [arg_7ch]");
0x00069390 adds r3, 0x14 | r3 += 0x14;
0x00069392 add r2, pc | r2 = 0xd27c0;
0x00069394 str r3, [sp] | *(sp) = r3;
0x00069396 movw r3, 0x2661 |
0x0006939a movt r3, 1 | r3 = 0x12661;
0x0006939e add r1, pc | r1 = 0xd27ce;
0x000693a0 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000693a4 b 0x69376 |
| } while (1);
| label_72:
0x000693a6 movs r6, 7 | r6 = 7;
0x000693a8 b 0x68bba | goto label_22;
| label_104:
0x000693aa cmp r3, r6 |
| if (r3 >= r6) {
0x000693ac bge.w 0x6927e | goto label_23;
| }
0x000693b0 ldr r2, [sp, 0x60] | r2 = var_60h;
0x000693b2 cmp r2, 0 |
| if (r2 == 0) {
0x000693b4 beq.w 0x694da | goto label_109;
| }
0x000693b8 ldr r2, [r7, -0x4] | r2 = *((r7 - 0x4));
| label_30:
0x000693bc cmp r2, r3 |
| if (r2 >= r3) {
0x000693be bge.w 0x69e06 | goto label_110;
| }
0x000693c2 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000693c4 add.w r2, fp, -1 | r2 = fp + -1;
0x000693c8 cmp r2, sb |
0x000693ca add.w r7, r7, 4 | r7 += 4;
0x000693ce add.w r3, r3, 1 | r3++;
0x000693d2 str r3, [sp, 0x50] | var_50h = r3;
0x000693d4 add.w r3, fp, 1 | r3 += arg_1h_2;
| if (r2 >= sb) {
0x000693d8 bge.w 0x69dec | goto label_111;
| }
0x000693dc mov fp, r3 |
0x000693de b 0x68f92 | goto label_24;
| label_75:
0x000693e0 ldr r0, [sp, 0x74] | r0 = *(arg_74h);
0x000693e2 subs r2, r5, 2 | r2 = r5 - 2;
0x000693e4 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000693e6 add r2, r0 | r2 += r0;
0x000693e8 str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x000693ea ldr r2, [sp, 0x20] | r2 = var_20h;
0x000693ec ldr r5, [r2, 0x38] | r5 = *((r2 + 0x38));
0x000693ee b 0x69100 | goto label_25;
| label_85:
0x000693f0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000693f2 movs r6, 7 | r6 = 7;
0x000693f4 str r6, [sp, 0xa8] | var_a8h = r6;
0x000693f6 adds r3, 1 | r3++;
0x000693f8 str r3, [sp, 0x28] | var_28h = r3;
0x000693fa b.w 0x68b86 | goto label_9;
| if (r4 != 0) {
| label_107:
0x00069430 cbnz r4, 0x6944e | goto label_112;
| }
0x00069432 ldrh.w r1, [r8] | r1 = *(r8);
0x00069436 ldrh r3, [r7] | r3 = *(r7);
0x00069438 add.w ip, r6, r1 |
0x0006943c add.w r0, r3, sl | r0 = r3 + sl;
0x00069440 add.w ip, ip, 1 |
0x00069444 sub.w r0, fp, r0 | r0 = fp - r0;
0x00069448 cmp ip, r0 |
| if (ip < r0) {
0x0006944a blt.w 0x6931c | goto label_26;
| }
| label_112:
0x0006944e mov r3, sb | r3 = sb;
0x00069450 mov sb, fp | sb = fp;
0x00069452 ldr r5, [r3] | r5 = *(r3);
0x00069454 mov fp, r3 |
| label_29:
0x00069456 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00069458 str r6, [r3] | *(r3) = r6;
0x0006945a str sb, [r3, -0x4]! | *((r3 -= 0x4)) = sb;
0x0006945e str r3, [sp, 0x60] | var_60h = r3;
0x00069460 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00069462 cmp r3, 1 |
| if (r3 == 1) {
0x00069464 beq 0x694de | goto label_113;
| }
0x00069466 ldr r3, [sp, 0x88] | r3 = var_88h;
0x00069468 sub.w fp, fp, 4 |
0x0006946c ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0006946e ldr r3, [r3, -0x4] | r3 = *((r3 - 0x4));
0x00069472 subs r2, 1 | r2--;
0x00069474 str r2, [sp, 0x5c] | var_5ch = r2;
0x00069476 cmp r3, r5 |
| if (r3 < r5) {
0x00069478 blt.w 0x692be | goto label_27;
| }
0x0006947c ldr r4, [sp, 0x70] | r4 = var_70h;
0x0006947e ldr.w fp, [sp, 0x80] | fp = var_80h;
0x00069480 sub sp, 0 |
| do {
0x00069482 ldr.w r3, [pc, 0xa04] |
0x00069486 movs r0, 0xb | r0 = 0xb;
0x00069488 ldr.w r2, [pc, 0xa00] |
0x0006948c ldr.w r1, [pc, 0xa00] |
0x00069490 add r3, pc | r3 = 0xd331e;
0x00069492 adds r3, 0x14 | r3 += 0x14;
0x00069494 add r2, pc | r2 = "sqlcipher_openssl_random: leaving SQLCIPHER_MUTEX_PROVIDER_RAND";
0x00069496 str r3, [sp] | *(sp) = r3;
0x00069498 movw r3, 0x26ac |
0x0006949c movt r3, 1 | r3 = 0x126ac;
0x0006949e lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x000694a0 add r1, pc | r1 = 0xd3334;
0x000694a2 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000694a6 b 0x69376 | goto label_28;
| label_108:
0x000694a8 mov r3, sb | r3 = sb;
0x000694aa mov sb, fp | sb = fp;
0x000694ac mov fp, r3 |
0x000694ae b 0x69456 | goto label_29;
| label_96:
0x000694b0 ldr.w r3, [pc, 0x9e0] |
0x000694b4 movs r0, 0xb | r0 = 0xb;
0x000694b6 ldr.w r2, [pc, 0x9e0] |
0x000694b8 cmp r1, 0xe0 |
0x000694ba ldr.w r1, [pc, 0x9e0] |
0x000694be add r3, pc | r3 = 0xd3356;
0x000694c0 ldrd r4, fp, [sp, 0x7c] | __asm ("ldrd r4, fp, [arg_7ch]");
0x000694c4 adds r3, 0x14 | r3 += 0x14;
0x000694c6 add r2, pc | r2 = "sqlcipher_openssl_random: left SQLCIPHER_MUTEX_PROVIDER_RAND";
0x000694c8 str r3, [sp] | *(sp) = r3;
0x000694ca movw r3, 0x25fc |
0x000694ce movt r3, 1 | r3 = 0x125fc;
0x000694d2 add r1, pc | r1 = 0xd3374;
0x000694d4 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000694d6 ldrsb.w lr, [lr, 0x74d] |
| label_109:
0x000694da ldr r2, [sp, 0x60] | r2 = var_60h;
0x000694dc b 0x693bc | goto label_30;
| label_113:
0x000694de cmp r5, 0 |
0x000694e0 ldr r4, [sp, 0x70] | r4 = var_70h;
0x000694e2 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x000694e4 ldr.w fp, [sp, 0x80] | fp = var_80h;
0x000694e8 ble 0x69482 |
| } while (r5 <= 0);
| label_106:
0x000694ea ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x000694ec add.w sb, sp, 0xe0 | sb += var_e0h;
0x000694f0 ldr.w sl, [sp, 0x98] | sl = var_98h;
0x000694f4 movs r5, 0 | r5 = 0;
0x000694f6 mov r8, sb | r8 = sb;
0x000694f8 mov r6, r3 | r6 = r3;
0x000694fa ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x000694fc str.w sb, [sp, 0x80] | __asm ("str.w sb, [var_80h]");
0x00069500 ldrb r2, [r2] | r2 = *(r2);
0x00069502 str r2, [sp, 0x60] | var_60h = r2;
0x00069504 add r2, sp, 0xac | r2 += var_ach;
0x00069506 str r2, [sp, 0x70] | var_70h = r2;
0x00069508 add r2, sp, 0xb0 | r2 += var_b0h;
0x0006950a str r2, [sp, 0x88] | var_88h = r2;
0x0006950c b 0x69558 |
| while (r3 == 0) {
0x0006950e ldr r3, [sp, 0xac] | r3 = var_ach;
| label_31:
0x00069510 movs r2, 0 | r2 = 0;
0x00069512 ldr r1, [sp, 0x88] | r1 = var_88h;
0x00069514 str r2, [sp] | *(sp) = r2;
0x00069516 ldr r0, [sp, 0x58] | r0 = var_58h;
0x00069518 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0006951a bl 0x66bc4 | fcn_00066bc4 (r0, r1, r2, r3, r4, r5, r6);
0x0006951e str r0, [sp, 0xa8] | var_a8h = r0;
0x00069520 cmp r0, 0 |
| if (r0 != 0) {
0x00069522 bne 0x695f8 | goto label_114;
| }
0x00069524 ldr r0, [sp, 0xb0] | r0 = var_b0h;
0x00069526 adds r7, r5, 1 | r7 = r5 + 1;
0x00069528 ldr r1, [sp, 0x60] | r1 = var_60h;
0x0006952a str r7, [sp, 0x5c] | var_5ch = r7;
0x0006952c str r0, [sp, 0x44] | *(arg_44h) = r0;
0x0006952e bl 0x50af0 | fcn_00050af0 (r0, r1);
0x00069532 ldrd r3, r2, [sp, 0x4c] | __asm ("ldrd r3, r2, [var_4ch]");
0x00069536 ldr r0, [sp, 0x44] | r0 = *(arg_44h);
0x00069538 str.w r2, [r3, r5, lsl 2] | __asm ("str.w r2, [r3, r5, lsl 2]");
0x0006953c ldr r3, [sp, 0x58] | r3 = var_58h;
0x0006953e str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00069542 ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x00069544 cmp r3, 0 |
| if (r3 != 0) {
0x00069546 bne 0x695e0 | goto label_115;
| }
| label_32:
0x00069548 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x0006954a add.w r8, r8, 4 | r8 += 4;
0x0006954e add.w sl, sl, 4 | sl += 4;
0x00069552 mov r5, r7 | r5 = r7;
0x00069554 cmp r7, r3 |
| if (r7 >= r3) {
0x00069556 bge 0x6960c | goto label_116;
| }
0x00069558 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0006955a cmp r3, r5 |
| if (r3 > r5) {
0x0006955c bgt 0x69568 | goto label_117;
| }
0x0006955e ldr r3, [sp, 0x74] | r3 = *(arg_74h);
0x00069560 cmp r3, 0 |
0x00069562 beq 0x6950e |
| }
0x00069564 movs r3, 1 | r3 = 1;
0x00069566 b 0x69510 | goto label_31;
| label_117:
0x00069568 ldr.w r7, [sl] | r7 = *(sl);
0x0006956c movs r3, 0 | r3 = 0;
0x0006956e str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x00069572 ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x00069574 str.w r7, [r8] | __asm ("str.w r7, [r8]");
0x00069578 str r7, [sp, 0xb0] | var_b0h = r7;
0x0006957a bl 0x650a4 | fcn_000650a4 (r0);
0x0006957e ldr r2, [r7, 0x48] | r2 = *((r7 + 0x48));
0x00069580 mov r3, r0 | r3 = r0;
0x00069582 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x00069584 str r0, [sp, 0xa8] | var_a8h = r0;
0x00069586 ldrsh.w r0, [r2, 0x1e] | r0 = *((r2 + 0x1e));
0x0006958a ldr r2, [sp, 0x40] | r2 = var_40h;
0x0006958c subs r2, r2, r1 | r2 -= r1;
0x0006958e clz r1, r3 | r1 &= r3;
0x00069592 cmp r2, r5 |
0x00069594 ite eq |
| if (r2 != r5) {
0x00069596 moveq r2, 2 | r2 = 2;
| }
| if (r2 == r5) {
0x00069598 movne r2, 1 | r2 = 1;
| }
0x0006959a lsrs r1, r1, 5 | r1 >>= 5;
0x0006959c cmp r0, r2 |
0x0006959e it eq |
| if (r0 != r2) {
0x000695a0 moveq r1, 0 | r1 = 0;
| }
0x000695a2 adds r2, r5, 1 | r2 = r5 + 1;
0x000695a4 mov r7, r2 | r7 = r2;
0x000695a6 str r2, [sp, 0x5c] | var_5ch = r2;
| if (r1 != 0) {
0x000695a8 cbnz r1, 0x695b6 | goto label_118;
| }
| label_34:
0x000695aa cmp r3, 0 |
| if (r3 == 0) {
0x000695ac beq 0x69548 | goto label_32;
| }
0x000695ae mov r6, r3 | r6 = r3;
| do {
| label_35:
0x000695b0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000695b2 str r3, [sp, 0x64] | var_64h = r3;
0x000695b4 b 0x6937a | goto label_33;
| label_118:
0x000695b6 ldr.w r3, [pc, 0x8e8] |
0x000695ba movs r0, 0xb | r0 = 0xb;
0x000695bc ldr.w r2, [pc, 0x8e4] |
0x000695c0 movs r6, 0xb | r6 = 0xb;
0x000695c2 ldr.w r1, [pc, 0x8e4] |
0x000695c6 add r3, pc | r3 = 0xd346c;
0x000695c8 adds r3, 0x14 | r3 += 0x14;
0x000695ca add r2, pc | r2 = 0xd3472;
0x000695cc str r3, [sp] | *(sp) = r3;
0x000695ce movw r3, 0x26cd |
0x000695d2 movt r3, 1 | r3 = 0x126cd;
0x000695d6 add r1, pc | r1 = 0xd3484;
0x000695d8 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000695dc str r6, [sp, 0xa8] | var_a8h = r6;
0x000695de b 0x695b0 |
| } while (1);
| label_115:
0x000695e0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000695e2 add r2, sp, 0xa8 | r2 += var_a8h;
0x000695e4 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x000695e6 ldr r0, [sp, 0x58] | r0 = var_58h;
0x000695e8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000695ea str r2, [sp] | *(sp) = r2;
0x000695ec movs r2, 5 | r2 = 5;
0x000695ee str r3, [sp, 0x44] | *(arg_44h) = r3;
0x000695f0 bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x000695f4 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x000695f6 b 0x695aa | goto label_34;
| label_114:
0x000695f8 mov r6, r0 | r6 = r0;
0x000695fa str r5, [sp, 0x5c] | var_5ch = r5;
0x000695fc b 0x695b0 | goto label_35;
| label_76:
0x000695fe ldr r1, [sp, 0x30] | r1 = var_30h;
0x00069600 b 0x69100 | goto label_25;
| label_77:
0x00069602 ldrd r4, fp, [sp, 0x28] | __asm ("ldrd r4, fp, [var_28h]");
0x00069606 mov r6, r0 | r6 = r0;
0x00069608 b.w 0x68b70 | goto label_36;
| label_116:
0x0006960c lsls r2, r7, 2 | r2 = r7 << 2;
0x0006960e mov r3, r6 | r3 = r6;
0x00069610 add r1, sp, 0x130 | r1 += var_130h;
0x00069612 str r7, [sp, 0x40] | var_40h = r7;
0x00069614 mov r0, r2 | r0 = r2;
0x00069616 str r2, [sp, 0x7c] | *(arg_7ch) = r2;
0x00069618 add r0, sb | r0 += sb;
0x0006961a mov r2, sb | r2 = sb;
| do {
0x0006961c ldr r5, [r2], 4 | r5 = *(r2);
| r2 += 4;
0x00069620 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x00069622 cmp r0, r2 |
0x00069624 str r5, [r1], 4 | *(r1) = r5;
| r1 += 4;
0x00069628 bne 0x6961c |
| } while (r0 != r2);
0x0006962a ldr r2, [sp, 0x40] | r2 = var_40h;
0x0006962c subs r2, 1 | r2--;
0x0006962e str r2, [sp, 0x4c] | var_4ch = r2;
| if (r2 == 1) {
0x00069630 beq 0x696f4 | goto label_119;
| }
0x00069632 ldr.w r2, [pc, 0x878] |
0x00069636 mov r1, fp | r1 = fp;
0x00069638 movs r7, 0 | r7 = 0;
0x0006963a mov fp, r3 |
0x0006963c mov r3, r1 | r3 = r1;
0x0006963e str.w sb, [sp, 0x44] | __asm ("str.w sb, [arg_44h]");
0x00069642 add r2, pc | r2 = 0xd34f4;
0x00069644 str r4, [sp, 0x74] | *(arg_74h) = r4;
0x00069646 str r2, [sp, 0x70] | var_70h = r2;
0x00069648 mov r2, sb | r2 = sb;
| label_37:
0x0006964a ldr r1, [sp, 0x40] | r1 = var_40h;
0x0006964c mov r4, r7 | r4 = r7;
0x0006964e adds r7, 1 | r7++;
0x00069650 cmp r7, r1 |
| if (r7 >= r1) {
0x00069652 bge 0x696de | goto label_120;
| }
0x00069654 ldr r5, [sp, 0x44] | r5 = *(arg_44h);
0x00069656 mov r1, r4 | r1 = r4;
0x00069658 mov r0, r7 | r0 = r7;
| do {
0x0006965a add r6, sp, 0x1a0 | r6 += var_1a0h;
0x0006965c add.w r6, r6, r1, lsl 2 | r6 += (r1 << 2);
0x00069660 ldr r6, [r6, -0xc0] | r6 = *((r6 - 0xc0));
0x00069664 ldr.w ip, [r6, 4] | ip = *((r6 + 4));
0x00069668 ldr r6, [r5, 4]! | r6 = *((r5 += 4));
0x0006966c ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0006966e cmp ip, r6 |
0x00069670 it hi |
| if (ip <= r6) {
0x00069672 movhi r1, r0 | r1 = r0;
| }
0x00069674 ldr r6, [sp, 0x40] | r6 = var_40h;
0x00069676 adds r0, 1 | r0++;
0x00069678 cmp r6, r0 |
0x0006967a bne 0x6965a |
| } while (r6 != r0);
0x0006967c cmp r4, r1 |
| if (r4 != r1) {
0x0006967e beq 0x696de |
0x00069680 strd r3, r2, [sp, 0x88] | __asm ("strd r3, r2, [sp, 0x88]");
0x00069684 add r3, sp, 0x1a0 | r3 += var_1a0h;
0x00069686 add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x0006968a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0006968c ldr r5, [r1, -0xc0] | r5 = *((r1 - 0xc0));
0x00069690 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00069692 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00069694 ldr.w r0, [r3, 0x118] | r0 = *((r3 + 0x118));
0x00069698 bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x0006969c ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x0006969e adds r1, r0, 1 | r1 = r0 + 1;
0x000696a0 ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
0x000696a2 ldr r4, [r5, 4] | r4 = *((r5 + 4));
0x000696a4 ldr r6, [r3] | r6 = *(r3);
0x000696a6 ldrh.w r8, [r0, 0x1c] | r8 = *((r0 + 0x1c));
0x000696aa ldr r0, [r6, 0x48] | r0 = *((r6 + 0x48));
0x000696ac ldr.w sb, [r6, 4] | sb = *((r6 + 4));
0x000696b0 ldrh.w sl, [r0, 0x1c] | sl = *((r0 + 0x1c));
0x000696b4 strh.w r8, [r0, 0x1c] | *((r0 + 0x1c)) = r8;
0x000696b8 bl 0x22588 | fcn_00022588 (r0, r1);
0x000696bc ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
0x000696be mov r1, sb | r1 = sb;
0x000696c0 strh.w sl, [r0, 0x1c] | *((r0 + 0x1c)) = sl;
0x000696c4 bl 0x22588 | fcn_00022588 (r0, r1);
0x000696c8 ldr r0, [r6, 0x48] | r0 = *((r6 + 0x48));
0x000696ca mov r1, r4 | r1 = r4;
0x000696cc strh.w r8, [r0, 0x1c] | *((r0 + 0x1c)) = r8;
0x000696d0 bl 0x22588 | fcn_00022588 (r0, r1);
0x000696d4 ldrd r3, r2, [sp, 0x88] | __asm ("ldrd r3, r2, [var_88h]");
0x000696d8 str r4, [r6, 4] | *((r6 + 4)) = r4;
0x000696da str.w sb, [r5, 4] | __asm ("str.w sb, [r5, 4]");
| }
| label_120:
0x000696de ldr r1, [sp, 0x44] | r1 = *(arg_44h);
0x000696e0 adds r1, 4 | r1 += 4;
0x000696e2 str r1, [sp, 0x44] | *(arg_44h) = r1;
0x000696e4 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000696e6 cmp r7, r1 |
| if (r7 < r1) {
0x000696e8 blt 0x6964a | goto label_37;
| }
0x000696ea ldr r4, [sp, 0x74] | r4 = *(arg_74h);
0x000696ec mov r1, r3 | r1 = r3;
0x000696ee mov sb, r2 | sb = r2;
0x000696f0 mov r3, fp | r3 = fp;
0x000696f2 mov fp, r1 |
| label_119:
0x000696f4 ldr r2, [sp, 0x60] | r2 = var_60h;
0x000696f6 add r1, sp, 0x1a0 | r1 += var_1a0h;
0x000696f8 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000696fa ldr r6, [sp, 0x68] | r6 = var_68h;
0x000696fc eor r5, r2, 8 | r5 = r2 ^ 8;
0x00069700 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00069702 add.w r2, r1, r2, lsl 2 | r2 = r1 + (r2 << 2);
0x00069706 ldr r1, [r2, -0xc0] | r1 = *((r2 - 0xc0));
0x0006970a ldr r2, [sp, 0x28] | r2 = var_28h;
0x0006970c subs r0, r2, r0 | r0 = r2 - r0;
0x0006970e ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00069710 it ne |
| if (r0 == r2) {
0x00069712 movne r0, 1 | r0 = 1;
| }
0x00069714 ands.w r0, r0, r5, lsr 3 | r0 &= (r5 >> 3);
0x00069718 rev r2, r2 | r2 = SWAP32 (r2);
0x0006971a str r2, [r6] | *(r6) = r2;
| if (r0 != r0) {
0x0006971c bne.w 0x69e2c | goto label_121;
| }
| label_59:
0x00069720 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00069722 ldrb r2, [r2, 0x11] | r2 = *((r2 + 0x11));
0x00069724 cmp r2, 0 |
| if (r2 == 0) {
0x00069726 beq 0x697fc | goto label_122;
| }
0x00069728 ldr r7, [sp, 0xe0] | r7 = var_e0h;
0x0006972a ldrh r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0006972c ldrb r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0006972e adds r2, r1, r2 | r2 = r1 + r2;
0x00069730 str r2, [sp, 0x60] | var_60h = r2;
0x00069732 ldr r2, [sp, 0x50] | r2 = var_50h;
0x00069734 cmp r2, 0 |
| if (r2 <= 0) {
0x00069736 ble 0x697fc | goto label_122;
| }
0x00069738 mov.w sl, 0 | sl = 0;
0x0006973c add r2, sp, 0xa8 | r2 += var_a8h;
0x0006973e strd r2, r4, [sp, 0x70] | __asm ("strd r2, r4, [sp, 0x70]");
0x00069742 mov r5, sl | r5 = sl;
0x00069744 mov r8, r3 | r8 = r3;
0x00069746 mov r4, r7 | r4 = r7;
0x00069748 str.w sl, [sp, 0x44] | __asm ("str.w sl, [arg_44h]");
0x0006974c str.w sl, [sp, 0x68] | __asm ("str.w sl, [var_68h]");
| label_38:
0x00069750 ldr r1, [sp, 0x60] | r1 = var_60h;
0x00069752 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00069754 cmp r5, r1 |
0x00069756 ldr.w r6, [r3, r5, lsl 2] | offset_15 = r5 << 2;
| r6 = *((r3 + offset_15));
| if (r5 != r1) {
0x0006975a bne 0x6979e | goto label_123;
| }
0x0006975c ldr r7, [sp, 0x34] | r7 = var_34h;
0x0006975e add.w r2, sl, 1 | r2 = sl + 1;
0x00069762 lsls r3, r2, 2 | r3 = r2 << 2;
0x00069764 mov ip, r1 |
0x00069766 str r4, [sp, 0x60] | var_60h = r4;
0x00069768 add.w r0, sb, r3 | r0 = sb + r3;
0x0006976c add r3, r7 | r3 += r7;
0x0006976e b 0x69772 |
| while (ip == r5) {
0x00069770 adds r2, 1 | r2++;
0x00069772 ldr r1, [sp, 0x40] | r1 = var_40h;
0x00069774 mov sl, r2 | sl = r2;
0x00069776 ldr r4, [sp, 0x90] | r4 = var_90h;
0x00069778 adds r0, 4 | r0 += 4;
0x0006977a adds r3, 4 | r3 += 4;
0x0006977c cmp r2, r1 |
0x0006977e ite lt |
| if (r2 >= r1) {
0x00069780 ldrlt r7, [r0, -0x4] | r7 = *((r0 - 0x4));
| }
| if (r2 >= r1) {
0x00069784 ldr r7, [r3, -0x4] | r7 = *((r3 - 0x4));
| }
0x00069788 ldrh r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0006978a ldrb.w lr, [r7, 0xc] |
0x0006978e add r1, lr | r1 += lr;
0x00069790 add r1, r4 | r1 += r4;
0x00069792 add ip, r1 |
0x00069794 cmp ip, r5 |
0x00069796 beq 0x69770 |
| }
0x00069798 ldr r4, [sp, 0x60] | r4 = var_60h;
0x0006979a str.w ip, [sp, 0x60] | __asm ("str.w ip, [var_60h]");
| label_123:
0x0006979e ldr r3, [sp, 0x68] | r3 = var_68h;
0x000697a0 add.w r3, r3, 0x1a0 | r3 += 0x1a0;
0x000697a4 add r3, sp, r3 | r3 = sp + r3;
0x000697a6 ldr r3, [r3, -0xac] | r3 = *((r3 - 0xac));
0x000697aa cmp r3, r5 |
| if (r3 == r5) {
0x000697ac beq.w 0x69c34 | goto label_124;
| }
| label_50:
0x000697b0 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000697b2 cmp r3, sl |
| if (r3 > sl) {
0x000697b4 ble 0x697c8 |
0x000697b6 add r3, sp, 0x1a0 | r3 += var_1a0h;
0x000697b8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000697ba add.w r3, r3, sl, lsl 2 | r3 += (sl << 2);
0x000697be ldr r3, [r3, -0x70] | r3 = *((r3 - 0x70));
0x000697c2 cmp r2, r3 |
| if (r2 == r3) {
0x000697c4 beq.w 0x69c0e | goto label_125;
| }
| }
| label_47:
0x000697c8 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000697ca cmp r3, 0 |
| if (r3 == 0) {
0x000697cc beq.w 0x69c20 | goto label_126;
| }
| label_49:
0x000697d0 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000697d2 ldrh.w r0, [r3, r5, lsl 1] | offset_16 = r5 << 1;
| r0 = *((r3 + offset_16));
| if (r0 == 0) {
0x000697d6 cbnz r0, 0x697e0 |
0x000697d8 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000697da mov r1, r5 | r1 = r5;
0x000697dc bl 0x22bac | fcn_00022bac (r0, r1, r2);
| }
0x000697e0 ldrh r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000697e2 cmp r2, r0 |
| if (r2 <= r0) {
0x000697e4 blo.w 0x69c00 | goto label_127;
| }
| label_46:
0x000697e8 ldr r6, [sp, 0xa8] | r6 = var_a8h;
0x000697ea cmp r6, 0 |
| if (r6 != 0) {
0x000697ec bne.w 0x69bea | goto label_128;
| }
| label_48:
0x000697f0 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000697f2 adds r5, 1 | r5++;
0x000697f4 cmp r5, r3 |
| if (r5 != r3) {
0x000697f6 bne 0x69750 | goto label_38;
| }
| label_122:
0x000697fc ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000697fe cmp r2, 0 |
| if (r2 == 0) {
0x00069800 beq 0x698ec | goto label_129;
| }
0x00069802 ldr r2, [sp, 0x16c] | r2 = var_16ch;
0x00069804 mov.w sl, 0 | sl = 0;
0x00069808 ldr r1, [sp, 0x7c] | r1 = *(arg_7ch);
0x0006980a mov r8, r3 | r8 = r3;
0x0006980c str r2, [sp, 0x4c] | var_4ch = r2;
0x0006980e sub.w r2, sb, 4 | r2 = sb - 4;
0x00069812 add r1, r2 | r1 += r2;
0x00069814 add r2, sp, 0xb0 | r2 += var_b0h;
0x00069816 str r1, [sp, 0x44] | *(arg_44h) = r1;
0x00069818 str r2, [sp, 0x60] | var_60h = r2;
| label_39:
0x0006981a ldr r3, [sp, 0x94] | r3 = var_94h;
0x0006981c ldr r7, [sb], 4 | r7 = *(sb);
| sb += 4;
0x00069820 ldr r6, [r3], 4 | r6 = *(r3);
| r3 += 4;
0x00069824 ldrb.w ip, [r7, 8] | ip = *((r7 + 8));
0x00069828 str r3, [sp, 0x94] | var_94h = r3;
0x0006982a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0006982c lsl.w lr, r6, 2 | lr = r6 << 2;
0x00069830 add.w r5, r3, sl | r5 = r3 + sl;
0x00069834 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00069836 ldrh.w r0, [r3, r6, lsl 1] | offset_17 = r6 << 1;
| r0 = *((r3 + offset_17));
0x0006983a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006983c ldr.w r2, [r3, r6, lsl 2] | offset_18 = r6 << 2;
| r2 = *((r3 + offset_18));
0x00069840 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00069842 adds r3, r0, r3 | r3 = r0 + r3;
0x00069844 cmp.w ip, 0 |
| if (ip == 0) {
0x00069848 beq.w 0x69b4a | goto label_130;
| }
0x0006984c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0006984e cmp r1, 0 |
| if (r1 == 0) {
0x00069850 beq.w 0x69b52 | goto label_131;
| }
0x00069854 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00069856 mov r0, r7 | r0 = r7;
0x00069858 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0006985a subs r6, 1 | r6--;
0x0006985c add.w r1, lr, r3 | r1 = lr + r3;
0x00069860 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x00069862 ldr r1, [r1, -0x4] | r1 = *((r1 - 0x4));
0x00069866 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00069868 ldrd r2, r3, [sp, 0xb0] | __asm ("ldrd r2, r3, [var_b0h]");
0x0006986c cmp r2, 0x80 |
0x0006986e sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x00069872 itt lo |
| if (r2 >= 0x80) {
0x00069874 movlo r3, 5 | r3 = 5;
| }
| if (r2 >= 0x80) {
0x00069876 strblo r2, [r5, 4] | *((r5 + 4)) = r2;
| }
| if (r2 > 0x80) {
0x00069878 blo 0x6988e |
0x0006987a cmp.w r2, 0x4000 |
0x0006987e sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x00069882 blo.w 0x69bee | goto label_132;
| }
0x00069886 adds r0, r5, 4 | r0 = r5 + 4;
0x00069888 bl 0x21e58 | r0 = fcn_00021e58 (r0, r1, r2);
0x0006988c adds r3, r0, 4 | r3 = r0 + 4;
| }
| label_45:
0x0006988e mov r2, r5 | r2 = r5;
0x00069890 movs r5, 0 | r5 = 0;
| label_43:
0x00069892 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x00069894 add sl, r3 | sl += r3;
0x00069896 cmp r6, r1 |
0x00069898 it lt |
| if (r6 >= r1) {
0x0006989a movlt r1, 0 | r1 = 0;
| }
| if (r6 < r1) {
0x0006989c blt 0x698ac | goto label_133;
| }
0x0006989e add r0, sp, 0x16c | r0 += var_16ch;
0x000698a0 movs r1, 0 | r1 = 0;
| do {
0x000698a2 ldr ip, [r0, 4]! | ip = *((r0 += 4));
0x000698a6 adds r1, 1 | r1++;
0x000698a8 cmp ip, r6 |
0x000698aa ble 0x698a2 |
| } while (ip <= r6);
| label_133:
0x000698ac add r0, sp, 0x1a0 | r0 += var_1a0h;
0x000698ae add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x000698b2 ldr r1, [r1, -0x4c] | r1 = *((r1 - 0x4c));
0x000698b6 cmp r2, r1 |
| if (r2 <= r1) {
0x000698b8 bhi 0x698c2 |
0x000698ba adds r0, r2, r3 | r0 = r2 + r3;
0x000698bc cmp r1, r0 |
| if (r1 <= r0) {
0x000698be blo.w 0x69b6c | goto label_134;
| }
| }
0x000698c2 add r1, sp, 0xa8 | r1 += var_a8h;
0x000698c4 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000698c6 str r1, [sp, 8] | var_8h = r1;
0x000698c8 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000698ca strd r5, r1, [sp] | __asm ("strd r5, r1, [sp]");
0x000698ce ldr r5, [sp, 0x1c] | r5 = var_1ch_2;
0x000698d0 mov r1, r5 | r1 = r5;
0x000698d2 bl 0x6866c | fcn_0006866c (r0, r1, r2, r3, r4, r5, r6);
0x000698d6 ldr r6, [sp, 0xa8] | r6 = var_a8h;
0x000698d8 cmp r6, 0 |
| if (r6 != 0) {
0x000698da bne.w 0x695b0 | goto label_35;
| }
0x000698de mov r3, r5 | r3 = r5;
0x000698e0 adds r3, 1 | r3++;
0x000698e2 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x000698e4 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x000698e6 cmp sb, r3 |
| if (sb != r3) {
0x000698e8 bne 0x6981a | goto label_39;
| }
0x000698ea mov r3, r8 | r3 = r8;
| label_129:
0x000698ec ldr r2, [sp, 0x40] | r2 = var_40h;
0x000698ee str r4, [sp, 0x60] | var_60h = r4;
0x000698f0 str r3, [sp, 0x94] | var_94h = r3;
0x000698f2 rsb.w r2, r2, 1 | r2 = 1 - r2;
0x000698f6 str.w fp, [sp, 0x68] | __asm ("str.w fp, [var_68h]");
0x000698fa str r2, [sp, 0x2c] | var_2ch = r2;
0x000698fc add r2, sp, 0xb0 | r2 += var_b0h;
0x000698fe str r2, [sp, 0x8c] | var_8ch = r2;
| label_41:
0x00069900 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00069902 eor.w sl, r1, r1, asr 31 | sl = r1 ^ (r1 >> 31);
0x00069906 sub.w sl, sl, r1, asr 31 | sl -= (r1 >> 31);
0x0006990a add.w r3, sl, 0x1a0 | r3 = sl + 0x1a0;
0x0006990e add r3, sp, r3 | r3 = sp + r3;
0x00069910 str r3, [sp, 0x88] | var_88h = r3;
0x00069912 ldrb r3, [r3, -0x1c] | r3 = *((r3 - 0x1c));
0x00069916 cmp r3, 0 |
| if (r3 != 0) {
0x00069918 bne.w 0x69adc | goto label_135;
| }
0x0006991c cmp r1, 0 |
| if (r1 < 0) {
0x0006991e blt.w 0x69b92 | goto label_136;
| }
| if (r1 != 0) {
0x00069922 bne.w 0x69c52 | goto label_137;
| }
0x00069926 ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x00069928 ldr r7, [sp, 0xf4] | r7 = var_f4h;
0x0006992a ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x0006992e ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00069930 ldrh r5, [r4, 0x18] | r5 = *((r4 + 0x18));
0x00069932 mov r8, r7 | r8 = r7;
0x00069934 ldr.w fp, [r4, 0x38] | fp = *((r4 + 0x38));
0x00069938 mov r6, sb | r6 = sb;
0x0006993a add.w r3, r3, r7, lsl 1 | r3 += (r7 << 1);
0x0006993e str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00069940 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00069942 add r3, r5 | r3 += r5;
0x00069944 str r3, [sp, 0x44] | *(arg_44h) = r3;
0x00069946 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00069948 str r3, [sp, 0x4c] | var_4ch = r3;
| label_51:
0x0006994a ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x0006994c cmp r3, r8 |
| if (r3 > r8) {
0x0006994e bgt.w 0x69dda | goto label_138;
| }
| label_57:
0x00069952 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00069954 adds r3, r2, 5 | r3 = r2 + 5;
0x00069956 adds r2, 6 | r2 += 6;
0x00069958 ldrb.w r1, [fp, r3] | r1 = *((fp + r3));
0x0006995c add r3, fp | r3 += fp;
0x0006995e str r3, [sp, 0x78] | var_78h = r3;
0x00069960 ldrb.w r3, [fp, r2] | r3 = *((fp + r2));
0x00069964 add r2, fp | r2 += fp;
0x00069966 str r2, [sp, 0x7c] | *(arg_7ch) = r2;
0x00069968 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x0006996a orr.w r3, r3, r1, lsl 8 | r3 |= (r1 << 8);
0x0006996e subs r3, 1 | r3--;
0x00069970 uxth r3, r3 | r3 = (int16_t) r3;
0x00069972 adds r3, 1 | r3++;
0x00069974 add r3, fp | r3 += fp;
0x00069976 cmp r3, r2 |
0x00069978 str r3, [sp, 0xb0] | var_b0h = r3;
| if (r3 <= r2) {
0x0006997a blo.w 0x69cde | goto label_54;
| }
0x0006997e ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x00069980 cmp r3, r2 |
| if (r3 > r2) {
0x00069982 bhi.w 0x69cde | goto label_54;
| }
0x00069986 cmp r6, sb |
0x00069988 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
| if (r6 < sb) {
0x0006998a blt.w 0x69d68 | goto label_139;
| }
0x0006998e ldr r2, [sp, 0x8c] | r2 = var_8ch;
| label_55:
0x00069990 ldrb r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00069992 cmp r0, 0 |
| if (r0 == 0) {
0x00069994 beq 0x69a80 | goto label_140;
| }
0x00069996 add.w r1, r4, 0x1a | r1 = r4 + 0x1a;
0x0006999a mov.w r8, 0 | r8 = 0;
0x0006999e str r1, [sp, 0x44] | *(arg_44h) = r1;
0x000699a0 str.w fp, [sp, 0x98] | __asm ("str.w fp, [var_98h]");
0x000699a4 strd sl, r2, [sp, 0x70] | __asm ("strd sl, r2, [sp, 0x70]");
0x000699a8 b 0x699e6 | void (*0x699e6)() ();
| label_64:
0x00069a14 blx 0x6430 | fcn_00006430 ();
| label_100:
0x00069a18 cmp r7, 0 |
| if (r7 == 0) {
0x00069a1a beq.w 0x68bc8 | goto label_19;
| }
| label_103:
0x00069a1e ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x00069a20 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00069a24 b.w 0x68bc8 | goto label_19;
| label_99:
0x00069a28 ldr.w r3, [pc, 0x484] |
0x00069a2c movs r0, 0xb | r0 = 0xb;
0x00069a2e ldr.w r2, [pc, 0x484] |
0x00069a32 movs r6, 0xb | r6 = 0xb;
0x00069a34 ldr.w r1, [pc, 0x480] |
0x00069a38 add r3, pc | r3 = 0xd38ec;
0x00069a3a adds r3, 0x14 | r3 += 0x14;
0x00069a3c add r2, pc | r2 = 0xd38f6;
0x00069a3e str r3, [sp] | *(sp) = r3;
0x00069a40 movw r3, 0x243f |
0x00069a44 movt r3, 1 | r3 = 0x1243f;
0x00069a48 add r1, pc | r1 = 0xd3904;
0x00069a4a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00069a4e b.w 0x68bc8 | goto label_19;
| label_101:
0x00069a52 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00069a54 add r5, sp, 0xa8 | r5 += var_a8h;
0x00069a56 movs r2, 5 | r2 = 5;
0x00069a58 mov r0, sb | r0 = sb;
0x00069a5a mov r1, r8 | r1 = r8;
0x00069a5c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00069a5e str r5, [sp] | *(sp) = r5;
0x00069a60 str r3, [sp, 0x10] | var_10h = r3;
0x00069a62 bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x00069a66 ldrh r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00069a68 ldrh.w r3, [sp, 0xa2] | r3 = x;
0x00069a6c cmp r2, r3 |
| if (r2 <= r3) {
0x00069a6e blo.w 0x69e48 | goto label_141;
| }
| label_60:
0x00069a72 ldr r6, [sp, 0xa8] | r6 = var_a8h;
0x00069a74 b.w 0x691ba | goto label_40;
| label_140:
0x00069a80 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00069a82 add.w r3, r3, r5, lsl 1 | r3 += (r5 << 1);
0x00069a86 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x00069a88 str r0, [sp, 8] | var_8h = r0;
0x00069a8a subs r0, r7, r5 | r0 = r7 - r5;
0x00069a8c add r5, r6 | r5 += r6;
0x00069a8e str r0, [sp, 4] | var_4h = r0;
0x00069a90 str r5, [sp] | *(sp) = r5;
0x00069a92 mov r0, r4 | r0 = r4;
0x00069a94 bl 0x53948 | r0 = fcn_00053948 (r0, r1, r2, r3, r4, r5, r6);
0x00069a98 cmp r0, 0 |
| if (r0 != 0) {
0x00069a9a bne.w 0x69cde | goto label_54;
| }
| label_52:
0x00069ac2 ldr r3, [sp, 0x88] | r3 = var_88h;
0x00069ac4 mov.w r2, 1 | r2 = 1;
0x00069ac8 strb r2, [r3, -0x1c] | *((r3 - 0x1c)) = r2;
0x00069acc add r3, sp, 0x1a0 | r3 += var_1a0h;
0x00069ace add.w sl, r3, sl, lsl 2 | sl = r3 + (sl << 2);
0x00069ad2 ldr r2, [sp, 0x84] | r2 = var_84h;
0x00069ad4 ldr r3, [sl, -0x84] | r3 = *((sl - 0x84));
0x00069ad8 subs r3, r2, r3 | r3 = r2 - r3;
0x00069ada str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| label_135:
0x00069adc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00069ade ldr r2, [sp, 0x40] | r2 = var_40h;
0x00069ae0 adds r3, 1 | r3++;
0x00069ae2 cmp r3, r2 |
0x00069ae4 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r3 != r2) {
0x00069ae6 bne.w 0x69900 | goto label_41;
| }
0x00069aea ldr r3, [sp, 0x94] | r3 = var_94h;
0x00069aec ldr r4, [sp, 0x60] | r4 = var_60h;
0x00069aee ldr.w fp, [sp, 0x68] | fp = var_68h;
0x00069af2 cmp r3, 1 |
| if (r3 == 1) {
0x00069af4 bne 0x69b08 |
0x00069af6 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00069af8 ldrh r3, [r2, 0x18] | r3 = *((r2 + 0x18));
| if (r3 != 0) {
0x00069afa cbnz r3, 0x69b08 | goto label_142;
| }
0x00069afc ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x00069afe ldrb r2, [r2, 9] | r2 = *((r2 + 9));
0x00069b00 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00069b02 cmp r2, r3 |
| if (r2 <= r3) {
0x00069b04 ble.w 0x69da4 | goto label_143;
| }
| }
| label_142:
0x00069b08 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00069b0a ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
| if (r3 != 0) {
0x00069b0c cbz r3, 0x69b14 |
0x00069b0e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00069b10 cmp r3, 0 |
| if (r3 == 0) {
0x00069b12 beq 0x69bb8 | goto label_144;
| }
| }
0x00069b14 ldr r3, [sp, 0xa8] | r3 = var_a8h;
| label_56:
0x00069b16 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00069b18 mov r6, r3 | r6 = r3;
0x00069b1a ldr r1, [sp, 0x40] | r1 = var_40h;
0x00069b1c cmp r2, r1 |
| if (r2 <= r1) {
0x00069b1e ble 0x69bb2 | goto label_145;
| }
| label_44:
0x00069b20 ldr r5, [sp, 0x40] | r5 = var_40h;
0x00069b22 mov r6, r3 | r6 = r3;
| if (r3 == 0) {
0x00069b24 cbz r3, 0x69b36 | goto label_146;
| }
| label_42:
0x00069b26 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00069b28 cmp r5, r3 |
| if (r5 >= r3) {
0x00069b2a bge.w 0x695b0 | goto label_35;
| }
0x00069b2e movs r5, 2 | r5 = 2;
0x00069b30 cmp r6, 0 |
| if (r6 != 0) {
0x00069b32 bne.w 0x695b0 | goto label_35;
| }
| label_146:
0x00069b36 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00069b38 ldr.w r1, [r3, r5, lsl 2] | offset_19 = r5 << 2;
| r1 = *((r3 + offset_19));
0x00069b3c ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00069b3e ldr r0, [r1, 0x34] | r0 = *((r1 + 0x34));
0x00069b40 bl 0x68198 | r0 = fcn_00068198 (r0, r1, r2, r3);
0x00069b44 mov r6, r0 | r6 = r0;
0x00069b46 str r0, [sp, 0xa8] | var_a8h = r0;
0x00069b48 b 0x69b26 | goto label_42;
| label_130:
0x00069b4a ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x00069b4c ldr r0, [r2] | r0 = *(r2);
0x00069b4e str r0, [r1, 8] | *((r1 + 8)) = r0;
0x00069b50 b 0x69892 | goto label_43;
| label_131:
0x00069b52 cmp r0, 4 |
0x00069b54 sub.w r2, r2, 4 | r2 -= 4;
| if (r0 != 4) {
0x00069b58 bne.w 0x69892 | goto label_43;
| }
0x00069b5c ldr r0, [sp, 0x20] | r0 = var_20h;
0x00069b5e mov r1, r2 | r1 = r2;
0x00069b60 str r2, [sp, 0x68] | var_68h = r2;
0x00069b62 ldr r3, [r0, 0x4c] | r3 = *((r0 + 0x4c));
0x00069b64 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00069b66 ldr r2, [sp, 0x68] | r2 = var_68h;
0x00069b68 mov r3, r0 | r3 = r0;
0x00069b6a b 0x69892 | goto label_43;
| label_134:
0x00069b6c ldr r3, [pc, 0x34c] |
0x00069b6e movs r0, 0xb | r0 = 0xb;
0x00069b70 ldr r2, [pc, 0x34c] |
0x00069b72 ldr r1, [pc, 0x350] |
0x00069b74 add r3, pc | r3 = 0xd3a34;
0x00069b76 adds r3, 0x14 | r3 += 0x14;
0x00069b78 add r2, pc | r2 = 0xd3a3c;
0x00069b7a str r3, [sp] | *(sp) = r3;
0x00069b7c movw r3, 0x2795 |
0x00069b80 movt r3, 1 | r3 = 0x12795;
0x00069b84 add r1, pc | r1 = 0xd3a4e;
0x00069b86 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| label_53:
0x00069b8a ldr r3, [sp, 0x40] | r3 = var_40h;
0x00069b8c str r3, [sp, 0x64] | var_64h = r3;
0x00069b8e b.w 0x69376 | goto label_28;
| label_136:
0x00069b92 add.w r3, sl, -1 | r3 = sl + -1;
0x00069b96 lsls r3, r3, 2 | r3 <<= 2;
0x00069b98 add.w r2, r3, 0x1a0 | r2 = r3 + 0x1a0;
0x00069b9c add r2, sp, r2 | r2 = sp + r2;
0x00069b9e ldr r6, [r2, -0xac] | r6 = *((r2 - 0xac));
0x00069ba2 ldr r2, [r2, -0x98] | r2 = *((r2 - 0x98));
0x00069ba6 cmp r6, r2 |
| if (r6 <= r2) {
0x00069ba8 ble 0x69c62 | goto label_147;
| }
0x00069baa mov r2, r1 | r2 = r1;
0x00069bac adds r2, 1 | r2++;
0x00069bae str r2, [sp, 0x2c] | var_2ch = r2;
0x00069bb0 b 0x69900 | goto label_41;
| label_145:
0x00069bb2 str r1, [sp, 0x64] | var_64h = r1;
0x00069bb4 b.w 0x6937a | goto label_33;
| label_144:
0x00069bb8 ldr r6, [sp, 0x64] | r6 = var_64h;
0x00069bba add r5, sp, 0xa8 | r5 += var_a8h;
0x00069bbc ldr r7, [sp, 0x80] | r7 = var_80h;
| do {
0x00069bbe ldr r3, [r7], 4 | r3 = *(r7);
| r7 += 4;
0x00069bc2 movs r2, 5 | r2 = 5;
0x00069bc4 ldr r0, [sp, 0x58] | r0 = var_58h;
0x00069bc6 adds r6, 1 | r6++;
0x00069bc8 ldr r1, [r3, 0x38] | r1 = *((r3 + 0x38));
0x00069bca ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x00069bcc str r5, [sp] | *(sp) = r5;
0x00069bce ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00069bd0 rev r1, r1 | r1 = SWAP32 (r1);
0x00069bd2 bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x00069bd6 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00069bd8 cmp r6, r3 |
0x00069bda bne 0x69bbe |
| } while (r6 != r3);
0x00069bdc ldr r2, [sp, 0x28] | r2 = var_28h;
0x00069bde ldr r1, [sp, 0x40] | r1 = var_40h;
0x00069be0 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x00069be2 cmp r2, r1 |
0x00069be4 mov r6, r3 | r6 = r3;
| if (r2 > r1) {
0x00069be6 bgt 0x69b20 | goto label_44;
| }
0x00069be8 b 0x695b0 | goto label_35;
| label_128:
0x00069bea ldr r4, [sp, 0x74] | r4 = *(arg_74h);
0x00069bec b 0x695b0 | goto label_35;
| label_132:
0x00069bee lsrs r3, r2, 7 | r3 = r2 >> 7;
0x00069bf0 and r2, r2, 0x7f | r2 &= 0x7f;
0x00069bf4 strb r2, [r5, 5] | *((r5 + 5)) = r2;
0x00069bf6 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00069bfa strb r3, [r5, 4] | *((r5 + 4)) = r3;
0x00069bfc movs r3, 6 | r3 = 6;
0x00069bfe b 0x6988e | goto label_45;
| label_127:
0x00069c00 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00069c02 mov r2, r6 | r2 = r6;
0x00069c04 mov r1, r7 | r1 = r7;
0x00069c06 mov r0, r4 | r0 = r4;
0x00069c08 bl 0x673c4 | fcn_000673c4 (r0, r1, r2, r3, r4);
0x00069c0c b 0x697e8 | goto label_46;
| label_125:
0x00069c0e ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00069c10 cmp r3, r6 |
| if (r3 > r6) {
0x00069c12 bhi.w 0x697c8 | goto label_47;
| }
0x00069c16 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00069c18 cmp r3, r6 |
| if (r3 > r6) {
0x00069c1a bhi.w 0x697f0 | goto label_48;
| }
0x00069c1e b 0x697c8 | goto label_47;
| label_126:
0x00069c20 ldr r1, [r6] | r1 = *(r6);
0x00069c22 ldr r2, [sp, 0x70] | r2 = var_70h;
0x00069c24 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00069c26 ldr r0, [sp, 0x58] | r0 = var_58h;
0x00069c28 rev r1, r1 | r1 = SWAP32 (r1);
0x00069c2a str r2, [sp] | *(sp) = r2;
0x00069c2c movs r2, 5 | r2 = 5;
0x00069c2e bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x00069c32 b 0x697d0 | goto label_49;
| label_124:
0x00069c34 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00069c36 adds r3, 1 | r3++;
0x00069c38 str r3, [sp, 0x44] | *(arg_44h) = r3;
0x00069c3a lsls r3, r3, 2 | r3 <<= 2;
0x00069c3c str r3, [sp, 0x68] | var_68h = r3;
0x00069c3e add.w r3, r3, 0x1a0 | r3 += 0x1a0;
0x00069c42 add r3, sp, r3 | r3 = sp + r3;
0x00069c44 ldr r4, [r3, -0xc0] | r4 = *((r3 - 0xc0));
0x00069c48 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00069c4a cmp r3, 0 |
| if (r3 != 0) {
0x00069c4c bne.w 0x697b0 | goto label_50;
| }
0x00069c50 b 0x697f0 | goto label_48;
| label_137:
0x00069c52 add.w r3, sl, -1 | r3 = sl + -1;
0x00069c56 lsls r3, r3, 2 | r3 <<= 2;
0x00069c58 add.w r2, r3, 0x1a0 | r2 = r3 + 0x1a0;
0x00069c5c add r2, sp, r2 | r2 = sp + r2;
0x00069c5e ldr r6, [r2, -0xac] | r6 = *((r2 - 0xac));
| label_147:
0x00069c62 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00069c64 cmp r2, sl |
0x00069c66 ittte gt |
| if (r2 <= sl) {
0x00069c68 addgt r3, r3, 0x1a0 | r3 += 0x1a0;
| }
| if (r2 <= sl) {
0x00069c6c ldrgt r2, [sp, 0x90] | r2 = var_90h;
| }
| if (r2 > sl) {
0x00069c6e addle r3, sp, r3 | r3 = sp + r3;
| }
| if (r2 <= sl) {
0x00069c70 ldr.w sb, [sp, 0x50] | sb = var_50h;
| }
0x00069c74 itt gt |
| if (r2 <= sl) {
0x00069c76 ldrgt r3, [r3, -0x98] | r3 = *((r3 - 0x98));
| }
| if (r2 > sl) {
0x00069c7a add.w sb, r2, r3 | sb = r2 + r3;
| }
0x00069c7e ldr r3, [sp, 0x90] | r3 = var_90h;
0x00069c80 add r6, r3 | r6 += r3;
0x00069c82 add r3, sp, 0x1a0 | r3 += var_1a0h;
0x00069c84 add.w r3, r3, sl, lsl 2 | r3 += (sl << 2);
0x00069c88 cmp r6, sb |
0x00069c8a ldr r4, [r3, -0xc0] | r4 = *((r3 - 0xc0));
0x00069c8e ldr r8, [r3, -0xac] | r8 = *((r3 - 0xac));
0x00069c92 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x00069c94 ldrh r5, [r4, 0x18] | r5 = *((r4 + 0x18));
0x00069c96 sub.w r7, r8, r6 | r7 = r8 - r6;
0x00069c9a ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00069c9c ldr.w fp, [r4, 0x38] | fp = *((r4 + 0x38));
0x00069ca0 add.w r2, r2, r7, lsl 1 | r2 += (r7 << 1);
0x00069ca4 str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x00069ca6 add.w r2, sb, r5 | r2 = sb + r5;
0x00069caa add r3, r2 | r3 += r2;
0x00069cac str r3, [sp, 0x44] | *(arg_44h) = r3;
0x00069cae ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00069cb0 str r3, [sp, 0x4c] | var_4ch = r3;
| if (r6 <= sb) {
0x00069cb2 ble.w 0x6994a | goto label_51;
| }
0x00069cb6 mov r1, sb | r1 = sb;
0x00069cb8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00069cba sub.w r2, r6, sb | r2 = r6 - sb;
0x00069cbe mov r0, r4 | r0 = r4;
0x00069cc0 bl 0x51100 | r0 = fcn_00051100 (r0, r1, r2, r3);
0x00069cc4 cmp r5, r0 |
0x00069cc6 mov r1, r0 | r1 = r0;
| if (r5 < r0) {
0x00069cc8 blt 0x69d3a | goto label_148;
| }
0x00069cca ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x00069ccc lsls r2, r5, 1 | r2 = r5 << 1;
0x00069cce subs r5, r5, r1 | r5 -= r1;
0x00069cd0 add.w r1, r0, r1, lsl 1 | r1 = r0 + (r1 << 1);
0x00069cd4 blx 0x6354 | realloc (r0, r1);
0x00069cd8 b 0x6994a | goto label_51;
| label_54:
0x00069cde cmp r7, 0 |
| if (r7 <= 0) {
0x00069ce0 ble 0x69d10 | goto label_149;
| }
0x00069ce2 ldr r5, [sp, 0x150] | r5 = var_150h;
0x00069ce4 adds r3, r7, r6 | r3 = r7 + r6;
0x00069ce6 lsl.w r8, r6, 2 | r8 = r6 << 2;
0x00069cea add.w sb, r5, r3, lsl 1 | sb = r5 + (r3 << 1);
0x00069cee add.w r5, r5, r6, lsl 1 | r5 += (r6 << 1);
| do {
0x00069cf2 ldrh r3, [r5], 2 | r3 = *(r5);
| r5 += 2;
| if (r3 == 0) {
0x00069cf6 cbnz r3, 0x69d08 |
0x00069cf8 ldrd r0, r3, [sp, 0x148] | __asm ("ldrd r0, r3, [var_148h]");
0x00069cfc ldr.w r1, [r3, r8] | r1 = *((r3 + r8));
0x00069d00 ldr r3, [r0, 0x4c] | r3 = *((r0 + 0x4c));
0x00069d02 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00069d04 strh r0, [r5, -0x2] | *((r5 - 0x2)) = r0;
| }
0x00069d08 cmp r5, sb |
0x00069d0a add.w r8, r8, 4 | r8 += 4;
0x00069d0e bne 0x69cf2 |
| } while (r5 != sb);
| label_149:
0x00069d10 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00069d12 mov r2, r7 | r2 = r7;
0x00069d14 mov r1, r6 | r1 = r6;
0x00069d16 mov r3, r4 | r3 = r4;
0x00069d18 bl 0x51704 | fcn_00051704 (r0, r1, r2, r3, r4);
0x00069d1c str r0, [sp, 0xa8] | var_a8h = r0;
0x00069d1e cmp r0, 0 |
| if (r0 == 0) {
0x00069d20 beq.w 0x69ac2 | goto label_52;
| }
0x00069d24 ldr r3, [sp, 0x14c] | r3 = var_14ch;
0x00069d26 mov r6, r0 | r6 = r0;
0x00069d28 ldr r4, [sp, 0x60] | r4 = var_60h;
0x00069d2a ldr.w fp, [sp, 0x68] | fp = var_68h;
0x00069d2e str r3, [sp, 0x18] | var_18h = r3;
| if (r3 == 0) {
0x00069d30 cbnz r3, 0x69d60 |
0x00069d32 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00069d34 str r3, [sp, 0x64] | var_64h = r3;
0x00069d36 b.w 0x68b86 | goto label_9;
| label_148:
0x00069d3a ldr r3, [pc, 0x18c] |
0x00069d3c movs r0, 0xb | r0 = 0xb;
0x00069d3e ldr r2, [pc, 0x18c] |
0x00069d40 ldr r1, [pc, 0x18c] |
0x00069d42 add r3, pc | r3 = 0xd3c10;
0x00069d44 ldr r4, [sp, 0x60] | r4 = var_60h;
0x00069d46 adds r3, 0x14 | r3 += 0x14;
0x00069d48 add r2, pc | r2 = 0xd3c1a;
0x00069d4a str r3, [sp] | *(sp) = r3;
0x00069d4c movw r3, 0x23ce |
0x00069d50 movt r3, 1 | r3 = 0x123ce;
0x00069d54 add r1, pc | r1 = 0xd3c28;
0x00069d56 ldr.w fp, [sp, 0x68] | fp = var_68h;
0x00069d5a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00069d5e b 0x69b8a | goto label_53;
| }
0x00069d60 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00069d62 str r3, [sp, 0x64] | var_64h = r3;
0x00069d64 b.w 0x6937a | goto label_33;
| label_139:
0x00069d68 sub.w r8, sb, r6 | r8 = sb - r6;
0x00069d6c mov r1, r3 | r1 = r3;
0x00069d6e cmp r8, r7 |
0x00069d70 lsl.w r2, r5, 1 | r2 = r5 << 1;
0x00069d74 it ge |
| if (r8 < r7) {
0x00069d76 movge r8, r7 | r8 = r7;
| }
0x00069d78 str r3, [sp, 0x44] | *(arg_44h) = r3;
0x00069d7a add.w r0, r3, r8, lsl 1 | r0 = r3 + (r8 << 1);
0x00069d7e blx 0x6354 | realloc (r0, r1);
0x00069d82 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00069d84 mov r0, r4 | r0 = r4;
0x00069d86 ldr r3, [sp, 0x44] | r3 = *(arg_44h);
0x00069d88 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x00069d8a strd r8, r2, [sp, 4] | __asm ("strd r8, r2, [sp, 4]");
0x00069d8e add r2, sp, 0xb0 | r2 += var_b0h;
0x00069d90 str r6, [sp] | *(sp) = r6;
0x00069d92 str r2, [sp, 0x44] | *(arg_44h) = r2;
0x00069d94 bl 0x53948 | r0 = fcn_00053948 (r0, r1, r2, r3, r4, r5, r6);
0x00069d98 cmp r0, 0 |
| if (r0 != 0) {
0x00069d9a bne 0x69cde | goto label_54;
| }
0x00069d9c ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00069d9e add r5, r8 | r5 += r8;
0x00069da0 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x00069da2 b 0x69990 | goto label_55;
| label_143:
0x00069da4 mov.w r1, -1 | r1 = -1;
0x00069da8 mov r0, r5 | r0 = r5;
0x00069daa bl 0x513a8 | r0 = fcn_000513a8 (r0, r1);
0x00069dae mov r3, r0 | r3 = r0;
0x00069db0 str r0, [sp, 0xa8] | var_a8h = r0;
0x00069db2 cmp r0, 0 |
| if (r0 != 0) {
0x00069db4 bne.w 0x69b16 | goto label_56;
| }
0x00069db8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00069dba add r2, sp, 0xa8 | r2 += var_a8h;
0x00069dbc mov r0, r5 | r0 = r5;
0x00069dbe bl 0x67540 | fcn_00067540 (r0, r1, r2);
0x00069dc2 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x00069dc4 cmp r3, 0 |
| if (r3 != 0) {
0x00069dc6 bne.w 0x69b16 | goto label_56;
| }
0x00069dca ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00069dcc mov r1, r5 | r1 = r5;
0x00069dce ldr r0, [r5, 0x34] | r0 = *((r5 + 0x34));
0x00069dd0 bl 0x68198 | r0 = fcn_00068198 (r0, r1, r2, r3);
0x00069dd4 mov r3, r0 | r3 = r0;
0x00069dd6 str r0, [sp, 0xa8] | var_a8h = r0;
0x00069dd8 b 0x69b16 | goto label_56;
| label_138:
0x00069dda sub.w r2, r3, r8 | r2 = r3 - r8;
0x00069dde mov r1, r8 | r1 = r8;
0x00069de0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00069de2 mov r0, r4 | r0 = r4;
0x00069de4 bl 0x51100 | r0 = fcn_00051100 (r0, r1, r2, r3);
0x00069de8 subs r5, r5, r0 | r5 -= r0;
0x00069dea b 0x69952 | goto label_57;
| label_111:
0x00069dec ldr r4, [sp, 0x7c] | r4 = *(arg_7ch);
0x00069dee add.w r0, sb, -1 | r0 = sb + -1;
0x00069df2 ldr r3, [sp, 0x88] | r3 = var_88h;
0x00069df4 ldr.w fp, [sp, 0x80] | fp = var_80h;
0x00069df8 ldr.w sl, [sp, 0x8c] | sl = var_8ch;
0x00069dfc str.w sb, [sp, 0x7c] | __asm ("str.w sb, [arg_7ch]");
0x00069e00 str r6, [sp, 0x50] | var_50h = r6;
0x00069e02 b.w 0x6929a | goto label_58;
0x00069e04 rev16 r2, r1 | __asm ("rev16 r2, r1");
| label_110:
0x00069e06 ldr r3, [pc, 0xcc] |
0x00069e08 movs r0, 0xb | r0 = 0xb;
0x00069e0a ldr r2, [pc, 0xcc] |
0x00069e0c ldr r1, [pc, 0xcc] |
0x00069e0e add r3, pc | r3 = 0xd3ce8;
0x00069e10 ldrd r4, fp, [sp, 0x7c] | __asm ("ldrd r4, fp, [arg_7ch]");
0x00069e14 adds r3, 0x14 | r3 += 0x14;
0x00069e16 add r2, pc | r2 = 0xd3cf4;
0x00069e18 str r3, [sp] | *(sp) = r3;
0x00069e1a movw r3, 0x2682 |
0x00069e1e movt r3, 1 | r3 = 0x12682;
0x00069e22 add r1, pc | r1 = 0xd3d02;
0x00069e24 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00069e28 b.w 0x69376 | goto label_28;
| label_121:
0x00069e2c ldr r2, [sp, 0x28] | r2 = var_28h;
0x00069e2e ldr r0, [sp, 0x40] | r0 = var_40h;
0x00069e30 ldr r1, [r1, 0x38] | r1 = *((r1 + 0x38));
0x00069e32 cmp r2, r0 |
0x00069e34 ldr r0, [sp, 0x78] | r0 = var_78h;
0x00069e36 ite ge |
| if (r2 < r0) {
0x00069e38 addge r2, sp, 0xd0 | r2 += var_d0h;
| }
| if (r2 >= r0) {
0x00069e3a addlt r2, sp, 0xdc | r2 += var_dch;
| }
0x00069e3c add r2, r0 | r2 += r0;
0x00069e3e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00069e40 ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x00069e42 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00069e44 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x00069e46 b 0x69720 | goto label_59;
| label_141:
0x00069e48 ldr r2, [sp, 0xb0] | r2 = var_b0h;
0x00069e4a mov r3, r5 | r3 = r5;
0x00069e4c mov r1, r7 | r1 = r7;
0x00069e4e mov r0, r7 | r0 = r7;
0x00069e50 bl 0x673c4 | fcn_000673c4 (r0, r1, r2, r3, r4);
0x00069e54 b 0x69a72 | goto label_60;
| label_84:
0x00069e56 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00069e58 movs r3, 0 | r3 = 0;
0x00069e5a str r3, [r2, 0x7c] | *((r2 + 0x7c)) = r3;
0x00069e5c cmp r5, 0 |
| if (r5 == 0) {
0x00069e5e beq.w 0x68948 | goto label_0;
| }
0x00069e62 ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
0x00069e64 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00069e68 b.w 0x68948 | goto label_0;
| label_102:
0x00069e6c ldr r0, [sp, 0x20] | r0 = var_20h;
0x00069e6e add r5, sp, 0xa8 | r5 += var_a8h;
0x00069e70 ldrh r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x00069e72 str r5, [sp, 8] | var_8h = r5;
0x00069e74 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00069e76 strd r6, r2, [sp] | __asm ("strd r6, r2, [sp]");
0x00069e7a add r2, sp, 0x18c | r2 += var_18ch;
0x00069e7c subs r3, r3, r2 | r3 -= r2;
0x00069e7e bl 0x6866c | fcn_0006866c (r0, r1, r2, r3, r4, r5, r6);
0x00069e82 ldr r6, [sp, 0xa8] | r6 = var_a8h;
0x00069e84 b.w 0x6920e | goto label_61;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6a228 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0006a228 () | void fcn_0006a228 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006a228 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006a22c mov r4, r1 | r4 = r1;
0x0006a22e ldr r5, [pc, 0x2a0] |
0x0006a230 sub sp, 0x34 |
0x0006a232 mov sb, r2 | sb = r2;
0x0006a234 ldr r1, [pc, 0x29c] | r1 = *(0x6a4d4);
0x0006a236 add r5, pc | r5 = 0xd470c;
0x0006a238 ldrh.w r2, [r0, 0x46] | r2 = *(var_0h_3x46);
0x0006a23c ldr.w sl, [r0, 0x14] | sl = *(var_0h_3x14);
0x0006a240 ldr r1, [r5, r1] |
0x0006a242 ldr r5, [r0, 0x74] | r5 = *(var_0h_3x74);
0x0006a244 ldr r1, [r1] | r1 = *(0xd470c);
0x0006a246 str r1, [sp, 0x2c] | var_2ch = r1;
0x0006a248 mov.w r1, 0 | r1 = 0;
0x0006a24c str r3, [sp, 0xc] | var_ch = r3;
0x0006a24e ldrh r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0006a250 cmp r2, r3 |
| if (r2 >= r3) {
0x0006a252 bhs.w 0x6a35e | goto label_8;
| }
0x0006a256 mov r7, r0 | r7 = r0;
0x0006a258 bl 0x264ec | fcn_000264ec (r0);
0x0006a25c ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0006a25e ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x0006a260 ldrh r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x0006a262 subs r1, r6, r3 | r1 = r6 - r3;
0x0006a264 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0006a268 subs r3, r3, r2 | r3 -= r2;
0x0006a26a cmp r1, r3 |
| if (r1 > r3) {
0x0006a26c bhi.w 0x6a4b4 | goto label_9;
| }
0x0006a270 cmp r2, r4 |
| if (r2 > r4) {
0x0006a272 bhi 0x6a31c | goto label_10;
| }
0x0006a274 subs.w r8, sb, 0 | r8 = sb - 0;
0x0006a278 sub.w r4, r4, r2 | r4 -= r2;
0x0006a27c it ne |
| if (r8 == sb) {
0x0006a27e movne r8, 1 | r8 = 1;
| }
| label_0:
0x0006a282 mov r5, r8 | r5 = r8;
0x0006a284 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006a288 beq 0x6a37e | goto label_2;
| }
0x0006a28a ldrh r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x0006a28c ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0006a290 ldrb r2, [r7, 1] | r2 = *((r7 + 1));
0x0006a292 ldr r6, [r6, r0] | r6 = *((r6 + r0));
0x0006a294 sub.w r8, r3, 4 | r8 = r3 - 4;
0x0006a298 ldr.w fp, [r7, 0xc] | fp = *((r7 + 0xc));
0x0006a29c lsls r3, r2, 0x1d | r3 = r2 << 0x1d;
0x0006a29e rev r5, r6 | r6 = SWAP32 (r5);
0x0006a2a0 str r5, [sp, 0x24] | var_24h = r5;
| if (r3 >= r2) {
0x0006a2a2 bpl.w 0x6a3b2 | goto label_11;
| }
0x0006a2a6 mov r1, r8 | r1 = r8;
0x0006a2a8 mov r0, r4 | r0 = r4;
0x0006a2aa bl 0xc4764 | fcn_000c4764 (r0);
0x0006a2ae ldr.w r3, [fp, r0, lsl 2] | offset_0 = r0 << 2;
| r3 = *((fp + offset_0));
0x0006a2b2 cmp r3, 0 |
| if (r3 == 0) {
0x0006a2b4 beq.w 0x6a3ec | goto label_12;
| }
0x0006a2b8 mov r6, r0 | r6 = r0;
0x0006a2ba mov r4, r1 | r4 = r1;
0x0006a2bc mov r5, r3 | r5 = r3;
0x0006a2be str r3, [sp, 0x24] | var_24h = r3;
| label_1:
0x0006a2c0 ldr r3, [sp, 0x58] | r3 = var_0h_2;
0x0006a2c2 adds r6, 1 | r6++;
0x0006a2c4 lsls r6, r6, 2 | r6 <<= 2;
0x0006a2c6 mov r1, r5 | r1 = r5;
0x0006a2c8 eor r3, r3, 1 | r3 ^= 1;
0x0006a2cc lsls r3, r3, 1 | r3 <<= 1;
0x0006a2ce str r3, [sp, 0x10] | var_10h = r3;
0x0006a2d0 add r3, sp, 0x28 | r3 += var_28h;
0x0006a2d2 str r3, [sp, 0x14] | var_14h = r3;
0x0006a2d4 add r3, sp, 0x24 | r3 += var_24h;
0x0006a2d6 str r3, [sp, 0x18] | var_18h = r3;
| label_3:
0x0006a2d8 ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0006a2dc cmp r3, r1 |
| if (r3 <= r1) {
0x0006a2de blo 0x6a30a | goto label_13;
| }
| do {
0x0006a2e0 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0006a2e2 cmp r8, r4 |
0x0006a2e4 add.w r2, r3, r6 | r2 = r3 + r6;
0x0006a2e8 str r1, [r2, -0x4] | *((r2 - 0x4)) = r1;
| if (r8 > r4) {
0x0006a2ec bhi.w 0x6a3f4 | goto label_14;
| }
0x0006a2f0 ldr r2, [r3, r6] | r2 = *((r3 + r6));
0x0006a2f2 sub.w r4, r4, r8 | r4 -= r8;
0x0006a2f6 cmp r2, 0 |
| if (r2 == 0) {
0x0006a2f8 beq.w 0x6a48e | goto label_15;
| }
0x0006a2fc ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0006a300 mov r1, r2 | r1 = r2;
0x0006a302 adds r6, 4 | r6 += 4;
0x0006a304 str r2, [sp, 0x24] | var_24h = r2;
0x0006a306 cmp r3, r1 |
0x0006a308 bhs 0x6a2e0 |
| } while (r3 >= r1);
| label_13:
0x0006a30a ldr r4, [pc, 0x1cc] |
0x0006a30c movw r3, 0x1a0e | r3 = 0x1a0e;
0x0006a310 ldr r2, [pc, 0x1c8] |
0x0006a312 ldr r1, [pc, 0x1cc] |
0x0006a314 add r4, pc | r4 = 0xd47f2;
0x0006a316 add r2, pc | r2 = 0xd47f6;
0x0006a318 add r1, pc | r1 = 0xd47fe;
0x0006a31a b 0x6a36e | goto label_4;
| label_10:
0x0006a31c add.w r3, r4, sb | r3 = r4 + sb;
0x0006a320 cmp r2, r3 |
0x0006a322 itt hs |
| if (r2 < r3) {
0x0006a324 movhs r8, 0 | r8 = 0;
| }
| if (r2 >= r3) {
0x0006a328 mov fp, r8 |
| }
| if (r2 < r3) {
0x0006a32a bhs 0x6a342 |
0x0006a32c sub.w fp, r4, r2 |
0x0006a330 adds.w fp, fp, sb |
0x0006a334 sub.w sb, r2, r4 | sb = r2 - r4;
0x0006a338 ite ne |
| if (fp == fp) {
0x0006a33a movne r8, 1 | r8 = 1;
| }
| if (fp != fp) {
0x0006a33e mov.w r8, 0 | r8 = 0;
| goto label_16;
| }
| }
| label_16:
0x0006a342 ldr r3, [sp, 0x58] | r3 = var_0h_2;
0x0006a344 add r4, r6 | r4 += r6;
0x0006a346 ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
| if (r3 == 0) {
0x0006a348 cbz r3, 0x6a39c | goto label_17;
| }
0x0006a34a bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x0006a34e mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0006a350 cbnz r0, 0x6a37e | goto label_2;
| }
0x0006a352 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006a354 mov r0, r4 | r0 = r4;
0x0006a356 mov r2, sb | r2 = sb;
0x0006a358 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006a35c b 0x6a3a6 | goto label_18;
| label_8:
0x0006a35e ldr r4, [pc, 0x184] |
0x0006a360 movw r3, 0x19c1 | r3 = 0x19c1;
0x0006a364 ldr r2, [pc, 0x180] |
0x0006a366 ldr r1, [pc, 0x184] |
0x0006a368 add r4, pc | r4 = 0xd4852;
0x0006a36a add r2, pc | r2 = 0xd4856;
0x0006a36c add r1, pc | r1 = 0xd485e;
| label_4:
0x0006a36e adds r4, 0x14 | r4 += 0x14;
0x0006a370 movs r5, 0xb | r5 = 0xb;
0x0006a372 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x0006a376 movs r0, 0xb | r0 = 0xb;
0x0006a378 str r4, [sp] | *(sp) = r4;
0x0006a37a bl 0x50814 | fcn_00050814 (r0, r1, r2);
| do {
| label_2:
0x0006a37e ldr r2, [pc, 0x170] |
0x0006a380 ldr r3, [pc, 0x150] | r3 = *(0x6a4d4);
0x0006a382 add r2, pc | r2 = 0xd4878;
0x0006a384 ldr r3, [r2, r3] | r3 = *(0xd4878);
0x0006a386 ldr r2, [r3] | r2 = *(0xd4878);
0x0006a388 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0006a38a eors r2, r3 | r2 ^= r3;
0x0006a38c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006a390 bne.w 0x6a4ca | goto label_19;
| }
0x0006a394 mov r0, r5 | r0 = r5;
0x0006a396 add sp, 0x34 |
0x0006a398 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x0006a39c ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006a39e mov r1, r4 | r1 = r4;
0x0006a3a0 mov r2, sb | r2 = sb;
0x0006a3a2 blx 0x65ac | EVP_CIPHER_CTX_free ();
| label_18:
0x0006a3a6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006a3a8 movs r4, 0 | r4 = 0;
0x0006a3aa add r3, sb | r3 += sb;
0x0006a3ac mov sb, fp | sb = fp;
0x0006a3ae str r3, [sp, 0xc] | var_ch = r3;
0x0006a3b0 b 0x6a282 | goto label_0;
| label_11:
0x0006a3b2 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x0006a3b4 mov r1, r8 | r1 = r8;
0x0006a3b6 subs r2, 1 | r2--;
0x0006a3b8 add r2, r8 | r2 += r8;
0x0006a3ba subs r0, r2, r0 | r0 = r2 - r0;
0x0006a3bc bl 0xc4508 | r0 = fcn_000c4508 (r0, r1, r2);
0x0006a3c0 mov r1, r0 | r1 = r0;
0x0006a3c2 cmp.w fp, 0 |
| if (fp == 0) {
0x0006a3c6 beq 0x6a49e | goto label_20;
| }
0x0006a3c8 ldr r3, [pc, 0x128] |
0x0006a3ca str r0, [sp, 0x10] | var_10h = r0;
0x0006a3cc mov r0, fp | r0 = fp;
0x0006a3ce add r3, pc |
0x0006a3d0 ldr r3, [r3, 0x2c] | r3 = *(0xd48f2);
0x0006a3d2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0006a3d4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0006a3d6 lsls r2, r1, 2 | r2 = r1 << 2;
0x0006a3d8 cmp r2, r0 |
| if (r2 > r0) {
0x0006a3da bgt 0x6a49a | goto label_21;
| }
0x0006a3dc ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
| label_7:
0x0006a3de movs r1, 0 | r1 = 0;
0x0006a3e0 blx 0x62ec | fcn_000062ec ();
0x0006a3e4 ldrb r3, [r7, 1] | r3 = *((r7 + 1));
0x0006a3e6 orr r3, r3, 4 | r3 |= 4;
0x0006a3ea strb r3, [r7, 1] | *((r7 + 1)) = r3;
| label_12:
0x0006a3ec cmp r6, 0 |
| if (r6 == 0) {
0x0006a3ee beq 0x6a46c | goto label_22;
| }
0x0006a3f0 movs r6, 0 | r6 = 0;
0x0006a3f2 b 0x6a2c0 | goto label_1;
| label_14:
0x0006a3f4 ldr.w r0, [sl] | r0 = *(sl);
0x0006a3f8 add.w r3, sb, r4 | r3 = sb + r4;
0x0006a3fc cmp r3, r8 |
0x0006a3fe ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [var_10h]");
0x0006a402 ite hi |
| if (r3 <= r8) {
0x0006a404 subhi fp, r4, r8 |
| }
| if (r3 <= r8) {
0x0006a408 mov.w fp, 0 |
| }
0x0006a40c ldr.w r5, [r0, 0xdc] | r5 = *((r0 + 0xdc));
0x0006a410 itt hi |
| if (r3 <= r8) {
0x0006a412 addhi fp, sb |
| }
| if (r3 <= r8) {
0x0006a414 subhi sb, r8, r4 | sb = r8 - r4;
| }
0x0006a418 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t) (r0, r3);
0x0006a41a mov r5, r0 | r5 = r0;
0x0006a41c cmp r0, 0 |
0x0006a41e bne 0x6a37e |
| } while (r0 != 0);
0x0006a420 adds r1, r4, 4 | r1 = r4 + 4;
0x0006a422 ldr r4, [sp, 0x28] | r4 = var_28h;
0x0006a424 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006a426 add r1, r3 | r1 += r3;
0x0006a428 ldr r3, [r3] | r3 = *(r3);
0x0006a42a rev r3, r3 | r3 = SWAP32 (r3);
0x0006a42c str r3, [sp, 0x24] | var_24h = r3;
0x0006a42e ldr r3, [sp, 0x58] | r3 = var_0h_2;
| if (r3 == 0) {
0x0006a430 cbz r3, 0x6a47e | goto label_23;
| }
0x0006a432 mov r0, r4 | r0 = r4;
0x0006a434 str r1, [sp, 0x1c] | var_1ch = r1;
0x0006a436 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x0006a43a mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0006a43c cbnz r0, 0x6a44a |
0x0006a43e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0006a440 mov r2, sb | r2 = sb;
0x0006a442 mov r0, r1 | r0 = r1;
0x0006a444 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006a446 blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x0006a44a ldr r4, [sp, 0x28] | r4 = var_28h;
| if (r4 != 0) {
0x0006a44c cbnz r4, 0x6a486 | goto label_24;
| }
| label_5:
0x0006a44e cmp.w fp, 0 |
| if (fp == 0) {
0x0006a452 beq 0x6a37e | goto label_2;
| }
0x0006a454 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006a456 movs r4, 0 | r4 = 0;
0x0006a458 add r3, sb | r3 += sb;
0x0006a45a mov sb, fp | sb = fp;
0x0006a45c str r3, [sp, 0xc] | var_ch = r3;
| label_6:
0x0006a45e cmp r5, 0 |
| if (r5 != 0) {
0x0006a460 bne 0x6a37e | goto label_2;
| }
0x0006a462 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0006a464 adds r6, 4 | r6 += 4;
0x0006a466 cmp r1, 0 |
| if (r1 != 0) {
0x0006a468 bne.w 0x6a2d8 | goto label_3;
| }
| label_22:
0x0006a46c ldr r4, [pc, 0x88] |
0x0006a46e movw r3, 0x1a63 | r3 = 0x1a63;
0x0006a472 ldr r2, [pc, 0x88] |
0x0006a474 ldr r1, [pc, 0x88] |
0x0006a476 add r4, pc | r4 = 0xd4972;
0x0006a478 add r2, pc | r2 = 0xd497a;
0x0006a47a add r1, pc | r1 = 0xd497e;
0x0006a47c b 0x6a36e | goto label_4;
| label_23:
0x0006a47e ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006a480 mov r2, sb | r2 = sb;
0x0006a482 blx 0x65ac | EVP_CIPHER_CTX_free ();
| label_24:
0x0006a486 mov r0, r4 | r0 = r4;
0x0006a488 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x0006a48c b 0x6a44e | goto label_5;
| label_15:
0x0006a48e ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006a490 mov r0, sl | r0 = sl;
0x0006a492 bl 0x52ec4 | r0 = fcn_00052ec4 (r0, r1, r2, r3, r4, r5);
0x0006a496 mov r5, r0 | r5 = r0;
0x0006a498 b 0x6a45e | goto label_6;
| label_21:
0x0006a49a ldr.w fp, [r7, 0xc] | fp = *((r7 + 0xc));
| label_20:
0x0006a49e lsls r2, r1, 3 | r2 = r1 << 3;
0x0006a4a0 mov r0, fp | r0 = fp;
0x0006a4a2 movs r3, 0 | r3 = 0;
0x0006a4a4 str r1, [sp, 0x10] | var_10h = r1;
0x0006a4a6 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
| if (r0 != 0) {
0x0006a4aa cbz r0, 0x6a4c6 |
0x0006a4ac ldr r1, [sp, 0x10] | r1 = var_10h;
0x0006a4ae str r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x0006a4b0 lsls r2, r1, 2 | r2 = r1 << 2;
0x0006a4b2 b 0x6a3de | goto label_7;
| label_9:
0x0006a4b4 ldr r4, [pc, 0x4c] |
0x0006a4b6 movw r3, 0x19d0 | r3 = 0x19d0;
0x0006a4ba ldr r2, [pc, 0x4c] |
0x0006a4bc ldr r1, [pc, 0x4c] |
0x0006a4be add r4, pc | r4 = 0xd49c6;
0x0006a4c0 add r2, pc | r2 = 0xd49ce;
0x0006a4c2 add r1, pc | r1 = 0xd49d2;
0x0006a4c4 b 0x6a36e | goto label_4;
| }
0x0006a4c6 movs r5, 7 | r5 = 7;
0x0006a4c8 b 0x6a37e | goto label_2;
| label_19:
0x0006a4ca blx 0x6430 | fcn_00006430 ();
0x0006a4ce nop |
0x0006a4d0 smmls r0, r2, r7, r0 | __asm ("smmls r0, r2, r7, r0");
0x0006a4d4 lsls r4, r6, 8 | r4 = r6 << 8;
0x0006a4d6 movs r0, r0 |
0x0006a4d8 adds r4, r5, 5 | r4 = r5 + 5;
0x0006a4da movs r6, r0 | r6 = r0;
0x0006a4dc ldr r6, [r3, 0x64] | r6 = *((r3 + 0x64));
0x0006a4de movs r6, r0 | r6 = r0;
0x0006a4e0 ldr r0, [r0, 0x64] | r0 = *((r0 + 0x64));
0x0006a4e2 movs r6, r0 | r6 = r0;
0x0006a4e4 adds r0, r3, 4 | r0 = r3 + 4;
0x0006a4e6 movs r6, r0 | r6 = r0;
0x0006a4e8 ldr r2, [r1, 0x60] | r2 = *((r1 + 0x60));
0x0006a4ea movs r6, r0 | r6 = r0;
0x0006a4ec ldr r4, [r5, 0x5c] | r4 = *((r5 + 0x5c));
0x0006a4ee movs r6, r0 | r6 = r0;
0x0006a4f0 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6b1b8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006b1b8 () | void fcn_0006b1b8 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006b1b8 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x0006b1bc mov r5, r2 | r5 = r2;
0x0006b1be ldr r2, [pc, 0x128] |
0x0006b1c0 sub sp, 0x68 |
0x0006b1c2 mov r4, r1 | r4 = r1;
0x0006b1c4 mov r6, r0 | r6 = r0;
0x0006b1c6 ldr r3, [pc, 0x124] | r3 = *(0x6b2ee);
0x0006b1c8 mov r0, r1 | r0 = r1;
0x0006b1ca add r2, pc | r2 = 0xd64b8;
0x0006b1cc ldr r3, [r2, r3] |
0x0006b1ce ldr r3, [r3] | r3 = *(0xd64b8);
0x0006b1d0 str r3, [sp, 0x64] | var_64h = r3;
0x0006b1d2 mov.w r3, 0 | r3 = 0;
0x0006b1d6 bl 0x264ec | fcn_000264ec (r0);
0x0006b1da ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0006b1dc movs r1, 0 | r1 = 0;
0x0006b1de ldr r7, [r4, 0x28] | r7 = *((r4 + 0x28));
0x0006b1e0 ldrh r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x0006b1e2 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x0006b1e4 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0006b1e6 str r6, [sp, 0x24] | var_24h = r6;
0x0006b1e8 subs r3, r3, r7 | r3 -= r7;
0x0006b1ea strh.w r1, [sp, 0x20] | var_20h = r1;
0x0006b1ee bic.w r3, r3, r3, asr 31 | r3 = BIT_MASK (r3, r3);
0x0006b1f2 str r1, [sp, 0x28] | var_28h = r1;
0x0006b1f4 str r7, [sp, 0x18] | var_18h = r7;
0x0006b1f6 cmp r3, r0 |
0x0006b1f8 it ge |
| if (r3 < r0) {
0x0006b1fa movge r3, r0 | r3 = r0;
| }
0x0006b1fc cmp r2, r3 |
| if (r2 > r3) {
0x0006b1fe bhi 0x6b2b6 | goto label_4;
| }
0x0006b200 mov r6, r1 | r6 = r1;
0x0006b202 movw r3, 0x4010 | r3 = 0x4010;
0x0006b206 strh.w r3, [sp, 0x20] | var_20h = r3;
0x0006b20a str r2, [sp, 0x1c] | var_1ch = r2;
| label_0:
0x0006b20c ldrb r4, [r7] | r4 = *(r7);
0x0006b20e cmp r4, 0x7f |
0x0006b210 str r4, [sp, 8] | var_8h = r4;
| if (r4 > 0x7f) {
0x0006b212 bhi 0x6b26c | goto label_5;
| }
0x0006b214 cmp r4, 2 |
| if (r4 < 2) {
0x0006b216 bls 0x6b27a | goto label_6;
| }
| do {
0x0006b218 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x0006b21c cmp r8, r4 |
| if (r8 <= r4) {
0x0006b21e blo 0x6b27a | goto label_6;
| }
0x0006b220 subs r0, r4, 1 | r0 = r4 - 1;
0x0006b222 ldrb r1, [r7, r0] | r1 = *((r7 + r0));
0x0006b224 add r0, r7 | r0 += r7;
0x0006b226 cmp r1, 0x7f |
0x0006b228 str r1, [sp, 0xc] | var_ch = r1;
| if (r1 > 0x7f) {
0x0006b22a bhi 0x6b2d8 | goto label_7;
| }
| label_3:
0x0006b22c sub.w r3, r1, 7 | r3 = r1 - 7;
0x0006b230 subs r2, r1, 1 | r2 = r1 - 1;
0x0006b232 clz r3, r3 | r3 &= r3;
0x0006b236 lsrs r3, r3, 5 | r3 >>= 5;
0x0006b238 cmp r2, 8 |
0x0006b23a it hi |
| if (r2 <= 8) {
0x0006b23c orrhi r3, r3, 1 | r3 |= 1;
| }
| if (r3 != 0) {
0x0006b240 cbnz r3, 0x6b27a | goto label_6;
| }
0x0006b242 ldr r3, [pc, 0xac] |
0x0006b244 add r3, pc | r3 = 0xd653a;
0x0006b246 add r3, r1 | r3 += r1;
0x0006b248 ldrb.w r3, [r3, 0x420] | r3 = *((r3 + 0x420));
0x0006b24c add r4, r3 | r4 += r3;
0x0006b24e cmp r8, r4 |
| if (r8 <= r4) {
0x0006b250 blo 0x6b27a | goto label_6;
| }
0x0006b252 sub.w r0, r8, r3 | r0 = r8 - r3;
0x0006b256 add r2, sp, 0x38 | r2 += var_38h;
0x0006b258 add r0, r7 | r0 += r7;
0x0006b25a bl 0x25718 | fcn_00025718 (r0, r1, r2);
0x0006b25e ldrd r2, r3, [sp, 0x38] | __asm ("ldrd r2, r3, [var_38h]");
0x0006b262 strd r2, r3, [r5] | __asm ("strd r2, r3, [r5]");
| if (r6 != 0) {
0x0006b266 cbnz r6, 0x6b2c8 | goto label_8;
| }
| label_1:
0x0006b268 movs r0, 0 | r0 = 0;
0x0006b26a b 0x6b29c | goto label_9;
| label_5:
0x0006b26c add r1, sp, 8 | r1 += var_8h;
0x0006b26e mov r0, r7 | r0 = r7;
0x0006b270 bl 0x273ac | fcn_000273ac (r0, r1);
0x0006b274 ldr r4, [sp, 8] | r4 = var_8h;
0x0006b276 cmp r4, 2 |
0x0006b278 bhi 0x6b218 |
| } while (r4 > 2);
| if (r6 != 0) {
| label_6:
0x0006b27a cbnz r6, 0x6b2d0 | goto label_10;
| }
| label_2:
0x0006b27c ldr r4, [pc, 0x74] |
0x0006b27e movw r3, 0x5040 |
0x0006b282 ldr r2, [pc, 0x74] |
0x0006b284 movs r0, 0xb | r0 = 0xb;
0x0006b286 ldr r1, [pc, 0x74] |
0x0006b288 movt r3, 1 | r3 = 0x15040;
0x0006b28c add r4, pc | r4 = "incomplete input";
0x0006b28e adds r4, 0x14 | r4 += 0x14;
0x0006b290 add r2, pc | r2 = 0xd658e;
0x0006b292 add r1, pc | r1 = 0xd6594;
0x0006b294 str r4, [sp] | *(sp) = r4;
0x0006b296 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0006b29a movs r0, 0xb | r0 = 0xb;
| do {
| label_9:
0x0006b29c ldr r2, [pc, 0x60] |
0x0006b29e ldr r3, [pc, 0x4c] | r3 = *(0x6b2ee);
0x0006b2a0 add r2, pc | r2 = "database schema is locked: %s";
0x0006b2a2 ldr r3, [r2, r3] | r3 = "database schema is locked: %s";
0x0006b2a4 ldr r2, [r3] | r2 = "database schema is locked: %s";
0x0006b2a6 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0006b2a8 eors r2, r3 | r2 ^= r3;
0x0006b2aa mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006b2ae bne 0x6b2e2 | goto label_11;
| }
0x0006b2b0 add sp, 0x68 |
0x0006b2b2 pop.w {r4, r5, r6, r7, r8, pc} |
| label_4:
0x0006b2b6 add r3, sp, 0x10 | r3 += var_10h;
0x0006b2b8 mov r0, r4 | r0 = r4;
0x0006b2ba bl 0x6b0cc | r0 = fcn_0006b0cc (r0, r1, r2, r3);
0x0006b2be cmp r0, 0 |
0x0006b2c0 bne 0x6b29c |
| } while (r0 != 0);
0x0006b2c2 ldr r7, [sp, 0x18] | r7 = var_18h;
0x0006b2c4 ldr r6, [sp, 0x28] | r6 = var_28h;
0x0006b2c6 b 0x6b20c | goto label_0;
| label_8:
0x0006b2c8 add r0, sp, 0x10 | r0 += var_10h;
0x0006b2ca bl 0x2d36c | fcn_0002d36c (r0);
0x0006b2ce b 0x6b268 | goto label_1;
| label_10:
0x0006b2d0 add r0, sp, 0x10 | r0 += var_10h;
0x0006b2d2 bl 0x2d36c | fcn_0002d36c (r0);
0x0006b2d6 b 0x6b27c | goto label_2;
| label_7:
0x0006b2d8 add r1, sp, 0xc | r1 += var_ch;
0x0006b2da bl 0x273ac | fcn_000273ac (r0, r1);
0x0006b2de ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006b2e0 b 0x6b22c | goto label_3;
| label_11:
0x0006b2e2 blx 0x6430 | fcn_00006430 ();
0x0006b2e6 nop |
0x0006b2e8 rsb r0, lr, r7 | r0 = r7 - lr;
0x0006b2ec lsls r4, r6, 8 | r4 = r6 << 8;
0x0006b2ee movs r0, r0 |
0x0006b2f0 adds r0, r1, 3 | r0 = r1 + 3;
0x0006b2f2 movs r7, r0 | r7 = r0;
0x0006b2f4 lsrs r4, r6, 0x17 | r4 = r6 >> 0x17;
0x0006b2f6 movs r6, r0 | r6 = r0;
0x0006b2f8 ldrsh r4, [r4, r3] | r4 = *((r4 + r3));
0x0006b2fa movs r6, r0 | r6 = r0;
0x0006b2fc ldrsh r6, [r0, r3] | r6 = *((r0 + r3));
0x0006b2fe movs r6, r0 | r6 = r0;
0x0006b300 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6c00c */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0006c00c () | void fcn_0006c00c (int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_34h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x0006c00c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0006c010 mov sl, r2 | sl = r2;
0x0006c012 ldr r2, [pc, 0x210] |
0x0006c014 mov r7, r3 | r7 = r3;
0x0006c016 sub sp, 0x3c |
0x0006c018 mov r6, r0 | r6 = r0;
0x0006c01a ldr r3, [pc, 0x20c] | r3 = *(0x6c22a);
0x0006c01c add r2, pc | r2 = 0xd8246;
0x0006c01e ldr.w sb, [sp, 0x64] | sb = var_64h;
0x0006c022 ldr r3, [r2, r3] |
0x0006c024 ldr r3, [r3] | r3 = *(0xd8246);
0x0006c026 str r3, [sp, 0x34] | var_34h = r3;
0x0006c028 mov.w r3, 0 | r3 = 0;
0x0006c02c ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x0006c02e cbnz r3, 0x6c064 |
0x0006c030 ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x0006c032 lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 >= r2) {
0x0006c034 bpl 0x6c064 | goto label_5;
| }
0x0006c036 ldrd r1, r4, [r0, 0x20] | __asm ("ldrd r1, r4, [var_60hx20]");
0x0006c03a cmp r4, r7 |
0x0006c03c it eq |
| if (r4 == r7) {
0x0006c03e cmpeq r1, sl | __asm ("cmpeq r1, sl");
| }
| if (r4 == r7) {
0x0006c040 beq.w 0x6c180 | goto label_12;
| }
0x0006c044 cmp r1, sl |
0x0006c046 sbcs.w r3, r4, r7 | __asm ("sbcs.w r3, r4, r7");
| if (r1 >= sl) {
0x0006c04a bge 0x6c064 | goto label_5;
| }
0x0006c04c ands r2, r2, 8 | r2 &= 8;
| if (r2 != r2) {
0x0006c050 bne.w 0x6c17c | goto label_13;
| }
0x0006c054 adds r1, 1 | r1++;
0x0006c056 adc r4, r4, 0 | __asm ("adc r4, r4, 0");
0x0006c05a cmp r4, r7 |
0x0006c05c it eq |
| if (r4 == r7) {
0x0006c05e cmpeq r1, sl | __asm ("cmpeq r1, sl");
| }
| if (r4 == r7) {
0x0006c060 beq.w 0x6c188 | goto label_14;
| }
| }
| label_5:
0x0006c064 mov r0, r6 | r0 = r6;
0x0006c066 bl 0x534b4 | r0 = fcn_000534b4 (r0);
0x0006c06a mov r4, r0 | r4 = r0;
0x0006c06c cmp r0, 0 |
| if (r0 != 0) {
0x0006c06e bne 0x6c110 | goto label_15;
| }
0x0006c070 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0006c072 mov r2, r6 | r2 = r6;
0x0006c074 mov fp, r7 |
0x0006c076 str r0, [sp, 0x20] | var_20h = r0;
0x0006c078 str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x0006c07c rsb.w r3, r3, 1 | r3 = 1 - r3;
0x0006c080 str r3, [sp, 0x10] | var_10h = r3;
0x0006c082 add r3, sp, 0x28 | r3 += var_28h;
0x0006c084 str r3, [sp, 0x14] | var_14h = r3;
| label_3:
0x0006c086 ldr r4, [r2, 0x74] | r4 = *((r2 + 0x74));
0x0006c088 mov.w sb, 0 | sb = 0;
0x0006c08c str r2, [sp, 0x1c] | var_1ch = r2;
0x0006c08e ldr r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x0006c090 ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0006c092 ldrb r6, [r4, 2] | r6 = *((r4 + 2));
0x0006c094 str r1, [sp, 0xc] | var_ch = r1;
0x0006c096 ldrh r1, [r4, 0x1a] | r1 = *((r4 + 0x1a));
0x0006c098 add.w r8, r3, -1 | r8 = r3 + -1;
0x0006c09c ldr r7, [r4, 0x40] | r7 = *((r4 + 0x40));
0x0006c09e str r3, [sp, 0x18] | var_18h = r3;
0x0006c0a0 mov r3, r6 | r3 = r6;
0x0006c0a2 str r1, [sp, 8] | var_8h = r1;
0x0006c0a4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0006c0a6 mov r6, r7 | r6 = r7;
0x0006c0a8 mov r7, r3 | r7 = r3;
0x0006c0aa asr.w r5, r8, r1 | r5 = r8 >> r1;
0x0006c0ae ldr r1, [sp, 0x14] | r1 = var_14h;
| do {
0x0006c0b0 ldrh.w r0, [r6, r5, lsl 1] | offset_0 = r5 << 1;
| r0 = *((r6 + offset_0));
0x0006c0b4 ldr r3, [sp, 8] | r3 = var_8h;
0x0006c0b6 rev16 r0, r0 | __asm ("rev16 r0, r0");
0x0006c0b8 ands r0, r3 | r0 &= r3;
0x0006c0ba ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006c0bc add r0, r3 | r0 += r3;
| if (r7 != 0) {
0x0006c0be cbnz r7, 0x6c0e0 | goto label_1;
| }
| label_0:
0x0006c0c0 bl 0x21f0c | fcn_00021f0c (r0, r1);
0x0006c0c4 ldrd r0, r2, [sp, 0x28] | __asm ("ldrd r0, r2, [var_28h]");
0x0006c0c8 cmp r0, sl |
0x0006c0ca sbcs.w lr, r2, fp | __asm ("sbcs.w lr, r2, fp");
| if (r0 >= sl) {
0x0006c0ce bge 0x6c130 | goto label_16;
| }
0x0006c0d0 add.w sb, r5, 1 | sb = r5 + 1;
0x0006c0d4 cmp r8, sb |
| if (r8 < sb) {
0x0006c0d6 blt 0x6c1ca | goto label_17;
| }
| label_2:
0x0006c0d8 add.w r5, sb, r8 | r5 = sb + r8;
0x0006c0dc asrs r5, r5, 1 | r5 >>= 1;
0x0006c0de b 0x6c0b0 |
| } while (1);
| label_1:
0x0006c0e0 ldrsb r3, [r0], 1 | r3 = *(r0);
| r0++;
0x0006c0e4 cmp r3, 0 |
| if (r3 >= 0) {
0x0006c0e6 bge 0x6c0c0 | goto label_0;
| }
0x0006c0e8 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0006c0ea cmp r3, r0 |
| if (r3 > r0) {
0x0006c0ec bhi 0x6c0e0 | goto label_1;
| }
0x0006c0ee ldr r4, [pc, 0x13c] |
0x0006c0f0 movw r3, 0x1c76 |
0x0006c0f4 ldr r2, [pc, 0x138] |
0x0006c0f6 movt r3, 1 | r3 = 0x11c76;
0x0006c0fa ldr r1, [pc, 0x138] |
0x0006c0fc movs r0, 0xb | r0 = 0xb;
0x0006c0fe add r4, pc | r4 = 0xd8330;
0x0006c100 adds r4, 0x14 | r4 += 0x14;
0x0006c102 add r2, pc | r2 = 0xd8336;
0x0006c104 str r4, [sp] | *(sp) = r4;
0x0006c106 add r1, pc | r1 = 0xd8340;
0x0006c108 movs r4, 0xb | r4 = 0xb;
0x0006c10a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0006c10e b 0x6c114 | goto label_4;
| label_15:
0x0006c110 cmp r0, 0x10 |
| if (r0 == 0x10) {
0x0006c112 beq 0x6c17c | goto label_13;
| }
| label_4:
0x0006c114 ldr r2, [pc, 0x120] |
0x0006c116 ldr r3, [pc, 0x110] | r3 = *(0x6c22a);
0x0006c118 add r2, pc | r2 = 0xd8354;
0x0006c11a ldr r3, [r2, r3] | r3 = *(0xd8354);
0x0006c11c ldr r2, [r3] | r2 = *(0xd8354);
0x0006c11e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c120 eors r2, r3 | r2 ^= r3;
0x0006c122 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006c126 bne 0x6c21e | goto label_18;
| }
0x0006c128 mov r0, r4 | r0 = r4;
0x0006c12a add sp, 0x3c |
0x0006c12c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0006c130 cmp sl, r0 |
0x0006c132 sbcs.w r3, fp, r2 | __asm ("sbcs.w r3, fp, r2");
| if (sl >= r0) {
0x0006c136 bge 0x6c1ae | goto label_19;
| }
0x0006c138 add.w r8, r5, -1 | r8 = r5 + -1;
| label_11:
0x0006c13c cmp sb, r8 |
| if (sb <= r8) {
0x0006c13e ble 0x6c0d8 | goto label_2;
| }
0x0006c140 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006c142 mov r7, r6 | r7 = r6;
0x0006c144 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006c146 movs r0, 1 | r0 = 1;
| label_8:
0x0006c148 ldrb r6, [r4, 8] | r6 = *((r4 + 8));
0x0006c14a cmp r6, 0 |
| if (r6 != 0) {
0x0006c14c bne 0x6c1ec | goto label_20;
| }
0x0006c14e uxth.w r6, sb | r6 = (int16_t) sb;
| label_7:
0x0006c152 cmp r3, sb |
0x0006c154 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
| if (r3 > sb) {
0x0006c156 bgt 0x6c19a | goto label_21;
| }
0x0006c158 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0006c15a add r3, r0 | r3 += r0;
0x0006c15c ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0006c15e rev r1, r1 | r1 = SWAP32 (r1);
| label_6:
0x0006c160 mov r0, r2 | r0 = r2;
0x0006c162 strh.w r6, [r2, 0x46] | *((r2 + 0x46)) = r6;
0x0006c166 str r2, [sp, 8] | var_8h = r2;
0x0006c168 bl 0x53430 | fcn_00053430 (r0, r1);
0x0006c16c ldr r2, [sp, 8] | r2 = var_8h;
0x0006c16e cmp r0, 0 |
| if (r0 == 0) {
0x0006c170 beq 0x6c086 | goto label_3;
| }
0x0006c172 mov r6, r2 | r6 = r2;
0x0006c174 mov r4, r0 | r4 = r0;
| label_10:
0x0006c176 movs r3, 0 | r3 = 0;
0x0006c178 strh r3, [r6, 0x32] | *((r6 + 0x32)) = r3;
0x0006c17a b 0x6c114 | goto label_4;
| label_13:
0x0006c17c mov.w r3, -1 | r3 = -1;
| label_12:
0x0006c180 str.w r3, [sb] | __asm ("str.w r3, [sb]");
| label_9:
0x0006c184 movs r4, 0 | r4 = 0;
0x0006c186 b 0x6c114 | goto label_4;
| label_14:
0x0006c188 str.w r2, [sb] | __asm ("str.w r2, [sb]");
0x0006c18c bl 0x6be4c | r0 = fcn_0006be4c (r0);
0x0006c190 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0006c192 cbz r0, 0x6c1d6 | goto label_22;
| }
0x0006c194 cmp r0, 0x65 |
| if (r0 != 0x65) {
0x0006c196 bne 0x6c114 | goto label_4;
| }
0x0006c198 b 0x6c064 | goto label_5;
| label_21:
0x0006c19a ldrh.w r3, [r7, sb, lsl 1] | offset_1 = sb << 1;
| r3 = *((r7 + offset_1));
0x0006c19e ldr r1, [sp, 8] | r1 = var_8h;
0x0006c1a0 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0006c1a2 and.w sb, r1, r3 | sb = r1 & r3;
0x0006c1a6 ldr.w r1, [r0, sb] | r1 = *((r0 + sb));
0x0006c1aa rev r1, r1 | r1 = SWAP32 (r1);
0x0006c1ac b 0x6c160 | goto label_6;
| label_19:
0x0006c1ae mov r1, r2 | r1 = r2;
0x0006c1b0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006c1b2 mov r7, r6 | r7 = r6;
0x0006c1b4 uxth r6, r5 | r6 = (int16_t) r5;
0x0006c1b6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006c1b8 strh.w r6, [r2, 0x46] | *((r2 + 0x46)) = r6;
0x0006c1bc ldrb.w ip, [r4, 8] | ip = *((r4 + 8));
0x0006c1c0 cmp.w ip, 0 |
| if (ip != 0) {
0x0006c1c4 bne 0x6c1fe | goto label_23;
| }
0x0006c1c6 mov sb, r5 | sb = r5;
0x0006c1c8 b 0x6c152 | goto label_7;
| label_17:
0x0006c1ca ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006c1cc mov r7, r6 | r7 = r6;
0x0006c1ce ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006c1d0 mov.w r0, -1 | r0 = -1;
0x0006c1d4 b 0x6c148 | goto label_8;
| label_22:
0x0006c1d6 mov r0, r6 | r0 = r6;
0x0006c1d8 bl 0x264ec | fcn_000264ec (r0);
0x0006c1dc ldrd r2, r3, [r6, 0x20] | __asm ("ldrd r2, r3, [r6, 0x20]");
0x0006c1e0 cmp r3, r7 |
0x0006c1e2 it eq |
| if (r3 != r7) {
0x0006c1e4 cmpeq r2, sl | __asm ("cmpeq r2, sl");
| goto label_24;
| }
| if (r3 != r7) {
| label_24:
0x0006c1e6 bne.w 0x6c064 | goto label_5;
| }
0x0006c1ea b 0x6c184 | goto label_9;
| label_20:
0x0006c1ec ldr.w sb, [sp, 0x24] | sb = var_24h;
0x0006c1f0 mov r6, r2 | r6 = r2;
0x0006c1f2 strh.w r5, [r2, 0x46] | *((r2 + 0x46)) = r5;
0x0006c1f6 ldr r4, [sp, 0x20] | r4 = var_20h;
0x0006c1f8 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0006c1fc b 0x6c176 | goto label_10;
| label_23:
0x0006c1fe mov r6, r2 | r6 = r2;
0x0006c200 ldr.w sb, [sp, 0x24] | sb = var_24h;
0x0006c204 ldrb r3, [r6, 1] | r3 = *((r6 + 1));
0x0006c206 mov r2, r1 | r2 = r1;
0x0006c208 movs r1, 0 | r1 = 0;
0x0006c20a str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x0006c20c str r2, [r6, 0x24] | *((r6 + 0x24)) = r2;
0x0006c20e orr r3, r3, 2 | r3 |= 2;
0x0006c212 strh r1, [r6, 0x32] | *((r6 + 0x32)) = r1;
0x0006c214 strb r3, [r6, 1] | *((r6 + 1)) = r3;
0x0006c216 ldr r4, [sp, 0x20] | r4 = var_20h;
0x0006c218 str.w r1, [sb] | __asm ("str.w r1, [sb]");
0x0006c21a asrs r0, r0, 0x20 | r0 >>= 0x20;
0x0006c21c b 0x6c114 | goto label_4;
| label_18:
0x0006c21e blx 0x6430 | fcn_00006430 ();
0x0006c222 nop |
| if (r1 <= 0) {
0x0006c224 ble 0x6c320 | void (*0x6c320)() ();
| }
0x0006c226 movs r7, r0 | r7 = r0;
0x0006c228 lsls r4, r6, 8 | r4 = r6 << 8;
0x0006c22a movs r0, r0 |
0x0006c22c vaddl.u8 q0, d2, d5 | __asm ("vaddl.u8 q0, d2, d5");
0x0006c230 str r2, [r6, r1] | *((r6 + r1)) = r2;
0x0006c232 movs r6, r0 | r6 = r0;
0x0006c234 str r2, [r2, r1] | *((r2 + r1)) = r2;
0x0006c236 movs r6, r0 | r6 = r0;
| if (r6 > r0) {
0x0006c238 bgt 0x6c13c | goto label_11;
| }
0x0006c23a movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6c2c4 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006c2c4 () | void fcn_0006c2c4 (int16_t arg_bp_28h, int16_t arg_28h, int16_t arg_6eh, int16_t arg_72h, int16_t arg_84h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_14h_2;
| int16_t var_18h_3;
| int16_t var_20h_2;
| int16_t var_58h_2;
| int16_t var_48h_2;
| int16_t var_4ch_2;
| int16_t var_88h;
| int16_t var_84h;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_18h_2;
| arithmetic x;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_6eh;
| arithmetic var_50h;
| int16_t var_72h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ah;
| int16_t var_0h_4;
| int16_t var_ch_3;
| int16_t var_10h_2;
| int16_t var_14h_3;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_23:
0x0006803c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00068040 mov r6, r1 | r6 = r1;
0x00068042 ldr r7, [r0, 0x74] | r7 = *((r0 + 0x74));
0x00068044 mov r5, r0 | r5 = r0;
0x00068046 sub sp, 0x1c |
0x00068048 ldr r1, [r0, 0x28] | r1 = *((r0 + 0x28));
0x0006804a ldrh r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x0006804c ldr r0, [pc, 0x124] |
0x0006804e ldr r3, [pc, 0x128] | r3 = *(0x6817a);
0x00068050 ldr.w sl, [r6, 0x1c] | sl = *((r6 + 0x1c));
0x00068054 add r0, pc | r0 = 0xd01cc;
0x00068056 ldr r4, [r6, 0x20] | r4 = *((r6 + 0x20));
0x00068058 ldr r3, [r0, r3] |
0x0006805a adds r0, r1, r2 | r0 = r1 + r2;
0x0006805c ldr r3, [r3] | r3 = *(0xd01cc);
0x0006805e str r3, [sp, 0x14] | var_14h_3 = r3;
0x00068060 mov.w r3, 0 | r3 = 0;
0x00068064 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00068066 str r7, [sp, 0x10] | var_10h_2 = r7;
0x00068068 cmp r3, r0 |
| if (r3 <= r0) {
0x0006806a blo 0x6814a | goto label_29;
| }
0x0006806c ldrh r0, [r7, 0x12] | r0 = *((r7 + 0x12));
0x0006806e ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00068070 add r3, r0 | r3 += r0;
0x00068072 cmp r1, r3 |
| if (r1 <= r3) {
0x00068074 blo 0x6814a | goto label_29;
| }
0x00068076 str r2, [sp] | *(sp) = r2;
0x00068078 movs r3, 0 | r3 = 0;
0x0006807a mov r2, r6 | r2 = r6;
0x0006807c mov r0, r7 | r0 = r7;
0x0006807e bl 0x67f88 | r0 = fcn_00067f88 (r0, r1, r2, r3);
0x00068082 cmp r0, 0 |
| if (r0 != 0) {
0x00068084 bne 0x68106 | goto label_1;
| }
0x00068086 add sl, r4 | sl += r4;
0x00068088 ldrh r4, [r5, 0x30] | r4 = *((r5 + 0x30));
0x0006808a cmp r4, sl |
| if (r4 == sl) {
0x0006808c beq 0x68106 | goto label_1;
| }
0x0006808e ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00068090 add.w sb, sp, 0x10 | sb += var_10h_2;
0x00068094 ldr.w fp, [r7, 0x34] | fp = *((r7 + 0x34));
0x00068098 str r0, [sp, 0xc] | var_ch_3 = r0;
0x0006809a ldr.w r8, [r3, r4] | r8 = *((r3 + r4));
0x0006809e ldr.w r7, [fp, 0x28] | r7 = *(arg_bp_28h);
0x000680a2 rev.w r8, r8 | r8 = SWAP32 (r8);
0x000680a6 subs r7, 4 | r7 -= 4;
| do {
0x000680a8 movs r3, 0 | r3 = 0;
0x000680aa mov r2, sb | r2 = sb;
0x000680ac mov r1, r8 | r1 = r8;
0x000680ae mov r0, fp | r0 = fp;
0x000680b0 bl 0x22b3c | r0 = fcn_00022b3c (r0, r1, r2);
| if (r0 != 0) {
0x000680b4 cbnz r0, 0x68106 | goto label_1;
| }
0x000680b6 ldr r5, [sp, 0x10] | r5 = var_10h_2;
0x000680b8 ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x000680ba ldrsh.w r3, [r3, 0x1e] | r3 = *((r3 + 0x1e));
0x000680be cmp r3, 1 |
| if (r3 != 1) {
0x000680c0 bne 0x68120 | goto label_30;
| }
0x000680c2 ldrb r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x000680c4 cbnz r3, 0x68120 | goto label_30;
| }
0x000680c6 ldr r1, [r5, 0x38] | r1 = *((r5 + 0x38));
0x000680c8 adds r3, r4, r7 | r3 = r4 + r7;
0x000680ca cmp r3, sl |
0x000680cc mov r0, r5 | r0 = r5;
0x000680ce it hs |
| if (r3 < sl) {
0x000680d0 subhs r7, sl, r4 | r7 = sl - r4;
| }
0x000680d4 mov r3, r4 | r3 = r4;
0x000680d6 it lo |
| if (r3 >= sl) {
0x000680d8 ldrlo r8, [r1] | r8 = *(r1);
| }
0x000680dc mov r2, r6 | r2 = r6;
0x000680de add.w r1, r1, 4 | r1 += 4;
0x000680e2 str r7, [sp] | *(sp) = r7;
0x000680e4 it lo |
| if (r3 < sl) {
0x000680e6 revlo r8, r8 | __asm ("revlo r8, r8");
| }
0x000680ea bl 0x67f88 | fcn_00067f88 (r0, r1, r2, r3);
0x000680ee ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x000680f0 mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x000680f2 cbz r3, 0x680fa |
0x000680f4 mov r0, r3 | r0 = r3;
0x000680f6 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x000680fa cmp r5, 0 |
| if (r5 != 0) {
0x000680fc bne 0x6816a | goto label_31;
| }
0x000680fe add r4, r7 | r4 += r7;
0x00068100 cmp sl, r4 |
0x00068102 bgt 0x680a8 |
| } while (sl > r4);
0x00068104 ldr r0, [sp, 0xc] | r0 = var_ch_3;
| do {
| label_1:
0x00068106 ldr r2, [pc, 0x74] |
0x00068108 ldr r3, [pc, 0x6c] | r3 = *(0x68178);
0x0006810a add r2, pc | r2 = 0xd028c;
0x0006810c ldr r3, [r2, r3] | r3 = *(0xd028c);
0x0006810e ldr r2, [r3] | r2 = *(0xd028c);
0x00068110 ldr r3, [sp, 0x14] | r3 = var_14h_3;
0x00068112 eors r2, r3 | r2 ^= r3;
0x00068114 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00068118 bne 0x6816e | goto label_32;
| }
0x0006811a add sp, 0x1c |
0x0006811c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x00068120 ldr r4, [pc, 0x5c] |
0x00068122 movw r3, 0x2956 |
0x00068126 ldr r2, [pc, 0x5c] |
0x00068128 movs r0, 0xb | r0 = 0xb;
0x0006812a ldr r1, [pc, 0x5c] |
0x0006812c movt r3, 1 | r3 = 0x12956;
0x00068130 add r4, pc | r4 = 0xd02b4;
0x00068132 adds r4, 0x14 | r4 += 0x14;
0x00068134 add r2, pc | r2 = 0xd02be;
0x00068136 add r1, pc | r1 = 0xd02c4;
0x00068138 str r4, [sp] | *(sp) = r4;
0x0006813a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0006813e ldr r0, [r5, 0x48] | r0 = *((r5 + 0x48));
| if (r0 != 0) {
0x00068140 cbz r0, 0x68146 |
0x00068142 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
| label_0:
0x00068146 movs r0, 0xb | r0 = 0xb;
0x00068148 b 0x68106 |
| } while (1);
| label_29:
0x0006814a ldr r4, [pc, 0x40] |
0x0006814c movw r3, 0x2943 |
0x00068150 ldr r2, [pc, 0x3c] |
0x00068152 movt r3, 1 | r3 = 0x12943;
0x00068156 ldr r1, [pc, 0x3c] |
0x00068158 movs r0, 0xb | r0 = 0xb;
0x0006815a add r4, pc | r4 = 0xd02ec;
0x0006815c adds r4, 0x14 | r4 += 0x14;
0x0006815e add r2, pc | r2 = 0xd02f2;
0x00068160 add r1, pc | r1 = 0xd02fa;
0x00068162 str r4, [sp] | *(sp) = r4;
0x00068164 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00068168 b 0x68146 | goto label_0;
| label_31:
0x0006816a mov r0, r5 | r0 = r5;
0x0006816c b 0x68106 | goto label_1;
| label_32:
0x0006816e blx 0x6430 | fcn_00006430 ();
0x00068172 nop |
0x00068174 adds r4, r0, 5 | r4 = r0 + 5;
0x00068176 movs r0, r1 | r0 = r1;
0x00068178 lsls r4, r6, 8 | r4 = r6 << 8;
0x0006817a movs r0, r0 |
0x0006817c adds r6, r1, 2 | r6 = r1 + 2;
0x0006817e movs r0, r1 | r0 = r1;
0x00068180 subs r7, 0x50 | r7 -= 0x50;
0x00068182 movs r6, r0 | r6 = r0;
0x00068184 str r0, [sp, 0x100] | var_14h = r0;
0x00068186 movs r6, r0 | r6 = r0;
0x00068188 str r0, [sp, 0x88] | var_88h = r0;
0x0006818a movs r6, r0 | r6 = r0;
0x0006818c subs r7, 0x26 | r7 -= 0x26;
0x0006818e movs r6, r0 | r6 = r0;
0x00068190 str r0, [sp, 0x58] | var_58h_2 = r0;
0x00068192 movs r6, r0 | r6 = r0;
0x00068194 ldrh r0, [r7, 0x3e] | r0 = *((r7 + 0x3e));
0x00068196 movs r6, r0 | r6 = r0;
0x0006c2c4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006c2c8 mov r5, r0 | r5 = r0;
0x0006c2ca ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x0006c2cc mov r4, r3 | r4 = r3;
0x0006c2ce sub sp, 0x8c |
0x0006c2d0 ldr.w r0, [pc, 0x7f8] |
0x0006c2d4 ldr.w r3, [pc, 0x7f8] | r3 = *(0x6cad0);
0x0006c2d8 add r0, pc | r0 = 0xd8da8;
0x0006c2da ldr r3, [r0, r3] |
0x0006c2dc ldr r3, [r3] | r3 = *(0xd8da8);
0x0006c2de str r3, [sp, 0x84] | var_84h = r3;
0x0006c2e0 mov.w r3, 0 | r3 = 0;
0x0006c2e4 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c2e6 str r2, [sp, 0x18] | var_18h_3 = r2;
0x0006c2e8 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0006c2ea lsls r7, r3, 0x1a | r7 = r3 << 0x1a;
0x0006c2ec str r4, [sp, 0x4c] | var_4ch_2 = r4;
0x0006c2ee str r1, [sp, 0x20] | var_20h_2 = r1;
0x0006c2f0 str r2, [sp, 0x14] | var_14h_2 = r2;
| if (r7 < r3) {
0x0006c2f2 bmi.w 0x6c44a | goto label_33;
| }
0x0006c2f6 ldrb r3, [r5] | r3 = *(r5);
0x0006c2f8 cmp r3, 2 |
| if (r3 > 2) {
0x0006c2fa bhi.w 0x6c430 | goto label_4;
| }
0x0006c2fe ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0006c300 cmp r3, 0 |
| if (r3 == 0) {
0x0006c302 beq.w 0x6c4e4 | goto label_34;
| }
0x0006c304 strh r7, [r5, 6] | *((r5 + 6)) = r7;
| if (r4 == 0) {
| label_2:
0x0006c306 cbnz r4, 0x6c34a |
| label_7:
0x0006c308 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x0006c30a ands r2, r2, 2 | r2 &= 2;
| if (r2 != r2) {
0x0006c30e bne.w 0x6c530 | goto label_35;
| }
0x0006c312 ldr r0, [sp, 0x20] | r0 = x;
0x0006c314 ldrh r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x0006c316 cmp r1, 0 |
| if (r1 == 0) {
0x0006c318 beq.w 0x6c8d6 | goto label_36;
| }
0x0006c31c str r3, [sp, 0x58] | var_38h = r3;
0x0006c31e ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x0006c320 mov r0, r5 | r0 = r5;
0x0006c322 strh.w r1, [sp, 0x6c] | *(arg_28h) = r1;
0x0006c326 add r1, sp, 0x58 | r1 += var_38h;
0x0006c328 strb.w r2, [sp, 0x6e] | *(arg_6eh) = r2;
0x0006c32c strb.w r2, [sp, 0x72] | *(arg_72h) = r2;
0x0006c330 add r2, sp, 0x4c | r2 += var_4ch;
0x0006c332 str r3, [sp, 0x5c] | var_5ch = r3;
0x0006c334 bl 0x6b304 | r0 = fcn_0006b304 (r0, r1, r2, r3);
0x0006c338 mov sb, r0 | sb = r0;
0x0006c33a str r0, [sp, 0x48] | var_48h = r0;
| label_18:
0x0006c33c cmp.w sb, 0 |
| if (sb != 0) {
0x0006c340 bne 0x6c40e | goto label_3;
| }
0x0006c342 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0006c344 cmp r3, 0 |
| if (r3 == 0) {
0x0006c346 beq.w 0x6c530 | goto label_35;
| }
| }
| label_5:
0x0006c34a ldr r4, [r5, 0x74] | r4 = *((r5 + 0x74));
0x0006c34c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0006c34e cmp r3, 0 |
| if (r3 < 0) {
0x0006c350 blt.w 0x6c48a | goto label_37;
| }
| label_6:
0x0006c354 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006c356 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x0006c358 str r3, [sp, 0x28] | var_28h = r3;
0x0006c35a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006c35c lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 >= r3) {
0x0006c35e bpl.w 0x6c594 | goto label_38;
| }
0x0006c362 ldr r6, [sp, 0x14] | r6 = var_14h;
0x0006c364 ldr r2, [r6, 0x58] | r2 = *((r6 + 0x58));
0x0006c366 ldrb r3, [r6, 0x11] | r3 = *((r6 + 0x11));
0x0006c368 cmp r2, 4 |
0x0006c36a it lt |
| if (r2 >= 4) {
0x0006c36c movlt r2, 4 | r2 = 4;
| }
0x0006c36e mov fp, r2 |
0x0006c370 movs r2, 0 | r2 = 0;
0x0006c372 str r2, [sp, 0x48] | var_48h = r2;
| if (r3 != 0) {
0x0006c374 cbz r3, 0x6c394 |
0x0006c376 ldrh r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x0006c378 cmp r3, fp |
| if (r3 >= fp) {
0x0006c37a bge 0x6c394 | goto label_11;
| }
0x0006c37c ldr r7, [sp, 0x28] | r7 = var_28h;
0x0006c37e add r2, sp, 0x58 | r2 += var_58h;
0x0006c380 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0006c382 mov r0, r4 | r0 = r4;
0x0006c384 mov r1, r7 | r1 = r7;
0x0006c386 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0006c388 ldrh.w r3, [sp, 0x68] | r3 = var_68h;
0x0006c38c ldr r2, [sp, 0x64] | r2 = var_64h;
0x0006c38e cmp r2, r3 |
| if (r2 != r3) {
0x0006c390 bne.w 0x6c92a | goto label_39;
| }
| }
| label_11:
0x0006c394 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0006c396 ldrh.w r6, [r5, 0x46] | r6 = *((r5 + 0x46));
0x0006c39a cmp r3, 0 |
| if (r3 != 0) {
0x0006c39c bne.w 0x6c4ba | goto label_40;
| }
0x0006c3a0 ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0006c3a2 cmp r3, r6 |
| if (r3 < r6) {
0x0006c3a4 bls.w 0x6c8f6 | goto label_41;
| }
0x0006c3a8 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0006c3aa bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x0006c3ae mov sb, r0 | sb = r0;
0x0006c3b0 str r0, [sp, 0x48] | var_48h = r0;
| if (r0 != 0) {
0x0006c3b2 cbnz r0, 0x6c40e | goto label_3;
| }
0x0006c3b4 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0006c3b6 ldrb r1, [r4, 8] | r1 = *((r4 + 8));
0x0006c3b8 ldrh.w r2, [r3, r6, lsl 1] | offset_0 = r6 << 1;
| r2 = *((r3 + offset_0));
0x0006c3bc ldrh r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x0006c3be rev16 r2, r2 | __asm ("rev16 r2, r2");
0x0006c3c0 ands r3, r2 | r3 &= r2;
0x0006c3c2 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0006c3c4 adds r7, r2, r3 | r7 = r2 + r3;
0x0006c3c6 cmp r1, 0 |
| if (r1 == 0) {
0x0006c3c8 beq.w 0x6ca1c | goto label_42;
| }
| label_26:
0x0006c3cc ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0006c3ce add r2, sp, 0x58 | r2 += var_58h;
0x0006c3d0 mov r1, r7 | r1 = r7;
0x0006c3d2 mov r0, r4 | r0 = r4;
0x0006c3d4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0006c3d6 ldrh.w r2, [sp, 0x68] | r2 = var_68h;
0x0006c3da ldr r3, [sp, 0x64] | r3 = var_64h;
0x0006c3dc cmp r2, r3 |
| if (r2 != r3) {
0x0006c3de bne.w 0x6c950 | goto label_43;
| }
0x0006c3e2 ldrh.w r2, [sp, 0x6a] | r2 = var_6ah;
0x0006c3e6 movs r0, 0 | r0 = 0;
0x0006c3e8 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c3ea str r0, [sp, 0x48] | var_48h = r0;
0x0006c3ec cmp fp, r2 |
0x0006c3ee bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x0006c3f2 strb r3, [r5, 1] | *((r5 + 1)) = r3;
| if (fp == r2) {
0x0006c3f4 beq.w 0x6ca2e | goto label_44;
| }
| label_22:
0x0006c3f8 add r7, sp, 0x48 | r7 += var_48h;
0x0006c3fa mov r1, r6 | r1 = r6;
0x0006c3fc mov r3, r7 | r3 = r7;
0x0006c3fe mov r0, r4 | r0 = r4;
0x0006c400 bl 0x511b8 | fcn_000511b8 (r0, r1, r2, r3);
0x0006c404 ldr.w sb, [sp, 0x48] | sb = var_48h;
0x0006c408 cmp.w sb, 0 |
| if (sb == 0) {
0x0006c40c beq 0x6c4c0 | goto label_45;
| }
| do {
| label_3:
0x0006c40e ldr.w r2, [pc, 0x6c4] |
0x0006c412 ldr.w r3, [pc, 0x6bc] | r3 = *(0x6cad2);
0x0006c416 add r2, pc | r2 = 0xd8ef0;
0x0006c418 ldr r3, [r2, r3] | r3 = *(0xd8ef0);
0x0006c41a ldr r2, [r3] | r2 = *(0xd8ef0);
0x0006c41c ldr r3, [sp, 0x84] | r3 = *(arg_84h);
0x0006c41e eors r2, r3 | r2 ^= r3;
0x0006c420 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006c424 bne.w 0x6cac2 | goto label_46;
| }
0x0006c426 strh r5, [r1, 0x1a] | *((r1 + 0x1a)) = r5;
0x0006c428 mov r0, sb | r0 = sb;
0x0006c42a add sp, 0x8c |
0x0006c42c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0006c430 mov r0, r5 | r0 = r5;
0x0006c432 bl 0x534b4 | r0 = fcn_000534b4 (r0);
0x0006c436 bics r3, r0, 0x10 | __asm ("bics r3, r0, 0x10");
0x0006c43a mov sb, r0 | sb = r0;
0x0006c43c str r0, [sp, 0x48] | var_48h_2 = r0;
0x0006c43e bne 0x6c40e |
| } while (r2 != r3);
0x0006c440 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0006c442 cmp r3, 0 |
| if (r3 != 0) {
0x0006c444 bne.w 0x6c306 | goto label_2;
| }
0x0006c448 b 0x6c4e4 | goto label_34;
| label_33:
0x0006c44a ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x0006c44c mov r2, r5 | r2 = r5;
0x0006c44e ldr r1, [r5, 0x40] | r1 = *((r5 + 0x40));
0x0006c450 bl 0x6a660 | r0 = fcn_0006a660 (r0, r1, r2);
0x0006c454 mov sb, r0 | sb = r0;
0x0006c456 str r0, [sp, 0x48] | var_48h_2 = r0;
0x0006c458 cmp r0, 0 |
| if (r0 != 0) {
0x0006c45a bne 0x6c40e | goto label_3;
| }
0x0006c45c cmp r4, 0 |
| if (r4 == 0) {
0x0006c45e beq.w 0x6c574 | goto label_47;
| }
0x0006c462 ldrsb.w r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0006c466 cmp r3, 0 |
| if (r3 < 0) {
0x0006c468 blt.w 0x6ca6a | goto label_48;
| }
0x0006c46c ldrb r3, [r5] | r3 = *(r5);
0x0006c46e cmp r3, 2 |
| if (r3 > 2) {
0x0006c470 bhi 0x6c430 | goto label_4;
| }
0x0006c472 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0006c474 cmp r3, 0 |
| if (r3 != 0) {
0x0006c476 bne.w 0x6c34a | goto label_5;
| }
0x0006c47a ldrb r3, [r6, 0xb] | r3 = *((r6 + 0xb));
0x0006c47c cmp r3, 0 |
| if (r3 != 0) {
0x0006c47e bne.w 0x6c890 | goto label_49;
| }
0x0006c482 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c484 lsls r0, r3, 0x1e | r0 = r3 << 0x1e;
| if (r0 >= r3) {
0x0006c486 bmi 0x6c4f2 |
0x0006c488 b 0x6c34a | goto label_5;
| label_37:
0x0006c48a ldrb r3, [r5] | r3 = *(r5);
0x0006c48c cmp r3, 1 |
| if (r3 < 1) {
0x0006c48e bls 0x6c562 | goto label_50;
| }
0x0006c490 ldr.w r4, [pc, 0x644] |
0x0006c494 movw r3, 0x2a28 | r3 = 0x2a28;
0x0006c498 ldr.w r2, [pc, 0x640] |
0x0006c49c ldr.w r1, [pc, 0x640] |
0x0006c4a0 add r4, pc | r4 = 0xd8f7c;
0x0006c4a2 add r2, pc | r2 = 0xd8f82;
0x0006c4a4 add r1, pc | r1 = 0xd8f88;
| label_19:
0x0006c4a6 adds r4, 0x14 | r4 += 0x14;
0x0006c4a8 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x0006c4ac movs r0, 0xb | r0 = 0xb;
0x0006c4ae str r4, [sp] | *(sp) = r4;
0x0006c4b0 mov.w sb, 0xb | sb = 0xb;
0x0006c4b4 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0006c4b8 b 0x6c40e | goto label_3;
| if (r0 < 0xb) {
| label_40:
0x0006c4ba blt.w 0x6c876 | goto label_51;
| }
| label_16:
0x0006c4be add r7, sp, 0x48 | r7 += var_48h;
| label_45:
0x0006c4c0 mov r1, r6 | r1 = r6;
0x0006c4c2 movs r6, 0 | r6 = 0;
0x0006c4c4 mov r3, fp | r3 = fp;
0x0006c4c6 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0006c4c8 mov r0, r4 | r0 = r4;
0x0006c4ca str r7, [sp, 8] | var_8h = r7;
0x0006c4cc strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x0006c4d0 bl 0x6866c | fcn_0006866c (r0, r1, r2, r3, r4, r5, r6);
0x0006c4d4 strh r6, [r5, 0x32] | *((r5 + 0x32)) = r6;
0x0006c4d6 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0006c4d8 cmp r3, 0 |
| if (r3 != 0) {
0x0006c4da bne.w 0x6c7ea | goto label_52;
| }
0x0006c4de ldr.w sb, [sp, 0x48] | sb = var_48h;
0x0006c4e2 b 0x6c40e | goto label_3;
| label_34:
0x0006c4e4 ldrb r3, [r6, 0xb] | r3 = *((r6 + 0xb));
0x0006c4e6 cmp r3, 0 |
| if (r3 != 0) {
0x0006c4e8 bne.w 0x6c890 | goto label_49;
| }
| label_17:
0x0006c4ec ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c4ee lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 >= r3) {
0x0006c4f0 bpl 0x6c506 | goto label_53;
| }
| }
| label_8:
0x0006c4f2 ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x0006c4f4 ldrd r0, r2, [r3, 8] | __asm ("ldrd r0, r2, [r3, 8]");
0x0006c4f8 ldrd r1, r3, [r5, 0x20] | __asm ("ldrd r1, r3, [r5, 0x20]");
0x0006c4fc cmp r2, r3 |
0x0006c4fe it eq |
| if (r2 == r3) {
0x0006c500 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| }
| if (r2 == r3) {
0x0006c502 beq.w 0x6c97e | goto label_54;
| }
| label_53:
0x0006c506 cmp r4, 0 |
| if (r4 != 0) {
0x0006c508 bne.w 0x6c34a | goto label_5;
| }
| label_9:
0x0006c50c add r3, sp, 0x4c | r3 += var_4ch_2;
0x0006c50e mov r0, r5 | r0 = r5;
0x0006c510 str r3, [sp, 4] | var_4h_3 = r3;
0x0006c512 ldr r3, [sp, 0x18] | r3 = var_18h_3;
0x0006c514 ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x0006c518 str r3, [sp] | *(sp) = r3;
0x0006c51a ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x0006c51c ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x0006c520 bl 0x6c00c | r0 = fcn_0006c00c (r0, r1, r2);
0x0006c524 mov sb, r0 | sb = r0;
0x0006c526 str r0, [sp, 0x48] | var_48h_2 = r0;
0x0006c528 cmp r0, 0 |
| if (r0 == 0) {
0x0006c52a beq.w 0x6c34a | goto label_5;
| }
0x0006c52e b 0x6c40e | goto label_3;
| label_35:
0x0006c530 mov r0, r5 | r0 = r5;
0x0006c532 bl 0x264ec | fcn_000264ec (r0);
0x0006c536 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006c538 ldrd r0, r1, [r5, 0x20] | __asm ("ldrd r0, r1, [r5, 0x20]");
0x0006c53c ldrd r3, r2, [r2, 8] | __asm ("ldrd r3, r2, [r2, 8]");
0x0006c540 cmp r1, r2 |
0x0006c542 it eq |
| if (r1 != r2) {
0x0006c544 cmpeq r0, r3 | __asm ("cmpeq r0, r3");
| goto label_55;
| }
| if (r1 != r2) {
| label_55:
0x0006c546 bne.w 0x6c34a | goto label_5;
| }
0x0006c54a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006c54c movs r4, 0 | r4 = 0;
0x0006c54e add r1, sp, 0x58 | r1 += var_58h;
0x0006c550 mov r0, r5 | r0 = r5;
0x0006c552 strd r3, r4, [sp, 0x74] | __asm ("strd r3, r4, [sp, 0x74]");
0x0006c556 ldr r2, [r2] | r2 = *(r2);
0x0006c558 str r2, [sp, 0x68] | var_68h = r2;
0x0006c55a bl 0x6803c | r0 = void (*0x6803c)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
0x0006c55e mov sb, r0 | sb = r0;
0x0006c560 b 0x6c40e | goto label_3;
| label_50:
0x0006c562 mov r0, r4 | r0 = r4;
0x0006c564 bl 0x50d48 | r0 = fcn_00050d48 (r0);
0x0006c568 mov sb, r0 | sb = r0;
0x0006c56a str r0, [sp, 0x48] | var_48h = r0;
0x0006c56c cmp r0, 0 |
| if (r0 == 0) {
0x0006c56e beq.w 0x6c354 | goto label_6;
| }
0x0006c572 b 0x6c40e | goto label_3;
| label_47:
0x0006c574 ldrb r3, [r5] | r3 = *(r5);
0x0006c576 cmp r3, 2 |
| if (r3 > 2) {
0x0006c578 bhi.w 0x6c430 | goto label_4;
| }
0x0006c57c ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0006c57e cmp r3, 0 |
| if (r3 != 0) {
0x0006c580 bne.w 0x6c308 | goto label_7;
| }
0x0006c584 ldrb r3, [r6, 0xb] | r3 = *((r6 + 0xb));
0x0006c586 cmp r3, 0 |
| if (r3 != 0) {
0x0006c588 bne.w 0x6c890 | goto label_49;
| }
0x0006c58c ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c58e lsls r6, r3, 0x1e | r6 = r3 << 0x1e;
| if (r6 < r3) {
0x0006c590 bmi 0x6c4f2 | goto label_8;
| }
0x0006c592 b 0x6c50c | goto label_9;
| label_38:
0x0006c594 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0006c596 ldrb.w fp, [r4, 0xa] | fp = *((r4 + 0xa));
0x0006c59a ldr r2, [sp, 0x28] | r2 = var_28h;
0x0006c59c add.w r0, r2, fp | r0 = r2 + fp;
| if (r3 != 0) {
0x0006c5a0 cbz r3, 0x6c5e6 |
0x0006c5a2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006c5a4 ldrd r7, r6, [r3, 0x1c] | __asm ("ldrd r7, r6, [r3, 0x1c]");
0x0006c5a8 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0006c5aa add r6, r7 | r6 += r7;
0x0006c5ac cmp r6, 0x7f |
0x0006c5ae str r3, [sp, 0x2c] | var_2ch = r3;
| if (r6 > 0x7f) {
0x0006c5b0 bhi.w 0x6ca06 | goto label_56;
| }
0x0006c5b4 movs r3, 1 | r3 = 1;
0x0006c5b6 strb.w r6, [r2, fp] | *((r2 + fp)) = r6;
| label_25:
0x0006c5ba add fp, r3 |
0x0006c5bc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006c5be ldr r1, [sp, 0x28] | r1 = var_28h;
0x0006c5c0 ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x0006c5c4 add.w r0, r1, fp | r0 = r1 + fp;
0x0006c5c8 cmp r2, 0x80 |
0x0006c5ca sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x80) {
0x0006c5ce blo.w 0x6c9fa | goto label_57;
| }
0x0006c5d2 cmp.w r2, 0x4000 |
0x0006c5d6 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x0006c5da blo.w 0x6c9ba | goto label_58;
| }
0x0006c5de bl 0x21e58 | r0 = fcn_00021e58 (r0, r1, r2);
0x0006c5e2 add fp, r0 |
0x0006c5e4 b 0x6c600 |
| } else {
0x0006c5e6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006c5e8 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0006c5ea ldr r3, [r3] | r3 = *(r3);
0x0006c5ec cmp r6, 0x7f |
0x0006c5ee str r3, [sp, 0x2c] | var_2ch = r3;
| if (r6 > 0x7f) {
0x0006c5f0 bhi.w 0x6c908 | goto label_59;
| }
| label_20:
0x0006c5f4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0006c5f6 strb.w r6, [r3, fp] | *((r3 + fp)) = r6;
0x0006c5fa movs r3, 1 | r3 = 1;
| label_21:
0x0006c5fc add fp, r3 |
0x0006c5fe mov r7, r6 | r7 = r6;
| }
| label_24:
0x0006c600 ldrh r2, [r4, 0xe] | r2 = *((r4 + 0xe));
0x0006c602 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0006c604 cmp r2, r6 |
0x0006c606 add.w sl, r3, fp | sl = r3 + fp;
0x0006c608 lsrs r3, r1, 8 | r3 = r1 >> 8;
| if (r3 >= r1) {
0x0006c60a bge.w 0x6c9d2 | goto label_60;
| }
0x0006c60e ldr.w r8, [r4, 0x34] | r8 = *((r4 + 0x34));
0x0006c612 str r2, [sp, 0x1c] | var_1ch = r2;
0x0006c614 movw r2, 0xcccd |
0x0006c618 movt r2, 0xcccc | r2 = 0xcccccccd;
0x0006c61c ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0006c61e str r2, [sp, 0x38] | var_38h = r2;
0x0006c620 ldr.w r1, [r8, 0x28] | r1 = *((r8 + 0x28));
0x0006c624 ldr.w r2, [pc, 0x4bc] |
0x0006c628 subs r0, r6, r3 | r0 = r6 - r3;
0x0006c62a str r3, [sp, 0x10] | var_10h = r3;
0x0006c62c subs r1, 4 | r1 -= 4;
0x0006c62e add r2, pc | r2 = 0xd9116;
0x0006c630 str r2, [sp, 0x34] | var_34h = r2;
0x0006c632 bl 0xc4764 | fcn_000c4764 (r0);
0x0006c636 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006c638 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006c63a str r5, [sp, 0x40] | var_40h = r5;
0x0006c63c add.w sb, r1, r3 | sb = r1 + r3;
0x0006c640 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0006c642 cmp r2, sb |
0x0006c644 it lt |
| if (r2 >= sb) {
0x0006c646 movlt sb, r3 | sb = r3;
| }
0x0006c648 movs r3, 0 | r3 = 0;
0x0006c64a str r3, [sp, 0x54] | var_54h = r3;
0x0006c64c add.w r2, fp, sb | r2 = fp + sb;
0x0006c650 str r3, [sp, 0x1c] | var_1ch = r3;
0x0006c652 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0006c654 str r2, [sp, 0x44] | var_44h = r2;
0x0006c656 str r4, [sp, 0x3c] | var_3ch = r4;
0x0006c658 add r3, r2 | r3 += r2;
0x0006c65a str r6, [sp, 0x10] | var_10h = r6;
0x0006c65c str r3, [sp, 0x24] | var_24h = r3;
0x0006c65e mov r3, sl | r3 = sl;
| label_12:
0x0006c660 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0006c662 cmp r4, sb |
0x0006c664 it ge |
| if (r4 < sb) {
0x0006c666 movge r4, sb | r4 = sb;
| }
0x0006c668 cmp r4, r7 |
| if (r4 <= r7) {
0x0006c66a ble 0x6c706 | goto label_61;
| }
| do {
0x0006c66c cmp r7, 0 |
| if (r7 <= 0) {
0x0006c66e ble 0x6c73a | goto label_62;
| }
0x0006c670 mov r0, r3 | r0 = r3;
0x0006c672 mov r2, r7 | r2 = r7;
0x0006c674 mov r1, r5 | r1 = r5;
0x0006c676 mov r4, r7 | r4 = r7;
0x0006c678 blx 0x65ac | r0 = EVP_CIPHER_CTX_free ();
0x0006c67c mov r3, r0 | r3 = r0;
| label_13:
0x0006c67e ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006c680 subs r2, r2, r4 | r2 -= r4;
0x0006c682 cmp r2, 0 |
0x0006c684 str r2, [sp, 0x10] | var_10h = r2;
| if (r2 <= 0) {
0x0006c686 ble 0x6c71c | goto label_63;
| }
| label_10:
0x0006c688 subs.w sb, sb, r4 | sb -= r4;
0x0006c68c add r5, r4 | r5 += r4;
0x0006c68e sub.w r7, r7, r4 | r7 -= r4;
| if (sb != sb) {
0x0006c692 bne 0x6c736 | goto label_64;
| }
0x0006c694 str.w sb, [sp, 0x58] | __asm ("str.w sb, [var_58h]");
0x0006c698 ldrb.w r3, [r8, 0x11] | r3 = *((r8 + 0x11));
0x0006c69c ldr r6, [sp, 0x54] | r6 = var_54h;
0x0006c69e mov r4, r6 | r4 = r6;
0x0006c6a0 cmp r3, 0 |
| if (r3 != 0) {
0x0006c6a2 bne 0x6c748 | goto label_65;
| }
| label_14:
0x0006c6a4 movs r2, 0 | r2 = 0;
0x0006c6a6 mov r3, r4 | r3 = r4;
0x0006c6a8 str r2, [sp] | *(sp) = r2;
0x0006c6aa add r1, sp, 0x58 | r1 += var_58h;
0x0006c6ac add r2, sp, 0x54 | r2 += var_54h;
0x0006c6ae mov r0, r8 | r0 = r8;
0x0006c6b0 bl 0x66bc4 | fcn_00066bc4 (r0, r1, r2, r3, r4, r5, r6);
0x0006c6b4 ldrb.w r3, [r8, 0x11] | r3 = *((r8 + 0x11));
0x0006c6b8 str r0, [sp, 0x50] | var_50h = r0;
0x0006c6ba subs r3, 0 |
0x0006c6bc it ne |
| if (r3 == 0) {
0x0006c6be movne r3, 1 | r3 = 1;
| }
0x0006c6c0 cmp r0, 0 |
0x0006c6c2 it ne |
| if (r0 == 0) {
0x0006c6c4 movne r3, 0 | r3 = 0;
| }
0x0006c6c6 cmp r3, 0 |
| if (r3 != 0) {
0x0006c6c8 bne 0x6c7b0 | goto label_66;
| }
0x0006c6ca cmp r0, 0 |
| if (r0 != 0) {
0x0006c6cc bne.w 0x6cac6 | goto label_67;
| }
0x0006c6d0 ldr r4, [sp, 0x54] | r4 = var_54h;
| label_15:
0x0006c6d2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006c6d4 rev r4, r4 | r4 = SWAP32 (r4);
0x0006c6d6 str r4, [r3] | *(r3) = r4;
0x0006c6d8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x0006c6da cbz r3, 0x6c6e2 |
0x0006c6dc ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0006c6de bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x0006c6e2 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0006c6e4 movs r3, 0 | r3 = 0;
0x0006c6e6 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0006c6e8 ldr r1, [r2, 0x38] | r1 = *((r2 + 0x38));
0x0006c6ea str r2, [sp, 0x1c] | var_1ch = r2;
0x0006c6ec str r3, [r1] | *(r1) = r3;
0x0006c6ee ldr r3, [r2, 0x38] | r3 = *((r2 + 0x38));
0x0006c6f0 ldr.w r2, [r8, 0x28] | r2 = *((r8 + 0x28));
0x0006c6f4 str r1, [sp, 0x24] | var_24h = r1;
0x0006c6f6 adds r3, 4 | r3 += 4;
0x0006c6f8 sub.w sb, r2, 4 | sb = r2 - 4;
0x0006c6fc cmp r4, sb |
0x0006c6fe it ge |
| if (r4 < sb) {
0x0006c700 movge r4, sb | r4 = sb;
| }
0x0006c702 cmp r4, r7 |
0x0006c704 bgt 0x6c66c |
| } while (r4 > r7);
| label_61:
0x0006c706 mov r2, r4 | r2 = r4;
0x0006c708 mov r0, r3 | r0 = r3;
0x0006c70a mov r1, r5 | r1 = r5;
0x0006c70c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006c710 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006c712 mov r3, r0 | r3 = r0;
0x0006c714 subs r2, r2, r4 | r2 -= r4;
0x0006c716 cmp r2, 0 |
0x0006c718 str r2, [sp, 0x10] | var_10h = r2;
| if (r2 > 0) {
0x0006c71a bgt 0x6c688 | goto label_10;
| }
| label_63:
0x0006c71c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006c71e ldrd r4, r5, [sp, 0x3c] | __asm ("ldrd r4, r5, [var_3ch]");
| if (r3 != 0) {
0x0006c722 cbz r3, 0x6c72a |
0x0006c724 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0006c726 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x0006c72a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006c72c add.w fp, r3, 4 |
0x0006c730 movs r3, 0 | r3 = 0;
0x0006c732 str r3, [sp, 0x48] | var_48h = r3;
0x0006c734 b 0x6c394 | goto label_11;
| label_64:
0x0006c736 add r3, r4 | r3 += r4;
0x0006c738 b 0x6c660 | goto label_12;
| label_62:
0x0006c73a mov r0, r3 | r0 = r3;
0x0006c73c mov r2, r4 | r2 = r4;
0x0006c73e movs r1, 0 | r1 = 0;
0x0006c740 blx 0x62ec | r0 = fcn_000062ec ();
0x0006c744 mov r3, r0 | r3 = r0;
0x0006c746 b 0x6c67e | goto label_13;
| label_65:
0x0006c748 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c74a ldr.w sb, [r8, 0x24] | sb = *((r8 + 0x24));
0x0006c74e ldr r4, [sp, 0x38] | r4 = var_38h;
0x0006c750 ldr.w sl, [r3, 0x118] | sl = *((r3 + 0x118));
0x0006c754 str r5, [sp, 0x2c] | var_2ch = r5;
0x0006c756 mov r5, r6 | r5 = r6;
0x0006c758 str r6, [sp, 0x30] | var_30h = r6;
| do {
0x0006c75a add.w fp, r5, 1 |
0x0006c75e cmp.w fp, 1 |
0x0006c762 it ls |
| if (fp > 1) {
0x0006c764 movls r1, 0 | r1 = 0;
| }
| if (fp >= 1) {
0x0006c766 bls 0x6c790 |
0x0006c768 ldr.w r1, [r8, 0x28] | r1 = *((r8 + 0x28));
0x0006c76c subs r6, r5, 1 | r6 = r5 - 1;
0x0006c76e mov r0, r6 | r0 = r6;
0x0006c770 umull r2, r1, r4, r1 | r2:r1 = r4 * r1;
0x0006c774 lsrs r1, r1, 2 | r1 >>= 2;
0x0006c776 adds r1, 1 | r1++;
0x0006c778 bl 0xc4764 | fcn_000c4764 (r0);
0x0006c77c mov r0, sl | r0 = sl;
0x0006c77e subs r6, r6, r1 | r6 -= r1;
0x0006c780 mov r1, sb | r1 = sb;
0x0006c782 bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x0006c786 adds r1, r6, 2 | r1 = r6 + 2;
0x0006c788 adds r0, 1 | r0++;
0x0006c78a cmp r1, r0 |
0x0006c78c it eq |
| if (r1 == r0) {
0x0006c78e addeq r1, r6, 3 | r1 = r6 + 3;
| goto label_68;
| }
| }
| label_68:
0x0006c790 cmp fp, r1 |
| if (fp != r1) {
0x0006c792 beq 0x6c7a0 |
0x0006c794 mov r1, sb | r1 = sb;
0x0006c796 mov r0, sl | r0 = sl;
0x0006c798 bl 0xc4508 | r0 = fcn_000c4508 (r0, r1, r2);
0x0006c79c cmp r5, r0 |
| if (r5 != r0) {
0x0006c79e bne 0x6c7a4 | goto label_69;
| }
| }
0x0006c7a0 mov r5, fp | r5 = fp;
0x0006c7a2 b 0x6c75a |
| } while (1);
| label_69:
0x0006c7a4 ldrd r5, r6, [sp, 0x2c] | __asm ("ldrd r5, r6, [var_2ch]");
0x0006c7a8 mov r4, fp | r4 = fp;
0x0006c7aa str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x0006c7ae b 0x6c6a4 | goto label_14;
| label_66:
0x0006c7b0 ldr r4, [sp, 0x54] | r4 = var_54h;
0x0006c7b2 add r2, sp, 0x50 | r2 += var_50h;
0x0006c7b4 cmp r6, 0 |
0x0006c7b6 str r2, [sp] | *(sp) = r2;
0x0006c7b8 mov r0, r8 | r0 = r8;
0x0006c7ba mov r3, r6 | r3 = r6;
0x0006c7bc ite ne |
| if (r6 == 0) {
0x0006c7be movne r2, 4 | r2 = 4;
| }
| if (r6 != 0) {
0x0006c7c0 moveq r2, 3 | r2 = 3;
| }
0x0006c7c2 mov r1, r4 | r1 = r4;
0x0006c7c4 bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x0006c7c8 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0006c7ca cmp r0, 0 |
| if (r0 == 0) {
0x0006c7cc beq 0x6c6d2 | goto label_15;
| }
0x0006c7ce ldr r3, [sp, 0x58] | r3 = var_58h;
0x0006c7d0 mov sb, r0 | sb = r0;
| if (r3 != 0) {
0x0006c7d2 cbz r3, 0x6c7da |
0x0006c7d4 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0006c7d6 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
| label_28:
0x0006c7da ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006c7dc cmp r3, 0 |
| if (r3 == 0) {
0x0006c7de beq.w 0x6c40e | goto label_3;
| }
0x0006c7e2 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0006c7e4 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x0006c7e8 b 0x6c40e | goto label_3;
| label_52:
0x0006c7ea ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c7ec mov r0, r5 | r0 = r5;
0x0006c7ee bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0006c7f2 strb r3, [r5, 1] | *((r5 + 1)) = r3;
0x0006c7f4 bl 0x688f4 | fcn_000688f4 (r0, r1, r2, r3, r4, r5, r6);
0x0006c7f8 ldr r2, [r5, 0x74] | r2 = *((r5 + 0x74));
0x0006c7fa movs r1, 1 | r1 = 1;
0x0006c7fc clz r3, r0 | r3 &= r0;
0x0006c800 mov sb, r0 | sb = r0;
0x0006c802 lsrs r3, r3, 5 | r3 >>= 5;
0x0006c804 str r0, [sp, 0x48] | var_48h = r0;
0x0006c806 strb r6, [r2, 0xc] | *((r2 + 0xc)) = r6;
0x0006c808 strb r1, [r5] | *(r5) = r1;
0x0006c80a ldr r1, [sp, 0x18] | r1 = var_18h;
0x0006c80c ands.w r3, r3, r1, lsr 1 | r3 &= (r1 >> 1);
| if (r3 == r3) {
0x0006c810 beq.w 0x6c40e | goto label_3;
| }
0x0006c814 ldrsb.w r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0006c818 cmp r3, 0 |
| if (r3 < 0) {
0x0006c81a blt 0x6c844 | goto label_70;
| }
| if (r3 == 0) {
0x0006c81c beq 0x6c838 | goto label_71;
| }
0x0006c81e add.w r4, r5, 0x74 | r4 = r5 + 0x74;
| do {
0x0006c822 ldr r3, [r4, 4]! | r3 = *((r4 += 4));
0x0006c826 adds r6, 1 | r6++;
0x0006c828 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0006c82a bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x0006c82e ldrsb.w r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0006c832 cmp r6, r3 |
0x0006c834 blt 0x6c822 |
| } while (r6 < r3);
0x0006c836 ldr r2, [r5, 0x74] | r2 = *((r5 + 0x74));
| label_71:
0x0006c838 ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x0006c83a bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x0006c83e movs r3, 0xff | r3 = 0xff;
0x0006c840 strb.w r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
| label_70:
0x0006c844 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
| if (r3 != 0) {
0x0006c846 cbz r3, 0x6c862 |
0x0006c848 ldr r4, [sp, 0x20] | r4 = var_20h;
0x0006c84a mov.w sb, 7 | sb = 7;
0x0006c84e ldrd r0, r1, [r4, 8] | __asm ("ldrd r0, r1, [r4, 8]");
0x0006c852 bl 0x28c3c | fcn_00028c3c (r0);
0x0006c856 str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
| if (r0 == 0) {
0x0006c858 cbz r0, 0x6c866 | goto label_72;
| }
0x0006c85a ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0006c85c ldr r1, [r4] | r1 = *(r4);
0x0006c85e blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x0006c862 mov.w sb, 0 | sb = 0;
| label_72:
0x0006c866 movs r3, 3 | r3 = 3;
0x0006c868 strb r3, [r5] | *(r5) = r3;
0x0006c86a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006c86c ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x0006c870 strd r2, r3, [r5, 0x38] | __asm ("strd r2, r3, [r5, 0x38]");
0x0006c874 b 0x6c40e | goto label_3;
| label_51:
0x0006c876 ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0006c878 cmp r3, 0 |
| if (r3 == 0) {
0x0006c87a beq.w 0x6c4be | goto label_16;
| }
0x0006c87e ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c880 adds r6, 1 | r6++;
0x0006c882 uxth r6, r6 | r6 = (int16_t) r6;
0x0006c884 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0006c888 strh.w r6, [r5, 0x46] | *((r5 + 0x46)) = r6;
0x0006c88c strb r3, [r5, 1] | *((r5 + 1)) = r3;
0x0006c88e b 0x6c4be | goto label_16;
| label_49:
0x0006c890 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0006c892 movs r2, 0 | r2 = 0;
0x0006c894 ldr r1, [sp, 0x20] | r1 = var_20h_2;
0x0006c896 ldr r0, [r5, 0x40] | r0 = *((r5 + 0x40));
0x0006c898 ldrd r7, r1, [r1, 8] | __asm ("ldrd r7, r1, [r1, 8]");
0x0006c89c strb r2, [r6, 0xb] | *((r6 + 0xb)) = r2;
0x0006c89e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0006c8a0 cmp r3, 0 |
| if (r3 == 0) {
0x0006c8a2 beq.w 0x6c4ec | goto label_17;
| }
0x0006c8a6 mov.w lr, 1 | lr = 1;
0x0006c8aa mov ip, r4 |
| do {
0x0006c8ac ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0006c8ae lsls r2, r2, 0x1b | r2 <<= 0x1b;
| if (r2 < r2) {
0x0006c8b0 bpl 0x6c8cc |
0x0006c8b2 strb.w lr, [r6, 0xb] |
0x0006c8b6 ldr r2, [r3, 0x40] | r2 = *((r3 + 0x40));
0x0006c8b8 cmp r0, r2 |
| if (r0 != r2) {
0x0006c8ba bne 0x6c8cc | goto label_73;
| }
0x0006c8bc ldrd r4, r2, [r3, 0x20] | __asm ("ldrd r4, r2, [r3, 0x20]");
0x0006c8c0 cmp r1, r2 |
0x0006c8c2 it eq |
| if (r1 == r2) {
0x0006c8c4 cmpeq r7, r4 | __asm ("cmpeq r7, r4");
| }
0x0006c8c6 it eq |
| if (r1 == r2) {
0x0006c8c8 strbeq lr, [r3] | goto label_73;
| }
| }
| label_73:
0x0006c8cc ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0006c8ce cmp r3, 0 |
0x0006c8d0 bne 0x6c8ac |
| } while (r3 != 0);
0x0006c8d2 mov r4, ip | r4 = ip;
0x0006c8d4 b 0x6c4ec | goto label_17;
| label_36:
0x0006c8d6 add r3, sp, 0x4c | r3 += var_2ch;
0x0006c8d8 ldr r1, [sp, 0x20] | r1 = x;
0x0006c8da str r3, [sp, 4] | var_4h_2 = r3;
0x0006c8dc mov r0, r5 | r0 = r5;
0x0006c8de ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006c8e0 ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x0006c8e4 str r3, [sp] | *(sp) = r3;
0x0006c8e6 ldrd r2, r3, [r1, 8] | __asm ("ldrd r2, r3, [r1, 8]");
0x0006c8ea ldr r1, [r1] | r1 = *(r1);
0x0006c8ec bl 0x6b65c | r0 = fcn_0006b65c (r0, r1, r2, r3, r4);
0x0006c8f0 mov sb, r0 | sb = r0;
0x0006c8f2 str r0, [sp, 0x48] | var_28h = r0;
0x0006c8f4 b 0x6c33c | goto label_18;
| label_41:
0x0006c8f6 ldr r4, [pc, 0x1f0] |
0x0006c8f8 movw r3, 0x2a4c | r3 = 0x2a4c;
0x0006c8fc ldr r2, [pc, 0x1ec] |
0x0006c8fe ldr r1, [pc, 0x1f0] |
0x0006c900 add r4, pc | r4 = 0xd93ee;
0x0006c902 add r2, pc | r2 = 0xd93f2;
0x0006c904 add r1, pc | r1 = 0xd93fa;
0x0006c906 b 0x6c4a6 | goto label_19;
| label_59:
0x0006c908 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x0006c90a cmp r6, 0x80 |
0x0006c90c sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r6 <= 0x80) {
0x0006c910 blo.w 0x6c5f4 | goto label_20;
| }
0x0006c914 cmp.w r6, 0x4000 |
0x0006c918 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r6 <= 0x4000) {
0x0006c91c blo.w 0x6ca3e | goto label_74;
| }
0x0006c920 mov r2, r6 | r2 = r6;
0x0006c922 bl 0x21e58 | r0 = fcn_00021e58 (r0, r1, r2);
0x0006c926 uxtb r3, r0 | r3 = (int8_t) r0;
0x0006c928 b 0x6c5fc | goto label_21;
| label_39:
0x0006c92a mov r3, r7 | r3 = r7;
0x0006c92c add r7, sp, 0x48 | r7 += var_48h;
0x0006c92e add r3, fp | r3 += fp;
0x0006c930 movs r2, 3 | r2 = 3;
0x0006c932 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x0006c936 mov r0, r6 | r0 = r6;
0x0006c938 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006c93a str r7, [sp] | *(sp) = r7;
0x0006c93c rev r1, r1 | r1 = SWAP32 (r1);
0x0006c93e bl 0x6723c | fcn_0006723c (r0, r1, r2, r3, r4, r5, r6);
0x0006c942 ldr.w sb, [sp, 0x48] | sb = var_48h;
0x0006c946 cmp.w sb, 0 |
| if (sb != 0) {
0x0006c94a bne.w 0x6c40e | goto label_3;
| }
0x0006c94e b 0x6c394 | goto label_11;
| label_43:
0x0006c950 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x0006c952 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0006c954 str r2, [sp] | *(sp) = r2;
0x0006c956 ldrh.w r2, [sp, 0x6a] | r2 = var_6ah;
0x0006c95a str r2, [sp, 4] | var_4h = r2;
0x0006c95c mov r2, r7 | r2 = r7;
0x0006c95e bl 0x684d8 | fcn_000684d8 (r0, r1, r2, r3);
0x0006c962 ldrh.w r2, [sp, 0x6a] | r2 = var_6ah;
0x0006c966 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006c968 str r0, [sp, 0x48] | var_48h = r0;
0x0006c96a cmp r2, fp |
0x0006c96c bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x0006c970 strb r3, [r5, 1] | *((r5 + 1)) = r3;
| if (r2 == fp) {
0x0006c972 beq 0x6ca24 | goto label_75;
| }
| label_27:
0x0006c974 mov sb, r0 | sb = r0;
0x0006c976 cmp r0, 0 |
| if (r0 != 0) {
0x0006c978 bne.w 0x6c40e | goto label_3;
| }
0x0006c97c b 0x6c3f8 | goto label_22;
| label_54:
0x0006c97e ldrh r3, [r5, 0x32] | r3 = *((r5 + 0x32));
0x0006c980 cmp r3, 0 |
| if (r3 == 0) {
0x0006c982 beq.w 0x6c34a | goto label_5;
| }
0x0006c986 ldr r2, [sp, 0x20] | r2 = var_20h_2;
0x0006c988 ldrd r3, r2, [r2, 0x1c] | __asm ("ldrd r3, r2, [r2, 0x1c]");
0x0006c98c add r3, r2 | r3 += r2;
0x0006c98e ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0006c990 cmp r2, r3 |
| if (r2 != r3) {
0x0006c992 bne.w 0x6c34a | goto label_5;
| }
0x0006c996 ldr r2, [pc, 0x15c] |
0x0006c998 ldr r3, [pc, 0x134] | r3 = *(0x6cad0);
0x0006c99a add r2, pc | r2 = 0xd9494;
0x0006c99c ldr r3, [r2, r3] | r3 = *(0xd9494);
0x0006c99e ldr r2, [r3] | r2 = *(0xd9494);
0x0006c9a0 ldr r3, [sp, 0x84] | r3 = var_84h;
0x0006c9a2 eors r2, r3 | r2 ^= r3;
0x0006c9a4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006c9a8 bne.w 0x6cac2 | goto label_46;
| }
0x0006c9ac ldr r1, [sp, 0x20] | r1 = var_20h_2;
0x0006c9ae mov r0, r5 | r0 = r5;
0x0006c9b0 add sp, 0x8c |
0x0006c9b2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006c9b6 b.w 0x6803c | goto label_23;
| label_58:
0x0006c9ba lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0006c9bc ldr r1, [sp, 0x28] | r1 = var_28h;
0x0006c9be and r2, r2, 0x7f | r2 &= 0x7f;
0x0006c9c2 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0006c9c6 strb.w r3, [r1, fp] | *((r1 + fp)) = r3;
0x0006c9ca strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x0006c9cc movs r0, 2 | r0 = 2;
0x0006c9ce add fp, r0 |
0x0006c9d0 b 0x6c600 | goto label_24;
| label_60:
0x0006c9d2 add fp, r6 |
0x0006c9d4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0006c9d6 cmp.w fp, 4 |
0x0006c9da mov r2, r7 | r2 = r7;
0x0006c9dc mov r0, sl | r0 = sl;
0x0006c9de it lt |
| if (fp >= 4) {
0x0006c9e0 movlt fp, 4 |
| }
0x0006c9e4 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006c9e8 subs r2, r6, r7 | r2 = r6 - r7;
0x0006c9ea add.w r0, sl, r7 | r0 = sl + r7;
0x0006c9ee movs r1, 0 | r1 = 0;
0x0006c9f0 blx 0x62ec | fcn_000062ec ();
0x0006c9f4 movs r3, 0 | r3 = 0;
0x0006c9f6 str r3, [sp, 0x48] | var_48h = r3;
0x0006c9f8 b 0x6c394 | goto label_11;
| label_57:
0x0006c9fa ldr r3, [sp, 0x28] | r3 = var_28h;
0x0006c9fc movs r0, 1 | r0 = 1;
0x0006c9fe strb.w r2, [r3, fp] | *((r3 + fp)) = r2;
0x0006ca02 add fp, r0 |
0x0006ca04 b 0x6c600 | goto label_24;
| label_56:
0x0006ca06 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x0006ca08 cmp.w r6, 0x4000 |
0x0006ca0c sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r6 <= 0x4000) {
0x0006ca10 blo 0x6ca54 | goto label_76;
| }
0x0006ca12 mov r2, r6 | r2 = r6;
0x0006ca14 bl 0x21e58 | r0 = fcn_00021e58 (r0, r1, r2);
0x0006ca18 uxtb r3, r0 | r3 = (int8_t) r0;
0x0006ca1a b 0x6c5ba | goto label_25;
| label_42:
0x0006ca1c ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0006ca1e ldr r2, [sp, 0x28] | r2 = var_28h;
0x0006ca20 str r3, [r2] | *(r2) = r3;
0x0006ca22 b 0x6c3cc | goto label_26;
| label_75:
0x0006ca24 ldrh.w r1, [sp, 0x68] | r1 = var_68h;
0x0006ca28 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0006ca2a cmp r1, r3 |
| if (r1 != r3) {
0x0006ca2c bne 0x6c974 | goto label_27;
| }
| label_44:
0x0006ca2e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006ca30 ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
| if (r3 != 0) {
0x0006ca32 cbz r3, 0x6ca7c |
0x0006ca34 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0006ca36 cmp r3, fp |
| if (r3 > fp) {
0x0006ca38 bgt 0x6ca7c | goto label_77;
| }
0x0006ca3a mov r2, fp | r2 = fp;
0x0006ca3c b 0x6c974 | goto label_27;
| label_74:
0x0006ca3e ldr r2, [sp, 0x28] | r2 = var_28h;
0x0006ca40 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x0006ca42 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0006ca46 strb.w r3, [r2, fp] | *((r2 + fp)) = r3;
0x0006ca4a and r3, r6, 0x7f | r3 = r6 & 0x7f;
0x0006ca4e strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x0006ca50 movs r3, 2 | r3 = 2;
0x0006ca52 b 0x6c5fc | goto label_21;
| label_76:
0x0006ca54 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0006ca56 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x0006ca58 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0006ca5c strb.w r3, [r2, fp] | *((r2 + fp)) = r3;
0x0006ca60 and r3, r6, 0x7f | r3 = r6 & 0x7f;
0x0006ca64 strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x0006ca66 movs r3, 2 | r3 = 2;
0x0006ca68 b 0x6c5ba | goto label_25;
| label_48:
0x0006ca6a ldr r4, [pc, 0x8c] |
0x0006ca6c movw r3, 0x29ad | r3 = 0x29ad;
0x0006ca70 ldr r2, [pc, 0x88] |
0x0006ca72 ldr r1, [pc, 0x8c] |
0x0006ca74 add r4, pc | r4 = 0xd9572;
0x0006ca76 add r2, pc | r2 = 0xd9576;
0x0006ca78 add r1, pc | r1 = 0xd957e;
0x0006ca7a b 0x6c4a6 | goto label_19;
| }
| label_77:
0x0006ca7c ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x0006ca7e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0006ca80 adds r2, 0xa | r2 += 0xa;
0x0006ca82 add r3, r2 | r3 += r2;
0x0006ca84 cmp r7, r3 |
| if (r7 > r3) {
0x0006ca86 blo 0x6cab0 |
0x0006ca88 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x0006ca8a add.w r3, r7, fp | r3 = r7 + fp;
0x0006ca8e cmp r2, r3 |
| if (r2 < r3) {
0x0006ca90 bhs 0x6caa4 |
0x0006ca92 ldr r4, [pc, 0x70] |
0x0006ca94 movw r3, 0x2a6a | r3 = 0x2a6a;
0x0006ca98 ldr r2, [pc, 0x6c] |
0x0006ca9a ldr r1, [pc, 0x70] |
0x0006ca9c add r4, pc | r4 = 0xd95a6;
0x0006ca9e add r2, pc | r2 = 0xd95aa;
0x0006caa0 add r1, pc | r1 = 0xd95b2;
0x0006caa2 b 0x6c4a6 | goto label_19;
| }
0x0006caa4 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0006caa6 mov r2, fp | r2 = fp;
0x0006caa8 mov r0, r7 | r0 = r7;
0x0006caaa blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006caae b 0x6c40e | goto label_3;
| }
0x0006cab0 ldr r4, [pc, 0x5c] |
0x0006cab2 movw r3, 0x2a67 | r3 = 0x2a67;
0x0006cab6 ldr r2, [pc, 0x5c] |
0x0006cab8 ldr r1, [pc, 0x5c] |
0x0006caba add r4, pc | r4 = 0xd95ce;
0x0006cabc add r2, pc | r2 = 0xd95d6;
0x0006cabe add r1, pc | r1 = 0xd95da;
0x0006cac0 b 0x6c4a6 | goto label_19;
| label_46:
0x0006cac2 blx 0x6430 | r0 = fcn_00006430 ();
| label_67:
0x0006cac6 mov sb, r0 | sb = r0;
0x0006cac8 b 0x6c7da | goto label_28;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6cd04 */
| #include <stdint.h>
|
; (fcn) fcn.0006cd04 () | void fcn_0006cd04 (int16_t arg_80h, int16_t arg_84h, arithmetic x, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_ch_2;
| int16_t var_14h_2;
| int16_t var_40h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006cd04 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006cd08 sub sp, 0x5c |
0x0006cd0a ldr r5, [pc, 0x334] |
0x0006cd0c mov r6, r0 | r6 = r0;
0x0006cd0e ldr r4, [pc, 0x334] | r4 = *(0x6d046);
0x0006cd10 add r5, pc | r5 = 0xd9d56;
0x0006cd12 ldr r0, [sp, 0x88] | r0 = *(x);
0x0006cd14 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006cd18 ldr r4, [r5, r4] |
0x0006cd1a mov r5, r2 | r5 = r2;
0x0006cd1c adds r2, r1, r2 | r2 = r1 + r2;
0x0006cd1e ldr r4, [r4] | r4 = *(0xd9d56);
0x0006cd20 str r4, [sp, 0x54] | var_54h = r4;
0x0006cd22 mov.w r4, 0 | r4 = 0;
0x0006cd26 ldr r4, [sp, 0x80] | r4 = *(arg_80h);
0x0006cd28 str r3, [sp, 0x30] | var_30h = r3;
0x0006cd2a str r1, [sp, 0x2c] | var_2ch = r1;
0x0006cd2c add r3, r4 | r3 += r4;
0x0006cd2e ldr r1, [sp, 0x84] | r1 = *(arg_84h);
0x0006cd30 str r3, [sp, 4] | var_4h = r3;
0x0006cd32 ldr r3, [pc, 0x314] |
0x0006cd34 str r2, [sp, 0xc] | var_ch = r2;
0x0006cd36 movs r2, 0 | r2 = 0;
0x0006cd38 str r2, [r1] | *(r1) = r2;
0x0006cd3a add r3, pc |
0x0006cd3c str r2, [r0] | *(r0) = r2;
0x0006cd3e ldr.w r3, [r3, 0xd0] | r3 = *(0xd9e58);
0x0006cd42 vstr d16, [sp, 0x38] | __asm ("vstr d16, [sp, 0x38]");
0x0006cd46 vstr d16, [sp, 0x40] | __asm ("vstr d16, [sp, 0x40]");
0x0006cd4a str r1, [sp, 0x1c] | var_1ch = r1;
0x0006cd4c str r0, [sp, 0x20] | var_20h = r0;
0x0006cd4e cmp r3, 0 |
| if (r3 != 0) {
0x0006cd50 bne.w 0x6cff4 | goto label_13;
| }
0x0006cd54 bl 0x25da0 | r0 = fcn_00025da0 ();
0x0006cd58 cmp r0, 0 |
| if (r0 != 0) {
0x0006cd5a bne.w 0x6cf1a | goto label_14;
| }
0x0006cd5e bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0006cd62 cmp r0, 0 |
| if (r0 != 0) {
0x0006cd64 bne.w 0x6cf1a | goto label_14;
| }
| label_9:
0x0006cd68 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x0006cd6a adds r4, r5, r4 | r4 = r5 + r4;
0x0006cd6c adc.w r1, r1, r5, asr 31 | __asm ("adc.w r1, r1, r5, asr 31");
0x0006cd70 adds.w r0, r4, 0x11 | r0 = r4 + 0x11;
0x0006cd74 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0006cd78 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0006cd7c mov fp, r0 |
0x0006cd7e cmp r0, 0 |
| if (r0 == 0) {
0x0006cd80 beq.w 0x6cf1a | goto label_14;
| }
0x0006cd84 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0006cd86 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006cd88 str r0, [sp, 0x34] | var_34h = r0;
0x0006cd8a cmp r3, r4 |
| if (r3 > r4) {
0x0006cd8c bhi.w 0x6d01a | goto label_15;
| }
0x0006cd90 movs r3, 0 | r3 = 0;
0x0006cd92 str r3, [sp, 0x2c] | var_2ch = r3;
| label_11:
0x0006cd94 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0006cd96 ldr r3, [sp, 4] | r3 = var_4h;
0x0006cd98 cmp r3, r4 |
| if (r3 > r4) {
0x0006cd9a bhi.w 0x6cffa | goto label_16;
| }
0x0006cd9e movs r4, 0 | r4 = 0;
0x0006cda0 str r4, [sp, 0x30] | var_30h = r4;
| label_10:
0x0006cda2 cmp r6, 0 |
0x0006cda4 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0006cda6 ite ne |
| if (r6 == 0) {
0x0006cda8 movne r3, -1 | r3 = -1;
| }
| if (r6 == 0) {
0x0006cdac movs r3, 1 | r3 = 1;
| }
0x0006cdae str r3, [sp, 0x14] | var_14h = r3;
0x0006cdb0 rsbs r3, r3, 0 | r3 -= ;
0x0006cdb2 str r3, [sp, 0x18] | var_18h = r3;
0x0006cdb4 add r3, sp, 0x40 | r3 += var_40h_2;
0x0006cdb6 mov.w sl, 0 | sl = 0;
0x0006cdba str r3, [sp, 8] | var_8h = r3;
0x0006cdbc add r3, sp, 0x38 | r3 += var_38h;
0x0006cdbe mov r7, sl | r7 = sl;
0x0006cdc0 mov r8, sl | r8 = sl;
0x0006cdc2 add.w sb, sp, 0x30 | sb += var_30h;
0x0006cdc6 str r3, [sp, 0x10] | var_10h = r3;
0x0006cdc8 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0006cdcc cmp r5, 0 |
| if (r5 == 0) {
0x0006cdce beq 0x6ce78 | goto label_17;
| }
| label_0:
0x0006cdd0 ldrd lr, r3, [sp, 0x3c] | __asm ("ldrd lr, r3, [var_3ch]");
0x0006cdd4 eor sl, sl, 1 | sl ^= 1;
0x0006cdd8 ldr.w ip, [sp, 0x38] | ip = var_38h;
0x0006cddc cmp r6, 0 |
0x0006cdde it eq |
| if (r6 != 0) {
0x0006cde0 orreq sl, sl, 1 | sl |= 1;
| }
0x0006cde4 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0006cde6 mov r1, r7 | r1 = r7;
0x0006cde8 mov r0, r8 | r0 = r8;
0x0006cdea cmp r3, ip |
0x0006cdec sbcs.w r7, r2, lr | __asm ("sbcs.w r7, r2, lr");
| if (r3 >= ip) {
0x0006cdf0 bge.w 0x6cf3a | goto label_18;
| }
0x0006cdf4 cmp r4, 0 |
| if (r4 == 0) {
0x0006cdf6 beq 0x6cea6 | goto label_4;
| }
0x0006cdf8 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x0006cdfc mov r7, r3 | r7 = r3;
0x0006cdfe mov r8, r2 | r8 = r2;
| label_5:
0x0006ce00 cmp.w fp, -1 |
| if (fp == -1) {
0x0006ce04 beq 0x6cea6 | goto label_4;
| }
0x0006ce06 cmp.w sl, 0 |
| if (sl == 0) {
0x0006ce0a beq 0x6ce9e | goto label_19;
| }
| label_1:
0x0006ce0c subs r1, r3, r1 | r1 = r3 - r1;
0x0006ce0e sbc.w r2, r2, r0 | __asm ("sbc.w r2, r2, r0");
| label_2:
0x0006ce12 ldr r3, [sp, 0x34] | r3 = var_34h;
| do {
0x0006ce14 lsr.w ip, r1, 7 |
0x0006ce18 orn r0, r1, 0x7f | r0 = r1 | 0x7f;
| r0 = ~r0;
0x0006ce1c uxtb.w lr, r1 | lr = (int8_t) r1;
0x0006ce20 orr.w r1, ip, r2, lsl 25 | r1 = ip | (r2 << 25);
0x0006ce24 lsrs r2, r2, 7 | r2 >>= 7;
0x0006ce26 mov ip, r3 |
0x0006ce28 strb r0, [r3], 1 | *(r3) = r0;
| r3++;
0x0006ce2c orrs.w r0, r1, r2 | r0 = r1 | r2;
0x0006ce30 bne 0x6ce14 |
| } while (r0 != r1);
0x0006ce32 strb.w lr, [ip] |
0x0006ce36 mov sl, r4 | sl = r4;
0x0006ce38 ldrb r2, [r4] | r2 = *(r4);
| if (r2 == 0) {
0x0006ce3a cbz r2, 0x6ce48 | goto label_20;
| }
| do {
0x0006ce3c and r1, r2, 0x80 | r1 = r2 & 0x80;
0x0006ce40 ldrb r2, [sl, 1]! | r2 = *((sl += 1));
0x0006ce44 orrs r1, r2 | r1 |= r2;
0x0006ce46 bne 0x6ce3c |
| } while (r1 != r2);
| label_20:
0x0006ce48 add.w sl, sl, 1 | sl++;
0x0006ce4c mov r1, r4 | r1 = r4;
0x0006ce4e sub.w r4, sl, r4 | r4 = sl - r4;
0x0006ce52 mov r0, r3 | r0 = r3;
0x0006ce54 mov r2, r4 | r2 = r4;
0x0006ce56 blx 0x65ac | r0 = EVP_CIPHER_CTX_free ();
0x0006ce5a mov r3, r0 | r3 = r0;
0x0006ce5c ldr r1, [sp, 4] | r1 = var_4h;
0x0006ce5e add r3, r4 | r3 += r4;
0x0006ce60 mov r2, r6 | r2 = r6;
0x0006ce62 strd sl, r3, [sp, 0x30] | __asm ("strd sl, r3, [var_30h]");
0x0006ce66 mov r0, sb | r0 = sb;
0x0006ce68 ldr r3, [sp, 8] | r3 = var_8h;
0x0006ce6a bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x0006ce6e ldr r4, [sp, 0x30] | r4 = var_30h;
| label_3:
0x0006ce70 mov.w sl, 1 | sl = 1;
0x0006ce74 cmp r5, 0 |
| if (r5 != 0) {
0x0006ce76 bne 0x6cdd0 | goto label_0;
| }
| label_17:
0x0006ce78 cmp r4, 0 |
| if (r4 == 0) {
0x0006ce7a beq.w 0x6cfc6 | goto label_21;
| }
0x0006ce7e ldrd lr, r3, [sp, 0x3c] | __asm ("ldrd lr, r3, [var_3ch]");
0x0006ce82 eor sl, sl, 1 | sl ^= 1;
0x0006ce86 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0006ce88 cmp r6, 0 |
0x0006ce8a it eq |
| if (r6 != 0) {
0x0006ce8c orreq sl, sl, 1 | sl |= 1;
| }
0x0006ce90 mov r1, r7 | r1 = r7;
0x0006ce92 mov r0, r8 | r0 = r8;
0x0006ce94 mov r7, r3 | r7 = r3;
0x0006ce96 mov r8, r2 | r8 = r2;
0x0006ce98 cmp.w sl, 0 |
| if (sl != 0) {
0x0006ce9c bne 0x6ce0c | goto label_1;
| }
| label_19:
0x0006ce9e subs r1, r1, r3 | r1 -= r3;
0x0006cea0 sbc.w r2, r0, r2 | __asm ("sbc.w r2, r0, r2");
0x0006cea4 b 0x6ce12 | goto label_2;
| label_4:
0x0006cea6 cmp.w sl, 0 |
| if (sl == 0) {
0x0006ceaa beq.w 0x6cfb2 | goto label_22;
| }
0x0006ceae subs.w r1, ip, r1 | r1 = ip - r1;
0x0006ceb2 sbc.w r0, lr, r0 | __asm ("sbc.w r0, lr, r0");
| label_6:
0x0006ceb6 ldr r3, [sp, 0x34] | r3 = var_34h;
| do {
0x0006ceb8 lsrs r7, r1, 7 | r7 = r1 >> 7;
0x0006ceba orn r2, r1, 0x7f | r2 = r1 | 0x7f;
| r2 = ~r2;
0x0006cebe uxtb.w r8, r1 | r8 = (int8_t) r1;
0x0006cec2 orr.w r1, r7, r0, lsl 25 | r1 = r7 | (r0 << 25);
0x0006cec6 lsrs r0, r0, 7 | r0 >>= 7;
0x0006cec8 mov r7, r3 | r7 = r3;
0x0006ceca strb r2, [r3], 1 | *(r3) = r2;
| r3++;
0x0006cece orrs.w r2, r1, r0 | r2 = r1 | r0;
0x0006ced2 bne 0x6ceb8 |
| } while (r2 != r1);
0x0006ced4 strb.w r8, [r7] | *(r7) = r8;
0x0006ced8 mov sl, r5 | sl = r5;
0x0006ceda ldrb r2, [r5] | r2 = *(r5);
| if (r2 == 0) {
0x0006cedc cbz r2, 0x6ceea | goto label_23;
| }
| do {
0x0006cede and r1, r2, 0x80 | r1 = r2 & 0x80;
0x0006cee2 ldrb r2, [sl, 1]! | r2 = *((sl += 1));
0x0006cee6 orrs r1, r2 | r1 |= r2;
0x0006cee8 bne 0x6cede |
| } while (r1 != r2);
| label_23:
0x0006ceea add.w sl, sl, 1 | sl++;
0x0006ceee mov r1, r5 | r1 = r5;
0x0006cef0 sub.w fp, sl, r5 |
0x0006cef4 mov r0, r3 | r0 = r3;
0x0006cef6 mov r2, fp | r2 = fp;
0x0006cef8 mov r7, ip | r7 = ip;
0x0006cefa mov r8, lr | r8 = lr;
0x0006cefc blx 0x65ac | r0 = EVP_CIPHER_CTX_free ();
0x0006cf00 mov r3, r0 | r3 = r0;
0x0006cf02 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006cf04 add r3, fp | r3 += fp;
0x0006cf06 mov r2, r6 | r2 = r6;
0x0006cf08 str r3, [sp, 0x34] | var_34h = r3;
0x0006cf0a add r0, sp, 0x2c | r0 += var_2ch;
0x0006cf0c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006cf0e str.w sl, [sp, 0x2c] | __asm ("str.w sl, [var_2ch]");
0x0006cf12 bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x0006cf16 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0006cf18 b 0x6ce70 | goto label_3;
| label_14:
0x0006cf1a movs r4, 7 | r4 = 7;
| label_8:
0x0006cf1c ldr r2, [pc, 0x12c] |
0x0006cf1e ldr r3, [pc, 0x124] | r3 = *(0x6d046);
0x0006cf20 add r2, pc | r2 = "Index already optimal";
0x0006cf22 ldr r3, [r2, r3] | r3 = "Index already optimal";
0x0006cf24 ldr r2, [r3] | r2 = "Index already optimal";
0x0006cf26 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0006cf28 eors r2, r3 | r2 ^= r3;
0x0006cf2a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006cf2e bne.w 0x6d03a | goto label_24;
| }
0x0006cf32 mov r0, r4 | r0 = r4;
0x0006cf34 add sp, 0x5c |
0x0006cf36 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x0006cf3a cmp lr, r2 |
0x0006cf3c it eq |
| if (lr == r2) {
0x0006cf3e cmpeq ip, r3 | __asm ("cmpeq ip, r3");
| }
| if (lr == r2) {
0x0006cf40 beq 0x6cf50 | goto label_25;
| }
0x0006cf42 cmp r4, 0 |
| if (r4 == 0) {
0x0006cf44 beq 0x6cea6 | goto label_4;
| }
0x0006cf46 ldr.w fp, [sp, 0x18] | fp = var_18h;
0x0006cf4a mov r7, r3 | r7 = r3;
0x0006cf4c mov r8, r2 | r8 = r2;
0x0006cf4e b 0x6ce00 | goto label_5;
| label_25:
0x0006cf50 cmp r4, 0 |
| if (r4 == 0) {
0x0006cf52 beq 0x6cea6 | goto label_4;
| }
| label_12:
0x0006cf54 mov r7, ip | r7 = ip;
0x0006cf56 mov r8, lr | r8 = lr;
0x0006cf58 cmp.w sl, 0 |
| if (sl == 0) {
0x0006cf5c beq 0x6cfbc | goto label_26;
| }
0x0006cf5e subs.w r1, ip, r1 | r1 = ip - r1;
0x0006cf62 sbc.w r0, lr, r0 | __asm ("sbc.w r0, lr, r0");
| label_7:
0x0006cf66 ldr r3, [sp, 0x34] | r3 = var_34h;
| do {
0x0006cf68 lsrs r4, r1, 7 | r4 = r1 >> 7;
0x0006cf6a orn r2, r1, 0x7f | r2 = r1 | 0x7f;
| r2 = ~r2;
0x0006cf6e uxtb r5, r1 | r5 = (int8_t) r1;
0x0006cf70 orr.w r1, r4, r0, lsl 25 | r1 = r4 | (r0 << 25);
0x0006cf74 lsrs r0, r0, 7 | r0 >>= 7;
0x0006cf76 mov r4, r3 | r4 = r3;
0x0006cf78 strb r2, [r3], 1 | *(r3) = r2;
| r3++;
0x0006cf7c orrs.w r2, r1, r0 | r2 = r1 | r0;
0x0006cf80 bne 0x6cf68 |
| } while (r2 != r1);
0x0006cf82 strb r5, [r4] | *(r4) = r5;
0x0006cf84 add r4, sp, 0x2c | r4 += var_2ch;
0x0006cf86 mov r2, sb | r2 = sb;
0x0006cf88 mov r1, r4 | r1 = r4;
0x0006cf8a add r0, sp, 0x34 | r0 += var_34h;
0x0006cf8c str r3, [sp, 0x34] | var_34h = r3;
0x0006cf8e bl 0x2bdf8 | r0 = fcn_0002bdf8 (r0, r1, r2);
| if (r0 != 0) {
0x0006cf92 cbnz r0, 0x6cfe0 | goto label_27;
| }
0x0006cf94 mov r0, r4 | r0 = r4;
0x0006cf96 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006cf98 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006cf9a mov r2, r6 | r2 = r6;
0x0006cf9c bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x0006cfa0 ldr r3, [sp, 8] | r3 = var_8h;
0x0006cfa2 mov r2, r6 | r2 = r6;
0x0006cfa4 ldr r1, [sp, 4] | r1 = var_4h;
0x0006cfa6 mov r0, sb | r0 = sb;
0x0006cfa8 bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x0006cfac ldrd r5, r4, [sp, 0x2c] | __asm ("ldrd r5, r4, [var_30h]");
0x0006cfb0 b 0x6ce70 | goto label_3;
| label_22:
0x0006cfb2 subs.w r1, r1, ip | r1 -= ip;
0x0006cfb6 sbc.w r0, r0, lr | __asm ("sbc.w r0, r0, lr");
0x0006cfba b 0x6ceb6 | goto label_6;
| label_26:
0x0006cfbc subs.w r1, r1, ip | r1 -= ip;
0x0006cfc0 sbc.w r0, r0, lr | __asm ("sbc.w r0, r0, lr");
0x0006cfc4 b 0x6cf66 | goto label_7;
| label_21:
0x0006cfc6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006cfc8 ldr.w fp, [sp, 0x24] | fp = var_24h;
0x0006cfcc str r4, [r3] | *(r3) = r4;
0x0006cfce str r4, [r3, 4] | *((r3 + 4)) = r4;
0x0006cfd0 sub.w r3, r3, fp | r3 -= fp;
| do {
0x0006cfd4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006cfd6 str.w fp, [r2] | __asm ("str.w fp, [r2]");
0x0006cfda ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006cfdc str r3, [r2] | *(r2) = r3;
0x0006cfde b 0x6cf1c | goto label_8;
| label_27:
0x0006cfe0 ldr.w fp, [sp, 0x24] | fp = var_24h;
0x0006cfe4 mov r4, r0 | r4 = r0;
0x0006cfe6 mov r0, fp | r0 = fp;
0x0006cfe8 mov.w fp, 0 |
0x0006cfec bl 0x26dbc | fcn_00026dbc (r0);
0x0006cff0 mov r3, fp | r3 = fp;
0x0006cff2 b 0x6cfd4 |
| } while (1);
| label_13:
0x0006cff4 dmb ish | __asm ("dmb ish");
0x0006cff8 b 0x6cd68 | goto label_9;
| label_16:
0x0006cffa mov r0, r4 | r0 = r4;
0x0006cffc add r1, sp, 0x48 | r1 += var_48h;
0x0006cffe bl 0x24184 | fcn_00024184 (r0, r1);
0x0006d002 ldr r3, [sp, 0x40] | r3 = var_40h_2;
0x0006d004 add r4, r0 | r4 += r0;
0x0006d006 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0006d008 str r4, [sp, 0x30] | var_30h = r4;
0x0006d00a adds r3, r3, r2 | r3 += r2;
0x0006d00c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0006d00e str r3, [sp, 0x40] | var_40h_2 = r3;
0x0006d010 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006d012 adc.w r3, r3, r2 | __asm ("adc.w r3, r3, r2");
0x0006d016 str r3, [sp, 0x44] | var_44h = r3;
0x0006d018 b 0x6cda2 | goto label_10;
| label_15:
0x0006d01a mov r0, r4 | r0 = r4;
0x0006d01c add r1, sp, 0x48 | r1 += var_48h;
0x0006d01e bl 0x24184 | fcn_00024184 (r0, r1);
0x0006d022 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0006d024 add r4, r0 | r4 += r0;
0x0006d026 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0006d028 str r4, [sp, 0x2c] | var_2ch = r4;
0x0006d02a adds r3, r3, r2 | r3 += r2;
0x0006d02c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0006d02e str r3, [sp, 0x38] | var_38h = r3;
0x0006d030 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0006d032 adc.w r3, r3, r2 | __asm ("adc.w r3, r3, r2");
0x0006d036 str r3, [sp, 0x3c] | var_3ch = r3;
0x0006d038 b 0x6cd94 | goto label_11;
| label_24:
0x0006d03a blx 0x6430 | fcn_00006430 ();
0x0006d03e nop |
| if (r3 == r3) {
0x0006d040 beq 0x6cf54 | goto label_12;
| }
0x0006d042 movs r7, r0 | r7 = r0;
0x0006d044 lsls r4, r6, 8 | r4 = r6 << 8;
0x0006d046 movs r0, r0 |
| if (r0 >= r0) {
0x0006d048 bpl 0x6d100 | void (*0x6d100)() ();
| }
0x0006d04a movs r7, r0 | r7 = r0;
0x0006d04c ldm r6, {r3, r4, r5, r6} | r3 = *(r6);
| r4 = *((r6 + 4));
| r5 = *((r6 + 8));
| r6 = *((r6 + 12));
0x0006d04e movs r7, r0 | r7 = r0;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6d050).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6ed28 */
| #include <stdint.h>
|
; (fcn) fcn.0006ed28 () | void fcn_0006ed28 (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0006ed28 push {r3, r4, r5, r6, r7, lr} |
0x0006ed2a mov r5, r0 | r5 = r0;
0x0006ed2c ldrd r4, r6, [r0, 8] | __asm ("ldrd r4, r6, [r0, 8]");
0x0006ed30 movs r0, 0 | r0 = 0;
0x0006ed32 cmp r1, r4 |
0x0006ed34 sbcs r0, r6 | __asm ("sbcs r0, r6");
| if (r1 >= r4) {
0x0006ed36 bhs 0x6ed7c | goto label_3;
| }
0x0006ed38 ldrb r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0006ed3a adds r4, r4, r4 | r4 += r4;
0x0006ed3c adcs r6, r6 | __asm ("adcs r6, r6");
| if (r3 == 0) {
0x0006ed3e cbz r3, 0x6ed90 | goto label_4;
| }
| do {
0x0006ed40 ldrb r3, [r5, 0x19] | r3 = *((r5 + 0x19));
0x0006ed42 movs r0, 1 | r0 = 1;
| if (r3 != 0) {
0x0006ed44 cbz r3, 0x6ed48 |
0x0006ed46 pop {r3, r4, r5, r6, r7, pc} |
| }
0x0006ed48 ldr r3, [pc, 0xec] |
0x0006ed4a add r3, pc |
0x0006ed4c ldr.w r3, [r3, 0xd0] | r3 = *(0xddc56);
0x0006ed50 cmp r3, 0 |
| if (r3 != 0) {
0x0006ed52 bne 0x6ee10 | goto label_5;
| }
0x0006ed54 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x0006ed58 cbnz r0, 0x6edbe | goto label_6;
| }
0x0006ed5a bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x0006ed5e cbnz r0, 0x6edbe | goto label_6;
| }
| label_0:
0x0006ed60 mov r0, r4 | r0 = r4;
0x0006ed62 mov r1, r6 | r1 = r6;
0x0006ed64 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0006ed68 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x0006ed6a cbz r0, 0x6edbe | goto label_6;
| }
0x0006ed6c ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0006ed6e ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0006ed70 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0006ed74 movs r3, 0 | r3 = 0;
0x0006ed76 str r7, [r5, 4] | *((r5 + 4)) = r7;
0x0006ed78 strb r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0006ed7a b 0x6edb6 | goto label_7;
| label_3:
0x0006ed7c adds.w r2, r4, 0xa | r2 = r4 + 0xa;
0x0006ed80 adc r3, r6, 0 | __asm ("adc r3, r6, 0");
0x0006ed84 adds r4, r2, r1 | r4 = r2 + r1;
0x0006ed86 adc r6, r3, 0 | __asm ("adc r6, r3, 0");
0x0006ed8a ldrb r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0006ed8c cmp r3, 0 |
0x0006ed8e bne 0x6ed40 |
| } while (r3 != 0);
| label_4:
0x0006ed90 ldr r3, [pc, 0xa8] |
0x0006ed92 ldr r7, [r5, 4] | r7 = *((r5 + 4));
0x0006ed94 add r3, pc |
0x0006ed96 ldr.w r3, [r3, 0xd0] | r3 = *(0xddca4);
| if (r3 != 0) {
0x0006ed9a cbnz r3, 0x6ee0a | goto label_8;
| }
0x0006ed9c bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x0006eda0 cbnz r0, 0x6edbe | goto label_6;
| }
0x0006eda2 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0006eda6 cbnz r0, 0x6edbe |
| while (1) {
0x0006eda8 mov r2, r4 | r2 = r4;
0x0006edaa mov r0, r7 | r0 = r7;
0x0006edac mov r3, r6 | r3 = r6;
0x0006edae bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
| if (r0 != 0) {
0x0006edb2 cbz r0, 0x6edbe |
0x0006edb4 str r0, [r5, 4] | *((r5 + 4)) = r0;
| label_7:
0x0006edb6 movs r0, 0 | r0 = 0;
0x0006edb8 strd r4, r6, [r5, 8] | __asm ("strd r4, r6, [r5, 8]");
0x0006edbc pop {r3, r4, r5, r6, r7, pc} |
| }
| label_6:
0x0006edbe ldr r4, [r5] | r4 = *(r5);
0x0006edc0 movs r3, 1 | r3 = 1;
0x0006edc2 strb r3, [r5, 0x19] | *((r5 + 0x19)) = r3;
0x0006edc4 ldr r0, [r4] | r0 = *(r4);
0x0006edc6 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x0006edc8 tst.w r2, 0x9000 |
0x0006edcc it eq |
| if ((r2 & 0x9000) == 0) {
0x0006edce strheq r3, [r0, 0x10] | __asm ("strheq r3, [r0, 0x10]");
| }
| if ((r2 & 0x9000) != 0) {
0x0006edd0 bne 0x6ee1e | goto label_9;
| }
| label_2:
0x0006edd2 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x0006edd4 movs r3, 7 | r3 = 7;
0x0006edd6 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0006edd8 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
| if (r3 == 0) {
0x0006eddc cbnz r3, 0x6ede8 |
0x0006edde ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
| if (r3 != 0) {
0x0006ede2 cbnz r3, 0x6ede8 | goto label_10;
| }
0x0006ede4 bl 0x38024 | fcn_00038024 (r0);
| }
| label_10:
0x0006ede8 ldrb r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 == 0) {
0x0006edea cbz r3, 0x6ee16 | goto label_11;
| }
| label_1:
0x0006edec vldr d16, [pc, 0x38] | __asm ("vldr d16, [0x0006ee2c]");
0x0006edf0 vldr d17, [pc, 0x3c] | __asm ("vldr d17, [0x0006ee34]");
0x0006edf4 add.w r2, r5, 0x1a | r2 = r5 + 0x1a;
0x0006edf8 movs r3, 1 | r3 = 1;
0x0006edfa movs r0, 7 | r0 = 7;
0x0006edfc str r2, [r5, 4] | *((r5 + 4)) = r2;
0x0006edfe vstr d16, [r5, 8] | __asm ("vstr d16, [r5, 8]");
0x0006ee02 vstr d17, [r5, 0x10] | __asm ("vstr d17, [r5, 0x10]");
0x0006ee06 strb r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0006ee08 pop {r3, r4, r5, r6, r7, pc} |
| label_8:
0x0006ee0a dmb ish | __asm ("dmb ish");
0x0006ee0e b 0x6eda8 |
| }
| label_5:
0x0006ee10 dmb ish | __asm ("dmb ish");
0x0006ee14 b 0x6ed60 | goto label_0;
| label_11:
0x0006ee16 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0006ee18 bl 0x26dbc | fcn_00026dbc (r0);
0x0006ee1c b 0x6edec | goto label_1;
| label_9:
0x0006ee1e bl 0x2d280 | fcn_0002d280 (r0);
0x0006ee22 ldr r0, [r4] | r0 = *(r4);
0x0006ee24 b 0x6edd2 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6ee40 */
| #include <stdint.h>
|
; (fcn) fcn.0006ee40 () | void fcn_0006ee40 (int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006ee40 cmp r1, 0 |
| if (r1 == 0) {
0x0006ee42 beq.w 0x6f00a | goto label_4;
| }
0x0006ee46 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006ee4a mov sl, r2 | sl = r2;
0x0006ee4c ldrd r3, r7, [r0, 0x10] | __asm ("ldrd r3, r7, [r0, 0x10]");
0x0006ee50 mov sb, r1 | sb = r1;
0x0006ee52 sub sp, 0x14 |
0x0006ee54 mov r4, r0 | r4 = r0;
0x0006ee56 ldrd r6, r5, [r0, 8] | __asm ("ldrd r6, r5, [r0, 8]");
0x0006ee5a adds r2, r3, 2 | r2 = r3 + 2;
0x0006ee5c adc r1, r7, 0 | __asm ("adc r1, r7, 0");
0x0006ee60 adds.w r2, r2, sl | r2 += sl;
0x0006ee64 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0006ee68 cmp r2, r6 |
0x0006ee6a sbcs r1, r5 | __asm ("sbcs r1, r5");
| if (r2 >= r6) {
0x0006ee6c bhs.w 0x6eff8 | goto label_5;
| }
| label_3:
0x0006ee70 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0006ee72 adds r1, r3, 1 | r1 = r3 + 1;
0x0006ee74 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0006ee76 adc r7, r7, 0 | __asm ("adc r7, r7, 0");
0x0006ee7a movs r1, 0x22 | r1 = 0x22;
0x0006ee7c str r7, [r4, 0x14] | *((r4 + 0x14)) = r7;
0x0006ee7e strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x0006ee80 cmp.w sl, 0 |
| if (sl == 0) {
0x0006ee84 beq.w 0x6efde | goto label_6;
| }
0x0006ee88 ldr r3, [pc, 0x180] |
0x0006ee8a movs r5, 0 | r5 = 0;
0x0006ee8c add.w r7, sl, 7 | r7 = sl + 7;
0x0006ee90 add.w sb, sb, -1 | sb += -1;
0x0006ee94 mov r8, r5 | r8 = r5;
0x0006ee96 mov.w fp, 0x5c |
0x0006ee9a add r3, pc | r3 = 0xddeaa;
0x0006ee9c str r7, [sp, 4] | var_4h = r7;
0x0006ee9e str r3, [sp, 8] | var_8h = r3;
0x0006eea0 ldr r3, [pc, 0x16c] |
0x0006eea2 add r3, pc | r3 = 0xddeb6;
0x0006eea4 str r3, [sp, 0xc] | var_ch = r3;
0x0006eea6 b 0x6ef6c |
| while (r6 != 0x5c) {
0x0006eea8 cmp r6, 0x1f |
| if (r6 <= 0x1f) {
0x0006eeaa bhi 0x6ef4e |
0x0006eeac ldr r7, [sp, 8] | r7 = var_8h;
0x0006eeae add.w ip, r7, r6 |
0x0006eeb2 ldrb.w ip, [ip, 0xd00] | ip = *((ip + 0xd00));
0x0006eeb6 cmp.w ip, 0 |
| if (ip != 0) {
0x0006eeba bne.w 0x6efca | goto label_7;
| }
0x0006eebe ldrd r7, r2, [r4, 8] | __asm ("ldrd r7, r2, [r4, 8]");
0x0006eec2 adds r1, r3, 7 | r1 = r3 + 7;
0x0006eec4 adc ip, r0, 0 | __asm ("adc ip, r0, 0");
0x0006eec8 adds.w r1, r1, sl | r1 += sl;
0x0006eecc adc ip, ip, 0 | __asm ("adc ip, ip, 0");
0x0006eed0 adds r1, r1, r5 | r1 += r5;
0x0006eed2 adc.w ip, r8, ip | __asm ("adc.w ip, r8, ip");
0x0006eed6 cmp r7, r1 |
0x0006eed8 sbcs.w ip, r2, ip | __asm ("sbcs.w ip, r2, ip");
| if (r7 <= r1) {
0x0006eedc blo 0x6efce | goto label_8;
| }
| label_2:
0x0006eede ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0006eee0 adds r1, r3, 1 | r1 = r3 + 1;
0x0006eee2 adc r0, r0, 0 | __asm ("adc r0, r0, 0");
0x0006eee6 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0006eee8 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x0006eeea mov.w ip, 0x75 |
0x0006eeee strb.w fp, [r2, r3] | *((r2 + r3)) = fp;
0x0006eef2 movs r1, 0x30 | r1 = 0x30;
0x0006eef4 ldrd r0, r3, [r4, 0x10] | __asm ("ldrd r0, r3, [r4, 0x10]");
0x0006eef8 adds r2, r0, 1 | r2 = r0 + 1;
0x0006eefa adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0006eefe str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0006ef00 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0006ef02 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006ef04 strb.w ip, [r3, r0] | *((r3 + r0)) = ip;
0x0006ef08 lsrs r0, r6, 4 | r0 = r6 >> 4;
0x0006ef0a ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0006ef0c and r6, r6, 0xf | r6 &= 0xf;
0x0006ef10 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006ef12 add r0, r1 | r0 += r1;
0x0006ef14 ldrb r6, [r3, r6] | r6 = *((r3 + r6));
0x0006ef16 adds r3, r2, 1 | r3 = r2 + 1;
0x0006ef18 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0006ef1a ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0006ef1c adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0006ef20 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0006ef22 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006ef24 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x0006ef26 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0006ef28 adds r3, r2, 1 | r3 = r2 + 1;
0x0006ef2a str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0006ef2c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0006ef2e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0006ef32 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0006ef34 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006ef36 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x0006ef38 ldrd r1, r3, [r4, 0x10] | __asm ("ldrd r1, r3, [r4, 0x10]");
0x0006ef3c adds r2, r1, 1 | r2 = r1 + 1;
0x0006ef3e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0006ef42 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0006ef44 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0006ef46 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006ef48 strb r0, [r3, r1] | *((r3 + r1)) = r0;
0x0006ef4a ldrd r2, r1, [r4, 0x10] | __asm ("ldrd r2, r1, [r4, 0x10]");
| }
| label_0:
0x0006ef4e ldr r0, [sp, 4] | r0 = var_4h;
0x0006ef50 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006ef52 subs r7, r0, 1 | r7 = r0 - 1;
0x0006ef54 adds r0, r2, 1 | r0 = r2 + 1;
0x0006ef56 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0006ef5a adds r5, 1 | r5++;
0x0006ef5c adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x0006ef60 cmp r7, 7 |
0x0006ef62 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0006ef64 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0006ef66 str r7, [sp, 4] | var_4h = r7;
0x0006ef68 strb r6, [r3, r2] | *((r3 + r2)) = r6;
| if (r7 == 7) {
0x0006ef6a beq 0x6efde | goto label_6;
| }
0x0006ef6c ldrb r6, [sb, 1]! | r6 = *((sb += 1));
0x0006ef70 ldrd r3, r0, [r4, 0x10] | __asm ("ldrd r3, r0, [r4, 0x10]");
0x0006ef74 cmp r6, 0x5c |
0x0006ef76 it ne |
| if (r6 != 0x5c) {
0x0006ef78 cmpne r6, 0x22 | __asm ("cmpne r6, 0x22");
| }
0x0006ef7a mov r2, r3 | r2 = r3;
0x0006ef7c mov r1, r0 | r1 = r0;
0x0006ef7e bne 0x6eea8 |
| }
| label_1:
0x0006ef80 adds r2, 3 | r2 += 3;
0x0006ef82 adc lr, r1, 0 | __asm ("adc lr, r1, 0");
0x0006ef86 adds.w r2, r2, sl | r2 += sl;
0x0006ef8a adc lr, lr, 0 | __asm ("adc lr, lr, 0");
0x0006ef8e subs.w ip, r2, r5 |
0x0006ef92 ldrd r1, r2, [r4, 8] | __asm ("ldrd r1, r2, [r4, 8]");
0x0006ef96 sbc.w lr, lr, r8 | __asm ("sbc.w lr, lr, r8");
0x0006ef9a cmp r1, ip |
0x0006ef9c sbcs.w lr, r2, lr | __asm ("sbcs.w lr, r2, lr");
0x0006efa0 blo 0x6efb8 |
| while (1) {
0x0006efa2 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0006efa4 adds r1, r3, 1 | r1 = r3 + 1;
0x0006efa6 adc r0, r0, 0 | __asm ("adc r0, r0, 0");
0x0006efaa str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0006efac str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x0006efae strb.w fp, [r2, r3] | *((r2 + r3)) = fp;
0x0006efb2 ldrd r2, r1, [r4, 0x10] | __asm ("ldrd r2, r1, [r4, 0x10]");
0x0006efb6 b 0x6ef4e | goto label_0;
0x0006efb8 ldr r3, [sp, 4] | r3 = var_4h;
0x0006efba mov r0, r4 | r0 = r4;
0x0006efbc subs r1, r3, 4 | r1 = r3 - 4;
0x0006efbe bl 0x6ed28 | r0 = fcn_0006ed28 (r0, r1);
| if (r0 != 0) {
0x0006efc2 cbnz r0, 0x6eff2 | goto label_9;
| }
0x0006efc4 ldrd r3, r0, [r4, 0x10] | __asm ("ldrd r3, r0, [r4, 0x10]");
0x0006efc8 b 0x6efa2 |
| }
| label_7:
0x0006efca mov r6, ip | r6 = ip;
0x0006efcc b 0x6ef80 | goto label_1;
| label_8:
0x0006efce ldr r1, [sp, 4] | r1 = var_4h;
0x0006efd0 mov r0, r4 | r0 = r4;
0x0006efd2 bl 0x6ed28 | r0 = fcn_0006ed28 (r0, r1);
| if (r0 != 0) {
0x0006efd6 cbnz r0, 0x6eff2 | goto label_9;
| }
0x0006efd8 ldrd r3, r0, [r4, 0x10] | __asm ("ldrd r3, r0, [r4, 0x10]");
0x0006efdc b 0x6eede | goto label_2;
| label_6:
0x0006efde ldrd r3, r2, [r4, 0x10] | __asm ("ldrd r3, r2, [r4, 0x10]");
0x0006efe2 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0006efe4 adds r0, r3, 1 | r0 = r3 + 1;
0x0006efe6 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0006efe8 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0006efec movs r0, 0x22 | r0 = 0x22;
0x0006efee str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0006eff0 strb r0, [r1, r3] | *((r1 + r3)) = r0;
| do {
| label_9:
0x0006eff2 add sp, 0x14 |
0x0006eff4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x0006eff8 add.w r1, sl, 2 | r1 = sl + 2;
0x0006effc bl 0x6ed28 | r0 = fcn_0006ed28 (r0, r1);
0x0006f000 cmp r0, 0 |
0x0006f002 bne 0x6eff2 |
| } while (r0 != 0);
0x0006f004 ldrd r3, r7, [r4, 0x10] | __asm ("ldrd r3, r7, [r4, 0x10]");
0x0006f008 b 0x6ee70 | goto label_3;
| label_4:
0x0006f00a bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x6f694 */
| #include <stdint.h>
|
; (fcn) fcn.0006f694 () | void fcn_0006f694 (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006f694 ldr r3, [r0, 0x30] | r3 = *((r0 + 0x30));
0x0006f696 push.w {r4, r5, r6, r7, r8, lr} |
0x0006f69a mov r7, r0 | r7 = r0;
0x0006f69c mov r4, r2 | r4 = r2;
0x0006f69e mov r6, r1 | r6 = r1;
0x0006f6a0 ldr.w r5, [r3, r2, lsl 2] | offset_0 = r2 << 2;
| r5 = *((r3 + offset_0));
| if (r5 == 0) {
0x0006f6a4 cbz r5, 0x6f6d8 | goto label_2;
| }
0x0006f6a6 mov r2, r5 | r2 = r5;
0x0006f6a8 bl 0x6f694 | fcn_0006f694 (r0, r1, r2);
| do {
| label_0:
0x0006f6ac ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x0006f6ae add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0006f6b2 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0006f6b6 lsls r5, r5, 2 | r5 <<= 2;
0x0006f6b8 add.w r3, r2, r4, lsl 2 | r3 = r2 + (r4 << 2);
0x0006f6bc adds r1, r2, r5 | r1 = r2 + r5;
0x0006f6be ldrb r2, [r2, r5] | r2 = *((r2 + r5));
0x0006f6c0 cmp r2, 6 |
| if (r2 == 6) {
0x0006f6c2 beq 0x6f6fa | goto label_3;
| }
0x0006f6c4 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0006f6c6 mov r0, r6 | r0 = r6;
0x0006f6c8 pop.w {r4, r5, r6, r7, r8, lr} |
0x0006f6cc lsls r2, r2, 0x19 | r2 <<= 0x19;
0x0006f6ce it pl |
| if (r2 < r2) {
0x0006f6d0 subpl r3, 0xc | r3 -= 0xc;
| }
0x0006f6d2 ldrd r1, r2, [r3, 4] | __asm ("ldrd r1, r2, [r3, 4]");
0x0006f6d6 b 0x6f2bc | void (*0x6f2bc)() ();
| label_2:
0x0006f6d8 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x0006f6da ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x0006f6dc ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0006f6de ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0006f6e0 cmp r3, r0 |
0x0006f6e2 sbcs.w r1, r2, r1 | __asm ("sbcs.w r1, r2, r1");
| if (r3 >= r0) {
0x0006f6e6 bhs 0x6f70a | goto label_4;
| }
| label_1:
0x0006f6e8 adds r0, r3, 1 | r0 = r3 + 1;
0x0006f6ea ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0006f6ec adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0006f6f0 str r0, [r6, 0x10] | *((r6 + 0x10)) = r0;
0x0006f6f2 str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x0006f6f4 movs r2, 0x24 | r2 = 0x24;
0x0006f6f6 strb r2, [r1, r3] | *((r1 + r3)) = r2;
0x0006f6f8 b 0x6f6ac |
| } while (1);
| label_3:
0x0006f6fa ldr r2, [pc, 0x20] |
0x0006f6fc movs r0, 0x1e | r0 = 0x1e;
0x0006f6fe ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0006f700 mov r1, r6 | r1 = r6;
0x0006f702 pop.w {r4, r5, r6, r7, r8, lr} |
0x0006f706 add r2, pc | r2 = 0xdee28;
0x0006f708 b 0x6f214 | void (*0x6f214)() ();
| label_4:
0x0006f70a movs r1, 1 | r1 = 1;
0x0006f70c mov r0, r6 | r0 = r6;
0x0006f70e bl 0x6ed28 | r0 = fcn_0006ed28 (r0, r1);
0x0006f712 cmp r0, 0 |
| if (r0 != 0) {
0x0006f714 bne 0x6f6ac | goto label_0;
| }
0x0006f716 ldrd r3, r2, [r6, 0x10] | __asm ("ldrd r3, r2, [r6, 0x10]");
0x0006f71a b 0x6f6e8 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x704b4 */
| #include <stdint.h>
|
; (fcn) fcn.000704b4 () | void fcn_000704b4 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x000704b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000704b8 mov r5, r1 | r5 = r1;
0x000704ba ldr.w r1, [pc, 0x494] |
0x000704be ldr.w r2, [pc, 0x494] | r2 = *(0x70956);
0x000704c2 vpush {d8} | __asm ("vpush {d8}");
0x000704c6 add r1, pc | r1 = 0xe0e1c;
0x000704c8 ldrb r3, [r0] | r3 = *(r0);
0x000704ca sub sp, 0x34 |
0x000704cc ldr r2, [r1, r2] |
0x000704ce subs r3, 1 | r3--;
0x000704d0 ldr r2, [r2] | r2 = *(0xe0e1c);
0x000704d2 str r2, [sp, 0x2c] | var_2ch = r2;
0x000704d4 mov.w r2, 0 | r2 = 0;
0x000704d8 cmp r3, 6 |
| if (r3 > 6) {
0x000704da bhi.w 0x7091c | goto label_3;
| }
| /* switch table (7 cases) at 0x704e2 */
0x000704de tbb [pc, r3] | __asm ("tbb [0x000704e4]");
0x000704ea ldr.w r2, [pc, 0x46c] |
0x000704ee ldr.w r3, [pc, 0x464] | r3 = *(0x70956);
0x000704f2 add r2, pc | r2 = 0xe0e50;
0x000704f4 ldr r3, [r2, r3] | r3 = *(0xe0e50);
0x000704f6 ldr r2, [r3] | r2 = *(0xe0e50);
0x000704f8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000704fa eors r2, r3 | r2 ^= r3;
0x000704fc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00070500 bne.w 0x707b6 | void (*0x707b6)() ();
| }
0x00070504 movs r2, 0 | r2 = 0;
0x00070506 mov r1, r5 | r1 = r5;
0x00070508 add sp, 0x34 |
0x0007050a vpop {d8} | __asm ("vpop {d8}");
0x0007050e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00070512 b 0x6fe5c | void (*0x6fe5c)() ();
0x00070514 ldr r0, [r5] | r0 = *(r5);
0x00070516 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00070518 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) != 0) {
0x0007051c bne.w 0x7079e | goto label_4;
| }
0x0007051e strh r7, [r7, 8] | *((r7 + 8)) = r7;
0x00070520 movs r4, 1 | r4 = 1;
0x00070522 movs r5, 0 | r5 = 0;
0x00070524 movs r3, 4 | r3 = 4;
0x00070526 strd r4, r5, [r0] | __asm ("strd r4, r5, [r0]");
0x0007052a strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00070550 ldr r0, [r5] | r0 = *(r5);
0x00070552 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00070554 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) != 0) {
0x00070558 bne.w 0x70776 | goto label_5;
| }
0x0007055c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00070560 movs r3, 4 | r3 = 4;
0x00070562 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00070564 vstr d16, [r0] | __asm ("vstr d16, [r0]");
0x00070568 b 0x7052c | void (*0x7052c)() ();
0x0007056a ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x0007056c ldrb r1, [r4] | r1 = *(r4);
0x0007056e cmp r1, 0x2d |
| if (r1 == 0x2d) {
0x00070570 beq.w 0x70762 | goto label_6;
| }
0x00070574 sub.w r6, r1, 0x30 | r6 = r1 - 0x30;
0x00070578 uxtb r3, r6 | r3 = (int8_t) r6;
0x0007057a cmp r3, 9 |
0x0007057c it ls |
| if (r3 > 9) {
0x0007057e movls r7, r4 | r7 = r4;
| }
| if (r3 > 9) {
0x00070580 bhi.w 0x70770 | goto label_7;
| }
| label_1:
0x00070584 movs r2, 0 | r2 = 0;
0x00070586 movw ip, 0xcccc |
0x0007058a adds r7, 1 | r7++;
0x0007058c movt ip, 0xccc | ip = 0xccccccc;
0x00070590 mov r3, r2 | r3 = r2;
0x00070592 mov.w lr, -0x33333334 | lr = -0x33333334;
| label_0:
0x00070596 cmp.w r2, -0x33333334 |
0x0007059a sbcs.w r0, r3, ip | __asm ("sbcs.w r0, r3, ip");
| if (r2 < -0x33333334) {
0x0007059e blt 0x70648 | goto label_8;
| }
0x000705e2 ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x000705e4 mov r2, r4 | r2 = r4;
| if (r4 == 0) {
0x000705e6 cbz r4, 0x705f2 | void (*0x705f2)() ();
| }
0x00070624 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x00070626 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00070628 ldr.w r8, [r0, 8] | r8 = *((r0 + 8));
0x0007062c lsls r3, r3, 0x1e | r3 <<= 0x1e;
0x0007062e str r2, [sp, 0xc] | var_ch = r2;
| if (r3 < r3) {
0x00070630 bmi 0x7067c | goto label_9;
| }
0x00070632 mov.w r4, -1 | r4 = -1;
0x00070636 movs r3, 1 | r3 = 1;
0x00070638 subs r2, 2 | r2 -= 2;
0x0007063a add.w r1, r8, r3 | r1 = r8 + r3;
0x0007063e mov r0, r5 | r0 = r5;
0x00070640 str r4, [sp] | *(sp) = r4;
0x00070642 bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x00070646 b 0x7052c | void (*0x7052c)() ();
| label_8:
0x00070648 lsl.w r8, r3, 2 | r8 = r3 << 2;
0x0007064c lsls r0, r2, 2 | r0 = r2 << 2;
0x0007064e orr.w r8, r8, r2, lsr 30 | r8 |= (r2 >> 30);
0x00070652 adds r2, r0, r2 | r2 = r0 + r2;
0x00070654 ldrb r0, [r7], 1 | r0 = *(r7);
| r7++;
0x00070658 adc.w r8, r3, r8 | __asm ("adc.w r8, r3, r8");
0x0007065c adds r2, r2, r2 | r2 += r2;
0x0007065e adc.w r8, r8, r8 | __asm ("adc.w r8, r8, r8");
0x00070662 adds r2, r6, r2 | r2 = r6 + r2;
0x00070664 adc.w r3, r8, r6, asr 31 | __asm ("adc.w r3, r8, r6, asr 31");
0x00070668 sub.w r6, r0, 0x30 | r6 = r0 - 0x30;
0x0007066c uxtb r0, r6 | r0 = (int8_t) r6;
0x0007066e cmp r0, 9 |
| if (r0 < 9) {
0x00070670 bls 0x70596 | goto label_0;
| }
0x00070672 b 0x705c6 | void (*0x705c6)() ();
| label_9:
0x0007067c ldr r4, [sp, 0xc] | r4 = var_ch;
0x0007067e adds r0, r4, 1 | r0 = r4 + 1;
0x00070680 bl 0x5c718 | r0 = fcn_0005c718 (r0);
0x00070684 mov sb, r0 | sb = r0;
0x00070686 cmp r0, 0 |
| if (r0 == 0) {
0x00070688 beq.w 0x70826 | goto label_10;
| }
0x0007068c add.w sl, r4, -1 | sl = r4 + -1;
0x00070690 cmp.w sl, 1 |
0x00070694 itt ls |
| if (sl > 1) {
0x00070696 movls r7, r0 | r7 = r0;
| }
| if (sl <= 1) {
0x00070698 movls r2, 0 | r2 = 0;
| goto label_11;
| }
| if (sl < 1) {
| label_11:
0x0007069a bls 0x7072c | void (*0x7072c)() ();
| }
0x0007069c movs r6, 0 | r6 = 0;
0x0007069e movs r4, 1 | r4 = 1;
0x000706a0 b 0x706ac | void (*0x706ac)() ();
| label_6:
0x00070762 ldrb r6, [r4, 1] | r6 = *((r4 + 1));
0x00070764 adds r7, r4, 1 | r7 = r4 + 1;
0x00070766 subs r6, 0x30 | r6 -= 0x30;
0x00070768 uxtb r3, r6 | r3 = (int8_t) r6;
0x0007076a cmp r3, 9 |
| if (r3 < 9) {
0x0007076c bls.w 0x70584 | goto label_1;
| }
| label_7:
0x00070770 movs r2, 0 | r2 = 0;
0x00070772 mov r3, r2 | r3 = r2;
0x00070774 b 0x705cc | void (*0x705cc)() ();
| label_5:
0x00070776 ldr r2, [pc, 0x1ec] |
0x00070778 ldr r3, [pc, 0x1d8] | r3 = *(0x70954);
0x0007077a add r2, pc | r2 = 0xe10e4;
0x0007077c ldr r3, [r2, r3] | r3 = *(0xe10e4);
0x0007077e ldr r2, [r3] | r2 = *(0xe10e4);
0x00070780 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00070782 eors r2, r3 | r2 ^= r3;
0x00070784 mov.w r3, 0 | r3 = 0;
0x00070788 it eq |
| if (r2 == r3) {
0x0007078a moveq r2, 0 | r2 = 0;
| goto label_12;
| }
| if (r2 != r3) {
| label_12:
0x0007078c bne 0x707b6 | void (*0x707b6)() ();
| }
| do {
0x0007078e movs r3, 0 | r3 = 0;
| label_4:
0x0007079e ldr r2, [pc, 0x1c8] |
0x000707a0 ldr r3, [pc, 0x1b0] | r3 = *(0x70954);
0x000707a2 add r2, pc | r2 = 0xe1110;
0x000707a4 ldr r3, [r2, r3] | r3 = *(0xe1110);
0x000707a6 ldr r2, [r3] | r2 = *(0xe1110);
0x000707a8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000707aa eors r2, r3 | r2 ^= r3;
0x000707ac mov.w r3, 0 | r3 = 0;
0x000707b0 it eq |
| if (r2 != r3) {
0x000707b2 moveq r2, 1 | r2 = 1;
| }
0x000707b4 beq 0x7078e |
| } while (r2 == r3);
| label_10:
0x00070826 ldr r0, [r5] | r0 = *(r5);
0x00070828 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0007082a tst.w r3, 0x9000 |
0x0007082e itt eq |
| if ((r3 & 0x9000) != 0) {
0x00070830 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x9000) == 0) {
0x00070832 strheq r3, [r0, 0x10] | __asm ("strheq r3, [r0, 0x10]");
| }
| if ((r3 & 0x9000) != 0) {
0x00070834 bne 0x708f4 | goto label_13;
| }
| label_2:
0x00070836 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x00070838 movs r3, 7 | r3 = 7;
0x0007083a str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x0007083c ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x00070840 cmp r3, 0 |
| if (r3 != 0) {
0x00070842 bne.w 0x7052c | void (*0x7052c)() ();
| }
0x00070846 ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x0007084a cmp r3, 0 |
| if (r3 != 0) {
0x0007084c bne.w 0x7052c | void (*0x7052c)() ();
| }
0x00070850 ldr r2, [pc, 0x11c] |
0x00070852 ldr r3, [pc, 0x100] | r3 = *(0x70956);
0x00070854 add r2, pc | r2 = 0xe11c8;
0x00070856 ldr r3, [r2, r3] | r3 = *(0xe11c8);
0x00070858 ldr r2, [r3] | r2 = *(0xe11c8);
0x0007085a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007085c eors r2, r3 | r2 ^= r3;
0x0007085e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00070862 bne 0x707b6 | void (*0x707b6)() ();
| }
0x00070864 add sp, 0x34 |
0x00070866 vpop {d8} | __asm ("vpop {d8}");
0x0007086a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007086e b.w 0x38024 | void (*0x38024)() ();
| label_13:
0x000708f4 bl 0x2d280 | fcn_0002d280 (r0);
0x000708f8 ldr r0, [r5] | r0 = *(r5);
0x000708fa b 0x70836 | goto label_2;
| label_3:
0x0007091c ldr r0, [r5] | r0 = *(r5);
0x0007091e ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00070920 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x00070924 bne 0x7092c |
0x00070926 movs r3, 1 | r3 = 1;
0x00070928 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x0007092a b 0x7052c | void (*0x7052c)() ();
| }
0x0007092c ldr r2, [pc, 0x48] |
0x0007092e ldr r3, [pc, 0x24] | r3 = *(0x70956);
0x00070930 add r2, pc | r2 = "zzzzyyxxxwt";
0x00070932 ldr r3, [r2, r3] | r3 = "zzzzyyxxxwt";
0x00070934 ldr r2, [r3] | r2 = "zzzzyyxxxwt";
0x00070936 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00070938 eors r2, r3 | r2 ^= r3;
0x0007093a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007093e bne.w 0x707b6 | void (*0x707b6)() ();
| }
0x00070942 add sp, 0x34 |
0x00070944 vpop {d8} | __asm ("vpop {d8}");
0x00070948 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007094c b.w 0x2d280 | return void (*0x2d280)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x705cc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000705cc () | void fcn_000705cc (int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_2ch;
| r2 = arg3;
| r3 = arg4;
0x000705cc ldr r0, [r5] | r0 = *(r5);
0x000705ce ldrh r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x000705d0 tst.w r1, 0x9000 |
| if ((r1 & 0x9000) != 0) {
0x000705d4 bne.w 0x70810 | goto label_4;
| }
0x000705d8 movs r1, 4 | r1 = 4;
0x000705da strd r2, r3, [r0] | __asm ("strd r2, r3, [r0]");
0x000705de strh r1, [r0, 0x10] | *((r0 + 0x10)) = r1;
0x000705e0 b 0x7052c | void (*0x7052c)() ();
| do {
| label_3:
0x000706a6 adds r4, 1 | r4++;
0x000706a8 cmp r4, sl |
| if (r4 < sl) {
0x000706aa bhs 0x70726 |
| }
0x00070726 add.w r7, sb, r6 | r7 = sb + r6;
0x0007072a mov r2, r6 | r2 = r6;
0x0007072c ldr r4, [pc, 0x230] |
0x0007072e movs r3, 0 | r3 = 0;
0x00070730 strb r3, [r7] | *(r7) = r3;
0x00070732 mov r1, sb | r1 = sb;
0x00070734 movs r3, 1 | r3 = 1;
0x00070736 mov r0, r5 | r0 = r5;
0x00070738 add r4, pc | r4 = 0xe109c;
0x0007073a str r4, [sp] | *(sp) = r4;
0x0007073c bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x00070740 b 0x7052c | void (*0x7052c)() ();
| label_0:
0x00070790 add sp, 0x34 |
0x00070792 vpop {d8} | __asm ("vpop {d8}");
0x00070796 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007079a b.w 0x2d2d8 | void (*0x2d2d8)() ();
| label_1:
0x000707b6 blx 0x6430 | r0 = fcn_00006430 ();
0x000707ba and ip, r0, 0xfc00 |
0x000707be adds r0, r6, 3 | r0 = r6 + 3;
0x000707c0 cmp.w ip, 0xd800 |
0x000707c4 str r0, [sp, 0x10] | var_10h = r0;
| if (ip == 0xd800) {
0x000707c6 beq 0x70872 | goto label_5;
| }
| label_2:
0x000707c8 mov r4, r3 | r4 = r3;
0x000707ca lsr.w r3, fp, 0xc | r3 = fp >> 0xc;
0x000707ce ubfx r0, fp, 6, 6 | r0 = (fp >> 6) & ((1 << 6) - 1);
0x000707d2 ldr r6, [sp, 0x10] | r6 = var_10h;
0x000707d4 orn r3, r3, 0x1f | r3 |= 0x1f;
| r3 = ~r3;
0x000707d8 orn r0, r0, 0x7f | r0 |= 0x7f;
| r0 = ~r0;
0x000707dc strb r3, [r7] | *(r7) = r3;
0x000707de and r3, fp, 0x3f | r3 = fp & 0x3f;
0x000707e2 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x000707e6 strb.w r0, [sb, r2] | *((sb + r2)) = r0;
0x000707ea strb.w r3, [sb, r1] | *((sb + r1)) = r3;
0x000707ee b 0x706a6 |
| } while (1);
| label_4:
0x00070810 ldr r4, [pc, 0x158] |
0x00070812 ldr r1, [pc, 0x140] | r1 = *(0x70956);
0x00070814 add r4, pc | r4 = 0xe1184;
0x00070816 ldr r1, [r4, r1] | r1 = *(0xe1184);
0x00070818 ldr r4, [r1] | r4 = *(0xe1184);
0x0007081a ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0007081c eors r4, r1 | r4 ^= r1;
0x0007081e mov.w r1, 0 | r1 = 0;
| if (r4 == r1) {
0x00070822 beq 0x70790 | goto label_0;
| }
0x00070824 b 0x707b6 | goto label_1;
| label_5:
0x00070872 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00070874 subs r0, 6 | r0 -= 6;
0x00070876 cmp r3, r0 |
| if (r3 >= r0) {
0x00070878 bhs 0x707c8 | goto label_2;
| }
0x0007087a add.w r0, r8, r4 | r0 = r8 + r4;
0x0007087e ldrb.w ip, [r0, 6] | ip = *((r0 + 6));
0x00070882 cmp.w ip, 0x5c |
| if (ip != 0x5c) {
0x00070886 bne 0x707c8 | goto label_2;
| }
0x00070888 ldrb r0, [r0, 7] | r0 = *((r0 + 7));
0x0007088a cmp r0, 0x75 |
| if (r0 != 0x75) {
0x0007088c bne 0x707c8 | goto label_2;
| }
0x0007088e add.w r0, r4, 8 | r0 = r4 + 8;
0x00070892 strd r1, r2, [sp, 0x18] | __asm ("strd r1, r2, [sp, 0x18]");
0x00070896 add r0, r8 | r0 += r8;
0x00070898 str r3, [sp, 0x14] | var_14h = r3;
0x0007089a bl 0x24a68 | r0 = fcn_00024a68 (r0);
0x0007089e and ip, r0, 0xfc00 |
0x000708a2 ldrd r3, r1, [sp, 0x14] | __asm ("ldrd r3, r1, [var_14h]");
0x000708a6 cmp.w ip, 0xdc00 |
0x000708aa ldr r2, [sp, 0x1c] | r2 = var_1ch;
| if (ip != 0xdc00) {
0x000708ac bne 0x707c8 | goto label_2;
| }
0x000708ae mov.w r3, 0xfc00 | r3 = 0xfc00;
0x000708b2 ubfx r0, r0, 0, 0xa | r0 = (r0 >> 0) & ((1 << 0xa) - 1);
0x000708b6 movt r3, 0xf | r3 = (r3 & 0xFFFF) | 0xf0000;
0x000708ba movs r2, 0 | r2 = 0;
0x000708bc and.w r3, r3, fp, lsl 10 | r3 &= (fp << 10);
0x000708c0 adds r4, 0xb | r4 += 0xb;
0x000708c2 adds r6, 4 | r6 += 4;
0x000708c4 orrs r3, r0 | r3 |= r0;
0x000708c6 add.w r3, r3, 0x10000 | r3 += 0x10000;
0x000708ca lsrs r1, r3, 0x12 | r1 = r3 >> 0x12;
0x000708cc bfi r2, r1, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x000708d0 ubfx r1, r3, 0xc, 6 | r1 = (r3 >> 0xc) & ((1 << 6) - 1);
0x000708d4 bfi r2, r1, 8, 8 | value_2 = BIT_MASK (8, 8);
| value_3 = r1 & value_2;
| value_2 = ~value_2;
| r2 &= value_2;
| r2 |= value_3;
0x000708d8 ubfx r1, r3, 6, 6 | r1 = (r3 >> 6) & ((1 << 6) - 1);
0x000708dc bfi r2, r1, 0x10, 8 | value_4 = BIT_MASK (0x10, 8);
| value_5 = r1 & value_4;
| value_4 = ~value_4;
| r2 &= value_4;
| r2 |= value_5;
0x000708e0 and r3, r3, 0x3f | r3 &= 0x3f;
0x000708e4 bfi r2, r3, 0x18, 8 | value_6 = BIT_MASK (0x18, 8);
| value_7 = r3 & value_6;
| value_6 = ~value_6;
| r2 &= value_6;
| r2 |= value_7;
0x000708e8 orr r2, r2, 0x80808080 | r2 |= 0x80808080;
0x000708ec orr r2, r2, 0x70 | r2 |= 0x70;
0x000708f0 str r2, [r7] | *(r7) = r2;
0x000708f2 b 0x706a6 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x70bc0 */
| #include <stdint.h>
|
; (fcn) fcn.00070bc0 () | void fcn_00070bc0 (int16_t arg_90h, int16_t arg_168h, int16_t arg_318h, int16_t arg_320h, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_4h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_2ch;
| int16_t var_30h_2;
| int16_t var_34h_2;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00070bc0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00070bc4 mov r5, r1 | r5 = r1;
0x00070bc6 ldr r1, [pc, 0x2dc] |
0x00070bc8 mov r8, r2 | r8 = r2;
0x00070bca sub sp, 0x6c |
0x00070bcc mov r7, r3 | r7 = r3;
0x00070bce ldr r2, [pc, 0x2d8] | r2 = *(0x70eaa);
0x00070bd0 add r1, pc | r1 = 0xe1a7a;
0x00070bd2 ldr r4, [sp, 0x90] | r4 = *(arg_90h);
0x00070bd4 ldr r2, [r1, r2] |
0x00070bd6 ldr r2, [r2] | r2 = *(0xe1a7a);
0x00070bd8 str r2, [sp, 0x64] | var_64h = r2;
0x00070bda mov.w r2, 0 | r2 = 0;
0x00070bde cmp r3, 0 |
| if (r3 == 0) {
0x00070be0 beq.w 0x70e74 | goto label_19;
| }
0x00070be4 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00070be6 cmp r3, 0 |
| if (r3 < 0) {
0x00070be8 blt 0x70cc0 | goto label_20;
| }
0x00070bea ldr.w sl, [r5] | sl = *(r5);
0x00070bee cmp.w sl, 0 |
| if (sl == 0) {
0x00070bf2 beq.w 0x70e90 | goto label_21;
| }
0x00070bf6 cmp r3, r8 |
0x00070bf8 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00070bfa itt lt |
| if (r3 >= r8) {
0x00070bfc sublt r3, r8, r3 | r3 = r8 - r3;
| }
| if (r3 < r8) {
0x00070c00 str r3, [sp, 0x1c] | var_1ch = r3;
| }
| if (r3 >= r8) {
0x00070c02 blt 0x70c16 |
0x00070c04 mov r6, r2 | r6 = r2;
0x00070c06 mov r1, sl | r1 = sl;
0x00070c08 mov r2, r4 | r2 = r4;
0x00070c0a mov sl, r7 | sl = r7;
0x00070c0c mov r4, r6 | r4 = r6;
0x00070c0e mov r7, r1 | r7 = r1;
0x00070c10 sub.w r3, r3, r8 | r3 -= r8;
0x00070c14 str r3, [sp, 0x1c] | var_1ch = r3;
| }
0x00070c16 ldrb.w r6, [r0, 0xef] | r6 = *(arg_90hxef);
0x00070c1a add.w r3, sl, r2 | r3 = sl + r2;
0x00070c1e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00070c22 add.w fp, r7, r4 |
0x00070c26 str r3, [sp, 0xc] | var_ch = r3;
0x00070c28 strd sl, r7, [sp, 0x3c] | __asm ("strd sl, r7, [var_3ch]");
0x00070c2c vstr d16, [sp, 0x48] | __asm ("vstr d16, [sp, 0x48]");
0x00070c30 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x00070c34 cmp r6, 0 |
| if (r6 == 0) {
0x00070c36 beq 0x70cec | goto label_22;
| }
0x00070c38 ldr r3, [pc, 0x270] |
0x00070c3a add r3, pc |
0x00070c3c ldr.w r3, [r3, 0xd0] | r3 = *(0xe1bba);
0x00070c40 cmp r3, 0 |
| if (r3 != 0) {
0x00070c42 bne.w 0x70dba | goto label_23;
| }
0x00070c46 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00070c4a cmp r0, 0 |
| if (r0 != 0) {
0x00070c4c bne.w 0x70e9c | goto label_24;
| }
0x00070c4e strh r6, [r4, 8] | *((r4 + 8)) = r6;
0x00070c50 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00070c54 cmp r0, 0 |
| if (r0 != 0) {
0x00070c56 bne.w 0x70e9c | goto label_24;
| }
| label_4:
0x00070c5a asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x00070c5c adds.w r0, r4, 0xa | r0 = r4 + 0xa;
0x00070c60 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00070c64 bl 0x28c3c | fcn_00028c3c (r0);
0x00070c68 str r0, [sp, 0x20] | var_20h = r0;
0x00070c6a cmp r0, 0 |
| if (r0 == 0) {
0x00070c6c beq.w 0x70e9c | goto label_24;
| }
0x00070c70 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00070c72 ldrd r4, sb, [sp, 0x3c] | __asm ("ldrd r4, sb, [var_3ch]");
0x00070c76 str r3, [sp, 0x44] | var_44h = r3;
0x00070c78 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00070c7a cmp r3, r4 |
| if (r3 < r4) {
0x00070c7c bls 0x70cfc | goto label_25;
| }
| do {
0x00070c7e mov r0, r4 | r0 = r4;
0x00070c80 add r1, sp, 0x58 | r1 += var_58h;
0x00070c82 bl 0x24184 | fcn_00024184 (r0, r1);
0x00070c86 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00070c88 add r4, r0 | r4 += r0;
0x00070c8a ldr r2, [sp, 0x58] | r2 = var_58h;
0x00070c8c str r4, [sp, 0x3c] | var_3ch = r4;
0x00070c8e adds r3, r3, r2 | r3 += r2;
0x00070c90 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00070c92 str r3, [sp, 0x48] | var_48h = r3;
0x00070c94 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00070c96 adc.w r3, r3, r2 | __asm ("adc.w r3, r3, r2");
0x00070c9a cmp fp, sb |
0x00070c9c str r3, [sp, 0x4c] | var_4ch = r3;
| if (fp > sb) {
0x00070c9e bhi 0x70d1c | goto label_26;
| }
0x00070ca0 movs r3, 0 | r3 = 0;
0x00070ca2 str r3, [sp, 0x40] | var_40h = r3;
0x00070ca4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00070ca6 cmp r4, 0 |
| if (r4 == 0) {
0x00070ca8 beq 0x70d0a | goto label_1;
| }
| label_11:
0x00070caa ldr r2, [sp, 0x20] | r2 = var_20h;
0x00070cac subs r4, r3, r2 | r4 = r3 - r2;
| label_3:
0x00070cae cmp r6, 0 |
| if (r6 != 0) {
0x00070cb0 bne 0x70d10 | goto label_27;
| }
| label_0:
0x00070cb2 mov r0, sl | r0 = sl;
0x00070cb4 bl 0x26dbc | fcn_00026dbc (r0);
0x00070cb8 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00070cba str r7, [r5] | *(r5) = r7;
0x00070cbc str r4, [r5, 4] | *((r5 + 4)) = r4;
0x00070cbe b 0x70cc6 | goto label_10;
| label_20:
0x00070cc0 movs r6, 0 | r6 = 0;
0x00070cc2 str r7, [r5] | *(r5) = r7;
0x00070cc4 str r4, [r5, 4] | *((r5 + 4)) = r4;
| label_10:
0x00070cc6 ldr r2, [pc, 0x1e8] |
0x00070cc8 cmp r8, r3 |
0x00070cca ldr r3, [pc, 0x1dc] | r3 = *(0x70eaa);
0x00070ccc it gt |
| if (r8 <= r3) {
0x00070cce strgt r8, [r5, 0x2c] | *((r5 + 0x2c)) = r8;
| }
0x00070cd2 add r2, pc | r2 = 0xe1b88;
0x00070cd4 ldr r3, [r2, r3] | r3 = *(0xe1b88);
0x00070cd6 ldr r2, [r3] | r2 = *(0xe1b88);
0x00070cd8 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00070cda eors r2, r3 | r2 ^= r3;
0x00070cdc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00070ce0 bne.w 0x70ea0 | goto label_28;
| }
0x00070ce4 mov r0, r6 | r0 = r6;
0x00070ce6 add sp, 0x6c |
0x00070ce8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_22:
0x00070cec str r7, [sp, 0x20] | var_20h = r7;
0x00070cee mov r4, sl | r4 = sl;
0x00070cf0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00070cf2 mov sb, r7 | sb = r7;
0x00070cf4 str r3, [sp, 0x44] | var_44h = r3;
0x00070cf6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00070cf8 cmp r3, r4 |
0x00070cfa bhi 0x70c7e |
| } while (r3 > r4);
| label_25:
0x00070cfc cmp fp, sb |
0x00070cfe mov.w r4, 0 | r4 = 0;
0x00070d02 it hi |
| if (fp <= sb) {
0x00070d04 addhi r1, sp, 0x58 | r1 += var_58h;
| }
0x00070d06 str r4, [sp, 0x3c] | var_3ch = r4;
| if (fp > sb) {
0x00070d08 bhi 0x70d1c | goto label_26;
| }
| label_1:
0x00070d0a movs r4, 0 | r4 = 0;
0x00070d0c cmp r6, 0 |
| if (r6 == 0) {
0x00070d0e beq 0x70cb2 | goto label_0;
| }
| label_27:
0x00070d10 mov r0, r7 | r0 = r7;
0x00070d12 movs r6, 0 | r6 = 0;
0x00070d14 bl 0x26dbc | fcn_00026dbc (r0);
0x00070d18 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00070d1a b 0x70cb2 | goto label_0;
| label_26:
0x00070d1c mov r0, sb | r0 = sb;
0x00070d1e bl 0x24184 | fcn_00024184 (r0, r1);
0x00070d22 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00070d24 add r0, sb | r0 += sb;
0x00070d26 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00070d28 str r0, [sp, 0x40] | var_40h = r0;
0x00070d2a adds r3, r3, r2 | r3 += r2;
0x00070d2c ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00070d2e str r3, [sp, 0x50] | var_50h = r3;
0x00070d30 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00070d32 adc.w r3, r3, r2 | __asm ("adc.w r3, r3, r2");
0x00070d36 str r3, [sp, 0x54] | var_54h = r3;
0x00070d38 cmp r4, 0 |
| if (r4 == 0) {
0x00070d3a beq 0x70d0a | goto label_1;
| }
0x00070d3c ldr r3, [sp, 0x20] | r3 = var_20h;
0x00070d3e add r2, sp, 0x48 | r2 += var_48h;
0x00070d40 str r2, [sp, 0x10] | var_10h = r2;
0x00070d42 add r2, sp, 0x50 | r2 += var_50h;
0x00070d44 str.w sl, [sp, 0x28] | __asm ("str.w sl, [var_28h]");
0x00070d48 add.w sb, sp, 0x3c | sb += var_3ch;
0x00070d4c strd r5, r8, [sp, 0x2c] | __asm ("strd r5, r8, [var_30h_2]");
0x00070d50 mov sl, r3 | sl = r3;
0x00070d52 mov r8, r2 | r8 = r2;
0x00070d54 mov.w lr, 0 | lr = 0;
0x00070d58 strd lr, lr, [sp, 0x14] | __asm ("strd lr, lr, [var_14h]");
0x00070d5c str.w lr, [sp, 0x24] | __asm ("str.w lr, [var_24h]");
0x00070d60 str r7, [sp, 0x34] | var_34h_2 = r7;
| label_2:
0x00070d62 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00070d64 cmp r2, 0 |
| if (r2 == 0) {
0x00070d66 beq.w 0x70e84 | goto label_29;
| }
0x00070d6a ldrd r1, r3, [sp, 0x50] | __asm ("ldrd r1, r3, [var_50h]");
0x00070d6e ldrd r5, r7, [sp, 0x48] | __asm ("ldrd r5, r7, [var_48h]");
| if (r6 == 0) {
0x00070d72 cbz r6, 0x70dc0 | goto label_30;
| }
0x00070d74 cmp r1, r5 |
0x00070d76 sbcs.w r0, r3, r7 | __asm ("sbcs.w r0, r3, r7");
| if (r1 < r5) {
0x00070d7a blt 0x70e3a | goto label_31;
| }
0x00070d7c cmp r7, r3 |
0x00070d7e it eq |
| if (r7 == r3) {
0x00070d80 cmpeq r5, r1 | __asm ("cmpeq r5, r1");
| }
| if (r7 == r3) {
0x00070d82 beq 0x70e62 | goto label_32;
| }
| label_5:
0x00070d84 ldrb r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x00070d86 cbz r3, 0x70d94 | goto label_33;
| }
| do {
0x00070d88 and r1, r3, 0x80 | r1 = r3 & 0x80;
0x00070d8c ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00070d90 orrs r1, r3 | r1 |= r3;
0x00070d92 bne 0x70d88 |
| } while (r1 != r3);
| label_33:
0x00070d94 adds r2, 1 | r2++;
0x00070d96 mov r3, r8 | r3 = r8;
0x00070d98 str r2, [sp, 0x40] | var_40h = r2;
0x00070d9a mov r1, fp | r1 = fp;
0x00070d9c mov r2, r6 | r2 = r6;
0x00070d9e add r0, sp, 0x40 | r0 += var_40h;
0x00070da0 bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
| label_6:
0x00070da4 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x00070da6 cmp r4, 0 |
| if (r4 != 0) {
0x00070da8 bne 0x70d62 | goto label_2;
| }
0x00070daa ldr r2, [sp, 0x20] | r2 = var_20h;
0x00070dac mov r3, sl | r3 = sl;
0x00070dae ldrd r8, r7, [sp, 0x30] | __asm ("ldrd r8, r7, [var_34h_2]");
0x00070db2 ldrd sl, r5, [sp, 0x28] | __asm ("ldrd sl, r5, [var_28h]");
0x00070db6 subs r4, r3, r2 | r4 = r3 - r2;
0x00070db8 b 0x70cae | goto label_3;
| label_23:
0x00070dba dmb ish | __asm ("dmb ish");
0x00070dbe b 0x70c5a | goto label_4;
| label_30:
0x00070dc0 cmp r1, r5 |
0x00070dc2 sbcs.w r0, r3, r7 | __asm ("sbcs.w r0, r3, r7");
| if (r1 < r5) {
0x00070dc6 blt 0x70d84 | goto label_5;
| }
0x00070dc8 cmp r7, r3 |
0x00070dca it eq |
| if (r7 == r3) {
0x00070dcc cmpeq r5, r1 | __asm ("cmpeq r5, r1");
| }
| if (r7 != r3) {
0x00070dce bne 0x70e3a | goto label_31;
| }
| label_8:
0x00070dd0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00070dd2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00070dd4 subs r3, r5, r3 | r3 = r5 - r3;
0x00070dd6 sbc.w r2, r7, r2 | __asm ("sbc.w r2, r7, r2");
| label_9:
0x00070dda mov r1, sl | r1 = sl;
| do {
0x00070ddc lsrs r4, r3, 7 | r4 = r3 >> 7;
0x00070dde orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x00070de2 uxtb.w ip, r3 | ip = (int8_t) r3;
0x00070de6 orr.w r3, r4, r2, lsl 25 | r3 = r4 | (r2 << 25);
0x00070dea lsrs r2, r2, 7 | r2 >>= 7;
0x00070dec mov r4, r1 | r4 = r1;
0x00070dee strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x00070df2 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x00070df6 bne 0x70ddc |
| } while (r0 != r3);
0x00070df8 strb.w ip, [r4] | *(r4) = ip;
0x00070dfc add r4, sp, 0x40 | r4 += var_40h;
0x00070dfe str r1, [sp, 0x44] | var_44h = r1;
0x00070e00 movs r3, 1 | r3 = 1;
0x00070e02 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00070e04 movs r2, 0 | r2 = 0;
0x00070e06 add r0, sp, 0x44 | r0 += var_44h;
0x00070e08 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00070e0c str r4, [sp, 4] | var_34h = r4;
0x00070e0e bl 0x2e838 | r0 = fcn_0002e838 (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x00070e12 cbz r0, 0x70e5c | goto label_34;
| }
0x00070e14 ldr.w sl, [sp, 0x44] | sl = var_44h;
0x00070e18 movs r3, 1 | r3 = 1;
0x00070e1a strd r5, r7, [sp, 0x14] | __asm ("strd r5, r7, [var_14h]");
0x00070e1e str r3, [sp, 0x24] | var_24h = r3;
| label_7:
0x00070e20 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00070e22 mov r2, r6 | r2 = r6;
0x00070e24 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00070e26 mov r0, sb | r0 = sb;
0x00070e28 bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x00070e2c mov r3, r8 | r3 = r8;
0x00070e2e mov r2, r6 | r2 = r6;
0x00070e30 mov r1, fp | r1 = fp;
0x00070e32 mov r0, r4 | r0 = r4;
0x00070e34 bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x00070e38 b 0x70da4 | goto label_6;
| label_31:
0x00070e3a ldrb r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x00070e3c cbz r3, 0x70e4a | goto label_35;
| }
| do {
0x00070e3e and r2, r3, 0x80 | r2 = r3 & 0x80;
0x00070e42 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x00070e46 orrs r2, r3 | r2 |= r3;
0x00070e48 bne 0x70e3e |
| } while (r2 != r3);
| label_35:
0x00070e4a adds r4, 1 | r4++;
0x00070e4c ldr r3, [sp, 0x10] | r3 = var_10h;
0x00070e4e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00070e50 mov r2, r6 | r2 = r6;
0x00070e52 mov r0, sb | r0 = sb;
0x00070e54 str r4, [sp, 0x3c] | var_3ch = r4;
0x00070e56 bl 0x24348 | fcn_00024348 (r0, r1, r2, r3);
0x00070e5a b 0x70da4 | goto label_6;
| label_34:
0x00070e5c str.w sl, [sp, 0x44] | __asm ("str.w sl, [var_44h]");
0x00070e60 b 0x70e20 | goto label_7;
| label_32:
0x00070e62 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00070e64 cmp r3, 0 |
| if (r3 == 0) {
0x00070e66 beq 0x70dd0 | goto label_8;
| }
0x00070e68 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00070e6a ldr r2, [sp, 0x18] | r2 = var_18h;
0x00070e6c subs r3, r3, r5 | r3 -= r5;
0x00070e6e sbc.w r2, r2, r7 | __asm ("sbc.w r2, r2, r7");
0x00070e72 b 0x70dda | goto label_9;
| label_19:
0x00070e74 ldr r0, [r5] | r0 = *(r5);
0x00070e76 mov r6, r3 | r6 = r3;
0x00070e78 bl 0x26dbc | fcn_00026dbc (r0);
0x00070e7c ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00070e7e strd r7, r7, [r5] | __asm ("strd r7, r7, [r5]");
0x00070e82 b 0x70cc6 | goto label_10;
| label_29:
0x00070e84 mov r3, sl | r3 = sl;
0x00070e86 ldrd r8, r7, [sp, 0x30] | __asm ("ldrd r8, r7, [var_34h_2]");
0x00070e8a ldrd sl, r5, [sp, 0x28] | __asm ("ldrd sl, r5, [var_28h]");
0x00070e8e b 0x70caa | goto label_11;
| label_21:
0x00070e90 mov r0, r7 | r0 = r7;
0x00070e92 mov r6, sl | r6 = sl;
0x00070e94 bl 0x26dbc | fcn_00026dbc (r0);
0x00070e98 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00070e9a b 0x70cc6 | goto label_10;
| label_24:
0x00070e9c movs r6, 7 | r6 = 7;
0x00070e9e b 0x70cb2 | goto label_0;
| label_28:
0x00070ea0 blx 0x6430 | fcn_00006430 ();
0x00070ea4 str r1, [sp, 0x320] | *(arg_320h) = r1;
0x00070ea6 movs r7, r0 | r7 = r0;
0x00070ea8 lsls r4, r6, 8 | r4 = r6 << 8;
0x00070eaa movs r0, r0 |
0x00070eac str r6, [sp, 0x168] | *(arg_168h) = r6;
0x00070eae movs r7, r0 | r7 = r0;
0x00070eb0 str r0, [sp, 0x318] | *(arg_318h) = r0;
0x00070eb2 movs r7, r0 | r7 = r0;
0x00070eb4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00070eb8 mov r5, r0 | r5 = r0;
0x00070eba mov sb, r1 | sb = r1;
0x00070ebc ldrd r6, r1, [r5, 4] | __asm ("ldrd r6, r1, [r5, 4]");
0x00070ec0 sub sp, 0xc |
0x00070ec2 mov r8, r2 | r8 = r2;
0x00070ec4 ldr r0, [r0] | r0 = *(r0);
0x00070ec6 mov r7, r3 | r7 = r3;
0x00070ec8 add.w lr, r6, r1 | lr = r6 + r1;
0x00070ecc add.w lr, lr, -1 | lr += -1;
| label_12:
0x00070ed0 ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
0x00070ed2 cmp r4, r1 |
| if (r4 >= r1) {
0x00070ed4 bge 0x70fc6 | goto label_36;
| }
| label_14:
0x00070ed6 subs r3, r4, 1 | r3 = r4 - 1;
0x00070ed8 add r3, r6 | r3 += r6;
| do {
0x00070eda ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00070ede add.w ip, r0, r2 |
0x00070ee2 lsls r2, r2, 0x18 | r2 <<= 0x18;
| if (r2 < r2) {
0x00070ee4 bmi 0x70f9c | goto label_37;
| }
0x00070ee6 ldrb.w r2, [ip, 4] | r2 = *((ip + 4));
0x00070eea cmp r2, 0 |
| if (r2 == 0) {
0x00070eec beq 0x70f9c | goto label_37;
| }
0x00070eee adds r4, 1 | r4++;
0x00070ef0 cmp r4, r1 |
0x00070ef2 str r4, [r5, 0xc] | *((r5 + 0xc)) = r4;
0x00070ef4 bne 0x70eda |
| } while (r4 != r1);
0x00070ef6 mov r3, r4 | r3 = r4;
0x00070ef8 cmp r4, r3 |
| if (r4 >= r3) {
0x00070efa bge 0x70ed0 | goto label_12;
| }
| label_13:
0x00070efc sub.w sl, r3, r4 | sl = r3 - r4;
0x00070f00 ldrd fp, r3, [r5, 0x14] | __asm ("ldrd fp, r3, [r5, 0x14]");
0x00070f04 cmp r3, sl |
| if (r3 < sl) {
0x00070f06 bge 0x70f42 |
0x00070f08 ldr r3, [pc, 0xd8] |
0x00070f0a add.w r2, sl, 0x14 | r2 = sl + 0x14;
0x00070f0e add r3, pc |
0x00070f10 ldr.w r3, [r3, 0xd0] | r3 = *(0xe1fc6);
0x00070f14 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x00070f16 cmp r3, 0 |
| if (r3 != 0) {
0x00070f18 bne 0x70fda | goto label_38;
| }
0x00070f1a str r2, [sp, 4] | var_4h = r2;
0x00070f1c bl 0x25da0 | fcn_00025da0 ();
0x00070f20 ldr r2, [sp, 4] | r2 = var_4h;
0x00070f22 cmp r0, 0 |
| if (r0 != 0) {
0x00070f24 bne 0x70fe0 | goto label_39;
| }
0x00070f26 str r2, [sp, 4] | var_4h = r2;
0x00070f28 bl 0x5a4b8 | fcn_0005a4b8 ();
0x00070f2c ldr r2, [sp, 4] | r2 = var_4h;
0x00070f2e cmp r0, 0 |
| if (r0 != 0) {
0x00070f30 bne 0x70fe0 | goto label_39;
| }
| label_17:
0x00070f32 mov r0, fp | r0 = fp;
0x00070f34 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00070f36 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x00070f3a mov fp, r0 |
0x00070f3c cmp r0, 0 |
| if (r0 == 0) {
0x00070f3e beq 0x70fe0 | goto label_39;
| }
0x00070f40 str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
| }
0x00070f42 add.w ip, r6, -1 |
0x00070f46 subs r2, r4, 1 | r2 = r4 - 1;
0x00070f48 add ip, r4 |
0x00070f4a add r2, r6 | r2 += r6;
0x00070f4c add ip, sl |
0x00070f4e b 0x70f54 |
| while (ip != r2) {
0x00070f50 ldr.w fp, [r5, 0x14] | fp = *((r5 + 0x14));
0x00070f54 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00070f58 sub.w r0, r3, 0x41 | r0 = r3 - 0x41;
0x00070f5c add.w lr, r3, 0x20 | lr = r3 + 0x20;
0x00070f60 cmp r0, 0x19 |
0x00070f62 sub.w r1, r2, r6 | r1 = r2 - r6;
0x00070f66 it ls |
| if (r0 <= 0x19) {
0x00070f68 uxtbls r3, lr | __asm ("uxtbls r3, lr");
| }
0x00070f6c cmp ip, r2 |
0x00070f6e sub.w r1, r1, r4 | r1 -= r4;
0x00070f72 strb.w r3, [fp, r1] | *((fp + r1)) = r3;
0x00070f76 bne 0x70f50 |
| }
0x00070f78 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00070f7a movs r0, 0 | r0 = 0;
0x00070f7c ldr r2, [sp, 0x30] | r2 = var_30h;
0x00070f7e str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00070f82 str.w sl, [r8] | __asm ("str.w sl, [r8]");
0x00070f86 str r4, [r7] | *(r7) = r4;
0x00070f88 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00070f8a str r3, [r2] | *(r2) = r3;
0x00070f8c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00070f8e adds r2, r3, 1 | r2 = r3 + 1;
0x00070f90 str r2, [r5, 0x10] | *((r5 + 0x10)) = r2;
0x00070f92 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00070f94 str r3, [r2] | *(r2) = r3;
0x00070f96 add sp, 0xc |
0x00070f98 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_37:
0x00070f9c ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00070f9e cmp r3, r1 |
0x00070fa0 itt lt |
| if (r3 >= r1) {
0x00070fa2 addlt ip, r3, -1 |
| }
| if (r3 < r1) {
0x00070fa6 add ip, r6 |
| }
| if (r3 < r1) {
0x00070fa8 bge 0x70fbc |
| label_15:
0x00070faa ldrb r2, [ip, 1]! | r2 = *((ip += 1));
0x00070fae add.w sl, r0, r2 | sl = r0 + r2;
0x00070fb2 lsls r2, r2, 0x18 | r2 <<= 0x18;
| if (r2 < r2) {
0x00070fb4 bmi 0x70fce | goto label_40;
| }
0x00070fb6 ldrb.w r2, [sl, 4] | r2 = *((sl + 4));
| if (r2 == 0) {
0x00070fba cbz r2, 0x70fce | goto label_40;
| }
| }
| label_16:
0x00070fbc cmp r4, r3 |
| if (r4 < r3) {
0x00070fbe blt 0x70efc | goto label_13;
| }
0x00070fc0 ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
0x00070fc2 cmp r4, r1 |
| if (r4 < r1) {
0x00070fc4 blt 0x70ed6 | goto label_14;
| }
| label_36:
0x00070fc6 movs r0, 0x65 | r0 = 0x65;
| label_18:
0x00070fc8 add sp, 0xc |
0x00070fca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_40:
0x00070fce cmp ip, lr |
0x00070fd0 add.w r3, r3, 1 | r3++;
0x00070fd4 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
| if (ip != lr) {
0x00070fd6 bne 0x70faa | goto label_15;
| }
0x00070fd8 b 0x70fbc | goto label_16;
| label_38:
0x00070fda dmb ish | __asm ("dmb ish");
0x00070fde b 0x70f32 | goto label_17;
| label_39:
0x00070fe0 movs r0, 7 | r0 = 7;
0x00070fe2 b 0x70fc8 | goto label_18;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x710e0 */
| #include <stdint.h>
|
; (fcn) fcn.000710e0 () | void fcn_000710e0 (int16_t arg_30h, int16_t arg_38h, int16_t arg_40h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000710e0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000710e4 mov r4, r2 | r4 = r2;
0x000710e6 ldr r2, [pc, 0x110] |
0x000710e8 mov r6, r3 | r6 = r3;
0x000710ea sub sp, 0xc |
0x000710ec mov r5, r0 | r5 = r0;
0x000710ee ldr r3, [pc, 0x10c] |
0x000710f0 add r2, pc | r2 = 0xe22ee;
0x000710f2 ldr r1, [r0] | r1 = *(r0);
0x000710f4 ldrd fp, r7, [sp, 0x30] | __asm ("ldrd fp, r7, [arg_30h]");
0x000710f6 invalid |
0x000710fa ldrd sb, sl, [sp, 0x38] | __asm ("ldrd sb, sl, [arg_38h]");
0x000710fe ldr.w r8, [sp, 0x40] | r8 = *(arg_40h);
0x00071102 ldr r3, [r3] | r3 = *(0x711fe);
0x00071104 str r3, [sp, 4] | var_4h = r3;
0x00071106 mov.w r3, 0 | r3 = 0;
0x0007110a str r1, [sp] | *(sp) = r1;
0x0007110c cmp r1, 0 |
| if (r1 == 0) {
0x0007110e beq 0x711a4 | goto label_5;
| }
0x00071110 ldrd r2, r3, [r1, 0x10] | __asm ("ldrd r2, r3, [r1, 0x10]");
0x00071114 cmp r3, r6 |
0x00071116 it eq |
| if (r3 == r6) {
0x00071118 cmpeq r2, r4 | __asm ("cmpeq r2, r4");
| }
| if (r3 == r6) {
0x0007111a beq 0x71146 | goto label_6;
| }
0x0007111c ldr r0, [r1] | r0 = *(r1);
0x0007111e subs r2, r4, r2 | r2 = r4 - r2;
0x00071120 sbc.w r3, r6, r3 | __asm ("sbc.w r3, r6, r3");
0x00071124 adds r0, 1 | r0++;
0x00071126 str r0, [r1] | *(r1) = r0;
| do {
0x00071128 mov r0, sp | r0 = sp;
0x0007112a bl 0x70fe8 | r0 = fcn_00070fe8 (r0, r1, r2, r3);
| if (r0 == 0) {
0x0007112e cbnz r0, 0x7116c |
0x00071130 ldr r1, [sp] | r1 = *(sp);
0x00071132 vmov.i8 d17, 0xff | __asm ("vmov.i8 d17, 0xff");
0x00071136 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0007113a strd r4, r6, [r1, 0x10] | __asm ("strd r4, r6, [r1, 0x10]");
0x0007113e vstr d17, [r1, 0x18] | __asm ("vstr d17, [r1, 0x18]");
0x00071142 vstr d16, [r1, 0x20] | __asm ("vstr d16, [r1, 0x20]");
| label_6:
0x00071146 cmp.w fp, 1 |
0x0007114a sbcs r3, r7, 0 | __asm ("sbcs r3, r7, 0");
| if (fp < 1) {
0x0007114e blt 0x71170 | goto label_7;
| }
0x00071150 ldrd r2, r3, [r1, 0x18] | __asm ("ldrd r2, r3, [r1, 0x18]");
0x00071154 cmp r3, r7 |
0x00071156 it eq |
| if (r3 == r7) {
0x00071158 cmpeq r2, fp | __asm ("cmpeq r2, fp");
| }
| if (r3 == r7) {
0x0007115a beq 0x711aa | goto label_8;
| }
0x0007115c mov r6, sp | r6 = sp;
0x0007115e movs r2, 1 | r2 = 1;
0x00071160 mov r0, r6 | r0 = r6;
0x00071162 movs r3, 0 | r3 = 0;
0x00071164 bl 0x70fe8 | r0 = fcn_00070fe8 (r0, r1, r2, r3);
0x00071168 cmp r0, 0 |
| if (r0 == 0) {
0x0007116a beq 0x711d0 | goto label_9;
| }
| }
| label_1:
0x0007116c ldr r1, [sp] | r1 = *(sp);
0x0007116e b 0x7117a | goto label_0;
| label_7:
0x00071170 orrs.w r7, fp, r7 | r7 = fp | r7;
0x00071174 it ne |
| if (r7 == fp) {
0x00071176 movne r0, 0 | r0 = 0;
| }
| if (r7 == fp) {
0x00071178 beq 0x711aa | goto label_8;
| }
| label_0:
0x0007117a ldr r3, [r5] | r3 = *(r5);
0x0007117c ldr r2, [pc, 0x80] |
0x0007117e str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00071182 cmp r3, r1 |
0x00071184 ldr r3, [pc, 0x74] | r3 = *(0x711fc);
0x00071186 add r2, pc | r2 = 0xe238a;
0x00071188 itte ne |
| if (r3 == r1) {
0x0007118a strne r1, [r5] | *(r5) = r1;
| }
| if (r3 == r1) {
0x0007118c movne r0, 1 | r0 = 1;
| }
| if (r3 != r1) {
0x0007118e moveq r0, 0 | r0 = 0;
| }
0x00071190 ldr r3, [r2, r3] | r3 = *(0xe238a);
0x00071192 ldr r2, [r3] | r2 = *(0xe238a);
0x00071194 ldr r3, [sp, 4] | r3 = var_4h;
0x00071196 eors r2, r3 | r2 ^= r3;
0x00071198 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007119c bne 0x711f2 | goto label_10;
| }
0x0007119e add sp, 0xc |
0x000711a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000711a4 mov r2, r4 | r2 = r4;
0x000711a6 mov r3, r6 | r3 = r6;
0x000711a8 b 0x71128 |
| } while (1);
| label_8:
0x000711aa ldrd r4, r3, [r1, 0x20] | __asm ("ldrd r4, r3, [r1, 0x20]");
0x000711ae mov r6, sp | r6 = sp;
| label_2:
0x000711b0 adds.w r2, sb, 2 | r2 = sb + 2;
0x000711b4 mov r0, r6 | r0 = r6;
0x000711b6 adc r1, sl, 0 | __asm ("adc r1, sl, 0");
0x000711ba subs r2, r2, r4 | r2 -= r4;
0x000711bc sbc.w r3, r1, r3 | __asm ("sbc.w r3, r1, r3");
0x000711c0 bl 0x70fe8 | fcn_00070fe8 (r0, r1, r2, r3);
0x000711c4 ldr r1, [sp] | r1 = *(sp);
0x000711c6 cmp r0, 0 |
| if (r0 != 0) {
0x000711c8 bne 0x7117a | goto label_0;
| }
0x000711ca strd sb, sl, [r1, 0x20] | __asm ("strd sb, sl, [r1, 0x20]");
0x000711ce b 0x7117a | goto label_0;
| label_9:
0x000711d0 mov r2, fp | r2 = fp;
0x000711d2 mov r3, r7 | r3 = r7;
0x000711d4 mov r0, r6 | r0 = r6;
0x000711d6 bl 0x70fe8 | r0 = fcn_00070fe8 (r0, r1, r2, r3);
0x000711da cmp r0, 0 |
| if (r0 != 0) {
0x000711dc bne 0x7116c | goto label_1;
| }
0x000711de ldr r3, [sp] | r3 = *(sp);
0x000711e0 mov r4, r0 | r4 = r0;
0x000711e2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000711e6 strd fp, r7, [r3, 0x18] | __asm ("strd fp, r7, [r3, 0x18]");
0x000711ea vstr d16, [r3, 0x20] | __asm ("vstr d16, [r3, 0x20]");
0x000711ee mov r3, r0 | r3 = r0;
0x000711f0 b 0x711b0 | goto label_2;
| label_10:
0x000711f2 blx 0x6430 | fcn_00006430 ();
0x000711f6 nop |
0x000711f8 ldrh r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x000711fa movs r7, r0 | r7 = r0;
0x000711fc lsls r4, r6, 8 | r4 = r6 << 8;
0x000711fe movs r0, r0 |
0x00071200 ldrh r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x00071202 movs r7, r0 | r7 = r0;
0x00071204 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00071208 mov r5, r2 | r5 = r2;
0x0007120a ldr r2, [pc, 0xb4] |
0x0007120c mov r8, r3 | r8 = r3;
0x0007120e sub sp, 0x2c |
0x00071210 mov r6, r0 | r6 = r0;
0x00071212 ldr r3, [pc, 0xb0] | r3 = *(0x712c6);
0x00071214 mov r4, r1 | r4 = r1;
0x00071216 add r2, pc | r2 = 0xe24dc;
0x00071218 ldr.w sb, [sp, 0x48] | sb = var_0h;
0x0007121c ldr r7, [sp, 0x4c] | r7 = var_4h;
0x0007121e mov r0, r8 | r0 = r8;
0x00071220 ldr r3, [r2, r3] |
0x00071222 mov r1, sb | r1 = sb;
0x00071224 mov r2, r7 | r2 = r7;
0x00071226 ldr r3, [r3] | r3 = *(0xe24dc);
0x00071228 str r3, [sp, 0x24] | var_24h = r3;
0x0007122a mov.w r3, 0 | r3 = 0;
0x0007122e movs r3, 0 | r3 = 0;
0x00071230 str r3, [sp, 0x20] | var_20h = r3;
0x00071232 bl 0x29df4 | r0 = fcn_00029df4 (r0, r1, r2);
0x00071236 cmp r0, 0 |
| if (r0 == 0) {
0x00071238 beq 0x712b6 | goto label_11;
| }
0x0007123a ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0007123c str r3, [sp, 0x1c] | var_1ch = r3;
| if (r3 != 0) {
0x0007123e cbz r3, 0x71250 |
0x00071240 ldr r2, [r3] | r2 = *(r3);
0x00071242 ldr.w r3, [r6, 0x10c] | r3 = *((r6 + 0x10c));
0x00071246 add r2, r7 | r2 += r7;
0x00071248 subs r3, 0x14 | r3 -= 0x14;
0x0007124a subs r3, r3, r2 | r3 -= r2;
0x0007124c str.w r3, [r6, 0x10c] | __asm ("str.w r3, [r6, 0x10c]");
| }
| label_4:
0x00071250 str r5, [sp, 8] | var_8h = r5;
0x00071252 asrs r5, r5, 0x1f | r5 >>= 0x1f;
0x00071254 str r4, [sp] | *(sp) = r4;
0x00071256 asrs r4, r4, 0x1f | r4 >>= 0x1f;
0x00071258 add r3, sp, 0x20 | r3 += var_20h;
0x0007125a str r5, [sp, 0xc] | var_ch = r5;
0x0007125c str r4, [sp, 4] | var_4h_2 = r4;
0x0007125e add r0, sp, 0x1c | r0 += var_1ch;
0x00071260 str r3, [sp, 0x10] | var_10h = r3;
0x00071262 ldrd r2, r3, [r6, 0x110] | __asm ("ldrd r2, r3, [r6, 0x110]");
0x00071266 bl 0x710e0 | r0 = fcn_000710e0 (r0, r1, r2, r3, r4, r5);
0x0007126a cbnz r0, 0x7129c |
| while (r4 != r0) {
0x0007126c ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r0 == 0) {
0x0007126e cbnz r0, 0x71282 |
0x00071270 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00071272 ldr.w r3, [r6, 0x10c] | r3 = *((r6 + 0x10c));
0x00071276 ldr r2, [r2] | r2 = *(r2);
0x00071278 adds r3, 0x14 | r3 += 0x14;
0x0007127a add r2, r7 | r2 += r7;
0x0007127c add r2, r3 | r2 += r3;
0x0007127e str.w r2, [r6, 0x10c] | __asm ("str.w r2, [r6, 0x10c]");
| }
| label_3:
0x00071282 ldr r2, [pc, 0x44] |
0x00071284 ldr r3, [pc, 0x3c] | r3 = *(0x712c4);
0x00071286 add r2, pc | r2 = 0xe2554;
0x00071288 ldr r3, [r2, r3] | r3 = *(0xe2554);
0x0007128a ldr r2, [r3] | r2 = *(0xe2554);
0x0007128c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007128e eors r2, r3 | r2 ^= r3;
0x00071290 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00071294 bne 0x712ba | goto label_12;
| }
0x00071296 add sp, 0x2c |
0x00071298 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x0007129c ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x0007129e mov r1, sb | r1 = sb;
0x000712a0 mov r0, r8 | r0 = r8;
0x000712a2 mov r2, r7 | r2 = r7;
0x000712a4 mov r3, r4 | r3 = r4;
0x000712a6 bl 0x61c40 | r0 = fcn_00061c40 (r0, r1, r2, r3);
0x000712aa cmp r4, r0 |
0x000712ac bne 0x7126c |
| }
0x000712ae bl 0x26dbc | fcn_00026dbc (r0);
0x000712b2 movs r0, 7 | r0 = 7;
0x000712b4 b 0x71282 | goto label_3;
| label_11:
0x000712b6 str r0, [sp, 0x1c] | var_1ch = r0;
0x000712b8 b 0x71250 | goto label_4;
| label_12:
0x000712ba blx 0x6430 | fcn_00006430 ();
0x000712be nop |
0x000712c0 ldrh r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x000712c2 movs r7, r0 | r7 = r0;
0x000712c4 lsls r4, r6, 8 | r4 = r6 << 8;
0x000712c6 movs r0, r0 |
0x000712c8 ldrh r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x000712ca movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x71b60 */
| #include <stdint.h>
|
; (fcn) fcn.00071b60 () | void fcn_00071b60 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00071b60 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00071b64 mov r5, r2 | r5 = r2;
0x00071b66 ldr r7, [r2] | r7 = *(r2);
0x00071b68 sub sp, 0x44 |
0x00071b6a ldr.w r2, [pc, 0x50c] |
0x00071b6e ldr.w r3, [pc, 0x50c] | r3 = *(0x7207e);
0x00071b72 add r2, pc | r2 = 0xe3bf0;
0x00071b74 ldr r3, [r2, r3] |
0x00071b76 ldr r3, [r3] | r3 = *(0xe3bf0);
0x00071b78 str r3, [sp, 0x3c] | var_3ch = r3;
0x00071b7a mov.w r3, 0 | r3 = 0;
| if (r7 == 0) {
0x00071b7e cbz r7, 0x71ba4 | goto label_16;
| }
| label_3:
0x00071b80 movs r2, 1 | r2 = 1;
| do {
| label_1:
0x00071b82 ldr.w r1, [pc, 0x4fc] |
0x00071b86 ldr.w r3, [pc, 0x4f4] | r3 = *(0x7207e);
0x00071b8a add r1, pc | r1 = 0xe3c10;
0x00071b8c ldr r3, [r1, r3] | r3 = *(0xe3c10);
0x00071b8e ldr r1, [r3] | r1 = *(0xe3c10);
0x00071b90 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00071b92 eors r1, r3 | r1 ^= r3;
0x00071b94 mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x00071b98 bne.w 0x71db2 | goto label_17;
| }
0x00071b9c mov r0, r2 | r0 = r2;
0x00071b9e add sp, 0x44 |
0x00071ba0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x00071ba4 ldr r3, [r1] | r3 = *(r1);
0x00071ba6 mov r6, r0 | r6 = r0;
0x00071ba8 mov r4, r1 | r4 = r1;
0x00071baa subs r3, 1 | r3--;
0x00071bac cmp r3, 3 |
| if (r3 > 3) {
0x00071bae bhi.w 0x71dbc | goto label_18;
| }
| /* switch table (4 cases) at 0x71bb6 */
0x00071bb2 tbb [pc, r3] | __asm ("tbb [0x00071bb8]");
0x00071bba ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x00071bbc mov r2, r5 | r2 = r5;
0x00071bbe bl 0x71b60 | r0 = fcn_00071b60 (r0, r1, r2);
| if (r0 != 0) {
0x00071bc2 cbnz r0, 0x71c0e | goto label_19;
| }
| label_2:
0x00071bc4 ldr r3, [r4] | r3 = *(r4);
0x00071bc6 cmp r3, 1 |
| if (r3 == 1) {
0x00071bc8 beq.w 0x71d34 | goto label_20;
| }
| label_0:
0x00071bcc movs r2, 0 | r2 = 0;
0x00071bce b 0x71b82 |
| } while (1);
0x00071bd0 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x00071bd2 mov r2, r5 | r2 = r5;
0x00071bd4 bl 0x71b60 | r0 = fcn_00071b60 (r0, r1, r2);
0x00071bd8 cmp r0, 0 |
| if (r0 == 0) {
0x00071bda beq 0x71bcc | goto label_0;
| }
0x00071bdc mov r2, r5 | r2 = r5;
0x00071bde ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00071be0 mov r0, r6 | r0 = r6;
0x00071be2 bl 0x71b60 | r0 = fcn_00071b60 (r0, r1, r2);
0x00071be6 clz r2, r0 | r2 &= r0;
0x00071bea lsrs r2, r2, 5 | r2 >>= 5;
0x00071bec b 0x71b82 | goto label_1;
0x00071bee ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x00071bf0 mov r2, r5 | r2 = r5;
0x00071bf2 bl 0x71b60 | r0 = fcn_00071b60 (r0, r1, r2);
0x00071bf6 mov r3, r0 | r3 = r0;
0x00071bf8 mov r2, r5 | r2 = r5;
0x00071bfa ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00071bfc mov r0, r6 | r0 = r6;
0x00071bfe mov r4, r3 | r4 = r3;
0x00071c00 bl 0x71b60 | r0 = fcn_00071b60 (r0, r1, r2);
0x00071c04 orrs r4, r0 | r4 |= r0;
0x00071c06 ite ne |
| if (r4 == r0) {
0x00071c08 movne r2, 1 | r2 = 1;
| }
| if (r4 != r0) {
0x00071c0a moveq r2, 0 | r2 = 0;
| }
0x00071c0c b 0x71b82 | goto label_1;
| label_19:
0x00071c0e ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00071c10 mov r2, r5 | r2 = r5;
0x00071c12 mov r0, r6 | r0 = r6;
0x00071c14 bl 0x71b60 | r0 = fcn_00071b60 (r0, r1, r2);
0x00071c18 cmp r0, 0 |
| if (r0 == 0) {
0x00071c1a beq 0x71bc4 | goto label_2;
| }
0x00071c1c ldr r3, [r5] | r3 = *(r5);
0x00071c1e cmp r3, 0 |
| if (r3 != 0) {
0x00071c20 bne 0x71b80 | goto label_3;
| }
0x00071c22 ldr r7, [r4] | r7 = *(r4);
0x00071c24 cmp r7, 1 |
| if (r7 != 1) {
0x00071c26 bne 0x71b80 | goto label_3;
| }
0x00071c28 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 == 0) {
0x00071c2a cbz r3, 0x71c32 | goto label_21;
| }
0x00071c2c ldr r3, [r3] | r3 = *(r3);
0x00071c2e cmp r3, 1 |
| if (r3 == 1) {
0x00071c30 beq 0x71b80 | goto label_3;
| }
| label_21:
0x00071c32 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00071c34 mov.w r8, 0 | r8 = 0;
0x00071c38 mov sb, r4 | sb = r4;
0x00071c3a mov fp, r8 |
0x00071c3c cmp r2, 0 |
| if (r2 == 0) {
0x00071c3e beq.w 0x71db6 | goto label_22;
| }
| do {
0x00071c42 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x00071c46 mov sb, r2 | sb = r2;
0x00071c48 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00071c4a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00071c4c ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00071c4e adds.w r8, r3, r8 | r8 = r3 + r8;
0x00071c52 adc.w fp, fp, r3, asr 31 | __asm ("adc.w fp, fp, r3, asr 31");
0x00071c56 cmp r2, 0 |
0x00071c58 bne 0x71c42 |
| } while (r2 != 0);
| label_7:
0x00071c5a ldr.w r3, [pc, 0x428] |
0x00071c5e add r3, pc | r3 = 0xe3ce8;
0x00071c60 ldr.w r2, [r3, 0xd0] | r2 = *(0xe3db8);
0x00071c64 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00071c68 ldr.w sl, [r3, 0x20] | sl = *(0xe3d08);
0x00071c6c cmp r2, 0 |
| if (r2 != 0) {
0x00071c6e bne.w 0x71dac | goto label_23;
| }
0x00071c72 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00071c76 cmp r0, 0 |
| if (r0 != 0) {
0x00071c78 bne.w 0x71da0 | goto label_24;
| }
0x00071c7c bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00071c80 cmp r0, 0 |
| if (r0 != 0) {
0x00071c82 bne.w 0x71da0 | goto label_24;
| }
| label_6:
0x00071c86 adds.w r0, sl, r8 | r0 = sl + r8;
0x00071c8a adc.w r1, fp, sl, asr 31 | __asm ("adc.w r1, fp, sl, asr 31");
0x00071c8e adds r0, r0, r0 | r0 += r0;
0x00071c90 adcs r1, r1 | __asm ("adcs r1, r1");
0x00071c92 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00071c96 mov r8, r0 | r8 = r0;
0x00071c98 cmp r0, 0 |
| if (r0 == 0) {
0x00071c9a beq.w 0x71da0 | goto label_24;
| }
0x00071c9e ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00071ca2 ldr.w r5, [sb, 8] | r5 = *((sb + 8));
0x00071ca6 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00071ca8 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00071caa str r2, [sp, 0x2c] | var_2ch = r2;
0x00071cac str r3, [sp, 0x30] | var_30h = r3;
| if (r5 == 0) {
0x00071cae cbz r5, 0x71ce0 | goto label_25;
| }
0x00071cb0 add.w sl, sp, 0x30 | sl += var_30h;
0x00071cb4 add.w sb, sp, 0x2c | sb += var_2ch;
0x00071cb8 mov r0, r7 | r0 = r7;
0x00071cba b 0x71cd8 |
| while (r3 == 1) {
0x00071cbc ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00071cbe mov r2, sb | r2 = sb;
0x00071cc0 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00071cc2 mov r1, r8 | r1 = r8;
0x00071cc4 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00071cc6 str r3, [sp] | *(sp) = r3;
0x00071cc8 mov r3, sl | r3 = sl;
0x00071cca bl 0x30004 | fcn_00030004 (r0, r1, r2, r3, r4, r5, r6);
0x00071cce ldr r5, [r5, 8] | r5 = *((r5 + 8));
0x00071cd0 cmp r0, 0 |
0x00071cd2 it ne |
| if (r0 != 0) {
0x00071cd4 cmpne r5, 0 | __asm ("cmpne r5, 0");
| }
| if (r0 == 0) {
0x00071cd6 beq 0x71cde | goto label_26;
| }
0x00071cd8 ldr r3, [r5] | r3 = *(r5);
0x00071cda cmp r3, 1 |
0x00071cdc beq 0x71cbc |
| }
| label_26:
0x00071cde mov r7, r0 | r7 = r0;
| label_25:
0x00071ce0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00071ce2 ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x00071ce4 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00071ce6 cmp r5, 0 |
0x00071ce8 it ne |
| if (r5 != 0) {
0x00071cea cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
0x00071cec ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00071cee ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00071cf0 str r2, [sp, 0x2c] | var_2ch = r2;
0x00071cf2 str r3, [sp, 0x30] | var_30h = r3;
| if (r5 == 0) {
0x00071cf4 beq 0x71d26 | goto label_27;
| }
0x00071cf6 add.w sl, sp, 0x30 | sl += var_30h;
0x00071cfa add.w sb, sp, 0x2c | sb += var_2ch;
| do {
0x00071cfe ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00071d00 mov r2, sb | r2 = sb;
0x00071d02 mov r1, r8 | r1 = r8;
0x00071d04 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00071d06 ldr r3, [r5] | r3 = *(r5);
0x00071d08 cmp r3, 1 |
0x00071d0a itet eq |
| if (r3 != 1) {
0x00071d0c ldreq r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| }
| if (r3 == 1) {
0x00071d0e ldrne r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| }
| if (r3 != 1) {
0x00071d10 ldreq r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
0x00071d12 str r3, [sp] | *(sp) = r3;
0x00071d14 mov r3, sl | r3 = sl;
0x00071d16 bl 0x30004 | fcn_00030004 (r0, r1, r2, r3, r4, r5, r6);
0x00071d1a ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x00071d1c cmp r5, 0 |
0x00071d1e it ne |
| if (r5 != 0) {
0x00071d20 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00071d22 bne 0x71cfe |
| } while (r5 != 0);
0x00071d24 mov r7, r0 | r7 = r0;
| label_27:
0x00071d26 mov r0, r8 | r0 = r8;
0x00071d28 bl 0x26dbc | fcn_00026dbc (r0);
0x00071d2c cmp r7, 0 |
| if (r7 == 0) {
0x00071d2e beq.w 0x71bc4 | goto label_2;
| }
0x00071d32 b 0x71b80 | goto label_3;
| label_20:
0x00071d34 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 == 0) {
0x00071d36 cbz r3, 0x71d40 | goto label_28;
| }
0x00071d38 ldr r3, [r3] | r3 = *(r3);
0x00071d3a cmp r3, 1 |
| if (r3 == 1) {
0x00071d3c beq.w 0x71bcc | goto label_0;
| }
| label_28:
0x00071d40 ldr r5, [r4, 0x14] | r5 = *((r4 + 0x14));
0x00071d42 ldrd r7, r0, [r6, 0x20] | __asm ("ldrd r7, r0, [r6, 0x20]");
| if (r5 != 0) {
0x00071d46 cbnz r5, 0x71d70 | goto label_29;
| }
0x00071d48 mov r8, r5 | r8 = r5;
0x00071d4a b 0x71d52 |
| while (r2 != r0) {
| label_4:
0x00071d4c ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x00071d4e ldr r5, [r4, 0x14] | r5 = *((r4 + 0x14));
| if (r5 != 0) {
0x00071d50 cbnz r5, 0x71d70 | goto label_29;
| }
0x00071d52 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00071d54 ldrd r1, r2, [r3, 0x18] | __asm ("ldrd r1, r2, [r3, 0x18]");
0x00071d58 cmp r2, r0 |
0x00071d5a it eq |
| if (r2 == r0) {
0x00071d5c cmpeq r1, r7 | __asm ("cmpeq r1, r7");
| }
0x00071d5e bne 0x71d4c |
| }
0x00071d60 ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x00071d62 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 != 0) {
0x00071d64 cbnz r3, 0x71d8c | goto label_30;
| }
| label_5:
0x00071d66 strd r8, r8, [r5, 0x1c] | __asm ("strd r8, r8, [r5, 0x1c]");
0x00071d6a str.w r8, [r5, 0x18] | __asm ("str.w r8, [r5, 0x18]");
0x00071d6e b 0x71d4c | goto label_4;
| label_29:
0x00071d70 ldrd r2, r3, [r4, 0x18] | __asm ("ldrd r2, r3, [r4, 0x18]");
0x00071d74 cmp r3, r0 |
0x00071d76 it eq |
| if (r3 != r0) {
0x00071d78 cmpeq r2, r7 | __asm ("cmpeq r2, r7");
| goto label_31;
| }
| if (r3 != r0) {
| label_31:
0x00071d7a bne.w 0x71bcc | goto label_0;
| }
0x00071d7e ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00071d80 cbnz r3, 0x71d98 |
| while (1) {
0x00071d82 movs r3, 0 | r3 = 0;
0x00071d84 strd r3, r3, [r5, 0x1c] | __asm ("strd r3, r3, [r5, 0x1c]");
0x00071d88 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00071d8a b 0x71bcc | goto label_0;
| label_30:
0x00071d8c ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00071d8e bl 0x26dbc | r0 = fcn_00026dbc (r0);
0x00071d92 ldrd r7, r0, [r6, 0x20] | __asm ("ldrd r7, r0, [r6, 0x20]");
0x00071d96 b 0x71d66 | goto label_5;
0x00071d98 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00071d9a bl 0x26dbc | fcn_00026dbc (r0);
0x00071d9e b 0x71d82 |
| }
| label_24:
0x00071da0 movs r3, 7 | r3 = 7;
0x00071da2 movs r0, 0 | r0 = 0;
0x00071da4 str r3, [r5] | *(r5) = r3;
0x00071da6 bl 0x26dbc | fcn_00026dbc (r0);
0x00071daa b 0x71bc4 | goto label_2;
| label_23:
0x00071dac dmb ish | __asm ("dmb ish");
0x00071db0 b 0x71c86 | goto label_6;
| label_17:
0x00071db2 blx 0x6430 | fcn_00006430 ();
| label_22:
0x00071db6 mov r8, r2 | r8 = r2;
0x00071db8 mov fp, r2 |
0x00071dba b 0x71c5a | goto label_7;
| label_18:
0x00071dbc ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x00071dbe cmp r3, 0 |
| if (r3 == 0) {
0x00071dc0 beq.w 0x71f6a | goto label_32;
| }
0x00071dc4 ldrb.w r3, [r1, 0x22] | r3 = *((r1 + 0x22));
0x00071dc8 cmp r3, 0 |
| if (r3 == 0) {
0x00071dca beq.w 0x71f98 | goto label_33;
| }
0x00071dce ldr.w r8, [r1, 0x14] | r8 = *((r1 + 0x14));
0x00071dd2 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00071dd6 cmp r3, 0 |
| if (r3 != 0) {
0x00071dd8 bne.w 0x71fd2 | goto label_34;
| }
| label_10:
0x00071ddc movs r3, 0 | r3 = 0;
0x00071dde mov fp, r3 |
0x00071de0 strd r3, r3, [r8, 0x1c] | __asm ("strd r3, r3, [r8, 0x1c]");
0x00071de4 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
| label_8:
0x00071de8 ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x00071dec cmp r3, 0 |
| if (r3 <= 0) {
0x00071dee ble.w 0x71f46 | goto label_35;
| }
0x00071df2 ldr r2, [pc, 0x294] |
0x00071df4 mov.w r1, -1 | r1 = -1;
0x00071df8 add r0, sp, 0x30 | r0 += var_30h;
0x00071dfa mov sl, r5 | sl = r5;
0x00071dfc str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
0x00071e00 mov fp, r1 |
0x00071e02 add r2, pc | r2 = 0xe3e90;
0x00071e04 str r0, [sp, 0x14] | var_14h = r0;
0x00071e06 str r2, [sp, 0x1c] | var_1ch = r2;
0x00071e08 movs r2, 0 | r2 = 0;
0x00071e0a mov sb, r2 | sb = r2;
0x00071e0c mov r5, r2 | r5 = r2;
0x00071e0e add r0, sp, 0x28 | r0 += var_28h;
0x00071e10 str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch]");
0x00071e14 str r0, [sp, 0x20] | var_20h = r0;
0x00071e16 str r7, [sp, 0x18] | var_18h = r7;
0x00071e18 str r4, [sp, 8] | var_8h = r4;
| do {
0x00071e1a ldr r1, [sp, 0xc] | r1 = var_ch;
0x00071e1c ldr r4, [r1, 0x58] | r4 = *((r1 + 0x58));
0x00071e1e cmp r4, 0 |
| if (r4 != 0) {
0x00071e20 beq 0x71eb4 |
0x00071e22 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00071e24 cmp r3, 0 |
| if (r3 == 0) {
0x00071e26 beq.w 0x71fe6 | goto label_36;
| }
0x00071e2a ldr r7, [r3] | r7 = *(r3);
0x00071e2c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00071e2e ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x00071e32 cmp r3, 0 |
| if (r3 != 0) {
0x00071e34 bne.w 0x72006 | goto label_37;
| }
0x00071e38 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00071e3c cmp r0, 0 |
| if (r0 != 0) {
0x00071e3e bne.w 0x72040 | goto label_38;
| }
0x00071e42 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00071e46 cmp r0, 0 |
| if (r0 != 0) {
0x00071e48 bne.w 0x72040 | goto label_38;
| }
| label_12:
0x00071e4c asrs r1, r7, 0x1f | r1 = r7 >> 0x1f;
0x00071e4e mov r0, r7 | r0 = r7;
0x00071e50 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00071e54 mov r7, r0 | r7 = r0;
0x00071e56 cmp r0, 0 |
| if (r0 == 0) {
0x00071e58 beq.w 0x72040 | goto label_38;
| }
0x00071e5c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00071e5e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00071e60 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00071e62 str r3, [sp, 0x24] | var_24h = r3;
0x00071e64 mov r0, r4 | r0 = r4;
0x00071e66 bl 0x24184 | fcn_00024184 (r0, r1);
0x00071e6a ldr r3, [sp, 0x24] | r3 = var_24h;
0x00071e6c adds r1, r4, r0 | r1 = r4 + r0;
0x00071e6e ldr r3, [r3] | r3 = *(r3);
0x00071e70 subs r2, r3, r0 | r2 = r3 - r0;
0x00071e72 mov r0, r7 | r0 = r7;
0x00071e74 str r2, [sp, 0x24] | var_24h = r2;
0x00071e76 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00071e7a cmp.w sb, 0 |
| if (sb == 0) {
0x00071e7e beq.w 0x72052 | goto label_39;
| }
0x00071e82 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00071e84 movs r2, 0 | r2 = 0;
0x00071e86 sub.w r1, r5, fp | r1 = r5 - fp;
0x00071e8a ldr r0, [sp, 0x20] | r0 = var_20h;
0x00071e8c strd r7, sb, [sp, 0x28] | __asm ("strd r7, sb, [var_2ch]");
0x00071e90 str r3, [sp, 4] | var_4h = r3;
0x00071e92 add r3, sp, 0x2c | r3 += var_2ch;
0x00071e94 str r3, [sp] | *(sp) = r3;
0x00071e96 movs r3, 1 | r3 = 1;
0x00071e98 str r7, [sp, 0x30] | var_30h = r7;
0x00071e9a bl 0x2e838 | fcn_0002e838 (r0, r1, r2, r3, r4, r5);
0x00071e9e mov r0, sb | r0 = sb;
0x00071ea0 bl 0x26dbc | fcn_00026dbc (r0);
0x00071ea4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00071ea6 subs r2, r3, r7 | r2 = r3 - r7;
| if (r2 == r3) {
0x00071ea8 beq.w 0x72056 | goto label_40;
| }
| label_15:
0x00071eac ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x00071eb0 mov sb, r7 | sb = r7;
0x00071eb2 mov fp, r5 |
| }
0x00071eb4 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00071eb6 adds r5, 1 | r5++;
0x00071eb8 cmp r5, r3 |
0x00071eba add.w r1, r1, 0x18 | r1 += 0x18;
0x00071ebe str r1, [sp, 0xc] | var_ch = r1;
0x00071ec0 blt 0x71e1a |
| } while (r5 < r3);
0x00071ec2 mov r1, fp | r1 = fp;
0x00071ec4 ldr r7, [sp, 0x18] | r7 = var_18h;
0x00071ec6 cmp r1, 0 |
0x00071ec8 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x00071ecc ldr r4, [sp, 8] | r4 = var_8h;
0x00071ece mov r5, sl | r5 = sl;
| if (r1 >= 0) {
0x00071ed0 blt 0x71f46 |
0x00071ed2 ldr.w sl, [r8, 0x2c] | sl = *((r8 + 0x2c));
0x00071ed6 cmp.w sl, 0 |
| if (sl < 0) {
0x00071eda blt.w 0x7200c | goto label_41;
| }
0x00071ede ldr.w r0, [r8, 0x1c] | r0 = *((r8 + 0x1c));
0x00071ee2 cmp sl, r1 |
0x00071ee4 itete le |
| if (sl > r1) {
0x00071ee6 movle r3, sb | r3 = sb;
| }
| if (sl <= r1) {
0x00071ee8 subgt sl, sl, r1 | sl -= r1;
| }
| if (sl <= r1) {
0x00071eec subgt sl, r1, sl | sl = r1 - sl;
| }
| if (sl > r1) {
0x00071ef0 mov r3, r0 | r3 = r0;
| }
0x00071ef2 it gt |
| if (sl <= r1) {
0x00071ef4 movgt r0, sb | r0 = sb;
| }
0x00071ef6 strd r0, r3, [sp, 0x28] | __asm ("strd r0, r3, [var_2ch]");
0x00071efa add.w r0, r2, 8 | r0 = r2 + 8;
0x00071efe asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00071f00 bl 0x5ac48 | fcn_0005ac48 (r0, r1);
0x00071f04 str r0, [sp, 0x30] | var_30h = r0;
0x00071f06 cmp r0, 0 |
| if (r0 == 0) {
0x00071f08 beq.w 0x72020 | goto label_42;
| }
0x00071f0c add r3, sp, 0x2c | r3 += var_2ch;
0x00071f0e str.w r0, [r8, 0x1c] | __asm ("str.w r0, [r8, 0x1c]");
0x00071f12 str r3, [sp, 4] | var_4h = r3;
0x00071f14 add r3, sp, 0x28 | r3 += var_28h;
0x00071f16 mov r1, sl | r1 = sl;
0x00071f18 str r3, [sp] | *(sp) = r3;
0x00071f1a movs r2, 0 | r2 = 0;
0x00071f1c movs r3, 1 | r3 = 1;
0x00071f1e add r0, sp, 0x30 | r0 += var_30h;
0x00071f20 bl 0x2e838 | r0 = fcn_0002e838 (r0, r1, r2, r3, r4, r5);
0x00071f24 mov sl, r0 | sl = r0;
0x00071f26 cmp r0, 0 |
| if (r0 == 0) {
0x00071f28 beq.w 0x72034 | goto label_43;
| }
0x00071f2c ldr r3, [sp, 0x30] | r3 = var_30h;
0x00071f2e ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00071f32 sub.w sl, r3, r2 | sl = r3 - r2;
0x00071f36 movs r3, 1 | r3 = 1;
0x00071f38 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
| label_14:
0x00071f3c mov r0, sb | r0 = sb;
0x00071f3e str.w sl, [r8, 0x20] | __asm ("str.w sl, [r8, 0x20]");
0x00071f42 bl 0x26dbc | fcn_00026dbc (r0);
| }
| label_35:
0x00071f46 ldr.w sb, [r8, 0x1c] | sb = *((r8 + 0x1c));
| label_13:
0x00071f4a cmp sb, fp |
| if (sb == fp) {
0x00071f4c beq 0x71fdc | goto label_44;
| }
0x00071f4e mov r0, fp | r0 = fp;
0x00071f50 bl 0x26dbc | fcn_00026dbc (r0);
0x00071f54 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00071f58 subs r2, 0 |
0x00071f5a it ne |
| if (r2 == 0) {
0x00071f5c movne r2, 1 | r2 = 1;
| }
| label_11:
0x00071f5e ldrd r0, r1, [r6, 0x20] | __asm ("ldrd r0, r1, [r6, 0x20]");
0x00071f62 str r7, [r5] | *(r5) = r7;
0x00071f64 strd r0, r1, [r4, 0x18] | __asm ("strd r0, r1, [r4, 0x18]");
0x00071f68 b 0x71b82 | goto label_1;
| label_32:
0x00071f6a ldrb.w r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x00071f6e cmp r3, 0 |
| if (r3 != 0) {
0x00071f70 bne.w 0x71bcc | goto label_0;
| }
0x00071f74 ldrd r0, r2, [r1, 0x18] | __asm ("ldrd r0, r2, [r1, 0x18]");
0x00071f78 ldrd r1, r3, [r6, 0x20] | __asm ("ldrd r1, r3, [r6, 0x20]");
0x00071f7c cmp r2, r3 |
0x00071f7e it eq |
| if (r2 != r3) {
0x00071f80 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| goto label_45;
| }
| if (r2 != r3) {
| label_45:
0x00071f82 bne.w 0x71bcc | goto label_0;
| }
0x00071f86 ldr.w r8, [r4, 0x14] | r8 = *((r4 + 0x14));
| label_9:
0x00071f8a ldr.w r2, [r8, 0x20] | r2 = *((r8 + 0x20));
0x00071f8e cmp r2, 0 |
0x00071f90 ite le |
| if (r2 > 0) {
0x00071f92 movle r2, 0 | r2 = 0;
| }
| if (r2 <= 0) {
0x00071f94 movgt r2, 1 | r2 = 1;
| }
0x00071f96 b 0x71b82 | goto label_1;
| label_33:
0x00071f98 ldrd r0, r2, [r1, 0x18] | __asm ("ldrd r0, r2, [r1, 0x18]");
0x00071f9c ldrd r1, r3, [r6, 0x20] | __asm ("ldrd r1, r3, [r6, 0x20]");
0x00071fa0 cmp r2, r3 |
0x00071fa2 it eq |
| if (r2 != r3) {
0x00071fa4 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| goto label_46;
| }
| if (r2 != r3) {
| label_46:
0x00071fa6 bne.w 0x71bcc | goto label_0;
| }
0x00071faa ldr.w r8, [r4, 0x14] | r8 = *((r4 + 0x14));
0x00071fae ldr.w fp, [r8, 0x1c] | fp = *((r8 + 0x1c));
0x00071fb2 cmp.w fp, 0 |
| if (fp != 0) {
0x00071fb6 beq 0x71fc6 |
0x00071fb8 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00071fbc cmp r3, 0 |
0x00071fbe it eq |
| if (r3 != 0) {
0x00071fc0 moveq fp, 0 |
| }
0x00071fc2 lsrs r0, r0, 0xc | r0 >>= 0xc;
0x00071fc4 b 0x71de8 | goto label_8;
| }
0x00071fc6 ldrb.w r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00071fca cmp r3, 0 |
| if (r3 != 0) {
0x00071fcc bne.w 0x71bcc | goto label_0;
| }
0x00071fd0 b 0x71f8a | goto label_9;
| label_34:
0x00071fd2 ldr.w r0, [r8, 0x1c] | r0 = *((r8 + 0x1c));
0x00071fd6 bl 0x26dbc | fcn_00026dbc (r0);
0x00071fda b 0x71ddc | goto label_10;
| label_44:
0x00071fdc subs.w r2, sb, 0 | r2 = sb - 0;
0x00071fe0 it ne |
| if (r2 == sb) {
0x00071fe2 movne r2, 1 | r2 = 1;
| }
0x00071fe4 b 0x71f5e | goto label_11;
| label_36:
0x00071fe6 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x00071fea mov r0, sb | r0 = sb;
0x00071fec ldr r7, [sp, 0x18] | r7 = var_18h;
0x00071fee mov r5, sl | r5 = sl;
0x00071ff0 ldr r4, [sp, 8] | r4 = var_8h;
0x00071ff2 mov sl, r3 | sl = r3;
0x00071ff4 bl 0x26dbc | fcn_00026dbc (r0);
0x00071ff8 mov r0, fp | r0 = fp;
0x00071ffa bl 0x26dbc | fcn_00026dbc (r0);
0x00071ffe mov r2, sl | r2 = sl;
0x00072000 strd sl, sl, [r8, 0x1c] | __asm ("strd sl, sl, [r8, 0x1c]");
0x00072004 b 0x71f5e | goto label_11;
| label_37:
0x00072006 dmb ish | __asm ("dmb ish");
0x0007200a b 0x71e4c | goto label_12;
| label_41:
0x0007200c ldrd r0, r1, [r6, 0x20] | __asm ("ldrd r0, r1, [r6, 0x20]");
0x00072010 movs r3, 1 | r3 = 1;
0x00072012 strd sb, r2, [r8, 0x1c] | __asm ("strd sb, r2, [r8, 0x1c]");
0x00072016 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
0x0007201a strd r0, r1, [r8, 0x10] | __asm ("strd r0, r1, [r8, 0x10]");
0x0007201e b 0x71f4a | goto label_13;
| label_42:
0x00072020 mov r0, sb | r0 = sb;
0x00072022 movs r7, 7 | r7 = 7;
0x00072024 bl 0x26dbc | fcn_00026dbc (r0);
0x00072028 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x0007202c subs r2, 0 |
0x0007202e it ne |
| if (r2 == 0) {
0x00072030 movne r2, 1 | r2 = 1;
| }
0x00072032 b 0x71f5e | goto label_11;
| label_43:
0x00072034 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00072036 bl 0x26dbc | fcn_00026dbc (r0);
0x00072038 cdp2 p8, 0xc, c15, c1, c8, 6 | __asm ("cdp2 p8, 0xc, c15, c1, c8, 6");
0x0007203c adr r0, 0x70 | r0 = 0x70;
0x0007203e b 0x71f3c | goto label_14;
| label_38:
0x00072040 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00072044 mov r5, sl | r5 = sl;
0x00072046 ldr r4, [sp, 8] | r4 = var_8h;
0x00072048 movs r7, 7 | r7 = 7;
0x0007204a subs r2, 0 |
0x0007204c it ne |
| if (r2 == 0) {
0x0007204e movne r2, 1 | r2 = 1;
| }
0x00072050 b 0x71f5e | goto label_11;
| label_39:
0x00072052 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00072054 b 0x71eac | goto label_15;
| label_40:
0x00072056 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x0007205a mov r0, r7 | r0 = r7;
0x0007205c str r2, [sp, 0xc] | var_ch = r2;
0x0007205e mov r5, sl | r5 = sl;
0x00072060 ldr r4, [sp, 8] | r4 = var_8h;
0x00072062 bl 0x26dbc | fcn_00026dbc (r0);
0x00072066 mov r0, fp | r0 = fp;
0x00072068 bl 0x26dbc | fcn_00026dbc (r0);
0x0007206c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0007206e mov r7, r2 | r7 = r2;
0x00072070 strd r2, r2, [r8, 0x1c] | __asm ("strd r2, r2, [r8, 0x1c]");
0x00072074 b 0x71f5e | goto label_11;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7276c */
| #include <stdint.h>
|
; (fcn) fcn.0007276c () | void fcn_0007276c (int16_t arg1, int16_t arg2, int16_t arg4, arithmetic x) {
| int16_t var_0h;
| arithmetic var_4h;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
| r2 = x;
0x0007276c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00072770 sub sp, 0x24 |
0x00072772 str r0, [sp] | *(sp) = r0;
0x00072774 mov r0, r2 | r0 = r2;
0x00072776 mov sl, r3 | sl = r3;
0x00072778 str r2, [sp, 4] | var_4h = r2;
0x0007277a ldr r2, [pc, 0x2dc] |
0x0007277c ldr r3, [pc, 0x2dc] | r3 = *(0x72a5c);
0x0007277e str r1, [sp, 0xc] | var_ch = r1;
0x00072780 add r2, pc | r2 = 0xe51de;
0x00072782 ldr.w sb, [r1] | sb = *(r1);
0x00072786 ldr r3, [r2, r3] |
0x00072788 ldr r3, [r3] | r3 = *(0xe51de);
0x0007278a str r3, [sp, 0x1c] | var_1ch = r3;
0x0007278c mov.w r3, 0 | r3 = 0;
0x00072790 cmp.w sb, 0 |
| if (sb == 0) {
0x00072794 beq.w 0x729ce | goto label_7;
| }
0x00072798 ldr.w r6, [sb, 0x14] | r6 = *((sb + 0x14));
0x0007279c ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000727a0 ldr.w lr, [sb, 0x10] |
0x000727a4 cmp r6, sl |
0x000727a6 it ge |
| if (r6 < sl) {
0x000727a8 movge r6, sl | r6 = sl;
| }
0x000727aa cmp r6, 0 |
| if (r6 <= 0) {
0x000727ac ble.w 0x72a44 | goto label_8;
| }
0x000727b0 add.w r1, lr, -1 | r1 = lr + -1;
0x000727b4 subs r2, r0, 1 | r2 = r0 - 1;
0x000727b6 movs r4, 0 | r4 = 0;
0x000727b8 b 0x727c0 |
| while (r5 == r0) {
0x000727ba adds r4, 1 | r4++;
0x000727bc cmp r4, r6 |
| if (r4 == r6) {
0x000727be beq 0x727cc | goto label_9;
| }
0x000727c0 ldrb r5, [r1, 1]! | r5 = *((r1 += 1));
0x000727c4 ldrb r0, [r2, 1]! | r0 = *((r2 += 1));
0x000727c8 cmp r5, r0 |
0x000727ca beq 0x727ba |
| }
| label_9:
0x000727cc sub.w fp, sl, r4 |
0x000727d0 cmp.w fp, 0 |
0x000727d4 it le |
| if (fp <= 0) {
0x000727d6 movwle r0, 0x10b | __asm ("movwle r0, 0x10b");
| }
| if (fp <= 0) {
0x000727da ble 0x728ce | goto label_0;
| }
0x000727dc asr.w r8, r4, 0x1f | r8 = r4 >> 0x1f;
0x000727e0 mov r7, r4 | r7 = r4;
0x000727e2 mov r2, r4 | r2 = r4;
0x000727e4 mov.w ip, 0 |
0x000727e8 mov r1, r8 | r1 = r8;
| do {
0x000727ea lsrs r2, r2, 7 | r2 >>= 7;
0x000727ec add.w ip, ip, 1 |
0x000727f0 orr.w r2, r2, r1, lsl 25 | r2 |= (r1 << 25);
0x000727f4 lsrs r1, r1, 7 | r1 >>= 7;
0x000727f6 orrs.w r0, r2, r1 | r0 = r2 | r1;
0x000727fa bne 0x727ea |
| } while (r0 != r2);
| label_6:
0x000727fc asr.w r6, fp, 0x1f | r6 = fp >> 0x1f;
0x00072800 mov r5, fp | r5 = fp;
0x00072802 mov r1, fp | r1 = fp;
0x00072804 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h_2]");
0x00072808 movs r0, 0 | r0 = 0;
0x0007280a mov r2, r6 | r2 = r6;
| do {
0x0007280c lsrs r1, r1, 7 | r1 >>= 7;
0x0007280e adds r0, 1 | r0++;
0x00072810 orr.w r1, r1, r2, lsl 25 | r1 |= (r2 << 25);
0x00072814 lsrs r2, r2, 7 | r2 >>= 7;
0x00072816 orrs.w sb, r1, r2 | sb = r1 | r2;
0x0007281a bne 0x7280c |
| } while (sb != r1);
0x0007281c ldr r1, [sp] | r1 = *(sp);
0x0007281e add.w r2, r0, ip | r2 = r0 + ip;
0x00072822 add r2, fp | r2 += fp;
0x00072824 ldr.w sb, [sp, 8] | sb = var_8h_2;
0x00072828 add r2, r3 | r2 += r3;
0x0007282a ldr.w r1, [r1, 0xe8] | r1 = *((r1 + 0xe8));
0x0007282e cmp r2, r1 |
| if (r2 > r1) {
0x00072830 ble 0x728ea |
0x00072832 cmp.w lr, 0 |
| if (lr == 0) {
0x00072836 beq.w 0x729d6 | goto label_10;
| }
| label_1:
0x0007283a ldr r3, [pc, 0x224] |
0x0007283c add r3, pc |
0x0007283e ldr.w r3, [r3, 0xd0] | r3 = *(0xe5372);
0x00072842 cmp r3, 0 |
| if (r3 != 0) {
0x00072844 bne.w 0x72a14 | goto label_11;
| }
0x00072848 str r1, [sp, 8] | var_8h_2 = r1;
0x0007284a bl 0x25da0 | r0 = fcn_00025da0 ();
0x0007284e cmp r0, 0 |
| if (r0 != 0) {
0x00072850 bne.w 0x72a40 | goto label_12;
| }
0x00072854 bl 0x5a4b8 | fcn_0005a4b8 ();
0x00072858 ldr r1, [sp, 8] | r1 = var_8h_2;
0x0007285a cmp r0, 0 |
| if (r0 != 0) {
0x0007285c bne.w 0x72a40 | goto label_12;
| }
| label_3:
0x00072860 add.w r0, r1, 0x28 | r0 = r1 + 0x28;
0x00072864 movs r1, 0 | r1 = 0;
0x00072866 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007286a mov r4, r0 | r4 = r0;
0x0007286c str r0, [sp, 0x14] | var_14h = r0;
0x0007286e cmp r0, 0 |
| if (r0 == 0) {
0x00072870 beq.w 0x72a40 | goto label_12;
| }
0x00072874 movs r2, 0x28 | r2 = 0x28;
0x00072876 movs r1, 0 | r1 = 0;
0x00072878 blx 0x62ec | fcn_000062ec ();
0x0007287c movs r3, 0xb | r3 = 0xb;
0x0007287e str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x00072880 add.w r3, r4, 0x28 | r3 = r4 + 0x28;
0x00072884 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00072886 cmp.w sb, 0 |
| if (sb == 0) {
0x0007288a beq.w 0x72a1a | goto label_13;
| }
0x0007288e ldr.w r1, [sb] | r1 = *(sb);
0x00072892 mov r3, sl | r3 = sl;
0x00072894 ldrd r0, r2, [sp] | __asm ("ldrd r0, r2, [sp]");
0x00072898 str r1, [sp, 0x18] | var_18h = r1;
0x0007289a add r1, sp, 0x18 | r1 += var_18h;
0x0007289c bl 0x7276c | fcn_0007276c (r0, r1, r2, r3);
0x000728a0 ldr.w r3, [sb] | r3 = *(sb);
0x000728a4 cmp r3, 0 |
| if (r3 == 0) {
0x000728a6 beq.w 0x72a2c | goto label_14;
| }
0x000728aa ldr r3, [sp, 0x18] | r3 = var_18h;
| label_5:
0x000728ac ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x000728b0 str.w r4, [sb, 4] | __asm ("str.w r4, [sb, 4]");
0x000728b4 str r3, [r4] | *(r4) = r3;
0x000728b6 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x000728ba str r2, [r4, 8] | *((r4 + 8)) = r2;
0x000728bc str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x000728be ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000728c2 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000728c4 movs r3, 0 | r3 = 0;
0x000728c6 str.w r3, [sb, 0x1c] | __asm ("str.w r3, [sb, 0x1c]");
| label_4:
0x000728ca ldr r3, [sp, 0xc] | r3 = var_ch;
0x000728cc str r4, [r3] | *(r3) = r4;
| label_0:
0x000728ce ldr r2, [pc, 0x194] |
0x000728d0 ldr r3, [pc, 0x188] | r3 = *(0x72a5c);
0x000728d2 add r2, pc | r2 = 0xe533c;
0x000728d4 ldr r3, [r2, r3] | r3 = *(0xe533c);
0x000728d6 ldr r2, [r3] | r2 = *(0xe533c);
0x000728d8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000728da eors r2, r3 | r2 ^= r3;
0x000728dc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000728e0 bne.w 0x72a52 | goto label_15;
| }
0x000728e4 add sp, 0x24 |
0x000728e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000728ea ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
| label_2:
0x000728ee cmp.w lr, 0 |
| if (lr == 0) {
0x000728f2 beq 0x72924 | goto label_16;
| }
0x000728f4 add r0, r3 | r0 += r3;
0x000728f6 mov r2, r0 | r2 = r0;
| do {
0x000728f8 lsr.w lr, r7, 7 | lr = r7 >> 7;
0x000728fc orn r1, r7, 0x7f | r1 = r7 | 0x7f;
| r1 = ~r1;
0x00072900 uxtb.w ip, r7 | ip = (int8_t) r7;
0x00072904 orr.w r7, lr, r8, lsl 25 | r7 = lr | (r8 << 25);
0x00072908 lsr.w r8, r8, 7 | r8 >>= 7;
0x0007290c mov lr, r2 | lr = r2;
0x0007290e strb r1, [r2], 1 | *(r2) = r1;
| r2++;
0x00072912 orrs.w r1, r7, r8 | r1 = r7 | r8;
0x00072916 bne 0x728f8 |
| } while (r1 != r7);
0x00072918 subs r2, r2, r0 | r2 -= r0;
0x0007291a strb.w ip, [lr] | *(lr) = ip;
0x0007291e ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
0x00072922 add r3, r2 | r3 += r2;
| label_16:
0x00072924 add r0, r3 | r0 += r3;
0x00072926 mov r2, r0 | r2 = r0;
| do {
0x00072928 lsrs r7, r5, 7 | r7 = r5 >> 7;
0x0007292a orn r1, r5, 0x7f | r1 = r5 | 0x7f;
| r1 = ~r1;
0x0007292e uxtb.w ip, r5 | ip = (int8_t) r5;
0x00072932 orr.w r5, r7, r6, lsl 25 | r5 = r7 | (r6 << 25);
0x00072936 lsrs r6, r6, 7 | r6 >>= 7;
0x00072938 mov r7, r2 | r7 = r2;
0x0007293a strb r1, [r2], 1 | *(r2) = r1;
| r2++;
0x0007293e orrs.w r1, r5, r6 | r1 = r5 | r6;
0x00072942 bne 0x72928 |
| } while (r1 != r5);
0x00072944 subs r2, r2, r0 | r2 -= r0;
0x00072946 strb.w ip, [r7] | *(r7) = ip;
0x0007294a adds r5, r2, r3 | r5 = r2 + r3;
0x0007294c ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
0x00072950 ldr r3, [sp, 4] | r3 = var_4h;
0x00072952 mov r2, fp | r2 = fp;
0x00072954 add r0, r5 | r0 += r5;
0x00072956 add r5, fp | r5 += fp;
0x00072958 adds r1, r3, r4 | r1 = r3 + r4;
0x0007295a blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007295e ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x00072962 str.w r5, [sb, 0x20] | __asm ("str.w r5, [sb, 0x20]");
0x00072966 adds r3, 1 | r3++;
0x00072968 str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
0x0007296c ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00072970 cmp sl, r3 |
0x00072972 it le |
| if (sl > r3) {
0x00072974 ldrle r0, [sb, 0x1c] | r0 = *((sb + 0x1c));
| }
| if (sl <= r3) {
0x00072978 ble 0x729b4 | goto label_17;
| }
0x0007297a ldr r3, [pc, 0xec] |
0x0007297c ldr.w r4, [sb, 0x1c] | r4 = *((sb + 0x1c));
0x00072980 add r3, pc |
0x00072982 ldr.w r3, [r3, 0xd0] | r3 = *(0xe54be);
| if (r3 != 0) {
0x00072986 cbnz r3, 0x729c8 | goto label_18;
| }
0x00072988 bl 0x25da0 | r0 = fcn_00025da0 ();
0x0007298c cmp r0, 0 |
| if (r0 != 0) {
0x0007298e bne 0x72a40 | goto label_12;
| }
0x00072990 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00072994 cmp r0, 0 |
| if (r0 != 0) {
0x00072996 bne 0x72a40 | goto label_12;
| }
| do {
0x00072998 asr.w r3, sl, 0x1f | r3 = sl >> 0x1f;
0x0007299c adds.w r2, sl, sl | r2 = sl + sl;
0x000729a0 mov r0, r4 | r0 = r4;
0x000729a2 adcs r3, r3 | __asm ("adcs r3, r3");
0x000729a4 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000729a8 cmp r0, 0 |
| if (r0 == 0) {
0x000729aa beq 0x72a40 | goto label_12;
| }
0x000729ac lsl.w r3, sl, 1 | r3 = sl << 1;
0x000729b0 strd r3, r0, [sb, 0x18] | __asm ("strd r3, r0, [sb, 0x18]");
| label_17:
0x000729b4 ldr r1, [sp, 4] | r1 = var_4h;
0x000729b6 mov r2, sl | r2 = sl;
0x000729b8 str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
0x000729bc blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000729c0 movs r0, 0 | r0 = 0;
0x000729c2 str.w sl, [sb, 0x14] | __asm ("str.w sl, [sb, 0x14]");
0x000729c6 b 0x728ce | goto label_0;
| label_18:
0x000729c8 dmb ish | __asm ("dmb ish");
0x000729cc b 0x72998 |
| } while (1);
| label_7:
0x000729ce ldr r3, [sp] | r3 = *(sp);
0x000729d0 ldr.w r1, [r3, 0xe8] | r1 = *((r3 + 0xe8));
0x000729d4 b 0x7283a | goto label_1;
| label_10:
0x000729d6 ldr r1, [pc, 0x94] |
0x000729d8 add r1, pc |
0x000729da ldr.w r1, [r1, 0xd0] | r1 = *(0xe551a);
| if (r1 != 0) {
0x000729de cbnz r1, 0x72a34 | goto label_19;
| }
0x000729e0 str r3, [sp, 8] | var_8h_2 = r3;
0x000729e2 str r2, [sp] | *(sp) = r2;
0x000729e4 bl 0x25da0 | fcn_00025da0 ();
0x000729e8 ldr r2, [sp] | r2 = *(sp);
0x000729ea ldr r3, [sp, 8] | r3 = var_8h_2;
| if (r0 != 0) {
0x000729ec cbnz r0, 0x72a3a | goto label_20;
| }
0x000729ee str r3, [sp, 8] | var_8h_2 = r3;
0x000729f0 str r2, [sp] | *(sp) = r2;
0x000729f2 bl 0x5a4b8 | fcn_0005a4b8 ();
0x000729f6 ldr r2, [sp] | r2 = *(sp);
0x000729f8 ldr r3, [sp, 8] | r3 = var_8h_2;
| if (r0 != 0) {
0x000729fa cbnz r0, 0x72a3a | goto label_20;
| }
| do {
0x000729fc asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x000729fe mov r0, r2 | r0 = r2;
0x00072a00 str r3, [sp] | *(sp) = r3;
0x00072a02 bl 0x28c3c | fcn_00028c3c (r0);
0x00072a06 str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
| if (r0 == 0) {
0x00072a0a cbz r0, 0x72a40 | goto label_12;
| }
0x00072a0c ldr.w lr, [sb, 0x10] |
0x00072a10 ldr r3, [sp] | r3 = *(sp);
0x00072a12 b 0x728ee | goto label_2;
| label_11:
0x00072a14 dmb ish | __asm ("dmb ish");
0x00072a18 b 0x72860 | goto label_3;
| label_13:
0x00072a1a str r4, [r4, 8] | *((r4 + 8)) = r4;
0x00072a1c mov r3, sl | r3 = sl;
0x00072a1e ldr r2, [sp, 4] | r2 = var_4h;
0x00072a20 add r1, sp, 0x14 | r1 += var_14h;
0x00072a22 ldr r0, [sp] | r0 = *(sp);
0x00072a24 bl 0x7276c | fcn_0007276c (r0, r1, r2, r3);
0x00072a28 ldr r4, [sp, 0x14] | r4 = var_14h;
0x00072a2a b 0x728ca | goto label_4;
| label_14:
0x00072a2c ldr r3, [sp, 0x18] | r3 = var_18h;
0x00072a2e str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00072a32 b 0x728ac | goto label_5;
| label_19:
0x00072a34 dmb ish | __asm ("dmb ish");
0x00072a38 b 0x729fc |
| } while (1);
| label_20:
0x00072a3a movs r3, 0 | r3 = 0;
0x00072a3c str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00072a3e adds r0, 0x24 | r0 += 0x24;
| label_12:
0x00072a40 movs r0, 7 | r0 = 7;
0x00072a42 b 0x728ce | goto label_0;
| label_8:
0x00072a44 movs r7, 0 | r7 = 0;
0x00072a46 mov fp, sl |
0x00072a48 mov r8, r7 | r8 = r7;
0x00072a4a mov r4, r7 | r4 = r7;
0x00072a4c mov.w ip, 1 |
0x00072a50 b 0x727fc | goto label_6;
| label_15:
0x00072a52 blx 0x6430 | fcn_00006430 ();
0x00072a56 nop |
0x00072a58 strb r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x00072a5a movs r7, r0 | r7 = r0;
0x00072a5c lsls r4, r6, 8 | r4 = r6 << 8;
0x00072a5e movs r0, r0 |
0x00072a60 ldrb r0, [r3, 9] | r0 = *((r3 + 9));
0x00072a62 movs r7, r0 | r7 = r0;
0x00072a64 strb r6, [r0, 0x13] | *((r0 + 0x13)) = r6;
0x00072a66 movs r7, r0 | r7 = r0;
0x00072a68 ldrb r4, [r2, 4] | r4 = *((r2 + 4));
0x00072a6a movs r7, r0 | r7 = r0;
0x00072a6c ldrb r4, [r7, 2] | r4 = *((r7 + 2));
0x00072a6e movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x72a70 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00072a70 () | void fcn_00072a70 (int16_t arg_0h, char * s1, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_14h_2;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00072a70 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00072a74 sub sp, 0x1c |
0x00072a76 ldr r4, [r2] | r4 = *(r2);
0x00072a78 mov sb, r2 | sb = r2;
0x00072a7a mov r5, r1 | r5 = r1;
0x00072a7c strd r0, r3, [sp] | __asm ("strd r0, r3, [sp]");
0x00072a80 cmp r1, 0 |
| if (r1 == 0) {
0x00072a82 beq.w 0x72cee | goto label_18;
| }
0x00072a86 mov r0, r1 | r0 = r1;
0x00072a88 mov.w fp, 0 |
0x00072a8c blx 0x65dc | strcmp (r0, r1);
0x00072a90 lsls r3, r4, 0x19 | r3 = r4 << 0x19;
0x00072a92 bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
0x00072a96 mov sl, r6 | sl = r6;
0x00072a98 add.w r7, r6, 8 | r7 = r6 + 8;
| if (r3 >= r4) {
0x00072a9c bpl.w 0x72c26 | goto label_19;
| }
| label_3:
0x00072aa0 cmp r6, 4 |
| if (r6 < 4) {
0x00072aa2 bls.w 0x72c32 | goto label_4;
| }
0x00072aa6 ldr.w r1, [pc, 0x4b0] |
0x00072aaa movs r2, 5 | r2 = 5;
0x00072aac mov r0, r5 | r0 = r5;
0x00072aae add r1, pc | r1 = 0xe5a0c;
0x00072ab0 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x00072ab4 mov r8, r0 | r8 = r0;
0x00072ab6 cmp r0, 0 |
| if (r0 != 0) {
0x00072ab8 bne.w 0x72c32 | goto label_4;
| }
0x00072abc subs r2, r5, 1 | r2 = r5 - 1;
0x00072abe orr r4, r4, 0x40 | r4 |= 0x40;
0x00072ac2 adds r1, r2, r6 | r1 = r2 + r6;
| do {
0x00072ac4 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00072ac8 sub.w r3, r3, 0x26 | r3 -= 0x26;
0x00072acc clz r3, r3 | r3 &= r3;
0x00072ad0 lsrs r3, r3, 5 | r3 >>= 5;
0x00072ad2 adds r3, r3, r7 | r3 += r7;
0x00072ad4 adc r6, fp, 0 | __asm ("adc r6, arg_0h");
0x00072ad8 cmp r2, r1 |
0x00072ada mov r7, r3 | r7 = r3;
0x00072adc mov fp, r6 |
0x00072ade bne 0x72ac4 |
| } while (r2 != r1);
0x00072ae0 mov sl, r3 | sl = r3;
0x00072ae2 ldr.w r3, [pc, 0x478] |
0x00072ae6 add r3, pc |
0x00072ae8 ldr.w r3, [r3, 0xd0] | r3 = *(0xe5b18);
0x00072aec cmp r3, 0 |
| if (r3 != 0) {
0x00072aee bne.w 0x72e80 | goto label_20;
| }
0x00072af2 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00072af6 cmp r0, 0 |
| if (r0 != 0) {
0x00072af8 bne.w 0x72c8a | goto label_21;
| }
0x00072afc bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00072b00 cmp r0, 0 |
| if (r0 != 0) {
0x00072b02 bne.w 0x72c8a | goto label_21;
| }
| label_12:
0x00072b06 mov r1, r6 | r1 = r6;
0x00072b08 mov r0, sl | r0 = sl;
0x00072b0a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00072b0e mov r6, r0 | r6 = r0;
0x00072b10 cmp r0, 0 |
| if (r0 == 0) {
0x00072b12 beq.w 0x72c8a | goto label_21;
| }
0x00072b16 movs r3, 0 | r3 = 0;
0x00072b18 str r3, [r6], 4 | *(r6) = r3;
| r6 += 4;
0x00072b1c ldrb r3, [r5, 5] | r3 = *((r5 + 5));
0x00072b1e cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x00072b20 beq.w 0x72e86 | goto label_22;
| }
0x00072b24 mov.w ip, 5 |
0x00072b28 subs r2, r3, 0 | r2 = r3 - 0;
0x00072b2a it ne |
| if (r2 == r3) {
0x00072b2c movne r2, 1 | r2 = 1;
| }
0x00072b2e mov r7, ip | r7 = ip;
| label_14:
0x00072b30 cmp r3, 0x23 |
0x00072b32 ite eq |
| if (r3 != 0x23) {
0x00072b34 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x23) {
0x00072b36 andne r2, r2, 1 | r2 &= 1;
| }
0x00072b3a cmp r2, 0 |
| if (r2 == 0) {
0x00072b3c beq.w 0x72f32 | goto label_23;
| }
| label_13:
0x00072b40 ldr.w fp, [pc, 0x41c] |
0x00072b44 movs r2, 0 | r2 = 0;
0x00072b46 add fp, pc | fp = 0xe5aaa;
0x00072b48 b 0x72b76 |
| while (r3 != 0x25) {
0x00072b4a cmp r2, 1 |
| if (r2 == 1) {
0x00072b4c beq.w 0x72ca6 | goto label_24;
| }
0x00072b50 cmp r2, 0 |
0x00072b52 it eq |
| if (r2 == 0) {
0x00072b54 cmpeq r3, 0x3f | __asm ("cmpeq r3, 0x3f");
| }
0x00072b56 itt eq |
| if (r2 != 0) {
0x00072b58 moveq r2, 1 | r2 = 1;
| }
| if (r2 != 0) {
0x00072b5a moveq r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x00072b5c bne.w 0x72cd8 | goto label_25;
| }
| label_0:
0x00072b60 add.w r8, r8, 1 | r8++;
0x00072b64 mov r7, r0 | r7 = r0;
0x00072b66 strb r3, [r6, r1] | *((r6 + r1)) = r3;
| label_2:
0x00072b68 ldrb r3, [r5, r7] | r3 = *((r5 + r7));
0x00072b6a mov ip, r7 |
0x00072b6c cmp r3, 0 |
0x00072b6e it ne |
| if (r3 != 0) {
0x00072b70 cmpne r3, 0x23 | __asm ("cmpne r3, 0x23");
| }
| if (r3 == 0) {
0x00072b72 beq.w 0x72d34 | goto label_26;
| }
0x00072b76 cmp r3, 0x25 |
0x00072b78 add.w r0, r7, 1 | r0 = r7 + 1;
0x00072b7c mov r1, r8 | r1 = r8;
0x00072b7e bne 0x72b4a |
| }
0x00072b80 ldrb.w sl, [r5, r0] | sl = *((r5 + r0));
0x00072b84 add.w lr, fp, sl | lr = fp + sl;
0x00072b88 ldrb.w lr, [lr, 0x40] |
0x00072b8c tst.w lr, 8 |
| if ((lr & 8) == 0) {
0x00072b90 beq 0x72b60 | goto label_0;
| }
0x00072b92 add ip, r5 |
0x00072b94 ldrb.w lr, [ip, 2] |
0x00072b98 add.w ip, fp, lr |
0x00072b9c ldrb.w ip, [ip, 0x40] | ip = *((ip + 0x40));
0x00072ba0 tst.w ip, 8 |
| if ((ip & 8) == 0) {
0x00072ba4 beq 0x72b60 | goto label_0;
| }
0x00072ba6 ubfx r3, sl, 6, 1 | r3 = (sl >> 6) & ((1 << 1) - 1);
0x00072baa adds r0, r7, 3 | r0 = r7 + 3;
0x00072bac add.w r3, r3, r3, lsl 3 | r3 += (r3 << 3);
0x00072bb0 add.w ip, r3, sl |
0x00072bb4 ubfx r3, lr, 6, 1 | r3 = (lr >> 6) & ((1 << 1) - 1);
0x00072bb8 add.w r3, r3, r3, lsl 3 | r3 += (r3 << 3);
0x00072bbc and ip, ip, 0xf |
0x00072bc0 add r3, lr | r3 += lr;
0x00072bc2 and r3, r3, 0xf | r3 &= 0xf;
0x00072bc6 adds.w r3, r3, ip, lsl 4 | r3 += (ip << 4);
0x00072bca it ne |
| if (r3 == r3) {
0x00072bcc uxtbne r3, r3 | __asm ("uxtbne r3, r3");
| goto label_27;
| }
| if (r3 != r3) {
| label_27:
0x00072bce bne 0x72b60 | goto label_0;
| }
0x00072bd0 ldrb r3, [r5, r0] | r3 = *((r5 + r0));
0x00072bd2 cmp r3, 0 |
0x00072bd4 it ne |
| if (r3 != 0) {
0x00072bd6 cmpne r3, 0x23 | __asm ("cmpne r3, 0x23");
| }
| if (r3 == 0) {
0x00072bd8 beq.w 0x72d34 | goto label_26;
| }
0x00072bdc adds r1, r7, 4 | r1 = r7 + 4;
0x00072bde subs.w ip, r2, 0 |
0x00072be2 add r1, r5 | r1 += r5;
0x00072be4 it ne |
| if (ip == r2) {
0x00072be6 movne ip, 1 |
| }
0x00072bea b 0x72c04 |
| while (r2 != 1) {
0x00072bec cmp r3, 0x26 |
0x00072bee it eq |
| if (r3 == 0x26) {
0x00072bf0 cmpeq r2, 2 | __asm ("cmpeq r2, 2");
| }
| if (r3 == 0x26) {
0x00072bf2 beq.w 0x72f4c | goto label_28;
| }
| label_1:
0x00072bf6 ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x00072bfa cmp r3, 0x23 |
0x00072bfc it ne |
| if (r3 != 0x23) {
0x00072bfe cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 == 0x23) {
0x00072c00 beq.w 0x72d34 | goto label_26;
| }
0x00072c04 cmp r3, 0x3f |
0x00072c06 ite eq |
| if (r3 != 0x3f) {
0x00072c08 moveq r0, ip | r0 = ip;
| }
| if (r3 == 0x3f) {
0x00072c0a orrne r0, ip, 1 | r0 = ip | 1;
| }
0x00072c0e subs r7, r1, r5 | r7 = r1 - r5;
0x00072c10 subs r7, 1 | r7--;
0x00072c12 cmp r0, 0 |
| if (r0 == 0) {
0x00072c14 beq.w 0x72f48 | goto label_29;
| }
0x00072c18 cmp r2, 1 |
0x00072c1a bne 0x72bec |
| }
0x00072c1c cmp r3, 0x3d |
0x00072c1e it ne |
| if (r3 == 0x3d) {
0x00072c20 cmpne r3, 0x26 | __asm ("cmpne r3, 0x26");
| goto label_30;
| }
| if (r3 != 0x3d) {
| label_30:
0x00072c22 bne 0x72bf6 | goto label_1;
| }
0x00072c24 b 0x72b68 | goto label_2;
| label_19:
0x00072c26 ldr r3, [pc, 0x33c] |
0x00072c28 add r3, pc | r3 = 0xe5b92;
0x00072c2a ldrb r3, [r3, 6] | r3 = *((r3 + 6));
0x00072c2c cmp r3, 0 |
| if (r3 != 0) {
0x00072c2e bne.w 0x72aa0 | goto label_3;
| }
0x00072c30 add r7, sp, 0xdc | r7 = sp + 0xdc;
| label_4:
0x00072c32 ldr r3, [pc, 0x334] |
0x00072c34 add r3, pc |
0x00072c36 ldr.w r3, [r3, 0xd0] | r3 = *(0xe5c72);
| if (r3 != 0) {
0x00072c3a cbnz r3, 0x72c94 | goto label_31;
| }
0x00072c3c bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x00072c40 cbnz r0, 0x72c8a | goto label_21;
| }
0x00072c42 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00072c46 cbnz r0, 0x72c8a |
| while (1) {
0x00072c48 mov r0, r7 | r0 = r7;
0x00072c4a mov r1, fp | r1 = fp;
0x00072c4c bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00072c50 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00072c52 cbz r0, 0x72c8a |
0x00072c54 movs r3, 0 | r3 = 0;
0x00072c56 str r3, [r6], 4 | *(r6) = r3;
| r6 += 4;
0x00072c5a cmp.w sl, 0 |
| if (sl != 0) {
0x00072c5e bne 0x72c9a | goto label_32;
| }
0x00072c60 bic r4, r4, 0x40 | r4 = BIT_MASK (r4, 0x40);
0x00072c64 movs r3, 0 | r3 = 0;
0x00072c66 str.w r3, [r6, sl] | __asm ("str.w r3, [r6, sl]");
| label_7:
0x00072c6a ldr r0, [sp] | r0 = *(sp);
0x00072c6c movs r5, 0 | r5 = 0;
0x00072c6e bl 0x62650 | fcn_00062650 (r0);
0x00072c72 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00072c74 str r0, [r3] | *(r3) = r0;
0x00072c76 cmp r0, 0 |
| if (r0 == 0) {
0x00072c78 beq 0x72cf6 | goto label_33;
| }
| label_6:
0x00072c7a ldr r3, [sp, 0x40] | r3 = var_0h;
0x00072c7c mov r0, r5 | r0 = r5;
0x00072c7e str.w r4, [sb] | __asm ("str.w r4, [sb]");
0x00072c82 str r6, [r3] | *(r3) = r6;
0x00072c84 add sp, 0x1c |
0x00072c86 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
| label_21:
0x00072c8a movs r5, 7 | r5 = 7;
0x00072c8c mov r0, r5 | r0 = r5;
0x00072c8e add sp, 0x1c |
0x00072c90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_31:
0x00072c94 dmb ish | __asm ("dmb ish");
0x00072c98 b 0x72c48 |
| }
| label_32:
0x00072c9a mov r1, r5 | r1 = r5;
0x00072c9c mov r2, sl | r2 = sl;
0x00072c9e mov r0, r6 | r0 = r6;
0x00072ca0 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00072ca2 stc p7, c14, [r4], {0xdc} | __asm ("stc p7, c14, [r4], {0xdc}");
| label_24:
0x00072ca6 cmp r3, 0x3d |
0x00072ca8 it ne |
| if (r3 == 0x3d) {
0x00072caa cmpne r3, 0x26 | __asm ("cmpne r3, 0x26");
| goto label_34;
| }
| if (r3 != 0x3d) {
| label_34:
0x00072cac bne.w 0x72b60 | goto label_0;
| }
0x00072cb0 add.w ip, r6, r8 |
0x00072cb4 ldrb lr, [ip, -0x1] |
0x00072cb8 cmp.w lr, 0 |
| if (lr == 0) {
0x00072cbc beq.w 0x72f06 | goto label_35;
| }
0x00072cc0 cmp r3, 0x26 |
0x00072cc2 itt ne |
| if (r3 == 0x26) {
0x00072cc4 movne r2, 2 | r2 = 2;
| }
| if (r3 != 0x26) {
0x00072cc6 movne r3, 0 | r3 = 0;
| goto label_36;
| }
| if (r3 != 0x26) {
| label_36:
0x00072cc8 bne.w 0x72b60 | goto label_0;
| }
0x00072ccc add.w r8, r8, 1 | r8++;
0x00072cd0 movs r3, 0 | r3 = 0;
0x00072cd2 strb r3, [r6, r1] | *((r6 + r1)) = r3;
0x00072cd4 mov r1, r8 | r1 = r8;
0x00072cd6 b 0x72b60 | goto label_0;
| label_25:
0x00072cd8 cmp r2, 2 |
0x00072cda it eq |
| if (r2 == 2) {
0x00072cdc cmpeq r3, 0x26 | __asm ("cmpeq r3, 0x26");
| }
0x00072cde ite eq |
| if (r2 != 2) {
0x00072ce0 moveq r7, 1 | r7 = 1;
| }
| if (r2 == 2) {
0x00072ce2 movne r7, 0 | r7 = 0;
| }
0x00072ce4 cmp r7, 0 |
0x00072ce6 itt ne |
| if (r7 == 0) {
0x00072ce8 movne r2, 1 | r2 = 1;
| }
| if (r7 == 0) {
0x00072cea movne r3, 0 | r3 = 0;
| }
0x00072cec b 0x72b60 | goto label_0;
| label_18:
0x00072cee movs r7, 8 | r7 = 8;
0x00072cf0 mov fp, r1 |
0x00072cf2 mov sl, r1 | sl = r1;
0x00072cf4 b 0x72c32 | goto label_4;
| label_33:
0x00072cf6 ldr r0, [pc, 0x274] |
0x00072cf8 movs r5, 1 | r5 = 1;
0x00072cfa ldr r1, [sp] | r1 = *(sp);
0x00072cfc add r0, pc | r0 = 0xe5c6e;
0x00072cfe bl 0x5cb60 | fcn_0005cb60 ();
| label_10:
0x00072d02 ldr r3, [sp, 0x44] | r3 = var_4h;
0x00072d04 str r0, [r3] | *(r3) = r0;
0x00072d06 b 0x72d0a |
| while (r3 != 0) {
| label_5:
0x00072d08 subs r6, 1 | r6--;
0x00072d0a ldrb r3, [r6, -0x1] | r3 = *((r6 - 0x1));
0x00072d0e cmp r3, 0 |
0x00072d10 bne 0x72d08 |
| }
0x00072d12 ldrb r3, [r6, -0x2] | r3 = *((r6 - 0x2));
0x00072d16 cmp r3, 0 |
| if (r3 != 0) {
0x00072d18 bne 0x72d08 | goto label_5;
| }
0x00072d1a ldrb r3, [r6, -0x3] | r3 = *((r6 - 0x3));
0x00072d1e cmp r3, 0 |
| if (r3 != 0) {
0x00072d20 bne 0x72d08 | goto label_5;
| }
0x00072d22 ldrb r3, [r6, -0x4] | r3 = *((r6 - 0x4));
0x00072d26 cmp r3, 0 |
| if (r3 != 0) {
0x00072d28 bne 0x72d08 | goto label_5;
| }
0x00072d2a subs r0, r6, 4 | r0 = r6 - 4;
0x00072d2c mov r6, r3 | r6 = r3;
0x00072d2e bl 0x26dbc | fcn_00026dbc (r0);
0x00072d32 b 0x72c7a | goto label_6;
| label_26:
0x00072d34 cmp r2, 1 |
0x00072d36 add.w ip, r6, r8 |
| if (r2 == 1) {
0x00072d3a beq.w 0x72ee2 | goto label_16;
| }
| label_15:
0x00072d3e movs r3, 0 | r3 = 0;
0x00072d40 mov r0, r6 | r0 = r6;
0x00072d42 str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x00072d46 blx 0x65dc | r0 = strcmp (r0, r1);
0x00072d4a bic fp, r0, 0xc0000000 | fp = BIT_MASK (r0, 0xc0000000);
0x00072d4c ldr r3, [pc, 0x100] | r3 = *(0x72e50);
0x00072d4e add.w fp, fp, 1 |
0x00072d52 ldrb.w r3, [r6, fp] | r3 = *((r6 + fp));
0x00072d56 add fp, r6 |
0x00072d58 cmp r3, 0 |
| if (r3 == 0) {
0x00072d5a beq 0x72c6a | goto label_7;
| }
0x00072d5c ldr.w r8, [pc, 0x210] |
0x00072d60 ldr r7, [pc, 0x210] |
0x00072d62 strd r6, sb, [sp, 0xc] | __asm ("strd r6, sb, [sp, 0xc]");
0x00072d66 add r8, pc | r8 = 0xe5cda;
0x00072d68 addw r3, r8, 0xc28 | __asm ("addw r3, r8, 0xc28");
0x00072d6c add r7, pc | r7 = 0xe5ce4;
0x00072d6e mov r8, fp | r8 = fp;
0x00072d70 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00072d72 str r7, [sp, 8] | var_8h = r7;
0x00072d74 b 0x72d98 |
| while (fp != 3) {
0x00072d76 cmp.w fp, 5 |
| if (fp == 5) {
0x00072d7a beq 0x72dd8 | goto label_37;
| }
0x00072d7c cmp.w fp, 4 |
| if (fp == 4) {
0x00072d80 bne 0x72d8a |
0x00072d82 ldrb.w r3, [r8] | r3 = *(r8);
0x00072d86 cmp r3, 0x6d |
| if (r3 == 0x6d) {
0x00072d88 beq 0x72e48 | goto label_38;
| }
| }
| label_8:
0x00072d8a adds r5, 1 | r5++;
0x00072d8c ldrb.w r3, [sl, r5] | r3 = *((sl + r5));
0x00072d90 add.w r8, sl, r5 | r8 = sl + r5;
0x00072d94 cmp r3, 0 |
| if (r3 == 0) {
0x00072d96 beq 0x72e7a | goto label_39;
| }
0x00072d98 mov r0, r8 | r0 = r8;
0x00072d9a blx 0x65dc | r0 = strcmp (r0, r1);
0x00072d9e bic fp, r0, 0xc0000000 | fp = BIT_MASK (r0, 0xc0000000);
0x00072da2 add.w sl, fp, 1 | sl += s1;
0x00072da4 lsrs r1, r0, 8 | r1 = r0 >> 8;
0x00072da6 add sl, r8 | sl += r8;
0x00072da8 mov r0, sl | r0 = sl;
0x00072daa blx 0x65dc | strcmp (r0, r1);
0x00072dae cmp.w fp, 3 |
0x00072db2 bic r5, r0, 0xc0000000 | r5 = BIT_MASK (r0, 0xc0000000);
0x00072db6 bne 0x72d76 |
| }
0x00072db8 ldrb.w r3, [r8] | r3 = *(r8);
0x00072dbc cmp r3, 0x76 |
| if (r3 != 0x76) {
0x00072dbe bne 0x72d8a | goto label_8;
| }
0x00072dc0 ldrb.w r3, [r8, 1] | r3 = *((r8 + 1));
0x00072dc4 cmp r3, 0x66 |
| if (r3 != 0x66) {
0x00072dc6 bne 0x72d8a | goto label_8;
| }
0x00072dc8 ldr r2, [sp] | r2 = *(sp);
0x00072dca ldrb.w r3, [r8, 2] | r3 = *((r8 + 2));
0x00072dce cmp r3, 0x73 |
0x00072dd0 it eq |
| if (r3 != 0x73) {
0x00072dd2 moveq r2, sl | r2 = sl;
| }
0x00072dd4 str r2, [sp] | *(sp) = r2;
0x00072dd6 b 0x72d8a | goto label_8;
| label_37:
0x00072dd8 ldr r0, [sp, 8] | r0 = var_8h;
0x00072dda mov r2, fp | r2 = fp;
0x00072ddc mov r1, r8 | r1 = r8;
0x00072dde blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x00072de2 cmp r0, 0 |
| if (r0 != 0) {
0x00072de4 bne 0x72d8a | goto label_8;
| }
0x00072de6 ldr r3, [sp, 8] | r3 = var_8h;
0x00072de8 mov.w r8, 0x60000 | r8 = 0x60000;
0x00072dec mov r6, r8 | r6 = r8;
0x00072dee mov fp, r3 |
0x00072df0 ldr r3, [sp, 0x14] | r3 = var_14h_2;
| label_11:
0x00072df2 ldr r7, [r3] | r7 = *(r3);
| if (r7 == 0) {
0x00072df4 cbz r7, 0x72e34 | goto label_40;
| }
0x00072df6 mov sb, r3 | sb = r3;
0x00072df8 b 0x72e00 |
| while (r5 != r0) {
| label_9:
0x00072dfa ldr r7, [sb, 8]! | r7 = *((sb += 8));
| if (r7 == 0) {
0x00072dfe cbz r7, 0x72e34 | goto label_40;
| }
0x00072e00 mov r0, r7 | r0 = r7;
0x00072e02 blx 0x65dc | r0 = strcmp (r0, r1);
0x00072e06 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x00072e0a cmp r5, r0 |
0x00072e0c bne 0x72dfa |
| }
0x00072e0e mov r1, r7 | r1 = r7;
0x00072e10 mov r2, r5 | r2 = r5;
0x00072e12 mov r0, sl | r0 = sl;
0x00072e14 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x00072e18 cmp r0, 0 |
| if (r0 != 0) {
0x00072e1a bne 0x72dfa | goto label_9;
| }
0x00072e1c ldr.w r3, [sb, 4] | r3 = *((sb + 4));
| if (r3 != 0) {
0x00072e20 cbz r3, 0x72e34 |
0x00072e22 bic r0, r3, 0x80 | r0 = BIT_MASK (r3, 0x80);
0x00072e26 cmp r0, r6 |
| if (r0 > r6) {
0x00072e28 bgt 0x72ef2 | goto label_41;
| }
0x00072e2a bic.w r2, r4, r8 | r2 = BIT_MASK (r4, r8);
0x00072e2e orr.w r4, r3, r2 | r4 = r3 | r2;
0x00072e32 b 0x72d8a | goto label_8;
| }
| label_40:
0x00072e34 ldr r0, [pc, 0x140] |
0x00072e36 mov r2, sl | r2 = sl;
0x00072e38 mov r1, fp | r1 = fp;
0x00072e3a ldrd r6, sb, [sp, 0xc] | __asm ("ldrd r6, sb, [var_ch_2]");
0x00072e3e movs r5, 1 | r5 = 1;
0x00072e40 add r0, pc | r0 = 0xe5dbc;
0x00072e42 bl 0x5cb60 | fcn_0005cb60 ();
0x00072e46 b 0x72d02 | goto label_10;
| label_38:
0x00072e48 ldrb.w r3, [r8, 1] | r3 = *((r8 + 1));
0x00072e4c add.w r1, r8, 1 | r1 = r8 + 1;
0x00072e50 cmp r3, 0x6f |
| if (r3 != 0x6f) {
0x00072e52 bne 0x72d8a | goto label_8;
| }
0x00072e54 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x00072e58 cmp r3, 0x64 |
| if (r3 != 0x64) {
0x00072e5a bne 0x72d8a | goto label_8;
| }
0x00072e5c ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x00072e5e cmp r3, 0x65 |
| if (r3 != 0x65) {
0x00072e60 bne 0x72d8a | goto label_8;
| }
0x00072e62 ldr r3, [pc, 0x118] |
0x00072e64 and r6, r4, 0x87 | r6 = r4 & 0x87;
0x00072e68 ldr r2, [pc, 0x114] |
0x00072e6a mov.w r8, 0x87 | r8 = 0x87;
0x00072e6e add r3, pc |
0x00072e70 add r2, pc | r2 = 0xe5df4;
0x00072e72 add.w r3, r3, 0xc40 | r3 = 0xe6a30;
0x00072e76 mov fp, r2 |
0x00072e78 b 0x72df2 | goto label_11;
| label_39:
0x00072e7a ldrd r6, sb, [sp, 0xc] | __asm ("ldrd r6, sb, [var_ch_2]");
0x00072e7e b 0x72c6a | goto label_7;
| label_20:
0x00072e80 dmb ish | __asm ("dmb ish");
0x00072e84 b 0x72b06 | goto label_12;
| label_22:
0x00072e86 ldrb r2, [r5, 6] | r2 = *((r5 + 6));
0x00072e88 cmp r2, 0x2f |
0x00072e8a itt ne |
| if (r2 == 0x2f) {
0x00072e8c movne ip, 5 |
| }
| if (r2 == 0x2f) {
0x00072e90 mov r7, ip | r7 = ip;
| goto label_42;
| }
| if (r2 != 0x2f) {
| label_42:
0x00072e92 bne.w 0x72b40 | goto label_13;
| }
0x00072e96 ldrb r3, [r5, 7] | r3 = *((r5 + 7));
0x00072e98 add.w fp, r5, 7 |
0x00072e9c subs r2, r3, 0 | r2 = r3 - 0;
0x00072e9e it ne |
| if (r2 == r3) {
0x00072ea0 movne r2, 1 | r2 = 1;
| }
0x00072ea2 cmp r3, 0x2f |
0x00072ea4 ite eq |
| if (r3 != 0x2f) {
0x00072ea6 moveq r1, 0 | r1 = 0;
| }
| if (r3 == 0x2f) {
0x00072ea8 andne r1, r2, 1 | r1 = r2 & 1;
| }
0x00072eac cmp r1, 0 |
| if (r1 == 0) {
0x00072eae beq 0x72f50 | goto label_43;
| }
0x00072eb0 mov r2, fp | r2 = fp;
0x00072eb2 movs r7, 7 | r7 = 7;
| do {
0x00072eb4 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00072eb8 mov sl, r7 | sl = r7;
0x00072eba adds r7, 1 | r7++;
0x00072ebc cmp r3, 0 |
0x00072ebe it ne |
| if (r3 != 0) {
0x00072ec0 cmpne r3, 0x2f | __asm ("cmpne r3, 0x2f");
| }
0x00072ec2 bne 0x72eb4 |
| } while (r3 != 0);
0x00072ec4 cmp r7, 0x10 |
| if (r7 != 0x10) {
0x00072ec6 bne 0x72f36 | goto label_44;
| }
0x00072ec8 ldr r0, [pc, 0xb8] |
0x00072eca movs r2, 9 | r2 = 9;
0x00072ecc mov r1, fp | r1 = fp;
0x00072ece add r0, pc | r0 = 0xe5e56;
0x00072ed0 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
| if (r0 != 0) {
0x00072ed4 cbnz r0, 0x72f36 | goto label_44;
| }
0x00072ed6 ldrb r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00072ed8 mov ip, r7 |
0x00072eda subs r2, r3, 0 | r2 = r3 - 0;
0x00072edc it ne |
| if (r2 == r3) {
0x00072ede movne r2, 1 | r2 = 1;
| }
0x00072ee0 b 0x72b30 | goto label_14;
| do {
| label_16:
0x00072ee2 add.w r8, r8, 1 | r8++;
0x00072ee6 movs r3, 0 | r3 = 0;
0x00072ee8 strb.w r3, [ip] | *(ip) = r3;
0x00072eec add.w ip, r6, r8 |
0x00072ef0 b 0x72d3e | goto label_15;
| label_41:
0x00072ef2 ldr r0, [pc, 0x94] |
0x00072ef4 mov r2, sl | r2 = sl;
0x00072ef6 mov r1, fp | r1 = fp;
0x00072ef8 ldrd r6, sb, [sp, 0xc] | __asm ("ldrd r6, sb, [var_ch_2]");
0x00072efc movs r5, 3 | r5 = 3;
0x00072efe add r0, pc | r0 = 0xe5e8c;
0x00072f00 bl 0x5cb60 | fcn_0005cb60 ();
0x00072f04 b 0x72d02 | goto label_10;
| label_35:
0x00072f06 ldrb r3, [r5, r0] | r3 = *((r5 + r0));
0x00072f08 cmp r3, 0 |
0x00072f0a it ne |
| if (r3 != 0) {
0x00072f0c cmpne r3, 0x23 | __asm ("cmpne r3, 0x23");
| }
0x00072f0e beq 0x72ee2 |
| } while (r3 == 0);
0x00072f10 subs r3, r7, 1 | r3 = r7 - 1;
0x00072f12 add r3, r5 | r3 += r5;
0x00072f14 b 0x72f20 | goto label_45;
| label_17:
0x00072f16 ldrb r1, [r3, 2] | r1 = *((r3 + 2));
0x00072f18 cmp r1, 0 |
0x00072f1a it ne |
| if (r1 == 0) {
0x00072f1c cmpne r1, 0x23 | __asm ("cmpne r1, 0x23");
| goto label_46;
| }
| if (r1 == 0) {
| label_46:
0x00072f1e beq 0x72ee2 | goto label_16;
| }
| label_45:
0x00072f20 mov r0, r3 | r0 = r3;
0x00072f22 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x00072f26 cmp r1, 0x26 |
| if (r1 != 0x26) {
0x00072f28 bne 0x72f16 | goto label_17;
| }
0x00072f2a rsb.w r7, r5, 2 | r7 = 2 - r5;
0x00072f2e add r7, r0 | r7 += r0;
0x00072f30 b 0x72b68 | goto label_2;
| label_23:
0x00072f32 mov ip, r6 |
0x00072f34 b 0x72d3e | goto label_15;
| label_44:
0x00072f36 ldr r0, [pc, 0x54] |
0x00072f38 mov r2, fp | r2 = fp;
0x00072f3a sub.w r1, sl, 6 | r1 = sl - 6;
0x00072f3e movs r5, 1 | r5 = 1;
0x00072f40 add r0, pc | r0 = 0xe5ed2;
0x00072f42 bl 0x5cb60 | fcn_0005cb60 ();
0x00072f46 b 0x72d02 | goto label_10;
| label_29:
0x00072f48 mov r2, r0 | r2 = r0;
0x00072f4a b 0x72b68 | goto label_2;
| label_28:
0x00072f4c movs r2, 2 | r2 = 2;
0x00072f4e b 0x72b68 | goto label_2;
| label_43:
0x00072f50 mov.w ip, 7 |
0x00072f54 mov r7, ip | r7 = ip;
0x00072f56 b 0x72b30 | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x73694 */
| #include <stdint.h>
|
; (fcn) fcn.00073694 () | void fcn_00073694 (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
0x00073694 ldr r1, [pc, 0x17c] |
0x00073696 movs r2, 0 | r2 = 0;
0x00073698 ldr r3, [pc, 0x17c] | r3 = *(0x73818);
0x0007369a push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0007369e sub sp, 0x14 |
0x000736a0 add r1, pc | r1 = 0xe6eb8;
0x000736a2 ldr.w r8, [r0, 0x1c] | r8 = *((r0 + 0x1c));
0x000736a6 mov r4, r0 | r4 = r0;
0x000736a8 ldr r3, [r1, r3] |
0x000736aa ldrd r6, r5, [r0, 4] | __asm ("ldrd r6, r5, [r0, 4]");
0x000736ae ldr r3, [r3] | r3 = *(0xe6eb8);
0x000736b0 str r3, [sp, 0xc] | var_ch = r3;
0x000736b2 mov.w r3, 0 | r3 = 0;
0x000736b6 ldrd r3, r1, [r0, 0x10] | __asm ("ldrd r3, r1, [r0, 0x10]");
0x000736ba strd r2, r2, [sp, 4] | __asm ("strd r2, r2, [var_4h]");
0x000736be orrs.w r2, r3, r1 | r2 = r3 | r1;
| if (r2 == r3) {
0x000736c2 beq 0x73784 | goto label_8;
| }
0x000736c4 cmp.w r8, 0 |
| if (r8 == 0) {
0x000736c8 beq 0x736fa | goto label_9;
| }
0x000736ca adds r3, 1 | r3++;
0x000736cc adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000736d0 cmp r5, r6 |
0x000736d2 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000736d4 str r1, [r0, 0x14] | *((r0 + 0x14)) = r1;
| if (r5 < r6) {
0x000736d6 blt 0x737b6 | goto label_10;
| }
| do {
| label_1:
0x000736d8 movs r3, 0 | r3 = 0;
0x000736da str r3, [r4] | *(r4) = r3;
| label_0:
0x000736dc movs r0, 0 | r0 = 0;
| label_3:
0x000736de ldr r2, [pc, 0x13c] |
0x000736e0 ldr r3, [pc, 0x134] | r3 = *(0x73818);
0x000736e2 add r2, pc | r2 = 0xe6f04;
0x000736e4 ldr r3, [r2, r3] | r3 = *(0xe6f04);
0x000736e6 ldr r2, [r3] | r2 = *(0xe6f04);
0x000736e8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000736ea eors r2, r3 | r2 ^= r3;
0x000736ec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000736f0 bne.w 0x7380e | goto label_11;
| }
0x000736f4 add sp, 0x14 |
0x000736f6 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_9:
0x000736fa cmp r5, r6 |
0x000736fc bge 0x736d8 |
| } while (r5 >= r6);
0x000736fe ldr r7, [r0] | r7 = *(r0);
0x00073700 mov sb, r8 | sb = r8;
| label_2:
0x00073702 ldrb r3, [r7, r5] | r3 = *((r7 + r5));
0x00073704 adds r0, r7, r5 | r0 = r7 + r5;
0x00073706 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
0x00073708 itt pl |
| if (r1 < r3) {
0x0007370a movpl r0, 1 | r0 = 1;
| }
| if (r1 < r3) {
0x0007370c strpl r3, [sp, 8] | var_8h = r3;
| }
| if (r1 < r3) {
0x0007370e bmi 0x737c6 | goto label_12;
| }
| label_5:
0x00073710 cmp r8, sb |
0x00073712 add r0, r5 | r0 += r5;
0x00073714 str r0, [r4, 8] | *((r4 + 8)) = r0;
| if (r8 < sb) {
0x00073716 blt 0x737b0 | goto label_13;
| }
0x00073718 ldr r5, [sp, 8] | r5 = var_8h;
0x0007371a subs r6, r6, r0 | r6 -= r0;
0x0007371c clz r3, r5 | r3 &= r5;
0x00073720 lsrs r3, r3, 5 | r3 >>= 5;
0x00073722 cmp r6, r5 |
0x00073724 it lt |
| if (r6 >= r5) {
0x00073726 orrlt r3, r3, 1 | r3 |= 1;
| }
0x0007372a cmp r3, 0 |
| if (r3 != 0) {
0x0007372c bne 0x737b0 | goto label_13;
| }
0x0007372e ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00073730 add.w r6, r5, sb | r6 = r5 + sb;
0x00073734 ldr r7, [r4, 0x18] | r7 = *((r4 + 0x18));
0x00073736 cmp r6, r3 |
| if (r6 > r3) {
0x00073738 bgt 0x737ce | goto label_14;
| }
0x0007373a cmp r7, 0 |
| if (r7 == 0) {
0x0007373c beq 0x736dc | goto label_0;
| }
| label_6:
0x0007373e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00073740 mov r2, r5 | r2 = r5;
0x00073742 ldr r1, [r4] | r1 = *(r4);
0x00073744 add.w r0, r7, sb | r0 = r7 + sb;
0x00073748 add r1, r3 | r1 += r3;
0x0007374a blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007374e ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00073750 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00073752 str r6, [r4, 0x1c] | *((r4 + 0x1c)) = r6;
0x00073754 add r5, r2 | r5 += r2;
0x00073756 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00073758 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x0007375a orrs r3, r2 | r3 |= r2;
| if (r3 != r2) {
0x0007375c bne 0x736dc | goto label_0;
| }
0x0007375e ldr r6, [r4] | r6 = *(r4);
0x00073760 ldrb r3, [r6, r5] | r3 = *((r6 + r5));
0x00073762 adds r0, r6, r5 | r0 = r6 + r5;
0x00073764 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x00073766 itt pl |
| if (r2 < r3) {
0x00073768 movpl r0, 1 | r0 = 1;
| }
| if (r2 < r3) {
0x0007376a strpl r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| }
| if (r2 < r3) {
0x0007376c bmi 0x73802 | goto label_15;
| }
| label_7:
0x0007376e ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00073770 add r5, r0 | r5 += r0;
0x00073772 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00073774 subs r1, r1, r5 | r1 -= r5;
0x00073776 cmp r1, r3 |
| if (r1 < r3) {
0x00073778 blt 0x737b0 | goto label_13;
| }
0x0007377a add r6, r5 | r6 += r5;
0x0007377c add r5, r3 | r5 += r3;
0x0007377e str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x00073780 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00073782 b 0x736dc | goto label_0;
| label_8:
0x00073784 cmp r5, r6 |
| if (r5 >= r6) {
0x00073786 bge 0x736d8 | goto label_1;
| }
0x00073788 ldr r7, [r0] | r7 = *(r0);
0x0007378a mov sb, r8 | sb = r8;
0x0007378c mov r3, r7 | r3 = r7;
0x0007378e cmp.w r8, 0 |
| if (r8 == 0) {
0x00073792 beq 0x73702 | goto label_2;
| }
| do {
0x00073794 ldrb.w sb, [r3, r5] | sb = *((r3 + r5));
0x00073798 adds r0, r3, r5 | r0 = r3 + r5;
0x0007379a mov r7, r3 | r7 = r3;
0x0007379c tst.w sb, 0x80 |
0x000737a0 itt eq |
| if ((sb & 0x80) != 0) {
0x000737a2 moveq r0, 1 | r0 = 1;
| }
| if ((sb & 0x80) != 0) {
0x000737a4 streq sb, [sp, 4] | var_4h = sb;
| }
| if ((sb & 0x80) != 0) {
0x000737a8 bne 0x737ba | goto label_16;
| }
| label_4:
0x000737aa add r5, r0 | r5 += r0;
0x000737ac str r5, [r4, 8] | *((r4 + 8)) = r5;
0x000737ae b 0x73702 | goto label_2;
| label_13:
0x000737b0 movw r0, 0x10b | r0 = 0x10b;
0x000737b4 b 0x736de | goto label_3;
| label_10:
0x000737b6 ldr r3, [r0] | r3 = *(r0);
0x000737b8 b 0x73794 |
| } while (1);
| label_16:
0x000737ba add r1, sp, 4 | r1 += var_4h;
0x000737bc bl 0x24218 | fcn_00024218 (r0, r1);
0x000737c0 ldr.w sb, [sp, 4] | sb = var_4h;
0x000737c4 b 0x737aa | goto label_4;
| label_12:
0x000737c6 add r1, sp, 8 | r1 += var_8h;
0x000737c8 bl 0x24218 | fcn_00024218 (r0, r1);
0x000737cc b 0x73710 | goto label_5;
| label_14:
0x000737ce ldr r3, [pc, 0x50] |
0x000737d0 add r3, pc |
0x000737d2 ldr.w r3, [r3, 0xd0] | r3 = *(0xe70c6);
| if (r3 != 0) {
0x000737d6 cbnz r3, 0x737f8 | goto label_17;
| }
0x000737d8 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x000737dc cbnz r0, 0x737fe | goto label_18;
| }
0x000737de bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000737e2 cbnz r0, 0x737fe | goto label_18;
| }
| do {
0x000737e4 mov r0, r7 | r0 = r7;
0x000737e6 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x000737e8 mov r2, r6 | r2 = r6;
0x000737ea bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000737ee mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x000737f0 cbz r0, 0x737fe | goto label_18;
| }
0x000737f2 str r6, [r4, 0x20] | *((r4 + 0x20)) = r6;
0x000737f4 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x000737f6 b 0x7373e | goto label_6;
| label_17:
0x000737f8 dmb ish | __asm ("dmb ish");
0x000737fc b 0x737e4 |
| } while (1);
| label_18:
0x000737fe movs r0, 7 | r0 = 7;
0x00073800 b 0x736de | goto label_3;
| label_15:
0x00073802 add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x00073806 bl 0x24218 | fcn_00024218 (r0, r1);
0x0007380a ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0007380c b 0x7376e | goto label_7;
| label_11:
0x0007380e blx 0x6430 | fcn_00006430 ();
0x00073812 nop |
0x00073814 str r0, [r7, 0x6c] | *((r7 + 0x6c)) = r0;
0x00073816 movs r7, r0 | r7 = r0;
0x00073818 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007381a movs r0, r0 |
0x0007381c str r6, [r6, 0x68] | *((r6 + 0x68)) = r6;
0x0007381e movs r7, r0 | r7 = r0;
0x00073820 ldr r4, [r0, 0x2c] | r4 = *((r0 + 0x2c));
0x00073822 movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7386c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007386c () | void fcn_0007386c (int16_t arg_90h, int16_t arg_94h, int16_t arg_238h, int16_t arg_2b8h, int16_t arg_4bch, int16_t arg_4e8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1h;
| int16_t var_50h;
| int16_t var_bp_58h;
| int16_t var_24h_3;
| int32_t var_4bch;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_ch;
| int16_t var_34h;
| arithmetic var_38h;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h;
| arithmetic x;
| int16_t var_30h;
| int16_t var_58h;
| int16_t var_60h;
| int16_t var_64h_2;
| int32_t var_40h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_58h_2;
| int16_t var_64h;
| int16_t var_a8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007386c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00073870 sub sp, 0x6c |
0x00073872 ldr r5, [pc, 0x1fc] |
0x00073874 mov r8, r3 | r8 = r3;
0x00073876 add r3, sp, 0x24 | r3 += x;
0x00073878 subs r6, r1, 0 | r6 = r1 - 0;
0x0007387a ldr r4, [pc, 0x1f8] | r4 = *(0x73a76);
0x0007387c it le |
| if (r6 <= r1) {
0x0007387e movwle sb, 0x10b | __asm ("movwle sb, 0x10b");
| }
0x00073882 add r5, pc | r5 = 0xe72f8;
0x00073884 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00073888 ldr r7, [sp, 0x90] | r7 = *(arg_90h);
0x0007388a ldr r4, [r5, r4] |
0x0007388c ldr.w sl, [sp, 0x94] | sl = *(arg_94h);
0x00073890 ldr r4, [r4] | r4 = *(0xe72f8);
0x00073892 str r4, [sp, 0x64] | var_64h = r4;
0x00073894 mov.w r4, 0 | r4 = 0;
0x00073898 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0007389c mov.w r3, 0 | r3 = 0;
0x000738a0 str r0, [sp, 0xc] | var_ch = r0;
0x000738a2 str r3, [sp, 0x20] | var_20h = r3;
| if (r6 <= r1) {
0x000738a4 ble.w 0x739f2 | goto label_6;
| }
0x000738a8 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x000738aa mov r4, r2 | r4 = r2;
0x000738ac ldrb r5, [r0] | r5 = *(r0);
0x000738ae cmp r6, r3 |
| if (r6 > r3) {
0x000738b0 bgt.w 0x73a22 | goto label_52;
| }
| label_4:
0x000738b4 movs r3, 0 | r3 = 0;
0x000738b6 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000738b8 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000738ba add r3, sp, 0x30 | r3 += var_30h;
0x000738bc mov r2, r6 | r2 = r6;
0x000738be mov r0, r3 | r0 = r3;
0x000738c0 str r3, [sp, 8] | var_2ch = r3;
0x000738c2 bl 0x73824 | r0 = fcn_00073824 (r0, r1, r2);
0x000738c6 mov sb, r0 | sb = r0;
0x000738c8 cmp r0, 0 |
| if (r0 != 0) {
0x000738ca bne.w 0x73a66 | goto label_53;
| }
0x000738ce clz r3, r5 | r3 &= r5;
0x000738d2 str r0, [sp, 0x1c] | var_1ch_2 = r0;
0x000738d4 lsrs r3, r3, 5 | r3 >>= 5;
0x000738d6 str r3, [sp, 0x14] | var_38h = r3;
0x000738d8 add r3, sp, 0x20 | r3 += var_20h;
0x000738da str r3, [sp, 0x10] | var_34h = r3;
| label_0:
0x000738dc ldr r3, [sp, 0x30] | r3 = var_30h;
0x000738de ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000738e0 ldr r6, [sp, 0x48] | r6 = var_48h;
0x000738e2 cmp r3, 0 |
| if (r3 == 0) {
0x000738e4 beq.w 0x73a4e | goto label_54;
| }
0x000738e8 ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000738ea cmp r2, 0 |
| if (r2 != 0) {
0x000738ec bne 0x7396e | goto label_55;
| }
0x000738ee cmp r7, r5 |
0x000738f0 mov r2, r7 | r2 = r7;
0x000738f2 it ge |
| if (r7 < r5) {
0x000738f4 movge r2, r5 | r2 = r5;
| }
0x000738f6 cmp.w r8, 0 |
0x000738fa it ne |
| if (r8 != 0) {
0x000738fc cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
0x000738fe ite ne |
| if (r8 == 0) {
0x00073900 movne r3, 1 | r3 = 1;
| }
| if (r8 != 0) {
0x00073902 moveq r3, 0 | r3 = 0;
| }
0x00073904 cmp r6, 0 |
0x00073906 ite eq |
| if (r6 != 0) {
0x00073908 moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x0007390a andne r3, r3, 1 | r3 &= 1;
| }
0x0007390e cmp r3, 0 |
| if (r3 != 0) {
0x00073910 bne 0x73a0e | goto label_56;
| }
| label_1:
0x00073912 subs r3, r5, r7 | r3 = r5 - r7;
| if (r3 < r5) {
0x00073914 bmi 0x73986 | goto label_3;
| }
0x00073916 ldr r2, [sp, 0x14] | r2 = var_38h;
0x00073918 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0007391a beq 0x73986 | goto label_3;
| }
| label_2:
0x0007391c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007391e ldrd sb, ip, [sp, 0x40] | __asm ("ldrd sb, ip, [var_64h_2]");
0x00073922 ldrb r2, [r3] | r2 = *(r3);
0x00073924 ldr r3, [r4] | r3 = *(r4);
0x00073926 strb r2, [r3] | *(r3) = r2;
0x00073928 orrs.w r3, sb, ip | r3 = sb | ip;
0x0007392c it eq |
| if (r3 != sb) {
0x0007392e moveq r3, 1 | r3 = 1;
| }
| if (r3 == sb) {
0x00073930 beq 0x73968 | goto label_57;
| }
0x00073932 ldr r3, [r4] | r3 = *(r4);
0x00073934 mov r2, sb | r2 = sb;
0x00073936 mov r1, ip | r1 = ip;
0x00073938 adds r0, r3, 1 | r0 = r3 + 1;
0x0007393a str r3, [sp, 0x18] | var_18h_2 = r3;
| do {
0x0007393c lsr.w fp, r2, 7 |
0x00073940 orn r3, r2, 0x7f | r3 = r2 | 0x7f;
| r3 = ~r3;
0x00073944 uxtb.w lr, r2 | lr = (int8_t) r2;
0x00073948 orr.w r2, fp, r1, lsl 25 | r2 = fp | (r1 << 25);
0x0007394c lsrs r1, r1, 7 | r1 >>= 7;
0x0007394e mov fp, r0 |
0x00073950 strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x00073954 orrs.w r3, r2, r1 | r3 = r2 | r1;
0x00073958 bne 0x7393c |
| } while (r3 != r2);
0x0007395a ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0007395c strb.w lr, [fp] |
0x00073960 sub.w fp, fp, r3 |
0x00073964 add.w r3, fp, 1 | r3 += var_1h;
| label_57:
0x00073968 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0007396a strd sb, ip, [sl] | __asm ("strd sb, ip, [sl]");
| label_55:
0x0007396e ldr r2, [sp, 0x58] | r2 = var_58h_2;
0x00073970 mov r3, r5 | r3 = r5;
0x00073972 ldr r1, [sp, 0x10] | r1 = var_34h;
0x00073974 mov r0, r4 | r0 = r4;
0x00073976 str r2, [sp, 4] | var_28h = r2;
0x00073978 ldr r2, [sp, 0x54] | r2 = var_54h;
0x0007397a str r2, [sp] | *(sp) = r2;
0x0007397c mov r2, r6 | r2 = r6;
0x0007397e bl 0x63ea0 | r0 = fcn_00063ea0 (r0, r1, r2, r3, r4, r5, r6);
0x00073982 cmp r0, 0 |
| if (r0 != 0) {
0x00073984 bne 0x73a54 | goto label_58;
| }
| label_3:
0x00073986 ldr r0, [sp, 8] | r0 = var_2ch;
0x00073988 bl 0x73694 | r0 = fcn_00073694 (r0);
0x0007398c cmp r0, 0 |
| if (r0 == 0) {
0x0007398e beq 0x738dc | goto label_0;
| }
0x00073990 ldr r6, [sp, 0x48] | r6 = var_48h;
0x00073992 mov sb, r0 | sb = r0;
0x00073994 ldr r2, [r4, 4] | r2 = *((r4 + 4));
| if (r2 != 0) {
| label_5:
0x00073996 cbnz r2, 0x739e6 | goto label_59;
| }
0x00073998 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007399a ldrd ip, r7, [sp, 0x40] | __asm ("ldrd ip, r7, [var_64h_2]");
0x0007399e ldrb r2, [r3] | r2 = *(r3);
0x000739a0 ldr r3, [r4] | r3 = *(r4);
0x000739a2 strb r2, [r3] | *(r3) = r2;
0x000739a4 orrs.w r3, ip, r7 | r3 = ip | r7;
0x000739a8 it eq |
| if (r3 != ip) {
0x000739aa moveq r5, 1 | r5 = 1;
| }
| if (r3 == ip) {
0x000739ac beq 0x739e0 | goto label_60;
| }
0x000739ae ldr.w r8, [r4] | r8 = *(r4);
0x000739b2 mov r3, ip | r3 = ip;
0x000739b4 mov r2, r7 | r2 = r7;
0x000739b6 add.w r1, r8, 1 | r1 = r8 + 1;
| do {
0x000739ba lsrs r5, r3, 7 | r5 = r3 >> 7;
0x000739bc orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x000739c0 uxtb.w lr, r3 | lr = (int8_t) r3;
0x000739c4 orr.w r3, r5, r2, lsl 25 | r3 = r5 | (r2 << 25);
0x000739c8 lsrs r2, r2, 7 | r2 >>= 7;
0x000739ca mov r5, r1 | r5 = r1;
0x000739cc strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x000739d0 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x000739d4 bne 0x739ba |
| } while (r0 != r3);
0x000739d6 strb.w lr, [r5] |
0x000739da sub.w r5, r5, r8 | r5 -= r8;
0x000739de adds r5, 1 | r5++;
| label_60:
0x000739e0 str r5, [r4, 4] | *((r4 + 4)) = r5;
0x000739e2 strd ip, r7, [sl] | __asm ("strd ip, r7, [sl]");
| label_59:
0x000739e6 mov r0, r6 | r0 = r6;
0x000739e8 bl 0x26dbc | fcn_00026dbc (r0);
0x000739ec ldr r0, [sp, 0x20] | r0 = var_20h;
0x000739ee bl 0x26dbc | fcn_00026dbc (r0);
| label_6:
0x000739f2 ldr r2, [pc, 0x84] |
0x000739f4 ldr r3, [pc, 0x7c] | r3 = *(0x73a74);
0x000739f6 add r2, pc | r2 = 0xe7474;
0x000739f8 ldr r3, [r2, r3] | r3 = *(0xe7474);
0x000739fa ldr r2, [r3] | r2 = *(0xe7474);
0x000739fc ldr r3, [sp, 0x64] | r3 = var_64h;
0x000739fe eors r2, r3 | r2 ^= r3;
0x00073a00 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00073a04 bne 0x73a6c | goto label_61;
| }
0x00073a06 mov r0, sb | r0 = sb;
0x00073a08 add sp, 0x6c |
0x00073a0a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_56:
0x00073a0e mov r1, r8 | r1 = r8;
0x00073a10 mov r0, r6 | r0 = r6;
0x00073a12 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x00073a16 cmp r0, 0 |
| if (r0 == 0) {
0x00073a18 beq.w 0x73912 | goto label_1;
| }
| if (r0 >= 0) {
0x00073a1c bge.w 0x7391c | goto label_2;
| }
0x00073a20 b 0x73986 | goto label_3;
| label_52:
0x00073a22 ldr r3, [pc, 0x58] |
0x00073a24 ldr.w sb, [r4] | sb = *(r4);
0x00073a28 add r3, pc |
0x00073a2a ldr.w r3, [r3, 0xd0] | r3 = *(0xe757a);
| if (r3 != 0) {
0x00073a2e cbnz r3, 0x73a60 | goto label_62;
| }
0x00073a30 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x00073a34 cbnz r0, 0x73a5a | goto label_63;
| }
0x00073a36 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00073a3a cbnz r0, 0x73a5a |
| while (1) {
0x00073a3c asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x00073a3e mov r0, sb | r0 = sb;
0x00073a40 mov r2, r6 | r2 = r6;
0x00073a42 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
| if (r0 != 0) {
0x00073a46 cbz r0, 0x73a5a |
0x00073a48 str r0, [r4] | *(r4) = r0;
0x00073a4a str r6, [r4, 8] | *((r4 + 8)) = r6;
0x00073a4c b 0x738b4 | goto label_4;
| label_54:
0x00073a4e ldr.w sb, [sp, 0x1c] | sb = var_1ch_2;
0x00073a52 b 0x73996 | goto label_5;
| label_58:
0x00073a54 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00073a56 mov sb, r0 | sb = r0;
0x00073a58 b 0x73996 | goto label_5;
| }
| label_63:
0x00073a5a mov.w sb, 7 | sb = 7;
0x00073a5e b 0x739f2 | goto label_6;
| label_62:
0x00073a60 dmb ish | __asm ("dmb ish");
0x00073a64 b 0x73a3c |
| }
| label_53:
0x00073a66 ldr r6, [sp, 0x48] | r6 = var_48h;
0x00073a68 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00073a6a b 0x73996 | goto label_5;
| label_61:
0x00073a6c blx 0x6430 | fcn_00006430 ();
0x00073a70 str r6, [r2, 0x50] | *((r2 + 0x50)) = r6;
0x00073a72 movs r7, r0 | r7 = r0;
0x00073a74 lsls r4, r6, 8 | r4 = r6 << 8;
0x00073a76 movs r0, r0 |
0x00073a78 str r2, [r4, 0x38] | *((r4 + 0x38)) = r2;
0x00073a7a movs r7, r0 | r7 = r0;
0x00073a7c ldr r4, [r5, 4] | r4 = *((r5 + 4));
0x00073a7e movs r7, r0 | r7 = r0;
0x00073a80 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00073a84 mov r4, r3 | r4 = r3;
0x00073a86 ldr.w r5, [pc, 0x81c] |
0x00073a8a subw sp, sp, 0x4c4 | __asm ("subw sp, sp, 0x4c4");
0x00073a8e mov.w r8, 0xff00 | r8 = 0xff00;
0x00073a92 mov sb, r1 | sb = r1;
0x00073a94 ldr.w r3, [pc, 0x810] | r3 = *(0x742a8);
0x00073a98 movt r8, 0xf | r8 = (r8 & 0xFFFF) | 0xf0000;
0x00073a9c add r5, pc | r5 = 0xe7d46;
0x00073a9e and.w r8, r4, r8 | r8 = r4 & r8;
0x00073aa2 and r7, r4, 8 | r7 = r4 & 8;
0x00073aa6 and sl, r4, 2 | sl = r4 & 2;
0x00073aaa ldr r3, [r5, r3] |
0x00073aac mov r5, r2 | r5 = r2;
0x00073aae ldr r3, [r3] | r3 = *(0xe7d46);
0x00073ab0 str.w r3, [sp, 0x4bc] | __asm ("str.w r3, [arg_4bch]");
0x00073ab4 mov.w r3, 0 | r3 = 0;
0x00073ab8 ldr.w r3, [sp, 0x4e8] | r3 = *(arg_4e8h);
0x00073abc str r0, [sp, 0x14] | var_14h = r0;
0x00073abe str r3, [sp, 0x28] | var_28h = r3;
0x00073ac0 and r3, r4, 0x10 | r3 = r4 & 0x10;
0x00073ac4 str r3, [sp, 0x1c] | var_1ch = r3;
0x00073ac6 and r3, r4, 1 | r3 = r4 & 1;
0x00073aca str r3, [sp, 0x24] | var_24h_2 = r3;
0x00073acc ands r3, r4, 4 | r3 = r4 & 4;
0x00073ad0 str r3, [sp, 0x18] | var_18h = r3;
| if (r3 == r4) {
0x00073ad2 beq.w 0x73c32 | goto label_64;
| }
0x00073ad6 cmp.w r8, 0x800 |
0x00073ada it ne |
| if (r8 != 0x800) {
0x00073adc cmpne r8, 0x4000 | __asm ("cmpne r8, 0x4000");
| }
0x00073ae0 ite eq |
| if (r8 != 0x800) {
0x00073ae2 moveq r3, 1 | r3 = 1;
| }
| if (r8 == 0x800) {
0x00073ae4 movne r3, 0 | r3 = 0;
| }
0x00073ae6 cmp.w r8, 0x80000 |
0x00073aea it eq |
| if (r8 != 0x80000) {
0x00073aec orreq r3, r3, 1 | r3 |= 1;
| }
0x00073af0 str r3, [sp, 0x20] | var_20h_2 = r3;
| do {
0x00073af2 ldr.w r6, [pc, 0x7b8] |
0x00073af6 blx 0x6140 | fcn_00006140 ();
0x00073afa add r6, pc | r6 = 0xe7dac;
0x00073afc ldr.w r3, [r6, 0x2bc] | r3 = *(0xe8068);
0x00073b00 cmp r0, r3 |
| if (r0 != r3) {
0x00073b02 bne.w 0x73cba | goto label_65;
| }
| label_9:
0x00073b06 movs r2, 0x58 | r2 = 0x58;
0x00073b08 movs r1, 0 | r1 = 0;
0x00073b0a mov r0, r5 | r0 = r5;
0x00073b0c blx 0x62ec | fcn_000062ec ();
0x00073b10 cmp.w r8, 0x100 |
| if (r8 == 0x100) {
0x00073b14 beq.w 0x73cfa | goto label_66;
| }
0x00073b18 cmp.w sb, 0 |
| if (sb == 0) {
0x00073b1c beq.w 0x73ef2 | goto label_67;
| }
0x00073b20 mov.w r6, -1 | r6 = -1;
0x00073b24 str.w sb, [sp, 0x2c] | __asm ("str.w sb, [var_2ch]");
| label_12:
0x00073b28 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00073b2a subs.w fp, sl, 0 |
0x00073b2e it ne |
| if (fp == sl) {
0x00073b30 movne fp, 1 |
| }
0x00073b34 lsl.w sl, fp, 1 | sl = fp << 1;
| if (r3 != 0) {
0x00073b38 cbz r3, 0x73b3e |
0x00073b3a orr sl, sl, 0x40 | sl |= 0x40;
| }
0x00073b3e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00073b40 cmp r3, 0 |
| if (r3 != 0) {
0x00073b42 bne 0x73c38 | goto label_68;
| }
0x00073b44 cmp r6, 0 |
| if (r6 < 0) {
0x00073b46 blt 0x73c44 | goto label_69;
| }
| label_7:
0x00073b48 ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 != 0) {
0x00073b4a cbz r3, 0x73b4e |
0x00073b4c str r4, [r3] | *(r3) = r4;
| }
0x00073b4e ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
| if (r3 != 0) {
0x00073b50 cbz r3, 0x73b5a |
0x00073b52 and r2, r4, 3 | r2 = r4 & 3;
0x00073b56 str r6, [r3] | *(r3) = r6;
0x00073b58 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
| if (r7 != 0) {
0x00073b5a cbz r7, 0x73b6c |
0x00073b5c ldr.w r3, [pc, 0x750] |
0x00073b60 movs r7, 0x20 | r7 = 0x20;
0x00073b62 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00073b64 add r3, pc |
0x00073b66 ldr.w r3, [r3, 0xc4] | r3 = *(0xe7edc);
0x00073b6a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x00073b6c ldr r3, [sp, 0x24] | r3 = var_24h_2;
| if (r3 != 0) {
0x00073b6e cbz r3, 0x73b74 |
0x00073b70 orr r7, r7, 2 | r7 |= 2;
| }
0x00073b74 ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x00073b76 cmp.w r8, 0x100 |
0x00073b7a it ne |
| if (r8 == 0x100) {
0x00073b7c orrne r7, r7, 0x80 | r7 |= 0x80;
| }
| if (r3 != 0) {
0x00073b80 cbz r3, 0x73b86 |
0x00073b82 orr r7, r7, 8 | r7 |= 8;
| }
0x00073b86 ands r0, r4, 0x40 | r0 = r4 & 0x40;
| if (r0 != r4) {
0x00073b8a bne.w 0x73c9c | goto label_70;
| }
0x00073b8e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00073b90 str r6, [r5, 0xc] | *((r5 + 0xc)) = r6;
0x00073b92 str.w sb, [r5, 0x20] | __asm ("str.w sb, [r5, 0x20]");
0x00073b96 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00073b98 ldr.w r3, [pc, 0x718] |
0x00073b9c strh r7, [r5, 0x12] | *((r5 + 0x12)) = r7;
0x00073b9e add r3, pc | r3 = 0xe7e56;
0x00073ba0 ldrd r2, r3, [r3, 0xa8] | __asm ("ldrd r2, r3, [r3, 0xa8]");
| label_8:
0x00073ba4 ldr.w r1, [pc, 0x710] |
0x00073ba8 strd r2, r3, [r5, 0x40] | __asm ("strd r2, r3, [r5, 0x40]");
0x00073bac movs r2, 1 | r2 = 1;
0x00073bae add r1, pc | r1 = 0xe7e6a;
0x00073bb0 bl 0x2c518 | r0 = fcn_0002c518 (r0, r1, r2);
| if (r0 != 0) {
0x00073bb4 cbz r0, 0x73bbe |
0x00073bb6 orr r3, r7, 0x10 | r3 = r7 | 0x10;
0x00073bba uxtb r3, r3 | r3 = (int8_t) r3;
0x00073bbc strh r3, [r5, 0x12] | *((r5 + 0x12)) = r3;
| }
0x00073bbe ldr.w r1, [pc, 0x6fc] |
0x00073bc2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00073bc4 add r1, pc | r1 = 0xe7e86;
0x00073bc6 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x00073bc8 blx 0x6634 | r0 = fcn_00006634 ();
| if (r0 == 0) {
0x00073bcc cbnz r0, 0x73bd6 |
0x00073bce ldrh r3, [r5, 0x12] | r3 = *((r5 + 0x12));
0x00073bd0 orr r3, r3, 1 | r3 |= 1;
0x00073bd4 strh r3, [r5, 0x12] | *((r5 + 0x12)) = r3;
| }
0x00073bd6 lsls r0, r7, 0x18 | r0 = r7 << 0x18;
| if (r0 < r7) {
0x00073bd8 bmi.w 0x73cf0 | goto label_71;
| }
0x00073bdc ldr r3, [sp, 0x14] | r3 = var_14h;
0x00073bde mov r1, r5 | r1 = r5;
0x00073be0 mov r0, sb | r0 = sb;
0x00073be2 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00073be4 ldr r3, [r3] | r3 = *(r3);
0x00073be6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00073be8 ldr.w r3, [pc, 0x6d4] |
0x00073bec mov r7, r0 | r7 = r0;
0x00073bee add r3, pc | r3 = 0xe7eb2;
0x00073bf0 cmp r0, r3 |
| if (r0 == r3) {
0x00073bf2 beq.w 0x73f0e | goto label_72;
| }
0x00073bf6 adds r3, 0x98 | r3 += 0x98;
0x00073bf8 cmp r0, r3 |
| if (r0 == r3) {
0x00073bfa beq.w 0x73e72 | goto label_73;
| }
| label_10:
0x00073bfe movs r3, 0 | r3 = 0;
0x00073c00 mov r0, r5 | r0 = r5;
0x00073c02 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x00073c04 mov fp, r3 |
0x00073c06 str r7, [r5] | *(r5) = r7;
0x00073c08 bl 0x518a8 | fcn_000518a8 (r0);
| label_15:
0x00073c0c ldr.w r2, [pc, 0x6b4] |
0x00073c10 ldr.w r3, [pc, 0x694] | r3 = *(0x742a8);
0x00073c14 add r2, pc | r2 = 0xe7edc;
0x00073c16 ldr r3, [r2, r3] | r3 = *(0xe7edc);
0x00073c18 ldr r2, [r3] | r2 = *(0xe7edc);
0x00073c1a ldr.w r3, [sp, 0x4bc] | r3 = *(arg_4bch);
0x00073c1e eors r2, r3 | r2 ^= r3;
0x00073c20 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00073c24 bne.w 0x742a0 | goto label_74;
| }
0x00073c28 mov r0, fp | r0 = fp;
0x00073c2a addw sp, sp, 0x4c4 | __asm ("addw sp, var_0h");
0x00073c2e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_64:
0x00073c32 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00073c34 str r3, [sp, 0x20] | var_20h_2 = r3;
0x00073c36 b 0x73af2 |
| } while (1);
| label_68:
0x00073c38 cmp r6, 0 |
0x00073c3a orr sl, sl, 0x8000 | sl |= 0x8000;
0x00073c3e orr sl, sl, 0x80 | sl |= 0x80;
| if (r6 >= 0) {
0x00073c42 bge 0x73b48 | goto label_7;
| }
| label_69:
0x00073c44 mov.w r3, 0x800 | r3 = 0x800;
0x00073c48 orr r2, sl, 0x28000 | r2 = sl | 0x28000;
0x00073c4c movt r3, 8 | r3 = (r3 & 0xFFFF) | 0x80000;
0x00073c50 str r2, [sp, 0x18] | var_18h = r2;
0x00073c52 ands r3, r4 | r3 &= r4;
| if (r3 == r4) {
0x00073c54 beq.w 0x73dea | goto label_75;
| }
0x00073c58 ldr r6, [sp, 0x2c] | r6 = var_2ch;
| if (r6 == 0) {
0x00073c5a cbz r6, 0x73c82 | goto label_13;
| }
0x00073c5c mov r0, r6 | r0 = r6;
0x00073c5e blx 0x65dc | r0 = strcmp (r0, r1);
0x00073c62 bic r1, r0, 0xc0000000 | r1 = BIT_MASK (r0, 0xc0000000);
0x00073c66 subs r2, r1, 1 | r2 = r1 - 1;
0x00073c68 cmp r2, 0 |
| if (r2 <= 0) {
0x00073c6a ble 0x73c82 | goto label_13;
| }
0x00073c6c add r1, r6 | r1 += r6;
0x00073c6e b 0x73c7a |
| while (r3 != 0x2e) {
0x00073c70 cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x00073c72 beq.w 0x74082 | goto label_76;
| }
0x00073c76 subs r2, 1 | r2--;
| if (r2 == 1) {
0x00073c78 beq 0x73c82 | goto label_13;
| }
0x00073c7a ldrb r3, [r1, -0x1]! | r3 = *((r1 -= 0x1));
0x00073c7e cmp r3, 0x2e |
0x00073c80 bne 0x73c70 |
| }
| label_13:
0x00073c82 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00073c84 movs r2, 0 | r2 = 0;
0x00073c86 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00073c88 bl 0x52388 | r0 = fcn_00052388 (r0, r1, r2);
0x00073c8c subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 >= r0) {
0x00073c8e bge.w 0x73b48 | goto label_7;
| }
0x00073c92 movs r3, 0 | r3 = 0;
0x00073c94 strd r3, r3, [sp, 0x30] | __asm ("strd r3, r3, [sp, 0x30]");
0x00073c98 str r3, [sp, 0x1c] | var_1ch = r3;
0x00073c9a b 0x73ffa | goto label_77;
| label_70:
0x00073c9c ldr r3, [sp, 0x14] | r3 = var_14h;
0x00073c9e orr r7, r7, 0x40 | r7 |= 0x40;
0x00073ca2 mov r0, sb | r0 = sb;
0x00073ca4 str r6, [r5, 0xc] | *((r5 + 0xc)) = r6;
0x00073ca6 str.w sb, [r5, 0x20] | __asm ("str.w sb, [r5, 0x20]");
0x00073ca8 str r0, [sp, 0x80] | *((sp + 0x80)) = r0;
0x00073caa str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00073cac ldr.w r3, [pc, 0x618] |
0x00073cb0 strh r7, [r5, 0x12] | *((r5 + 0x12)) = r7;
0x00073cb2 add r3, pc | r3 = 0xe7f7e;
0x00073cb4 ldrd r2, r3, [r3, 0xa8] | __asm ("ldrd r2, r3, [r3, 0xa8]");
0x00073cb8 b 0x73ba4 | goto label_8;
| label_65:
0x00073cba blx 0x6140 | fcn_00006140 ();
0x00073cbe ldr.w r3, [pc, 0x60c] |
0x00073cc2 str.w r0, [r6, 0x2bc] | __asm ("str.w r0, [r6, 0x2bc]");
0x00073cc6 add r3, pc |
0x00073cc8 ldr.w r3, [r3, 0xd0] | r3 = *(0xe8068);
0x00073ccc cmp r3, 0 |
| if (r3 != 0) {
0x00073cce bne.w 0x73ee4 | goto label_78;
| }
0x00073cd2 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00073cd6 cmp r0, 0 |
| if (r0 != 0) {
0x00073cd8 bne.w 0x73b06 | goto label_9;
| }
0x00073cdc bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00073ce0 cmp r0, 0 |
| if (r0 != 0) {
0x00073ce2 bne.w 0x73b06 | goto label_9;
| }
0x00073ce6 movs r1, 0 | r1 = 0;
0x00073ce8 mov r0, r1 | r0 = r1;
0x00073cea bl 0x62714 | fcn_00062714 (r0, r1);
0x00073cee b 0x73b06 | goto label_9;
| label_71:
0x00073cf0 ldr.w r7, [pc, 0x5dc] |
0x00073cf4 add r7, pc | r7 = 0xe7fc8;
0x00073cf6 adds r7, 0x4c | r7 += 0x4c;
0x00073cf8 b 0x73bfe | goto label_10;
| label_66:
0x00073cfa ldr.w r6, [pc, 0x5d8] |
0x00073cfe add r6, pc | r6 = 0xe7fd8;
0x00073d00 ldr.w r0, [r6, 0x128] | r0 = *(0xe8100);
0x00073d04 cmp r0, 0 |
| if (r0 == 0) {
0x00073d06 beq.w 0x73eba | goto label_79;
| }
0x00073d0a ldr.w fp, [pc, 0x5cc] |
0x00073d0e add fp, pc | fp = 0xe7fec;
0x00073d10 ldr.w r3, [fp, 0x50] | r3 = var_50h;
0x00073d14 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00073d16 ldr.w r3, [r6, 0x2c0] | r3 = *((r6 + 0x2c0));
0x00073d1a cmp r3, 0 |
| if (r3 == 0) {
0x00073d1c beq.w 0x74138 | goto label_80;
| }
| label_14:
0x00073d20 ldr.w r3, [pc, 0x5b8] |
0x00073d24 add.w fp, sp, 0x48 |
0x00073d28 mov r1, fp | r1 = fp;
0x00073d2a mov r0, sb | r0 = sb;
0x00073d2c add r3, pc |
0x00073d2e ldr r3, [r3, 0x34] | r3 = *(0xe8040);
0x00073d30 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00073d32 cmp r0, 0 |
| if (r0 != 0) {
0x00073d34 bne.w 0x74066 | goto label_81;
| }
0x00073d38 ldr.w r3, [pc, 0x5a4] |
0x00073d3c add r3, pc | r3 = 0xe8020;
0x00073d3e ldr.w r6, [r3, 0x2c0] | r6 = *(0xe82e0);
0x00073d42 cmp r6, 0 |
| if (r6 == 0) {
0x00073d44 beq.w 0x73f90 | goto label_82;
| }
0x00073d46 strh r4, [r4, 8] | *((r4 + 8)) = r4;
0x00073d48 ldrd r2, r0, [fp] | __asm ("ldrd r2, r0, [fp]");
0x00073d4c mov ip, r7 |
0x00073d4e ldrd r3, r1, [fp, 0x60] | __asm ("ldrd r3, r1, [var_a8h]");
0x00073d50 adds r1, 0x18 | r1 += 0x18;
0x00073d52 mov lr, r4 | lr = r4;
0x00073d54 b 0x73d5e |
| while (r7 != r0) {
| label_11:
0x00073d56 ldr r6, [r6, 0x2c] | r6 = *((r6 + 0x2c));
0x00073d58 cmp r6, 0 |
| if (r6 == 0) {
0x00073d5a beq.w 0x73f8c | goto label_83;
| }
0x00073d5e ldrd r4, r7, [r6] | __asm ("ldrd r4, r7, [r6]");
0x00073d62 cmp r7, r0 |
0x00073d64 it eq |
| if (r7 == r0) {
0x00073d66 cmpeq r4, r2 | __asm ("cmpeq r4, r2");
| }
0x00073d68 bne 0x73d56 |
| }
0x00073d6a ldrd r4, r7, [r6, 8] | __asm ("ldrd r4, r7, [r6, 8]");
0x00073d6e cmp r7, r1 |
0x00073d70 it eq |
| if (r7 != r1) {
0x00073d72 cmpeq r4, r3 | __asm ("cmpeq r4, r3");
| goto label_84;
| }
| if (r7 != r1) {
| label_84:
0x00073d74 bne 0x73d56 | goto label_11;
| }
0x00073d76 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x00073d78 mov r7, ip | r7 = ip;
0x00073d7a mov r4, lr | r4 = lr;
0x00073d7c cmp r0, 0 |
| if (r0 == 0) {
0x00073d7e beq.w 0x740b2 | goto label_85;
| }
0x00073d82 ldr.w r3, [pc, 0x560] |
0x00073d86 adds r6, 0x20 | r6 += 0x20;
0x00073d88 add r3, pc |
0x00073d8a ldr r3, [r3, 0x50] | r3 = *(0xe80c2);
0x00073d8c blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00073d8e ldr r3, [r6] | r3 = *(r6);
0x00073d90 and r1, r4, 3 | r1 = r4 & 3;
0x00073d94 ldr r0, [r6, -0x10] | r0 = *((r6 - 0x10));
| if (r3 != 0) {
0x00073d98 cbnz r3, 0x73da8 | goto label_21;
| }
0x00073d9a b 0x74108 | goto label_86;
| do {
0x00073d9c add.w r6, r3, 8 | r6 = r3 + 8;
0x00073da0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00073da2 cmp r3, 0 |
| if (r3 == 0) {
0x00073da4 beq.w 0x74108 | goto label_86;
| }
| label_21:
0x00073da8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00073daa cmp r2, r1 |
0x00073dac bne 0x73d9c |
| } while (r2 != r1);
0x00073dae ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00073db0 str r2, [r6] | *(r6) = r2;
0x00073db2 cmp r0, 0 |
| if (r0 == 0) {
0x00073db4 beq.w 0x74128 | goto label_87;
| }
0x00073db8 ldr.w r2, [pc, 0x52c] |
0x00073dbc str r3, [sp, 0x2c] | var_2ch = r3;
0x00073dbe add r2, pc |
0x00073dc0 ldr r2, [r2, 0x58] | r2 = *(0xe8102);
0x00073dc2 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r2, r3);
0x00073dc4 ldr.w r2, [pc, 0x524] |
0x00073dc8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00073dca add r2, pc | r2 = 0xe80ba;
0x00073dcc ldr.w r0, [r2, 0x128] | r0 = *(0xe81e2);
| if (r0 != 0) {
0x00073dd0 cbz r0, 0x73de0 |
| label_23:
0x00073dd2 ldr.w r2, [pc, 0x51c] |
0x00073dd6 str r3, [sp, 0x2c] | var_2ch = r3;
0x00073dd8 add r2, pc |
0x00073dda ldr r2, [r2, 0x58] | r2 = *(0xe8126);
0x00073ddc blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r2, r3);
0x00073dde ldr r3, [sp, 0x2c] | r3 = var_2ch;
| }
| label_24:
0x00073de0 ldr r6, [r3] | r6 = *(r3);
| label_16:
0x00073de2 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00073de4 str.w sb, [sp, 0x2c] | __asm ("str.w sb, [var_2ch]");
0x00073de8 b 0x73b28 | goto label_12;
| label_75:
0x00073dea cmp r7, 0 |
| if (r7 != 0) {
0x00073dec bne.w 0x73fda | goto label_88;
| }
0x00073df0 lsls r6, r4, 0x19 | r6 = r4 << 0x19;
| if (r6 >= r4) {
0x00073df2 bpl.w 0x73c82 | goto label_13;
| }
0x00073df6 ldr.w r1, [pc, 0x4fc] |
0x00073dfa ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00073dfc add r1, pc | r1 = 0xe80f6;
0x00073dfe bl 0x2c2bc | r0 = fcn_0002c2bc (r0, r1);
0x00073e02 cmp r0, 0 |
| if (r0 == 0) {
0x00073e04 beq.w 0x73c82 | goto label_13;
| }
0x00073e06 add r7, sp, 0xf4 | r7 = sp + 0xf4;
0x00073e08 ldr.w r3, [pc, 0x4ec] |
0x00073e0c add r6, sp, 0x48 | r6 += x;
0x00073e0e mov r1, r6 | r1 = r6;
0x00073e10 add r3, pc |
0x00073e12 ldr r3, [r3, 0x34] | r3 = *(0xe8140);
0x00073e14 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x00073e16 cmp r0, 0 |
| if (r0 != 0) {
0x00073e18 bne.w 0x740ac | goto label_89;
| }
| label_20:
0x00073e1c ldr r3, [sp, 0x58] | r3 = var_58h;
0x00073e1e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00073e20 ubfx r3, r3, 0, 9 | r3 = (r3 >> 0) & ((1 << 9) - 1);
0x00073e24 str r3, [sp, 0x1c] | var_1ch = r3;
0x00073e26 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00073e28 ldrd r1, r2, [sp, 0x18] | __asm ("ldrd r1, r2, [var_18h]");
0x00073e2c str r3, [sp, 0x30] | var_ch = r3;
0x00073e2e ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x00073e30 str r3, [sp, 0x34] | var_34h = r3;
0x00073e32 bl 0x52388 | r0 = fcn_00052388 (r0, r1, r2);
0x00073e36 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 < r0) {
0x00073e38 blt.w 0x73ffa | goto label_77;
| }
| label_28:
0x00073e3c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00073e3e cmp r3, 0 |
| if (r3 == 0) {
0x00073e40 beq.w 0x73b48 | goto label_7;
| }
0x00073e44 mov.w r3, 0x800 |
0x00073e48 movt r3, 8 | r3 = 0x80800;
0x00073e4c tst r4, r3 |
| if ((r4 & r3) == 0) {
0x00073e4e beq.w 0x73b48 | goto label_7;
| }
0x00073e52 ldr.w sl, [pc, 0x4a8] |
0x00073e56 add sl, pc | sl = 0xe8158;
0x00073e58 ldr.w r3, [sl, 0x100] | r3 = *(0xe8258);
0x00073e5c blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x00073e5e cmp r0, 0 |
| if (r0 != 0) {
0x00073e60 bne.w 0x73b48 | goto label_7;
| }
0x00073e64 ldr.w r3, [sl, 0xf4] | r3 = *((sl + 0xf4));
0x00073e68 mov r0, r6 | r0 = r6;
0x00073e6a ldrd r1, r2, [sp, 0x30] | __asm ("ldrd r1, r2, [var_ch]");
0x00073e6e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00073e70 b 0x73b48 | goto label_7;
| label_73:
0x00073e72 mov r0, sb | r0 = sb;
0x00073e74 blx 0x65dc | strcmp (r0, r1);
0x00073e78 ldr.w r3, [pc, 0x484] |
0x00073e7c mov r4, r0 | r4 = r0;
0x00073e7e add r3, pc |
0x00073e80 ldr.w r3, [r3, 0xd0] | r3 = *(0xe8252);
0x00073e84 cmp r3, 0 |
| if (r3 != 0) {
0x00073e86 bne.w 0x7407c | goto label_90;
| }
0x00073e8a bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x00073e8e cbnz r0, 0x73ec6 | goto label_91;
| }
0x00073e90 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x00073e94 cbnz r0, 0x73ec6 | goto label_91;
| }
| label_19:
0x00073e96 adds r4, 6 | r4 += 6;
0x00073e98 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x00073e9a mov r0, r4 | r0 = r4;
0x00073e9c bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00073ea0 mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x00073ea2 cbz r0, 0x73ec6 | goto label_91;
| }
0x00073ea4 ldr.w r2, [pc, 0x45c] |
0x00073ea8 mov r3, sb | r3 = sb;
0x00073eaa mov r0, r4 | r0 = r4;
0x00073eac mov r1, r8 | r1 = r8;
0x00073eae add r2, pc | r2 = 0xe81b6;
0x00073eb0 bl 0x56488 | fcn_00056488 (r0, r1);
0x00073eb4 str.w r8, [r5, 0x18] | __asm ("str.w r8, [r5, 0x18]");
0x00073eb8 b 0x73bfe | goto label_10;
| label_79:
0x00073eba ldr.w r3, [r6, 0x2c0] | r3 = *((r6 + 0x2c0));
0x00073ebe cmp r3, 0 |
| if (r3 != 0) {
0x00073ec0 bne.w 0x73d20 | goto label_14;
| }
0x00073ec4 b 0x73fa2 | goto label_18;
| label_91:
0x00073ec6 movs r3, 0 | r3 = 0;
0x00073ec8 mov.w fp, 7 |
0x00073ecc movw r2, 0xa1a1 | r2 = 0xa1a1;
0x00073ed0 mov r1, r6 | r1 = r6;
0x00073ed2 mov r0, r5 | r0 = r5;
0x00073ed4 strd r3, r3, [r5, 0x14] | __asm ("strd r3, r3, [r5, 0x14]");
0x00073ed8 bl 0x5493c | fcn_0005493c (r0, r1, r2);
| label_17:
0x00073edc ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00073ede bl 0x26dbc | fcn_00026dbc (r0);
0x00073ee2 b 0x73c0c | goto label_15;
| label_78:
0x00073ee4 movs r1, 0 | r1 = 0;
0x00073ee6 dmb ish | __asm ("dmb ish");
0x00073eea mov r0, r1 | r0 = r1;
0x00073eec bl 0x62714 | fcn_00062714 (r0, r1);
0x00073ef0 b 0x73b06 | goto label_9;
| label_67:
0x00073ef2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00073ef4 add r6, sp, 0x2b8 | r6 += arg_2b8h;
0x00073ef6 mov r1, r6 | r1 = r6;
0x00073ef8 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00073efa bl 0x6388c | r0 = fcn_0006388c (r0, r1, r2);
0x00073efe mov fp, r0 |
0x00073f00 cmp r0, 0 |
| if (r0 != 0) {
0x00073f02 bne.w 0x73c0c | goto label_15;
| }
0x00073f06 str r6, [sp, 0x2c] | var_2ch = r6;
0x00073f08 mov.w r6, -1 | r6 = -1;
0x00073f0c b 0x73b28 | goto label_12;
| label_72:
0x00073f0e ldr r3, [pc, 0x3f8] |
0x00073f10 add r3, pc | r3 = 0xe821e;
0x00073f12 ldr.w r0, [r3, 0x128] | r0 = *(0xe8346);
| if (r0 != 0) {
0x00073f16 cbz r0, 0x73f20 |
0x00073f18 ldr r3, [pc, 0x3f0] |
0x00073f1a add r3, pc |
0x00073f1c ldr r3, [r3, 0x50] | r3 = *(0xe827a);
0x00073f1e blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00073f20 ldr r3, [pc, 0x3ec] |
0x00073f22 add r1, sp, 0x48 | r1 += x;
0x00073f24 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00073f26 add r3, pc |
0x00073f28 ldr r3, [r3, 0x40] | r3 = *(0xe827a);
0x00073f2a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00073f2c cmp r0, 0 |
| if (r0 != 0) {
0x00073f2e bne.w 0x740d8 | goto label_92;
| }
0x00073f32 ldr r3, [pc, 0x3e0] |
0x00073f34 ldrd r8, sb, [sp, 0xa8] | __asm ("ldrd r8, sb, [var_a8h]");
0x00073f38 ldrd r0, r1, [sp, 0x48] | __asm ("ldrd r0, r1, [x]");
0x00073f3c add r3, pc | r3 = 0xe8256;
0x00073f3e ldr.w r4, [r3, 0x2c0] | r4 = *(0xe8516);
0x00073f42 strd r8, sb, [sp, 0x40] | __asm ("strd r8, sb, [sp, 0x40]");
0x00073f46 strd r0, r1, [sp, 0x38] | __asm ("strd r0, r1, [sp, 0x38]");
0x00073f4a cmp r4, 0 |
| if (r4 == 0) {
0x00073f4c beq.w 0x7414a | goto label_93;
| }
0x00073f50 add.w r8, sp, 0x38 | r8 += var_38h;
0x00073f54 b 0x73f5e |
| while (r0 != 0) {
0x00073f56 ldr r4, [r4, 0x2c] | r4 = *((r4 + 0x2c));
0x00073f58 cmp r4, 0 |
| if (r4 == 0) {
0x00073f5a beq.w 0x7414a | goto label_93;
| }
0x00073f5e movs r2, 0x10 | r2 = 0x10;
0x00073f60 mov r1, r4 | r1 = r4;
0x00073f62 mov r0, r8 | r0 = r8;
0x00073f64 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x00073f68 cmp r0, 0 |
0x00073f6a bne 0x73f56 |
| }
0x00073f6c ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00073f6e adds r3, 1 | r3++;
0x00073f70 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
| label_25:
0x00073f72 ldr r3, [pc, 0x3a4] |
0x00073f74 str r4, [r5, 8] | *((r5 + 8)) = r4;
0x00073f76 add r3, pc | r3 = 0xe8294;
0x00073f78 ldr.w r0, [r3, 0x128] | r0 = *(0xe83bc);
0x00073f7c cmp r0, 0 |
| if (r0 == 0) {
0x00073f7e beq.w 0x73bfe | goto label_10;
| }
0x00073f82 ldr r3, [pc, 0x398] |
0x00073f84 add r3, pc |
0x00073f86 ldr r3, [r3, 0x58] | r3 = *(0xe82fe);
0x00073f88 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00073f8a b 0x73bfe | goto label_10;
| label_83:
0x00073f8c mov r7, ip | r7 = ip;
0x00073f8e mov r4, lr | r4 = lr;
| label_82:
0x00073f90 ldr r3, [pc, 0x38c] |
0x00073f92 add r3, pc | r3 = 0xe82b6;
0x00073f94 ldr.w r0, [r3, 0x128] | r0 = *(0xe83de);
| if (r0 != 0) {
0x00073f98 cbz r0, 0x73fa2 |
0x00073f9a ldr r3, [pc, 0x388] |
0x00073f9c add r3, pc |
0x00073f9e ldr r3, [r3, 0x58] | r3 = *(0xe831e);
0x00073fa0 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_18:
0x00073fa2 ldr r3, [pc, 0x384] |
0x00073fa4 add r3, pc |
0x00073fa6 ldr.w r3, [r3, 0xd0] | r3 = *(0xe83a2);
0x00073faa cmp r3, 0 |
| if (r3 != 0) {
0x00073fac bne.w 0x741bc | goto label_94;
| }
0x00073fb0 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00073fb4 cmp r0, 0 |
| if (r0 != 0) {
0x00073fb6 bne.w 0x741c2 | goto label_95;
| }
0x00073fba bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00073fbe cmp r0, 0 |
| if (r0 != 0) {
0x00073fc0 bne.w 0x741c2 | goto label_95;
| }
| label_26:
0x00073fc4 movs r0, 0xc | r0 = 0xc;
0x00073fc6 movs r1, 0 | r1 = 0;
0x00073fc8 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00073fcc mov r3, r0 | r3 = r0;
0x00073fce cmp r0, 0 |
| if (r0 == 0) {
0x00073fd0 beq.w 0x741c2 | goto label_95;
| }
0x00073fd4 mov.w r6, -1 | r6 = -1;
0x00073fd8 b 0x73de2 | goto label_16;
| label_88:
0x00073fda ldr r1, [sp, 0x18] | r1 = var_18h;
0x00073fdc mov.w r2, 0x180 | r2 = 0x180;
0x00073fe0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00073fe2 str r3, [sp, 0x1c] | var_1ch = r3;
0x00073fe4 bl 0x52388 | r0 = fcn_00052388 (r0, r1, r2);
0x00073fe8 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 >= r0) {
0x00073fea bge.w 0x73b48 | goto label_7;
| }
0x00073fee ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00073ff0 mov.w r2, 0x180 | r2 = 0x180;
0x00073ff4 str r2, [sp, 0x1c] | var_1ch = r2;
0x00073ff6 str r3, [sp, 0x34] | var_34h = r3;
0x00073ff8 str r3, [sp, 0x30] | var_ch = r3;
| label_77:
0x00073ffa blx 0x6670 | fcn_00006670 ();
0x00073ffe ldr r2, [sp, 0x20] | r2 = var_20h_2;
0x00074000 ldr r3, [r0] | r3 = *(r0);
0x00074002 str r0, [sp, 0x18] | var_18h = r0;
| if (r2 != 0) {
0x00074004 cbz r2, 0x7400c |
0x00074006 cmp r3, 0xd |
| if (r3 == 0xd) {
0x00074008 beq.w 0x741ec | goto label_96;
| }
| }
| label_29:
0x0007400c cmp r3, 0x15 |
0x0007400e ite eq |
| if (r3 != 0x15) {
0x00074010 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x15) {
0x00074012 andne r2, fp, 1 | r2 = fp & 1;
| }
0x00074016 cmp r2, 0 |
| if (r2 != 0) {
0x00074018 bne.w 0x741c8 | goto label_97;
| }
| label_27:
0x0007401c ldr r1, [pc, 0x30c] |
0x0007401e movw r3, 0xa35a |
0x00074022 ldr r2, [pc, 0x30c] |
0x00074024 movs r0, 0xe | r0 = 0xe;
0x00074026 add r1, pc | r1 = 0xe8356;
0x00074028 adds r1, 0x14 | r1 += 0x14;
0x0007402a add r2, pc | r2 = 0xe8360;
0x0007402c str r1, [sp] | *(sp) = r1;
0x0007402e ldr r1, [pc, 0x304] |
0x00074030 add r1, pc | r1 = 0xe836a;
0x00074032 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00074036 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00074038 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007403a ldr r3, [r3] | r3 = *(0xa35a);
0x0007403c cmp r2, 0 |
| if (r2 == 0) {
0x0007403e beq.w 0x74200 | goto label_98;
| }
0x00074042 ldr r2, [pc, 0x2f4] |
0x00074044 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00074046 ldr r0, [pc, 0x2f4] |
0x00074048 add r2, pc | r2 = 0xe8386;
0x0007404a strd r1, r2, [sp, 4] | __asm ("strd r1, r2, [sp, 4]");
0x0007404e movw r2, 0xa35a | r2 = 0xa35a;
0x00074052 ldr r1, [pc, 0x2ec] |
0x00074054 add r0, pc | r0 = 0xe8396;
0x00074056 str r0, [sp] | *(sp) = r0;
0x00074058 movs r0, 0xe | r0 = 0xe;
0x0007405a add r1, pc | r1 = 0xe83a0;
0x0007405c bl 0x50814 | fcn_00050814 (r0, r1, r2);
| label_30:
0x00074060 mov.w fp, 0xe |
0x00074064 b 0x73edc | goto label_17;
| label_81:
0x00074066 ldr r3, [pc, 0x2dc] |
0x00074068 add r3, pc | r3 = 0xe83b2;
0x0007406a ldr.w r0, [r3, 0x128] | r0 = *(0xe84da);
0x0007406e cmp r0, 0 |
| if (r0 == 0) {
0x00074070 beq 0x73fa2 | goto label_18;
| }
0x00074072 ldr r3, [pc, 0x2d4] |
0x00074074 add r3, pc |
0x00074076 ldr r3, [r3, 0x58] | r3 = *(0xe841a);
0x00074078 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0007407a b 0x73fa2 | goto label_18;
| label_90:
0x0007407c dmb ish | __asm ("dmb ish");
0x00074080 b 0x73e96 | goto label_19;
| label_76:
0x00074082 add r6, sp, 0xb4 | r6 += arg_90h;
0x00074084 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00074086 movw r3, 0x201 | r3 = 0x201;
0x0007408a mov r0, r6 | r0 = r6;
0x0007408c str r2, [sp, 0x1c] | var_1ch = r2;
0x0007408e blx 0x614c | fcn_0000614c ();
0x00074092 ldr r3, [pc, 0x2b8] |
0x00074094 movs r1, 0 | r1 = 0;
0x00074096 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00074098 mov r0, r6 | r0 = r6;
0x0007409a add r3, pc |
0x0007409c strb r1, [r6, r2] | *((r6 + r2)) = r1;
0x0007409e add r6, sp, 0x48 | r6 += x;
0x000740a0 ldr r3, [r3, 0x34] | r3 = *(0xe8420);
0x000740a2 mov r1, r6 | r1 = r6;
0x000740a4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000740a6 cmp r0, 0 |
| if (r0 == 0) {
0x000740a8 beq.w 0x73e1c | goto label_20;
| }
| label_89:
0x000740ac movw fp, 0x70a | fp = 0x70a;
0x000740b0 b 0x73c0c | goto label_15;
| label_85:
0x000740b2 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x000740b4 and r1, r4, 3 | r1 = r4 & 3;
0x000740b8 adds r6, 0x20 | r6 += 0x20;
0x000740ba cmp r3, 0 |
| if (r3 != 0) {
0x000740bc bne.w 0x73da8 | goto label_21;
| }
| label_22:
0x000740c0 ldr r3, [pc, 0x28c] |
0x000740c2 add r3, pc | r3 = 0xe8416;
0x000740c4 ldr.w r0, [r3, 0x128] | r0 = *(0xe853e);
0x000740c8 cmp r0, 0 |
| if (r0 == 0) {
0x000740ca beq.w 0x73fa2 | goto label_18;
| }
0x000740ce ldr r3, [pc, 0x284] |
0x000740d0 add r3, pc |
0x000740d2 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000740d4 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000740d6 b 0x73fa2 | goto label_18;
| label_92:
0x000740d8 blx 0x6670 | r0 = fcn_00006670 ();
0x000740dc ldr r3, [r0] | r3 = *(r0);
0x000740de mov.w fp, 0xa |
0x000740e2 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
| label_33:
0x000740e4 mov r0, r5 | r0 = r5;
0x000740e6 movw r2, 0xa14c | r2 = 0xa14c;
0x000740ea mov r1, r6 | r1 = r6;
0x000740ec bl 0x5493c | fcn_0005493c (r0, r1, r2);
0x000740f0 ldr r3, [pc, 0x264] |
0x000740f2 add r3, pc | r3 = 0xe844e;
0x000740f4 ldr.w r0, [r3, 0x128] | r0 = *(0xe8576);
| if (r0 != 0) {
0x000740f8 cbz r0, 0x74102 |
0x000740fa ldr r3, [pc, 0x260] |
0x000740fc add r3, pc |
0x000740fe ldr r3, [r3, 0x58] | r3 = *(0xe84b6);
0x00074100 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00074102 movs r3, 0 | r3 = 0;
0x00074104 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x00074106 b 0x73edc | goto label_17;
| label_86:
0x00074108 cmp r0, 0 |
| if (r0 == 0) {
0x0007410a beq 0x740c0 | goto label_22;
| }
0x0007410c ldr r6, [pc, 0x250] |
0x0007410e add r6, pc | r6 = 0xe8472;
0x00074110 ldr r3, [r6, 0x58] | r3 = *(0xe84ca);
0x00074112 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00074114 ldr r3, [pc, 0x24c] |
0x00074116 add r3, pc | r3 = 0xe847e;
0x00074118 ldr.w r0, [r3, 0x128] | r0 = *(0xe85a6);
0x0007411c cmp r0, 0 |
| if (r0 == 0) {
0x0007411e beq.w 0x73fa2 | goto label_18;
| }
0x00074122 ldr r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x00074124 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00074126 b 0x73fa2 | goto label_18;
| label_87:
0x00074128 ldr r2, [pc, 0x23c] |
0x0007412a add r2, pc | r2 = 0xe8496;
0x0007412c ldr.w r0, [r2, 0x128] | r0 = *(0xe85be);
0x00074130 cmp r0, 0 |
| if (r0 != 0) {
0x00074132 bne.w 0x73dd2 | goto label_23;
| }
0x00074134 add r6, sp, 0x138 | r6 = sp + 0x138;
0x00074136 b 0x73de0 | goto label_24;
| label_80:
0x00074138 ldr.w r0, [r6, 0x128] | r0 = *((r6 + 0x128));
0x0007413c cmp r0, 0 |
| if (r0 == 0) {
0x0007413e beq.w 0x73fa2 | goto label_18;
| }
0x00074142 ldr.w r3, [fp, 0x58] | r3 = var_bp_58h;
0x00074146 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00074148 b 0x73fa2 | goto label_18;
| label_93:
0x0007414a ldr r3, [pc, 0x220] |
0x0007414c add r3, pc |
0x0007414e ldr.w r3, [r3, 0xd0] | r3 = *(0xe858e);
0x00074152 cmp r3, 0 |
| if (r3 != 0) {
0x00074154 bne 0x7421e | goto label_99;
| }
0x00074156 bl 0x25da0 | r0 = fcn_00025da0 ();
0x0007415a cmp r0, 0 |
| if (r0 != 0) {
0x0007415c bne 0x74236 | goto label_100;
| }
0x0007415e bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00074162 cmp r0, 0 |
| if (r0 != 0) {
0x00074164 bne 0x74236 | goto label_100;
| }
| label_31:
0x00074166 movs r0, 0x38 | r0 = 0x38;
0x00074168 movs r1, 0 | r1 = 0;
0x0007416a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007416e mov r4, r0 | r4 = r0;
0x00074170 cmp r0, 0 |
| if (r0 == 0) {
0x00074172 beq 0x74236 | goto label_100;
| }
0x00074174 movs r2, 0x28 | r2 = 0x28;
0x00074176 movs r1, 0 | r1 = 0;
0x00074178 adds r0, 0x10 | r0 += 0x10;
0x0007417a blx 0x62ec | fcn_000062ec ();
0x0007417e add.w ip, sp, 0x38 |
0x00074182 ldr.w lr, [pc, 0x1ec] |
0x00074186 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0007418a add lr, pc | lr = 0xe8500;
0x0007418c str r0, [r4] | *(r4) = r0;
0x0007418e str r1, [r4, 4] | *((r4 + 4)) = r1;
0x00074190 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00074192 ldrb.w r3, [lr, 4] | r3 = *((lr + 4));
0x00074196 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x00074198 cmp r3, 0 |
| if (r3 != 0) {
0x0007419a bne 0x74224 | goto label_101;
| }
| label_32:
0x0007419c ldr r3, [pc, 0x1d4] |
0x0007419e movs r2, 1 | r2 = 1;
0x000741a0 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x000741a2 movs r2, 0 | r2 = 0;
0x000741a4 str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x000741a6 add r3, pc |
0x000741a8 ldr.w r3, [r3, 0x2c0] | r3 = *(0xe87de);
0x000741ac str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| if (r3 != 0) {
0x000741ae cbz r3, 0x741b2 |
0x000741b0 str r4, [r3, 0x30] | *((r3 + 0x30)) = r4;
| }
0x000741b2 ldr r3, [pc, 0x1c4] |
0x000741b4 add r3, pc | r3 = 0xe8532;
0x000741b6 str.w r4, [r3, 0x2c0] | __asm ("str.w r4, [r3, 0x2c0]");
0x000741b8 cmn r0, r0 |
0x000741ba b 0x73f72 | goto label_25;
| label_94:
0x000741bc dmb ish | __asm ("dmb ish");
0x000741c0 b 0x73fc4 | goto label_26;
| label_95:
0x000741c2 mov.w fp, 7 |
0x000741c6 b 0x73c0c | goto label_15;
| label_97:
0x000741c8 bic r1, sl, 0x42 | r1 = BIT_MASK (sl, 0x42);
0x000741cc ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000741ce ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000741d0 orr r1, r1, 0x28000 | r1 |= 0x28000;
0x000741d4 bl 0x52388 | r0 = fcn_00052388 (r0, r1, r2);
0x000741d8 subs r6, r0, 0 | r6 = r0 - 0;
0x000741da bic r4, r4, 6 | r4 = BIT_MASK (r4, 6);
0x000741de orr r4, r4, 1 | r4 |= 1;
| if (r6 < r0) {
0x000741e2 blt.w 0x7401c | goto label_27;
| }
0x000741e6 movs r3, 1 | r3 = 1;
0x000741e8 str r3, [sp, 0x24] | var_24h_2 = r3;
0x000741ea b 0x73e3c | goto label_28;
| label_96:
0x000741ec ldr r3, [pc, 0x18c] |
0x000741ee movs r1, 0 | r1 = 0;
0x000741f0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000741f2 add r3, pc |
0x000741f4 ldr r3, [r3, 0x1c] | r3 = *(0xe858e);
0x000741f6 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| if (r0 != 0) {
0x000741f8 cbnz r0, 0x7423c | goto label_102;
| }
0x000741fa ldr r3, [sp, 0x18] | r3 = var_18h;
0x000741fc ldr r3, [r3] | r3 = *(r3);
0x000741fe b 0x7400c | goto label_29;
| label_98:
0x00074200 ldr r0, [pc, 0x17c] |
0x00074202 movw r2, 0xa35a | r2 = 0xa35a;
0x00074204 adds r2, 0x5a | r2 += 0x5a;
0x00074206 ldr r4, [pc, 0x17c] |
0x00074208 ldr r1, [pc, 0x17c] |
0x0007420a add r0, pc | r0 = 0xe858e;
0x0007420c add r4, pc | r4 = 0xe8596;
0x0007420e strd r0, r0, [sp, 4] | __asm ("strd r0, r0, [sp, 4]");
0x00074212 add r1, pc | r1 = 0xe859e;
0x00074214 movs r0, 0xe | r0 = 0xe;
0x00074216 str r4, [sp] | *(sp) = r4;
0x00074218 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0007421c b 0x74060 | goto label_30;
| label_99:
0x0007421e dmb ish | __asm ("dmb ish");
0x00074222 b 0x74166 | goto label_31;
| label_101:
0x00074224 movs r0, 0 | r0 = 0;
0x00074226 bl 0x617d0 | fcn_000617d0 (r0);
0x0007422a str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0007422c cmp r0, 0 |
| if (r0 != 0) {
0x0007422e bne 0x7419c | goto label_32;
| }
0x00074230 mov r0, r4 | r0 = r4;
0x00074232 bl 0x26dbc | fcn_00026dbc (r0);
| label_100:
0x00074236 mov.w fp, 7 |
0x0007423a b 0x740e4 | goto label_33;
| label_102:
0x0007423c ldr r1, [pc, 0x14c] |
0x0007423e movw r3, 0xa35a |
0x00074242 ldr r2, [pc, 0x14c] |
0x00074244 movs r0, 0xe | r0 = 0xe;
0x00074246 add r1, pc | r1 = 0xe85d6;
0x00074248 adds r1, 0x14 | r1 += 0x14;
0x0007424a add r2, pc | r2 = 0xe85e0;
0x0007424c str r1, [sp] | *(sp) = r1;
0x0007424e ldr r1, [pc, 0x144] |
0x00074250 add r1, pc | r1 = 0xe85ea;
0x00074252 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00074256 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00074258 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007425a ldr r3, [r3] | r3 = *(0xa35a);
| if (r2 == 0) {
0x0007425c cbz r2, 0x74282 | goto label_103;
| }
0x0007425e ldr r2, [pc, 0x138] |
0x00074260 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00074262 ldr r0, [pc, 0x138] |
0x00074264 add r2, pc | r2 = 0xe8602;
0x00074266 strd r1, r2, [sp, 4] | __asm ("strd r1, r2, [sp, 4]");
0x0007426a movw r2, 0xa35a | r2 = 0xa35a;
0x0007426e ldr r1, [pc, 0x130] |
0x00074270 add r0, pc | r0 = 0xe8612;
0x00074272 str r0, [sp] | *(sp) = r0;
0x00074274 movs r0, 0xe | r0 = 0xe;
0x00074276 add r1, pc | r1 = 0xe861c;
0x00074278 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| do {
0x0007427c mov.w fp, 0x608 |
0x00074280 b 0x73edc | goto label_17;
| label_103:
0x00074282 ldr r0, [pc, 0x120] |
0x00074284 movw r2, 0xa35a | r2 = 0xa35a;
0x00074288 ldr r4, [pc, 0x11c] |
0x0007428a ldr r1, [pc, 0x120] |
0x0007428c add r0, pc | r0 = 0xe8636;
0x0007428e add r4, pc | r4 = 0xe863a;
0x00074290 strd r0, r0, [sp, 4] | __asm ("strd r0, r0, [sp, 4]");
0x00074292 movs r1, r0 | r1 = r0;
0x00074294 add r1, pc | r1 = 0xe8646;
0x00074296 movs r0, 0xe | r0 = 0xe;
0x00074298 str r4, [sp] | *(sp) = r4;
0x0007429a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0007429e b 0x7427c |
| } while (1);
| do {
| label_74:
0x000742a0 blx 0x6430 | fcn_00006430 ();
0x000742a4 str r4, [r7, 0x2c] | *((r7 + 0x2c)) = r4;
0x000742a6 movs r7, r0 | r7 = r0;
0x000742a8 lsls r4, r6, 8 | r4 = r6 << 8;
0x000742aa movs r0, r0 |
0x000742ac ldrh r2, [r2, 8] | r2 = *((r2 + 8));
0x000742ae movs r7, r0 | r7 = r0;
0x000742b0 ldr r0, [r0, 0x24] | r0 = *((r0 + 0x24));
0x000742b2 movs r7, r0 | r7 = r0;
0x000742b4 str r6, [r6, 0x6c] | *((r6 + 0x6c)) = r6;
0x000742b6 movs r7, r0 | r7 = r0;
0x000742b8 str r1, [sp, 0x238] | *(arg_238h) = r1;
0x000742ba movs r5, r0 | r5 = r0;
0x000742bc lsrs r4, r5, 0x19 | r4 = r5 >> 0x19;
0x000742be movs r6, r0 | r6 = r0;
| label_35:
0x000742c0 ldr r3, [pc, 0x378] | r3 = *(0x7463c);
0x000742c2 movs r7, r0 | r7 = r0;
0x000742c4 str r4, [r0, 0x18] | *((r0 + 0x18)) = r4;
0x000742c6 movs r7, r0 | r7 = r0;
0x000742c8 str r2, [r4, 0x5c] | *((r4 + 0x5c)) = r2;
0x000742ca movs r7, r0 | r7 = r0;
0x000742cc str r6, [r1, 0x5c] | *((r1 + 0x5c)) = r6;
0x000742ce movs r7, r0 | r7 = r0;
0x000742d0 ldr r2, [pc, 0x360] | r2 = *(0x74634);
0x000742d2 movs r7, r0 | r7 = r0;
0x000742d4 strh r6, [r1, 0x38] | *((r1 + 0x38)) = r6;
0x000742d6 movs r7, r0 | r7 = r0;
0x000742d8 str r6, [r0, 0x58] | *((r0 + 0x58)) = r6;
0x000742da movs r7, r0 | r7 = r0;
0x000742dc ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x000742de movs r7, r0 | r7 = r0;
0x000742e0 strh r0, [r2, 0x36] | *((r2 + 0x36)) = r0;
0x000742e2 movs r7, r0 | r7 = r0;
0x000742e4 str r4, [r1, 0x50] | *((r1 + 0x50)) = r4;
0x000742e6 movs r7, r0 | r7 = r0;
0x000742e8 str r6, [r2, 0x4c] | *((r2 + 0x4c)) = r6;
0x000742ea movs r7, r0 | r7 = r0;
0x000742ec strh r2, [r0, 0x32] | *((r0 + 0x32)) = r2;
0x000742ee movs r7, r0 | r7 = r0;
0x000742f0 str r4, [r7, 0x48] | *((r7 + 0x48)) = r4;
0x000742f2 movs r7, r0 | r7 = r0;
0x000742f4 lsrs r4, r5, 0x10 | r4 = r5 >> 0x10;
0x000742f6 movs r6, r0 | r6 = r0;
0x000742f8 str r4, [r2, 0x78] | *((r2 + 0x78)) = r4;
0x000742fa movs r7, r0 | r7 = r0;
0x000742fc str r6, [r1, 0x74] | *((r1 + 0x74)) = r6;
0x000742fe movs r7, r0 | r7 = r0;
0x00074300 str r6, [r2, 0x40] | *((r2 + 0x40)) = r6;
0x00074302 movs r7, r0 | r7 = r0;
0x00074304 lsrs r6, r1, 0xe | r6 = r1 >> 0xe;
0x00074306 movs r6, r0 | r6 = r0;
0x00074308 strh r4, [r7, 0x26] | *((r7 + 0x26)) = r4;
0x0007430a movs r7, r0 | r7 = r0;
0x0007430c str r2, [r7, 0x34] | *((r7 + 0x34)) = r2;
0x0007430e movs r7, r0 | r7 = r0;
0x00074310 str r6, [r7, 0x64] | *((r7 + 0x64)) = r6;
0x00074312 movs r7, r0 | r7 = r0;
0x00074314 strh r0, [r2, 0x26] | *((r2 + 0x26)) = r0;
0x00074316 movs r7, r0 | r7 = r0;
0x00074318 strh r6, [r2, 0x24] | *((r2 + 0x24)) = r6;
0x0007431a movs r7, r0 | r7 = r0;
0x0007431c str r0, [r2, 0x30] | *((r2 + 0x30)) = r0;
0x0007431e movs r7, r0 | r7 = r0;
0x00074320 strh r2, [r7, 0x22] | *((r7 + 0x22)) = r2;
0x00074322 movs r7, r0 | r7 = r0;
0x00074324 str r0, [r7, 0x2c] | *((r7 + 0x2c)) = r0;
0x00074326 movs r7, r0 | r7 = r0;
| label_37:
0x00074328 str r0, [r6, 0x2c] | *((r6 + 0x2c)) = r0;
0x0007432a movs r7, r0 | r7 = r0;
0x0007432c strh r2, [r3, 2] | *((r3 + 2)) = r2;
0x0007432e movs r5, r0 | r5 = r0;
| label_34:
0x00074330 bmi 0x742a0 |
| } while (r5 < r0);
0x00074332 movs r5, r0 | r5 = r0;
| if (r5 != r0) {
0x00074334 bne 0x74388 | goto label_104;
| }
0x00074336 movs r5, r0 | r5 = r0;
0x00074338 subs r7, 0x58 | r7 -= 0x58;
0x0007433a movs r5, r0 | r5 = r0;
0x0007433c adds r1, 0x94 | r1 += 0x94;
0x0007433e movs r5, r0 | r5 = r0;
| if (r5 <= r0) {
0x00074340 blo 0x74330 | goto label_34;
| }
0x00074342 movs r5, r0 | r5 = r0;
0x00074344 strh r4, [r4, 0x1c] | *((r4 + 0x1c)) = r4;
0x00074346 movs r7, r0 | r7 = r0;
0x00074348 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x0007434a movs r7, r0 | r7 = r0;
0x0007434c str r2, [r1, 0x50] | *((r1 + 0x50)) = r2;
0x0007434e movs r7, r0 | r7 = r0;
0x00074350 strh r2, [r1, 0x1a] | *((r1 + 0x1a)) = r2;
0x00074352 movs r7, r0 | r7 = r0;
0x00074354 str r4, [r0, 0x1c] | *((r0 + 0x1c)) = r4;
0x00074356 movs r7, r0 | r7 = r0;
| label_36:
0x00074358 strh r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x0007435a movs r7, r0 | r7 = r0;
0x0007435c str r0, [r3, 0x18] | *((r3 + 0x18)) = r0;
0x0007435e movs r7, r0 | r7 = r0;
0x00074360 str r6, [r0, 0x18] | *((r0 + 0x18)) = r6;
0x00074362 movs r7, r0 | r7 = r0;
0x00074364 strh r6, [r6, 0x16] | *((r6 + 0x16)) = r6;
0x00074366 movs r7, r0 | r7 = r0;
0x00074368 strh r2, [r4, 0x16] | *((r4 + 0x16)) = r2;
0x0007436a movs r7, r0 | r7 = r0;
0x0007436c str r0, [r1, 0x14] | *((r1 + 0x14)) = r0;
0x0007436e movs r7, r0 | r7 = r0;
0x00074370 str r2, [r1, 0x10] | *((r1 + 0x10)) = r2;
0x00074372 movs r7, r0 | r7 = r0;
0x00074374 strh r6, [r4, 0x12] | *((r4 + 0x12)) = r6;
0x00074376 movs r7, r0 | r7 = r0;
0x00074378 strh r0, [r3, 0x12] | *((r3 + 0x12)) = r0;
0x0007437a movs r7, r0 | r7 = r0;
0x0007437c str r2, [r6, 0x38] | *((r6 + 0x38)) = r2;
0x0007437e movs r7, r0 | r7 = r0;
0x00074380 subs r5, 0x96 | r5 -= 0x96;
0x00074382 movs r5, r0 | r5 = r0;
0x00074384 cmp r7, 0xdc |
0x00074386 movs r5, r0 | r5 = r0;
| if (r5 >= r0) {
| label_104:
0x00074388 bhs 0x74408 | goto label_105;
| }
0x0007438a movs r5, r0 | r5 = r0;
0x0007438c ldrb r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x0007438e movs r5, r0 | r5 = r0;
| if (r5 >= r0) {
0x00074390 bhs 0x742c0 | goto label_35;
| }
0x00074392 movs r5, r0 | r5 = r0;
0x00074394 ldm r7!, {r3} | r3 = *(r7!);
0x00074396 movs r5, r0 | r5 = r0;
0x00074398 subs r5, 0x3c | r5 -= 0x3c;
0x0007439a movs r5, r0 | r5 = r0;
0x0007439c cmp r7, 0x78 |
0x0007439e movs r5, r0 | r5 = r0;
| if (r5 != r0) {
0x000743a0 bne 0x74358 | goto label_36;
| }
0x000743a2 movs r5, r0 | r5 = r0;
0x000743a4 subs r5, 0x14 | r5 -= 0x14;
0x000743a6 movs r5, r0 | r5 = r0;
0x000743a8 cmp r7, 0x5a |
0x000743aa movs r5, r0 | r5 = r0;
| if (r5 != r0) {
0x000743ac bne 0x74328 | goto label_37;
| }
0x000743ae movs r5, r0 | r5 = r0;
0x000743b0 ldr r2, [pc, 0x390] |
0x000743b2 ldr r3, [pc, 0x394] | r3 = *(0x7474a);
0x000743b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000743b8 mov r4, r0 | r4 = r0;
0x000743ba add r2, pc | r2 = 0xe8b02;
0x000743bc vpush {d8} | __asm ("vpush {d8}");
0x000743c0 sub sp, 0x14 |
0x000743c2 mov r6, r1 | r6 = r1;
0x000743c4 ldr r3, [r2, r3] |
0x000743c6 add.w r7, r4, 0x20 | r7 = r4 + 0x20;
0x000743ca vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000743ce movs r5, 0 | r5 = 0;
0x000743d0 ldr r0, [r0, 0x18] | r0 = *((r0 + 0x18));
0x000743d2 add.w sb, r4, 0xc | sb = r4 + 0xc;
0x000743d6 ldr r3, [r3] | r3 = *(0xe8b02);
0x000743d8 str r3, [sp, 0xc] | var_24h_3 = r3;
0x000743da mov.w r3, 0 | r3 = 0;
0x000743de ldr.w sl, [sp, 0x40] | sl = var_8h;
0x000743e2 bl 0x26dbc | fcn_00026dbc (r0);
0x000743e6 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x000743e8 add.w r8, r4, 0x18 | r8 = r4 + 0x18;
0x000743ec bl 0x26dbc | fcn_00026dbc (r0);
0x000743f0 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x000743f2 bl 0x26dbc | fcn_00026dbc (r0);
0x000743f6 str r5, [r4, 0x28] | *((r4 + 0x28)) = r5;
0x000743f8 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x000743fa vst1.32 {d8}, [r7] | __asm ("vst1.32 {d8}, [r7]");
0x000743fe bl 0x26dbc | fcn_00026dbc (r0);
0x00074402 str r5, [r4, 0x30] | *((r4 + 0x30)) = r5;
0x00074404 str r5, [r4, 4] | *((r4 + 4)) = r5;
0x00074406 vst1.32 {d8}, [sb] | __asm ("vst1.32 {d8}, [sb]");
| label_105:
0x00074408 strh r7, [r1, 0x3c] | *((r1 + 0x3c)) = r7;
0x0007440a strb r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x0007440c vst1.32 {d8}, [r8] | __asm ("vst1.32 {d8}, [r8]");
0x00074410 cbnz r6, 0x74436 |
| while (r0 == 0) {
| label_38:
0x00074412 movs r5, 0 | r5 = 0;
| label_39:
0x00074414 ldr r2, [pc, 0x334] |
0x00074416 ldr r3, [pc, 0x330] | r3 = *(0x7474a);
0x00074418 add r2, pc | r2 = 0xe8b68;
0x0007441a ldr r3, [r2, r3] | r3 = *(0xe8b68);
0x0007441c ldr r2, [r3] | r2 = *(0xe8b68);
0x0007441e ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00074420 eors r2, r3 | r2 ^= r3;
0x00074422 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00074426 bne.w 0x74740 | goto label_106;
| }
0x0007442a mov r0, r5 | r0 = r5;
0x0007442c add sp, 0x14 |
0x0007442e vpop {d8} | __asm ("vpop {d8}");
0x00074432 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00074436 ldr.w r0, [sl] | r0 = *(sl);
0x0007443a cmp r0, 0 |
0x0007443c beq 0x74412 |
| }
0x0007443e ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x00074440 movw r3, 0x202 | r3 = 0x202;
0x00074444 bics r3, r2 | __asm ("bics r3, r2");
| if (r0 == 0) {
0x00074446 beq 0x74518 | goto label_107;
| }
| label_40:
0x00074448 lsls r5, r2, 0x1f | r5 = r2 << 0x1f;
| if (r5 < r2) {
0x0007444a bmi 0x74412 | goto label_38;
| }
0x0007444c movs r1, 1 | r1 = 1;
0x0007444e bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x00074452 mov fp, r0 |
| label_41:
0x00074454 cmp.w fp, 0 |
| if (fp == 0) {
0x00074458 beq 0x74412 | goto label_38;
| }
0x0007445a ldr.w r0, [sl] | r0 = *(sl);
0x0007445e movs r1, 1 | r1 = 1;
0x00074460 bl 0x3da8c | fcn_0003da8c (r0, r1);
0x00074464 ldr r3, [pc, 0x2e8] |
0x00074466 mov r5, r0 | r5 = r0;
0x00074468 add r3, pc |
0x0007446a ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x0007446e cmp r3, 0 |
| if (r3 != 0) {
0x00074470 bne 0x74526 | goto label_108;
| }
0x00074472 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00074476 cmp r0, 0 |
| if (r0 != 0) {
0x00074478 bne 0x74510 | goto label_109;
| }
0x0007447a bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0007447e cmp r0, 0 |
| if (r0 != 0) {
0x00074480 bne 0x74510 | goto label_109;
| }
| label_42:
0x00074482 asrs r1, r5, 0x1f | r1 = r5 >> 0x1f;
0x00074484 adds r5, 1 | r5++;
0x00074486 mov r0, r5 | r0 = r5;
0x00074488 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0007448c bl 0x28c3c | fcn_00028c3c (r0);
0x00074490 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x00074492 cmp r0, 0 |
| if (r0 == 0) {
0x00074494 beq 0x74514 | goto label_44;
| }
0x00074496 mov r2, r5 | r2 = r5;
0x00074498 mov r1, fp | r1 = fp;
0x0007449a blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007449e ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000744a0 movs r1, 0 | r1 = 0;
0x000744a2 mov r0, r7 | r0 = r7;
0x000744a4 bl 0x5c5f8 | r0 = fcn_0005c5f8 (r0, r1, r2);
0x000744a8 mov r5, r0 | r5 = r0;
0x000744aa cmp r0, 0 |
| if (r0 != 0) {
0x000744ac bne 0x7452c | goto label_110;
| }
0x000744ae ldrb r3, [r4, 0x15] | r3 = *((r4 + 0x15));
0x000744b0 cmp r3, 0 |
| if (r3 != 0) {
0x000744b2 bne 0x7456c | goto label_111;
| }
| label_43:
0x000744b4 cmp r6, 3 |
| if (r6 == 3) {
0x000744b6 beq 0x745b6 | goto label_112;
| }
0x000744b8 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x000744ba movs r3, 0 | r3 = 0;
0x000744bc mov r1, r0 | r1 = r0;
| label_51:
0x000744be vdup.32 d16, r3 | __asm ("vdup.32 d16, r3");
0x000744c2 add.w r2, r4, 8 | r2 = r4 + 8;
0x000744c6 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000744ca ldrb r2, [r0] | r2 = *(r0);
0x000744cc cmp r2, 5 |
0x000744ce strb r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000744d0 itt ls |
| if (r2 > 5) {
0x000744d2 addls r3, 1 | r3++;
| }
| if (r2 <= 5) {
0x000744d4 strls r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| goto label_113;
| }
| if (r2 < 5) {
| label_113:
0x000744d6 bls 0x74412 | goto label_38;
| }
0x000744d8 movs r2, 0 | r2 = 0;
0x000744da str r2, [r0, 8] | *((r0 + 8)) = r2;
0x000744dc ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000744de adds r0, r3, 1 | r0 = r3 + 1;
0x000744e0 ldrb r6, [r4, 0x15] | r6 = *((r4 + 0x15));
0x000744e2 add r2, r0 | r2 += r0;
0x000744e4 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x000744e6 cmp r6, 0 |
| if (r6 == 0) {
0x000744e8 beq 0x745ac | goto label_114;
| }
0x000744ea ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x000744ec ldr.w r2, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r2 = *((r2 + offset_0));
0x000744f0 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000744f4 ldrb.w r2, [r1, r2, lsl 2] | offset_1 = r2 << 2;
| r2 = *((r1 + offset_1));
0x000744f8 strb r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000744fa cmp r3, 0 |
| if (r3 == 0) {
0x000744fc beq 0x74412 | goto label_38;
| }
0x000744fe add r1, r5 | r1 += r5;
0x00074500 ldrb r2, [r1, -0xb] | r2 = *((r1 - 0xb));
0x00074504 lsls r2, r2, 0x19 | r2 <<= 0x19;
0x00074506 itt mi |
| if (r2 >= r2) {
0x00074508 addmi r3, r3, -1 | r3 += -1;
| }
| if (r2 < r2) {
0x0007450c str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| }
0x0007450e b 0x74412 | goto label_38;
| label_109:
0x00074510 movs r3, 0 | r3 = 0;
0x00074512 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| label_44:
0x00074514 movs r5, 7 | r5 = 7;
0x00074516 b 0x74414 | goto label_39;
| label_107:
0x00074518 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x0007451a cmp r3, 1 |
0x0007451c it eq |
| if (r3 == 1) {
0x0007451e ldreq fp, [r0, 8] | fp = *((r0 + 8));
| goto label_115;
| }
| if (r3 != 1) {
| label_115:
0x00074522 bne 0x74448 | goto label_40;
| }
0x00074524 b 0x74454 | goto label_41;
| label_108:
0x00074526 dmb ish | __asm ("dmb ish");
0x0007452a b 0x74482 | goto label_42;
| label_110:
0x0007452c ldrb.w r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00074530 cmp r3, 0 |
| if (r3 == 0) {
0x00074532 beq.w 0x74692 | goto label_116;
| }
| label_45:
0x00074536 movs r5, 7 | r5 = 7;
| label_46:
0x00074538 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x0007453c movs r6, 0 | r6 = 0;
0x0007453e ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00074540 bl 0x26dbc | fcn_00026dbc (r0);
0x00074544 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00074546 bl 0x26dbc | fcn_00026dbc (r0);
0x0007454a ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x0007454c bl 0x26dbc | fcn_00026dbc (r0);
0x00074550 str r6, [r4, 0x28] | *((r4 + 0x28)) = r6;
0x00074552 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x00074554 vst1.32 {d8}, [r7] | __asm ("vst1.32 {d8}, [r7]");
0x00074558 bl 0x26dbc | fcn_00026dbc (r0);
0x0007455c str r6, [r4, 0x30] | *((r4 + 0x30)) = r6;
0x0007455e str r6, [r4, 4] | *((r4 + 4)) = r6;
0x00074560 vst1.32 {d8}, [sb] | __asm ("vst1.32 {d8}, [sb]");
0x00074564 strb r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
0x00074566 vst1.32 {d8}, [r8] | __asm ("vst1.32 {d8}, [r8]");
0x0007456a b 0x74414 | goto label_39;
| label_111:
0x0007456c ldr r3, [pc, 0x1e4] |
0x0007456e ldr.w fp, [r4, 0x20] | fp = *((r4 + 0x20));
0x00074572 add r3, pc |
0x00074574 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
| if (r3 != 0) {
0x00074578 cbnz r3, 0x745b0 | goto label_117;
| }
0x0007457a bl 0x25da0 | r0 = fcn_00025da0 ();
0x0007457e cmp r0, 0 |
| if (r0 != 0) {
0x00074580 bne.w 0x746b4 | goto label_118;
| }
0x00074584 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00074588 cmp r0, 0 |
| if (r0 != 0) {
0x0007458a bne.w 0x746b4 | goto label_118;
| }
| do {
0x0007458e lsl.w r0, fp, 2 | r0 = fp << 2;
0x00074592 movs r1, 0 | r1 = 0;
0x00074594 bl 0x28c3c | fcn_00028c3c (r0);
0x00074598 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x0007459a cmp r0, 0 |
| if (r0 == 0) {
0x0007459c beq.w 0x746b8 | goto label_119;
| }
0x000745a0 movs r2, 0 | r2 = 0;
0x000745a2 mov r0, r7 | r0 = r7;
0x000745a4 mov r1, r2 | r1 = r2;
0x000745a6 bl 0x24ac0 | fcn_00024ac0 (r0, r1, r2);
0x000745aa b 0x744b4 | goto label_43;
| label_114:
0x000745ac str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000745ae b 0x74412 | goto label_38;
| label_117:
0x000745b0 dmb ish | __asm ("dmb ish");
0x000745b4 b 0x7458e |
| } while (1);
| label_112:
0x000745b6 ldr.w r0, [sl, 4] | r0 = *((sl + 4));
0x000745ba movs r3, 0 | r3 = 0;
0x000745bc str r3, [sp, 8] | var_8h = r3;
0x000745be cmp r0, 0 |
| if (r0 == 0) {
0x000745c0 beq.w 0x74414 | goto label_39;
| }
0x000745c4 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000745c6 movw r3, 0x202 | r3 = 0x202;
0x000745ca bics r3, r2 | __asm ("bics r3, r2");
| if (r0 == 0) {
0x000745cc beq.w 0x746f2 | goto label_120;
| }
| label_47:
0x000745d0 lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
| if (r1 < r2) {
0x000745d2 bmi.w 0x74414 | goto label_39;
| }
0x000745d6 movs r1, 1 | r1 = 1;
0x000745d8 bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x000745dc mov fp, r0 |
| label_48:
0x000745de cmp.w fp, 0 |
| if (fp == 0) {
0x000745e2 beq.w 0x74414 | goto label_39;
| }
0x000745e6 ldr.w r0, [sl, 4] | r0 = *((sl + 4));
0x000745ea movs r1, 1 | r1 = 1;
0x000745ec bl 0x3da8c | fcn_0003da8c (r0, r1);
0x000745f0 ldr r3, [pc, 0x164] |
0x000745f2 mov r6, r0 | r6 = r0;
0x000745f4 add r3, pc |
0x000745f6 ldr.w r3, [r3, 0xd0] | r3 = *(0xe8e20);
0x000745fa cmp r3, 0 |
| if (r3 != 0) {
0x000745fc bne.w 0x74702 | goto label_121;
| }
0x00074600 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00074604 cmp r0, 0 |
| if (r0 != 0) {
0x00074606 bne 0x74708 | goto label_122;
| }
0x00074608 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0007460c cmp r0, 0 |
| if (r0 != 0) {
0x0007460e bne 0x74708 | goto label_122;
| }
| label_49:
0x00074610 asrs r1, r6, 0x1f | r1 = r6 >> 0x1f;
0x00074612 adds r6, 1 | r6++;
0x00074614 mov r0, r6 | r0 = r6;
0x00074616 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0007461a bl 0x28c3c | fcn_00028c3c (r0);
0x0007461e str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x00074620 cmp r0, 0 |
| if (r0 == 0) {
0x00074622 beq.w 0x74514 | goto label_44;
| }
0x00074626 mov r2, r6 | r2 = r6;
0x00074628 mov r1, fp | r1 = fp;
0x0007462a blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007462e ldrb.w r3, [fp] | r3 = *(fp);
0x00074632 cmp r3, 0x24 |
0x00074634 it ne |
| if (r3 == 0x24) {
0x00074636 strne fp, [sp, 8] | var_8h = fp;
| }
| if (r3 == 0x24) {
0x0007463a beq 0x7470e | goto label_123;
| }
| label_50:
0x0007463c ldr r3, [r4] | r3 = *(r4);
0x0007463e vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00074642 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00074644 bl 0x26dbc | fcn_00026dbc (r0);
0x00074648 ldr r0, [pc, 0x110] |
0x0007464a ldr r5, [r4] | r5 = *(r4);
0x0007464c ldr r1, [sp, 8] | r1 = var_8h;
0x0007464e add r0, pc | r0 = 0xe8dae;
0x00074650 bl 0x5cb60 | fcn_0005cb60 ();
0x00074654 str r0, [r5, 8] | *((r5 + 8)) = r0;
0x00074656 movs r5, 0 | r5 = 0;
0x00074658 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x0007465a bl 0x26dbc | fcn_00026dbc (r0);
0x0007465e ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00074660 bl 0x26dbc | fcn_00026dbc (r0);
0x00074664 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x00074666 bl 0x26dbc | fcn_00026dbc (r0);
0x0007466a str r5, [r4, 0x28] | *((r4 + 0x28)) = r5;
0x0007466c ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x0007466e vst1.32 {d8}, [r7] | __asm ("vst1.32 {d8}, [r7]");
0x00074672 bl 0x26dbc | fcn_00026dbc (r0);
0x00074676 ldr r3, [r4] | r3 = *(r4);
0x00074678 str r5, [r4, 0x30] | *((r4 + 0x30)) = r5;
0x0007467a str r5, [r4, 4] | *((r4 + 4)) = r5;
0x0007467c vst1.32 {d8}, [sb] | __asm ("vst1.32 {d8}, [sb]");
0x00074680 strb r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x00074682 movs r5, 1 | r5 = 1;
0x00074684 vst1.32 {d8}, [r8] | __asm ("vst1.32 {d8}, [r8]");
0x00074688 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0007468a cmp r3, 0 |
| if (r3 != 0) {
0x0007468c bne.w 0x74414 | goto label_39;
| }
0x00074690 b 0x74514 | goto label_44;
| label_116:
0x00074692 ldr r3, [r4] | r3 = *(r4);
0x00074694 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00074696 bl 0x26dbc | fcn_00026dbc (r0);
0x0007469a ldr r0, [pc, 0xc4] |
0x0007469c ldr r5, [r4] | r5 = *(r4);
0x0007469e add r0, pc | r0 = 0xe8e04;
0x000746a0 bl 0x5cb60 | fcn_0005cb60 ();
0x000746a4 ldr r3, [r4] | r3 = *(r4);
0x000746a6 str r0, [r5, 8] | *((r5 + 8)) = r0;
0x000746a8 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000746aa cmp r3, 0 |
| if (r3 == 0) {
0x000746ac beq.w 0x74536 | goto label_45;
| }
0x000746b0 movs r5, 1 | r5 = 1;
0x000746b2 b 0x74538 | goto label_46;
| label_118:
0x000746b4 movs r3, 0 | r3 = 0;
0x000746b6 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| label_119:
0x000746b8 movs r3, 1 | r3 = 1;
0x000746ba vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000746be strb.w r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000746c2 movs r5, 0 | r5 = 0;
0x000746c4 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x000746c6 bl 0x26dbc | fcn_00026dbc (r0);
0x000746ca ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x000746cc bl 0x26dbc | fcn_00026dbc (r0);
0x000746d0 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x000746d2 bl 0x26dbc | fcn_00026dbc (r0);
0x000746d6 str r5, [r4, 0x28] | *((r4 + 0x28)) = r5;
0x000746d8 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x000746da vst1.32 {d8}, [r7] | __asm ("vst1.32 {d8}, [r7]");
0x000746de bl 0x26dbc | fcn_00026dbc (r0);
0x000746e2 str r5, [r4, 0x30] | *((r4 + 0x30)) = r5;
0x000746e4 str r5, [r4, 4] | *((r4 + 4)) = r5;
0x000746e6 vst1.32 {d8}, [sb] | __asm ("vst1.32 {d8}, [sb]");
0x000746ea strb r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000746ec vst1.32 {d8}, [r8] | __asm ("vst1.32 {d8}, [r8]");
0x000746f0 b 0x74514 | goto label_44;
| label_120:
0x000746f2 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x000746f4 cmp r3, 1 |
0x000746f6 it eq |
| if (r3 == 1) {
0x000746f8 ldreq fp, [r0, 8] | fp = *((r0 + 8));
| goto label_124;
| }
| if (r3 != 1) {
| label_124:
0x000746fc bne.w 0x745d0 | goto label_47;
| }
0x00074700 b 0x745de | goto label_48;
| label_121:
0x00074702 dmb ish | __asm ("dmb ish");
0x00074706 b 0x74610 | goto label_49;
| label_122:
0x00074708 movs r3, 0 | r3 = 0;
0x0007470a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0007470c b 0x74514 | goto label_44;
| label_123:
0x0007470e ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00074710 movs r3, 0 | r3 = 0;
0x00074712 add r1, sp, 8 | r1 += var_8h;
0x00074714 mov r0, r7 | r0 = r7;
0x00074716 str r1, [sp] | *(sp) = r1;
0x00074718 mov r1, r3 | r1 = r3;
0x0007471a adds r2, 1 | r2++;
0x0007471c bl 0x5ba94 | fcn_0005ba94 (r0, r1, r2, r3, r4);
0x00074720 ldr r3, [sp, 8] | r3 = var_8h;
0x00074722 cmp r3, 0 |
| if (r3 != 0) {
0x00074724 bne 0x7463c | goto label_50;
| }
0x00074726 cmp r0, 0 |
| if (r0 == 0) {
0x00074728 beq.w 0x74414 | goto label_39;
| }
0x0007472c ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x0007472e movw r2, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00074732 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x00074736 subs r5, r0, r1 | r5 = r0 - r1;
0x00074738 asrs r3, r5, 2 | r3 = r5 >> 2;
0x0007473a mul r3, r2, r3 | r3 = r2 * r3;
0x0007473e b 0x744be | goto label_51;
| label_106:
0x00074740 blx 0x6430 | fcn_00006430 ();
0x00074744 ldr r6, [r3, r7] | r6 = *((r3 + r7));
0x00074746 movs r7, r0 | r7 = r0;
0x00074748 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007474a movs r0, r0 |
0x0007474c ldr r0, [r0, r6] | r0 = *((r0 + r6));
0x0007474e movs r7, r0 | r7 = r0;
0x00074750 ldrsh r4, [r5, r0] | r4 = *((r5 + r0));
0x00074752 movs r7, r0 | r7 = r0;
0x00074754 ldrb r2, [r4, r4] | r2 = *((r4 + r4));
0x00074756 movs r7, r0 | r7 = r0;
0x00074758 ldrb r0, [r4, r2] | r0 = *((r4 + r2));
0x0007475a movs r7, r0 | r7 = r0;
0x0007475c vst1.8 {d16[0]}, [sl], r5 | __asm ("vst1.8 {d16[0]}, [sl], r5");
0x00074760 ands r0, r6, 0x850000 | r0 = r6 & 0x850000;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x74764 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00074764 () | void fcn_00074764 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1h;
| int16_t var_0h;
| int16_t var_ch;
| char * s1;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00074764 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00074768 mov sl, r2 | sl = r2;
0x0007476a ldr.w r2, [pc, 0x46c] |
0x0007476e mov r8, r3 | r8 = r3;
0x00074770 mov r7, r0 | r7 = r0;
0x00074772 sub sp, 0x2c |
0x00074774 ldr.w r3, [pc, 0x464] | r3 = *(0x74bdc);
0x00074778 mov r6, r1 | r6 = r1;
0x0007477a add r2, pc | r2 = 0xe9358;
0x0007477c ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0007477e ldr r3, [r2, r3] |
0x00074780 ldr r3, [r3] | r3 = *(0xe9358);
0x00074782 str r3, [sp, 0x24] | var_24h = r3;
0x00074784 mov.w r3, 0 | r3 = 0;
| if (r0 != 0) {
0x00074788 cbz r0, 0x74794 |
0x0007478a ldr.w r3, [pc, 0x454] |
0x0007478e add r3, pc |
0x00074790 ldr r3, [r3, 0x50] | r3 = *(0xe93c4);
0x00074792 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x00074794 mov.w sb, 0 | sb = 0;
0x00074798 mov r0, r6 | r0 = r6;
0x0007479a str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x0007479e blx 0x65dc | strcmp (r0, r1);
0x000747a2 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000747a4 ldr r5, [r7] | r5 = *(r7);
0x000747a6 str r0, [sp, 0xc] | var_ch = r0;
0x000747a8 and r3, r3, 0x10000 | r3 &= 0x10000;
0x000747ac cmp.w r8, 0 |
| if (r8 == 0) {
0x000747b0 beq 0x74876 | goto label_18;
| }
0x000747b2 str.w sb, [r8] | __asm ("str.w sb, [r8]");
0x000747b6 cmp r3, 0 |
| if (r3 == 0) {
0x000747b8 beq.w 0x748da | goto label_19;
| }
0x000747bc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000747be cmp.w sl, 0 |
| if (sl == 0) {
0x000747c2 beq.w 0x74a8c | goto label_20;
| }
0x000747c6 cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x000747ca bhi.w 0x74a2c | goto label_4;
| }
0x000747ce ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000747d0 mov r1, r6 | r1 = r6;
0x000747d2 mov r0, r5 | r0 = r5;
0x000747d4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000747d6 mov r4, r0 | r4 = r0;
0x000747d8 cmp r0, 0 |
| if (r0 != 0) {
0x000747da bne.w 0x74bba | goto label_21;
| }
0x000747de str.w sl, [sp, 0x10] | __asm ("str.w sl, [s1]");
| do {
0x000747e2 ldr.w r2, [pc, 0x400] |
0x000747e6 mov r1, r6 | r1 = r6;
0x000747e8 ldr r0, [pc, 0x3fc] |
0x000747ea add r2, pc | r2 = 0xe93d4;
0x000747ec add r0, pc | r0 = 0xe93d8;
0x000747ee bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000747f2 mov fp, r0 |
0x000747f4 cmp r0, 0 |
| if (r0 == 0) {
0x000747f6 beq 0x748a6 | goto label_6;
| }
0x000747f8 mov r1, r0 | r1 = r0;
0x000747fa ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000747fc mov r0, r5 | r0 = r5;
0x000747fe blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00074800 mov r4, r0 | r4 = r0;
0x00074802 mov r0, fp | r0 = fp;
0x00074804 bl 0x26dbc | fcn_00026dbc (r0);
0x00074808 cmp r4, 0 |
| if (r4 == 0) {
0x0007480a beq.w 0x74a24 | goto label_22;
| }
| label_0:
0x0007480e ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00074810 mov r1, r4 | r1 = r4;
0x00074812 ldr r2, [sp, 0x10] | r2 = s1;
0x00074814 mov r0, r5 | r0 = r5;
0x00074816 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00074818 orrs.w sl, sl, r0 | sl |= r0;
0x0007481c mov fp, r0 |
0x0007481e it ne |
| if (sl == sl) {
0x00074820 movne sl, 0 | sl = 0;
| }
| if (sl == sl) {
0x00074824 beq 0x748ea | goto label_23;
| }
| label_2:
0x00074826 cmp.w fp, 0 |
| if (fp == 0) {
0x0007482a beq.w 0x74b06 | goto label_24;
| }
| label_16:
0x0007482e mov r0, sl | r0 = sl;
0x00074830 bl 0x26dbc | fcn_00026dbc (r0);
0x00074834 ldr r2, [pc, 0x3b4] |
0x00074836 add r1, sp, 0x20 | r1 += var_20h;
0x00074838 mov r0, r7 | r0 = r7;
0x0007483a add r2, pc |
0x0007483c add.w r2, r2, 0xe80 | r2 = 0xea2aa;
0x00074840 blx fp | r0 = fp (r0, r1, r2);
0x00074842 mov r6, r0 | r6 = r0;
0x00074844 cmp r0, 0 |
| if (r0 == 0) {
0x00074846 beq.w 0x74a9a | goto label_25;
| }
0x0007484a cmp.w r0, 0x100 |
| if (r0 == 0x100) {
0x0007484e beq.w 0x74aee | goto label_26;
| }
0x00074852 cmp.w r8, 0 |
| if (r8 != 0) {
0x00074856 beq 0x74866 |
0x00074858 ldr r0, [pc, 0x394] |
0x0007485a ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007485c add r0, pc | r0 = 0xe9450;
0x0007485e bl 0x5cb60 | fcn_0005cb60 ();
0x00074862 str.w r0, [r8] | __asm ("str.w r0, [r8]");
| }
0x00074866 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00074868 bl 0x26dbc | fcn_00026dbc (r0);
0x0007486c ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0007486e mov r1, r4 | r1 = r4;
0x00074870 mov r0, r5 | r0 = r5;
0x00074872 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00074874 b 0x748e6 | goto label_3;
| label_18:
0x00074876 cmp r3, 0 |
| if (r3 == 0) {
0x00074878 beq 0x748e6 | goto label_3;
| }
0x0007487a cmp.w sl, 0 |
| if (sl == 0) {
0x0007487e beq.w 0x74afe | goto label_27;
| }
0x00074882 str.w sl, [sp, 0x10] | __asm ("str.w sl, [s1]");
| label_9:
0x00074886 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00074888 cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x0007488c bhi 0x748e6 | goto label_3;
| }
| label_5:
0x0007488e ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00074890 mov r1, r6 | r1 = r6;
0x00074892 mov r0, r5 | r0 = r5;
0x00074894 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00074896 mov r4, r0 | r4 = r0;
0x00074898 cmp r0, 0 |
0x0007489a beq 0x747e2 |
| } while (r0 == 0);
0x0007489c b 0x7480e | goto label_0;
| label_1:
0x0007489e ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x000748a0 mov r1, r4 | r1 = r4;
0x000748a2 mov r0, r5 | r0 = r5;
0x000748a4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_6:
0x000748a6 movs r1, 7 | r1 = 7;
| do {
| label_8:
0x000748a8 mov r0, r7 | r0 = r7;
0x000748aa bl 0x2e764 | r0 = fcn_0002e764 (r0, r1);
0x000748ae mov r4, r0 | r4 = r0;
| label_7:
0x000748b0 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
| if (r0 != 0) {
0x000748b2 cbz r0, 0x748bc |
0x000748b4 ldr r3, [pc, 0x33c] |
0x000748b6 add r3, pc |
0x000748b8 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000748ba blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000748bc ldr r2, [pc, 0x338] |
0x000748be ldr r3, [pc, 0x31c] | r3 = *(0x74bde);
0x000748c0 add r2, pc | r2 = 0xe94bc;
0x000748c2 ldr r3, [r2, r3] | r3 = *(0xe94bc);
0x000748c4 ldr r2, [r3] | r2 = *(0xe94bc);
0x000748c6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000748c8 eors r2, r3 | r2 ^= r3;
0x000748ca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000748ce bne.w 0x74bd4 | goto label_28;
| }
0x000748d2 mov r0, r4 | r0 = r4;
0x000748d4 add sp, 0x2c |
0x000748d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x000748da ldr r0, [pc, 0x320] |
0x000748dc add r0, pc | r0 = 0xe94de;
0x000748de bl 0x5cb60 | fcn_0005cb60 ();
0x000748e2 str.w r0, [r8] | __asm ("str.w r0, [r8]");
| label_3:
0x000748e6 movs r1, 1 | r1 = 1;
0x000748e8 b 0x748a8 |
| } while (1);
| label_23:
0x000748ea mov r0, r6 | r0 = r6;
0x000748ec blx 0x65dc | strcmp (r0, r1);
0x000748f0 ldr r3, [pc, 0x30c] |
0x000748f2 mov sl, r0 | sl = r0;
0x000748f4 add r3, pc |
0x000748f6 ldr.w r3, [r3, 0xd0] | r3 = *(0xe95c8);
0x000748fa cmp r3, 0 |
| if (r3 != 0) {
0x000748fc bne.w 0x74b7e | goto label_29;
| }
0x00074900 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00074904 cmp r0, 0 |
| if (r0 != 0) {
0x00074906 bne 0x7489e | goto label_1;
| }
0x00074908 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0007490c cmp r0, 0 |
| if (r0 != 0) {
0x0007490e bne 0x7489e | goto label_1;
| }
| label_10:
0x00074910 bic sl, sl, 0xc0000000 | sl = BIT_MASK (sl, 0xc0000000);
0x00074914 movs r1, 0 | r1 = 0;
0x00074916 add.w r0, sl, 0x1e | r0 = sl + 0x1e;
0x0007491a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007491e mov r2, r0 | r2 = r0;
0x00074920 str r0, [sp, 0x10] | s1 = r0;
0x00074922 cmp r0, 0 |
| if (r0 == 0) {
0x00074924 beq 0x7489e | goto label_1;
| }
0x00074926 ldr r3, [pc, 0x2dc] |
0x00074928 add.w ip, sl, -1 |
0x0007492c add r3, pc | r3 = 0xe9536;
0x0007492e ldm r3!, {r0, r1} | r0 = *(r3!);
| r1 = *((r3! + 4));
0x00074930 str r0, [r2] | *(r2) = r0;
0x00074932 str r1, [r2, 4] | *((r2 + 4)) = r1;
0x00074934 cmp.w sl, 0 |
| if (sl == 0) {
0x00074938 beq.w 0x74b92 | goto label_30;
| }
0x0007493c add.w r3, r6, sl | r3 = r6 + sl;
0x00074940 b 0x7494a |
| while (r2 != 0x2f) {
0x00074942 subs.w ip, ip, 1 |
| if (ip <= ip) {
0x00074946 blo.w 0x74b92 | goto label_30;
| }
0x0007494a ldrb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x0007494e cmp r2, 0x2f |
0x00074950 bne 0x74942 |
| }
0x00074952 add.w r3, ip, 1 | r3 = ip + 1;
0x00074956 add.w lr, r6, r3 | lr = r6 + r3;
| label_12:
0x0007495a ldr.w sl, [pc, 0x2ac] |
0x0007495e mov r2, lr | r2 = lr;
0x00074960 ldr.w fp, [pc, 0x2a8] |
0x00074964 movs r1, 2 | r1 = 2;
0x00074966 strd r5, lr, [sp, 0x14] | __asm ("strd r5, lr, [var_14h]");
0x0007496a add sl, pc | sl = 0xe9578;
0x0007496c str r3, [sp, 0x1c] | var_1ch = r3;
0x0007496e add fp, pc | fp = 0xe957e;
0x00074970 b 0x7498e |
| while (r3 != 0) {
0x00074972 add r3, fp | r3 += fp;
0x00074974 add.w sl, sl, 1 | sl++;
0x00074978 ldrb.w r5, [r3, 0x140] | r5 = *((r3 + 0x140));
0x0007497c ldrb r3, [r0] | r3 = *(r0);
0x0007497e add r3, fp | r3 += fp;
0x00074980 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x00074984 cmp r5, r3 |
| if (r5 != r3) {
0x00074986 bne 0x7499a | goto label_31;
| }
0x00074988 subs r1, 1 | r1--;
| if (r1 <= 1) {
0x0007498a blo.w 0x74b98 | goto label_32;
| }
0x0007498e mov lr, r2 | lr = r2;
0x00074990 ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x00074994 mov r0, sl | r0 = sl;
0x00074996 cmp r3, 0 |
0x00074998 bne 0x74972 |
| }
| label_31:
0x0007499a mov r2, lr | r2 = lr;
0x0007499c ldrb r0, [r0] | r0 = *(r0);
0x0007499e ldrb r1, [r2] | r1 = *(r2);
0x000749a0 ldr r2, [pc, 0x26c] |
0x000749a2 ldr r5, [sp, 0x14] | r5 = var_14h;
0x000749a4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000749a6 add r2, pc | r2 = 0xe95ba;
0x000749a8 ldr.w lr, [sp, 0x18] | lr = var_18h;
0x000749ac add r1, r2 | r1 += r2;
0x000749ae add r2, r0 | r2 += r0;
0x000749b0 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000749b4 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000749b8 cmp r1, r2 |
| if (r1 == r2) {
0x000749ba beq.w 0x74b9a | goto label_33;
| }
| label_13:
0x000749be ldrb.w r2, [lr] | r2 = *(lr);
0x000749c2 cmp r2, 0 |
0x000749c4 it ne |
| if (r2 != 0) {
0x000749c6 cmpne r2, 0x2e | __asm ("cmpne r2, 0x2e");
| }
| if (r2 == 0) {
0x000749c8 beq.w 0x74bb4 | goto label_34;
| }
0x000749cc ldr.w ip, [pc, 0x244] |
0x000749d0 add r3, r6 | r3 += r6;
0x000749d2 ldr.w lr, [sp, 0x10] | lr = s1;
0x000749d6 movs r1, 8 | r1 = 8;
0x000749d8 add ip, pc | ip = 0xe95f0;
| do {
0x000749da add r2, ip | r2 += ip;
0x000749dc ldrb.w r0, [r2, 0x40] | r0 = *((r2 + 0x40));
0x000749e0 lsls r0, r0, 0x1e | r0 <<= 0x1e;
0x000749e2 ittt mi |
| if (r0 >= r0) {
0x000749e4 ldrbmi r2, [r2, 0x140] | r2 = *((r2 + 0x140));
| }
| if (r0 >= r0) {
0x000749e8 strbmi r2, [lr, r1] | *((lr + r1)) = r2;
| }
| if (r0 < r0) {
0x000749ec adds r1, 1 | r1++;
| }
0x000749ee ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000749f2 cmp r2, 0x2e |
0x000749f4 it ne |
| if (r2 != 0x2e) {
0x000749f6 cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
0x000749f8 bne 0x749da |
| } while (r2 != 0x2e);
0x000749fa mov ip, r1 |
| label_15:
0x000749fc ldr r3, [pc, 0x218] |
0x000749fe mov r1, r4 | r1 = r4;
0x00074a00 ldr r2, [sp, 0x10] | r2 = s1;
0x00074a02 add r3, pc | r3 = 0xe961e;
0x00074a04 str r3, [sp, 0x14] | var_14h = r3;
0x00074a06 add.w lr, r2, ip | lr = r2 + ip;
0x00074a0a ldr r0, [r3] | r0 = imp.atan;
0x00074a0c mov sl, r2 | sl = r2;
0x00074a0e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00074a10 str.w r0, [r2, ip] | __asm ("str.w r0, [r2, ip]");
0x00074a14 mov r0, r5 | r0 = r5;
0x00074a16 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00074a18 strh.w r3, [lr, 4] | *((lr + 4)) = r3;
0x00074a1c ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00074a1e blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00074a20 mov fp, r0 |
0x00074a22 b 0x74826 | goto label_2;
| label_22:
0x00074a24 cmp.w r8, 0 |
| if (r8 == 0) {
0x00074a28 beq.w 0x748e6 | goto label_3;
| }
| label_4:
0x00074a2c ldr r3, [pc, 0x1ec] |
0x00074a2e add r3, pc |
0x00074a30 ldr.w r3, [r3, 0xd0] | r3 = *(0xe971e);
0x00074a34 cmp r3, 0 |
| if (r3 != 0) {
0x00074a36 bne.w 0x74b84 | goto label_35;
| }
0x00074a3a bl 0x25da0 | r0 = fcn_00025da0 ();
0x00074a3e cmp r0, 0 |
| if (r0 != 0) {
0x00074a40 bne.w 0x74b8a | goto label_36;
| }
0x00074a44 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00074a48 cmp r0, 0 |
| if (r0 != 0) {
0x00074a4a bne.w 0x74b8a | goto label_36;
| }
| label_11:
0x00074a4e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00074a50 adds.w r4, r3, 0x12c | r4 = r3 + 0x12c;
0x00074a54 adc r1, sb, 0 | __asm ("adc r1, sb, 0");
0x00074a58 mov r0, r4 | r0 = r4;
0x00074a5a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00074a5e mov r1, r0 | r1 = r0;
0x00074a60 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00074a64 str r0, [sp, 0x20] | var_20h = r0;
0x00074a66 cmp r0, 0 |
| if (r0 == 0) {
0x00074a68 beq.w 0x748e6 | goto label_3;
| }
0x00074a6c ldr r2, [pc, 0x1b0] |
0x00074a6e mov r0, r4 | r0 = r4;
0x00074a70 mov.w r3, 0x1000 | r3 = 0x1000;
0x00074a74 str r6, [sp] | *(sp) = r6;
0x00074a76 add r2, pc | r2 = 0xe969a;
0x00074a78 bl 0x56488 | fcn_00056488 (r0, r1);
0x00074a7c ldr r1, [sp, 0xc] | r1 = var_ch;
0x00074a7e mov r0, r5 | r0 = r5;
0x00074a80 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00074a82 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00074a84 addw r1, r1, 0x12b | __asm ("addw r1, r1, 0x12b");
0x00074a88 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00074a8a b 0x748e6 | goto label_3;
| label_20:
0x00074a8c cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x00074a90 bhi 0x74a2c | goto label_4;
| }
0x00074a92 ldr r3, [pc, 0x190] |
0x00074a94 add r3, pc | r3 = 0xe96be;
0x00074a96 str r3, [sp, 0x10] | s1 = r3;
0x00074a98 b 0x7488e | goto label_5;
| label_25:
0x00074a9a ldr.w r3, [r7, 0xcc] | r3 = *((r7 + 0xcc));
0x00074a9e adds r3, 1 | r3++;
0x00074aa0 lsls r5, r3, 2 | r5 = r3 << 2;
0x00074aa2 mov r3, r0 | r3 = r0;
0x00074aa4 mov r0, r7 | r0 = r7;
0x00074aa6 mov r2, r5 | r2 = r5;
0x00074aa8 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00074aac mov r8, r0 | r8 = r0;
0x00074aae cmp r0, 0 |
| if (r0 == 0) {
0x00074ab0 beq.w 0x748a6 | goto label_6;
| }
0x00074ab4 mov r2, r5 | r2 = r5;
0x00074ab6 mov r1, r6 | r1 = r6;
0x00074ab8 blx 0x62ec | fcn_000062ec ();
0x00074abc ldr.w r2, [r7, 0xcc] | r2 = *((r7 + 0xcc));
0x00074ac0 cmp r2, 0 |
| if (r2 > 0) {
0x00074ac2 ble 0x74ad0 |
0x00074ac4 ldr.w r1, [r7, 0xd0] | r1 = *((r7 + 0xd0));
0x00074ac8 lsls r2, r2, 2 | r2 <<= 2;
0x00074aca mov r0, r8 | r0 = r8;
0x00074acc blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x00074ad0 ldr.w r1, [r7, 0xd0] | r1 = *((r7 + 0xd0));
| if (r1 != 0) {
0x00074ad4 cbz r1, 0x74adc |
0x00074ad6 mov r0, r7 | r0 = r7;
0x00074ad8 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00074adc ldr.w r3, [r7, 0xcc] | r3 = *((r7 + 0xcc));
0x00074ae0 str.w r8, [r7, 0xd0] | __asm ("str.w r8, [r7, 0xd0]");
0x00074ae4 adds r2, r3, 1 | r2 = r3 + 1;
0x00074ae6 str.w r2, [r7, 0xcc] | __asm ("str.w r2, [r7, 0xcc]");
0x00074aea str.w r4, [r8, r3, lsl 2] | __asm ("str.w r4, [r8, r3, lsl 2]");
| label_26:
0x00074aee ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x00074af2 movs r4, 0 | r4 = 0;
0x00074af4 movs r1, 0 | r1 = 0;
0x00074af6 cmp r3, 0 |
| if (r3 == 0) {
0x00074af8 beq.w 0x748b0 | goto label_7;
| }
0x00074afc b 0x748a8 | goto label_8;
| label_27:
0x00074afe ldr r3, [pc, 0x128] |
0x00074b00 add r3, pc | r3 = 0xe972e;
0x00074b02 str r3, [sp, 0x10] | s1 = r3;
0x00074b04 b 0x74886 | goto label_9;
| label_24:
0x00074b06 cmp.w r8, 0 |
| if (r8 == 0) {
0x00074b0a beq 0x74b6e | goto label_14;
| }
| label_17:
0x00074b0c ldr r0, [sp, 0x10] | r0 = s1;
0x00074b0e blx 0x65dc | strcmp (r0, r1);
0x00074b12 ldr r3, [pc, 0x118] |
0x00074b14 mov fp, r0 |
0x00074b16 add r3, pc |
0x00074b18 ldr.w r3, [r3, 0xd0] | r3 = *(0xe9818);
0x00074b1c cmp r3, 0 |
| if (r3 != 0) {
0x00074b1e bne 0x74ba4 | goto label_37;
| }
0x00074b20 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00074b24 cmp r0, 0 |
| if (r0 != 0) {
0x00074b26 bne 0x74baa | goto label_38;
| }
0x00074b28 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00074b2c cmp r0, 0 |
| if (r0 != 0) {
0x00074b2e bne 0x74baa | goto label_38;
| }
| do {
0x00074b30 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00074b32 add.w fp, fp, 0x12c |
0x00074b36 adds.w r2, fp, r3 | r2 = fp + r3;
0x00074b3a adc r1, sb, 0 | __asm ("adc r1, sb, 0");
0x00074b3e mov r0, r2 | r0 = r2;
0x00074b40 str r2, [sp, 0x14] | var_14h = r2;
0x00074b42 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00074b46 mov r1, r0 | r1 = r0;
0x00074b48 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00074b4c str r0, [sp, 0x20] | var_20h = r0;
| if (r0 != 0) {
0x00074b4e cbz r0, 0x74b6e |
0x00074b50 ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [s1]");
0x00074b54 str r6, [sp] | *(sp) = r6;
0x00074b56 mov r0, r2 | r0 = r2;
0x00074b58 ldr r2, [pc, 0xd4] |
0x00074b5a add r2, pc | r2 = 0xe978e;
0x00074b5c bl 0x56488 | fcn_00056488 (r0, r1);
0x00074b60 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00074b62 mov r0, r5 | r0 = r5;
0x00074b64 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00074b66 subs r1, r3, 1 | r1 = r3 - 1;
0x00074b68 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00074b6a add r1, fp | r1 += fp;
0x00074b6c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_14:
0x00074b6e mov r0, r5 | r0 = r5;
0x00074b70 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x00074b72 mov r1, r4 | r1 = r4;
0x00074b74 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00074b76 mov r0, sl | r0 = sl;
0x00074b78 bl 0x26dbc | fcn_00026dbc (r0);
0x00074b7c b 0x748e6 | goto label_3;
| label_29:
0x00074b7e dmb ish | __asm ("dmb ish");
0x00074b82 b 0x74910 | goto label_10;
| label_35:
0x00074b84 dmb ish | __asm ("dmb ish");
0x00074b88 b 0x74a4e | goto label_11;
| label_36:
0x00074b8a movs r3, 0 | r3 = 0;
0x00074b8c str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00074b90 b 0x748e6 | goto label_3;
| label_30:
0x00074b92 mov lr, r6 | lr = r6;
0x00074b94 movs r3, 0 | r3 = 0;
0x00074b96 b 0x7495a | goto label_12;
| label_32:
0x00074b98 ldr r5, [sp, 0x14] | r5 = var_14h;
| label_33:
0x00074b9a add.w r3, ip, 4 | r3 = ip + 4;
0x00074b9e add.w lr, r6, r3 | lr = r6 + r3;
0x00074ba2 b 0x749be | goto label_13;
| label_37:
0x00074ba4 dmb ish | __asm ("dmb ish");
0x00074ba8 b 0x74b30 |
| } while (1);
| label_38:
0x00074baa movs r3, 0 | r3 = 0;
0x00074bac str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00074bb0 str r3, [sp, 0x20] | var_20h = r3;
0x00074bb2 b 0x74b6e | goto label_14;
| label_34:
0x00074bb4 mov.w ip, 8 |
0x00074bb8 b 0x749fc | goto label_15;
| label_21:
0x00074bba ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00074bbc mov r2, sl | r2 = sl;
0x00074bbe mov r1, r4 | r1 = r4;
0x00074bc0 mov r0, r5 | r0 = r5;
0x00074bc2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00074bc4 mov fp, r0 |
| if (r0 != 0) {
0x00074bc6 cbz r0, 0x74bcc |
0x00074bc8 mov sl, sb | sl = sb;
0x00074bca b 0x7482e | goto label_16;
| }
0x00074bcc str.w sl, [sp, 0x10] | __asm ("str.w sl, [s1]");
0x00074bd0 mov sl, sb | sl = sb;
0x00074bd2 b 0x74b0c | goto label_17;
| label_28:
0x00074bd4 blx 0x6430 | fcn_00006430 ();
0x00074bd8 ldrsb r6, [r3, r0] | r6 = *((r3 + r0));
0x00074bda movs r7, r0 | r7 = r0;
0x00074bdc lsls r4, r6, 8 | r4 = r6 << 8;
0x00074bde movs r0, r0 |
0x00074be0 ldrh r6, [r0, r4] | r6 = *((r0 + r4));
0x00074be2 movs r7, r0 | r7 = r0;
0x00074be4 lsls r2, r6, 9 | r2 = r6 << 9;
0x00074be6 movs r6, r0 | r6 = r0;
0x00074be8 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x74d68 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00074d68 () | void fcn_00074d68 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int32_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int32_t var_3ch_2;
| int16_t var_44h;
| int32_t var_44h_2;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| r0 = arg1;
| r1 = arg2;
0x00074d68 invalid |
0x00074d6c ldr.w r3, [pc, 0x640] |
0x00074d70 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00074d74 mov r4, r0 | r4 = r0;
0x00074d76 add r2, pc | r2 += pc;
0x00074d78 vpush {d8} | __asm ("vpush {d8}");
0x00074d7c sub sp, 0x94 |
0x00074d7e mov r5, r1 | r5 = r1;
0x00074d80 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00074d82 ldr r3, [r3] | r3 = *(0x753b0);
0x00074d84 str r3, [sp, 0x8c] | var_8ch = r3;
0x00074d86 mov.w r3, 0 | r3 = 0;
0x00074d8a ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x00074d8c cmp r3, 0 |
| if (r3 <= 0) {
0x00074d8e ble 0x74e7c | goto label_24;
| }
0x00074d90 ldr r3, [r0, 0x20] | r3 = *((r0 + 0x20));
0x00074d92 ldr r3, [r3] | r3 = *(r3);
0x00074d94 str r3, [sp, 0x50] | var_50h = r3;
0x00074d96 cmp r3, 0 |
| if (r3 == 0) {
0x00074d98 beq 0x74e7c | goto label_24;
| }
| label_8:
0x00074d9a movs r7, 0 | r7 = 0;
| label_1:
0x00074d9c mov r1, r5 | r1 = r5;
0x00074d9e mov r0, r4 | r0 = r4;
0x00074da0 bl 0x2b8d8 | r0 = fcn_0002b8d8 (r0, r1);
0x00074da4 cmp r0, 0 |
| if (r0 == 0) {
0x00074da6 beq 0x74e58 | goto label_25;
| }
| label_7:
0x00074da8 ldrb.w r3, [r4, 0x32] | r3 = *((r4 + 0x32));
| if (r3 == 0) {
0x00074dac cbnz r3, 0x74db8 |
0x00074dae ldrb.w r3, [r4, 0x2e] | r3 = *((r4 + 0x2e));
0x00074db2 lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 < r3) {
0x00074db4 bmi.w 0x74ef0 | goto label_26;
| }
| }
0x00074db8 ldrb.w r6, [r4, 0x2c] | r6 = *((r4 + 0x2c));
| if (r6 == 0) {
0x00074dbc cbnz r6, 0x74dda |
0x00074dbe ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
| if (r1 == 0) {
0x00074dc2 cbnz r1, 0x74dd8 |
0x00074dc4 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00074dc6 movs r2, 1 | r2 = 1;
0x00074dc8 ldr r3, [r0] | r3 = *(r0);
0x00074dca ldr r6, [r3, 0x38] | r6 = *((r3 + 0x38));
0x00074dcc movs r3, 0xa | r3 = 0xa;
0x00074dce blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00074dd0 mov r7, r0 | r7 = r0;
0x00074dd2 cmp r0, 0 |
| if (r0 != 0) {
0x00074dd4 bne.w 0x74f52 | goto label_11;
| }
| }
| label_3:
0x00074dd8 movs r6, 0 | r6 = 0;
| }
| label_2:
0x00074dda ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00074ddc movs r2, 1 | r2 = 1;
0x00074dde strb.w r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x00074de2 cmp r3, 0 |
| if (r3 <= 0) {
0x00074de4 ble.w 0x74f3a | goto label_27;
| }
0x00074de8 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00074dea ldr r3, [r3] | r3 = *(r3);
0x00074dec str r3, [sp, 0x50] | var_50h = r3;
0x00074dee cmp r3, 0 |
| if (r3 == 0) {
0x00074df0 beq.w 0x74f3a | goto label_27;
| }
| label_5:
0x00074df4 mov r1, r5 | r1 = r5;
0x00074df6 mov r0, r4 | r0 = r4;
0x00074df8 bl 0x2b8d8 | r0 = fcn_0002b8d8 (r0, r1);
0x00074dfc mov r7, r0 | r7 = r0;
0x00074dfe cmp r0, 0 |
| if (r0 != 0) {
0x00074e00 bne.w 0x74f78 | goto label_28;
| }
0x00074e02 strh r2, [r7, 4] | *((r7 + 4)) = r2;
| if (r6 == 0) {
0x00074e04 cbnz r6, 0x74e1e |
0x00074e06 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00074e0a strb.w r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
| if (r3 != 0) {
0x00074e0e cbnz r3, 0x74e1e | goto label_29;
| }
0x00074e10 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00074e12 movs r3, 9 | r3 = 9;
0x00074e14 movs r2, 1 | r2 = 1;
0x00074e16 ldr r1, [r0] | r1 = *(r0);
0x00074e18 ldr r5, [r1, 0x38] | r5 = *((r1 + 0x38));
0x00074e1a mov r1, r7 | r1 = r7;
0x00074e1c blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_29:
0x00074e1e ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00074e20 movw r3, 0xe218 |
0x00074e24 movt r3, 0x2d | r3 = 0x2de218;
0x00074e28 cmp r2, r3 |
| if (r2 != r3) {
0x00074e2a bne 0x74eb4 | goto label_30;
| }
0x00074e2c ldrb.w r3, [r4, 0x32] | r3 = *((r4 + 0x32));
| if (r3 != 0) {
0x00074e30 cbnz r3, 0x74e72 | goto label_31;
| }
| do {
| label_0:
0x00074e32 ldr.w r2, [pc, 0x580] |
0x00074e36 ldr.w r3, [pc, 0x578] | r3 = *(0x753b2);
0x00074e3a add r2, pc | r2 = 0xea1f4;
0x00074e3c ldr r3, [r2, r3] | r3 = *(0xea1f4);
0x00074e3e ldr r2, [r3] | r2 = *(0xea1f4);
0x00074e40 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x00074e42 eors r2, r3 | r2 ^= r3;
0x00074e44 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00074e48 bne.w 0x751c2 | goto label_32;
| }
0x00074e4c mov r0, r7 | r0 = r7;
0x00074e4e add sp, 0x94 |
0x00074e50 vpop {d8} | __asm ("vpop {d8}");
0x00074e54 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_25:
0x00074e58 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00074e5a movw r3, 0xe218 |
0x00074e5e movt r3, 0x2d | r3 = 0x2de218;
0x00074e62 cmp r2, r3 |
| if (r2 != r3) {
0x00074e64 bne 0x74eb4 | goto label_30;
| }
| label_6:
0x00074e66 ldrb.w r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x00074e6a cmp r3, 0 |
0x00074e6c beq 0x74e32 |
| } while (r3 == 0);
0x00074e6e cmp r7, 0 |
| if (r7 != 0) {
0x00074e70 bne 0x74f5c | goto label_33;
| }
| label_31:
0x00074e72 movs r7, 0 | r7 = 0;
| label_4:
0x00074e74 movs r3, 0 | r3 = 0;
0x00074e76 strb.w r3, [r4, 0x2b] | *((r4 + 0x2b)) = r3;
0x00074e7a b 0x74e32 | goto label_0;
| label_24:
0x00074e7c add r2, sp, 0x50 | r2 += var_50h;
0x00074e7e movs r1, 0 | r1 = 0;
0x00074e80 mov r0, r4 | r0 = r4;
0x00074e82 bl 0x337d8 | r0 = fcn_000337d8 (r0, r1, r2);
0x00074e86 mov r7, r0 | r7 = r0;
0x00074e88 cmp r0, 0 |
| if (r0 == 0) {
0x00074e8a beq.w 0x750ca | goto label_34;
| }
0x00074e8e cmp.w r0, 0x508 |
| if (r0 != 0x508) {
0x00074e92 bne 0x74e32 | goto label_0;
| }
0x00074e94 movs r2, 2 | r2 = 2;
0x00074e96 movs r3, 1 | r3 = 1;
0x00074e98 strb.w r2, [r4, 0x2b] | *((r4 + 0x2b)) = r2;
0x00074e9c ldr r2, [sp, 0x50] | r2 = var_50h;
0x00074e9e strb.w r3, [r4, 0x32] | *((r4 + 0x32)) = r3;
0x00074ea2 str r3, [r5] | *(r5) = r3;
0x00074ea4 cmp r2, 0 |
| if (r2 != 0) {
0x00074ea6 bne.w 0x74d9c | goto label_1;
| }
0x00074eaa ldrb.w r6, [r4, 0x2c] | r6 = *((r4 + 0x2c));
0x00074eae cmp r6, 0 |
| if (r6 != 0) {
0x00074eb0 bne 0x74dda | goto label_2;
| }
0x00074eb2 b 0x74dd8 | goto label_3;
| label_30:
0x00074eb4 ldr.w r0, [pc, 0x500] |
0x00074eb8 movw r3, 0xfba7 | r3 = 0xfba7;
0x00074ebc ldr.w r2, [pc, 0x4fc] |
0x00074ec0 movs r7, 0xe | r7 = 0xe;
0x00074ec2 ldr.w r1, [pc, 0x4fc] |
0x00074ec6 add r0, pc | r0 = 0xea282;
0x00074ec8 adds r0, 0x14 | r0 += 0x14;
0x00074eca add r2, pc | r2 = 0xea28a;
0x00074ecc str r0, [sp] | *(sp) = r0;
0x00074ece add r1, pc | r1 = 0xea294;
0x00074ed0 movs r0, 0xe | r0 = 0xe;
0x00074ed2 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00074ed6 ldrb.w r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x00074eda cmp r3, 0 |
| if (r3 == 0) {
0x00074edc beq 0x74e32 | goto label_0;
| }
0x00074ede movs r1, 0 | r1 = 0;
0x00074ee0 mov r0, r4 | r0 = r4;
0x00074ee2 bl 0x2705c | fcn_0002705c (r0, r1);
0x00074ee6 movs r3, 0 | r3 = 0;
0x00074ee8 movs r7, 0xe | r7 = 0xe;
0x00074eea strb.w r3, [r4, 0x32] | *((r4 + 0x32)) = r3;
0x00074eee b 0x74e74 | goto label_4;
| label_26:
0x00074ef0 ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
0x00074ef4 cmp r1, 0 |
| if (r1 != 0) {
0x00074ef6 bne.w 0x750d4 | goto label_35;
| }
0x00074efa ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00074efc movs r3, 6 | r3 = 6;
0x00074efe movs r2, 1 | r2 = 1;
0x00074f00 ldr r5, [r0] | r5 = *(r0);
0x00074f02 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00074f04 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00074f06 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00074f08 cbnz r0, 0x74f52 | goto label_11;
| }
0x00074f0a ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
| if (r1 == 0) {
0x00074f0e cbnz r1, 0x74f1c |
0x00074f10 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00074f12 movs r3, 5 | r3 = 5;
0x00074f14 movs r2, 1 | r2 = 1;
0x00074f16 ldr r5, [r0] | r5 = *(r0);
0x00074f18 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00074f1a blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| }
0x00074f1c ldrb.w r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x00074f20 cmp r3, 0 |
| if (r3 == 0) {
0x00074f22 beq.w 0x750d4 | goto label_35;
| }
0x00074f26 movs r1, 0 | r1 = 0;
0x00074f28 mov r0, r4 | r0 = r4;
0x00074f2a bl 0x2705c | fcn_0002705c (r0, r1);
0x00074f2e movs r3, 0 | r3 = 0;
0x00074f30 mov.w r7, 0x108 | r7 = 0x108;
0x00074f34 strb.w r3, [r4, 0x32] | *((r4 + 0x32)) = r3;
0x00074f38 b 0x74e74 | goto label_4;
| label_27:
0x00074f3a add r2, sp, 0x50 | r2 += var_50h;
0x00074f3c movs r1, 0 | r1 = 0;
0x00074f3e mov r0, r4 | r0 = r4;
0x00074f40 bl 0x337d8 | r0 = fcn_000337d8 (r0, r1, r2);
0x00074f44 mov r7, r0 | r7 = r0;
0x00074f46 cmp r0, 0 |
| if (r0 == 0) {
0x00074f48 beq.w 0x74df4 | goto label_5;
| }
0x00074f4c cmp r6, 0 |
| if (r6 == 0) {
0x00074f4e beq.w 0x750ac | goto label_10;
| }
| label_11:
0x00074f52 ldrb.w r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x00074f56 cmp r3, 0 |
| if (r3 == 0) {
0x00074f58 beq.w 0x74e32 | goto label_0;
| }
| label_33:
0x00074f5c movs r1, 0 | r1 = 0;
0x00074f5e mov r0, r4 | r0 = r4;
0x00074f60 bl 0x2705c | fcn_0002705c (r0, r1);
0x00074f64 movw r3, 0x20a | r3 = 0x20a;
0x00074f68 cmp r7, r3 |
0x00074f6a it eq |
| if (r7 != r3) {
0x00074f6c moveq r7, -1 | r7 = -1;
| }
0x00074f70 movs r3, 0 | r3 = 0;
0x00074f72 strb.w r3, [r4, 0x32] | *((r4 + 0x32)) = r3;
0x00074f76 b 0x74e74 | goto label_4;
| label_28:
0x00074f78 ldrb.w r3, [r4, 0x2d] | r3 = *((r4 + 0x2d));
0x00074f7c add.w fp, r3, 1 |
0x00074f80 rsb.w sb, r3, 2 | sb = 2 - r3;
0x00074f84 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
| if (r3 == 0) {
0x00074f88 cbnz r3, 0x74fa0 |
0x00074f8a ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00074f8c movs r3, 0xa | r3 = 0xa;
0x00074f8e mov r2, sb | r2 = sb;
0x00074f90 mov r1, fp | r1 = fp;
0x00074f92 ldr r7, [r0] | r7 = *(r0);
0x00074f94 ldr r7, [r7, 0x38] | r7 = *((r7 + 0x38));
0x00074f96 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00074f98 mov r7, r0 | r7 = r0;
0x00074f9a cmp r0, 0 |
| if (r0 != 0) {
0x00074f9c bne.w 0x7516e | goto label_36;
| }
| }
0x00074fa0 movs r2, 0x30 | r2 = 0x30;
0x00074fa2 movs r1, 0 | r1 = 0;
0x00074fa4 add.w r0, r4, 0x34 | r0 = r4 + 0x34;
0x00074fa8 blx 0x62ec | fcn_000062ec ();
0x00074fac ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00074fae add r1, sp, 0x60 | r1 += var_60h;
0x00074fb0 ldr r3, [r0] | r3 = *(r0);
0x00074fb2 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00074fb4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00074fb6 mov r7, r0 | r7 = r0;
0x00074fb8 cmp r0, 0 |
| if (r0 == 0) {
0x00074fba bne 0x7508a |
0x00074fbc ldrd r2, r3, [sp, 0x60] | __asm ("ldrd r2, r3, [var_60h]");
0x00074fc0 cmp r2, 0x21 |
0x00074fc2 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 < 0x21) {
0x00074fc6 blt.w 0x750da | goto label_37;
| }
0x00074fca ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00074fcc add.w sl, sp, 0x6c | sl += var_6ch;
0x00074fd0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00074fd4 movs r2, 0x20 | r2 = 0x20;
0x00074fd6 mov r1, sl | r1 = sl;
0x00074fd8 ldr r3, [r0] | r3 = *(r0);
0x00074fda vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00074fde ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00074fe0 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00074fe2 cmp r0, 0 |
| if (r0 != 0) {
0x00074fe4 bne.w 0x7519c | goto label_38;
| }
0x00074fe8 ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x00074fea movw r2, 0x682 |
0x00074fee movt r2, 0x377f | r2 = 0x377f0682;
0x00074ff2 ldr r0, [sp, 0x74] | r0 = var_74h;
0x00074ff4 rev r3, r1 | r1 = SWAP32 (r3);
0x00074ff6 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x00074ffa cmp r3, r2 |
| if (r3 != r2) {
0x00074ffc bne 0x750da | goto label_37;
| }
0x00074ffe rev.w r8, r0 | r0 = SWAP32 (r8);
0x00075002 add.w r3, r8, -1 | r3 = r8 + -1;
0x00075006 tst.w r3, r8 |
| if ((r3 & r8) != 0) {
0x0007500a bne 0x750da | goto label_37;
| }
0x0007500c sub.w r3, r8, 0x200 | r3 = r8 - 0x200;
0x00075010 cmp.w r3, 0xfe00 |
| if (r3 > 0xfe00) {
0x00075014 bhi 0x750da | goto label_37;
| }
0x00075016 ubfx r2, r1, 0x18, 1 | r2 = (r1 >> 0x18) & ((1 << 1) - 1);
0x0007501a ldr r1, [sp, 0x78] | r1 = var_78h;
0x0007501c add.w ip, sp, 0x7c |
0x00075020 strb.w r2, [r4, 0x41] | *((r4 + 0x41)) = r2;
0x00075022 movs r0, 0x41 | r0 = 0x41;
0x00075024 mov r3, r7 | r3 = r7;
0x00075026 str.w r8, [r4, 0x24] | __asm ("str.w r8, [r4, 0x24]");
0x0007502a rev r1, r1 | r1 = SWAP32 (r1);
0x0007502c str r1, [r4, 0x70] | *((r4 + 0x70)) = r1;
0x0007502e ldm.w ip!, {r0, r1} | r0 = *(ip!);
| r1 = *((ip! + 4));
0x00075032 str r1, [r4, 0x58] | *((r4 + 0x58)) = r1;
0x00075034 mov r1, sl | r1 = sl;
0x00075036 add.w sl, r4, 0x4c | sl = r4 + 0x4c;
0x0007503a str r0, [r4, 0x54] | *((r4 + 0x54)) = r0;
0x0007503c eor r0, r2, 1 | r0 = r2 ^ 1;
0x00075040 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00075044 movs r2, 0x18 | r2 = 0x18;
0x00075046 bl 0x228b8 | fcn_000228b8 (r0, r1, r2, r3);
0x0007504a ldr r3, [sp, 0x84] | r3 = var_84h;
0x0007504c ldr r2, [r4, 0x4c] | r2 = *((r4 + 0x4c));
0x0007504e rev r3, r3 | r3 = SWAP32 (r3);
0x00075050 cmp r2, r3 |
| if (r2 != r3) {
0x00075052 bne 0x750de | goto label_39;
| }
0x00075054 ldr r3, [sp, 0x88] | r3 = var_88h;
0x00075056 ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x00075058 rev r3, r3 | r3 = SWAP32 (r3);
0x0007505a cmp r2, r3 |
| if (r2 != r3) {
0x0007505c bne 0x750de | goto label_39;
| }
0x0007505e ldr r2, [sp, 0x70] | r2 = var_70h;
0x00075060 mov.w r3, 0x2d00 |
0x00075064 movt r3, 0x18e2 | r3 = 0x18e22d00;
0x00075068 cmp r2, r3 |
| if (r2 == r3) {
0x0007506a beq.w 0x751c6 | goto label_40;
| }
0x0007506e ldr r3, [pc, 0x354] |
0x00075070 movs r7, 0xe | r7 = 0xe;
0x00075072 ldr r2, [pc, 0x354] |
0x00075074 movs r0, 0xe | r0 = 0xe;
0x00075076 ldr r1, [pc, 0x354] |
0x00075078 add r3, pc | r3 = 0xea442;
0x0007507a adds r3, 0x14 | r3 += 0x14;
0x0007507c add r2, pc | r2 = 0xea44a;
0x0007507e str r3, [sp] | *(sp) = r3;
0x00075080 add r1, pc | r1 = 0xea452;
0x00075082 movw r3, 0xf71c | r3 = 0xf71c;
0x00075086 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| }
| label_13:
0x0007508a ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
| if (r3 == 0) {
0x0007508e cbnz r3, 0x750a2 |
0x00075090 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00075092 mov r2, sb | r2 = sb;
0x00075094 mov r1, fp | r1 = fp;
0x00075096 movs r3, 9 | r3 = 9;
0x00075098 ldr.w ip, [r0] | ip = *(r0);
0x0007509c ldr.w r8, [ip, 0x38] | r8 = *((ip + 0x38));
0x000750a0 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
0x000750a2 movs r3, 1 | r3 = 1;
0x000750a4 str r3, [r5] | *(r5) = r3;
0x000750a6 cmp r6, 0 |
| if (r6 != 0) {
0x000750a8 bne.w 0x74e66 | goto label_6;
| }
| label_10:
0x000750ac ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
0x000750b0 movs r3, 0 | r3 = 0;
0x000750b2 strb.w r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000750b6 cmp r1, 0 |
| if (r1 != 0) {
0x000750b8 bne.w 0x74e66 | goto label_6;
| }
0x000750bc ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000750be movs r2, 1 | r2 = 1;
0x000750c0 ldr r3, [r0] | r3 = *(r0);
0x000750c2 ldr r5, [r3, 0x38] | r5 = *((r3 + 0x38));
0x000750c4 movs r3, 9 | r3 = 9;
0x000750c6 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x000750c8 b 0x74e66 | goto label_6;
| label_34:
0x000750ca ldr r3, [sp, 0x50] | r3 = var_50h;
0x000750cc cmp r3, 0 |
| if (r3 == 0) {
0x000750ce beq.w 0x74da8 | goto label_7;
| }
0x000750d2 b 0x74d9a | goto label_8;
| label_35:
0x000750d4 mov.w r7, 0x108 | r7 = 0x108;
0x000750d8 b 0x74e32 | goto label_0;
| label_37:
0x000750da add.w sl, r4, 0x4c | sl = r4 + 0x4c;
| label_39:
0x000750de vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
| label_19:
0x000750e2 mov r0, r4 | r0 = r4;
0x000750e4 vst1.32 {d8}, [sl] | __asm ("vst1.32 {d8}, [sl]");
0x000750e8 bl 0x2b634 | fcn_0002b634 (r0);
0x000750ec ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000750ee mov.w r8, 1 | r8 = 1;
0x000750f2 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x000750f4 movs r1, 4 | r1 = 4;
0x000750f6 ldr r7, [r3] | r7 = *(r3);
0x000750f8 movs r3, 0 | r3 = 0;
0x000750fa str r3, [r7, 0x60] | *((r7 + 0x60)) = r3;
0x000750fc str.w r2, [r7, 0x80] | __asm ("str.w r2, [r7, 0x80]");
0x000750fe movs r0, 0x80 | r0 = 0x80;
0x00075100 str r3, [r7, 0x64] | *((r7 + 0x64)) = r3;
0x00075102 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00075106 cmp r3, 0 |
| if (r3 != 0) {
0x00075108 bne 0x751a0 | goto label_41;
| }
| do {
0x0007510a ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0007510c movs r3, 0xa | r3 = 0xa;
0x0007510e movs r2, 1 | r2 = 1;
0x00075110 str r1, [sp, 0xc] | var_ch = r1;
0x00075112 ldr.w ip, [r0] | ip = *(r0);
0x00075116 ldr.w sl, [ip, 0x38] | sl = *((ip + 0x38));
0x0007511a blx sl | r0 = sl (r0, r1, r2, r3);
0x0007511c mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x0007511e cbnz r0, 0x75178 | goto label_42;
| }
0x00075120 cmp.w r8, 1 |
0x00075124 ldrb.w r2, [r4, 0x2b] | r2 = *((r4 + 0x2b));
0x00075128 ldr r1, [sp, 0xc] | r1 = var_ch;
| if (r8 == 1) {
0x0007512a beq 0x751aa | goto label_43;
| }
0x0007512c add.w r3, r7, r8, lsl 2 | r3 = r7 + (r8 << 2);
0x00075130 mov.w r0, -1 | r0 = -1;
0x00075134 str r0, [r3, 0x64] | *((r3 + 0x64)) = r0;
| if (r2 == 0) {
0x00075136 cbnz r2, 0x75148 |
| label_15:
0x00075138 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0007513a movs r3, 9 | r3 = 9;
0x0007513c movs r2, 1 | r2 = 1;
0x0007513e ldr.w ip, [r0] | ip = *(r0);
0x00075142 ldr.w sl, [ip, 0x38] | sl = *((ip + 0x38));
0x00075144 adr r0, 0xe0 | r0 = 0xe0;
0x00075146 blx sl | sl (r0, r2, r3);
| }
| label_9:
0x00075148 mov.w sl, 0 | sl = 0;
| label_12:
0x0007514c add.w r8, r8, 1 | r8++;
0x00075150 cmp.w r8, 5 |
0x00075152 lsrs r5, r0, 0x1c | r5 = r0 >> 0x1c;
| if (r5 == r0) {
0x00075154 beq 0x75180 | goto label_44;
| }
| label_14:
0x00075156 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0007515a add.w r1, r8, 3 | r1 = r8 + 3;
0x0007515e cmp r3, 0 |
0x00075160 beq 0x7510a |
| } while (r3 == 0);
0x00075162 add.w r3, r7, r8, lsl 2 | r3 = r7 + (r8 << 2);
0x00075166 mov.w r2, -1 | r2 = -1;
0x0007516a str r2, [r3, 0x64] | *((r3 + 0x64)) = r2;
0x0007516c b 0x75148 | goto label_9;
| label_36:
0x0007516e movs r3, 1 | r3 = 1;
0x00075170 str r3, [r5] | *(r5) = r3;
0x00075172 cmp r6, 0 |
| if (r6 == 0) {
0x00075174 beq 0x750ac | goto label_10;
| }
0x00075176 b 0x74f52 | goto label_11;
| label_42:
0x00075178 cmp r0, 5 |
| if (r0 == 5) {
0x0007517a beq 0x7514c | goto label_12;
| }
| do {
0x0007517c mov r7, sl | r7 = sl;
0x0007517e b 0x7508a | goto label_13;
| label_44:
0x00075180 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00075182 cmp r3, 0 |
0x00075184 beq 0x7517c |
| } while (r3 == 0);
0x00075186 ldr r1, [pc, 0x248] |
0x00075188 movw r0, 0x11b | r0 = 0x11b;
0x0007518c ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0007518e mov r7, sl | r7 = sl;
0x00075190 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x00075192 add r1, pc | r1 = 0xea568;
0x00075194 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00075198 b 0x7508a | goto label_13;
| label_17:
0x0007519a movs r0, 7 | r0 = 7;
| label_38:
0x0007519c mov r7, r0 | r7 = r0;
0x0007519e b 0x7508a | goto label_13;
| if (r2 == 0) {
| label_41:
0x000751a0 cbz r2, 0x751ba | goto label_45;
| }
0x000751a2 str r2, [r7, 0x68] | *((r7 + 0x68)) = r2;
| label_16:
0x000751a4 mov.w r8, 2 | r8 = 2;
0x000751a8 b 0x75156 | goto label_14;
| label_43:
0x000751aa ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
| if (r3 == 0) {
0x000751ac cbnz r3, 0x751b2 |
0x000751ae mov.w r3, -1 | r3 = -1;
| }
0x000751b2 str r3, [r7, 0x68] | *((r7 + 0x68)) = r3;
0x000751b4 cmp r2, 0 |
| if (r2 == 0) {
0x000751b6 beq 0x75138 | goto label_15;
| }
0x000751b8 b 0x751a4 | goto label_16;
| label_45:
0x000751ba mov.w r3, -1 | r3 = -1;
0x000751be str r3, [r7, 0x68] | *((r7 + 0x68)) = r3;
0x000751c0 b 0x751a4 | goto label_16;
| label_32:
0x000751c2 blx 0x6430 | fcn_00006430 ();
| label_40:
0x000751c6 ldr r3, [pc, 0x20c] |
0x000751c8 add.w r2, r8, 0x18 | r2 = r8 + 0x18;
0x000751cc str r2, [sp, 0x10] | var_10h = r2;
0x000751ce add r3, pc |
0x000751d0 ldr.w r3, [r3, 0xd0] | r3 = *(0xea678);
0x000751d4 cmp r3, 0 |
| if (r3 != 0) {
0x000751d6 bne.w 0x75398 | goto label_46;
| }
0x000751da bl 0x25da0 | r0 = fcn_00025da0 ();
0x000751de cmp r0, 0 |
| if (r0 != 0) {
0x000751e0 bne 0x7519a | goto label_17;
| }
0x000751e2 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000751e6 cmp r0, 0 |
| if (r0 != 0) {
0x000751e8 bne 0x7519a | goto label_17;
| }
| label_23:
0x000751ea add.w r0, r8, 0x8000 | r0 = r8 + 0x8000;
0x000751ee movs r1, 0 | r1 = 0;
0x000751f0 adds r0, 0x18 | r0 += 0x18;
0x000751f2 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000751f6 mov r7, r0 | r7 = r0;
0x000751f8 str r0, [sp, 0x24] | var_24h = r0;
0x000751fa cmp r0, 0 |
| if (r0 == 0) {
0x000751fc beq 0x7519a | goto label_17;
| }
0x000751fe ldr r2, [sp, 0x10] | r2 = var_10h;
0x00075200 adds r7, 0x18 | r7 += 0x18;
0x00075202 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00075204 ldr r1, [sp, 0x64] | r1 = var_64h;
0x00075206 str r7, [sp, 0xc] | var_ch = r7;
0x00075208 subs.w r0, r3, 0x20 | r0 = r3 - 0x20;
0x0007520c asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00075210 sbc r1, r1, 0 | __asm ("sbc r1, r1, 0");
0x00075214 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00075218 str r3, [sp, 0x2c] | var_2ch = r3;
0x0007521a bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x0007521e bic r3, r8, 0xff | r3 = BIT_MASK (r8, 0xff);
0x00075222 mov lr, r0 | lr = r0;
0x00075224 orr.w r3, r3, r8, asr 16 | r3 |= (r8 >> 16);
0x00075228 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
0x0007522c ldr.w sl, [sp, 0x10] | sl = var_10h;
0x00075230 add.w r1, r7, r8 | r1 = r7 + r8;
0x00075234 uxth r3, r3 | r3 = (int16_t) r3;
0x00075236 mov.w r8, 0 | r8 = 0;
0x0007523a str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x0007523e mov fp, r8 |
0x00075240 str r3, [sp, 0x20] | var_20h = r3;
0x00075242 add.w r3, lr, 0x21 | r3 = lr + 0x21;
0x00075246 lsrs r3, r3, 0xc | r3 >>= 0xc;
0x00075248 str r1, [sp, 0x18] | var_18h = r1;
0x0007524a strd sb, lr, [sp, 0x34] | __asm ("strd sb, lr, [var_38h]");
0x0007524e str r3, [sp, 0x28] | var_28h = r3;
0x00075250 add r3, sp, 0x5c | r3 += var_5ch;
0x00075252 str r3, [sp, 0x14] | var_14h = r3;
0x00075254 strd r6, r5, [sp, 0x3c] | __asm ("strd r6, r5, [var_3ch]");
| label_18:
0x00075258 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0007525a lsl.w r7, fp, 0xc | r7 = fp << 0xc;
0x0007525e addw r8, r7, 0xfde | __asm ("addw r8, r7, 0xfde");
0x00075262 cmp r8, r3 |
0x00075264 it hs |
| if (r8 < r3) {
0x00075266 movhs r8, r3 | r8 = r3;
| }
0x00075268 cmp.w fp, 0 |
| if (fp == 0) {
0x0007526c beq 0x75368 | goto label_47;
| }
0x0007526e subs r7, 0x21 | r7 -= 0x21;
| label_20:
0x00075270 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00075272 cmp fp, r2 |
| if (fp >= r2) {
0x00075274 bge 0x7536c | goto label_48;
| }
0x00075276 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x00075278 ldr.w r2, [r2, fp, lsl 2] | offset_0 = fp << 2;
| r2 = *((r2 + offset_0));
0x0007527c str r2, [sp, 0x54] | var_54h = r2;
0x0007527e cmp r2, 0 |
| if (r2 == 0) {
0x00075280 beq 0x7536c | goto label_48;
| }
0x00075282 movs r5, 0 | r5 = 0;
| label_21:
0x00075284 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00075286 cmp r2, 0 |
| if (r2 == 0) {
0x00075288 beq 0x75348 | goto label_49;
| }
0x0007528a ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0007528c cmp r8, r7 |
0x0007528e ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075290 lsl.w r1, fp, 2 | r1 = fp << 2;
0x00075294 str.w r3, [r0, fp, lsl 2] | __asm ("str.w r3, [r0, fp, lsl 2]");
| if (r8 <= r7) {
0x00075298 blo 0x7537a | goto label_50;
| }
0x0007529a subs r0, r7, 1 | r0 = r7 - 1;
0x0007529c add r3, sp, 0x58 | r3 += var_58h;
0x0007529e umull r6, sb, r0, sl | r6:sb = r0 * sl;
0x000752a2 str r3, [sp, 0x10] | var_10h = r3;
0x000752a4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000752a6 strd fp, r2, [sp, 0x44] | __asm ("strd fp, r2, [var_44h]");
0x000752aa str r1, [sp, 0x4c] | var_4ch = r1;
0x000752ac mov fp, r3 |
0x000752ae mla sb, r0, r3, sb | __asm ("mla sb, r0, r3, sb");
0x000752b2 adds r6, 0x20 | r6 += 0x20;
0x000752b4 adc sb, sb, 0 | __asm ("adc sb, sb, 0");
0x000752b8 mov r5, sb | r5 = sb;
0x000752ba ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000752be b 0x75302 |
| while (r0 == 0) {
0x000752c0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000752c2 mov r0, r4 | r0 = r4;
0x000752c4 ldrd r1, r2, [sp, 0x10] | __asm ("ldrd r1, r2, [var_10h]");
0x000752c8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000752cc bl 0x26468 | r0 = fcn_00026468 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x000752d0 cbz r0, 0x75316 | goto label_51;
| }
0x000752d2 ldr r2, [sp, 0x58] | r2 = var_58h;
0x000752d4 mov r1, r7 | r1 = r7;
0x000752d6 mov r0, r4 | r0 = r4;
0x000752d8 bl 0x5300c | r0 = fcn_0005300c (r0, r1, r2, r3);
| if (r0 != 0) {
0x000752dc cbnz r0, 0x75316 | goto label_51;
| }
0x000752de ldr r3, [sp, 0x5c] | r3 = var_5ch;
| if (r3 != 0) {
0x000752e0 cbz r3, 0x752f2 |
0x000752e2 strd r7, r3, [r4, 0x44] | __asm ("strd r7, r3, [r4, 0x44]");
0x000752e6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000752e8 vld1.32 {d8}, [r3] | __asm ("vld1.32 {d8}, [r3]");
0x000752ec ldr r3, [sp, 0x20] | r3 = var_20h;
0x000752ee strh.w r3, [r4, 0x42] | *((r4 + 0x42)) = r3;
| }
0x000752f2 adds.w r6, r6, sl | r6 += sl;
0x000752f6 add.w r7, r7, 1 | r7++;
0x000752fa adc.w r5, r5, fp | __asm ("adc.w r5, r5, fp");
0x000752fc lsls r3, r1, 0x14 | r3 = r1 << 0x14;
0x000752fe cmp r8, r7 |
| if (r8 <= r7) {
0x00075300 blo 0x75316 | goto label_51;
| }
0x00075302 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00075304 mov r2, sl | r2 = sl;
0x00075306 mov r1, sb | r1 = sb;
0x00075308 ldr r3, [r0] | r3 = *(r0);
0x0007530a strd r6, r5, [sp] | __asm ("strd r6, r5, [sp]");
0x0007530e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00075310 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00075312 cmp r0, 0 |
0x00075314 beq 0x752c0 |
| }
| label_51:
0x00075316 ldrd fp, r2, [sp, 0x44] | __asm ("ldrd fp, r2, [var_44h]");
0x0007531a mov r5, r0 | r5 = r0;
0x0007531c ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0007531e ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00075320 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075322 cmp.w fp, 0 |
0x00075326 str r2, [r0, r1] | *((r0 + r1)) = r2;
0x00075328 ite eq |
| if (fp != 0) {
0x0007532a moveq r1, 0x88 | r1 = 0x88;
| }
| if (fp == 0) {
0x0007532c movne r1, 0 | r1 = 0;
| }
0x0007532e adds r0, r2, r1 | r0 = r2 + r1;
0x00075330 rsb.w r2, r1, 0x8000 | r2 = 0x8000 - r1;
0x00075332 tst r0, r0 |
0x00075334 add r1, r3 | r1 += r3;
0x00075336 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007533a cmp r7, r8 |
| if (r7 < r8) {
0x0007533c bls 0x75348 | goto label_49;
| }
| label_22:
0x0007533e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00075340 add.w fp, fp, 1 |
0x00075344 cmp fp, r3 |
| if (fp < r3) {
0x00075346 bls 0x75258 | goto label_18;
| }
| label_49:
0x00075348 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0007534a str r5, [sp, 0xc] | var_ch = r5;
0x0007534c ldrd fp, sb, [sp, 0x30] | __asm ("ldrd fp, sb, [var_30h]");
0x00075350 ldrd r6, r5, [sp, 0x3c] | __asm ("ldrd r6, r5, [var_3ch]");
0x00075354 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00075358 bl 0x26dbc | fcn_00026dbc (r0);
0x0007535c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007535e cmp r3, 0 |
| if (r3 == 0) {
0x00075360 beq.w 0x750e2 | goto label_19;
| }
0x00075364 mov r7, r3 | r7 = r3;
0x00075366 b 0x7508a | goto label_13;
| label_47:
0x00075368 movs r7, 1 | r7 = 1;
0x0007536a b 0x75270 | goto label_20;
| label_48:
0x0007536c add r2, sp, 0x54 | r2 += var_54h;
0x0007536e mov r1, fp | r1 = fp;
0x00075370 mov r0, r4 | r0 = r4;
0x00075372 bl 0x337d8 | r0 = fcn_000337d8 (r0, r1, r2);
0x00075376 mov r5, r0 | r5 = r0;
0x00075378 b 0x75284 | goto label_21;
| label_50:
0x0007537a str.w r2, [r0, fp, lsl 2] | __asm ("str.w r2, [r0, fp, lsl 2]");
0x0007537e cmp.w fp, 0 |
| if (fp == 0) {
0x00075382 bne 0x7539e |
0x00075384 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075386 add.w r0, r2, 0x88 | r0 = r2 + 0x88;
0x0007538a movw r2, 0x7f78 | r2 = 0x7f78;
0x0007538e add.w r1, r3, 0x88 | r1 = r3 + 0x88;
0x00075392 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00075396 b 0x7533e | goto label_22;
| label_46:
0x00075398 dmb ish | __asm ("dmb ish");
0x0007539c b 0x751ea | goto label_23;
| }
0x0007539e ldr r1, [sp, 0x18] | r1 = var_18h;
0x000753a0 mov r0, r2 | r0 = r2;
0x000753a2 mov.w r2, 0x8000 | r2 = 0x8000;
0x000753a6 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000753aa b 0x7533e | goto label_22;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x75928 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00075928 () | void fcn_00075928 (arithmetic x, int16_t arg_bh, arithmetic arg_60h, int16_t arg_68h, int16_t arg_a8h, int16_t arg_d0h, int16_t arg_f8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_54h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_80h;
| int16_t var_88h;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00075928 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007592c sub sp, 0xa4 |
0x0007592e str r1, [sp, 0x18] | var_18h = r1;
0x00075930 mov fp, r0 |
0x00075932 mov r0, r1 | r0 = r1;
0x00075934 mov r4, r2 | r4 = r2;
0x00075936 str r1, [sp, 0x54] | var_54h = r1;
0x00075938 ldr.w r1, [pc, 0x524] |
0x0007593c str r2, [sp, 0x2c] | var_2ch = r2;
0x0007593e ldr.w r2, [pc, 0x524] | r2 = *(0x75e66);
0x00075942 add r1, pc | r1 = 0xeb7a6;
0x00075944 ldr r2, [r1, r2] |
0x00075946 movs r1, 1 | r1 = 1;
0x00075948 ldr r2, [r2] | r2 = imp.atan;
0x0007594a str r2, [sp, 0x9c] | var_9ch = r2;
0x0007594c mov.w r2, 0 | r2 = 0;
0x00075950 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 == 0) {
0x00075952 cbz r3, 0x7597a | goto label_10;
| }
0x00075954 mov r3, r0 | r3 = r0;
0x00075956 cmp r0, 0 |
| if (r0 == 0) {
0x00075958 beq.w 0x75ca4 | goto label_28;
| }
0x0007595c add r2, sp, 0x54 | r2 += var_54h;
0x0007595e movs r1, 0 | r1 = 0;
| do {
0x00075960 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x00075962 cmp r4, r0 |
0x00075964 it hs |
| if (r4 < r0) {
0x00075966 addhs r2, r3, 0x10 | r2 = r3 + 0x10;
| }
0x0007596a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0007596c it hs |
| if (r4 < r0) {
0x0007596e addhs r1, 1 | r1++;
| }
0x00075970 str r3, [r2] | *(r2) = r3;
0x00075972 cmp r3, 0 |
0x00075974 bne 0x75960 |
| } while (r3 != 0);
0x00075976 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00075978 str r3, [sp, 0x18] | var_18h = r3;
| label_10:
0x0007597a ldr.w r3, [fp, 0xd0] | r3 = *(arg_d0h);
0x0007597e add r3, r1 | r3 += r1;
0x00075980 str.w r3, [fp, 0xd0] | __asm ("str.w r3, [arg_d0h]");
0x00075982 adds r0, 0xd0 | r0 += 0xd0;
0x00075984 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075986 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00075988 cmp r3, 1 |
| if (r3 == 1) {
0x0007598a beq.w 0x75c34 | goto label_29;
| }
| label_7:
0x0007598e ldr.w r7, [fp, 0xf8] | r7 = *(arg_f8h);
0x00075992 movs r2, 0x30 | r2 = 0x30;
0x00075994 ldr.w r3, [fp, 0xa8] | r3 = *(arg_a8h);
0x00075998 ldrb.w r4, [fp, 0xb] | r4 = *(arg_bh);
0x0007599c add.w r0, r7, 0x34 | r0 = r7 + 0x34;
0x000759a0 str r3, [sp, 0x20] | var_20h = r3;
0x000759a2 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000759a4 ldr r5, [r3] | r5 = *(r3);
0x000759a6 mov r1, r5 | r1 = r5;
0x000759a8 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x000759ac cmp r0, 0 |
| if (r0 == 0) {
0x000759ae beq.w 0x75b78 | goto label_30;
| }
0x000759b2 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000759b4 adds r3, 1 | r3++;
0x000759b6 str r3, [sp, 0x28] | var_28h = r3;
| label_2:
0x000759b8 ldrsh.w r3, [r7, 0x28] | r3 = *((r7 + 0x28));
| if (r3 != 0) {
0x000759bc cbnz r3, 0x759fc | goto label_31;
| }
0x000759be ldr r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x000759c0 cmp r3, 0 |
| if (r3 != 0) {
0x000759c2 bne.w 0x75c3c | goto label_32;
| }
| label_8:
0x000759c6 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
| if (r3 == 0) {
| label_12:
0x000759ca cbnz r3, 0x759da |
0x000759cc ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x000759ce movs r3, 5 | r3 = 5;
0x000759d0 movs r2, 1 | r2 = 1;
0x000759d2 movs r1, 3 | r1 = 3;
0x000759d4 ldr r5, [r0] | r5 = *(r0);
0x000759d6 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x000759d8 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_11:
0x000759da movs r6, 0 | r6 = 0;
0x000759dc add r5, sp, 0x60 | r5 += arg_60h;
0x000759de movw r3, 0xffff | r3 = 0xffff;
0x000759e2 strh r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
| do {
0x000759e4 adds r6, 1 | r6++;
0x000759e6 movs r2, 1 | r2 = 1;
0x000759e8 mov r3, r6 | r3 = r6;
0x000759ea mov r1, r5 | r1 = r5;
0x000759ec mov r0, r7 | r0 = r7;
0x000759ee bl 0x753d8 | r0 = fcn_000753d8 (r0, r1, r2, r3);
0x000759f2 adds r3, r0, 1 | r3 = r0 + 1;
0x000759f4 beq 0x759e4 |
| } while (r3 == r0);
0x000759f6 mov sb, r0 | sb = r0;
0x000759f8 cmp r0, 0 |
| if (r0 != 0) {
0x000759fa bne 0x75ae6 | goto label_4;
| }
| label_31:
0x000759fc ldr.w sl, [r7, 0x44] | sl = *((r7 + 0x44));
0x00075a00 cmp.w sl, 0 |
| if (sl == 0) {
0x00075a04 beq.w 0x75b86 | goto label_33;
| }
| label_5:
0x00075a08 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00075a0a str r3, [sp, 0x34] | var_34h = r3;
| label_6:
0x00075a0c ldr r3, [sp, 0x34] | r3 = var_34h;
0x00075a0e ldr r5, [sp, 0x18] | r5 = var_18h;
0x00075a10 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x00075a14 str r3, [sp, 0x64] | var_64h = r3;
0x00075a16 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00075a18 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00075a1c str r4, [sp, 0x70] | var_70h = r4;
0x00075a1e add.w r2, r3, 0x18 | r2 = r3 + 0x18;
0x00075a22 str r3, [sp, 0x74] | var_74h = r3;
0x00075a24 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00075a26 asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x00075a28 str r4, [sp, 0x38] | var_38h = r4;
0x00075a2a str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x00075a2e mov fp, r7 |
0x00075a30 eor r3, r3, 1 | r3 ^= 1;
0x00075a34 str r7, [sp, 0x60] | *(arg_60h) = r7;
0x00075a36 and r3, r3, 1 | r3 &= 1;
0x00075a3a vstr d16, [sp, 0x68] | __asm ("vstr d16, [sp, 0x68]");
0x00075a3e str r3, [sp, 0x24] | var_24h = r3;
0x00075a40 movs r3, 0 | r3 = 0;
0x00075a42 str r3, [sp, 0x14] | var_14h = r3;
0x00075a44 add r3, sp, 0x60 | r3 += arg_60h;
0x00075a46 str r3, [sp, 0x1c] | var_1ch = r3;
0x00075a48 umull r6, r3, sl, r2 | r6:r3 = sl * r2;
0x00075a4c str r2, [sp, 0x40] | var_40h = r2;
0x00075a4e str r1, [sp, 0x10] | var_10h = r1;
0x00075a50 mla r3, sl, r1, r3 | __asm ("mla r3, sl, r1, r3");
0x00075a54 adds r6, 0x20 | r6 += 0x20;
0x00075a56 adc r8, r3, 0 | __asm ("adc r8, r3, 0");
0x00075a5a mov r4, r8 | r4 = r8;
0x00075a5c mov r8, r2 | r8 = r2;
| label_0:
0x00075a5e cmp.w sb, 0 |
| if (sb == 0) {
0x00075a62 beq 0x75b04 | goto label_34;
| }
0x00075a64 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00075a66 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00075a68 cmp r2, 0 |
0x00075a6a it ne |
| if (r2 == 0) {
0x00075a6c orrne r3, r3, 1 | r3 |= 1;
| }
0x00075a70 cmp r3, 0 |
| if (r3 == 0) {
0x00075a72 beq 0x75b70 | goto label_35;
| }
0x00075a74 movs r3, 0 | r3 = 0;
0x00075a76 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00075a78 add r2, sp, 0x5c | r2 += var_5ch;
0x00075a7a mov r0, fp | r0 = fp;
0x00075a7c str r3, [sp, 0x5c] | var_5ch = r3;
0x00075a7e bl 0x536c8 | fcn_000536c8 (r0, r1, r2);
0x00075a82 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00075a84 cmp sb, r3 |
| if (sb > r3) {
0x00075a86 bhi 0x75b04 | goto label_34;
| }
0x00075a88 ldr.w r1, [fp, 0x68] | r1 = *(arg_68h);
0x00075a8c subs r2, r3, 1 | r2 = r3 - 1;
0x00075a8e umull r0, r7, r2, r8 | r0:r7 = r2 * r8;
0x00075a92 add.w ip, r1, -1 |
0x00075a96 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00075a98 mla r7, r2, r1, r7 | __asm ("mla r7, r2, r1, r7");
0x00075a9c ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00075a9e adds.w r2, r0, 0x38 | r2 = r0 + 0x38;
0x00075aa2 str r2, [sp, 0x28] | var_28h = r2;
0x00075aa4 adc r2, r7, 0 | __asm ("adc r2, r7, 0");
0x00075aa8 cmp r3, ip |
0x00075aaa it ls |
| if (r3 > ip) {
0x00075aac strls r3, [fp, 0x68] | *(arg_68h) = r3;
| }
0x00075ab0 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00075ab2 str r2, [sp, 0x30] | var_30h = r2;
0x00075ab4 ldr.w r7, [r3, 0xe0] | r7 = *((r3 + 0xe0));
| if (r7 != 0) {
0x00075ab8 cbz r7, 0x75ac6 |
0x00075aba ldr.w r0, [r3, 0xec] | r0 = *((r3 + 0xec));
0x00075abe movs r3, 6 | r3 = 6;
0x00075ac0 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00075ac2 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00075ac4 mov r1, r0 | r1 = r0;
| }
0x00075ac6 cmp r1, 0 |
| if (r1 == 0) {
0x00075ac8 beq.w 0x75f2c | goto label_36;
| }
0x00075acc ldr.w r0, [fp, 8] | r0 = *(x);
0x00075ad0 ldr r7, [sp, 0x28] | r7 = var_28h;
0x00075ad2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00075ad4 ldr r3, [r0] | r3 = *(r0);
0x00075ad6 str r7, [sp] | *(sp) = r7;
0x00075ad8 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00075ada str r7, [sp, 4] | var_4h = r7;
0x00075adc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00075ade blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00075ae0 cmp r0, 0 |
| if (r0 == 0) {
0x00075ae2 beq 0x75b7c | goto label_37;
| }
| do {
| label_22:
0x00075ae4 mov sb, r0 | sb = r0;
| label_4:
0x00075ae6 ldr r2, [pc, 0x380] |
0x00075ae8 ldr r3, [pc, 0x378] | r3 = *(0x75e64);
0x00075aea add r2, pc | r2 = 0xeb958;
0x00075aec ldr r3, [r2, r3] | r3 = *(0xeb958);
0x00075aee ldr r2, [r3] | r2 = *(0xeb958);
0x00075af0 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x00075af2 eors r2, r3 | r2 ^= r3;
0x00075af4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00075af8 bne.w 0x76016 | goto label_38;
| }
0x00075afc mov r0, sb | r0 = sb;
0x00075afe add sp, 0xa4 |
0x00075b00 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_34:
0x00075b04 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00075b06 add.w sl, sl, 1 | sl++;
| if (r3 != 0) {
0x00075b0a cbz r3, 0x75b12 |
0x00075b0c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00075b0e cmp r3, 0 |
| if (r3 == 0) {
0x00075b10 beq 0x75b74 | goto label_39;
| }
| }
0x00075b12 movs r2, 0 | r2 = 0;
| label_1:
0x00075b14 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00075b16 mov r1, r5 | r1 = r5;
0x00075b18 strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x00075b1c bl 0x31970 | r0 = fcn_00031970 (r0, r1, r2, r3);
0x00075b20 cmp r0, 0 |
0x00075b22 bne 0x75ae4 |
| } while (r0 != 0);
0x00075b24 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00075b26 adds.w r6, r8, r6 | r6 = r8 + r6;
0x00075b2a str r5, [sp, 0x14] | var_14h = r5;
0x00075b2c adc.w r4, r3, r4 | __asm ("adc.w r4, r3, r4");
0x00075b30 ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00075b32 orr r3, r3, 0x40 | r3 |= 0x40;
0x00075b36 strh r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| label_3:
0x00075b38 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00075b3a cmp r5, 0 |
| if (r5 != 0) {
0x00075b3c bne 0x75a5e | goto label_0;
| }
0x00075b3e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00075b40 mov r7, fp | r7 = fp;
0x00075b42 mov r8, r4 | r8 = r4;
0x00075b44 ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x00075b48 ldr r4, [sp, 0x38] | r4 = var_38h;
0x00075b4a cmp r3, 0 |
| if (r3 == 0) {
0x00075b4c beq.w 0x75cd4 | goto label_40;
| }
0x00075b50 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x00075b52 cmp r3, 0 |
| if (r3 != 0) {
0x00075b54 bne.w 0x75d94 | goto label_41;
| }
| label_17:
0x00075b58 ands r5, r4, 3 | r5 = r4 & 3;
| if (r5 != r4) {
0x00075b5c bne.w 0x75ec6 | goto label_42;
| }
0x00075b60 ldrb.w r3, [r7, 0x2f] | r3 = *((r7 + 0x2f));
0x00075b64 cmp r3, 0 |
| if (r3 != 0) {
0x00075b66 bne.w 0x75f4c | goto label_43;
| }
0x00075b6a ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00075b6c mov r8, r3 | r8 = r3;
0x00075b6e b 0x75cda | goto label_18;
| label_35:
0x00075b70 add.w sl, sl, 1 | sl++;
| label_39:
0x00075b74 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00075b76 b 0x75b14 | goto label_1;
| label_30:
0x00075b78 str r0, [sp, 0x28] | var_28h = r0;
0x00075b7a b 0x759b8 | goto label_2;
| label_37:
0x00075b7c ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00075b7e bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x00075b82 strh r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00075b84 b 0x75b38 | goto label_3;
| label_33:
0x00075b86 vldr d16, [pc, 0x2d0] | __asm ("vldr d16, [0x00075e5c]");
0x00075b8a add.w r5, r7, 0x54 | r5 = r7 + 0x54;
0x00075b8e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00075b90 vstr d16, [sp, 0x78] | __asm ("vstr d16, [sp, 0x78]");
0x00075b94 ldr r3, [r7, 0x70] | r3 = *((r7 + 0x70));
0x00075b96 strd r2, r3, [sp, 0x48] | __asm ("strd r2, r3, [sp, 0x48]");
0x00075b9a vldr d16, [sp, 0x48] | __asm ("vldr d16, [sp, 0x48]");
0x00075b9e vrev32.8 d16, d16 | __asm ("vrev32.8 d16, d16");
0x00075ba2 vstr d16, [sp, 0x80] | __asm ("vstr d16, [sp, 0x80]");
0x00075ba6 cmp r3, 0 |
| if (r3 == 0) {
0x00075ba8 beq 0x75c7c | goto label_44;
| }
| label_9:
0x00075baa ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00075bac movs r2, 0 | r2 = 0;
0x00075bae ldr r0, [r7, 0x54] | r0 = *((r7 + 0x54));
0x00075bb0 add r3, sp, 0x80 | r3 += var_80h;
0x00075bb2 add r6, sp, 0x98 | r6 += var_98h;
0x00075bb4 mov r5, r2 | r5 = r2;
0x00075bb6 add.w ip, sp, 0x88 |
0x00075bba stm.w ip!, {r0, r1} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| do {
0x00075bbe ldr r1, [r3, -0x8] | r1 = *((r3 - 0x8));
0x00075bc2 adds r3, 8 | r3 += 8;
0x00075bc4 add r1, r2 | r1 += r2;
0x00075bc6 add r5, r1 | r5 += r1;
0x00075bc8 ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
0x00075bcc cmp r3, r6 |
0x00075bce add r1, r5 | r1 += r5;
0x00075bd0 add r2, r1 | r2 += r1;
0x00075bd2 bne 0x75bbe |
| } while (r3 != r6);
0x00075bd4 rev r3, r5 | r5 = SWAP32 (r3);
0x00075bd6 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00075bda str r3, [sp, 0x90] | var_90h = r3;
0x00075bdc rev r3, r2 | r2 = SWAP32 (r3);
0x00075bde str r3, [sp, 0x94] | var_94h = r3;
0x00075be0 add r1, sp, 0x78 | r1 += var_78h;
0x00075be2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00075be4 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00075be6 strd r5, r2, [r7, 0x4c] | __asm ("strd r5, r2, [r7, 0x4c]");
0x00075bea movs r2, 0x20 | r2 = 0x20;
0x00075bec str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00075bee movs r3, 0 | r3 = 0;
0x00075bf0 strb.w r3, [r7, 0x41] | *((r7 + 0x41)) = r3;
0x00075bf4 movs r3, 1 | r3 = 1;
0x00075bf6 strb.w r3, [r7, 0x2f] | *((r7 + 0x2f)) = r3;
0x00075bfa ldr r3, [r0] | r3 = *(r0);
0x00075bfc vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00075c00 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00075c02 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00075c04 mov sb, r0 | sb = r0;
0x00075c06 cmp r0, 0 |
| if (r0 != 0) {
0x00075c08 bne.w 0x75ae6 | goto label_4;
| }
0x00075c0c ldrb.w r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x00075c10 cmp r3, 0 |
| if (r3 == 0) {
0x00075c12 beq.w 0x75a08 | goto label_5;
| }
0x00075c16 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00075c18 ubfx r1, r4, 2, 2 | r1 = (r4 >> 2) & ((1 << 2) - 1);
0x00075c1c str r0, [sp, 0x34] | var_34h = r0;
0x00075c1e cmp r1, 0 |
| if (r1 == 0) {
0x00075c20 beq.w 0x75a0c | goto label_6;
| }
0x00075c24 ldr r3, [r0] | r3 = *(r0);
0x00075c26 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00075c28 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x00075c2a mov sb, r0 | sb = r0;
0x00075c2c cmp r0, 0 |
| if (r0 == 0) {
0x00075c2e beq.w 0x75a08 | goto label_5;
| }
0x00075c32 b 0x75ae6 | goto label_4;
| label_29:
0x00075c34 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00075c36 bl 0x2ebd8 | fcn_0002ebd8 (r0);
0x00075c3a b 0x7598e | goto label_7;
| label_32:
0x00075c3c ldr r3, [pc, 0x22c] |
0x00075c3e add r3, pc |
0x00075c40 ldr.w r3, [r3, 0xd0] | r3 = *(0xebb7e);
0x00075c44 cmp r3, 0 |
| if (r3 != 0) {
0x00075c46 bne 0x75cce | goto label_45;
| }
0x00075c48 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 == 0) {
0x00075c4c cbnz r0, 0x75c5c |
0x00075c4e bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x00075c52 cbnz r0, 0x75c5c | goto label_46;
| }
| label_13:
0x00075c54 add r1, sp, 0x60 | r1 += arg_60h;
0x00075c56 movs r0, 4 | r0 = 4;
0x00075c58 bl 0x62714 | fcn_00062714 (r0, r1);
| }
| label_46:
0x00075c5c ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
| if (r3 != 0) {
0x00075c60 cbnz r3, 0x75ca8 | goto label_47;
| }
0x00075c62 ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00075c64 movs r2, 4 | r2 = 4;
0x00075c66 movs r3, 0xa | r3 = 0xa;
0x00075c68 mov r1, r2 | r1 = r2;
0x00075c6a ldr r5, [r0] | r5 = *(r0);
0x00075c6c ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00075c6e blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00075c70 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x00075c72 cbz r0, 0x75ca8 | goto label_47;
| }
0x00075c74 cmp r0, 5 |
| if (r0 != 5) {
0x00075c76 bne.w 0x75ae6 | goto label_4;
| }
0x00075c7a b 0x759c6 | goto label_8;
| label_44:
0x00075c7c ldr r3, [pc, 0x1f0] |
0x00075c7e add r3, pc |
0x00075c80 ldr.w r3, [r3, 0xd0] | r3 = *(0xebbc2);
0x00075c84 cmp r3, 0 |
| if (r3 != 0) {
0x00075c86 bne.w 0x75d8e | goto label_48;
| }
0x00075c8a bl 0x25da0 | r0 = fcn_00025da0 ();
0x00075c8e cmp r0, 0 |
| if (r0 != 0) {
0x00075c90 bne 0x75baa | goto label_9;
| }
0x00075c92 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x00075c96 cmp r0, 0 |
| if (r0 != 0) {
0x00075c98 bne 0x75baa | goto label_9;
| }
| label_16:
0x00075c9a mov r1, r5 | r1 = r5;
0x00075c9c movs r0, 8 | r0 = 8;
0x00075c9e bl 0x62714 | fcn_00062714 (r0, r1);
0x00075ca0 ldc2 p7, c14, [sb, -0x208]! | __asm ("ldc2 p7, c14, [sb, -0x208]!");
| label_28:
0x00075ca4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00075ca6 b 0x7597a | goto label_10;
| label_47:
0x00075ca8 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x00075caa mov r0, r7 | r0 = r7;
0x00075cac bl 0x2f13c | fcn_0002f13c (r0, r1);
0x00075cb0 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x00075cb4 cmp r3, 0 |
| if (r3 != 0) {
0x00075cb6 bne.w 0x759da | goto label_11;
| }
0x00075cba ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00075cbc movs r2, 4 | r2 = 4;
0x00075cbe movs r3, 9 | r3 = 9;
0x00075cc0 mov r1, r2 | r1 = r2;
0x00075cc2 ldr r5, [r0] | r5 = *(r0);
0x00075cc4 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00075cc6 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00075cc8 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x00075ccc b 0x759ca | goto label_12;
| label_45:
0x00075cce dmb ish | __asm ("dmb ish");
0x00075cd2 b 0x75c54 | goto label_13;
| label_40:
0x00075cd4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00075cd6 ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00075cd8 mov r8, r3 | r8 = r3;
| label_18:
0x00075cda ldr r5, [sp, 0x18] | r5 = var_18h;
| do {
0x00075cdc ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00075cde ands r3, r3, 0x40 | r3 &= 0x40;
0x00075ce2 it eq |
| if (r3 != r3) {
0x00075ce4 moveq r2, 1 | r2 = 1;
| }
| if (r3 != r3) {
0x00075ce6 beq 0x75cfc |
0x00075ce8 adds r6, 1 | r6++;
0x00075cea ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00075cec mov r1, r6 | r1 = r6;
0x00075cee mov r0, r7 | r0 = r7;
0x00075cf0 bl 0x5300c | r0 = fcn_0005300c (r0, r1, r2, r3);
0x00075cf4 clz r2, r0 | r2 &= r0;
0x00075cf8 mov r3, r0 | r3 = r0;
0x00075cfa lsrs r2, r2, 5 | r2 >>= 5;
| }
0x00075cfc ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00075cfe cmp r5, 0 |
0x00075d00 ite eq |
| if (r5 != 0) {
0x00075d02 moveq r0, 0 | r0 = 0;
| }
| if (r5 == 0) {
0x00075d04 andne r0, r2, 1 | r0 = r2 & 1;
| }
0x00075d08 cmp r0, 0 |
0x00075d0a bne 0x75cdc |
| } while (r0 != 0);
0x00075d0c mov sb, r3 | sb = r3;
0x00075d0e mov r3, r2 | r3 = r2;
0x00075d10 cmp.w r8, 0 |
0x00075d14 ite le |
| if (r8 > 0) {
0x00075d16 movle r3, 0 | r3 = 0;
| }
| if (r8 <= 0) {
0x00075d18 andgt r3, r3, 1 | r3 &= 1;
| }
0x00075d1c mov r2, r8 | r2 = r8;
| if (r3 == 0) {
0x00075d1e cbz r3, 0x75d48 | goto label_49;
| }
0x00075d20 ldr r4, [sp, 0x14] | r4 = var_14h;
0x00075d22 add r2, r6 | r2 += r6;
0x00075d24 mov r8, r2 | r8 = r2;
| do {
0x00075d26 adds r6, 1 | r6++;
0x00075d28 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00075d2a mov r1, r6 | r1 = r6;
0x00075d2c mov r0, r7 | r0 = r7;
0x00075d2e bl 0x5300c | fcn_0005300c (r0, r1, r2, r3);
0x00075d32 sub.w r2, r8, r6 | r2 = r8 - r6;
0x00075d36 clz r3, r0 | r3 &= r0;
0x00075d3a lsrs r3, r3, 5 | r3 >>= 5;
0x00075d3c cmp r2, 0 |
0x00075d3e it le |
| if (r2 > 0) {
0x00075d40 movle r3, 0 | r3 = 0;
| }
0x00075d42 cmp r3, 0 |
0x00075d44 bne 0x75d26 |
| } while (r3 != 0);
0x00075d46 mov sb, r0 | sb = r0;
| label_49:
0x00075d48 cmp.w sb, 0 |
| if (sb != 0) {
0x00075d4c bne.w 0x75ae6 | goto label_4;
| }
0x00075d50 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00075d52 str r6, [r7, 0x44] | *((r7 + 0x44)) = r6;
0x00075d54 bic r3, r2, 0xff | r3 = BIT_MASK (r2, 0xff);
0x00075d58 orr.w r3, r3, r2, asr 16 | r3 |= (r2 >> 16);
0x00075d5c strh.w r3, [r7, 0x42] | *((r7 + 0x42)) = r3;
0x00075d60 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00075d62 cmp r3, 0 |
| if (r3 != 0) {
0x00075d64 bne.w 0x75f32 | goto label_50;
| }
| label_19:
0x00075d68 ldr.w r0, [fp, 0x60] | r0 = *(arg_60h);
0x00075d6c cmp r0, 0 |
| if (r0 == 0) {
0x00075d6e beq.w 0x75ae6 | goto label_4;
| }
0x00075d72 ldr r4, [sp, 0x18] | r4 = var_18h;
| label_15:
0x00075d74 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00075d76 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00075d78 bl 0x65350 | fcn_00065350 (r0, r1, r2);
| label_14:
0x00075d7c ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x00075d7e cmp r4, 0 |
| if (r4 == 0) {
0x00075d80 beq.w 0x75ae6 | goto label_4;
| }
0x00075d84 ldr.w r0, [fp, 0x60] | r0 = *(arg_60h);
0x00075d88 cmp r0, 0 |
| if (r0 == 0) {
0x00075d8a beq 0x75d7c | goto label_14;
| }
0x00075d8c b 0x75d74 | goto label_15;
| label_48:
0x00075d8e dmb ish | __asm ("dmb ish");
0x00075d92 b 0x75c9a | goto label_16;
| label_41:
0x00075d94 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00075d96 adds r3, 0x18 | r3 += 0x18;
0x00075d98 mov r0, r3 | r0 = r3;
0x00075d9a str r3, [sp, 0x24] | var_24h = r3;
0x00075d9c bl 0x5c718 | fcn_0005c718 (r0);
0x00075da0 str r0, [sp, 0x1c] | var_1ch = r0;
0x00075da2 cmp r0, 0 |
| if (r0 == 0) {
0x00075da4 beq.w 0x75f2c | goto label_36;
| }
0x00075da8 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x00075daa cmp r3, 1 |
0x00075dac it eq |
| if (r3 != 1) {
0x00075dae moveq ip, 0x18 |
| }
| if (r3 != 1) {
0x00075db2 beq 0x75dca |
0x00075db4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00075db6 subs r3, 2 | r3 -= 2;
0x00075db8 asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x00075dba umull r2, r5, r3, r2 | r2:r5 = r3 * r2;
0x00075dbe mla r5, r3, r1, r5 | __asm ("mla r5, r3, r1, r5");
0x00075dc2 adds.w ip, r2, 0x30 |
0x00075dc6 adc r5, r5, 0 | __asm ("adc r5, r5, 0");
| }
0x00075dca ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00075dcc movs r2, 8 | r2 = 8;
0x00075dce ldr.w sb, [sp, 0x1c] | sb = var_1ch;
0x00075dd2 ldr r3, [r0] | r3 = *(r0);
0x00075dd4 mov r1, sb | r1 = sb;
0x00075dd6 strd ip, r5, [sp] | __asm ("strd ip, r5, [sp]");
0x00075dda ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00075ddc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00075dde ldr.w r3, [sb] | r3 = *(sb);
0x00075de2 mov r1, sb | r1 = sb;
0x00075de4 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x00075de6 rev r3, r3 | r3 = SWAP32 (r3);
0x00075de8 str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x00075dea ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00075dee mov sb, r0 | sb = r0;
0x00075df0 rev r3, r3 | r3 = SWAP32 (r3);
0x00075df2 str r3, [r7, 0x50] | *((r7 + 0x50)) = r3;
0x00075df4 movs r3, 0 | r3 = 0;
0x00075df6 cmp sl, r2 |
0x00075df8 it hs |
| if (sl >= r2) {
0x00075dfa cmphs r0, r3 | __asm ("cmphs r0, r3");
| }
0x00075dfc str r3, [r7, 0x68] | *((r7 + 0x68)) = r3;
| if (sl != r2) {
0x00075dfe bne 0x75eb6 | goto label_51;
| }
0x00075e00 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00075e02 mov r3, r1 | r3 = r1;
0x00075e04 mov sb, sl | sb = sl;
0x00075e06 adds r1, 0x18 | r1 += 0x18;
0x00075e08 str.w fp, [sp, 0x38] | __asm ("str.w fp, [var_38h]");
0x00075e0c mov sl, r3 | sl = r3;
0x00075e0e str r6, [sp, 0x3c] | var_3ch = r6;
0x00075e10 mov r6, r0 | r6 = r0;
0x00075e12 asrs r5, r0, 0x1f | r5 = r0 >> 0x1f;
0x00075e14 str.w r8, [sp, 0x44] | __asm ("str.w r8, [var_44h]");
0x00075e18 mov r8, r2 | r8 = r2;
0x00075e1a str r1, [sp, 0x28] | var_28h = r1;
0x00075e1c mov fp, r5 |
0x00075e1e add r1, sp, 0x78 | r1 += var_78h;
0x00075e20 str r1, [sp, 0x24] | var_24h = r1;
0x00075e22 str r4, [sp, 0x30] | var_30h = r4;
| do {
0x00075e24 add.w r3, r8, -1 | r3 = r8 + -1;
0x00075e28 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00075e2a umull r5, r4, r3, r6 | r5:r4 = r3 * r6;
0x00075e2c strb r6, [r0, r0] | *((r0 + r0)) = r6;
0x00075e2e mov r2, r6 | r2 = r6;
0x00075e30 mov r1, sl | r1 = sl;
0x00075e32 ldr.w ip, [r0] | ip = *(r0);
0x00075e36 mla r4, r3, fp, r4 | __asm ("mla r4, r3, fp, r4");
0x00075e3a adds r5, 0x20 | r5 += 0x20;
0x00075e3c str r5, [sp] | *(sp) = r5;
0x00075e3e adc r4, r4, 0 | __asm ("adc r4, r4, 0");
0x00075e42 str r4, [sp, 4] | var_4h = r4;
0x00075e44 ldr.w r3, [ip, 8] | r3 = *((ip + 8));
0x00075e48 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x00075e4a cbz r0, 0x75e74 |
0x00075e4c mov sb, r0 | sb = r0;
0x00075e4e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00075e50 bl 0x26dbc | fcn_00026dbc (r0);
0x00075e54 b 0x75ae6 | goto label_4;
| }
0x00075e74 ldr.w r1, [sl] | r1 = *(sl);
0x00075e78 mov r0, r7 | r0 = r7;
0x00075e7a ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x00075e7e add.w r8, r8, 1 | r8++;
0x00075e82 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00075e84 rev r1, r1 | r1 = SWAP32 (r1);
0x00075e86 rev r2, r2 | r2 = SWAP32 (r2);
0x00075e88 str r3, [sp] | *(sp) = r3;
0x00075e8a ldr r3, [sp, 0x28] | r3 = var_28h;
0x00075e8c bl 0x318f8 | fcn_000318f8 (r0, r1, r2, r3, r4);
0x00075e90 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00075e92 movs r2, 0x18 | r2 = 0x18;
0x00075e94 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00075e96 ldr r3, [r0] | r3 = *(r0);
0x00075e98 strd r5, r4, [sp] | __asm ("strd r5, r4, [sp]");
0x00075e9c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00075e9e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00075ea0 cmp sb, r8 |
0x00075ea2 it hs |
| if (sb >= r8) {
0x00075ea4 cmphs r0, 0 | __asm ("cmphs r0, 0");
| }
0x00075ea6 beq 0x75e24 |
| } while (sb == r8);
0x00075ea8 ldr r4, [sp, 0x30] | r4 = var_30h;
0x00075eaa mov sl, sb | sl = sb;
0x00075eac ldrd fp, r6, [sp, 0x38] | __asm ("ldrd fp, r6, [var_38h]");
0x00075eb0 mov sb, r0 | sb = r0;
0x00075eb2 ldr.w r8, [sp, 0x44] | r8 = var_44h;
| label_51:
0x00075eb6 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00075eb8 bl 0x26dbc | fcn_00026dbc (r0);
0x00075ebc cmp.w sb, 0 |
| if (sb == 0) {
0x00075ec0 beq.w 0x75b58 | goto label_17;
| }
0x00075ec4 b 0x75ae6 | goto label_4;
| label_42:
0x00075ec6 ldrb.w r3, [r7, 0x31] | r3 = *((r7 + 0x31));
0x00075eca cmp r3, 0 |
| if (r3 != 0) {
0x00075ecc bne 0x75f60 | goto label_52;
| }
| label_26:
0x00075ece ldr r0, [sp, 0x34] | r0 = var_34h;
0x00075ed0 mov r1, r5 | r1 = r5;
0x00075ed2 ldr r3, [r0] | r3 = *(r0);
0x00075ed4 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00075ed6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00075ed8 ldrb.w r3, [r7, 0x2f] | r3 = *((r7 + 0x2f));
0x00075edc mov sb, r0 | sb = r0;
| if (r3 == 0) {
0x00075ede cbz r3, 0x75f48 | goto label_53;
| }
0x00075ee0 ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x00075ee4 cmp r3, 0 |
0x00075ee6 itt ge |
| if (r3 < 0) {
0x00075ee8 movge r1, 0 | r1 = 0;
| }
| if (r3 < 0) {
0x00075eea movge r8, r1 | r8 = r1;
| }
| if (r3 < 0) {
0x00075eec blt 0x75f46 | goto label_54;
| }
| label_21:
0x00075eee ldr r1, [sp, 0x40] | r1 = var_40h;
0x00075ef0 add.w r5, r8, sl | r5 = r8 + sl;
0x00075ef4 ldr r4, [sp, 0x10] | r4 = var_10h;
0x00075ef6 umull r1, r0, r5, r1 | r1:r0 = r5 * r1;
0x00075efa mla r0, r5, r4, r0 | __asm ("mla r0, r5, r4, r0");
0x00075efe adds.w r6, r1, 0x1f | r6 = r1 + 0x1f;
0x00075f02 adc r5, r0, 0 | __asm ("adc r5, r0, 0");
0x00075f06 cmp r6, r2 |
0x00075f08 sbcs r5, r3 | __asm ("sbcs r5, r3");
| if (r6 >= r2) {
0x00075f0a blt 0x75f14 |
0x00075f0c adds.w r2, r1, 0x20 | r2 = r1 + 0x20;
0x00075f10 adc r3, r0, 0 | __asm ("adc r3, r0, 0");
| }
0x00075f14 mov r0, r7 | r0 = r7;
0x00075f16 bl 0x51958 | fcn_00051958 (r0, r1, r2, r3, r4, r5, r6);
0x00075f1a movs r3, 0 | r3 = 0;
0x00075f1c strb.w r3, [r7, 0x2f] | *((r7 + 0x2f)) = r3;
| label_20:
0x00075f20 ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00075f22 cmp.w sb, 0 |
| if (sb == 0) {
0x00075f26 beq.w 0x75cda | goto label_18;
| }
0x00075f2a b 0x75ae6 | goto label_4;
| label_36:
0x00075f2c mov.w sb, 7 | sb = 7;
0x00075f30 b 0x75ae6 | goto label_4;
| label_50:
0x00075f32 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00075f34 mov r0, r7 | r0 = r7;
0x00075f36 str r3, [r7, 0x48] | *((r7 + 0x48)) = r3;
0x00075f38 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00075f3a adds r3, 1 | r3++;
0x00075f3c str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x00075f3e bl 0x2b634 | fcn_0002b634 (r0);
0x00075f42 str r6, [r7, 0xc] | *((r7 + 0xc)) = r6;
0x00075f44 b 0x75d68 | goto label_19;
| label_54:
0x00075f46 movs r3, 0 | r3 = 0;
| label_53:
0x00075f48 mov r8, r3 | r8 = r3;
0x00075f4a b 0x75f20 | goto label_20;
| label_43:
0x00075f4c mov r8, r5 | r8 = r5;
| label_23:
0x00075f4e ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x00075f52 cmp r3, 0 |
0x00075f54 it ge |
| if (r3 >= 0) {
0x00075f56 movge sb, 0 | sb = 0;
| goto label_55;
| }
| if (r3 >= 0) {
| label_55:
0x00075f5a bge 0x75eee | goto label_21;
| }
| label_24:
0x00075f5c ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00075f5e b 0x75cda | goto label_18;
| label_52:
0x00075f60 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00075f62 mov.w r2, 0x1000 | r2 = 0x1000;
0x00075f66 ldr r3, [r0] | r3 = *(r0);
0x00075f68 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
| if (r3 != 0) {
0x00075f6a cbz r3, 0x75f80 |
0x00075f6c blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
0x00075f6e cmp r0, 0x1f |
0x00075f70 mov r2, r0 | r2 = r0;
| if (r0 <= 0x1f) {
0x00075f72 ble 0x75ffe | goto label_56;
| }
0x00075f74 cmp.w r0, 0x10000 |
0x00075f78 it ge |
| if (r0 < 0x10000) {
0x00075f7a movge r2, 0x10000 | r2 = 0x10000;
| }
0x00075f7e asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
| }
| label_25:
0x00075f80 adds r1, r6, r2 | r1 = r6 + r2;
0x00075f82 adc.w r0, r8, r3 | __asm ("adc.w r0, r8, r3");
0x00075f86 subs r4, r1, 1 | r4 = r1 - 1;
0x00075f88 adc sb, r0, -1 | __asm ("adc sb, r0, -1");
0x00075f8c mov r0, r4 | r0 = r4;
0x00075f8e mov r1, sb | r1 = sb;
0x00075f90 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00075f94 subs r2, r4, r2 | r2 = r4 - r2;
0x00075f96 sbc.w r4, sb, r3 | __asm ("sbc.w r4, sb, r3");
0x00075f9a cmp r6, r2 |
0x00075f9c sbcs.w r3, r8, r4 | __asm ("sbcs.w r3, r8, r4");
0x00075fa0 strd r2, r4, [sp, 0x68] | __asm ("strd r2, r4, [sp, 0x68]");
| if (r6 >= r2) {
0x00075fa4 bge 0x76006 | goto label_57;
| }
0x00075fa6 movs r3, 0 | r3 = 0;
0x00075fa8 mov sb, r4 | sb = r4;
0x00075faa str r7, [sp, 0x1c] | var_1ch = r7;
0x00075fac mov r4, r8 | r4 = r8;
0x00075fae str.w sl, [sp, 0x24] | __asm ("str.w sl, [var_24h]");
0x00075fb2 add r5, sp, 0x60 | r5 += arg_60h;
0x00075fb4 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x00075fb8 mov sl, r3 | sl = r3;
0x00075fba ldr.w fp, [sp, 0x2c] | fp = var_2ch;
0x00075fbe mov r8, r2 | r8 = r2;
0x00075fc0 ldr r7, [sp, 0x40] | r7 = var_40h;
0x00075fc2 b 0x75fd8 |
| while (r0 == 0) {
0x00075fc4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00075fc6 adds r6, r7, r6 | r6 = r7 + r6;
0x00075fc8 add.w sl, sl, 1 | sl++;
0x00075fcc adc.w r4, r3, r4 | __asm ("adc.w r4, r3, r4");
0x00075fd0 cmp r6, r8 |
0x00075fd2 sbcs.w r2, r4, sb | __asm ("sbcs.w r2, r4, sb");
| if (r6 >= r8) {
0x00075fd6 bge 0x75fec | goto label_58;
| }
0x00075fd8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00075fda mov r2, fp | r2 = fp;
0x00075fdc mov r0, r5 | r0 = r5;
0x00075fde strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x00075fe2 bl 0x31970 | r0 = fcn_00031970 (r0, r1, r2, r3);
0x00075fe6 cmp r0, 0 |
0x00075fe8 beq 0x75fc4 |
| }
0x00075fea b 0x75ae4 | goto label_22;
| label_58:
0x00075fec mov r8, sl | r8 = sl;
0x00075fee ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x00075ff0 ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
| label_27:
0x00075ff4 ldrb.w r3, [r7, 0x2f] | r3 = *((r7 + 0x2f));
0x00075ff8 cmp r3, 0 |
| if (r3 != 0) {
0x00075ffa bne 0x75f4e | goto label_23;
| }
0x00075ffc b 0x75f5c | goto label_24;
| label_56:
0x00075ffe mov.w r2, 0x200 | r2 = 0x200;
0x00076002 movs r3, 0 | r3 = 0;
0x00076004 b 0x75f80 | goto label_25;
| label_57:
0x00076006 cmp r4, r8 |
0x00076008 it eq |
| if (r4 != r8) {
0x0007600a cmpeq r2, r6 | __asm ("cmpeq r2, r6");
| goto label_59;
| }
| if (r4 == r8) {
| label_59:
0x0007600c beq.w 0x75ece | goto label_26;
| }
0x00076010 movs r3, 0 | r3 = 0;
0x00076012 mov r8, r3 | r8 = r3;
0x00076014 b 0x75ff4 | goto label_27;
| label_38:
0x00076016 blx 0x6430 | fcn_00006430 ();
0x0007601a nop |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x761d4 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.000761d4 () | void fcn_000761d4 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| arithmetic x;
| int32_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000761d4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000761d8 sub sp, 0x24 |
0x000761da ldr r6, [pc, 0x338] |
0x000761dc ldr r5, [pc, 0x338] | r5 = *(0x76518);
0x000761de ldrb r3, [r0, 0x11] | r3 = *(arg_0hx11);
0x000761e0 add r6, pc | r6 = 0xec6fa;
0x000761e2 ldr r5, [r6, r5] |
0x000761e4 cmp r3, 2 |
0x000761e6 ldr r5, [r5] | r5 = *(0xec6fa);
0x000761e8 str r5, [sp, 0x1c] | var_1ch = r5;
0x000761ea mov.w r5, 0 | r5 = 0;
| if (r3 < 2) {
0x000761ee bls 0x76214 | goto label_1;
| }
0x000761f0 mov r5, r1 | r5 = r1;
0x000761f2 movs r1, 1 | r1 = 1;
0x000761f4 mov r4, r0 | r4 = r0;
0x000761f6 mov r6, r2 | r6 = r2;
0x000761f8 bl 0x29918 | r0 = fcn_00029918 (r0, r1);
| if (r0 != 0) {
0x000761fc cbnz r0, 0x76236 | goto label_9;
| }
0x000761fe ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
| if (r3 == 0) {
0x00076200 cbz r3, 0x7620c | goto label_0;
| }
0x00076202 movs r2, 1 | r2 = 1;
| do {
0x00076204 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00076206 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x00076208 cmp r3, 0 |
0x0007620a bne 0x76204 |
| } while (r3 != 0);
| label_0:
0x0007620c ldr.w r3, [r4, 0xf8] | r3 = *((r4 + 0xf8));
0x00076210 cmp r3, 0 |
| if (r3 == 0) {
0x00076212 beq 0x7629e | goto label_10;
| }
| label_1:
0x00076214 mov.w fp, 0 |
| do {
| label_3:
0x00076218 ldr r1, [pc, 0x300] |
0x0007621a ldr r2, [pc, 0x2fc] | r2 = *(0x7651a);
0x0007621c add r1, pc | r1 = 0xec73c;
0x0007621e ldr r2, [r1, r2] | r2 = imp.atan;
0x00076220 ldr r1, [r2] | r1 = imp.atan;
0x00076222 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00076224 eors r1, r2 | r1 ^= r2;
0x00076226 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0007622a bne.w 0x7650e | goto label_11;
| }
0x0007622e mov r0, fp | r0 = fp;
0x00076230 add sp, 0x24 |
0x00076232 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x00076236 ldr.w r3, [r4, 0xf8] | r3 = *((r4 + 0xf8));
0x0007623a cmp r3, 0 |
| if (r3 == 0) {
0x0007623c beq 0x762a4 | goto label_12;
| }
0x0007623e ldr.w r3, [r4, 0xf4] | r3 = *((r4 + 0xf4));
0x00076242 movs r5, 0 | r5 = 0;
0x00076244 str r5, [sp, 0x10] | x = r5;
0x00076246 ldr r0, [r3] | r0 = *(r3);
0x00076248 bl 0x2b274 | r0 = fcn_0002b274 (r0);
0x0007624c mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0007624e cbz r0, 0x7628a | goto label_13;
| }
| label_2:
0x00076250 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00076252 movs r3, 1 | r3 = 1;
0x00076254 mov r0, r4 | r0 = r4;
0x00076256 bl 0x75928 | fcn_00075928 (r0, r1, r2, r3, r4, r5, r6);
0x0007625a ldr r2, [sp, 0x10] | r2 = x;
0x0007625c mov fp, r0 |
| if (r2 != 0) {
0x0007625e cbz r2, 0x76266 |
0x00076260 mov r0, r2 | r0 = r2;
0x00076262 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x00076266 cmp.w fp, 0 |
0x0007626a bne 0x76218 |
| } while (fp != 0);
0x0007626c ldr.w r5, [r4, 0xf4] | r5 = *((r4 + 0xf4));
0x00076270 ldr r0, [r5] | r0 = *(r5);
0x00076272 cmp r0, 0 |
| if (r0 == 0) {
0x00076274 beq 0x7620c | goto label_0;
| }
| do {
0x00076276 bl 0x2cfdc | fcn_0002cfdc (r0);
0x0007627a ldr r0, [r5] | r0 = *(r5);
0x0007627c cmp r0, 0 |
0x0007627e bne 0x76276 |
| } while (r0 != 0);
0x00076280 ldr.w r3, [r4, 0xf8] | r3 = *((r4 + 0xf8));
0x00076284 cmp r3, 0 |
| if (r3 != 0) {
0x00076286 bne 0x76214 | goto label_1;
| }
0x00076288 b 0x7629e | goto label_10;
| label_13:
0x0007628a mov r3, r0 | r3 = r0;
0x0007628c movs r1, 1 | r1 = 1;
0x0007628e ldr.w r6, [r4, 0xdc] | r6 = *((r4 + 0xdc));
0x00076292 add r2, sp, 0x10 | r2 += x;
0x00076294 mov r0, r4 | r0 = r4;
0x00076296 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00076298 ldr r1, [sp, 0x10] | r1 = x;
0x0007629a str r5, [r1, 0x10] | *((r1 + 0x10)) = r5;
0x0007629c b 0x76250 | goto label_2;
| label_10:
0x0007629e movs r3, 5 | r3 = 5;
0x000762a0 strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x000762a2 b 0x76214 | goto label_1;
| label_12:
0x000762a4 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x000762a6 cmp r3, 0 |
| if (r3 == 0) {
0x000762a8 beq.w 0x76488 | goto label_14;
| }
| label_4:
0x000762ac cmp r5, 0 |
| if (r5 == 0) {
0x000762ae beq.w 0x76418 | goto label_15;
| }
0x000762b2 ldrb r3, [r4, 5] | r3 = *((r4 + 5));
0x000762b4 cmp r3, 4 |
| if (r3 == 4) {
0x000762b6 beq.w 0x76418 | goto label_15;
| }
0x000762ba ldr.w fp, [r4, 0x44] | fp = *((r4 + 0x44));
0x000762be ldr.w r3, [fp] | r3 = *(fp);
0x000762c2 cmp r3, 0 |
| if (r3 == 0) {
0x000762c4 beq.w 0x76418 | goto label_15;
| }
0x000762c8 movs r3, 1 | r3 = 1;
0x000762ca strb r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000762cc ldrb r3, [r5] | r3 = *(r5);
0x000762ce cmp r3, 0 |
| if (r3 == 0) {
0x000762d0 beq.w 0x764f0 | goto label_16;
| }
0x000762d4 movs r7, 0 | r7 = 0;
0x000762d6 mov r2, r5 | r2 = r5;
0x000762d8 mov r8, r7 | r8 = r7;
| do {
0x000762da add r8, r3 | r8 += r3;
0x000762dc ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x000762e0 adds r7, 1 | r7++;
0x000762e2 cmp r3, 0 |
0x000762e4 bne 0x762da |
| } while (r3 != 0);
0x000762e6 str r7, [sp, 0xc] | var_ch_2 = r7;
| label_7:
0x000762e8 ldrb r3, [r4, 8] | r3 = *((r4 + 8));
0x000762ea ldrd sb, sl, [r4, 0x50] | __asm ("ldrd sb, sl, [r4, 0x50]");
| if (r3 != 0) {
0x000762ee cbz r3, 0x7631e |
0x000762f0 orrs.w r3, sb, sl | r3 = sb | sl;
| if (r3 != sb) {
0x000762f4 beq 0x7631a |
0x000762f6 ldr.w r2, [r4, 0x9c] | r2 = *((r4 + 0x9c));
0x000762fa adds.w r0, sb, -1 | r0 = sb + -1;
0x000762fc adds r0, 0xff | r0 += 0xff;
0x000762fe sbc r1, sl, 0 | __asm ("sbc r1, sl, 0");
0x00076302 movs r3, 0 | r3 = 0;
0x00076304 str r2, [sp, 8] | var_8h = r2;
0x00076306 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x0007630a ldr r2, [sp, 8] | r2 = var_8h;
0x0007630c adds r0, 1 | r0++;
0x0007630e adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00076310 lsls r0, r0, 4 | r0 <<= 4;
0x00076312 umull sb, sl, r0, r2 | sb:sl = r0 * r2;
0x00076316 mla sl, r2, r1, sl | __asm ("mla sl, r2, r1, sl");
| }
0x0007631a strd sb, sl, [r4, 0x50] | __asm ("strd sb, sl, [r4, 0x50]");
| }
0x0007631e ldr.w r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x00076322 add r2, sp, 0x18 | r2 += var_18h;
0x00076324 mov r1, r2 | r1 = r2;
0x00076326 mov r0, fp | r0 = fp;
0x00076328 movs r2, 4 | r2 = 4;
0x0007632a str r1, [sp, 8] | var_8h = r1;
0x0007632c rev r3, r3 | r3 = SWAP32 (r3);
0x0007632e str r3, [sp, 0x18] | var_18h = r3;
0x00076330 ldr.w r3, [fp] | r3 = *(fp);
0x00076334 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x00076338 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0007633a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007633c mov fp, r0 |
0x0007633e cmp r0, 0 |
| if (r0 != 0) {
0x00076340 bne.w 0x76218 | goto label_3;
| }
0x00076344 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x00076346 adds.w sb, sb, 4 | sb += 4;
0x0007634a adc sl, sl, 0 | __asm ("adc sl, sl, 0");
0x0007634e mov r2, r7 | r2 = r7;
0x00076350 mov r1, r5 | r1 = r5;
0x00076352 ldr r3, [r0] | r3 = *(r0);
0x00076354 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x00076358 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0007635a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007635c mov fp, r0 |
0x0007635e cmp r0, 0 |
| if (r0 != 0) {
0x00076360 bne.w 0x76218 | goto label_3;
| }
0x00076364 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00076366 adds.w sb, r7, sb | sb = r7 + sb;
0x0007636a ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x0007636c adc.w sl, sl, r7, asr 31 | __asm ("adc.w sl, sl, r7, asr 31");
0x00076370 ldr r1, [sp, 8] | r1 = var_8h;
0x00076372 movs r2, 4 | r2 = 4;
0x00076374 rev r3, r3 | r3 = SWAP32 (r3);
0x00076376 str r3, [sp, 0x18] | var_18h = r3;
0x00076378 ldr r3, [r0] | r3 = *(r0);
0x0007637a strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x0007637e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00076380 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00076382 mov fp, r0 |
0x00076384 cmp r0, 0 |
| if (r0 != 0) {
0x00076386 bne.w 0x76218 | goto label_3;
| }
0x0007638a ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x0007638c rev.w r3, r8 | r8 = SWAP32 (r3);
0x00076390 str r3, [sp, 0x18] | var_18h = r3;
0x00076392 adds.w lr, sb, 4 | lr = sb + 4;
0x00076396 adc ip, sl, 0 | __asm ("adc ip, sl, 0");
0x0007639a ldr r1, [sp, 8] | r1 = var_8h;
0x0007639c ldr r3, [r0] | r3 = *(r0);
0x0007639e movs r2, 4 | r2 = 4;
0x000763a0 strd lr, ip, [sp] | __asm ("strd lr, ip, [sp]");
0x000763a2 invalid |
0x000763a6 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000763a8 mov fp, r0 |
0x000763aa cmp r0, 0 |
| if (r0 != 0) {
0x000763ac bne.w 0x76218 | goto label_3;
| }
0x000763b0 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x000763b2 adds.w sb, sb, 8 | sb += 8;
0x000763b6 ldr r1, [pc, 0x168] |
0x000763b8 adc sl, sl, 0 | __asm ("adc sl, sl, 0");
0x000763bc movs r2, 8 | r2 = 8;
0x000763be ldr r3, [r0] | r3 = *(r0);
0x000763c0 add r1, pc | r1 = 0xec8e6;
0x000763c2 strd sb, sl, [sp] | __asm ("strd sb, sl, [sp]");
0x000763c6 addw r1, r1, 0x4bc | __asm ("addw r1, r1, 0x4bc");
0x000763ca ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000763cc blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000763ce mov fp, r0 |
0x000763d0 cmp r0, 0 |
| if (r0 != 0) {
0x000763d2 bne.w 0x76218 | goto label_3;
| }
0x000763d6 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x000763d8 adds r7, 0x14 | r7 += 0x14;
0x000763da ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x000763dc add r1, sp, 0x10 | r1 += x;
0x000763de adds r3, r3, r7 | r3 += r7;
0x000763e0 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x000763e2 ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x000763e4 adc.w r3, r3, r7, asr 31 | __asm ("adc.w r3, r3, r7, asr 31");
0x000763e8 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
0x000763ea ldr r3, [r0] | r3 = *(r0);
0x000763ec ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000763ee blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000763f0 mov fp, r0 |
0x000763f2 cmp r0, 0 |
| if (r0 != 0) {
0x000763f4 bne.w 0x76218 | goto label_3;
| }
0x000763f8 ldrd r2, r3, [r4, 0x50] | __asm ("ldrd r2, r3, [r4, 0x50]");
0x000763fc ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [x]");
0x00076400 cmp r2, r0 |
0x00076402 sbcs.w r1, r3, r1 | __asm ("sbcs.w r1, r3, r1");
| if (r2 >= r0) {
0x00076406 bge 0x76418 | goto label_15;
| }
0x00076408 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x0007640a ldr r1, [r0] | r1 = *(r0);
0x0007640c ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0007640e blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t) (r0, r1);
0x00076410 mov fp, r0 |
0x00076412 cmp r0, 0 |
| if (r0 != 0) {
0x00076414 bne.w 0x76218 | goto label_3;
| }
0x00076416 add r7, sp, 0 | r7 = sp + 0;
| label_15:
0x00076418 ldr.w fp, [r4, 0x2c] | fp = *((r4 + 0x2c));
0x0007641c cmp.w fp, 0 |
| if (fp != 0) {
0x00076420 bne.w 0x76218 | goto label_3;
| }
0x00076424 ldr.w r3, [r4, 0xf8] | r3 = *((r4 + 0xf8));
0x00076428 cmp r3, 0 |
| if (r3 == 0) {
0x0007642a beq 0x764f8 | goto label_17;
| }
| label_8:
0x0007642c movs r1, 0 | r1 = 0;
0x0007642e mov r0, r4 | r0 = r4;
0x00076430 bl 0x64bd0 | r0 = fcn_00064bd0 (r0, r1);
0x00076434 mov fp, r0 |
0x00076436 cmp r0, 0 |
| if (r0 != 0) {
0x00076438 bne.w 0x76218 | goto label_3;
| }
0x0007643c ldr.w r3, [r4, 0xf4] | r3 = *((r4 + 0xf4));
0x00076440 ldr r0, [r3] | r0 = *(r3);
0x00076442 bl 0x2b274 | r0 = fcn_0002b274 (r0);
0x00076446 mov r1, r0 | r1 = r0;
0x00076448 mov r0, r4 | r0 = r4;
0x0007644a bl 0x66924 | r0 = fcn_00066924 (r0, r1);
0x0007644e mov fp, r0 |
0x00076450 cmp r0, 0 |
| if (r0 != 0) {
0x00076452 bne.w 0x76218 | goto label_3;
| }
0x00076456 ldr.w r7, [r4, 0xf4] | r7 = *((r4 + 0xf4));
0x0007645a ldr r0, [r7] | r0 = *(r7);
| if (r0 == 0) {
0x0007645c cbz r0, 0x76468 | goto label_18;
| }
| do {
0x0007645e bl 0x2cfdc | fcn_0002cfdc (r0);
0x00076462 ldr r0, [r7] | r0 = *(r7);
0x00076464 cmp r0, 0 |
0x00076466 bne 0x7645e |
| } while (r0 != 0);
| label_18:
0x00076468 ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x0007646a ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0007646c cmp r1, r3 |
| if (r1 > r3) {
0x0007646e bhi 0x764d8 | goto label_19;
| }
| label_6:
0x00076470 cmp r6, 0 |
| if (r6 != 0) {
0x00076472 bne.w 0x7620c | goto label_0;
| }
0x00076476 mov r1, r5 | r1 = r5;
0x00076478 mov r0, r4 | r0 = r4;
0x0007647a bl 0x2c858 | r0 = fcn_0002c858 (r0, r1);
0x0007647e mov fp, r0 |
0x00076480 cmp r0, 0 |
| if (r0 != 0) {
0x00076482 bne.w 0x76218 | goto label_3;
| }
0x00076486 b 0x7620c | goto label_0;
| label_14:
0x00076488 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0007648a cmp r2, 0 |
| if (r2 == 0) {
0x0007648c beq.w 0x762ac | goto label_4;
| }
0x00076490 ldr.w r7, [r4, 0xdc] | r7 = *((r4 + 0xdc));
0x00076494 add r2, sp, 0x10 | r2 += x;
0x00076496 movs r1, 1 | r1 = 1;
0x00076498 mov r0, r4 | r0 = r4;
0x0007649a blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0007649c mov fp, r0 |
0x0007649e ldr r0, [sp, 0x10] | r0 = x;
0x000764a0 cmp.w fp, 0 |
| if (fp == 0) {
0x000764a4 beq 0x764b2 | goto label_20;
| }
| label_5:
0x000764a6 cmp r0, 0 |
| if (r0 == 0) {
0x000764a8 beq.w 0x76218 | goto label_3;
| }
0x000764ac bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x000764b0 b 0x76218 | goto label_3;
| label_20:
0x000764b2 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x000764b6 mov fp, r0 |
0x000764b8 ldr r0, [sp, 0x10] | r0 = x;
0x000764ba cmp.w fp, 0 |
0x000764bc lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000764be bne 0x764a6 | goto label_5;
| }
| if (r0 == 0) {
0x000764c0 cbz r0, 0x76508 | goto label_21;
| }
0x000764c2 bl 0x2ebd8 | fcn_0002ebd8 (r0);
0x000764c6 ldr r0, [sp, 0x10] | r0 = x;
0x000764c8 movs r3, 1 | r3 = 1;
0x000764ca strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x000764cc cmp r0, 0 |
| if (r0 == 0) {
0x000764ce beq.w 0x762ac | goto label_4;
| }
0x000764d2 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x000764d6 b 0x762ac | goto label_4;
| label_19:
0x000764d8 ldr.w r3, [r4, 0xa4] | r3 = *((r4 + 0xa4));
0x000764dc mov r0, r4 | r0 = r4;
0x000764de cmp r3, r1 |
0x000764e0 it eq |
| if (r3 != r1) {
0x000764e2 subeq r1, 1 | r1--;
| }
0x000764e4 bl 0x24f84 | r0 = fcn_00024f84 (r0, r1);
0x000764e8 mov fp, r0 |
0x000764ea cmp r0, 0 |
| if (r0 == 0) {
0x000764ec beq 0x76470 | goto label_6;
| }
0x000764ee b 0x76218 | goto label_3;
| label_16:
0x000764f0 mov r8, r3 | r8 = r3;
0x000764f2 mov r7, r3 | r7 = r3;
0x000764f4 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000764f6 b 0x762e8 | goto label_7;
| label_17:
0x000764f8 movs r1, 4 | r1 = 4;
0x000764fa mov r0, r4 | r0 = r4;
0x000764fc bl 0x2c66c | r0 = fcn_0002c66c (r0, r1);
0x00076500 mov fp, r0 |
0x00076502 cmp r0, 0 |
| if (r0 == 0) {
0x00076504 beq 0x7642c | goto label_8;
| }
0x00076506 b 0x76218 | goto label_3;
| label_21:
0x00076508 movs r3, 1 | r3 = 1;
0x0007650a strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0007650c b 0x762ac | goto label_4;
| label_11:
0x0007650e blx 0x6430 | fcn_00006430 ();
0x00076512 nop |
0x00076514 subs r3, 0xb8 | r3 -= 0xb8;
0x00076516 movs r7, r0 | r7 = r0;
0x00076518 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007651a movs r0, r0 |
0x0007651c subs r3, 0x7c | r3 -= 0x7c;
0x0007651e movs r7, r0 | r7 = r0;
0x00076520 ldr r4, [r1, 0x34] | r4 = *((r1 + 0x34));
0x00076522 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x76d50 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00076d50 () | void fcn_00076d50 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ah;
| int16_t var_1ch;
| int16_t var_1eh;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00076d50 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00076d54 mov fp, r2 |
0x00076d56 ldr.w r2, [pc, 0x558] |
0x00076d5a sub sp, 0x34 |
0x00076d5c mov r6, r0 | r6 = r0;
0x00076d5e mov r7, r1 | r7 = r1;
0x00076d60 ldr.w r3, [pc, 0x550] | r3 = *(0x772b4);
0x00076d64 add r2, pc | r2 = 0xee01a;
0x00076d66 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x00076d68 ldr r3, [r2, r3] |
0x00076d6a ldr.w sb, [r4] | sb = *(r4);
0x00076d6e ldr r3, [r3] | r3 = imp.atan;
0x00076d70 str r3, [sp, 0x2c] | var_2ch = r3;
0x00076d72 mov.w r3, 0 | r3 = 0;
0x00076d76 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x00076d78 cbz r3, 0x76d86 |
0x00076d7a ldr r3, [r0, 0xc] | r3 = *(arg_0hxc);
0x00076d7c adds r3, 1 | r3++;
0x00076d7e str r3, [r0, 0xc] | *(arg_0hxc) = r3;
0x00076d80 ldrb r3, [r0, 0xa] | r3 = *(arg_0hxa);
0x00076d82 cmp r3, 0 |
| if (r3 == 0) {
0x00076d84 beq 0x76e74 | goto label_29;
| }
| }
0x00076d86 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x00076d88 cmp r3, 2 |
| if (r3 == 2) {
0x00076d8a beq 0x76e7e | goto label_30;
| }
| label_1:
0x00076d8c cmp r3, 1 |
0x00076d8e it eq |
| if (r3 == 1) {
0x00076d90 cmpeq r7, 0 | __asm ("cmpeq r7, 0");
| }
| if (r3 == 1) {
0x00076d92 beq.w 0x77102 | goto label_31;
| }
0x00076d96 ldr r3, [r6] | r3 = *(r6);
0x00076d98 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x00076d9a ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00076d9c lsls r2, r2, 6 | r2 <<= 6;
| if (r2 >= r2) {
0x00076d9e bpl 0x76dd4 | goto label_32;
| }
0x00076da0 ldrb.w r2, [sb, 0xe] | r2 = *((sb + 0xe));
| if (r2 != 0) {
0x00076da4 cbnz r2, 0x76dd4 | goto label_32;
| }
0x00076da6 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x00076daa lsls r3, r3, 0x10 | r3 <<= 0x10;
0x00076dac lsrs r3, r3, 0x10 | r3 >>= 0x10;
0x00076dae strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r7 == 0) {
| label_0:
0x00076db0 cbz r7, 0x76dde | goto label_33;
| }
0x00076db2 ldrb r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00076db4 cmp r2, 2 |
| if (r2 == 2) {
0x00076db6 beq 0x76de2 | goto label_34;
| }
0x00076db8 lsls r0, r3, 0x18 | r0 = r3 << 0x18;
| if (r0 < r3) {
0x00076dba bmi 0x76de2 | goto label_34;
| }
0x00076dbc cmp r7, 1 |
| if (r7 <= 1) {
0x00076dbe ble 0x76dec | goto label_35;
| }
0x00076dc0 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
| if (r3 != 0) {
0x00076dc2 cbnz r3, 0x76dca | goto label_36;
| }
0x00076dc4 b 0x76dec | goto label_35;
| do {
0x00076dc6 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| if (r3 == 0) {
0x00076dc8 cbz r3, 0x76dec | goto label_35;
| }
| label_36:
0x00076dca ldr r2, [r3] | r2 = *(r3);
0x00076dcc cmp r2, r6 |
0x00076dce beq 0x76dc6 |
| } while (r2 == r6);
0x00076dd0 ldr r3, [r2] | r3 = *(r2);
0x00076dd2 b 0x76de6 | goto label_37;
| label_32:
0x00076dd4 and r2, r3, 1 | r2 = r3 & 1;
0x00076dd8 cmp r2, 0 |
| if (r2 == 0) {
0x00076dda beq 0x76db0 | goto label_0;
| }
| if (r7 == 0) {
0x00076ddc cbnz r7, 0x76e40 |
| label_33:
0x00076dde lsls r5, r3, 0x18 | r5 = r3 << 0x18;
| if (r5 < r3) {
0x00076de0 bpl 0x76dec |
| label_34:
0x00076de2 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00076de4 ldr r3, [r3] | r3 = *(r3);
| label_37:
0x00076de6 mov.w r5, 0x106 | r5 = 0x106;
| if (r3 != 0) {
0x00076dea cbnz r3, 0x76e42 | goto label_2;
| }
| }
| label_35:
0x00076dec movs r2, 1 | r2 = 1;
0x00076dee mov r0, r6 | r0 = r6;
0x00076df0 mov r1, r2 | r1 = r2;
0x00076df2 bl 0x22974 | r0 = fcn_00022974 (r0, r1, r2);
0x00076df6 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00076df8 cbnz r0, 0x76e42 | goto label_2;
| }
0x00076dfa ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00076dfc ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x00076dfe bic r3, r3, 0x10 | r3 = BIT_MASK (r3, 0x10);
0x00076e02 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x00076e04 lsrs r3, r3, 0x10 | r3 >>= 0x10;
0x00076e06 strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r2 == 0) {
0x00076e08 cbnz r2, 0x76e10 |
0x00076e0a orr r3, r3, 0x10 | r3 |= 0x10;
0x00076e0e strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| }
0x00076e10 ldr.w r8, [r4, 0xc] | r8 = *((r4 + 0xc));
0x00076e14 mov sl, r7 | sl = r7;
0x00076e16 mov r7, r8 | r7 = r8;
| label_22:
0x00076e18 cmp r7, 0 |
| if (r7 == 0) {
0x00076e1a beq.w 0x76f4e | goto label_38;
| }
| label_3:
0x00076e1e clz r3, r5 | r3 &= r5;
0x00076e22 cmp.w sl, 0 |
0x00076e26 lsr.w r3, r3, 5 | r3 >>= 5;
0x00076e2a it eq |
| if (sl != 0) {
0x00076e2c moveq r3, 0 | r3 = 0;
| }
0x00076e2e cmp r3, 0 |
| if (r3 == 0) {
0x00076e30 beq 0x76ede | goto label_39;
| }
0x00076e32 ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00076e34 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00076e36 bpl 0x76eae | goto label_40;
| }
0x00076e38 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00076e3a cmp r3, 0 |
| if (r3 == 0) {
0x00076e3c beq.w 0x7700c | goto label_41;
| }
| }
| label_18:
0x00076e40 movs r5, 8 | r5 = 8;
| label_2:
0x00076e42 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 != 0) {
0x00076e44 cbz r3, 0x76e52 |
0x00076e46 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00076e48 subs r3, 1 | r3--;
0x00076e4a str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00076e4c cmp r3, 0 |
| if (r3 == 0) {
0x00076e4e beq.w 0x770ce | goto label_42;
| }
| }
| label_9:
0x00076e52 ldr.w r2, [pc, 0x464] |
0x00076e56 ldr.w r3, [pc, 0x45c] | r3 = *(0x772b6);
0x00076e5a add r2, pc | r2 = 0xee118;
0x00076e5c ldr r3, [r2, r3] | r3 = imp.atan;
0x00076e5e ldr r2, [r3] | r2 = imp.atan;
0x00076e60 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00076e62 eors r2, r3 | r2 ^= r3;
0x00076e64 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00076e68 bne.w 0x7744a | goto label_43;
| }
0x00076e6c mov r0, r5 | r0 = r5;
0x00076e6e add sp, 0x34 |
0x00076e70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x00076e74 bl 0x2adac | fcn_0002adac (r0);
0x00076e78 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x00076e7a cmp r3, 2 |
| if (r3 != 2) {
0x00076e7c bne 0x76d8c | goto label_1;
| }
| label_30:
0x00076e7e cmp.w fp, 0 |
| if (fp != 0) {
0x00076e82 beq 0x76e90 |
0x00076e84 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00076e86 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x00076e88 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00076e8a rev r3, r3 | r3 = SWAP32 (r3);
0x00076e8c str.w r3, [fp] | __asm ("str.w r3, [fp]");
| }
| if (r7 != 0) {
0x00076e90 cbz r7, 0x76eaa |
| label_11:
0x00076e92 ldr r2, [r6] | r2 = *(r6);
0x00076e94 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x00076e98 ldr.w r1, [r2, 0x1f4] | r1 = *((r2 + 0x1f4));
0x00076e9c cmp r1, r3 |
| if (r1 <= r3) {
0x00076e9e ble 0x76eaa | goto label_10;
| }
0x00076ea0 ldrb.w r3, [sb, 6] | r3 = *((sb + 6));
0x00076ea4 cmp r3, 0 |
| if (r3 != 0) {
0x00076ea6 bne.w 0x77266 | goto label_44;
| }
| }
| label_10:
0x00076eaa movs r5, 0 | r5 = 0;
0x00076eac b 0x76e42 | goto label_2;
| label_40:
0x00076eae ldr.w r5, [sb, 0x2c] | r5 = *((sb + 0x2c));
0x00076eb2 ldr r3, [r6] | r3 = *(r6);
0x00076eb4 ldrb.w r3, [r3, 0x56] | r3 = *((r3 + 0x56));
0x00076eb8 cmp r5, 0 |
| if (r5 != 0) {
0x00076eba bne.w 0x77092 | goto label_17;
| }
0x00076ebe ldrb.w r7, [sb, 0x11] | r7 = *((sb + 0x11));
0x00076ec2 sub.w r3, r3, 2 | r3 -= 2;
0x00076ec6 clz r3, r3 | r3 &= r3;
0x00076eca lsrs r3, r3, 5 | r3 >>= 5;
0x00076ecc cmp r7, 1 |
0x00076ece strb.w r3, [sb, 0x16] | *((sb + 0x16)) = r3;
| if (r7 == 1) {
0x00076ed2 beq.w 0x7701c | goto label_45;
| }
| label_12:
0x00076ed6 mov r0, r4 | r0 = r4;
0x00076ed8 bl 0x66ac8 | r0 = fcn_00066ac8 (r0);
0x00076edc mov r5, r0 | r5 = r0;
| label_39:
0x00076ede cmp r5, 0 |
| if (r5 == 0) {
0x00076ee0 beq.w 0x770d6 | goto label_46;
| }
| label_4:
0x00076ee4 uxtb.w r8, r5 | r8 = (int8_t) r5;
| label_13:
0x00076ee8 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 == 0) {
0x00076eea cbnz r3, 0x76f0c |
0x00076eec ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00076eee cmp r7, 0 |
| if (r7 == 0) {
0x00076ef0 beq.w 0x77012 | goto label_47;
| }
| label_5:
0x00076ef4 ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x00076ef6 movs r3, 0 | r3 = 0;
0x00076ef8 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00076efa ldr r7, [r0, 0x14] | r7 = *((r0 + 0x14));
0x00076efc bl 0x2a55c | fcn_0002a55c (r0);
0x00076f00 ldr.w r3, [r7, 0xf4] | r3 = *((r7 + 0xf4));
0x00076f04 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00076f06 cmp r3, 0 |
| if (r3 == 0) {
0x00076f08 beq.w 0x770c6 | goto label_48;
| }
| }
| label_8:
0x00076f0c cmp.w r8, 5 |
| if (r8 != 5) {
0x00076f10 bne 0x76e42 | goto label_2;
| }
| label_7:
0x00076f12 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00076f14 cmp r3, 0 |
| if (r3 != 0) {
0x00076f16 bne 0x76e42 | goto label_2;
| }
| label_6:
0x00076f18 ldr r7, [r4, 4] | r7 = *((r4 + 4));
0x00076f1a ldr.w r3, [r7, 0x1bc] | r3 = *((r7 + 0x1bc));
0x00076f1e cmp r3, 0 |
| if (r3 == 0) {
0x00076f20 beq 0x76e42 | goto label_2;
| }
0x00076f22 ldr.w r1, [r7, 0x1c4] | r1 = *((r7 + 0x1c4));
0x00076f26 cmp r1, 0 |
| if (r1 < 0) {
0x00076f28 blt 0x76e42 | goto label_2;
| }
0x00076f2a ldr.w r0, [r7, 0x1c0] | r0 = *((r7 + 0x1c0));
0x00076f2e blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
| if (r0 == 0) {
0x00076f30 cbnz r0, 0x76f3c |
0x00076f32 mov.w r3, -1 | r3 = -1;
0x00076f36 str.w r3, [r7, 0x1c4] | __asm ("str.w r3, [r7, 0x1c4]");
0x00076f3a b 0x76e42 | goto label_2;
| }
0x00076f3c ldr.w r3, [r7, 0x1c4] | r3 = *((r7 + 0x1c4));
0x00076f40 adds r3, 1 | r3++;
0x00076f42 str.w r3, [r7, 0x1c4] | __asm ("str.w r3, [r7, 0x1c4]");
0x00076f46 ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00076f48 cmp r7, 0 |
| if (r7 != 0) {
0x00076f4a bne.w 0x76e1e | goto label_3;
| }
| label_38:
0x00076f4e ldr r0, [r4] | r0 = *(r4);
0x00076f50 bl 0x76828 | r0 = fcn_00076828 (r0);
0x00076f54 mov r5, r0 | r5 = r0;
0x00076f56 cmp r0, 0 |
| if (r0 != 0) {
0x00076f58 bne 0x76ee4 | goto label_4;
| }
0x00076f5a mov r3, r0 | r3 = r0;
0x00076f5c add r2, sp, 0x24 | r2 += var_24h;
0x00076f5e movs r1, 1 | r1 = 1;
0x00076f60 mov r0, r4 | r0 = r4;
0x00076f62 bl 0x22b3c | r0 = fcn_00022b3c (r0, r1, r2);
0x00076f66 mov r5, r0 | r5 = r0;
0x00076f68 cmp r0, 0 |
| if (r0 != 0) {
0x00076f6a bne 0x76ee4 | goto label_4;
| }
0x00076f6c ldr r7, [sp, 0x24] | r7 = var_24h;
0x00076f6e ldr r3, [r4] | r3 = *(r4);
0x00076f70 ldr.w r8, [r7, 0x38] | r8 = *((r7 + 0x38));
0x00076f74 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00076f76 str r2, [sp, 0x10] | var_10h = r2;
0x00076f78 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
| if (r2 != 0) {
0x00076f7c cbz r2, 0x76f8c |
0x00076f7e ldrb.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00076f82 ldrb.w r1, [r8, 0x5c] | r1 = *((r8 + 0x5c));
0x00076f86 cmp r0, r1 |
| if (r0 == r1) {
0x00076f88 beq.w 0x77234 | goto label_49;
| }
| }
| label_14:
0x00076f8c ldr r2, [sp, 0x10] | r2 = var_10h;
0x00076f8e str r2, [sp, 0xc] | var_ch = r2;
| label_15:
0x00076f90 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00076f92 ldrd r2, r1, [r1, 0x20] | __asm ("ldrd r2, r1, [r1, 0x20]");
0x00076f94 movs r1, 8 | r1 = 8;
0x00076f96 lsrs r2, r2, 0x19 | r2 >>= 0x19;
0x00076f98 orr.w r2, r2, r1, lsl 7 | r2 |= (r1 << 7);
0x00076f9c ldr r1, [sp, 0xc] | r1 = var_ch;
0x00076f9e eor r2, r2, 1 | r2 ^= 1;
0x00076fa2 cmp r1, 0 |
0x00076fa4 ite eq |
| if (r1 != 0) {
0x00076fa6 moveq r2, 0 | r2 = 0;
| }
| if (r1 == 0) {
0x00076fa8 andne r2, r2, 1 | r2 &= 1;
| }
0x00076fac cmp r2, 0 |
| if (r2 != 0) {
0x00076fae bne.w 0x771dc | goto label_50;
| }
0x00076fb2 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00076fb4 str r2, [sp, 0xc] | var_ch = r2;
| label_24:
0x00076fb6 strh.w r3, [sp, 0x1c] | var_1ch = r3;
0x00076fba subs r3, 0xc | r3 -= 0xc;
0x00076fbc lsls r2, r3, 6 | r2 = r3 << 6;
0x00076fbe movw r1, 0x8081 |
0x00076fc2 movt r1, 0x8080 | r1 = 0x80808081;
0x00076fc6 lsls r3, r3, 5 | r3 <<= 5;
0x00076fc8 umull r0, r2, r1, r2 | r0:r2 = r1 * r2;
0x00076fcc vldr d16, [pc, 0x2d8] | __asm ("vldr d16, [0x000772ac]");
0x00076fd0 umull r1, r3, r1, r3 | r1:r3 = r1 * r3;
0x00076fd4 lsrs r2, r2, 7 | r2 >>= 7;
0x00076fd6 strh.w r2, [sp, 0x18] | var_18h = r2;
0x00076fda ubfx r3, r3, 7, 0x10 | r3 = (r3 >> 7) & ((1 << 0x10) - 1);
0x00076fde strh.w r3, [sp, 0x1a] | var_1ah = r3;
0x00076fe2 strh.w r3, [sp, 0x1e] | var_1eh = r3;
0x00076fe6 add.w r3, r4, 0x1a | r3 = r4 + 0x1a;
0x00076fea vldr d7, [sp, 0x18] | __asm ("vldr d7, [sp, 0x18]");
0x00076fee vadd.i16 d7, d7, d16 | __asm ("vadd.i16 d7, d7, d16");
0x00076ff2 vst1.16 {d7}, [r3] | __asm ("vst1.16 {d7}, [r3]");
0x00076ff6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00076ff8 str r7, [r4, 0xc] | *((r4 + 0xc)) = r7;
0x00076ffa str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00076ffc vmov r3, s14 | __asm ("vmov r3, s14");
0x00077000 uxth r3, r3 | r3 = (int16_t) r3;
0x00077002 cmp r3, 0x7f |
0x00077004 it hs |
| if (r3 < 0x7f) {
0x00077006 movhs r3, 0x7f | r3 = 0x7f;
| }
0x00077008 strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x0007700a b 0x76e1e | goto label_3;
| label_41:
0x0007700c movs r5, 8 | r5 = 8;
0x0007700e mov r8, r5 | r8 = r5;
0x00077010 b 0x76ef4 | goto label_5;
| label_47:
0x00077012 cmp.w r8, 5 |
| if (r8 == 5) {
0x00077016 beq.w 0x76f18 | goto label_6;
| }
0x0007701a b 0x76e42 | goto label_2;
| label_45:
0x0007701c ldr.w r8, [sb, 0xf8] | r8 = *((sb + 0xf8));
0x00077020 cmp.w r8, 0 |
| if (r8 == 0) {
0x00077024 beq.w 0x77270 | goto label_51;
| }
0x00077028 ldrb.w r3, [sb, 4] | r3 = *((sb + 4));
| if (r3 != 0) {
0x0007702c cbz r3, 0x7706c |
0x0007702e ldrb.w r3, [r8, 0x2b] | r3 = *((r8 + 0x2b));
0x00077032 cmp r3, 0 |
| if (r3 != 0) {
0x00077034 bne.w 0x77166 | goto label_52;
| }
0x00077038 movs r1, 4 | r1 = 4;
0x0007703a mov r0, sb | r0 = sb;
0x0007703c bl 0x2273c | r0 = fcn_0002273c (r0, r1);
0x00077040 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00077042 cbnz r0, 0x77092 | goto label_17;
| }
0x00077044 ldr.w r5, [sb, 0xf8] | r5 = *((sb + 0xf8));
0x00077048 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x0007704c mov r8, r5 | r8 = r5;
| if (r3 == 0) {
0x0007704e cbnz r3, 0x77066 |
0x00077050 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00077052 mov r2, r7 | r2 = r7;
0x00077054 ldrsh.w r1, [r5, 0x28] | r1 = *((r5 + 0x28));
0x00077058 ldr r3, [r0] | r3 = *(r0);
0x0007705a adds r1, 3 | r1 += 3;
0x0007705c ldr r7, [r3, 0x38] | r7 = *((r3 + 0x38));
0x0007705e movs r3, 5 | r3 = 5;
0x00077060 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00077062 ldr.w r8, [sb, 0xf8] | r8 = *((sb + 0xf8));
| }
0x00077066 movs r3, 1 | r3 = 1;
0x00077068 strb.w r3, [r5, 0x2b] | *((r5 + 0x2b)) = r3;
| }
0x0007706c ldrb.w r3, [r8, 0x2e] | r3 = *((r8 + 0x2e));
0x00077070 cmp r3, 0 |
| if (r3 != 0) {
0x00077072 bne.w 0x772c0 | goto label_53;
| }
0x00077076 ldrb.w r1, [r8, 0x2b] | r1 = *((r8 + 0x2b));
0x0007707a cmp r1, 0 |
| if (r1 != 0) {
0x0007707c bne 0x77170 | goto label_54;
| }
0x0007707e ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x00077082 movs r3, 0xa | r3 = 0xa;
0x00077084 movs r2, 1 | r2 = 1;
0x00077086 ldr r5, [r0] | r5 = *(r0);
0x00077088 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x0007708a blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0007708c mov r5, r0 | r5 = r0;
0x0007708e cmp r0, 0 |
| if (r0 == 0) {
0x00077090 beq 0x77170 | goto label_54;
| }
| label_17:
0x00077092 movw r3, 0x205 | r3 = 0x205;
0x00077096 cmp r5, r3 |
| if (r5 != r3) {
0x00077098 bne.w 0x76ee4 | goto label_4;
| }
| label_19:
0x0007709c ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0007709e cmp r3, 0 |
| if (r3 != 0) {
0x000770a0 bne 0x77160 | goto label_55;
| }
0x000770a2 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x000770a4 movs r5, 5 | r5 = 5;
0x000770a6 cmp r2, 0 |
| if (r2 == 0) {
0x000770a8 beq.w 0x76f18 | goto label_6;
| }
0x000770ac ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x000770ae str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x000770b0 ldr r5, [r0, 0x14] | r5 = *((r0 + 0x14));
0x000770b2 bl 0x2a55c | fcn_0002a55c (r0);
0x000770b6 ldr.w r3, [r5, 0xf4] | r3 = *((r5 + 0xf4));
0x000770ba ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000770bc cmp r3, 0 |
| if (r3 == 0) {
0x000770be beq.w 0x773c6 | goto label_56;
| }
| label_25:
0x000770c2 movs r5, 5 | r5 = 5;
0x000770c4 b 0x76f12 | goto label_7;
| label_48:
0x000770c6 mov r0, r7 | r0 = r7;
0x000770c8 bl 0x661c4 | fcn_000661c4 (r0);
0x000770cc b 0x76f0c | goto label_8;
| label_42:
0x000770ce mov r0, r6 | r0 = r6;
0x000770d0 bl 0x22944 | fcn_00022944 (r0);
0x000770d4 b 0x76e52 | goto label_9;
| label_46:
0x000770d6 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x000770d8 mov r7, sl | r7 = sl;
| if (r3 == 0) {
0x000770da cbnz r3, 0x770f6 |
0x000770dc ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000770de adds r3, 1 | r3++;
0x000770e0 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000770e2 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 == 0) {
0x000770e4 cbz r3, 0x770f6 | goto label_57;
| }
0x000770e6 movs r3, 1 | r3 = 1;
0x000770e8 strb.w r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
0x000770ec ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x000770ee str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x000770f0 add.w r3, r6, 0x20 | r3 = r6 + 0x20;
0x000770f4 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
| }
| label_57:
0x000770f6 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r7 != 0) {
0x000770f8 cbnz r7, 0x77118 | goto label_58;
| }
0x000770fa movs r2, 1 | r2 = 1;
0x000770fc strb r2, [r6, 8] | *((r6 + 8)) = r2;
| if (r3 == 0) {
0x000770fe cbnz r3, 0x77102 |
0x00077100 strb r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
| }
| label_31:
0x00077102 cmp.w fp, 0 |
| if (fp == 0) {
0x00077106 beq.w 0x76eaa | goto label_10;
| }
0x0007710a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0007710c ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0007710e ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00077110 rev r3, r3 | r3 = SWAP32 (r3);
0x00077112 str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00077116 b 0x76eaa | goto label_10;
| label_58:
0x00077118 movs r2, 2 | r2 = 2;
0x0007711a cmp r3, 1 |
0x0007711c strb r2, [r6, 8] | *((r6 + 8)) = r2;
0x0007711e ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00077120 ldr.w r8, [r4, 0xc] | r8 = *((r4 + 0xc));
0x00077124 it ls |
| if (r3 > 1) {
0x00077126 strbls r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
| }
0x00077128 cmp r7, 1 |
0x0007712a bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x0007712e str r6, [r4, 0x50] | *((r4 + 0x50)) = r6;
0x00077130 lsl.w r3, r3, 0x10 | r3 <<= 0x10;
0x00077134 ldr.w r1, [r8, 0x38] | r1 = *((r8 + 0x38));
0x00077138 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0007713a lsr.w r3, r3, 0x10 | r3 >>= 0x10;
0x0007713e it gt |
| if (r7 <= 1) {
0x00077140 orrgt r3, r3, 0x40 | r3 |= 0x40;
| }
0x00077144 strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00077146 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00077148 rev r3, r3 | r3 = SWAP32 (r3);
0x0007714a cmp r2, r3 |
| if (r2 != r3) {
0x0007714c bne 0x771ac | goto label_59;
| }
0x0007714e cmp.w fp, 0 |
| if (fp == 0) {
0x00077152 beq.w 0x76e92 | goto label_11;
| }
0x00077156 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x00077158 rev r3, r3 | r3 = SWAP32 (r3);
0x0007715a str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x0007715e b 0x76e92 | goto label_11;
| label_55:
0x00077160 movw r5, 0x205 | r5 = 0x205;
0x00077164 b 0x76e42 | goto label_2;
| label_52:
0x00077166 ldrb.w r3, [r8, 0x2e] | r3 = *((r8 + 0x2e));
0x0007716a cmp r3, 0 |
| if (r3 != 0) {
0x0007716c bne.w 0x772c0 | goto label_53;
| }
| label_54:
0x00077170 ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x00077174 movs r5, 1 | r5 = 1;
0x00077176 strb.w r5, [r8, 0x2c] | *((r8 + 0x2c)) = r5;
0x0007717a movs r2, 0x30 | r2 = 0x30;
0x0007717c add.w r0, r8, 0x34 | r0 = r8 + 0x34;
0x00077180 ldr r1, [r3] | r1 = *(r3);
0x00077182 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x00077186 cmp r0, 0 |
| if (r0 != 0) {
0x00077188 bne.w 0x772d8 | goto label_60;
| }
| label_16:
0x0007718c ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00077190 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00077194 str.w r3, [sb, 0x28] | __asm ("str.w r3, [sb, 0x28]");
0x00077198 vstr d16, [sb, 0x50] | __asm ("vstr d16, [sb, 0x50]");
0x0007719c vdup.32 d16, r3 | __asm ("vdup.32 d16, r3");
0x000771a0 movs r3, 2 | r3 = 2;
0x000771a2 strb.w r3, [sb, 0x11] | *((sb + 0x11)) = r3;
0x000771a6 vstr d16, [sb, 0x20] | __asm ("vstr d16, [sb, 0x20]");
0x000771aa b 0x76ed6 | goto label_12;
| label_59:
0x000771ac ldr.w r0, [r8, 0x48] | r0 = *((r8 + 0x48));
0x000771b0 bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x000771b4 mov r5, r0 | r5 = r0;
0x000771b6 cmp r0, 0 |
| if (r0 != 0) {
0x000771b8 bne.w 0x76e42 | goto label_2;
| }
0x000771bc ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x000771be ldr.w r2, [r8, 0x38] | r2 = *((r8 + 0x38));
0x000771c2 rev r3, r3 | r3 = SWAP32 (r3);
0x000771c4 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x000771c6 cmp.w fp, 0 |
| if (fp == 0) {
0x000771ca beq.w 0x76e92 | goto label_11;
| }
0x000771ce ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000771d0 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x000771d2 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000771d4 rev r3, r3 | r3 = SWAP32 (r3);
0x000771d6 str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x000771da b 0x76e92 | goto label_11;
| label_50:
0x000771dc ldr r1, [pc, 0xdc] |
0x000771de movs r2, 0x10 | r2 = 0x10;
0x000771e0 mov r0, r8 | r0 = r8;
0x000771e2 str r3, [sp, 0x14] | var_14h = r3;
0x000771e4 add r1, pc |
0x000771e6 add.w r1, r1, 0xd20 | r1 = 0xef1c4;
0x000771ea blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
| if (r0 == 0) {
0x000771ee cbnz r0, 0x77216 |
0x000771f0 ldrb.w r2, [r8, 0x12] | r2 = *((r8 + 0x12));
0x000771f4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000771f6 cmp r2, 2 |
0x000771f8 ittt hi |
| if (r2 > 2) {
0x000771fa ldrhhi r2, [r4, 0x18] | __asm ("ldrhhi r2, [r4, 0x18]");
| }
| if (r2 <= 2) {
0x000771fc orrhi r2, r2, 1 | r2 |= 1;
| }
| if (r2 > 2) {
0x00077200 strh r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
| }
0x00077202 ldrb.w r2, [r8, 0x13] | r2 = *((r8 + 0x13));
0x00077206 cmp r2, 2 |
| if (r2 > 2) {
0x00077208 bhi 0x77216 | goto label_23;
| }
| if (r2 == 2) {
0x0007720a beq 0x772fc | goto label_61;
| }
| label_21:
0x0007720c ldrb.w r3, [r8, 0x15] | r3 = *((r8 + 0x15));
0x00077210 cmp r3, 0x40 |
| if (r3 == 0x40) {
0x00077212 beq.w 0x77336 | goto label_62;
| }
| }
| label_23:
0x00077216 mov.w r8, 0x1a | r8 = 0x1a;
0x0007721a mov r5, r8 | r5 = r8;
| label_27:
0x0007721c ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x0007721e ldr r7, [r0, 0x14] | r7 = *((r0 + 0x14));
0x00077220 bl 0x2a55c | fcn_0002a55c (r0);
0x00077224 ldr.w r3, [r7, 0xf4] | r3 = *((r7 + 0xf4));
0x00077228 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0007722a cmp r3, 0 |
| if (r3 == 0) {
0x0007722c beq 0x772f4 | goto label_63;
| }
| label_20:
0x0007722e movs r3, 0 | r3 = 0;
0x00077230 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00077232 b 0x76ee8 | goto label_13;
| label_49:
0x00077234 ldrb.w r0, [r8, 0x19] | r0 = *((r8 + 0x19));
0x00077238 ldrb.w r1, [r8, 0x5d] | r1 = *((r8 + 0x5d));
0x0007723c cmp r0, r1 |
| if (r0 != r1) {
0x0007723e bne.w 0x76f8c | goto label_14;
| }
0x00077242 ldrb.w r0, [r8, 0x1a] | r0 = *((r8 + 0x1a));
0x00077246 ldrb.w r1, [r8, 0x5e] | r1 = *((r8 + 0x5e));
0x0007724a cmp r0, r1 |
| if (r0 != r1) {
0x0007724c bne.w 0x76f8c | goto label_14;
| }
0x00077250 ldrb.w r0, [r8, 0x1b] | r0 = *((r8 + 0x1b));
0x00077254 ldrb.w r1, [r8, 0x5f] | r1 = *((r8 + 0x5f));
0x00077258 cmp r0, r1 |
0x0007725a itt eq |
| if (r0 == r1) {
0x0007725c reveq r2, r2 | __asm ("reveq r2, r2");
| }
| if (r0 == r1) {
0x0007725e streq r2, [sp, 0xc] | var_ch = r2;
| goto label_64;
| }
| if (r0 != r1) {
| label_64:
0x00077260 bne.w 0x76f8c | goto label_14;
| }
0x00077264 b 0x76f90 | goto label_15;
| label_44:
0x00077266 mov r0, sb | r0 = sb;
0x00077268 bl 0x2cc88 | r0 = fcn_0002cc88 (r0, r1);
0x0007726c mov r5, r0 | r5 = r0;
0x0007726e b 0x76e42 | goto label_2;
| label_51:
0x00077270 movs r1, 2 | r1 = 2;
0x00077272 mov r0, sb | r0 = sb;
0x00077274 bl 0x2273c | fcn_0002273c (r0, r1);
0x00077278 cmp.w sl, 1 |
0x0007727c mov r5, r0 | r5 = r0;
0x0007727e ite le |
| if (sl > 1) {
0x00077280 movle r3, 0 | r3 = 0;
| }
| if (sl <= 1) {
0x00077282 movgt r3, 1 | r3 = 1;
| }
0x00077284 cmp r0, 0 |
0x00077286 it ne |
| if (r0 == 0) {
0x00077288 movne r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0007728a cbnz r3, 0x77294 | goto label_65;
| }
0x0007728c cmp r5, 0 |
| if (r5 == 0) {
0x0007728e beq.w 0x7718c | goto label_16;
| }
0x00077292 b 0x77092 | goto label_17;
| label_65:
0x00077294 movs r1, 4 | r1 = 4;
0x00077296 mov r0, sb | r0 = sb;
0x00077298 bl 0x2c66c | r0 = fcn_0002c66c (r0, r1);
0x0007729c mov r5, r0 | r5 = r0;
0x0007729e cmp r5, 0 |
| if (r5 == 0) {
0x000772a0 beq.w 0x7718c | goto label_16;
| }
0x000772a4 b 0x77092 | goto label_17;
| label_53:
0x000772c0 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000772c2 cmp r3, 0 |
| if (r3 != 0) {
0x000772c4 bne.w 0x76e40 | goto label_18;
| }
0x000772c8 ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x000772ca cmp r7, 0 |
| if (r7 == 0) {
0x000772cc beq.w 0x76e40 | goto label_18;
| }
0x000772d0 mov.w r8, 8 | r8 = 8;
0x000772d4 mov r5, r8 | r5 = r8;
0x000772d6 b 0x76ef4 | goto label_5;
| label_60:
0x000772d8 ldrb.w r1, [r8, 0x2b] | r1 = *((r8 + 0x2b));
| if (r1 == 0) {
0x000772dc cbnz r1, 0x772ec |
0x000772de ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x000772e2 mov r2, r5 | r2 = r5;
0x000772e4 movs r3, 9 | r3 = 9;
0x000772e6 ldr r5, [r0] | r5 = *(r0);
0x000772e8 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x000772ea blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| }
0x000772ec movs r3, 0 | r3 = 0;
0x000772ee strb.w r3, [r8, 0x2c] | *((r8 + 0x2c)) = r3;
0x000772f2 b 0x7709c | goto label_19;
| label_63:
0x000772f4 mov r0, r7 | r0 = r7;
0x000772f6 bl 0x661c4 | fcn_000661c4 (r0);
0x000772fa b 0x7722e | goto label_20;
| label_61:
0x000772fc ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000772fe ands r2, r2, 0x20 | r2 &= 0x20;
| if (r2 != r2) {
0x00077302 bne 0x7720c | goto label_21;
| }
0x00077304 mov r0, r3 | r0 = r3;
0x00077306 add r1, sp, 0x28 | r1 += var_28h;
0x00077308 str r2, [sp, 0x28] | var_28h = r2;
0x0007730a bl 0x3320c | r0 = fcn_0003320c (r0, r1);
0x0007730e cmp r0, 0 |
| if (r0 != 0) {
0x00077310 bne.w 0x77442 | goto label_66;
| }
0x00077314 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00077316 cmp r3, 0 |
| if (r3 != 0) {
0x00077318 bne.w 0x7720c | goto label_21;
| }
0x0007731c ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x0007731e ldr r5, [r0, 0x14] | r5 = *((r0 + 0x14));
0x00077320 bl 0x2a55c | fcn_0002a55c (r0);
0x00077324 ldr.w r3, [r5, 0xf4] | r3 = *((r5 + 0xf4));
0x00077328 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0007732a cmp r3, 0 |
| if (r3 == 0) {
0x0007732c beq.w 0x7744e | goto label_67;
| }
| label_28:
0x00077330 ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00077332 movs r5, 0 | r5 = 0;
0x00077334 b 0x76e18 | goto label_22;
| label_62:
0x00077336 ldrb.w r3, [r8, 0x16] | r3 = *((r8 + 0x16));
0x0007733a cmp r3, 0x20 |
| if (r3 != 0x20) {
0x0007733c bne.w 0x77216 | goto label_23;
| }
0x00077340 ldrb.w r3, [r8, 0x17] | r3 = *((r8 + 0x17));
0x00077344 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00077346 bne.w 0x77216 | goto label_23;
| }
0x0007734a ldrb.w r2, [r8, 0x11] | r2 = *((r8 + 0x11));
0x0007734e ldrb.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00077350 adds r0, 0x10 | r0 += 0x10;
0x00077352 lsls r2, r2, 0x10 | r2 <<= 0x10;
0x00077354 orr.w r2, r2, r3, lsl 8 | r2 |= (r3 << 8);
0x00077358 subs r3, r2, 1 | r3 = r2 - 1;
0x0007735a tst r3, r2 |
| if ((r3 & r2) != 0) {
0x0007735c bne.w 0x77216 | goto label_23;
| }
0x00077360 mvn r1, 0x100 | r1 = ~0x100;
0x00077364 adds r3, r2, r1 | r3 = r2 + r1;
0x00077366 cmp.w r3, 0xff00 |
| if (r3 >= 0xff00) {
0x0007736a bhs.w 0x77216 | goto label_23;
| }
0x0007736e ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00077370 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00077372 orr r3, r3, 2 | r3 |= 2;
0x00077376 strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00077378 cmp r2, r1 |
0x0007737a ldrb.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0007737e str r3, [sp, 0x14] | var_14h = r3;
0x00077380 sub.w r3, r2, r3 | r3 = r2 - r3;
| if (r2 != r1) {
0x00077384 bne 0x773ce | goto label_68;
| }
0x00077386 ldrd r1, r2, [sp, 0xc] | __asm ("ldrd r1, r2, [var_10h]");
0x0007738a cmp r2, r1 |
| if (r2 < r1) {
0x0007738c bhs 0x773a2 |
0x0007738e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00077390 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00077392 movs r2, 1 |
0x00077394 movt r2, 0x1000 | r2 = 0x10000001;
0x00077398 ands r2, r1 | r2 &= r1;
0x0007739a cmp r2, 1 |
| if (r2 != 1) {
0x0007739c bne 0x7741e | goto label_69;
| }
0x0007739e ldr r2, [sp, 0x10] | r2 = var_10h;
0x000773a0 str r2, [sp, 0xc] | var_ch = r2;
| }
0x000773a2 cmp.w r3, 0x1e0 |
| if (r3 <= 0x1e0) {
0x000773a6 blo.w 0x77216 | goto label_23;
| }
0x000773aa str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x000773ac ldr.w r2, [r8, 0x34] | r2 = *((r8 + 0x34));
0x000773b0 subs r2, 0 |
0x000773b2 it ne |
| if (r2 == 0) {
0x000773b4 movne r2, 1 | r2 = 1;
| }
0x000773b6 strb r2, [r4, 0x11] | *((r4 + 0x11)) = r2;
0x000773b8 ldr.w r2, [r8, 0x40] | r2 = *((r8 + 0x40));
0x000773bc subs r2, 0 |
0x000773be it ne |
| if (r2 == 0) {
0x000773c0 movne r2, 1 | r2 = 1;
| }
0x000773c2 strb r2, [r4, 0x12] | *((r4 + 0x12)) = r2;
0x000773c4 b 0x76fb6 | goto label_24;
| label_56:
0x000773c6 mov r0, r5 | r0 = r5;
0x000773c8 bl 0x661c4 | fcn_000661c4 (r0);
0x000773cc b 0x770c2 | goto label_25;
| label_68:
0x000773ce ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x000773d0 strd r2, r3, [sp, 0xc] | __asm ("strd r2, r3, [var_10h]");
0x000773d4 ldr r5, [r0, 0x14] | r5 = *((r0 + 0x14));
0x000773d6 bl 0x2a55c | fcn_0002a55c (r0);
0x000773da ldrd r2, r3, [sp, 0xc] | __asm ("ldrd r2, r3, [var_10h]");
0x000773de ldr.w r1, [r5, 0xf4] | r1 = *((r5 + 0xf4));
0x000773e2 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
| if (r1 == 0) {
0x000773e4 cbz r1, 0x77412 | goto label_70;
| }
| label_26:
0x000773e6 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x000773e8 strd r2, r3, [r4, 0x24] | __asm ("strd r2, r3, [r4, 0x24]");
| if (r0 != 0) {
0x000773ec cbz r0, 0x773fa |
0x000773ee subs r0, 4 | r0 -= 4;
0x000773f0 str r0, [r4, 0x54] | *((r4 + 0x54)) = r0;
0x000773f2 bl 0x26f64 | fcn_00026f64 (r0);
0x000773f6 movs r3, 0 | r3 = 0;
0x000773f8 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
| }
0x000773fa mov r1, r4 | r1 = r4;
0x000773fc ldr r2, [sp, 0x14] | r2 = var_14h;
0x000773fe ldr r0, [r1], 0x24 | r0 = *(r1);
| r1 += 0x24;
0x00077402 bl 0x33fa0 | r0 = fcn_00033fa0 (r0, r1, r2);
0x00077406 mov r5, r0 | r5 = r0;
0x00077408 cmp r0, 0 |
| if (r0 != 0) {
0x0007740a bne.w 0x76ee4 | goto label_4;
| }
0x0007740e ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00077410 b 0x76e18 | goto label_22;
| label_70:
0x00077412 mov r0, r5 | r0 = r5;
0x00077414 bl 0x661c4 | fcn_000661c4 (r0);
0x00077418 ldrd r2, r3, [sp, 0xc] | __asm ("ldrd r2, r3, [var_10h]");
0x0007741c b 0x773e6 | goto label_26;
| label_69:
0x0007741e ldr r3, [pc, 0x38] |
0x00077420 movs r0, 0xb | r0 = 0xb;
0x00077422 ldr r2, [pc, 0x38] |
0x00077424 movs r5, 0xb | r5 = 0xb;
0x00077426 ldr r1, [pc, 0x38] |
0x00077428 mov r8, r5 | r8 = r5;
0x0007742a add r3, pc | r3 = 0xee888;
0x0007742c adds r3, 0x14 | r3 += 0x14;
0x0007742e add r2, pc | r2 = 0xee890;
0x00077430 str r3, [sp] | *(sp) = r3;
0x00077432 movw r3, 0x1345 |
0x00077436 movt r3, 1 | r3 = 0x11345;
0x0007743a add r1, pc | r1 = 0xee8a0;
0x0007743c bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00077440 b 0x7721c | goto label_27;
| label_66:
0x00077442 uxtb.w r8, r0 | r8 = (int8_t) r0;
0x00077446 mov r5, r0 | r5 = r0;
0x00077448 b 0x7721c | goto label_27;
| label_43:
0x0007744a blx 0x6430 | fcn_00006430 ();
| label_67:
0x0007744e mov r0, r5 | r0 = r5;
0x00077450 bl 0x661c4 | fcn_000661c4 (r0);
0x00077454 b 0x77330 | goto label_28;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x77800 */
| #include <stdint.h>
|
; (fcn) fcn.00077800 () | void fcn_00077800 (int16_t arg1, int16_t arg2) {
| int16_t var_5h;
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| arithmetic x;
| int32_t var_30h_2;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x00077800 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00077804 mov r7, r1 | r7 = r1;
0x00077806 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x00077808 mov r5, r0 | r5 = r0;
0x0007780a sub sp, 0x44 |
0x0007780c ldr.w r1, [pc, 0x6d8] | r1 = *(0x77ee8);
0x00077810 ldr.w r2, [pc, 0x6d8] | r2 = *(0x77eec);
0x00077814 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00077816 add r1, pc | r1 += pc;
0x00077818 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x0007781a ldr r2, [r2] | r2 = *(r2);
0x0007781c str r2, [sp, 0x3c] | var_3ch = r2;
0x0007781e mov.w r2, 0 | r2 = 0;
| if (r0 != 0) {
0x00077822 cbz r0, 0x7782e |
0x00077824 ldr.w r3, [pc, 0x6c8] |
0x00077828 add r3, pc |
0x0007782a ldr r3, [r3, 0x50] | r3 = *(0xef76c);
0x0007782c blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0007782e ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077830 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x00077832 cbz r3, 0x77842 |
0x00077834 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00077836 ldrb r2, [r0, 0xa] | r2 = *((r0 + 0xa));
0x00077838 adds r3, 1 | r3++;
0x0007783a str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0007783c cmp r2, 0 |
| if (r2 == 0) {
0x0007783e beq.w 0x7794e | goto label_30;
| }
| }
0x00077842 ldr r3, [r5] | r3 = *(r5);
0x00077844 cmp r3, 0 |
| if (r3 == 0) {
0x00077846 beq.w 0x7795a | goto label_31;
| }
| label_2:
0x0007784a ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0007784c cmp r0, 0 |
| if (r0 == 0) {
0x0007784e beq.w 0x779f2 | goto label_32;
| }
0x00077852 ldr.w r3, [pc, 0x6a0] |
0x00077856 add r3, pc |
0x00077858 ldr r3, [r3, 0x50] | r3 = *(0xef7a0);
0x0007785a blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0007785c ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x00077860 sub.w r2, fp, 5 | r2 = fp - 5;
0x00077864 cmp.w fp, 0 |
0x00077868 it ne |
| if (fp != 0) {
0x0007786a cmpne r2, 1 | __asm ("cmpne r2, 1");
| }
| if (fp > 0) {
0x0007786c bhi.w 0x77a6a | goto label_33;
| }
0x00077870 ldrd r3, r0, [r5] | __asm ("ldrd r3, r0, [r5]");
0x00077874 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00077876 ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x00077878 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0007787a ldr r2, [r6] | r2 = *(r6);
0x0007787c ldr.w r8, [r4] | r8 = *(r4);
0x00077880 str r2, [sp, 0x14] | var_14h = r2;
| if (r3 != 0) {
0x00077882 cbz r3, 0x7788c |
0x00077884 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00077886 cmp r3, 2 |
| if (r3 == 2) {
0x00077888 beq.w 0x77a1c | goto label_34;
| }
| }
| label_5:
0x0007788c ldrb r2, [r1, 8] | r2 = *((r1 + 8));
0x0007788e cmp r2, 0 |
| if (r2 == 0) {
0x00077890 beq 0x77984 | goto label_35;
| }
| label_3:
0x00077892 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00077894 str r3, [sp, 0xc] | var_ch = r3;
0x00077896 cmp r3, 0 |
| if (r3 == 0) {
0x00077898 beq.w 0x779a2 | goto label_36;
| }
0x0007789c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007789e movs r2, 0 | r2 = 0;
0x000778a0 str r2, [sp, 0xc] | var_ch = r2;
| label_13:
0x000778a2 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x000778a4 ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x000778a6 ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x000778a8 cmp r3, 5 |
0x000778aa str r2, [sp, 0x1c] | var_1ch = r2;
0x000778ac str r0, [sp, 0x18] | var_18h = r0;
| if (r3 != 5) {
0x000778ae bne.w 0x77eb4 | goto label_37;
| }
0x000778b2 subs r3, r2, r0 | r3 = r2 - r0;
0x000778b4 it ne |
| if (r3 == r2) {
0x000778b6 movne r3, 1 | r3 = 1;
| }
0x000778b8 lsl.w fp, r3, 3 |
0x000778bc movs r3, 1 | r3 = 1;
0x000778be str r3, [sp, 0x20] | var_20h = r3;
| label_4:
0x000778c0 ldr.w sl, [r4, 0x30] | sl = *((r4 + 0x30));
0x000778c4 cmp r7, 0 |
| if (r7 == 0) {
0x000778c6 beq.w 0x77a2a | goto label_38;
| }
| label_28:
0x000778ca ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x000778cc cmp sl, r4 |
0x000778ce it hs |
| if (sl >= r4) {
0x000778d0 cmphs fp, 0 | __asm ("cmphs fp, 0");
| }
| if (sl != r4) {
0x000778d4 bne.w 0x77a2a | goto label_38;
| }
0x000778d8 ldr.w sb, [pc, 0x61c] |
0x000778dc add r3, sp, 0x30 | r3 += x;
0x000778de movs r6, 0 | r6 = 0;
0x000778e0 mov fp, r3 |
0x000778e2 str r7, [sp, 8] | var_8h = r7;
0x000778e4 add sb, pc | sb = 0xef7e0;
0x000778e6 b 0x77904 | goto label_39;
| label_0:
0x000778e8 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
| do {
| label_1:
0x000778ea ldr r2, [sp, 8] | r2 = var_8h;
0x000778ec adds r6, 1 | r6++;
0x000778ee adds r4, 1 | r4++;
0x000778f0 str r4, [r5, 0x10] | *((r5 + 0x10)) = r4;
0x000778f2 cmp r2, r6 |
| if (r2 == r6) {
0x000778f4 beq.w 0x77a28 | goto label_40;
| }
0x000778f8 cmp sl, r4 |
0x000778fa it hs |
| if (sl >= r4) {
0x000778fc cmphs r3, 0 | __asm ("cmphs r3, 0");
| }
| if (sl != r4) {
0x000778fe bne.w 0x77a28 | goto label_40;
| }
0x00077902 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
| label_39:
0x00077904 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00077906 ldr.w r0, [sb, 0x118] | r0 = *((sb + 0x118));
0x0007790a ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x0007790c bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x00077910 adds r0, 1 | r0++;
0x00077912 cmp r0, r4 |
0x00077914 it eq |
| if (r0 != r4) {
0x00077916 moveq r3, 0 | r3 = 0;
| }
0x00077918 beq 0x778ea |
| } while (r0 == r4);
0x0007791a movs r3, 2 | r3 = 2;
0x0007791c ldr.w r7, [r8, 0xdc] | r7 = *((r8 + 0xdc));
0x00077920 mov r2, fp | r2 = fp;
0x00077922 mov r1, r4 | r1 = r4;
0x00077924 mov r0, r8 | r0 = r8;
0x00077926 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00077928 mov r3, r0 | r3 = r0;
0x0007792a cmp r0, 0 |
| if (r0 != 0) {
0x0007792c bne 0x778e8 | goto label_0;
| }
0x0007792e ldr r2, [sp, 0x30] | r2 = x;
0x00077930 mov r1, r4 | r1 = r4;
0x00077932 mov r0, r5 | r0 = r5;
0x00077934 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00077936 bl 0x65100 | r0 = fcn_00065100 (r0, r1, r2, r3, r4, r5, r6);
0x0007793a mov r3, r0 | r3 = r0;
0x0007793c ldr r0, [sp, 0x30] | r0 = x;
0x0007793e cmp r0, 0 |
| if (r0 == 0) {
0x00077940 beq 0x778e8 | goto label_0;
| }
0x00077942 str r3, [sp, 0x10] | var_10h = r3;
0x00077944 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00077948 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x0007794a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007794c b 0x778ea | goto label_1;
| label_30:
0x0007794e bl 0x2adac | fcn_0002adac (r0);
0x00077952 ldr r3, [r5] | r3 = *(r5);
0x00077954 cmp r3, 0 |
| if (r3 != 0) {
0x00077956 bne.w 0x7784a | goto label_2;
| }
| label_31:
0x0007795a ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0007795e sub.w r2, fp, 5 | r2 = fp - 5;
0x00077962 cmp.w fp, 0 |
0x00077966 it ne |
| if (fp != 0) {
0x00077968 cmpne r2, 1 | __asm ("cmpne r2, 1");
| }
| if (fp > 0) {
0x0007796a bhi.w 0x77a7c | goto label_41;
| }
0x0007796e ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00077970 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00077972 ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x00077974 ldrb r2, [r1, 8] | r2 = *((r1 + 8));
0x00077976 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00077978 ldr r3, [r6] | r3 = *(r6);
0x0007797a ldr.w r8, [r4] | r8 = *(r4);
0x0007797e str r3, [sp, 0x14] | var_14h = r3;
0x00077980 cmp r2, 0 |
| if (r2 != 0) {
0x00077982 bne 0x77892 | goto label_3;
| }
| label_35:
0x00077984 mov r0, r1 | r0 = r1;
0x00077986 mov r1, r2 | r1 = r2;
0x00077988 bl 0x76d50 | fcn_00076d50 (r0, r1, r2, r3);
0x0007798c ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0007798e mov fp, r0 |
0x00077990 orrs.w r1, r2, r0 | r1 = r2 | r0;
| if (r1 != r2) {
0x00077994 bne.w 0x77bea | goto label_42;
| }
0x00077998 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0007799a ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0007799c ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x0007799e movs r3, 1 | r3 = 1;
0x000779a0 str r3, [sp, 0xc] | var_ch = r3;
| label_36:
0x000779a2 movs r3, 0 | r3 = 0;
0x000779a4 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x000779a6 mov r2, r3 | r2 = r3;
0x000779a8 bl 0x3474c | r0 = fcn_0003474c (r0, r1, r2, r3);
0x000779ac cmp r0, 7 |
0x000779ae mov fp, r0 |
| if (r0 != 7) {
0x000779b0 beq 0x779d0 |
0x000779b2 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000779b4 ldr r6, [r5, 4] | r6 = *((r5 + 4));
| label_19:
0x000779b6 cmp r2, 0 |
| if (r2 != 0) {
0x000779b8 bne.w 0x77ca6 | goto label_43;
| }
0x000779bc mov r0, r6 | r0 = r6;
0x000779be add.w r2, r5, 8 | r2 = r5 + 8;
0x000779c2 movs r1, 2 | r1 = 2;
0x000779c4 bl 0x76d50 | r0 = fcn_00076d50 (r0, r1, r2, r3);
0x000779c8 mov fp, r0 |
0x000779ca cmp r0, 0 |
| if (r0 == 0) {
0x000779cc beq.w 0x77c30 | goto label_44;
| }
| }
0x000779d0 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000779d2 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x000779d4 ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x000779d6 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x000779d8 ldr r2, [r6] | r2 = *(r6);
| label_6:
0x000779da ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000779dc ldrb r2, [r2, 5] | r2 = *((r2 + 5));
0x000779de str r3, [sp, 0x1c] | var_1ch = r3;
0x000779e0 sub.w r3, r2, 5 | r3 = r2 - 5;
0x000779e4 clz r3, r3 | r3 &= r3;
0x000779e8 lsrs r3, r3, 5 | r3 >>= 5;
0x000779ea str r3, [sp, 0x20] | var_20h = r3;
0x000779ec ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000779ee str r3, [sp, 0x18] | var_18h = r3;
0x000779f0 b 0x778c0 | goto label_4;
| label_32:
0x000779f2 ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x000779f6 sub.w r2, fp, 5 | r2 = fp - 5;
0x000779fa cmp.w fp, 0 |
0x000779fe it ne |
| if (fp != 0) {
0x00077a00 cmpne r2, 1 | __asm ("cmpne r2, 1");
| }
| if (fp > 0) {
0x00077a02 bhi 0x77a7c | goto label_41;
| }
0x00077a04 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00077a06 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00077a08 ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x00077a0a ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00077a0c ldr r3, [r6] | r3 = *(r6);
0x00077a0e ldr.w r8, [r4] | r8 = *(r4);
0x00077a12 str r3, [sp, 0x14] | var_14h = r3;
0x00077a14 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00077a16 cmp r3, 2 |
| if (r3 != 2) {
0x00077a18 bne.w 0x7788c | goto label_5;
| }
| label_34:
0x00077a1c movs r3, 0 | r3 = 0;
0x00077a1e ldr r2, [sp, 0x14] | r2 = var_14h;
0x00077a20 mov.w fp, 5 |
0x00077a24 str r3, [sp, 0xc] | var_ch = r3;
0x00077a26 b 0x779da | goto label_6;
| label_40:
0x00077a28 mov fp, r3 |
| label_38:
0x00077a2a cmp.w fp, 0 |
| if (fp != 0) {
0x00077a2e bne 0x77ac0 | goto label_45;
| }
| label_29:
0x00077a30 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x00077a32 str.w sl, [r5, 0x24] | __asm ("str.w sl, [r5, 0x24]");
0x00077a36 rsb.w r3, r1, 1 | r3 = 1 - r1;
0x00077a3a cmp r1, sl |
0x00077a3c add r3, sl | r3 += sl;
0x00077a3e str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
| if (r1 > sl) {
0x00077a40 bhi 0x77ac6 | goto label_46;
| }
0x00077a42 ldr r4, [r5, 0x28] | r4 = *((r5 + 0x28));
0x00077a44 cmp r4, 0 |
| if (r4 != 0) {
0x00077a46 bne.w 0x77bfe | goto label_47;
| }
0x00077a4a ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077a4c movs r2, 1 | r2 = 1;
0x00077a4e ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00077a50 ldr r3, [r3] | r3 = *(r3);
0x00077a52 ldr r1, [r3, 0x60] | r1 = *((r3 + 0x60));
0x00077a54 str r1, [r5, 0x2c] | *((r5 + 0x2c)) = r1;
0x00077a56 str r5, [r3, 0x60] | *((r3 + 0x60)) = r5;
0x00077a58 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00077a5a str r2, [r5, 0x28] | *((r5 + 0x28)) = r2;
0x00077a5c cmp r3, 0 |
| if (r3 != 0) {
0x00077a5e bne.w 0x77c90 | goto label_48;
| }
| label_11:
0x00077a62 mov.w fp, 0 |
| do {
| label_21:
0x00077a66 str.w fp, [r5, 0x1c] | __asm ("str.w fp, [r5, 0x1c]");
| label_33:
0x00077a6a ldr r2, [r5] | r2 = *(r5);
| if (r2 != 0) {
0x00077a6c cbz r2, 0x77a7c |
0x00077a6e ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
| if (r0 == 0) {
0x00077a70 cbz r0, 0x77a7c | goto label_41;
| }
0x00077a72 ldr.w r2, [pc, 0x488] |
0x00077a76 add r2, pc |
0x00077a78 ldr r2, [r2, 0x58] | r2 = *(0xef9d0);
0x00077a7a blx r2 | uint32_t (*r2)(uint32_t) (r2);
| }
| label_41:
0x00077a7c ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077a7e ldrb r2, [r0, 9] | r2 = *((r0 + 9));
| if (r2 != 0) {
0x00077a80 cbz r2, 0x77a8e |
0x00077a82 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00077a84 subs r2, 1 | r2--;
0x00077a86 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x00077a88 cmp r2, 0 |
| if (r2 == 0) {
0x00077a8a beq.w 0x77ba6 | goto label_49;
| }
| }
| label_8:
0x00077a8e ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00077a90 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
| if (r0 != 0) {
0x00077a92 cbz r0, 0x77a9e |
0x00077a94 ldr.w r2, [pc, 0x468] |
0x00077a98 add r2, pc |
0x00077a9a ldr r2, [r2, 0x58] | r2 = *(0xef9f4);
0x00077a9c blx r2 | uint32_t (*r2)(uint32_t) (r2);
| }
0x00077a9e ldr.w r1, [pc, 0x464] |
0x00077aa2 ldr.w r2, [pc, 0x448] | r2 = *(0x77eee);
0x00077aa6 add r1, pc | r1 = 0xef9b0;
0x00077aa8 ldr r2, [r1, r2] | r2 = *(0xef9b0);
0x00077aaa ldr r1, [r2] | r1 = *(0xef9b0);
0x00077aac ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00077aae eors r1, r2 | r1 ^= r2;
0x00077ab0 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x00077ab4 bne.w 0x77e9a | goto label_50;
| }
0x00077ab8 mov r0, fp | r0 = fp;
0x00077aba add sp, 0x44 |
0x00077abc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_45:
0x00077ac0 cmp.w fp, 0x65 |
| if (fp == 0x65) {
0x00077ac4 bne 0x77b84 |
| label_46:
0x00077ac6 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x00077ac8 cmp.w sl, 0 |
| if (sl == 0) {
0x00077acc beq 0x77bac | goto label_51;
| }
| label_10:
0x00077ace ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00077ad0 mov r0, r6 | r0 = r6;
0x00077ad2 movs r1, 1 | r1 = 1;
0x00077ad4 adds r2, 1 | r2++;
0x00077ad6 bl 0x66b5c | r0 = fcn_00066b5c (r0, r1, r2);
0x00077ada mov fp, r0 |
0x00077adc cmp r0, 0 |
| if (r0 != 0) {
0x00077ade bne 0x77b84 | goto label_9;
| }
0x00077ae0 ldr r0, [r5] | r0 = *(r5);
| if (r0 != 0) {
0x00077ae2 cbz r0, 0x77ae8 |
0x00077ae4 bl 0x31440 | fcn_00031440 (r0);
| }
0x00077ae8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00077aea cmp r3, 0 |
| if (r3 != 0) {
0x00077aec bne.w 0x77c78 | goto label_52;
| }
| label_18:
0x00077af0 ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_1ch]");
0x00077af4 cmp r3, r2 |
| if (r3 <= r2) {
0x00077af6 ble.w 0x77cb0 | goto label_53;
| }
0x00077afa ldr r4, [sp, 0x18] | r4 = var_18h;
0x00077afc ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00077afe mov r1, r4 | r1 = r4;
0x00077b00 bl 0xc4780 | fcn_000c4780 (r0, r1);
0x00077b04 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x00077b06 mov r1, r0 | r1 = r0;
0x00077b08 add r0, sl | r0 += sl;
0x00077b0a subs r0, 1 | r0--;
0x00077b0c str r3, [sp, 0x10] | var_10h = r3;
0x00077b0e bl 0xc4780 | fcn_000c4780 (r0, r1);
0x00077b12 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00077b14 mov r6, r0 | r6 = r0;
0x00077b16 smull r0, r2, r4, sl | r0:r2 = r4 * sl;
0x00077b1a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00077b1c ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00077b1e ldr r3, [pc, 0x3e8] |
0x00077b20 str r0, [sp, 0x20] | var_20h = r0;
0x00077b22 str r2, [sp, 0x24] | var_24h = r2;
0x00077b24 add r3, pc |
0x00077b26 str r1, [sp, 0x28] | var_28h = r1;
0x00077b28 ldr.w r3, [r3, 0x118] | r3 = *(0xefb4a);
0x00077b2c mov r0, r3 | r0 = r3;
0x00077b2e str r3, [sp, 8] | var_8h = r3;
0x00077b30 bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x00077b34 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00077b36 adds r2, r0, 1 | r2 = r0 + 1;
0x00077b38 cmp r2, r6 |
0x00077b3a ite ne |
| if (r2 == r6) {
0x00077b3c movne sb, r6 | sb = r6;
| }
| if (r2 != r6) {
0x00077b3e moveq sb, r0 | sb = r0;
| }
0x00077b40 ldr.w sl, [r3, 0x1c] | sl = *(0xefb66);
0x00077b44 ldr r4, [r3, 0x40] | r4 = *(0xefb8a);
0x00077b46 cmp sb, sl |
| if (sb > sl) {
0x00077b48 bhi.w 0x77d26 | goto label_54;
| }
0x00077b4c ldr r6, [pc, 0x3bc] |
0x00077b4e mov fp, r8 |
0x00077b50 mov r8, r3 | r8 = r3;
0x00077b52 ldr r3, [sp, 8] | r3 = var_8h;
0x00077b54 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00077b56 add r7, sp, 0x30 | r7 += x;
0x00077b58 add r6, pc | r6 = 0xefa68;
0x00077b5a str r4, [sp, 0x2c] | var_2ch = r4;
0x00077b5c mov r0, r3 | r0 = r3;
| label_16:
0x00077b5e bl 0xc4508 | fcn_000c4508 (r0, r1, r2);
0x00077b62 adds r0, 1 | r0++;
0x00077b64 cmp r0, sb |
0x00077b66 it eq |
| if (r0 != sb) {
0x00077b68 addeq sb, sb, 1 | sb++;
| }
| if (r0 == sb) {
0x00077b6c beq 0x77c60 | goto label_55;
| }
0x00077b6e ldr.w r4, [r8, 0xdc] | r4 = *((r8 + 0xdc));
0x00077b72 movs r3, 0 | r3 = 0;
0x00077b74 mov r2, r7 | r2 = r7;
0x00077b76 mov r1, sb | r1 = sb;
0x00077b78 mov r0, r8 | r0 = r8;
0x00077b7a blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00077b7c mov r4, r0 | r4 = r0;
0x00077b7e cmp r0, 0 |
| if (r0 == 0) {
0x00077b80 beq 0x77c48 | goto label_56;
| }
| label_15:
0x00077b82 mov fp, r4 |
| }
| label_9:
0x00077b84 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x00077b86 cbnz r3, 0x77b96 | goto label_57;
| }
| label_7:
0x00077b88 movw r2, 0xc0a | r2 = 0xc0a;
0x00077b8c cmp fp, r2 |
0x00077b8e it eq |
| if (fp != r2) {
0x00077b90 moveq fp, 7 |
| }
0x00077b94 b 0x77a66 |
| } while (1);
| label_57:
0x00077b96 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077b98 ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x00077b9a cmp r2, 2 |
| if (r2 == 2) {
0x00077b9c beq 0x77c26 | goto label_58;
| }
| label_12:
0x00077b9e movs r1, 0 | r1 = 0;
0x00077ba0 bl 0x6683c | fcn_0006683c (r0, r1);
0x00077ba4 b 0x77b88 | goto label_7;
| label_49:
0x00077ba6 bl 0x22944 | fcn_00022944 (r0);
0x00077baa b 0x77a8e | goto label_8;
| label_51:
0x00077bac ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 != 0) {
0x00077bae cbz r3, 0x77bbc |
0x00077bb0 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00077bb2 adds r3, 1 | r3++;
0x00077bb4 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00077bb6 ldrb r3, [r6, 0xa] | r3 = *((r6 + 0xa));
0x00077bb8 cmp r3, 0 |
| if (r3 == 0) {
0x00077bba beq 0x77c40 | goto label_59;
| }
| }
| label_14:
0x00077bbc ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00077bbe movs r3, 0 | r3 = 0;
0x00077bc0 str r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
0x00077bc2 bl 0x66ac8 | fcn_00066ac8 (r0);
0x00077bc6 ldrb r2, [r6, 9] | r2 = *((r6 + 9));
0x00077bc8 mov fp, r0 |
| if (r2 != 0) {
0x00077bca cbz r2, 0x77bd6 |
0x00077bcc ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00077bce subs r2, 1 | r2--;
0x00077bd0 str r2, [r6, 0xc] | *((r6 + 0xc)) = r2;
0x00077bd2 cmp r2, 0 |
| if (r2 == 0) {
0x00077bd4 beq 0x77c70 | goto label_60;
| }
| }
| label_17:
0x00077bd6 cmp.w fp, 0x65 |
0x00077bda it ne |
| if (fp == 0x65) {
0x00077bdc cmpne fp, 0 | __asm ("cmpne fp, 0");
| goto label_61;
| }
| if (fp != 0x65) {
| label_61:
0x00077be0 bne 0x77b84 | goto label_9;
| }
0x00077be2 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x00077be4 mov.w sl, 1 | sl = 1;
0x00077be8 b 0x77ace | goto label_10;
| label_42:
0x00077bea ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x00077bec cmp r0, 0 |
| if (r0 == 0) {
0x00077bee beq 0x77c8a | goto label_62;
| }
0x00077bf0 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x00077bf2 movs r3, 1 | r3 = 1;
0x00077bf4 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00077bf6 str r3, [sp, 0xc] | var_ch = r3;
0x00077bf8 ldr r2, [r6] | r2 = *(r6);
0x00077bfa ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00077bfc b 0x779da | goto label_6;
| label_47:
0x00077bfe ldr r3, [sp, 0xc] | r3 = var_ch;
0x00077c00 cmp r3, 0 |
| if (r3 == 0) {
0x00077c02 beq.w 0x77a62 | goto label_11;
| }
0x00077c06 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077c08 movs r1, 0 | r1 = 0;
0x00077c0a ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x00077c0c cmp r3, 2 |
| if (r3 == 2) {
0x00077c0e beq.w 0x77d14 | goto label_63;
| }
| label_20:
0x00077c12 bl 0x6683c | fcn_0006683c (r0, r1);
0x00077c16 b 0x77a62 | goto label_11;
| label_25:
0x00077c18 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077c1a ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x00077c1c cmp r2, 2 |
| if (r2 != 2) {
0x00077c1e bne.w 0x77eac | goto label_64;
| }
0x00077c22 mov.w fp, 0xa |
| label_58:
0x00077c26 movs r1, 0 | r1 = 0;
0x00077c28 bl 0x76524 | fcn_00076524 (r0, r1, r2);
0x00077c2c ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077c2e b 0x77b9e | goto label_12;
| label_44:
0x00077c30 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00077c32 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00077c34 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x00077c36 movs r3, 1 | r3 = 1;
0x00077c38 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00077c3a ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00077c3c ldr r3, [r6] | r3 = *(r6);
0x00077c3e b 0x778a2 | goto label_13;
| label_59:
0x00077c40 mov r0, r6 | r0 = r6;
0x00077c42 bl 0x2adac | fcn_0002adac (r0);
0x00077c46 b 0x77bbc | goto label_14;
| label_56:
0x00077c48 ldr r0, [sp, 0x30] | r0 = x;
0x00077c4a bl 0x650a4 | r0 = fcn_000650a4 (r0);
0x00077c4e mov r4, r0 | r4 = r0;
0x00077c50 ldr r0, [sp, 0x30] | r0 = x;
| if (r0 != 0) {
0x00077c52 cbz r0, 0x77c58 |
0x00077c54 bl 0x2a5a4 | fcn_0002a5a4 (r0);
| }
0x00077c58 add.w sb, sb, 1 | sb++;
0x00077c5c cmp r4, 0 |
| if (r4 != 0) {
0x00077c5e bne 0x77b82 | goto label_15;
| }
| label_55:
0x00077c60 cmp sb, sl |
| if (sb > sl) {
0x00077c62 bhi 0x77d22 | goto label_65;
| }
0x00077c64 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00077c66 ldr.w r0, [r6, 0x118] | r0 = *((r6 + 0x118));
0x00077c6a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00077c6c ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00077c6e b 0x77b5e | goto label_16;
| label_60:
0x00077c70 mov r0, r6 | r0 = r6;
0x00077c72 bl 0x22944 | fcn_00022944 (r0);
0x00077c76 b 0x77bd6 | goto label_17;
| label_52:
0x00077c78 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00077c7a movs r1, 2 | r1 = 2;
0x00077c7c bl 0x77490 | r0 = fcn_00077490 (r0, r1);
0x00077c80 mov fp, r0 |
0x00077c82 cmp r0, 0 |
| if (r0 != 0) {
0x00077c84 bne.w 0x77b84 | goto label_9;
| }
0x00077c88 b 0x77af0 | goto label_18;
| label_62:
0x00077c8a movs r3, 1 | r3 = 1;
0x00077c8c str r3, [sp, 0xc] | var_ch = r3;
0x00077c8e b 0x779b6 | goto label_19;
| label_48:
0x00077c90 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x00077c92 mov r1, r4 | r1 = r4;
0x00077c94 cmp r3, 2 |
| if (r3 != 2) {
0x00077c96 bne 0x77c12 | goto label_20;
| }
0x00077c98 bl 0x76524 | fcn_00076524 (r0, r1, r2);
0x00077c9c ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077c9e mov r1, r4 | r1 = r4;
0x00077ca0 bl 0x6683c | fcn_0006683c (r0, r1);
0x00077ca4 b 0x77a62 | goto label_11;
| label_43:
0x00077ca6 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x00077ca8 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00077caa ldr r3, [r6] | r3 = *(r6);
0x00077cac ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00077cae b 0x778a2 | goto label_13;
| label_53:
0x00077cb0 ldrd r0, r1, [sp, 0x18] | __asm ("ldrd r0, r1, [var_1ch]");
0x00077cb4 bl 0xc4780 | fcn_000c4780 (r0, r1);
0x00077cb8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00077cba mul r0, sl, r0 | r0 = sl * r0;
0x00077cbe ldr.w fp, [r3, 0x2c] | fp = *((r3 + 0x2c));
0x00077cc2 str r0, [r3, 0x1c] | *((r3 + 0x1c)) = r0;
0x00077cc4 cmp.w fp, 0 |
| if (fp != 0) {
0x00077cc8 bne.w 0x77b84 | goto label_9;
| }
0x00077ccc ldr r2, [pc, 0x240] |
0x00077cce add r2, pc |
0x00077cd0 ldr.w r2, [r2, 0x100] | r2 = *(0xefce2);
| if (r2 != 0) {
0x00077cd4 cbz r2, 0x77ce2 |
0x00077cd6 mov.w r0, 0x190 | r0 = 0x190;
0x00077cda blx r2 | r0 = uint32_t (*r2)(uint32_t) (r0);
0x00077cdc cmp r0, 0 |
| if (r0 != 0) {
0x00077cde bne.w 0x77e9e | goto label_66;
| }
| }
0x00077ce2 movs r2, 0 | r2 = 0;
0x00077ce4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00077ce6 mov r1, r2 | r1 = r2;
0x00077ce8 bl 0x761d4 | r0 = fcn_000761d4 (r0, r1, r2, r3);
0x00077cec mov fp, r0 |
| label_22:
0x00077cee cmp.w fp, 0 |
| if (fp != 0) {
0x00077cf2 bne.w 0x77b84 | goto label_9;
| }
0x00077cf6 mov r1, fp | r1 = fp;
0x00077cf8 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00077cfa bl 0x6683c | r0 = fcn_0006683c (r0, r1);
0x00077cfe mov fp, r0 |
0x00077d00 cmp r0, 0 |
| if (r0 != 0) {
0x00077d02 bne.w 0x77b84 | goto label_9;
| }
0x00077d06 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00077d08 cmp r3, 0 |
| if (r3 != 0) {
0x00077d0a bne.w 0x77e8a | goto label_67;
| }
| label_26:
0x00077d0e mov.w fp, 0x65 |
0x00077d12 b 0x77a66 | goto label_21;
| label_63:
0x00077d14 bl 0x76524 | fcn_00076524 (r0, r1, r2);
0x00077d18 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077d1a movs r1, 0 | r1 = 0;
0x00077d1c bl 0x6683c | fcn_0006683c (r0, r1);
0x00077d1e stc2 p6, c14, [lr, 0x27c] | __asm ("stc2 p6, c14, [lr, 0x27c]");
| label_65:
0x00077d22 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x00077d24 mov r8, fp | r8 = fp;
| label_54:
0x00077d26 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00077d28 ldr.w fp, [r3, 0x2c] | fp = *((r3 + 0x2c));
0x00077d2c cmp.w fp, 0 |
| if (fp != 0) {
0x00077d30 bne.w 0x77b84 | goto label_9;
| }
0x00077d34 ldr r2, [pc, 0x1dc] |
0x00077d36 add r2, pc |
0x00077d38 ldr.w r2, [r2, 0x100] | r2 = *(0xefd4e);
| if (r2 != 0) {
0x00077d3c cbz r2, 0x77d4a |
0x00077d3e mov.w r0, 0x190 | r0 = 0x190;
0x00077d42 blx r2 | r0 = uint32_t (*r2)(uint32_t) (r0);
0x00077d44 cmp r0, 0 |
| if (r0 != 0) {
0x00077d46 bne.w 0x77e7c | goto label_68;
| }
| }
0x00077d4a movs r2, 1 | r2 = 1;
0x00077d4c movs r1, 0 | r1 = 0;
0x00077d4e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00077d50 bl 0x761d4 | fcn_000761d4 (r0, r1, r2, r3);
0x00077d52 invalid |
0x00077d56 mov fp, r0 |
0x00077d58 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00077d5a ldr r6, [sp, 0x24] | r6 = var_24h;
0x00077d5c add r2, pc | r2 += pc;
0x00077d5e ldr.w r1, [r2, 0x118] | r1 = *((r2 + 0x118));
0x00077d62 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00077d64 add r2, r1 | r2 += r1;
0x00077d66 asr.w ip, r2, 0x1f |
0x00077d6a cmp r3, r2 |
0x00077d6c sbcs.w r0, r6, ip | __asm ("sbcs.w r0, r6, ip");
0x00077d70 it lt |
| if (r3 >= r2) {
0x00077d72 movlt r2, r3 | r2 = r3;
| }
0x00077d74 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00077d76 it lt |
| if (r3 >= r2) {
0x00077d78 movlt ip, r6 |
| }
0x00077d7a add.w sb, r1, r3 | sb = r1 + r3;
0x00077d7e asr.w sl, sb, 0x1f | sl = sb >> 0x1f;
0x00077d82 cmp sb, r2 |
0x00077d84 sbcs.w r1, sl, ip | __asm ("sbcs.w r1, sl, ip");
0x00077d88 ite lt |
| if (sb >= r2) {
0x00077d8a movlt r1, 1 | r1 = 1;
| }
| if (sb < r2) {
0x00077d8c movge r1, 0 | r1 = 0;
| }
0x00077d8e cmp.w fp, 0 |
0x00077d92 ite ne |
| if (fp == 0) {
0x00077d94 movne r1, 0 | r1 = 0;
| }
| if (fp != 0) {
0x00077d96 andeq r1, r1, 1 | r1 &= 1;
| }
0x00077d9a cmp r1, 0 |
| if (r1 == 0) {
0x00077d9c beq 0x77e16 | goto label_23;
| }
0x00077d9e add r7, sp, 0x30 | r7 += x;
0x00077da0 str r5, [sp, 8] | var_8h = r5;
0x00077da2 mov fp, r7 |
0x00077da4 mov r7, sb | r7 = sb;
0x00077da6 mov sb, r3 | sb = r3;
0x00077da8 ldr r5, [sp, 0x10] | r5 = var_10h;
0x00077daa str.w ip, [sp, 0x18] | __asm ("str.w ip, [var_18h]");
0x00077dae str r2, [sp, 0x10] | var_10h = r2;
| do {
0x00077db0 movs r3, 0 | r3 = 0;
0x00077db2 mov r2, sb | r2 = sb;
0x00077db4 str r3, [sp, 0x30] | x = r3;
0x00077db6 mov r0, r7 | r0 = r7;
0x00077db8 mov r3, r5 | r3 = r5;
0x00077dba mov r1, sl | r1 = sl;
0x00077dbc bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x00077dc0 ldr.w r6, [r8, 0xdc] | r6 = *((r8 + 0xdc));
0x00077dc4 adds r1, r0, 1 | r1 = r0 + 1;
0x00077dc6 movs r3, 0 | r3 = 0;
0x00077dc8 mov r2, fp | r2 = fp;
0x00077dca mov r0, r8 | r0 = r8;
0x00077dcc blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00077dce cmp r0, 0 |
| if (r0 != 0) {
0x00077dd0 bne 0x77e60 | goto label_69;
| }
0x00077dd2 ldr r3, [sp, 0x30] | r3 = x;
0x00077dd4 mov r2, sb | r2 = sb;
0x00077dd6 mov r0, r4 | r0 = r4;
0x00077dd8 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00077dda ldr r3, [r4] | r3 = *(r4);
0x00077ddc strd r7, sl, [sp] | __asm ("strd r7, sl, [sp]");
0x00077de0 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00077de2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00077de4 mov r3, r0 | r3 = r0;
0x00077de6 ldr r0, [sp, 0x30] | r0 = x;
0x00077de8 cmp r0, 0 |
| if (r0 != 0) {
0x00077dea bne 0x77e72 | goto label_70;
| }
| label_24:
0x00077dec ldr r2, [sp, 0x10] | r2 = var_10h;
0x00077dee adds.w r7, sb, r7 | r7 = sb + r7;
0x00077df2 adc.w sl, r5, sl | __asm ("adc.w sl, r5, sl");
0x00077df6 cmp r7, r2 |
0x00077df8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00077dfa sbcs.w r2, sl, r2 | __asm ("sbcs.w r2, sl, r2");
0x00077dfe ite lt |
| if (r7 >= r2) {
0x00077e00 movlt r2, 1 | r2 = 1;
| }
| if (r7 < r2) {
0x00077e02 movge r2, 0 | r2 = 0;
| }
0x00077e04 cmp r3, 0 |
0x00077e06 ite ne |
| if (r3 == 0) {
0x00077e08 movne r2, 0 | r2 = 0;
| }
| if (r3 != 0) {
0x00077e0a andeq r2, r2, 1 | r2 &= 1;
| }
0x00077e0e cmp r2, 0 |
0x00077e10 bne 0x77db0 |
| } while (r2 != 0);
0x00077e12 ldr r5, [sp, 8] | r5 = var_8h;
0x00077e14 mov fp, r3 |
| label_23:
0x00077e16 cmp.w fp, 0 |
| if (fp != 0) {
0x00077e1a bne.w 0x77b84 | goto label_9;
| }
0x00077e1e ldr r3, [r4] | r3 = *(r4);
0x00077e20 add r1, sp, 0x30 | r1 += x;
0x00077e22 mov r0, r4 | r0 = r4;
0x00077e24 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00077e26 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00077e28 mov fp, r0 |
0x00077e2a cmp r0, 0 |
| if (r0 != 0) {
0x00077e2c bne.w 0x77b84 | goto label_9;
| }
0x00077e30 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [x]");
0x00077e34 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00077e36 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00077e38 cmp r1, r2 |
0x00077e3a sbcs.w r3, r0, r3 | __asm ("sbcs.w r3, r0, r3");
| if (r1 >= r2) {
0x00077e3e bge 0x77e54 | goto label_71;
| }
0x00077e40 mov r2, r1 | r2 = r1;
0x00077e42 ldr r1, [r4] | r1 = *(r4);
0x00077e44 mov r3, r0 | r3 = r0;
0x00077e46 mov r0, r4 | r0 = r4;
0x00077e48 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x00077e4a blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00077e4c mov fp, r0 |
0x00077e4e cmp r0, 0 |
| if (r0 != 0) {
0x00077e50 bne.w 0x77b84 | goto label_9;
| }
| label_71:
0x00077e54 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00077e56 movs r1, 0 | r1 = 0;
0x00077e58 bl 0x2c858 | r0 = fcn_0002c858 (r0, r1);
0x00077e5c mov fp, r0 |
0x00077e5e b 0x77cee | goto label_22;
| label_69:
0x00077e60 mov fp, r0 |
0x00077e62 ldr r0, [sp, 0x30] | r0 = x;
0x00077e64 ldr r5, [sp, 8] | r5 = var_8h;
0x00077e66 cmp r0, 0 |
| if (r0 == 0) {
0x00077e68 beq.w 0x77b84 | goto label_9;
| }
0x00077e6c bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00077e70 b 0x77e16 | goto label_23;
| label_70:
0x00077e72 str r3, [sp, 0x1c] | var_1ch = r3;
0x00077e74 bl 0x2a5a4 | fcn_0002a5a4 (r0);
0x00077e78 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00077e7a b 0x77dec | goto label_24;
| label_68:
0x00077e7c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00077e7e cmp r3, 0 |
| if (r3 != 0) {
0x00077e80 bne.w 0x77c18 | goto label_25;
| }
| do {
| label_27:
0x00077e84 mov.w fp, 0xa |
0x00077e88 b 0x77a66 | goto label_21;
| label_67:
0x00077e8a ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077e8c mov r1, fp | r1 = fp;
0x00077e8e ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x00077e90 cmp r2, 2 |
| if (r2 == 2) {
0x00077e92 beq 0x77ec8 | goto label_72;
| }
0x00077e94 bl 0x6683c | fcn_0006683c (r0, r1);
0x00077e98 b 0x77d0e | goto label_26;
| label_50:
0x00077e9a blx 0x6430 | fcn_00006430 ();
| label_66:
0x00077e9e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00077ea0 cmp r3, 0 |
0x00077ea2 beq 0x77e84 |
| } while (r3 == 0);
0x00077ea4 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077ea6 ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x00077ea8 cmp r2, 2 |
| if (r2 != 2) {
0x00077eaa beq 0x77ed6 |
| label_64:
0x00077eac mov r1, fp | r1 = fp;
0x00077eae bl 0x6683c | fcn_0006683c (r0, r1);
0x00077eb2 b 0x77e84 | goto label_27;
| label_37:
0x00077eb4 ldr.w sl, [r4, 0x30] | sl = *((r4 + 0x30));
| if (r7 != 0) {
0x00077eb8 cbz r7, 0x77ec4 |
0x00077eba mov.w fp, 0 |
0x00077ebe str.w fp, [sp, 0x20] | __asm ("str.w fp, [var_20h]");
0x00077ec2 b 0x778ca | goto label_28;
| }
0x00077ec4 str r7, [sp, 0x20] | var_20h = r7;
0x00077ec6 b 0x77a30 | goto label_29;
| label_72:
0x00077ec8 bl 0x76524 | fcn_00076524 (r0, r1, r2);
0x00077ecc ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077ece mov r1, fp | r1 = fp;
0x00077ed0 bl 0x6683c | fcn_0006683c (r0, r1);
0x00077ed4 b 0x77d0e | goto label_26;
| }
0x00077ed6 mov r1, fp | r1 = fp;
0x00077ed8 bl 0x76524 | fcn_00076524 (r0, r1, r2);
0x00077edc ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00077ede mov r1, fp | r1 = fp;
0x00077ee0 bl 0x6683c | fcn_0006683c (r0, r1);
0x00077ee4 b 0x77e84 | goto label_27;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7802c */
| #include <stdint.h>
|
; (fcn) fcn.0007802c () | void fcn_0007802c (arithmetic x, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, int16_t arg_12ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_40h;
| int32_t var_0h;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int32_t var_7ch_2;
| int16_t var_84h;
| int16_t var_ech;
| int16_t var_f0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007802c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00078030 mov r6, r2 | r6 = r2;
0x00078032 sub sp, 0xf4 |
0x00078034 ldr.w r2, [pc, 0x914] |
0x00078038 mov r4, r0 | r4 = r0;
0x0007803a mov r8, r3 | r8 = r3;
0x0007803c ldr r0, [sp, 0x118] | r0 = *(x);
0x0007803e mov.w fp, 8 |
0x00078042 ldr.w r3, [pc, 0x90c] | r3 = *(0x78952);
0x00078046 add r2, pc | r2 = 0xf0996;
0x00078048 strd r0, r1, [sp, 8] | __asm ("strd r0, r1, [var_8h]");
0x0007804c ldr r3, [r2, r3] |
0x0007804e movs r2, 0 | r2 = 0;
0x00078050 ldr r3, [r3] | r3 = *(0xf0996);
0x00078052 str r3, [sp, 0xec] | var_ech = r3;
0x00078054 mov.w r3, 0 | r3 = 0;
0x00078058 str r2, [sp, 0x68] | var_68h = r2;
0x0007805a ldr r2, [sp, 0x124] | r2 = *(arg_124h);
0x0007805c ldrb.w r3, [r4, 0x2e] | r3 = *((r4 + 0x2e));
0x00078060 str r2, [sp, 0x18] | var_18h = r2;
0x00078062 ldr r2, [sp, 0x128] | r2 = *(arg_128h);
0x00078064 str r2, [sp, 0x14] | var_14h = r2;
0x00078066 ldr r2, [sp, 0x12c] | r2 = *(arg_12ch);
0x00078068 str r2, [sp, 0x10] | var_10h = r2;
0x0007806a cmp r3, 0 |
| if (r3 != 0) {
0x0007806c bne.w 0x781e4 | goto label_9;
| }
0x00078070 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
| if (r3 == 0) {
0x00078074 cbnz r3, 0x7808c |
0x00078076 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00078078 movs r2, 1 | r2 = 1;
0x0007807a movs r3, 0xa | r3 = 0xa;
0x0007807c mov r1, r2 | r1 = r2;
0x0007807e ldr r5, [r0] | r5 = *(r0);
0x00078080 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00078082 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00078084 mov fp, r0 |
0x00078086 cmp r0, 0 |
| if (r0 != 0) {
0x00078088 bne.w 0x781ac | goto label_4;
| }
| }
0x0007808c mov.w sl, 1 | sl = 1;
0x00078090 strb.w sl, [r4, 0x2d] | *((r4 + 0x2d)) = sl;
0x00078094 cmp r6, 0 |
| if (r6 != 0) {
0x00078096 bne.w 0x7823a | goto label_39;
| }
| label_3:
0x0007809a add r1, sp, 0x68 | r1 += var_68h;
0x0007809c mov r0, r4 | r0 = r4;
0x0007809e bl 0x74d68 | fcn_00074d68 (r0, r1);
0x000780a2 ldr r5, [sp, 0x68] | r5 = var_68h;
0x000780a4 mov fp, r0 |
0x000780a6 cmp r5, 0 |
| if (r5 == 0) {
0x000780a8 beq 0x781a8 | goto label_40;
| }
0x000780aa ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000780ac ldr r3, [r0] | r3 = *(r0);
0x000780ae ldr r2, [r3] | r2 = *(r3);
0x000780b0 cmp r2, 2 |
| if (r2 > 2) {
0x000780b2 ble 0x780c0 |
0x000780b4 movs r2, 0 | r2 = 0;
0x000780b6 str r2, [sp] | *(sp) = r2;
0x000780b8 movs r2, 0 | r2 = 0;
0x000780ba ldr r1, [r3, 0x48] | r1 = *((r3 + 0x48));
0x000780bc movs r3, 0 | r3 = 0;
0x000780be blx r1 | uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
0x000780c0 cmp.w fp, 0 |
| if (fp != 0) {
0x000780c4 bne.w 0x782d2 | goto label_41;
| }
| label_0:
0x000780c8 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x000780ca str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x000780cc cmp r3, 0 |
| if (r3 == 0) {
0x000780ce beq.w 0x782d8 | goto label_42;
| }
0x000780d2 ldrh.w r3, [r4, 0x42] | r3 = *((r4 + 0x42));
0x000780d6 and r2, r3, 0xfe00 | r2 = r3 & 0xfe00;
0x000780da lsls r3, r3, 0x10 | r3 <<= 0x10;
0x000780dc and r3, r3, 0x10000 | r3 &= 0x10000;
0x000780de adds r3, 0x80 | r3 += 0x80;
0x000780e0 orrs r3, r2 | r3 |= r2;
0x000780e2 ldr r2, [sp, 0x120] | r2 = *(arg_120h);
0x000780e4 str r3, [sp, 0x30] | var_30h = r3;
0x000780e6 cmp r2, r3 |
| if (r2 != r3) {
0x000780e8 bne.w 0x78262 | goto label_43;
| }
0x000780ec ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000780ee ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x000780f0 ldr r2, [r3] | r2 = *(r3);
0x000780f2 ldr r3, [r2, 0x60] | r3 = *((r2 + 0x60));
0x000780f4 str r2, [sp, 0x38] | var_38h = r2;
0x000780f6 cmp r1, r3 |
| if (r1 < r3) {
0x000780f8 bls.w 0x78362 | goto label_44;
| }
0x000780fc ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000780fe movs r5, 1 | r5 = 1;
0x00078100 str r6, [sp, 0x20] | var_20h = r6;
0x00078102 add.w r7, r2, 0x68 | r7 = r2 + 0x68;
0x00078106 mov.w fp, 0 |
0x0007810a mov sb, r4 | sb = r4;
0x0007810c mov r6, r1 | r6 = r1;
0x0007810e str r3, [sp, 0x2c] | var_2ch = r3;
0x00078110 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch_2]");
| do {
0x00078114 ldr r4, [r7] | r4 = *(r7);
0x00078116 cmp r4, r6 |
| if (r4 <= r6) {
0x00078118 blo.w 0x78290 | goto label_45;
| }
| label_6:
0x0007811c adds r5, 1 | r5++;
0x0007811e adds r7, 4 | r7 += 4;
0x00078120 cmp r5, 5 |
0x00078122 bne 0x78114 |
| } while (r5 != 5);
0x00078124 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00078126 mov r2, r6 | r2 = r6;
0x00078128 ldr.w sl, [sp, 0x1c] | sl = var_1ch_2;
0x0007812c mov r4, sb | r4 = sb;
0x0007812e str r6, [sp, 0x1c] | var_1ch_2 = r6;
0x00078130 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x00078132 ldr r6, [sp, 0x20] | r6 = var_20h;
0x00078134 cmp r3, r2 |
0x00078136 itt hs |
| if (r3 < r2) {
0x00078138 movhs r3, 0 | r3 = 0;
| }
| if (r3 < r2) {
0x0007813a strhs r3, [sp, 0x20] | var_20h = r3;
| }
| if (r3 <= r2) {
0x0007813c blo.w 0x7836e | goto label_46;
| }
| label_23:
0x00078140 cmp.w fp, 5 |
| if (fp == 5) {
0x00078144 beq.w 0x78366 | goto label_13;
| }
0x00078148 clz r5, fp | r5 &= fp;
0x0007814c lsrs r5, r5, 5 | r5 >>= 5;
0x0007814e cmp r6, 0 |
0x00078150 ite eq |
| if (r6 != 0) {
0x00078152 moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x00078154 andne r3, r5, 1 | r3 = r5 & 1;
| }
0x00078158 cmp r3, 0 |
| if (r3 == 0) {
0x0007815a beq.w 0x78472 | goto label_29;
| }
| label_11:
0x0007815e ldr r3, [sp, 0x38] | r3 = var_38h;
0x00078160 ldr r2, [r3, 0x60] | r2 = *((r3 + 0x60));
0x00078162 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x00078164 cmp r2, r3 |
| if (r2 >= r3) {
0x00078166 bhs.w 0x782fa | goto label_47;
| }
0x0007816a mov.w sl, 1 | sl = 1;
0x0007816e mov.w fp, 5 |
0x00078172 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00078174 bl 0x26dbc | fcn_00026dbc (r0);
0x00078176 invalid |
| label_8:
0x00078178 ldr r2, [sp, 0x14] | r2 = var_14h;
| if (r2 != 0) {
0x0007817a cbz r2, 0x78180 |
0x0007817c ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0007817e str r3, [r2] | *(r2) = r3;
| }
0x00078180 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x00078182 cbz r3, 0x7818e |
0x00078184 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00078186 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00078188 ldr r3, [r3] | r3 = *(r3);
0x0007818a ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x0007818c str r3, [r2] | *(r2) = r3;
| }
| label_10:
0x0007818e ldr r5, [sp, 0x68] | r5 = var_68h;
| if (r5 != 0) {
| label_5:
0x00078190 cbz r5, 0x7819e |
| label_7:
0x00078192 movs r2, 0x30 | r2 = 0x30;
0x00078194 movs r1, 0 | r1 = 0;
0x00078196 add.w r0, r4, 0x34 | r0 = r4 + 0x34;
0x0007819a blx 0x62ec | fcn_000062ec ();
| }
0x0007819e ldrb.w r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000781a2 cmp r3, 0 |
| if (r3 == 0) {
0x000781a4 beq 0x78228 | goto label_48;
| }
0x000781a6 b 0x7820a | goto label_49;
| label_40:
0x000781a8 cmp r0, 0 |
| if (r0 == 0) {
0x000781aa beq 0x780c8 | goto label_0;
| }
| label_4:
0x000781ac ldrb.w r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
| if (r3 != 0) {
0x000781b0 cbnz r3, 0x78206 | goto label_50;
| }
0x000781b2 ldrb.w r2, [r4, 0x2d] | r2 = *((r4 + 0x2d));
| if (r2 == 0) {
0x000781b6 cbz r2, 0x781e4 | goto label_9;
| }
0x000781b8 ldrb.w r2, [r4, 0x2b] | r2 = *((r4 + 0x2b));
0x000781bc mov.w sl, 1 | sl = 1;
0x000781c0 cmp r2, 0 |
| if (r2 != 0) {
0x000781c2 bne.w 0x782ee | goto label_51;
| }
| label_1:
0x000781c6 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000781c8 movs r2, 1 | r2 = 1;
0x000781ca mov r1, r2 | r1 = r2;
0x000781cc ldr r3, [r0] | r3 = *(r0);
0x000781ce ldr r5, [r3, 0x38] | r5 = *((r3 + 0x38));
0x000781d0 movs r3, 9 | r3 = 9;
0x000781d2 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_2:
0x000781d4 movs r3, 0 | r3 = 0;
0x000781d6 strb.w r3, [r4, 0x2d] | *((r4 + 0x2d)) = r3;
| do {
0x000781da cmp.w sl, 0 |
0x000781de it eq |
| if (sl != 0) {
0x000781e0 moveq fp, 5 |
| }
| label_9:
0x000781e4 ldr.w r2, [pc, 0x76c] |
0x000781e8 ldr.w r3, [pc, 0x764] | r3 = *(0x78950);
0x000781ec add r2, pc | r2 = 0xf0b44;
0x000781ee ldr r3, [r2, r3] | r3 = *(0xf0b44);
0x000781f0 ldr r2, [r3] | r2 = *(0xf0b44);
0x000781f2 ldr r3, [sp, 0xec] | r3 = var_ech;
0x000781f4 eors r2, r3 | r2 ^= r3;
0x000781f6 mov.w r3, 0 | r3 = 0;
0x000781f8 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x000781fa bne.w 0x78948 | goto label_52;
| }
0x000781fe mov r0, fp | r0 = fp;
0x00078200 add sp, 0xf4 |
0x00078202 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_50:
0x00078206 mov.w sl, 1 | sl = 1;
| label_49:
0x0007820a ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
| if (r1 == 0) {
0x0007820e cbnz r1, 0x7821c |
0x00078210 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00078212 movs r3, 9 | r3 = 9;
0x00078214 movs r2, 1 | r2 = 1;
0x00078216 ldr r5, [r0] | r5 = *(r0);
0x00078218 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x0007821a blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| }
0x0007821c movs r3, 0 | r3 = 0;
0x0007821e strb.w r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00078222 str r3, [r4, 0x68] | *((r4 + 0x68)) = r3;
0x00078224 strb.w r3, [r4, 0x2f] | *((r4 + 0x2f)) = r3;
0x00078226 adds r0, 0x2f | r0 += 0x2f;
| label_48:
0x00078228 ldrb.w r3, [r4, 0x2d] | r3 = *((r4 + 0x2d));
0x0007822c cmp r3, 0 |
0x0007822e beq 0x781da |
| } while (r3 == 0);
0x00078230 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00078234 cmp r3, 0 |
| if (r3 == 0) {
0x00078236 beq 0x781c6 | goto label_1;
| }
0x00078238 b 0x781d4 | goto label_2;
| label_39:
0x0007823a ldr r2, [sp, 8] | r2 = var_8h;
0x0007823c movs r3, 0 | r3 = 0;
0x0007823e mov r1, r8 | r1 = r8;
0x00078240 mov r0, r4 | r0 = r4;
0x00078242 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00078246 bl 0x2b5e0 | r0 = fcn_0002b5e0 (r0, r1, r2, r3, r4);
0x0007824a mov fp, r0 |
| if (r0 == 0) {
0x0007824c cbnz r0, 0x78254 |
0x0007824e strb.w sl, [r4, 0x2c] | *((r4 + 0x2c)) = sl;
0x00078252 b 0x7809a | goto label_3;
| }
0x00078254 cmp r0, 5 |
| if (r0 != 5) {
0x00078256 bne 0x781ac | goto label_4;
| }
0x00078258 mov.w r8, 0 | r8 = 0;
0x0007825c mov sl, r8 | sl = r8;
0x0007825e mov r6, r8 | r6 = r8;
0x00078260 b 0x7809a | goto label_3;
| label_43:
0x00078262 ldr.w r1, [pc, 0x6f4] |
0x00078266 movw r3, 0x15f |
0x0007826a ldr.w r2, [pc, 0x6f0] |
0x0007826e movt r3, 1 | r3 = 0x1015f;
0x00078272 movs r0, 0xb | r0 = 0xb;
0x00078274 mov.w sl, 1 | sl = 1;
0x00078278 add r1, pc | r1 = 0xf0bd6;
0x0007827a mov.w fp, 0xb |
0x0007827e adds r1, 0x14 | r1 += 0x14;
0x00078280 add r2, pc | r2 = 0xf0be2;
0x00078282 str r1, [sp] | *(sp) = r1;
0x00078284 ldr.w r1, [pc, 0x6d8] |
0x00078288 add r1, pc | r1 = 0xf0bec;
0x0007828a bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0007828e b 0x78190 | goto label_5;
| label_45:
0x00078290 movs r3, 1 | r3 = 1;
0x00078292 add.w sl, r5, 3 | sl = r5 + 3;
0x00078296 str r3, [sp] | *(sp) = r3;
0x00078298 mov r1, r8 | r1 = r8;
0x0007829a ldr r2, [sp, 8] | r2 = var_8h;
0x0007829c mov r3, sl | r3 = sl;
0x0007829e mov r0, sb | r0 = sb;
0x000782a0 bl 0x2b5e0 | r0 = fcn_0002b5e0 (r0, r1, r2, r3, r4);
0x000782a4 mov fp, r0 |
0x000782a6 cmp r0, 0 |
| if (r0 != 0) {
0x000782a8 bne 0x78354 | goto label_53;
| }
0x000782aa cmp r5, 1 |
0x000782ac ite eq |
| if (r5 != 1) {
0x000782ae moveq r2, r6 | r2 = r6;
| }
| if (r5 == 1) {
0x000782b0 movne r2, -1 | r2 = -1;
| }
0x000782b4 str r2, [r7] | *(r7) = r2;
0x000782b6 ldrb.w r2, [sb, 0x2b] | r2 = *((sb + 0x2b));
0x000782ba cmp r2, 0 |
| if (r2 != 0) {
0x000782bc bne.w 0x7811c | goto label_6;
| }
0x000782c0 ldr.w r0, [sb, 4] | r0 = *((sb + 4));
0x000782c4 mov r1, sl | r1 = sl;
0x000782c6 movs r3, 9 | r3 = 9;
0x000782c8 movs r2, 1 | r2 = 1;
0x000782ca ldr r4, [r0] | r4 = *(r0);
0x000782cc ldr r4, [r4, 0x38] | r4 = *((r4 + 0x38));
0x000782ce blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000782d0 b 0x7811c | goto label_6;
| label_41:
0x000782d2 mov.w sl, 1 | sl = 1;
0x000782d6 b 0x78192 | goto label_7;
| label_42:
0x000782d8 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000782da ldr r3, [r3] | r3 = *(r3);
0x000782dc ldr r2, [r3, 0x60] | r2 = *((r3 + 0x60));
| if (r6 != 0) {
0x000782de cbnz r6, 0x782f4 | goto label_54;
| }
0x000782e0 str r6, [sp, 0x20] | var_20h = r6;
| do {
| label_12:
0x000782e2 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000782e4 mov.w fp, 0 |
0x000782e8 bl 0x26dbc | fcn_00026dbc (r0);
0x000782ec b 0x78178 | goto label_8;
| label_51:
0x000782ee strb.w r3, [r4, 0x2d] | *((r4 + 0x2d)) = r3;
0x000782f2 b 0x781e4 | goto label_9;
| label_54:
0x000782f4 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x000782f6 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x000782f8 str r3, [sp, 0x20] | var_20h = r3;
| label_47:
0x000782fa cmp r6, 1 |
0x000782fc ble 0x782e2 |
| } while (r6 <= 1);
0x000782fe ldr.w r3, [pc, 0x664] |
0x00078302 add r3, pc |
0x00078304 ldr.w r3, [r3, 0xd0] | r3 = *(0xf0d3c);
0x00078308 cmp r3, 0 |
| if (r3 != 0) {
0x0007830a bne.w 0x787e8 | goto label_55;
| }
0x0007830e bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 == 0) {
0x00078312 cbnz r0, 0x78322 |
0x00078314 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x00078318 cbnz r0, 0x78322 | goto label_56;
| }
| label_25:
0x0007831a add r1, sp, 0x78 | r1 += var_78h;
0x0007831c movs r0, 4 | r0 = 4;
0x0007831e bl 0x62714 | fcn_00062714 (r0, r1);
| }
| label_56:
0x00078322 movs r3, 4 | r3 = 4;
0x00078324 ldr r2, [sp, 8] | r2 = var_8h;
0x00078326 mov r1, r8 | r1 = r8;
0x00078328 mov r0, r4 | r0 = r4;
0x0007832a str r3, [sp] | *(sp) = r3;
0x0007832c bl 0x2b5e0 | r0 = fcn_0002b5e0 (r0, r1, r2, r3, r4);
0x00078330 mov fp, r0 |
0x00078332 cmp r0, 0 |
| if (r0 == 0) {
0x00078334 beq.w 0x787c0 | goto label_57;
| }
0x00078338 sub.w r5, r0, 5 | r5 = r0 - 5;
0x0007833c mov.w sl, 1 | sl = 1;
0x00078340 clz r5, r5 | r5 &= r5;
0x00078344 lsrs r5, r5, 5 | r5 >>= 5;
| label_14:
0x00078346 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00078348 bl 0x26dbc | fcn_00026dbc (r0);
0x0007834a ldc2 p13, c2, [r8, -0]! | __asm ("ldc2 p13, c2, [r8, -0]!");
| if (r5 == r5) {
0x0007834e beq.w 0x7818e | goto label_10;
| }
0x00078352 b 0x78178 | goto label_8;
| label_53:
0x00078354 cmp r0, 5 |
| if (r0 != 5) {
0x00078356 bne.w 0x78894 | goto label_58;
| }
0x0007835a mov r6, r4 | r6 = r4;
0x0007835c mov.w r8, 0 | r8 = 0;
0x00078360 b 0x7811c | goto label_6;
| label_44:
0x00078362 movs r3, 0 | r3 = 0;
0x00078364 str r3, [sp, 0x20] | var_20h = r3;
| label_13:
0x00078366 cmp r6, 0 |
| if (r6 != 0) {
0x00078368 bne.w 0x7815e | goto label_11;
| }
0x0007836c b 0x782e2 | goto label_12;
| label_46:
0x0007836e ldr.w r3, [pc, 0x5f8] |
0x00078372 ldr.w r2, [sb, 0x44] | r2 = *((sb + 0x44));
0x00078376 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00078378 add r3, pc |
0x0007837a ldr.w r3, [r3, 0xd0] | r3 = *(0xf0db6);
0x0007837e str r2, [sp, 0x58] | var_58h = r2;
0x00078380 adds r2, 0x21 | r2 += 0x21;
0x00078382 lsrs r2, r2, 0xc | r2 >>= 0xc;
0x00078384 ldr.w sb, [r1, 0x60] | sb = *((r1 + 0x60));
0x00078388 adds r5, r2, 1 | r5 = r2 + 1;
0x0007838a str r2, [sp, 0x4c] | var_4ch = r2;
0x0007838c cmp r3, 0 |
| if (r3 != 0) {
0x0007838e bne.w 0x78800 | goto label_59;
| }
0x00078392 bl 0x25da0 | r0 = fcn_00025da0 ();
0x00078396 cmp r0, 0 |
| if (r0 != 0) {
0x00078398 bne.w 0x787ee | goto label_60;
| }
0x0007839c bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000783a0 cmp r0, 0 |
| if (r0 != 0) {
0x000783a2 bne.w 0x787ee | goto label_60;
| }
0x000783a4 strh r4, [r4, 0x10] | *((r4 + 0x10)) = r4;
| label_26:
0x000783a6 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000783a8 movs r1, 0 | r1 = 0;
0x000783aa ldr r2, [sp, 0x58] | r2 = var_58h;
0x000783ac add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000783b0 adds r2, 0xe | r2 += 0xe;
0x000783b2 add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x000783b6 lsls r7, r2, 1 | r7 = r2 << 1;
0x000783b8 mov r0, r7 | r0 = r7;
0x000783ba bl 0x28c3c | fcn_00028c3c (r0);
0x000783be str r0, [sp, 0x20] | var_20h = r0;
0x000783c0 cmp r0, 0 |
| if (r0 == 0) {
0x000783c2 beq.w 0x787ee | goto label_60;
| }
0x000783c6 mov r2, r7 | r2 = r7;
0x000783c8 movs r1, 0 | r1 = 0;
0x000783ca blx 0x62ec | fcn_000062ec ();
0x000783ce ldr r3, [sp, 0x20] | r3 = var_20h;
0x000783d0 str r5, [r3, 4] | *((r3 + 4)) = r5;
0x000783d2 ldr.w r3, [pc, 0x598] |
0x000783d6 add r3, pc |
0x000783d8 ldr.w r3, [r3, 0xd0] | r3 = *(0xf0e18);
0x000783dc cmp r3, 0 |
| if (r3 != 0) {
0x000783de bne.w 0x787e2 | goto label_61;
| }
0x000783e2 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000783e6 cmp r0, 0 |
| if (r0 != 0) {
0x000783e8 bne.w 0x78834 | goto label_62;
| }
0x000783ec bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000783f0 cmp r0, 0 |
| if (r0 != 0) {
0x000783f2 bne.w 0x78834 | goto label_62;
| }
| label_24:
0x000783f6 ldr r0, [sp, 0x58] | r0 = var_58h;
0x000783f8 movs r1, 0 | r1 = 0;
0x000783fa cmp.w r0, 0x1000 |
0x000783fe it hs |
| if (r0 < 0x1000) {
0x00078400 movhs r0, 0x1000 | r0 = 0x1000;
| }
0x00078404 lsls r0, r0, 1 | r0 <<= 1;
0x00078406 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007840a mov r7, r0 | r7 = r0;
0x0007840c cmp r0, 0 |
| if (r0 == 0) {
0x0007840e beq.w 0x78834 | goto label_62;
| }
0x00078412 add.w r2, sb, 0x22 | r2 = sb + 0x22;
0x00078416 lsrs r2, r2, 0xc | r2 >>= 0xc;
0x00078418 cmp r5, r2 |
| if (r5 <= r2) {
0x0007841a ble.w 0x785a0 | goto label_63;
| }
0x0007841e ldr r1, [sp, 0x20] | r1 = var_20h;
0x00078420 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00078424 str.w sl, [sp, 0x40] | __asm ("str.w sl, [var_40h_2]");
0x00078428 add.w sb, sp, 0x6c | sb += var_6ch;
0x0007842c str r2, [sp, 0x34] | var_34h = r2;
0x0007842e strd r6, r8, [sp, 0x44] | __asm ("strd r6, r8, [var_48h]");
0x00078432 add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
0x00078436 str r3, [sp, 0x54] | var_54h = r3;
0x00078438 add r3, sp, 0x78 | r3 += var_78h;
0x0007843a str r3, [sp, 0x3c] | var_3ch = r3;
0x0007843c add r3, sp, 0x70 | r3 += var_70h;
0x0007843e mov sl, r3 | sl = r3;
| label_17:
0x00078440 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00078442 mov r0, r4 | r0 = r4;
0x00078444 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00078446 bl 0x338e8 | r0 = fcn_000338e8 (r0, r1, r2);
0x0007844a mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x0007844c cbz r0, 0x7847e | goto label_64;
| }
0x0007844e mov fp, r0 |
0x00078450 mov r0, r7 | r0 = r7;
0x00078452 ldr.w sl, [sp, 0x40] | sl = var_40h_2;
0x00078456 ldrd r6, r8, [sp, 0x44] | __asm ("ldrd r6, r8, [var_48h]");
0x0007845a bl 0x26dbc | fcn_00026dbc (r0);
0x0007845e ldr r0, [sp, 0x20] | r0 = var_20h;
0x00078460 bl 0x26dbc | fcn_00026dbc (r0);
0x00078464 movs r3, 0 | r3 = 0;
0x00078466 str r3, [sp, 0x20] | var_20h = r3;
| label_19:
0x00078468 cmp.w fp, 5 |
| if (fp == 5) {
0x0007846c beq.w 0x78366 | goto label_13;
| }
| label_28:
0x00078470 movs r5, 0 | r5 = 0;
| label_29:
0x00078472 cmp.w fp, 0 |
0x00078476 it ne |
| if (fp == 0) {
0x00078478 orrne sl, sl, 1 | sl |= 1;
| }
0x0007847a lsrs r1, r0, 8 | r1 = r0 >> 8;
0x0007847c b 0x78346 | goto label_14;
| label_64:
0x0007847e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00078480 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00078482 ldrd r8, r2, [sp, 0x7c] | __asm ("ldrd r8, r2, [var_7ch]");
0x00078486 cmp r3, r1 |
0x00078488 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007848a itete ne |
| if (r3 == r1) {
0x0007848c ldrne r3, [sp, 0x78] | r3 = var_78h;
| }
| if (r3 != r1) {
0x0007848e ldreq r3, [sp, 0x58] | r3 = var_58h;
| }
| if (r3 == r1) {
0x00078490 subne r3, r3, r8 | r3 -= r8;
| }
| if (r3 != r1) {
0x00078492 lsleq r0, r1, 0xc | r0 = r1 << 0xc;
| }
0x00078494 sub.w fp, r3, r2 |
0x00078496 lsrs r2, r0, 0xc | r2 = r0 >> 0xc;
0x00078498 it ne |
| if (r2 != r0) {
0x0007849a asrne fp, r3, 2 | __asm ("asrne fp, r3, 2");
| }
0x0007849e ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x000784a0 cmp.w fp, 0 |
0x000784a4 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000784a8 lsl.w r3, r3, 2 | r3 <<= 2;
0x000784ac add.w r3, r3, 8 | r3 += 8;
0x000784b0 add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x000784b4 add.w r2, r2, 1 | r2++;
0x000784b8 str r2, [sp, 0x5c] | var_5ch = r2;
0x000784ba add r3, r1 | r3 += r1;
0x000784bc str r3, [sp, 0x50] | var_50h = r3;
| if (fp <= 0) {
0x000784be ble.w 0x7887e | goto label_65;
| }
0x000784c2 subs r2, r3, 2 | r2 = r3 - 2;
0x000784c4 movs r3, 0 | r3 = 0;
| do {
0x000784c6 strh r3, [r2, 2]! | *((r2 += 2)) = r3;
0x000784ca adds r3, 1 | r3++;
0x000784cc cmp r3, fp |
0x000784ce bne 0x784c6 |
| } while (r3 != fp);
0x000784d0 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000784d2 add r0, sp, 0x84 | r0 += var_84h;
0x000784d4 movs r2, 0x68 | r2 = 0x68;
0x000784d6 movs r1, 0 | r1 = 0;
0x000784d8 str r0, [sp, 0x28] | var_28h = r0;
0x000784da str r3, [sp, 0x64] | var_64h = r3;
0x000784dc blx 0x62ec | fcn_000062ec ();
0x000784e0 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000784e2 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x000784e6 mov fp, r6 |
0x000784e8 mov r6, sb | r6 = sb;
0x000784ea str r4, [sp, 0x60] | var_60h = r4;
0x000784ec mov sb, r3 | sb = r3;
| label_15:
0x000784ee movs r3, 1 | r3 = 1;
0x000784f0 mov r4, sb | r4 = sb;
0x000784f2 ands.w r5, fp, r3 | r5 = fp & r3;
0x000784f6 strd r3, sb, [sp, 0x6c] | __asm ("strd r3, sb, [var_70h]");
| if (r5 == fp) {
0x000784fa beq 0x78592 | goto label_66;
| }
0x000784fc ldr r4, [sp, 0x28] | r4 = var_28h;
0x000784fe movs r5, 0 | r5 = 0;
| do {
0x00078500 mov r3, sl | r3 = sl;
0x00078502 strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x00078506 adds r5, 1 | r5++;
0x00078508 ldrd r2, r1, [r4] | __asm ("ldrd r2, r1, [r4]");
0x0007850c mov r0, r8 | r0 = r8;
0x0007850e adds r4, 8 | r4 += 8;
0x00078510 bl 0x2563c | fcn_0002563c (r0, r1, r2, r3, r4, r5);
0x00078514 asr.w r3, fp, r5 | r3 = fp >> r5;
0x00078518 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
0x0007851a bmi 0x78500 |
| } while (r1 < r3);
0x0007851c ldrd r0, r4, [sp, 0x6c] | __asm ("ldrd r0, r4, [var_70h]");
| label_18:
0x00078520 add r3, sp, 0xf0 | r3 += var_f0h;
0x00078522 add.w fp, fp, 1 |
0x00078526 add.w r2, r3, r5, lsl 3 | r2 = r3 + (r5 << 3);
0x0007852a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007852c add.w sb, sb, 2 | sb += 2;
0x00078530 strd r0, r4, [r2, -0x6c] | __asm ("strd r0, r4, [var_84h]");
0x00078534 cmp fp, r3 |
| if (fp != r3) {
0x00078536 bne 0x784ee | goto label_15;
| }
0x00078538 adds r5, 1 | r5++;
0x0007853a ldr r4, [sp, 0x60] | r4 = var_60h;
0x0007853c cmp r5, 0xc |
0x0007853e mov fp, r3 |
0x00078540 mov sb, r6 | sb = r6;
| if (r5 > 0xc) {
0x00078542 bhi 0x78570 | goto label_67;
| }
| label_32:
0x00078544 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00078546 add.w r6, r3, r5, lsl 3 | r6 = r3 + (r5 << 3);
0x0007854a b 0x78554 |
| while (r2 >= r3) {
| label_16:
0x0007854c adds r5, 1 | r5++;
0x0007854e adds r6, 8 | r6 += 8;
0x00078550 cmp r5, 0xd |
| if (r5 == 0xd) {
0x00078552 beq 0x7856e | goto label_68;
| }
0x00078554 asr.w r3, fp, r5 | r3 = fp >> r5;
0x00078558 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
0x0007855a bpl 0x7854c |
| }
0x0007855c strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x00078560 mov r3, sl | r3 = sl;
0x00078562 ldrd r2, r1, [r6] | __asm ("ldrd r2, r1, [r6]");
0x00078566 mov r0, r8 | r0 = r8;
0x00078568 bl 0x2563c | fcn_0002563c (r0, r1, r2, r3, r4, r5);
0x0007856c b 0x7854c | goto label_16;
| label_68:
0x0007856e ldr r0, [sp, 0x6c] | r0 = var_6ch;
| label_67:
0x00078570 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00078572 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00078574 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x00078576 strd r0, r2, [r3, 0x14] | __asm ("strd r0, r2, [r3, 0x14]");
0x0007857a ldr r2, [sp, 0x50] | r2 = var_50h;
0x0007857c strd r2, r8, [r3, 0xc] | __asm ("strd r2, r8, [r3, 0xc]");
0x00078580 adds r3, 0x14 | r3 += 0x14;
0x00078582 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00078584 str r3, [sp, 0x54] | var_54h = r3;
0x00078586 cmp r1, r2 |
0x00078588 add.w r3, r2, 1 | r3 = r2 + 1;
0x0007858a lsls r1, r0, 0xc | r1 = r0 << 0xc;
| if (r1 > r0) {
0x0007858c ble 0x78596 |
0x0007858e str r3, [sp, 0x34] | var_34h = r3;
0x00078590 b 0x78440 | goto label_17;
| label_66:
0x00078592 movs r0, 1 | r0 = 1;
0x00078594 b 0x78520 | goto label_18;
| }
0x00078596 ldrd sl, r6, [sp, 0x40] | __asm ("ldrd sl, r6, [var_40h_2]");
0x0007859a mov r0, r7 | r0 = r7;
0x0007859c ldr.w r8, [sp, 0x48] | r8 = var_48h;
| label_63:
0x000785a0 bl 0x26dbc | fcn_00026dbc (r0);
0x000785a4 movs r3, 1 | r3 = 1;
0x000785a6 ldr r2, [sp, 8] | r2 = var_8h;
0x000785a8 str r3, [sp] | *(sp) = r3;
0x000785aa mov r1, r8 | r1 = r8;
0x000785ac movs r3, 3 | r3 = 3;
0x000785ae mov r0, r4 | r0 = r4;
0x000785b0 bl 0x2b5e0 | r0 = fcn_0002b5e0 (r0, r1, r2, r3, r4);
0x000785b4 mov fp, r0 |
0x000785b6 cmp r0, 0 |
| if (r0 != 0) {
0x000785b8 bne.w 0x78468 | goto label_19;
| }
0x000785bc ldr r2, [sp, 0x38] | r2 = var_38h;
0x000785be ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x000785c0 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000785c2 ldr r1, [r2, 0x60] | r1 = *((r2 + 0x60));
0x000785c4 ubfx r3, r3, 2, 2 | r3 = (r3 >> 2) & ((1 << 2) - 1);
0x000785c8 str r3, [sp, 0x48] | var_48h = r3;
0x000785ca str r1, [sp, 0x28] | var_28h = r1;
0x000785cc ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x000785ce str.w r1, [r2, 0x80] | __asm ("str.w r1, [r2, 0x80]");
| if (r3 == 0) {
0x000785d2 cbz r3, 0x78608 | goto label_69;
| }
0x000785d4 ldr r3, [r0] | r3 = *(r0);
0x000785d6 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000785d8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000785da blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x000785dc str r0, [sp, 0x3c] | var_3ch = r0;
0x000785de cbz r0, 0x78608 |
| while (r0 != 0) {
| label_22:
0x000785e0 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000785e2 ldr r3, [r0] | r3 = *(r0);
0x000785e4 cmp r3, 0 |
| if (r3 == 0) {
0x000785e6 beq.w 0x78942 | goto label_70;
| }
| label_34:
0x000785ea ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000785ec movs r2, 0 | r2 = 0;
0x000785ee movs r1, 0x25 | r1 = 0x25;
0x000785f0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x000785f2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000785f4 cmp r3, 0 |
| if (r3 == 0) {
0x000785f6 beq.w 0x78794 | goto label_35;
| }
| label_30:
0x000785fa mov fp, r3 |
| label_38:
0x000785fc ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00078600 cmp r3, 0 |
| if (r3 == 0) {
0x00078602 beq.w 0x787b0 | goto label_27;
| }
0x00078606 b 0x78468 | goto label_19;
| label_69:
0x00078608 ldrd r2, r1, [sp, 0x2c] | __asm ("ldrd r2, r1, [var_30h]");
0x0007860c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0007860e umull r1, r2, r2, r1 | r1:r2 = r2 * r1;
0x00078612 ldr r3, [r0] | r3 = *(r0);
0x00078614 strd r1, r2, [sp, 0x70] | __asm ("strd r1, r2, [var_70h]");
| if (r3 != 0) {
0x00078618 cbz r3, 0x78624 |
0x0007861a ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0007861c movs r2, 0 | r2 = 0;
0x0007861e movs r1, 0x27 | r1 = 0x27;
0x00078620 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x00078622 ldr r0, [r4, 4] | r0 = *((r4 + 4));
| }
0x00078624 ldr r3, [r0] | r3 = *(r0);
0x00078626 add r1, sp, 0x78 | r1 += var_78h;
0x00078628 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0007862a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0007862c str r0, [sp, 0x3c] | var_3ch = r0;
0x0007862e cmp r0, 0 |
0x00078630 bne 0x785e0 |
| }
0x00078632 ldr r2, [sp, 0x78] | r2 = var_78h;
0x00078634 ldr r5, [sp, 0x70] | r5 = var_70h;
0x00078636 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x00078638 ldr r0, [sp, 0x74] | r0 = var_74h;
0x0007863a cmp r2, r5 |
0x0007863c sbcs.w r3, r1, r0 | __asm ("sbcs.w r3, r1, r0");
| if (r2 < r5) {
0x00078640 bge 0x7866e |
0x00078642 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x00078644 adds.w r2, r2, 0x10000 | r2 += 0x10000;
0x00078648 ldr r7, [sp, 0x30] | r7 = var_30h;
0x0007864a adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0007864e umull r3, r7, r3, r7 | r3:r7 = r3 * r7;
0x00078652 adds r3, r3, r2 | r3 += r2;
0x00078654 adc.w r7, r7, r1 | __asm ("adc.w r7, r7, r1");
0x00078658 cmp r3, r5 |
0x0007865a sbcs r7, r0 | __asm ("sbcs r7, r0");
| if (r3 < r5) {
0x0007865c blt.w 0x788f8 | goto label_71;
| }
0x00078660 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00078662 ldr r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x00078664 cbz r3, 0x7866e | goto label_72;
| }
0x00078666 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00078668 add r2, sp, 0x70 | r2 += var_70h;
0x0007866a movs r1, 5 | r1 = 5;
0x0007866c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
| label_72:
0x0007866e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00078670 movs r7, 0 | r7 = 0;
0x00078672 str r4, [sp, 0x34] | var_34h = r4;
0x00078674 mov r4, fp | r4 = fp;
0x00078676 ldr.w fp, [sp, 0x20] | fp = var_20h;
0x0007867a adds r3, 0x18 | r3 += 0x18;
0x0007867c strd sl, r3, [sp, 0x40] | __asm ("strd sl, r3, [var_40h_2]");
| label_21:
0x00078680 ldrd lr, r3, [fp] | __asm ("ldrd lr, r3, [fp]");
0x00078684 subs.w sb, r3, 1 | sb = r3 - 1;
| if (sb < r3) {
0x00078688 bmi 0x78776 | goto label_73;
| }
0x0007868a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0007868e mov.w r5, -1 | r5 = -1;
0x00078692 mov sl, r4 | sl = r4;
0x00078694 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x00078698 add.w ip, fp, r3, lsl 2 |
| label_20:
0x0007869c ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x000786a0 ldr.w r4, [ip] | r4 = *(ip);
0x000786a4 cmp r4, r3 |
| if (r4 <= r3) {
0x000786a6 ble 0x786d8 | goto label_74;
| }
0x000786a8 ldr r2, [ip, -0x8] | r2 = *((ip - 0x8));
0x000786ac ldr fp, [ip, -0x4] | fp = *((ip - 0x4));
0x000786b0 add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x000786b4 b 0x786c0 |
| while (lr >= r1) {
0x000786b6 adds r3, 1 | r3++;
0x000786b8 cmp r4, r3 |
0x000786ba str r3, [ip, -0xc] | *((ip - 0xc)) = r3;
| if (r4 == r3) {
0x000786be beq 0x786d8 | goto label_74;
| }
0x000786c0 ldrh r0, [r2], 2 | r0 = *(r2);
| r2 += 2;
0x000786c4 ldr.w r1, [fp, r0, lsl 2] | offset_0 = r0 << 2;
| r1 = *((fp + offset_0));
0x000786c8 cmp lr, r1 |
0x000786ca bhs 0x786b6 |
| }
0x000786cc cmp r1, r5 |
| if (r1 < r5) {
0x000786ce bhs 0x786d8 |
0x000786d0 ldr.w r7, [ip, 4] | r7 = *((ip + 4));
0x000786d4 mov r5, r1 | r5 = r1;
0x000786d6 add r7, r0 | r7 += r0;
| }
| label_74:
0x000786d8 add.w sb, sb, -1 | sb += -1;
0x000786dc sub.w ip, ip, 0x14 |
0x000786e0 cmp.w sb, -1 |
| if (sb != -1) {
0x000786e4 bne 0x7869c | goto label_20;
| }
0x000786e6 ldr.w fp, [sp, 0x24] | fp = var_24h;
0x000786ea adds r3, r5, 1 | r3 = r5 + 1;
0x000786ec mov r4, sl | r4 = sl;
0x000786ee str.w r5, [fp] | __asm ("str.w r5, [fp]");
| if (r3 == r5) {
0x000786f2 beq.w 0x788b2 | goto label_75;
| }
0x000786f6 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000786f8 ldr.w r3, [r3, 0x128] | r3 = *((r3 + 0x128));
0x000786fc cmp r3, 0 |
| if (r3 != 0) {
0x000786fe bne.w 0x78806 | goto label_76;
| }
0x00078702 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00078704 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x00078706 cmp r3, r7 |
0x00078708 ite lo |
| if (r3 >= r7) {
0x0007870a movlo r3, 0 | r3 = 0;
| }
| if (r3 < r7) {
0x0007870c movhs r3, 1 | r3 = 1;
| }
0x0007870e cmp r2, r7 |
0x00078710 it lo |
| if (r2 >= r7) {
0x00078712 orrlo r3, r3, 1 | r3 |= 1;
| }
0x00078716 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00078718 cmp r2, r5 |
0x0007871a it lo |
| if (r2 >= r5) {
0x0007871c orrlo r3, r3, 1 | r3 |= 1;
| }
0x00078720 cmp r3, 0 |
| if (r3 != 0) {
0x00078722 bne 0x78680 | goto label_21;
| }
0x00078724 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00078726 subs r3, r7, 1 | r3 = r7 - 1;
0x00078728 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0007872a ldr.w sl, [sp, 0x30] | sl = var_30h;
0x0007872e ldr.w sb, [sp, 0x18] | sb = var_18h;
0x00078732 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x00078734 umull r3, r2, r3, r1 | r3:r2 = r3 * r1;
0x00078738 ldr r1, [r0] | r1 = *(r0);
0x0007873a adds r3, 0x38 | r3 += 0x38;
0x0007873c adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00078740 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x00078744 mov r2, sl | r2 = sl;
0x00078746 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00078748 mov r1, sb | r1 = sb;
0x0007874a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x0007874c cbnz r0, 0x7876a | goto label_77;
| }
0x0007874e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00078750 subs r5, 1 | r5--;
0x00078752 umull r5, ip, r5, sl | r5:ip = r5 * sl;
0x00078756 mov r2, sl | r2 = sl;
0x00078758 mov r1, sb | r1 = sb;
0x0007875a ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0007875c ldr r3, [r0] | r3 = *(r0);
0x0007875e strd r5, ip, [sp] | __asm ("strd r5, ip, [sp]");
0x00078762 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00078764 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00078766 cmp r0, 0 |
| if (r0 == 0) {
0x00078768 beq 0x78680 | goto label_21;
| }
| label_77:
0x0007876a mov fp, r4 |
0x0007876c ldr.w sl, [sp, 0x40] | sl = var_40h_2;
0x00078770 ldr r4, [sp, 0x34] | r4 = var_34h;
0x00078772 str r0, [sp, 0x3c] | var_3ch = r0;
0x00078774 b 0x785e0 | goto label_22;
| label_73:
0x00078776 mov fp, r4 |
0x00078778 ldr r4, [sp, 0x34] | r4 = var_34h;
0x0007877a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0007877c mov.w r3, -1 | r3 = -1;
0x00078780 ldr.w sl, [sp, 0x40] | sl = var_40h_2;
0x00078784 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00078786 str r3, [r2] | *(r2) = r3;
0x00078788 ldr r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x0007878a cbz r3, 0x78794 |
0x0007878c ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0007878e movs r2, 0 | r2 = 0;
0x00078790 movs r1, 0x25 | r1 = 0x25;
0x00078792 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
| label_35:
0x00078794 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00078796 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x00078798 ldr r3, [r3] | r3 = *(r3);
0x0007879a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0007879c cmp r3, r2 |
| if (r3 == r2) {
0x0007879e beq 0x7884c | goto label_78;
| }
| label_31:
0x000787a0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000787a2 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x000787a4 str r2, [r3, 0x60] | *((r3 + 0x60)) = r2;
0x000787a6 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x000787aa cmp r3, 0 |
| if (r3 != 0) {
0x000787ac bne.w 0x78366 | goto label_13;
| }
| label_27:
0x000787b0 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000787b2 movs r3, 9 | r3 = 9;
0x000787b4 movs r2, 1 | r2 = 1;
0x000787b6 movs r1, 3 | r1 = 3;
0x000787b8 ldr r5, [r0] | r5 = *(r0);
0x000787ba ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x000787bc blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000787be b 0x78140 | goto label_23;
| label_57:
0x000787c0 cmp r6, 3 |
0x000787c2 it ne |
| if (r6 == 3) {
0x000787c4 movne r5, 1 | r5 = 1;
| }
| if (r6 == 3) {
0x000787c6 beq 0x788c6 | goto label_79;
| }
| label_36:
0x000787c8 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x000787cc cmp r3, 0 |
| if (r3 != 0) {
0x000787ce bne.w 0x78346 | goto label_14;
| }
0x000787d2 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000787d4 movs r2, 4 | r2 = 4;
0x000787d6 movs r3, 9 | r3 = 9;
0x000787d8 mov r1, r2 | r1 = r2;
0x000787da ldr r6, [r0] | r6 = *(r0);
0x000787dc ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
0x000787de blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000787e0 b 0x78346 | goto label_14;
| label_61:
0x000787e2 dmb ish | __asm ("dmb ish");
0x000787e6 b 0x783f6 | goto label_24;
| label_55:
0x000787e8 dmb ish | __asm ("dmb ish");
0x000787ec b 0x7831a | goto label_25;
| label_60:
0x000787ee movs r0, 0 | r0 = 0;
0x000787f0 mov.w sl, 1 | sl = 1;
0x000787f4 bl 0x26dbc | fcn_00026dbc (r0);
0x000787f8 mov.w fp, 7 |
0x000787fc ldr r5, [sp, 0x68] | r5 = var_68h;
0x000787fe b 0x78190 | goto label_5;
| label_59:
0x00078800 dmb ish | __asm ("dmb ish");
0x00078804 b 0x783a6 | goto label_26;
| label_76:
0x00078806 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00078808 ldr r4, [sp, 0x34] | r4 = var_34h;
0x0007880a ldr.w sl, [sp, 0x40] | sl = var_40h_2;
0x0007880e ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00078812 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00078814 ldr r3, [r0] | r3 = *(r0);
0x00078816 cmp r2, 0 |
| if (r2 == 0) {
0x00078818 beq 0x788a2 | goto label_80;
| }
0x0007881a cmp r3, 0 |
| if (r3 == 0) {
0x0007881c beq 0x78918 | goto label_81;
| }
0x0007881e mov.w fp, 7 |
0x00078822 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00078824 movs r2, 0 | r2 = 0;
0x00078826 movs r1, 0x25 | r1 = 0x25;
0x00078828 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| label_33:
0x0007882a ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0007882e cmp r3, 0 |
| if (r3 == 0) {
0x00078830 beq 0x787b0 | goto label_27;
| }
0x00078832 b 0x78470 | goto label_28;
| label_62:
0x00078834 movs r0, 0 | r0 = 0;
0x00078836 mov.w fp, 7 |
0x0007883a bl 0x26dbc | fcn_00026dbc (r0);
0x0007883e ldr r0, [sp, 0x20] | r0 = var_20h;
0x00078840 bl 0x26dbc | fcn_00026dbc (r0);
0x00078844 movs r3, 0 | r3 = 0;
0x00078846 mov r5, r3 | r5 = r3;
0x00078848 str r3, [sp, 0x20] | var_20h = r3;
0x0007884a b 0x78472 | goto label_29;
| label_78:
0x0007884c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0007884e ldr r2, [r4, 0x48] | r2 = *((r4 + 0x48));
0x00078850 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00078852 ldr r1, [r0] | r1 = *(r0);
0x00078854 umull r2, r3, r2, r3 | r2:r3 = r2 * r3;
0x00078858 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0007885a blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007885c mov r3, r0 | r3 = r0;
0x0007885e cmp r0, 0 |
| if (r0 != 0) {
0x00078860 bne.w 0x785fa | goto label_30;
| }
0x00078864 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00078866 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00078868 cmp r3, 0 |
| if (r3 == 0) {
0x0007886a beq 0x787a0 | goto label_31;
| }
0x0007886c mov r1, r3 | r1 = r3;
0x0007886e ldr r3, [r0] | r3 = *(r0);
0x00078870 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00078872 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x00078874 mov r3, r0 | r3 = r0;
0x00078876 cmp r0, 0 |
| if (r0 != 0) {
0x00078878 bne.w 0x785fa | goto label_30;
| }
0x0007887c b 0x787a0 | goto label_31;
| label_65:
0x0007887e add r3, sp, 0x84 | r3 += var_84h;
0x00078880 movs r1, 0 | r1 = 0;
0x00078882 movs r2, 0x68 | r2 = 0x68;
0x00078884 mov r0, r3 | r0 = r3;
0x00078886 strd r1, r1, [sp, 0x6c] | __asm ("strd r1, r1, [var_70h]");
0x0007888a movs r5, 1 | r5 = 1;
0x0007888c str r3, [sp, 0x28] | var_28h = r3;
0x0007888e blx 0x62ec | fcn_000062ec ();
0x00078892 b 0x78544 | goto label_32;
| label_58:
0x00078894 movs r0, 0 | r0 = 0;
0x00078896 mov r4, sb | r4 = sb;
0x00078898 mov.w sl, 1 | sl = 1;
0x0007889a lsrs r1, r0, 8 | r1 = r0 >> 8;
0x0007889c bl 0x26dbc | fcn_00026dbc (r0);
0x000788a0 b 0x7818e | goto label_10;
| label_80:
0x000788a2 cmp r3, 0 |
| if (r3 == 0) {
0x000788a4 beq 0x78932 | goto label_82;
| }
0x000788a6 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000788a8 movs r1, 0x25 | r1 = 0x25;
0x000788aa mov.w fp, 9 |
0x000788ae blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x000788b0 b 0x7882a | goto label_33;
| label_75:
0x000788b2 mov fp, r4 |
0x000788b4 ldr r4, [sp, 0x34] | r4 = var_34h;
0x000788b6 ldr.w sl, [sp, 0x40] | sl = var_40h_2;
0x000788ba ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000788bc ldr r3, [r0] | r3 = *(r0);
0x000788be cmp r3, 0 |
| if (r3 != 0) {
0x000788c0 bne.w 0x785ea | goto label_34;
| }
0x000788c4 b 0x78794 | goto label_35;
| label_79:
0x000788c6 ldr r1, [sp, 0x78] | r1 = var_78h;
0x000788c8 mov r0, r4 | r0 = r4;
0x000788ca bl 0x2f13c | fcn_0002f13c (r0, r1);
0x000788ce ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000788d0 movs r2, 0 | r2 = 0;
0x000788d2 ldr r3, [r0] | r3 = *(r0);
0x000788d4 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000788d6 movs r3, 0 | r3 = 0;
0x000788d8 blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000788da sub.w r5, r0, 5 | r5 = r0 - 5;
0x000788de cmp r0, 0 |
0x000788e0 clz r5, r5 | r5 &= r5;
0x000788e4 mov fp, r0 |
0x000788e6 lsr.w r5, r5, 5 | r5 >>= 5;
0x000788ea it ne |
| if (r0 == 0) {
0x000788ec orrne sl, sl, 1 | sl |= 1;
| }
0x000788f0 it eq |
| if (r0 != 0) {
0x000788f2 orreq r5, r5, 1 | r5 |= 1;
| }
0x000788f6 b 0x787c8 | goto label_36;
| label_71:
0x000788f8 ldr r3, [pc, 0x74] |
0x000788fa movs r0, 0xb | r0 = 0xb;
0x000788fc ldr r2, [pc, 0x74] |
0x000788fe ldr r1, [pc, 0x78] |
0x00078900 add r3, pc | r3 = 0xf1274;
0x00078902 adds r3, 0x14 | r3 += 0x14;
0x00078904 add r2, pc | r2 = 0xf127c;
0x00078906 str r3, [sp] | *(sp) = r3;
0x00078908 add r1, pc | r1 = 0xf1286;
0x0007890a movw r3, 0xfa4a | r3 = 0xfa4a;
0x0007890e bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00078912 movs r3, 0xb | r3 = 0xb;
0x00078914 str r3, [sp, 0x3c] | var_3ch = r3;
0x00078916 b 0x785e0 | goto label_22;
| label_81:
0x00078918 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0007891c mov.w fp, 7 |
0x00078920 cmp r3, 0 |
| if (r3 == 0) {
0x00078922 beq.w 0x787b0 | goto label_27;
| }
| label_37:
0x00078926 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00078928 mov.w sl, 1 | sl = 1;
0x0007892c bl 0x26dbc | fcn_00026dbc (r0);
0x00078930 b 0x7818e | goto label_10;
| label_82:
0x00078932 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00078936 mov.w fp, 9 |
0x0007893a cmp r3, 0 |
| if (r3 == 0) {
0x0007893c beq.w 0x787b0 | goto label_27;
| }
0x00078940 b 0x78926 | goto label_37;
| label_70:
0x00078942 ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x00078946 b 0x785fc | goto label_38;
| label_52:
0x00078948 blx 0x6430 | fcn_00006430 ();
0x0007894c adds r2, r2, 5 | r2 += 5;
0x0007894e movs r7, r0 | r7 = r0;
0x00078950 lsls r4, r6, 8 | r4 = r6 << 8;
0x00078952 movs r0, r0 |
0x00078954 subs r4, r5, r6 | r4 = r5 - r6;
0x00078956 movs r7, r0 | r7 = r0;
0x00078958 subs r6, 8 | r6 -= 8;
0x0007895a movs r5, r0 | r5 = r0;
0x0007895c ldrh r4, [r6, 0x36] | r4 = *((r6 + 0x36));
0x0007895e movs r5, r0 | r5 = r0;
0x00078960 ldrh r0, [r2, 0x36] | r0 = *((r2 + 0x36));
0x00078962 movs r5, r0 | r5 = r0;
0x00078964 subs r2, r2, 6 | r2 -= 6;
0x00078966 movs r7, r0 | r7 = r0;
0x00078968 subs r4, r3, 4 | r4 = r3 - 4;
0x0007896a movs r7, r0 | r7 = r0;
0x0007896c subs r6, r7, 2 | r6 = r7 - 2;
0x0007896e movs r7, r0 | r7 = r0;
0x00078970 adds r7, 0x80 | r7 += 0x80;
0x00078972 movs r5, r0 | r5 = r0;
0x00078974 ldrh r0, [r6, 2] | r0 = *((r6 + 2));
0x00078976 movs r5, r0 | r5 = r0;
0x00078978 ldrh r0, [r2, 2] | r0 = *((r2 + 2));
0x0007897a movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x78fc4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00078fc4 () | void fcn_00078fc4 (int16_t arg_0h, int16_t arg_7ch, int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
0x00078fc4 ldmibhs r4!, {r0, r1, r2, r3, r4, r6, r7, fp, ip, sp, lr, pc} | __asm ("ldmibhs r4!, {r0, r1, r2, r3, r4, r6, r7, fp, ip, sp, lr, pc}");
0x00078fc8 ldr.w r3, [pc, 0x9b4] |
0x00078fcc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00078fd0 sub sp, 0x34 |
0x00078fd2 add r2, pc | r2 += pc;
0x00078fd4 ldr r5, [r0] | r5 = *(r0);
0x00078fd6 mov r4, r0 | r4 = r0;
0x00078fd8 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00078fda ldr r3, [r3] | r3 = *(0x79980);
0x00078fdc str r3, [sp, 0x2c] | var_2ch = r3;
0x00078fde mov.w r3, 0 | r3 = 0;
0x00078fe2 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
| if (r3 != 0) {
0x00078fe6 cbz r3, 0x78fec |
0x00078fe8 movs r3, 7 | r3 = 7;
0x00078fea str r3, [r0, 0x24] | *(arg_0hx24) = r3;
| }
0x00078fec ldr.w r6, [r4, 0xcc] | r6 = *((r4 + 0xcc));
| if (r6 == 0) {
0x00078ff0 cbz r6, 0x79006 | goto label_39;
| }
| do {
0x00078ff2 mov r0, r6 | r0 = r6;
0x00078ff4 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x00078ff6 cmp r6, 0 |
0x00078ff8 bne 0x78ff2 |
| } while (r6 != 0);
0x00078ffa bl 0x78f20 | fcn_00078f20 (r0);
0x00078ffe str.w r6, [r4, 0xcc] | __asm ("str.w r6, [r4, 0xcc]");
0x00079002 str.w r6, [r4, 0xd4] | __asm ("str.w r6, [r4, 0xd4]");
| label_39:
0x00079006 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00079008 cmp r2, 0 |
| if (r2 <= 0) {
0x0007900a ble 0x7902c | goto label_40;
| }
0x0007900c ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0007900e movs r6, 0 | r6 = 0;
0x00079010 mov r7, r6 | r7 = r6;
| do {
0x00079012 ldr.w r1, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r1 = *((r3 + offset_0));
| if (r1 != 0) {
0x00079016 cbz r1, 0x79026 |
0x00079018 mov r0, r4 | r0 = r4;
0x0007901a bl 0x78d14 | fcn_00078d14 (r0, r1);
0x0007901e ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x00079020 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00079022 str.w r7, [r3, r6, lsl 2] | __asm ("str.w r7, [r3, r6, lsl 2]");
| }
0x00079026 adds r6, 1 | r6++;
0x00079028 cmp r6, r2 |
0x0007902a blt 0x79012 |
| } while (r6 < r2);
| label_40:
0x0007902c ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x0007902e ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00079030 cmp r0, 0 |
0x00079032 it ne |
| if (r0 != 0) {
0x00079034 cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
| if (r0 != 0) {
0x00079036 beq 0x7903c |
0x00079038 bl 0x2dc58 | fcn_0002dc58 (r0, r1);
| }
0x0007903c ldr.w r7, [r4, 0xd0] | r7 = *((r4 + 0xd0));
0x00079040 mov sb, r5 | sb = r5;
0x00079042 cmp r7, 0 |
| if (r7 == 0) {
0x00079044 beq 0x790bc | goto label_41;
| }
| label_0:
0x00079046 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x00079048 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x0007904a ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0007904c add.w r8, r1, r1, lsl 2 | r8 = r1 + (r1 << 2);
0x00079050 cmp r3, 0 |
0x00079052 str.w r2, [r4, 0xd0] | __asm ("str.w r2, [r4, 0xd0]");
0x00079056 lsl.w r8, r8, 3 | r8 <<= 3;
| if (r3 <= 0) {
0x0007905a ble 0x7907a | goto label_42;
| }
0x0007905c add.w r8, r8, 0x54 | r8 += 0x54;
0x00079060 movs r6, 0 | r6 = 0;
0x00079062 add r8, r7 | r8 += r7;
| do {
0x00079064 ldr r1, [r8, 4]! | r1 = *((r8 += 4));
| if (r1 != 0) {
0x00079068 cbz r1, 0x79072 |
0x0007906a ldr r0, [r7] | r0 = *(r7);
0x0007906c bl 0x78d14 | fcn_00078d14 (r0, r1);
0x00079070 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
| }
0x00079072 adds r6, 1 | r6++;
0x00079074 cmp r6, r3 |
0x00079076 blt 0x79064 |
| } while (r6 < r3);
0x00079078 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
| if (r1 != 0) {
| label_42:
0x0007907a cbz r1, 0x79084 |
0x0007907c add.w r0, r7, 0x58 | r0 = r7 + 0x58;
0x00079080 bl 0x2dc58 | fcn_0002dc58 (r0, r1);
| }
0x00079084 ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x00079086 ldr r3, [r7] | r3 = *(r7);
0x00079088 ldr r5, [r3] | r5 = *(r3);
| if (r6 == 0) {
0x0007908a cbz r6, 0x790aa | goto label_43;
| }
| do {
0x0007908c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| if (r3 != 0) {
0x0007908e cbz r3, 0x79094 |
0x00079090 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x00079092 blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x00079094 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00079096 mov r1, r6 | r1 = r6;
0x00079098 mov r0, r5 | r0 = r5;
0x0007909a str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x0007909c bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000790a0 ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x000790a2 cmp r6, 0 |
0x000790a4 bne 0x7908c |
| } while (r6 != 0);
0x000790a6 ldr r3, [r7] | r3 = *(r7);
0x000790a8 ldr r5, [r3] | r5 = *(r3);
| label_43:
0x000790aa mov r1, r7 | r1 = r7;
0x000790ac mov r0, r5 | r0 = r5;
0x000790ae bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000790b2 ldr.w r7, [r4, 0xd0] | r7 = *((r4 + 0xd0));
0x000790b6 cmp r7, 0 |
| if (r7 != 0) {
0x000790b8 bne 0x79046 | goto label_0;
| }
0x000790ba mov r5, sb | r5 = sb;
| label_41:
0x000790bc ldr.w r6, [r4, 0xe0] | r6 = *((r4 + 0xe0));
| if (r6 == 0) {
0x000790c0 cbz r6, 0x790e2 | goto label_44;
| }
0x000790c2 ldr r7, [r4] | r7 = *(r4);
| do {
0x000790c4 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| if (r3 != 0) {
0x000790c6 cbz r3, 0x790cc |
0x000790c8 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x000790ca blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x000790cc ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000790ce mov r1, r6 | r1 = r6;
0x000790d0 mov r0, r7 | r0 = r7;
0x000790d2 str.w r3, [r4, 0xe0] | __asm ("str.w r3, [r4, 0xe0]");
0x000790d6 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000790da ldr.w r6, [r4, 0xe0] | r6 = *((r4 + 0xe0));
0x000790de cmp r6, 0 |
0x000790e0 bne 0x790c4 |
| } while (r6 != 0);
| label_44:
0x000790e2 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x000790e6 lsls r6, r3, 0x18 | r6 = r3 << 0x18;
| if (r6 < r3) {
0x000790e8 bmi 0x79140 | goto label_45;
| }
0x000790ea ldr.w r2, [r5, 0xb8] | r2 = *((r5 + 0xb8));
0x000790ee lsls r1, r3, 0x19 | r1 = r3 << 0x19;
0x000790f0 add.w r2, r2, -1 | r2 += -1;
0x000790f4 str.w r2, [r5, 0xb8] | __asm ("str.w r2, [r5, 0xb8]");
| if (r1 >= r3) {
0x000790f8 bmi 0x79104 |
0x000790fa ldr.w r3, [r5, 0xc0] | r3 = *((r5 + 0xc0));
0x000790fe subs r3, 1 | r3--;
0x00079100 str.w r3, [r5, 0xc0] | __asm ("str.w r3, [r5, 0xc0]");
| }
0x00079104 movs r3, 3 | r3 = 3;
0x00079106 strb.w r3, [r4, 0x95] | *((r4 + 0x95)) = r3;
0x0007910a ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
| if (r3 != 0) {
0x0007910e cbnz r3, 0x7913a | goto label_2;
| }
| label_1:
0x00079110 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00079112 cmp r3, 5 |
| if (r3 == 5) {
0x00079114 beq.w 0x79680 | goto label_46;
| }
| do {
0x00079118 movs r0, 0 | r0 = 0;
| label_17:
0x0007911a ldr.w r2, [pc, 0x868] |
0x0007911e ldr.w r3, [pc, 0x860] | r3 = *(0x79982);
0x00079122 add r2, pc | r2 = 0xf2aac;
0x00079124 ldr r3, [r2, r3] | r3 = *(0xf2aac);
0x00079126 ldr r2, [r3] | r2 = *(0xf2aac);
0x00079128 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007912a eors r2, r3 | r2 ^= r3;
0x0007912c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00079130 bne.w 0x7960e | goto label_47;
| }
0x00079134 add sp, 0x34 |
0x00079136 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x0007913a movs r3, 7 | r3 = 7;
0x0007913c str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0007913e b 0x79118 |
| } while (1);
| label_45:
0x00079140 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
| if (r3 != 0) {
0x00079144 cbz r3, 0x7914c |
0x00079146 mov r0, r4 | r0 = r4;
0x00079148 bl 0x2e59c | fcn_0002e59c (r0);
| }
0x0007914c ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0007914e mov r6, r2 | r6 = r2;
0x00079150 cmp r2, 0 |
| if (r2 != 0) {
0x00079152 bne 0x7923c | goto label_48;
| }
| label_6:
0x00079154 ldrd r1, r3, [r4, 0x40] | __asm ("ldrd r1, r3, [r4, 0x40]");
0x00079158 cmp r1, 1 |
0x0007915a sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r1 >= 1) {
0x0007915e blt 0x7917a |
0x00079160 ldr.w r1, [pc, 0x824] |
0x00079164 movw r2, 0x313 | r2 = 0x313;
0x00079168 movs r3, 2 | r3 = 2;
0x0007916a str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x0007916c mov r0, r4 | r0 = r4;
0x0007916e strb.w r3, [r4, 0x92] | *((r4 + 0x92)) = r3;
0x00079172 add r1, pc | r1 = 0xf2afe;
0x00079174 bl 0x4a2c0 | fcn_0004a2c0 (r0);
0x00079178 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
| }
0x0007917a ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x0007917e cmp r3, 0 |
| if (r3 > 0) {
0x00079180 ble 0x79188 |
0x00079182 ldr.w r1, [r5, 0x194] | r1 = *((r5 + 0x194));
| if (r1 == 0) {
0x00079186 cbz r1, 0x791a4 | goto label_49;
| }
| }
0x00079188 ldrb.w r1, [r5, 0x55] | r1 = *((r5 + 0x55));
| if (r1 != 0) {
0x0007918c cbz r1, 0x791a4 |
| label_10:
0x0007918e ldrb.w r1, [r4, 0x96] | r1 = *((r4 + 0x96));
0x00079192 ldr.w r0, [r5, 0xc0] | r0 = *((r5 + 0xc0));
0x00079196 eor r1, r1, 0x40 | r1 ^= 0x40;
0x0007919a ubfx r1, r1, 6, 1 | r1 = (r1 >> 6) & ((1 << 1) - 1);
0x0007919e cmp r1, r0 |
| if (r1 == r0) {
0x000791a0 beq.w 0x7937c | goto label_50;
| }
| }
| label_49:
0x000791a4 cmp r2, 0 |
| if (r2 != 0) {
0x000791a6 bne.w 0x79368 | goto label_20;
| }
| label_11:
0x000791aa movs r6, 1 | r6 = 1;
| label_12:
0x000791ac ldr r3, [r4] | r3 = *(r4);
0x000791ae ldr.w r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
| if (r3 != 0) {
0x000791b2 cbz r3, 0x791bc |
0x000791b4 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x000791b6 cmp r3, 0 |
| if (r3 != 0) {
0x000791b8 bne.w 0x7940c | goto label_51;
| }
| }
| label_15:
0x000791bc ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x000791c0 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 < r3) {
0x000791c2 bpl 0x791e8 |
0x000791c4 cmp r6, 2 |
| if (r6 == 2) {
0x000791c6 beq.w 0x7933c | goto label_52;
| }
0x000791c8 strh r1, [r7, 4] | *((r7 + 4)) = r1;
| label_4:
0x000791ca ldrd r2, r0, [r4, 0x28] | __asm ("ldrd r2, r0, [r4, 0x28]");
0x000791ce ldr r1, [r5, 0x70] | r1 = *((r5 + 0x70));
0x000791d0 adds r1, r1, r2 | r1 += r2;
0x000791d2 str r1, [r5, 0x70] | *((r5 + 0x70)) = r1;
0x000791d4 ldr r1, [r5, 0x74] | r1 = *((r5 + 0x74));
0x000791d6 adc.w r1, r0, r1 | __asm ("adc.w r1, r0, r1");
0x000791da str r1, [r5, 0x74] | *((r5 + 0x74)) = r1;
| label_9:
0x000791dc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000791e0 strd r2, r0, [r5, 0x68] | __asm ("strd r2, r0, [r5, 0x68]");
0x000791e4 vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
| }
| label_3:
0x000791e8 ldr.w r2, [r4, 0x9c] | r2 = *((r4 + 0x9c));
| if (r2 != 0) {
0x000791ec cbz r2, 0x791f8 |
0x000791ee mov r0, r4 | r0 = r4;
0x000791f0 bl 0x2e32c | fcn_0002e32c (r0);
0x000791f4 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
| }
0x000791f8 sxtb r1, r3 | r1 = (int32_t) r3;
0x000791fa lsls r3, r3, 0x19 | r3 <<= 0x19;
0x000791fc it pl |
| if (r3 < r3) {
0x000791fe ldrpl r3, [r5, 0xc0] | r3 = *((r5 + 0xc0));
| }
0x00079202 ldr.w r2, [r5, 0xb8] | r2 = *((r5 + 0xb8));
0x00079206 itt pl |
| if (r3 < r3) {
0x00079208 addpl r3, r3, -1 | r3 += -1;
| }
| if (r3 >= r3) {
0x0007920c str.w r3, [r5, 0xc0] | __asm ("str.w r3, [r5, 0xc0]");
| }
0x00079210 cmp r1, 0 |
0x00079212 it lt |
| if (r1 >= 0) {
0x00079214 ldrlt r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
| }
0x00079218 add.w r2, r2, -1 | r2 += -1;
0x0007921c str.w r2, [r5, 0xb8] | __asm ("str.w r2, [r5, 0xb8]");
0x0007921e movs r0, 0xb8 | r0 = 0xb8;
0x00079220 itt lt |
| if (r0 >= 0xb8) {
0x00079222 addlt r3, r3, -1 | r3 += -1;
| }
| if (r0 < 0xb8) {
0x00079226 str.w r3, [r5, 0xbc] | __asm ("str.w r3, [r5, 0xbc]");
| }
0x0007922a movs r3, 3 | r3 = 3;
0x0007922c strb.w r3, [r4, 0x95] | *((r4 + 0x95)) = r3;
0x00079230 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x00079234 cmp r3, 0 |
| if (r3 == 0) {
0x00079236 beq.w 0x79110 | goto label_1;
| }
0x0007923a b 0x7913a | goto label_2;
| label_48:
0x0007923c uxtb r1, r2 | r1 = (int8_t) r2;
0x0007923e sub.w r0, r1, 7 | r0 = r1 - 7;
0x00079242 clz r0, r0 | r0 &= r0;
0x00079246 lsrs r0, r0, 5 | r0 >>= 5;
0x00079248 cmp r1, 0xa |
0x0007924a ite ne |
| if (r1 == 0xa) {
0x0007924c movne r6, r0 | r6 = r0;
| }
| if (r1 != 0xa) {
0x0007924e orreq r6, r0, 1 | r6 = r0 | 1;
| }
| if (r6 == 0) {
0x00079252 cbz r6, 0x792b6 | goto label_53;
| }
0x00079254 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
| label_5:
0x00079258 cmp r1, 0xd |
0x0007925a it eq |
| if (r1 != 0xd) {
0x0007925c orreq r0, r0, 1 | r0 |= 1;
| }
0x00079260 cmp r0, 0 |
| if (r0 == 0) {
0x00079262 beq 0x792ee | goto label_54;
| }
0x00079264 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 >= r3) {
0x00079266 bpl 0x792ee | goto label_54;
| }
0x00079268 ldr.w r2, [r5, 0x17c] | r2 = *((r5 + 0x17c));
0x0007926c cmp r2, 0 |
| if (r2 > 0) {
0x0007926e ble 0x79278 |
0x00079270 ldr.w r2, [r5, 0x194] | r2 = *((r5 + 0x194));
0x00079274 cmp r2, 0 |
| if (r2 == 0) {
0x00079276 beq 0x79378 | goto label_55;
| }
| }
0x00079278 ldrb.w r2, [r5, 0x55] | r2 = *((r5 + 0x55));
0x0007927c cmp r2, 0 |
| if (r2 == 0) {
0x0007927e beq 0x79378 | goto label_55;
| }
0x00079280 ldr.w r2, [r5, 0xc0] | r2 = *((r5 + 0xc0));
0x00079284 eor r3, r3, 0x40 | r3 ^= 0x40;
0x00079288 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x0007928c cmp r3, r2 |
| if (r3 != r2) {
0x0007928e bne 0x79378 | goto label_55;
| }
0x00079290 movs r6, 2 | r6 = 2;
| label_8:
0x00079292 movs r1, 0 | r1 = 0;
0x00079294 mov r0, r5 | r0 = r5;
0x00079296 bl 0x6afd4 | fcn_0006afd4 (r0, r1);
0x00079298 cdp2 p15, 9, c14, c13, c0, 6 | __asm ("cdp2 p15, 9, c14, c13, c0, 6");
0x0007929c movs r0, r2 | r0 = r2;
0x0007929e vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
| label_13:
0x000792a2 movs r3, 0 | r3 = 0;
0x000792a4 str.w r3, [r5, 0x1f8] | __asm ("str.w r3, [r5, 0x1f8]");
0x000792a8 cmp r6, 0 |
| if (r6 != 0) {
0x000792aa bne 0x79378 | goto label_55;
| }
| label_14:
0x000792ac ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x000792b0 lsls r1, r3, 0x1b | r1 = r3 << 0x1b;
| if (r1 >= r3) {
0x000792b2 bpl 0x791e8 | goto label_3;
| }
0x000792b4 b 0x791ca | goto label_4;
| label_53:
0x000792b6 and r3, r2, 0xfb | r3 = r2 & 0xfb;
0x000792ba cmp r3, 9 |
| if (r3 != 9) {
0x000792bc bne 0x79342 | goto label_56;
| }
0x000792be ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x000792c2 eor r6, r3, 0x40 | r6 = r3 ^ 0x40;
0x000792c6 ubfx r6, r6, 6, 1 | r6 = (r6 >> 6) & ((1 << 1) - 1);
0x000792ca cmp r1, 9 |
0x000792cc it ne |
| if (r1 == 9) {
0x000792ce orrne r6, r6, 1 | r6 |= 1;
| }
0x000792d2 cmp r6, 0 |
| if (r6 != 0) {
0x000792d4 bne 0x79258 | goto label_5;
| }
0x000792d6 ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x000792da cmp r3, 0 |
| if (r3 <= 0) {
0x000792dc ble.w 0x795d6 | goto label_57;
| }
0x000792e0 ldr.w r1, [r5, 0x194] | r1 = *((r5 + 0x194));
0x000792e4 movs r6, 1 | r6 = 1;
| if (r1 != 0) {
0x000792e6 cbnz r1, 0x7935e | goto label_58;
| }
| label_7:
0x000792e8 ldrb.w r0, [r4, 0x92] | r0 = *((r4 + 0x92));
0x000792ec b 0x7936e | goto label_59;
| label_54:
0x000792ee mov.w r1, 0x204 | r1 = 0x204;
0x000792f2 mov r0, r5 | r0 = r5;
0x000792f4 bl 0x6afd4 | fcn_0006afd4 (r0, r1);
0x000792f8 movs r6, 1 | r6 = 1;
0x000792fa mov r0, r5 | r0 = r5;
0x000792fc bl 0x2dcc0 | fcn_0002dcc0 (r0);
0x00079300 strb.w r6, [r5, 0x55] | *((r5 + 0x55)) = r6;
0x00079304 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00079306 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0007930a vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x0007930e cmp r2, 0 |
| if (r2 == 0) {
0x00079310 beq.w 0x79154 | goto label_6;
| }
0x00079314 ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x00079318 cmp r3, 0 |
| if (r3 <= 0) {
0x0007931a ble 0x79324 | goto label_60;
| }
0x0007931c ldr.w r3, [r5, 0x194] | r3 = *((r5 + 0x194));
0x00079320 cmp r3, 0 |
| if (r3 == 0) {
0x00079322 beq 0x792e8 | goto label_7;
| }
| label_60:
0x00079324 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x00079328 ldr.w r2, [r5, 0xc0] | r2 = *((r5 + 0xc0));
0x0007932c eor r3, r3, 0x40 | r3 ^= 0x40;
0x00079330 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x00079334 cmp r3, r2 |
| if (r3 != r2) {
0x00079336 bne 0x79368 | goto label_20;
| }
0x00079338 movs r6, 0 | r6 = 0;
0x0007933a b 0x79292 | goto label_8;
| label_52:
0x0007933c movs r2, 0 | r2 = 0;
0x0007933e mov r0, r2 | r0 = r2;
0x00079340 b 0x791dc | goto label_9;
| label_56:
0x00079342 ldrb.w r1, [r4, 0x92] | r1 = *((r4 + 0x92));
0x00079346 cmp r1, 3 |
0x00079348 mov r0, r1 | r0 = r1;
| if (r1 == 3) {
0x0007934a beq.w 0x79154 | goto label_6;
| }
0x0007934c add r7, sp, 0xc | r7 = sp + 0xc;
0x0007934e ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x00079352 cmp r3, 0 |
| if (r3 <= 0) {
0x00079354 ble.w 0x795ec | goto label_61;
| }
0x00079358 ldr.w r1, [r5, 0x194] | r1 = *((r5 + 0x194));
| if (r1 == 0) {
0x0007935c cbz r1, 0x79374 | goto label_21;
| }
| label_58:
0x0007935e ldrb.w r1, [r5, 0x55] | r1 = *((r5 + 0x55));
0x00079362 cmp r1, 0 |
| if (r1 != 0) {
0x00079364 bne.w 0x7918e | goto label_10;
| }
| label_20:
0x00079368 ldrb.w r1, [r4, 0x92] | r1 = *((r4 + 0x92));
| label_22:
0x0007936c mov r0, r1 | r0 = r1;
| label_59:
0x0007936e cmp r0, 3 |
| if (r0 == 3) {
0x00079370 beq.w 0x791aa | goto label_11;
| }
| label_21:
0x00079374 cmp r0, 2 |
| if (r0 != 2) {
0x00079376 bne 0x793ec | goto label_62;
| }
| label_55:
0x00079378 movs r6, 2 | r6 = 2;
0x0007937a b 0x791ac | goto label_12;
| if (r2 == 0) {
| label_50:
0x0007937c cbz r2, 0x79396 | goto label_63;
| }
0x0007937e ldrb.w r2, [r4, 0x92] | r2 = *((r4 + 0x92));
0x00079382 eor r6, r6, 1 | r6 ^= 1;
0x00079386 cmp r2, 3 |
0x00079388 ite ne |
| if (r2 == 3) {
0x0007938a movne r6, 0 | r6 = 0;
| }
| if (r2 != 3) {
0x0007938c andeq r6, r6, 1 | r6 &= 1;
| }
0x00079390 cmp r6, 0 |
| if (r6 == 0) {
0x00079392 beq.w 0x79292 | goto label_8;
| }
| label_63:
0x00079396 ldr r0, [r4] | r0 = *(r4);
0x00079398 ldr.w r1, [r0, 0x208] | r1 = *((r0 + 0x208));
0x0007939c ldr.w r2, [r0, 0x200] | r2 = *((r0 + 0x200));
0x000793a0 adds r2, r2, r1 | r2 += r1;
0x000793a2 ldr.w r1, [r0, 0x204] | r1 = *((r0 + 0x204));
0x000793a6 ldr.w r0, [r0, 0x20c] | r0 = *((r0 + 0x20c));
0x000793aa adc.w r1, r1, r0 | __asm ("adc.w r1, r1, r0");
0x000793ae cmp r2, 1 |
0x000793b0 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r2 < 1) {
0x000793b4 blt 0x79456 | goto label_64;
| }
0x000793b6 ldr.w r1, [pc, 0x5d4] |
0x000793ba movs r3, 2 | r3 = 2;
0x000793bc movw r6, 0x313 | r6 = 0x313;
0x000793c0 strb.w r3, [r4, 0x92] | *((r4 + 0x92)) = r3;
0x000793c4 mov r0, r4 | r0 = r4;
0x000793c6 str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x000793c8 add r1, pc | r1 = 0xf2d5a;
0x000793ca bl 0x4a2c0 | fcn_0004a2c0 (r0);
0x000793cc invalid |
0x000793d0 adds r0, 0x96 | r0 += 0x96;
0x000793d2 lsls r7, r3, 0x19 | r7 = r3 << 0x19;
| if (r7 < r3) {
0x000793d4 bmi 0x79468 | goto label_65;
| }
| label_16:
0x000793d6 movs r1, 0 | r1 = 0;
0x000793d8 mov r0, r5 | r0 = r5;
0x000793da str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x000793dc bl 0x6afd4 | fcn_0006afd4 (r0, r1);
0x000793e0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000793e4 vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
| label_18:
0x000793e8 movs r6, 0 | r6 = 0;
0x000793ea b 0x792a2 | goto label_13;
| label_62:
0x000793ec mov.w r1, 0x204 | r1 = 0x204;
0x000793f0 mov r0, r5 | r0 = r5;
0x000793f2 bl 0x6afd4 | fcn_0006afd4 (r0, r1);
0x000793f4 stc2l p6, c4, [pc, 0xa0]! | __asm ("stc2l p6, c4, [0x0007949c]!");
0x000793f8 bl 0x2dcc0 | fcn_0002dcc0 (r0);
0x000793fc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00079400 movs r3, 1 | r3 = 1;
0x00079402 strb.w r3, [r5, 0x55] | *((r5 + 0x55)) = r3;
0x00079406 vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x0007940a b 0x792ac | goto label_14;
| label_51:
0x0007940c mov r1, r6 | r1 = r6;
0x0007940e mov r0, r4 | r0 = r4;
0x00079410 bl 0x6a9c8 | r0 = fcn_0006a9c8 (r0, r1);
0x00079414 cmp r0, 0 |
| if (r0 == 0) {
0x00079416 beq.w 0x791bc | goto label_15;
| }
0x0007941a ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x0007941c cbz r3, 0x79444 | goto label_66;
| }
0x0007941e uxtb r3, r3 | r3 = (int8_t) r3;
0x00079420 cmp r3, 0x13 |
0x00079422 beq 0x79444 |
| while (1) {
0x00079424 mov.w r1, 0x204 | r1 = 0x204;
0x00079428 mov r0, r5 | r0 = r5;
0x0007942a bl 0x6afd4 | fcn_0006afd4 (r0, r1);
0x0007942e mov r0, r5 | r0 = r5;
0x00079430 bl 0x2dcc0 | fcn_0002dcc0 (r0);
0x00079434 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00079438 movs r3, 1 | r3 = 1;
0x0007943a strb.w r3, [r5, 0x55] | *((r5 + 0x55)) = r3;
0x0007943e vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x00079442 b 0x791bc | goto label_15;
| label_66:
0x00079444 ldr r1, [r4, 0x7c] | r1 = *((r4 + 0x7c));
0x00079446 str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
| if (r1 != 0) {
0x00079448 cbz r1, 0x79450 |
0x0007944a mov r0, r5 | r0 = r5;
0x0007944c bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00079450 movs r3, 0 | r3 = 0;
0x00079452 str r3, [r4, 0x7c] | *((r4 + 0x7c)) = r3;
0x00079454 b 0x79424 |
| }
| label_64:
0x00079456 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00079458 and r7, r2, 2 | r7 = r2 & 2;
| if (r7 != 0) {
0x0007945c cbz r7, 0x79478 |
0x0007945e bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x00079462 movs r6, 0xb | r6 = 0xb;
0x00079464 str r2, [r5, 0x24] | *((r5 + 0x24)) = r2;
0x00079466 b 0x793d6 | goto label_16;
| label_65:
0x00079468 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
| if (r3 != 0) {
0x0007946c cbz r3, 0x79474 |
0x0007946e mov r0, r4 | r0 = r4;
0x00079470 bl 0x2e32c | fcn_0002e32c (r0);
| }
0x00079474 movs r0, 1 | r0 = 1;
0x00079476 b 0x7911a | goto label_17;
| }
0x00079478 ldr.w r8, [r5, 0x194] | r8 = *((r5 + 0x194));
0x0007947c mov sl, r7 | sl = r7;
0x0007947e mov fp, r4 |
0x00079480 str.w r7, [r5, 0x194] | __asm ("str.w r7, [r5, 0x194]");
0x00079484 sub.w sb, r8, 4 | sb = r8 - 4;
| label_19:
0x00079488 cmp r3, r7 |
| if (r3 <= r7) {
0x0007948a ble 0x794e4 | goto label_67;
| }
| do {
0x0007948c ldr r2, [sb, 4]! | r2 = *((sb += 4));
0x00079490 ldr r4, [r2, 8] | r4 = *((r2 + 8));
0x00079492 cmp r4, 0 |
| if (r4 == 0) {
0x00079494 beq.w 0x795d2 | goto label_68;
| }
0x00079498 ldr r2, [r4] | r2 = *(r4);
0x0007949a ldr r2, [r2, 0x3c] | r2 = *((r2 + 0x3c));
0x0007949c cmp r2, 0 |
| if (r2 == 0) {
0x0007949e beq.w 0x795d2 | goto label_68;
| }
0x000794a2 mov r0, r4 | r0 = r4;
0x000794a4 blx r2 | uint32_t (*r2)(uint32_t) (r0);
0x000794a6 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000794a8 mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x000794aa cbz r3, 0x794d4 |
0x000794ac ldr.w r1, [fp, 0x7c] | r1 = *(arg_7ch);
0x000794b0 ldr.w r0, [fp] | r0 = *(fp);
| if (r1 != 0) {
0x000794b4 cbz r1, 0x794c0 |
0x000794b6 str r0, [sp, 0xc] | var_ch = r0;
0x000794b8 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000794bc ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000794be ldr r0, [sp, 0xc] | r0 = var_ch;
| }
0x000794c0 mov r1, r3 | r1 = r3;
0x000794c2 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x000794c6 str.w r0, [fp, 0x7c] | __asm ("str.w r0, [arg_7ch]");
0x000794ca ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000794cc bl 0x26dbc | fcn_00026dbc (r0);
0x000794d0 str.w sl, [r4, 8] | __asm ("str.w sl, [r4, 8]");
| }
0x000794d4 adds r7, 1 | r7++;
0x000794d6 cmp r6, 0 |
| if (r6 != 0) {
0x000794d8 bne.w 0x7994c | goto label_69;
| }
0x000794dc ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x000794e0 cmp r3, r7 |
0x000794e2 bgt 0x7948c |
| } while (r3 > r7);
| label_67:
0x000794e4 ldr.w sl, [pc, 0x4a8] |
0x000794e8 movs r1, 0 | r1 = 0;
0x000794ea ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000794ec mov r4, fp | r4 = fp;
0x000794ee str.w r8, [r5, 0x194] | __asm ("str.w r8, [r5, 0x194]");
0x000794f2 mov sb, r1 | sb = r1;
0x000794f4 mov r8, r1 | r8 = r1;
0x000794f6 add sl, pc | sl = 0xf2e8a;
| label_23:
0x000794f8 cmp r2, r8 |
| if (r2 <= r8) {
0x000794fa ble 0x79518 | goto label_70;
| }
| do {
0x000794fc ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000794fe lsl.w r6, r8, 4 | r6 = r8 << 4;
0x00079502 add r3, r6 | r3 += r6;
0x00079504 ldr r7, [r3, 4] | r7 = *((r3 + 4));
| if (r7 != 0) {
0x00079506 cbz r7, 0x79510 |
0x00079508 ldrb r0, [r7, 8] | r0 = *((r7 + 8));
0x0007950a cmp r0, 2 |
| if (r0 == 2) {
0x0007950c beq.w 0x79612 | goto label_71;
| }
| }
0x00079510 add.w r8, r8, 1 | r8++;
0x00079514 cmp r2, r8 |
0x00079516 bgt 0x794fc |
| } while (r2 > r8);
| if (r1 != 0) {
| label_70:
0x00079518 cbz r1, 0x7952c |
0x0007951a ldr.w r3, [r5, 0xe8] | r3 = *((r5 + 0xe8));
| if (r3 == 0) {
0x0007951e cbz r3, 0x7952c | goto label_72;
| }
0x00079520 ldr.w r0, [r5, 0xe4] | r0 = *((r5 + 0xe4));
0x00079524 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
0x00079526 cmp r0, 0 |
| if (r0 != 0) {
0x00079528 bne.w 0x79954 | goto label_73;
| }
| }
| label_72:
0x0007952c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0007952e mov.w sl, 0 | sl = 0;
0x00079532 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00079534 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00079536 ldr r3, [r3] | r3 = *(r3);
0x00079538 ldrb r6, [r3, 0xf] | r6 = *((r3 + 0xf));
| if (r6 == 0) {
0x0007953a cbnz r6, 0x79568 |
0x0007953c ldr.w sl, [r3, 0xb8] | sl = *((r3 + 0xb8));
0x00079540 cmp.w sl, 0 |
| if (sl == 0) {
0x00079544 beq 0x79568 | goto label_74;
| }
0x00079546 mov r0, sl | r0 = sl;
0x00079548 blx 0x65dc | r0 = strcmp (r0, r1);
0x0007954c bics r8, r0, 0xc0000000 | __asm ("bics r8, r0, 0xc0000000");
0x00079550 ite eq |
| if (sl != 0) {
0x00079552 moveq r7, 1 | r7 = 1;
| }
| if (sl == 0) {
0x00079554 movne r7, 0 | r7 = 0;
| }
0x00079556 cmp.w sb, 1 |
0x0007955a it le |
| if (sb > 1) {
0x0007955c orrle r7, r7, 1 | r7 |= 1;
| }
0x00079560 cmp r7, 0 |
| if (r7 == 0) {
0x00079562 beq.w 0x796b0 | goto label_75;
| }
0x00079566 mov sl, r6 | sl = r6;
| }
| label_74:
0x00079568 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0007956a cmp r2, sl |
| if (r2 <= sl) {
0x0007956c ble 0x79588 | goto label_76;
| }
| do {
0x0007956e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00079570 add.w r3, r3, sl, lsl 4 | r3 += (sl << 4);
0x00079574 ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x00079576 cbz r0, 0x79580 |
0x00079578 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0007957a cmp r3, 2 |
| if (r3 == 2) {
0x0007957c beq.w 0x796a0 | goto label_77;
| }
| }
| label_25:
0x00079580 add.w sl, sl, 1 | sl++;
0x00079584 cmp r2, sl |
0x00079586 bgt 0x7956e |
| } while (r2 > sl);
| label_76:
0x00079588 movs r7, 0 | r7 = 0;
0x0007958a cmp r7, r2 |
| if (r7 >= r2) {
0x0007958c bge 0x795ac | goto label_29;
| }
| do {
0x0007958e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00079590 add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x00079594 ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x00079596 cbz r0, 0x795a6 |
0x00079598 movs r1, 0 | r1 = 0;
0x0007959a bl 0x6683c | r0 = fcn_0006683c (r0, r1);
0x0007959e cmp r0, 0 |
| if (r0 != 0) {
0x000795a0 bne.w 0x796a8 | goto label_78;
| }
0x000795a4 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| }
0x000795a6 adds r7, 1 | r7++;
0x000795a8 cmp r7, r2 |
0x000795aa blt 0x7958e |
| } while (r7 < r2);
| label_29:
0x000795ac movs r1, 0x40 | r1 = 0x40;
0x000795ae mov r0, r5 | r0 = r5;
0x000795b0 bl 0x2d7f0 | fcn_0002d7f0 (r0, r1);
0x000795b4 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000795b6 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000795b8 vmov.i32 q8, 0 | __asm ("vmov.i32 q8, 0");
0x000795bc bic r2, r2, 0x80000 | r2 = BIT_MASK (r2, 0x80000);
0x000795c0 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x000795c4 str r2, [r5, 0x20] | *((r5 + 0x20)) = r2;
0x000795c6 vstr d16, [r5, 0x200] | __asm ("vstr d16, [r5, 0x200]");
0x000795ca vstr d17, [r5, 0x208] | __asm ("vstr d17, [r5, 0x208]");
0x000795ce str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x000795d0 b 0x793e8 | goto label_18;
| label_68:
0x000795d2 adds r7, 1 | r7++;
0x000795d4 b 0x79488 | goto label_19;
| label_57:
0x000795d6 ldrb.w r3, [r5, 0x55] | r3 = *((r5 + 0x55));
0x000795da cmp r3, 0 |
| if (r3 == 0) {
0x000795dc beq.w 0x792e8 | goto label_7;
| }
0x000795e0 ldr.w r6, [r5, 0xc0] | r6 = *((r5 + 0xc0));
0x000795e4 cmp r6, 0 |
| if (r6 != 0) {
0x000795e6 bne.w 0x79368 | goto label_20;
| }
0x000795ea b 0x79292 | goto label_8;
| label_61:
0x000795ec ldrb.w r3, [r5, 0x55] | r3 = *((r5 + 0x55));
0x000795f0 cmp r3, 0 |
| if (r3 == 0) {
0x000795f2 beq.w 0x79374 | goto label_21;
| }
0x000795f6 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x000795fa ldr.w r2, [r5, 0xc0] | r2 = *((r5 + 0xc0));
0x000795fe eor r3, r3, 0x40 | r3 ^= 0x40;
0x00079602 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x00079606 cmp r3, r2 |
| if (r3 != r2) {
0x00079608 bne.w 0x7936c | goto label_22;
| }
0x0007960c b 0x79292 | goto label_8;
| label_47:
0x0007960e blx 0x6430 | fcn_00006430 ();
| label_71:
0x00079612 ldrb r2, [r7, 9] | r2 = *((r7 + 9));
| if (r2 != 0) {
0x00079614 cbz r2, 0x7962a |
0x00079616 ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x00079618 adds r2, 1 | r2++;
0x0007961a str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x0007961c ldrb r2, [r7, 0xa] | r2 = *((r7 + 0xa));
| if (r2 != 0) {
0x0007961e cbnz r2, 0x7962a | goto label_79;
| }
0x00079620 mov r0, r7 | r0 = r7;
0x00079622 bl 0x2adac | fcn_0002adac (r0);
0x00079626 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00079628 add r3, r6 | r3 += r6;
| }
| label_79:
0x0007962a ldrb r3, [r3, 8] | r3 = *((r3 + 8));
0x0007962c ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0007962e cmp r3, 1 |
0x00079630 ldr r0, [r2] | r0 = *(r2);
| if (r3 != 1) {
0x00079632 beq 0x7964a |
0x00079634 ldrb r3, [r0, 5] | r3 = *((r0 + 5));
0x00079636 add r3, sl | r3 += sl;
0x00079638 ldrb.w r3, [r3, 0xd30] | r3 = *((r3 + 0xd30));
| if (r3 == 0) {
0x0007963c cbz r3, 0x7964a | goto label_80;
| }
0x0007963e ldrb r3, [r0, 0xc] | r3 = *((r0 + 0xc));
| if (r3 != 0) {
0x00079640 cbnz r3, 0x7964a | goto label_80;
| }
0x00079642 ldrb r3, [r0, 0x10] | r3 = *((r0 + 0x10));
| if (r3 != 0) {
0x00079644 cbnz r3, 0x7964a | goto label_80;
| }
0x00079646 add.w sb, sb, 1 | sb++;
| }
| label_80:
0x0007964a ldr r6, [r0, 0x2c] | r6 = *((r0 + 0x2c));
| if (r6 == 0) {
0x0007964c cbz r6, 0x79684 | goto label_81;
| }
0x0007964e ldrb r3, [r7, 9] | r3 = *((r7 + 9));
| if (r3 != 0) {
0x00079650 cbz r3, 0x79660 |
0x00079652 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00079654 subs r3, 1 | r3--;
0x00079656 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| if (r3 != 0) {
0x00079658 cbnz r3, 0x79660 | goto label_24;
| }
0x0007965a mov r0, r7 | r0 = r7;
0x0007965c bl 0x22944 | fcn_00022944 (r0);
| }
| label_24:
0x00079660 cmp r6, 5 |
| if (r6 != 5) {
0x00079662 bne.w 0x793d6 | goto label_16;
| }
0x00079666 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0007966a lsls r0, r3, 0x19 | r0 = r3 << 0x19;
0x0007966c it pl |
| if (r0 >= r3) {
0x0007966e movpl r6, 5 | r6 = 5;
| goto label_82;
| }
| if (r0 >= r3) {
| label_82:
0x00079670 bpl.w 0x793d6 | goto label_16;
| }
0x00079674 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
| if (r3 != 0) {
0x00079678 cbz r3, 0x79680 |
0x0007967a mov r0, r4 | r0 = r4;
0x0007967c bl 0x2e32c | fcn_0002e32c (r0);
| }
| label_46:
0x00079680 movs r0, 5 | r0 = 5;
0x00079682 b 0x7911a | goto label_17;
| label_81:
0x00079684 ldr.w r3, [r0, 0xf8] | r3 = *((r0 + 0xf8));
0x00079688 cmp r3, 0 |
| if (r3 == 0) {
0x0007968a beq.w 0x79922 | goto label_83;
| }
0x0007968e ldrb r3, [r7, 9] | r3 = *((r7 + 9));
0x00079690 cmp r3, 0 |
| if (r3 != 0) {
0x00079692 bne.w 0x7992e | goto label_84;
| }
| label_35:
0x00079696 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00079698 add.w r8, r8, 1 | r8++;
0x0007969c movs r1, 1 | r1 = 1;
0x0007969e b 0x794f8 | goto label_23;
| label_77:
0x000796a0 movs r1, 0 | r1 = 0;
0x000796a2 bl 0x76524 | r0 = fcn_00076524 (r0, r1, r2);
| if (r0 != 0) {
0x000796a6 cbz r0, 0x796ac |
| label_78:
0x000796a8 mov r6, r0 | r6 = r0;
0x000796aa b 0x79660 | goto label_24;
| }
0x000796ac ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000796ae b 0x79580 | goto label_25;
| label_75:
0x000796b0 ldr r1, [pc, 0x2e0] |
0x000796b2 mov r3, sl | r3 = sl;
0x000796b4 mov r2, r7 | r2 = r7;
0x000796b6 ldr.w sl, [r5] | sl = *(r5);
0x000796ba mov r0, r5 | r0 = r5;
0x000796bc str r7, [sp] | *(sp) = r7;
0x000796be add r1, pc | r1 = 0xf3056;
0x000796c0 str r7, [sp, 0x20] | var_20h = r7;
0x000796c2 bl 0x4a320 | fcn_0004a320 (r0);
0x000796c6 str r0, [sp, 0xc] | var_ch = r0;
0x000796c8 cmp r0, 0 |
| if (r0 == 0) {
0x000796ca beq 0x79750 | goto label_85;
| }
0x000796cc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000796ce ldr.w sb, [pc, 0x2c8] |
0x000796d2 add.w fp, r3, 4 |
0x000796d6 add.w r3, fp, r8 | r3 = fp + r8;
0x000796da add sb, pc | sb = 0xf3078;
0x000796dc str r3, [sp, 0x18] | var_18h = r3;
0x000796de ldr r3, [pc, 0x2bc] |
0x000796e0 add r3, pc | r3 = 0xf3082;
0x000796e2 str r3, [sp, 0x10] | var_10h = r3;
0x000796e4 ldr r3, [pc, 0x2b8] |
0x000796e6 add r3, pc | r3 = 0xf308a;
0x000796e8 str r3, [sp, 0x1c] | var_1ch = r3;
0x000796ea add r3, sp, 0x24 | r3 += var_24h;
0x000796ec str r3, [sp, 0x14] | var_14h = r3;
| do {
| label_26:
0x000796ee ldr.w r3, [sb, 0xd0] | r3 = *((sb + 0xd0));
0x000796f2 adds r7, 1 | r7++;
| if (r3 != 0) {
0x000796f4 cbnz r3, 0x7974a | goto label_86;
| }
0x000796f6 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 == 0) {
0x000796fa cbnz r0, 0x7970a |
0x000796fc bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x00079700 cbnz r0, 0x7970a | goto label_87;
| }
| label_27:
0x00079702 add r1, sp, 0x28 | r1 += var_28h;
0x00079704 movs r0, 4 | r0 = 4;
0x00079706 bl 0x62714 | fcn_00062714 (r0, r1);
| }
| label_87:
0x0007970a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007970c movs r0, 0xd | r0 = 0xd;
0x0007970e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00079710 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00079712 uxtb r6, r3 | r6 = (int8_t) r3;
0x00079714 lsrs r3, r3, 8 | r3 >>= 8;
0x00079716 str r6, [sp] | *(sp) = r6;
0x00079718 bl 0x56488 | fcn_00056488 (r0, r1);
0x0007971c ldr.w r6, [sl, 0x20] | r6 = *((sl + 0x20));
0x00079720 movs r2, 0 | r2 = 0;
0x00079722 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00079724 mov r1, fp | r1 = fp;
0x00079726 mov r0, sl | r0 = sl;
0x00079728 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007972a mov r8, r0 | r8 = r0;
0x0007972c cmp r0, 0 |
| if (r0 != 0) {
0x0007972e bne.w 0x7995a | goto label_88;
| }
0x00079732 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r3 == 0) {
0x00079734 cbz r3, 0x7976e | goto label_89;
| }
0x00079736 cmp r7, 0x65 |
| if (r7 == 0x65) {
0x00079738 beq 0x79754 | goto label_90;
| }
0x0007973a cmp r7, 1 |
0x0007973c bne 0x796ee |
| } while (r7 != 1);
0x0007973e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00079740 mov r2, fp | r2 = fp;
0x00079742 movs r0, 0xd | r0 = 0xd;
0x00079744 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00079748 b 0x796ee | goto label_26;
| label_86:
0x0007974a dmb ish | __asm ("dmb ish");
0x0007974e b 0x79702 | goto label_27;
| label_85:
0x00079750 movs r6, 7 | r6 = 7;
0x00079752 b 0x793d6 | goto label_16;
| label_90:
0x00079754 ldr r1, [pc, 0x24c] |
0x00079756 mov r2, fp | r2 = fp;
0x00079758 movs r0, 0xd | r0 = 0xd;
0x0007975a add r1, pc | r1 = 0xf3102;
0x0007975c bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00079760 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
| if (r3 != 0) {
0x00079764 cbz r3, 0x7976e |
0x00079766 mov r2, r8 | r2 = r8;
0x00079768 mov r1, fp | r1 = fp;
0x0007976a mov r0, sl | r0 = sl;
0x0007976c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
| label_89:
0x0007976e movs r3, 0 | r3 = 0;
0x00079770 add r2, sp, 0x20 | r2 += var_20h;
0x00079772 str r3, [sp] | *(sp) = r3;
0x00079774 mov r1, fp | r1 = fp;
0x00079776 movw r3, 0x4016 | r3 = 0x4016;
0x0007977a mov r0, sl | r0 = sl;
0x0007977c bl 0x2e224 | r0 = fcn_0002e224 (r0, r1, r2, r3, r4);
0x00079780 mov r8, r0 | r8 = r0;
0x00079782 cmp r0, 0 |
| if (r0 != 0) {
0x00079784 bne.w 0x7995a | goto label_88;
| }
0x00079788 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0007978a ldr r7, [sp, 0x20] | r7 = var_20h;
0x0007978c cmp r2, 0 |
| if (r2 <= 0) {
0x0007978e ble 0x7980e | goto label_91;
| }
0x00079790 strd r0, r4, [sp, 0x10] | __asm ("strd r0, r4, [var_10h]");
0x00079794 mov sb, r0 | sb = r0;
0x00079796 mov r4, r0 | r4 = r0;
0x00079798 b 0x797a0 |
| while (r1 == 0) {
| label_28:
0x0007979a adds r4, 1 | r4++;
0x0007979c cmp r4, r2 |
| if (r4 >= r2) {
0x0007979e bge 0x7980c | goto label_92;
| }
0x000797a0 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000797a2 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x000797a6 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000797a8 ldr r3, [r7] | r3 = *(r7);
0x000797aa cmp r1, 0 |
0x000797ac beq 0x7979a |
| }
0x000797ae ldrb r0, [r1, 8] | r0 = *((r1 + 8));
0x000797b0 cmp r0, 2 |
| if (r0 != 2) {
0x000797b2 bne 0x7979a | goto label_28;
| }
0x000797b4 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x000797b6 str r3, [sp, 0x18] | var_18h = r3;
0x000797b8 ldr r1, [r1] | r1 = *(r1);
0x000797ba ldr.w r6, [r1, 0xbc] | r6 = *((r1 + 0xbc));
0x000797be cmp r6, 0 |
| if (r6 == 0) {
0x000797c0 beq 0x7979a | goto label_28;
| }
0x000797c2 mov r0, r6 | r0 = r6;
0x000797c4 blx 0x65dc | strcmp (r0, r1);
0x000797c8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000797ca bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000797ce str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000797d2 adds r2, 1 | r2++;
0x000797d4 mov r1, r6 | r1 = r6;
0x000797d6 mov r0, r7 | r0 = r7;
0x000797d8 str r3, [sp, 4] | var_4h = r3;
0x000797da ldr r3, [sp, 0x18] | r3 = var_18h;
0x000797dc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000797de blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000797e0 mov r2, r0 | r2 = r0;
0x000797e2 mov r0, r6 | r0 = r6;
0x000797e4 str r2, [sp, 0x18] | var_18h = r2;
0x000797e6 blx 0x65dc | r0 = strcmp (r0, r1);
0x000797ea bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x000797ee ldr r2, [sp, 0x18] | r2 = var_18h;
0x000797f0 adds r3, 1 | r3++;
0x000797f2 adds.w r3, r3, sb | r3 += sb;
0x000797f6 mov sb, r3 | sb = r3;
0x000797f8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000797fa adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000797fe str r3, [sp, 0x10] | var_10h = r3;
0x00079800 cmp r2, 0 |
| if (r2 != 0) {
0x00079802 bne.w 0x79966 | goto label_93;
| }
0x00079806 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00079808 ldr r7, [sp, 0x20] | r7 = var_20h;
0x0007980a b 0x7979a | goto label_28;
| label_92:
0x0007980c ldr r4, [sp, 0x14] | r4 = var_14h;
| label_91:
0x0007980e ldr r3, [r7] | r3 = *(r7);
0x00079810 cmp r3, 0 |
| if (r3 == 0) {
0x00079812 beq 0x798ee | goto label_94;
| }
0x00079814 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00079816 mov r0, r7 | r0 = r7;
0x00079818 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0007981a lsls r6, r0, 0x15 | r6 = r0 << 0x15;
| if (r6 >= r0) {
0x0007981c bpl 0x798ec | goto label_95;
| }
| label_33:
0x0007981e ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00079820 mov.w sb, 0 | sb = 0;
| label_38:
0x00079824 cmp sb, r2 |
| if (sb >= r2) {
0x00079826 bge 0x79840 | goto label_96;
| }
| do {
0x00079828 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0007982a add.w r3, r3, sb, lsl 4 | r3 += (sb << 4);
0x0007982e ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x00079830 cbz r0, 0x79838 |
0x00079832 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x00079834 cmp r3, 2 |
| if (r3 == 2) {
0x00079836 beq 0x798c2 | goto label_97;
| }
| }
0x00079838 add.w sb, sb, 1 | sb++;
0x0007983c cmp sb, r2 |
0x0007983e blt 0x79828 |
| } while (sb < r2);
| label_96:
0x00079840 ldr r3, [r7] | r3 = *(r7);
0x00079842 cmp r3, 0 |
| if (r3 == 0) {
0x00079844 beq 0x798e4 | goto label_98;
| }
0x00079846 movs r6, 0 | r6 = 0;
| label_31:
0x00079848 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0007984a mov r0, r7 | r0 = r7;
0x0007984c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0007984e movs r3, 0 | r3 = 0;
0x00079850 mov r0, r7 | r0 = r7;
0x00079852 str r3, [r7] | *(r7) = r3;
0x00079854 bl 0x26dbc | fcn_00026dbc (r0);
0x00079858 cmp r6, 0 |
| if (r6 != 0) {
0x0007985a bne 0x798da | goto label_34;
| }
| label_32:
0x0007985c ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
| if (r3 == 0) {
0x00079860 cbz r3, 0x798b8 | goto label_99;
| }
0x00079862 mov r1, fp | r1 = fp;
0x00079864 mov r0, sl | r0 = sl;
0x00079866 movs r2, 1 | r2 = 1;
0x00079868 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0007986a mov r6, r0 | r6 = r0;
0x0007986c ldr r1, [sp, 0xc] | r1 = var_ch;
0x0007986e mov r0, r5 | r0 = r5;
0x00079870 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00079874 cmp r6, 0 |
| if (r6 != 0) {
0x00079876 bne.w 0x79660 | goto label_24;
| }
| label_30:
0x0007987a ldr r3, [pc, 0x12c] |
0x0007987c add r3, pc |
0x0007987e ldr.w r3, [r3, 0x120] | r3 = *(0xf334a);
| if (r3 != 0) {
0x00079882 cbz r3, 0x79886 |
0x00079884 blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x00079886 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00079888 cmp r2, 0 |
| if (r2 <= 0) {
0x0007988a ble 0x798a6 | goto label_100;
| }
| do {
0x0007988c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0007988e add.w r3, r3, r8, lsl 4 | r3 += (r8 << 4);
0x00079892 ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x00079894 cbz r0, 0x7989e |
0x00079896 movs r1, 1 | r1 = 1;
0x00079898 bl 0x6683c | fcn_0006683c (r0, r1);
0x0007989c ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| }
0x0007989e add.w r8, r8, 1 | r8++;
0x000798a2 cmp r8, r2 |
0x000798a4 blt 0x7988c |
| } while (r8 < r2);
| label_100:
0x000798a6 ldr r3, [pc, 0x104] |
0x000798a8 add r3, pc |
0x000798aa ldr.w r3, [r3, 0x124] | r3 = *(0xf337e);
0x000798ae cmp r3, 0 |
| if (r3 == 0) {
0x000798b0 beq.w 0x795ac | goto label_29;
| }
0x000798b4 blx r3 | uint32_t (*r3)() ();
0x000798b6 b 0x795ac | goto label_29;
| label_99:
0x000798b8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000798ba mov r0, r5 | r0 = r5;
0x000798bc bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000798c0 b 0x7987a | goto label_30;
| label_97:
0x000798c2 mov r1, fp | r1 = fp;
0x000798c4 bl 0x76524 | r0 = fcn_00076524 (r0, r1, r2);
0x000798c8 cmp r0, 0 |
| if (r0 == 0) {
0x000798ca beq 0x79972 | goto label_101;
| }
0x000798cc ldr r3, [r7] | r3 = *(r7);
0x000798ce mov r6, r0 | r6 = r0;
0x000798d0 cmp r3, 0 |
| if (r3 != 0) {
0x000798d2 bne 0x79848 | goto label_31;
| }
0x000798d4 mov r0, r7 | r0 = r7;
0x000798d6 bl 0x26dbc | fcn_00026dbc (r0);
| label_34:
0x000798da ldr r1, [sp, 0xc] | r1 = var_ch;
0x000798dc mov r0, r5 | r0 = r5;
0x000798de bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000798e2 b 0x79660 | goto label_24;
| label_98:
0x000798e4 mov r0, r7 | r0 = r7;
0x000798e6 bl 0x26dbc | fcn_00026dbc (r0);
0x000798ea b 0x7985c | goto label_32;
| label_95:
0x000798ec ldr r3, [r7] | r3 = *(r7);
| label_94:
0x000798ee ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000798f0 movs r1, 2 | r1 = 2;
0x000798f2 mov r0, r7 | r0 = r7;
0x000798f4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000798f6 mov r6, r0 | r6 = r0;
0x000798f8 cmp r0, 0 |
| if (r0 == 0) {
0x000798fa beq 0x7981e | goto label_33;
| }
0x000798fc ldr r3, [r7] | r3 = *(r7);
| if (r3 != 0) {
0x000798fe cbz r3, 0x7990a |
| label_36:
0x00079900 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00079902 mov r0, r7 | r0 = r7;
0x00079904 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00079906 movs r3, 0 | r3 = 0;
0x00079908 str r3, [r7] | *(r7) = r3;
| }
| label_37:
0x0007990a mov r0, r7 | r0 = r7;
0x0007990c bl 0x26dbc | fcn_00026dbc (r0);
0x00079910 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00079914 cmp r3, 0 |
| if (r3 == 0) {
0x00079916 beq 0x798da | goto label_34;
| }
0x00079918 mov r1, fp | r1 = fp;
0x0007991a mov r0, sl | r0 = sl;
0x0007991c movs r2, 0 | r2 = 0;
0x0007991e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00079920 b 0x798da | goto label_34;
| label_83:
0x00079922 movs r1, 4 | r1 = 4;
0x00079924 bl 0x2c66c | fcn_0002c66c (r0, r1);
0x00079928 ldrb r3, [r7, 9] | r3 = *((r7 + 9));
0x0007992a mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x0007992c cbz r3, 0x79936 |
| label_84:
0x0007992e ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00079930 subs r3, 1 | r3--;
0x00079932 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| if (r3 == 0) {
0x00079934 cbz r3, 0x7993e | goto label_102;
| }
| }
0x00079936 cmp r6, 0 |
| if (r6 == 0) {
0x00079938 beq.w 0x79696 | goto label_35;
| }
0x0007993c b 0x79660 | goto label_24;
| label_102:
0x0007993e mov r0, r7 | r0 = r7;
0x00079940 bl 0x22944 | fcn_00022944 (r0);
0x00079944 cmp r6, 0 |
| if (r6 == 0) {
0x00079946 beq.w 0x79696 | goto label_35;
| }
0x0007994a b 0x79660 | goto label_24;
| label_69:
0x0007994c mov r4, fp | r4 = fp;
0x0007994e str.w r8, [r5, 0x194] | __asm ("str.w r8, [r5, 0x194]");
0x00079952 b 0x79660 | goto label_24;
| label_73:
0x00079954 movw r6, 0x213 | r6 = 0x213;
0x00079958 b 0x793d6 | goto label_16;
| label_88:
0x0007995a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0007995c mov r0, r5 | r0 = r5;
0x0007995e mov r6, r8 | r6 = r8;
0x00079960 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00079964 b 0x79660 | goto label_24;
| label_93:
0x00079966 ldr r3, [r7] | r3 = *(r7);
0x00079968 mov r6, r2 | r6 = r2;
0x0007996a ldr r4, [sp, 0x14] | r4 = var_14h;
0x0007996c cmp r3, 0 |
| if (r3 != 0) {
0x0007996e bne 0x79900 | goto label_36;
| }
0x00079970 b 0x7990a | goto label_37;
| label_101:
0x00079972 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00079974 add.w sb, sb, 1 | sb++;
0x00079978 b 0x79824 | goto label_38;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7a8a0 */
| #include <stdint.h>
|
; (fcn) fcn.0007a8a0 () | void fcn_0007a8a0 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x0007a8a0 ldr r2, [pc, 0x270] |
0x0007a8a2 ldr r3, [pc, 0x274] | r3 = *(0x7ab1a);
0x0007a8a4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007a8a8 sub sp, 0x24 |
0x0007a8aa add r2, pc | r2 = 0xf53c2;
0x0007a8ac ldr r7, [r0] | r7 = *(r0);
0x0007a8ae mov r8, r0 | r8 = r0;
0x0007a8b0 ldr r3, [r2, r3] |
0x0007a8b2 ldr.w sl, [r7] | sl = *(r7);
0x0007a8b4 adr r0, 0 | r0 = 0;
0x0007a8b6 ldr r3, [r3] | r3 = *(0xf53c2);
0x0007a8b8 str r3, [sp, 0x1c] | var_1ch = r3;
0x0007a8ba mov.w r3, 0 | r3 = 0;
| if (r1 == 0) {
0x0007a8be cbz r1, 0x7a8f8 | goto label_11;
| }
0x0007a8c0 sub.w r3, sl, 3 | r3 = sl - 3;
0x0007a8c4 mov r5, r1 | r5 = r1;
0x0007a8c6 cmp r3, 1 |
| if (r3 < 1) {
0x0007a8c8 bls 0x7a906 | goto label_12;
| }
0x0007a8ca cmp.w sl, 2 |
| if (sl == 2) {
0x0007a8ce beq.w 0x7aa40 | goto label_13;
| }
| label_5:
0x0007a8d2 mov.w sb, 0 | sb = 0;
| do {
| label_8:
0x0007a8d6 ldr r2, [pc, 0x244] |
0x0007a8d8 ldr r3, [pc, 0x23c] | r3 = *(0x7ab18);
0x0007a8da str.w r7, [r8] | __asm ("str.w r7, [r8]");
0x0007a8de add r2, pc | r2 = 0xf5400;
0x0007a8e0 ldr r3, [r2, r3] | r3 = *(0xf5400);
0x0007a8e2 ldr r2, [r3] | r2 = *(0xf5400);
0x0007a8e4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007a8e6 eors r2, r3 | r2 ^= r3;
0x0007a8e8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007a8ec bne.w 0x7aafe | goto label_14;
| }
0x0007a8f0 mov r0, sb | r0 = sb;
0x0007a8f2 add sp, 0x24 |
0x0007a8f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0007a8f8 mov.w sb, 1 | sb = 1;
| label_2:
0x0007a8fc mov r0, r7 | r0 = r7;
0x0007a8fe movs r7, 0 | r7 = 0;
0x0007a900 bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x0007a904 b 0x7a8d6 |
| } while (1);
| label_12:
0x0007a906 ldr r3, [pc, 0x218] |
0x0007a908 add r3, pc |
0x0007a90a ldr.w r3, [r3, 0xd0] | r3 = *(0xf54fe);
0x0007a90e cmp r3, 0 |
| if (r3 != 0) {
0x0007a910 bne.w 0x7aa86 | goto label_15;
| }
0x0007a914 bl 0x25da0 | r0 = fcn_00025da0 ();
0x0007a918 cmp r0, 0 |
| if (r0 != 0) {
0x0007a91a bne.w 0x7aaea | goto label_16;
| }
0x0007a91e bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0007a922 cmp r0, 0 |
| if (r0 != 0) {
0x0007a924 bne.w 0x7aaea | goto label_16;
| }
| label_4:
0x0007a928 lsls r3, r5, 2 | r3 = r5 << 2;
0x0007a92a movs r1, 0 | r1 = 0;
0x0007a92c mov r0, r3 | r0 = r3;
0x0007a92e mov r4, r3 | r4 = r3;
0x0007a930 str r3, [sp, 0xc] | var_ch = r3;
0x0007a932 bl 0x28c3c | fcn_00028c3c (r0);
0x0007a936 str r0, [sp, 4] | var_4h = r0;
0x0007a938 cmp r0, 0 |
| if (r0 == 0) {
0x0007a93a beq.w 0x7aaea | goto label_16;
| }
0x0007a93e movs r1, 0 | r1 = 0;
0x0007a940 mov r2, r4 | r2 = r4;
0x0007a942 blx 0x62ec | fcn_000062ec ();
0x0007a946 ldr r3, [r7] | r3 = *(r7);
0x0007a948 mov r1, r7 | r1 = r7;
0x0007a94a str r7, [sp, 0x18] | var_18h = r7;
0x0007a94c cmp sl, r3 |
| if (sl != r3) {
0x0007a94e bne 0x7a95a | goto label_17;
| }
| do {
0x0007a950 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0007a952 ldr r3, [r1] | r3 = *(r1);
0x0007a954 cmp r3, sl |
0x0007a956 beq 0x7a950 |
| } while (r3 == sl);
0x0007a958 str r1, [sp, 0x18] | var_18h = r1;
| label_17:
0x0007a95a ldr.w sb, [r1, 8] | sb = *((r1 + 8));
0x0007a95e subs r3, r5, 1 | r3 = r5 - 1;
0x0007a960 movs r4, 0 | r4 = 0;
0x0007a962 str r3, [sp, 8] | var_8h = r3;
0x0007a964 mov r6, r4 | r6 = r4;
0x0007a966 add r3, sp, 0x18 | r3 += var_18h;
0x0007a968 mov fp, r3 |
0x0007a96a str r6, [r1, 8] | *((r1 + 8)) = r6;
0x0007a96c cmp.w sb, 0 |
| if (sb == 0) {
0x0007a970 beq 0x7a9f8 | goto label_18;
| }
| label_0:
0x0007a972 str.w r6, [sb, 0xc] | __asm ("str.w r6, [sb, 0xc]");
| label_1:
0x0007a976 ldr r1, [sp, 8] | r1 = var_8h;
0x0007a978 mov r0, fp | r0 = fp;
0x0007a97a bl 0x7a8a0 | r0 = fcn_0007a8a0 (r0, r1);
0x0007a97e cmp r0, 0 |
| if (r0 != 0) {
0x0007a980 bne.w 0x7aaf4 | goto label_19;
| }
0x0007a984 ldr r1, [sp, 0x18] | r1 = var_18h;
| if (r1 == 0) {
0x0007a986 cbz r1, 0x7a9be | goto label_20;
| }
0x0007a988 cmp r5, 0 |
| if (r5 <= 0) {
0x0007a98a ble.w 0x7ab02 | goto label_21;
| }
0x0007a98e ldr r3, [sp, 4] | r3 = var_4h;
0x0007a990 mov ip, r0 |
0x0007a992 b 0x7a9b0 |
| while (r2 != 0) {
0x0007a994 add.w ip, ip, 1 |
0x0007a998 strd r2, r1, [r4, 0xc] | __asm ("strd r2, r1, [r4, 0xc]");
0x0007a99c cmp ip, r5 |
0x0007a99e str r4, [r2, 8] | *((r2 + 8)) = r4;
0x0007a9a0 str r4, [r1, 8] | *((r1 + 8)) = r4;
0x0007a9a2 mov r1, r4 | r1 = r4;
0x0007a9a4 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0007a9a6 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x0007a9a8 str r6, [r3, -0x4] | *((r3 - 0x4)) = r6;
| if (ip == r5) {
0x0007a9ac beq 0x7a9fc | goto label_22;
| }
0x0007a9ae mov r4, r2 | r4 = r2;
0x0007a9b0 mov lr, r3 | lr = r3;
0x0007a9b2 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0007a9b6 cmp r2, 0 |
0x0007a9b8 bne 0x7a994 |
| }
0x0007a9ba str.w r1, [lr] | __asm ("str.w r1, [lr]");
| label_20:
0x0007a9be cmp.w sb, 0 |
| if (sb == 0) {
0x0007a9c2 beq 0x7aa98 | goto label_23;
| }
0x0007a9c4 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x0007a9c8 ldr r3, [r2] | r3 = *(r2);
0x0007a9ca mov r1, r2 | r1 = r2;
0x0007a9cc str r2, [sp, 0x18] | var_18h = r2;
0x0007a9ce cmp sl, r3 |
| if (sl != r3) {
0x0007a9d0 bne 0x7a9dc | goto label_24;
| }
| do {
0x0007a9d2 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0007a9d4 ldr r3, [r1] | r3 = *(r1);
0x0007a9d6 cmp r3, sl |
0x0007a9d8 beq 0x7a9d2 |
| } while (r3 == sl);
0x0007a9da str r1, [sp, 0x18] | var_18h = r1;
| label_24:
0x0007a9dc ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x0007a9e0 str r3, [r2, 8] | *((r2 + 8)) = r3;
| if (r3 == 0) {
0x0007a9e2 cbz r3, 0x7aa3c | goto label_25;
| }
0x0007a9e4 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
| label_3:
0x0007a9e6 str.w r4, [sb, 8] | __asm ("str.w r4, [sb, 8]");
0x0007a9ea mov r4, sb | r4 = sb;
0x0007a9ec ldr.w sb, [r1, 8] | sb = *((r1 + 8));
0x0007a9f0 str r6, [r1, 8] | *((r1 + 8)) = r6;
0x0007a9f2 cmp.w sb, 0 |
| if (sb != 0) {
0x0007a9f6 bne 0x7a972 | goto label_0;
| }
| label_18:
0x0007a9f8 mov r7, sb | r7 = sb;
0x0007a9fa b 0x7a976 | goto label_1;
| label_22:
0x0007a9fc mov r0, r4 | r0 = r4;
0x0007a9fe str r2, [sp, 8] | var_8h = r2;
0x0007aa00 str r4, [sp, 0x18] | var_18h = r4;
0x0007aa02 mov.w sb, 0x12 | sb = 0x12;
0x0007aa04 lsrs r2, r2, 4 | r2 >>= 4;
0x0007aa06 bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x0007aa0a ldr r2, [sp, 8] | r2 = var_8h;
| label_9:
0x0007aa0c ldr r3, [sp, 4] | r3 = var_4h;
0x0007aa0e movs r4, 0 | r4 = 0;
0x0007aa10 mov sl, r2 | sl = r2;
0x0007aa12 subs r6, r3, 4 | r6 = r3 - 4;
| do {
0x0007aa14 ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x0007aa18 adds r4, 1 | r4++;
0x0007aa1a bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x0007aa1e cmp r5, r4 |
0x0007aa20 bne 0x7aa14 |
| } while (r5 != r4);
0x0007aa22 mov r2, sl | r2 = sl;
| label_10:
0x0007aa24 mov r4, r2 | r4 = r2;
| if (r2 == 0) {
0x0007aa26 cbz r2, 0x7aa34 | goto label_26;
| }
| do {
0x0007aa28 mov r0, r4 | r0 = r4;
0x0007aa2a ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x0007aa2c bl 0x26dbc | fcn_00026dbc (r0);
0x0007aa30 cmp r4, 0 |
0x0007aa32 bne 0x7aa28 |
| } while (r4 != 0);
| label_26:
0x0007aa34 ldr r0, [sp, 4] | r0 = var_4h;
0x0007aa36 bl 0x26dbc | fcn_00026dbc (r0);
0x0007aa3a b 0x7a8fc | goto label_2;
| label_25:
0x0007aa3c mov r7, r2 | r7 = r2;
0x0007aa3e b 0x7a9e6 | goto label_3;
| label_13:
0x0007aa40 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0007aa44 add.w r3, r7, 0xc | r3 = r7 + 0xc;
0x0007aa46 lsls r4, r1, 0xc | r4 = r1 << 0xc;
0x0007aa48 ldrd r2, r4, [r7, 0xc] | __asm ("ldrd r2, r4, [r7, 0xc]");
0x0007aa4c subs r5, r1, 1 | r5 = r1 - 1;
0x0007aa4e mov r1, r5 | r1 = r5;
0x0007aa50 add r0, sp, 0x14 | r0 += var_14h;
0x0007aa52 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0007aa56 movs r3, 0 | r3 = 0;
0x0007aa58 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0007aa5a str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0007aa5c strd r2, r4, [sp, 0x14] | __asm ("strd r2, r4, [var_18h]");
0x0007aa60 bl 0x7a8a0 | r0 = fcn_0007a8a0 (r0, r1);
0x0007aa64 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0007aa66 cbnz r0, 0x7aa78 |
0x0007aa68 mov r1, r5 | r1 = r5;
0x0007aa6a add r0, sp, 0x18 | r0 += var_18h;
0x0007aa6c bl 0x7a8a0 | fcn_0007a8a0 (r0, r1);
0x0007aa70 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007aa72 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0007aa74 cbz r0, 0x7aa8c | goto label_27;
| }
0x0007aa76 ldr r4, [sp, 0x18] | r4 = var_18h;
| }
0x0007aa78 mov r0, r4 | r0 = r4;
0x0007aa7a bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x0007aa7e ldr r0, [sp, 0x14] | r0 = var_14h;
0x0007aa80 bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x0007aa84 b 0x7a8fc | goto label_2;
| label_15:
0x0007aa86 dmb ish | __asm ("dmb ish");
0x0007aa8a b 0x7a928 | goto label_4;
| label_27:
0x0007aa8c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0007aa8e str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0007aa90 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x0007aa92 str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x0007aa94 str r7, [r2, 8] | *((r2 + 8)) = r7;
0x0007aa96 b 0x7a8d2 | goto label_5;
| label_23:
0x0007aa98 cmp r5, 0 |
0x0007aa9a mov fp, sb |
0x0007aa9c str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x0007aaa0 mov sb, r0 | sb = r0;
| if (r5 <= 0) {
0x0007aaa2 ble 0x7aaf0 | goto label_28;
| }
0x0007aaa4 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0007aaa6 mov r7, fp | r7 = fp;
0x0007aaa8 ldr r3, [sp, 4] | r3 = var_4h;
0x0007aaaa mov r5, fp | r5 = fp;
0x0007aaac mov r6, fp | r6 = fp;
0x0007aaae add r0, r3 | r0 += r3;
0x0007aab0 b 0x7aacc | goto label_29;
| label_6:
0x0007aab2 str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
0x0007aab4 movs r5, 1 | r5 = 1;
0x0007aab6 ldr r2, [r3, -0x4] | r2 = *((r3 - 0x4));
0x0007aaba str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0007aabc str r4, [r2, 8] | *((r2 + 8)) = r4;
0x0007aabe str r4, [r7, 8] | *((r7 + 8)) = r4;
0x0007aac0 mov r7, r4 | r7 = r4;
0x0007aac2 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0007aac4 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x0007aac6 mov r4, r2 | r4 = r2;
| do {
| label_7:
0x0007aac8 cmp r0, r3 |
| if (r0 == r3) {
0x0007aaca beq 0x7aae0 | goto label_30;
| }
| label_29:
0x0007aacc ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0007aad0 cmp r2, 0 |
0x0007aad2 beq 0x7aac8 |
| } while (r2 == 0);
0x0007aad4 cmp r7, 0 |
| if (r7 != 0) {
0x0007aad6 bne 0x7aab2 | goto label_6;
| }
0x0007aad8 str r7, [r2, 8] | *((r2 + 8)) = r7;
0x0007aada movs r5, 1 | r5 = 1;
0x0007aadc mov r7, r2 | r7 = r2;
0x0007aade b 0x7aac8 | goto label_7;
| label_30:
0x0007aae0 cbz r5, 0x7aaf0 |
| while (1) {
0x0007aae2 ldr r0, [sp, 4] | r0 = var_4h;
0x0007aae4 bl 0x26dbc | fcn_00026dbc (r0);
0x0007aae8 b 0x7a8d6 | goto label_8;
| label_16:
0x0007aaea mov.w sb, 7 | sb = 7;
0x0007aaee b 0x7a8fc | goto label_2;
| label_28:
0x0007aaf0 movs r7, 0 | r7 = 0;
0x0007aaf2 b 0x7aae2 |
| }
| label_19:
0x0007aaf4 cmp r5, 0 |
0x0007aaf6 mov sb, r0 | sb = r0;
0x0007aaf8 mov r2, r4 | r2 = r4;
| if (r5 > 0) {
0x0007aafa bgt 0x7aa0c | goto label_9;
| }
0x0007aafc b 0x7aa24 | goto label_10;
| label_14:
0x0007aafe blx 0x6430 | fcn_00006430 ();
| label_21:
0x0007ab02 mov r0, r1 | r0 = r1;
0x0007ab04 str r4, [sp, 8] | var_8h = r4;
0x0007ab06 mov.w sb, 0x12 | sb = 0x12;
0x0007ab0a bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x0007ab0e ldr r2, [sp, 8] | r2 = var_8h;
0x0007ab10 b 0x7aa24 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7aba4 */
| #include <stdint.h>
|
; (fcn) fcn.0007aba4 () | void fcn_0007aba4 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007aba4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007aba8 mov r8, r2 | r8 = r2;
0x0007abaa ldr r2, [pc, 0x1a0] |
0x0007abac mov fp, r3 |
0x0007abae sub sp, 0x3c |
0x0007abb0 mov sb, r0 | sb = r0;
0x0007abb2 ldr r3, [pc, 0x19c] | r3 = *(0x7ad52);
0x0007abb4 mov r6, r1 | r6 = r1;
0x0007abb6 add r2, pc | r2 = 0xf5908;
0x0007abb8 ldr r4, [r1, 0x50] | r4 = *((r1 + 0x50));
0x0007abba ldr r3, [r2, r3] |
0x0007abbc ldr r3, [r3] | r3 = *(0xf5908);
0x0007abbe str r3, [sp, 0x34] | var_34h = r3;
0x0007abc0 mov.w r3, 0 | r3 = 0;
0x0007abc4 ldrb.w r3, [r0, 0xef] | r3 = *((r0 + 0xef));
0x0007abc8 str r4, [sp, 0x24] | var_24h = r4;
| if (r3 != 0) {
0x0007abca cbz r3, 0x7ac16 |
0x0007abcc ldr r3, [r1, 0x38] | r3 = *((r1 + 0x38));
| if (r3 == 0) {
0x0007abce cbz r3, 0x7ac16 | goto label_7;
| }
0x0007abd0 movs r3, 0 | r3 = 0;
0x0007abd2 strb.w r3, [sp, 0x28] | var_28h = r3;
0x0007abd6 cmp.w r8, 0 |
| if (r8 != 0) {
0x0007abda beq 0x7abe8 |
0x0007abdc ldr r3, [r1, 0x54] | r3 = *((r1 + 0x54));
0x0007abde str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x0007abe2 subs r3, 1 | r3--;
0x0007abe4 str.w r3, [fp] | __asm ("str.w r3, [fp]");
| }
0x0007abe8 add.w r1, r6, 0x54 | r1 = r6 + 0x54;
0x0007abec add.w r0, r6, 0x58 | r0 = r6 + 0x58;
0x0007abf0 add r4, sp, 0x28 | r4 += var_28h;
0x0007abf2 ldr r2, [r6, 0x4c] | r2 = *((r6 + 0x4c));
0x0007abf4 add r3, sp, 0x24 | r3 += var_24h;
0x0007abf6 strd r1, r4, [sp, 4] | __asm ("strd r1, r4, [var_4h]");
0x0007abfa ldr r1, [r6, 0x48] | r1 = *((r6 + 0x48));
0x0007abfc str r0, [sp] | *(sp) = r0;
0x0007abfe movs r0, 0 | r0 = 0;
0x0007ac00 bl 0x2c890 | fcn_0002c890 (r0, r1, r2, r3, r4, r5, r6);
0x0007ac04 ldrb.w r3, [sp, 0x28] | r3 = var_28h;
0x0007ac08 cmp r3, 0 |
| if (r3 == 0) {
0x0007ac0a beq.w 0x7ad34 | goto label_8;
| }
| label_1:
0x0007ac0e movs r3, 0 | r3 = 0;
| label_5:
0x0007ac10 str r3, [r6, 0x50] | *((r6 + 0x50)) = r3;
| label_3:
0x0007ac12 movs r0, 0 | r0 = 0;
0x0007ac14 b 0x7ac58 | goto label_2;
| }
| label_7:
0x0007ac16 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x0007ac18 movs r5, 0 | r5 = 0;
0x0007ac1a ldr r7, [pc, 0x138] |
0x0007ac1c ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0007ac1e str r3, [sp, 0x14] | var_14h = r3;
0x0007ac20 ldr r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x0007ac22 add r7, pc | r7 = 0xf597c;
0x0007ac24 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x0007ac28 str r3, [sp, 0x18] | var_18h = r3;
| do {
| label_0:
0x0007ac2a ldrb r3, [r4] | r3 = *(r4);
0x0007ac2c orrs r5, r3 | r5 |= r3;
| if (r5 != r3) {
0x0007ac2e bne 0x7aca0 | goto label_9;
| }
0x0007ac30 cmp r0, 0 |
| if (r0 == 0) {
0x0007ac32 beq 0x7acaa | goto label_10;
| }
0x0007ac34 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0007ac36 ldr r1, [r6, 0x28] | r1 = *((r6 + 0x28));
0x0007ac38 add r1, r3 | r1 += r3;
0x0007ac3a cmp r1, r4 |
| if (r1 > r4) {
0x0007ac3c bhi 0x7acaa | goto label_10;
| }
0x0007ac3e str r7, [sp] | *(sp) = r7;
0x0007ac40 ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0007ac42 sub.w r8, r2, r3 | r8 = r2 - r3;
0x0007ac46 cmp.w r8, 0x1000 |
0x0007ac4a it ge |
| if (r8 < 0x1000) {
0x0007ac4c movge r8, 0x1000 | r8 = 0x1000;
| }
0x0007ac50 mov r2, r8 | r2 = r8;
0x0007ac52 bl 0x79a00 | r0 = fcn_00079a00 (r0, r1, r2, r3, r4);
| if (r0 != 0) {
0x0007ac56 cbz r0, 0x7ac72 |
| label_2:
0x0007ac58 ldr r2, [pc, 0xfc] |
0x0007ac5a ldr r3, [pc, 0xf4] | r3 = *(0x7ad52);
0x0007ac5c add r2, pc | r2 = 0xf59b8;
0x0007ac5e ldr r3, [r2, r3] | r3 = *(0xf59b8);
0x0007ac60 ldr r2, [r3] | r2 = *(0xf59b8);
0x0007ac62 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007ac64 eors r2, r3 | r2 ^= r3;
0x0007ac66 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007ac6a bne 0x7ad48 | goto label_11;
| }
0x0007ac6c add sp, 0x3c |
0x0007ac6e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0007ac72 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0007ac74 add.w r2, r8, r3 | r2 = r8 + r3;
0x0007ac78 ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x0007ac7a str r2, [r6, 0x30] | *((r6 + 0x30)) = r2;
0x0007ac7c str r5, [r3, r2] | *((r3 + r2)) = r5;
0x0007ac7e add r3, r2 | r3 += r2;
0x0007ac80 str r5, [r3, 4] | *((r3 + 4)) = r5;
0x0007ac82 str r5, [r3, 8] | *((r3 + 8)) = r5;
0x0007ac84 str r5, [r3, 0xc] | *((r3 + 0xc)) = r5;
0x0007ac86 str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x0007ac88 ldrd r3, r2, [r6, 0x2c] | __asm ("ldrd r3, r2, [r6, 0x2c]");
0x0007ac8c ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0007ac8e cmp r2, r3 |
0x0007ac90 bne 0x7ac2a |
| } while (r2 != r3);
0x0007ac92 bl 0x7a69c | fcn_0007a69c (r0);
0x0007ac96 strd r5, r5, [r6, 0x30] | __asm ("strd r5, r5, [r6, 0x30]");
0x0007ac9a ldrb r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x0007ac9c cbz r3, 0x7acaa |
0x0007ac9e mov r0, r5 | r0 = r5;
| label_9:
0x0007aca0 adds r4, 1 | r4++;
0x0007aca2 and r5, r3, 0x80 | r5 = r3 & 0x80;
0x0007aca6 str r4, [sp, 0x24] | var_24h = r4;
0x0007aca8 b 0x7ac2a | goto label_0;
| }
| label_10:
0x0007acaa ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x0007acae adds r4, 1 | r4++;
0x0007acb0 str r4, [sp, 0x24] | var_24h = r4;
0x0007acb2 cmp.w r8, 0 |
| if (r8 != 0) {
0x0007acb6 beq 0x7acc6 |
0x0007acb8 ldr r3, [r6, 0x50] | r3 = *((r6 + 0x50));
0x0007acba str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0007acbe subs r3, r4, r3 | r3 = r4 - r3;
0x0007acc0 subs r3, 1 | r3--;
0x0007acc2 str.w r3, [fp] | __asm ("str.w r3, [fp]");
| }
0x0007acc6 ldrd r2, r3, [sp, 0x14] | __asm ("ldrd r2, r3, [var_14h]");
0x0007acca add r2, r3 | r2 += r3;
0x0007accc cmp r4, r2 |
0x0007acce it lo |
| if (r4 >= r2) {
0x0007acd0 movlo r1, 0 | r1 = 0;
| }
| if (r4 <= r2) {
0x0007acd2 blo 0x7ace0 | goto label_12;
| }
0x0007acd4 b 0x7ac0e | goto label_1;
| do {
0x0007acd6 cmp r4, r2 |
0x0007acd8 mov sl, r4 | sl = r4;
0x0007acda mov.w r1, 1 | r1 = 1;
| if (r4 == r2) {
0x0007acde beq 0x7ad28 | goto label_13;
| }
| label_12:
0x0007ace0 mov r5, r4 | r5 = r4;
0x0007ace2 ldrb r3, [r4], 1 | r3 = *(r4);
| r4++;
0x0007ace6 cmp r3, 0 |
0x0007ace8 beq 0x7acd6 |
| } while (r3 == 0);
| if (r1 != 0) {
0x0007acea cbz r1, 0x7acf0 |
0x0007acec str.w sl, [sp, 0x24] | __asm ("str.w sl, [var_24h]");
| }
0x0007acf0 cmp r5, r2 |
| if (r5 >= r2) {
0x0007acf2 bhs 0x7ac0e | goto label_1;
| }
| label_4:
0x0007acf4 movs r2, 0xa | r2 = 0xa;
0x0007acf6 mov r1, r5 | r1 = r5;
0x0007acf8 mov r0, r6 | r0 = r6;
0x0007acfa bl 0x7ab24 | r0 = fcn_0007ab24 (r0, r1, r2);
0x0007acfe cmp r0, 0 |
| if (r0 != 0) {
0x0007ad00 bne 0x7ac58 | goto label_2;
| }
0x0007ad02 mov r0, r5 | r0 = r5;
0x0007ad04 add r1, sp, 0x28 | r1 += var_28h;
0x0007ad06 bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x0007ad0a add r5, r0 | r5 += r0;
0x0007ad0c str r5, [r6, 0x50] | *((r6 + 0x50)) = r5;
0x0007ad0e ldrb.w r3, [sb, 0xef] | r3 = *((sb + 0xef));
| if (r3 == 0) {
0x0007ad12 cbz r3, 0x7ad38 | goto label_14;
| }
0x0007ad14 ldr r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x0007ad16 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0007ad18 ldr r2, [r6, 0x5c] | r2 = *((r6 + 0x5c));
0x0007ad1a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0007ad1c subs r3, r3, r1 | r3 -= r1;
0x0007ad1e sbc.w r2, r2, r0 | __asm ("sbc.w r2, r2, r0");
| label_6:
0x0007ad22 strd r3, r2, [r6, 0x58] | __asm ("strd r3, r2, [r6, 0x58]");
0x0007ad26 b 0x7ac12 | goto label_3;
| label_13:
0x0007ad28 mov r5, r2 | r5 = r2;
0x0007ad2a str r2, [sp, 0x24] | var_24h = r2;
0x0007ad2c cmp r5, r2 |
| if (r5 >= r2) {
0x0007ad2e bhs.w 0x7ac0e | goto label_1;
| }
0x0007ad32 b 0x7acf4 | goto label_4;
| label_8:
0x0007ad34 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007ad36 b 0x7ac10 | goto label_5;
| label_14:
0x0007ad38 ldr r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x0007ad3a ldr r1, [sp, 0x28] | r1 = var_28h;
0x0007ad3c ldr r2, [r6, 0x5c] | r2 = *((r6 + 0x5c));
0x0007ad3e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0007ad40 adds r3, r3, r1 | r3 += r1;
0x0007ad42 adc.w r2, r2, r0 | __asm ("adc.w r2, r2, r0");
0x0007ad46 b 0x7ad22 | goto label_6;
| label_11:
0x0007ad48 blx 0x6430 | fcn_00006430 ();
0x0007ad4c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7ad5c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007ad5c () | void fcn_0007ad5c (int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007ad5c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0007ad60 sub sp, 0x44 |
0x0007ad62 mov sl, r1 | sl = r1;
0x0007ad64 ldr r1, [sp, 0x68] | r1 = *(arg_68h);
0x0007ad66 mov r5, r3 | r5 = r3;
0x0007ad68 mov r6, r0 | r6 = r0;
0x0007ad6a ldr r3, [pc, 0x1dc] | r3 = *(0x7af4a);
0x0007ad6c str r1, [sp, 0x24] | var_24h = r1;
0x0007ad6e ldr r1, [pc, 0x1dc] |
0x0007ad70 ldr.w sb, [sl, 8] | sb = *((sl + 8));
0x0007ad74 ldr.w fp, [sl] | fp = *(sl);
0x0007ad78 add r1, pc | r1 = 0xf5cca;
0x0007ad7a ldr r3, [r1, r3] |
0x0007ad7c ldr r3, [r3] | r3 = *(0xf5cca);
0x0007ad7e str r3, [sp, 0x3c] | var_3ch = r3;
0x0007ad80 mov.w r3, 0 | r3 = 0;
0x0007ad82 lsls r0, r0, 0xc | r0 <<= 0xc;
0x0007ad84 ldrb.w r3, [r0, 0xef] | r3 = *(arg_68hxef);
0x0007ad88 cmp r3, 0 |
| if (r3 == 0) {
0x0007ad8a beq.w 0x7af30 | goto label_7;
| }
0x0007ad8e ldr.w lr, [pc, 0x1c0] |
0x0007ad92 add lr, pc | lr += pc;
| label_5:
0x0007ad94 cmp.w sb, 0 |
| if (sb == 0) {
0x0007ad98 beq.w 0x7af28 | goto label_8;
| }
0x0007ad9c ldr.w r1, [fp] | r1 = *(fp);
0x0007ada0 ldr r3, [r1, 0x50] | r3 = *((r1 + 0x50));
0x0007ada2 cmp r3, 0 |
| if (r3 == 0) {
0x0007ada4 beq.w 0x7af28 | goto label_8;
| }
0x0007ada8 ldr r3, [pc, 0x1a8] |
0x0007adaa cmp.w sb, 1 |
0x0007adae mov r8, r6 | r8 = r6;
0x0007adb0 str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h]");
0x0007adb4 strd r5, r2, [sp, 0x28] | __asm ("strd r5, r2, [var_28h]");
0x0007adb8 add r3, pc | r3 = 0xf5d10;
0x0007adba str r3, [sp, 0x14] | var_14h = r3;
0x0007adbc ite le |
| if (sb > 1) {
0x0007adbe movle r3, 0 | r3 = 0;
| }
| if (sb <= 1) {
0x0007adc0 movgt r3, 1 | r3 = 1;
| }
0x0007adc2 str r3, [sp, 0xc] | var_ch = r3;
0x0007adc4 add r3, sp, 0x38 | r3 += var_38h;
0x0007adc6 str r3, [sp, 8] | var_8h = r3;
0x0007adc8 add r3, sp, 0x34 | r3 += var_34h;
0x0007adca str r3, [sp, 4] | var_4h = r3;
| label_0:
0x0007adcc ldrd r2, r3, [sp, 4] | __asm ("ldrd r2, r3, [var_8h]");
0x0007add0 mov r0, r8 | r0 = r8;
0x0007add2 ldrd r7, r6, [r1, 0x58] | __asm ("ldrd r7, r6, [r1, 0x58]");
0x0007add6 bl 0x7aba4 | fcn_0007aba4 (r0, r1, r2, r3, r4);
0x0007adda ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007addc cmp r0, 0 |
0x0007adde ite ne |
| if (r0 == 0) {
0x0007ade0 movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x0007ade2 andeq r3, r3, 1 | r3 &= 1;
| }
0x0007ade6 cmp r3, 0 |
| if (r3 == 0) {
0x0007ade8 beq.w 0x7af14 | goto label_9;
| }
0x0007adec mov r5, fp | r5 = fp;
0x0007adee movs r4, 1 | r4 = 1;
0x0007adf0 b 0x7ae1c |
| while (r3 != 0) {
0x0007adf2 ldrd r2, r3, [r1, 0x58] | __asm ("ldrd r2, r3, [r1, 0x58]");
0x0007adf6 cmp r3, r6 |
0x0007adf8 it eq |
| if (r3 == r6) {
0x0007adfa cmpeq r2, r7 | __asm ("cmpeq r2, r7");
| }
| if (r3 != r6) {
0x0007adfc bne 0x7ae26 | goto label_1;
| }
0x0007adfe movs r3, 0 | r3 = 0;
0x0007ae00 mov r0, r8 | r0 = r8;
0x0007ae02 mov r2, r3 | r2 = r3;
0x0007ae04 adds r4, 1 | r4++;
0x0007ae06 bl 0x7aba4 | r0 = fcn_0007aba4 (r0, r1, r2, r3, r4);
0x0007ae0a clz r3, r0 | r3 &= r0;
0x0007ae0e cmp sb, r4 |
0x0007ae10 lsr.w r3, r3, 5 | r3 >>= 5;
0x0007ae14 it le |
| if (sb > r4) {
0x0007ae16 movle r3, 0 | r3 = 0;
| }
0x0007ae18 cmp r3, 0 |
| if (r3 == 0) {
0x0007ae1a beq 0x7af16 | goto label_10;
| }
0x0007ae1c ldr r1, [r5, 4]! | r1 = *((r5 += 4));
0x0007ae20 ldr r3, [r1, 0x50] | r3 = *((r1 + 0x50));
0x0007ae22 cmp r3, 0 |
0x0007ae24 bne 0x7adf2 |
| }
| label_1:
0x0007ae26 mov r2, r4 | r2 = r4;
0x0007ae28 ldr.w r0, [sl] | r0 = *(sl);
0x0007ae2c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007ae2e mov r1, sb | r1 = sb;
0x0007ae30 bl 0x24870 | fcn_00024870 (r0, r1, r2, r3);
0x0007ae34 ldr r4, [sp, 0x38] | r4 = var_38h;
0x0007ae36 cmp r4, 0 |
| if (r4 <= 0) {
0x0007ae38 ble 0x7aefc | goto label_11;
| }
0x0007ae3a ldr.w r3, [fp] | r3 = *(fp);
0x0007ae3e ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0007ae40 cmp r3, 0 |
| if (r3 == 0) {
0x0007ae42 beq 0x7af1c | goto label_12;
| }
0x0007ae44 ldrd r0, r2, [sl, 0x18] | __asm ("ldrd r0, r2, [sl, 0x18]");
0x0007ae48 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0007ae4a adds r4, 1 | r4++;
0x0007ae4c ldr r1, [sp, 0x34] | r1 = var_34h;
0x0007ae4e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0007ae52 ldr.w r5, [sl, 0x10] | r5 = *((sl + 0x10));
0x0007ae56 cmp r0, r4 |
0x0007ae58 sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r0 < r4) {
0x0007ae5a bge 0x7aeaa |
0x0007ae5c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007ae5e ldr.w r0, [r2, 0xd0] | r0 = *((r2 + 0xd0));
0x0007ae62 adds r2, r4, r4 | r2 = r4 + r4;
0x0007ae64 adcs r3, r3 | __asm ("adcs r3, r3");
0x0007ae66 strd r2, r3, [sl, 0x18] | __asm ("strd r2, r3, [sl, 0x18]");
0x0007ae6a cmp r0, 0 |
| if (r0 != 0) {
0x0007ae6c bne 0x7af3c | goto label_13;
| }
0x0007ae6e strd r2, r3, [sp, 0x1c] | __asm ("strd r2, r3, [var_20h]");
0x0007ae72 str r1, [sp, 0x18] | var_18h = r1;
0x0007ae74 bl 0x25da0 | fcn_00025da0 ();
0x0007ae78 ldrd r1, r2, [sp, 0x18] | __asm ("ldrd r1, r2, [var_18h]");
0x0007ae7c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0007ae7e cmp r0, 0 |
| if (r0 != 0) {
0x0007ae80 bne 0x7af38 | goto label_14;
| }
0x0007ae82 strd r2, r3, [sp, 0x1c] | __asm ("strd r2, r3, [var_20h]");
0x0007ae86 str r1, [sp, 0x18] | var_18h = r1;
0x0007ae88 bl 0x5a4b8 | fcn_0005a4b8 ();
0x0007ae8c ldrd r1, r2, [sp, 0x18] | __asm ("ldrd r1, r2, [var_18h]");
0x0007ae90 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0007ae92 cmp r0, 0 |
| if (r0 != 0) {
0x0007ae94 bne 0x7af38 | goto label_14;
| }
| label_6:
0x0007ae96 mov r0, r5 | r0 = r5;
0x0007ae98 str r1, [sp, 0x18] | var_18h = r1;
0x0007ae9a bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x0007ae9e mov r5, r0 | r5 = r0;
0x0007aea0 cmp r0, 0 |
| if (r0 == 0) {
0x0007aea2 beq 0x7af38 | goto label_14;
| }
0x0007aea4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0007aea6 str.w r0, [sl, 0x10] | __asm ("str.w r0, [sl, 0x10]");
| }
0x0007aeaa mov r2, r4 | r2 = r4;
0x0007aeac mov r0, r5 | r0 = r5;
0x0007aeae blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007aeb2 ldr.w r0, [sl, 0x20] | r0 = *((sl + 0x20));
0x0007aeb6 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x0007aeba cmp r0, 0 |
0x0007aebc str r3, [sp, 0x34] | var_34h = r3;
0x0007aebe blt 0x7aeca |
| while (r0 >= 0) {
| label_3:
0x0007aec0 ldrd r2, r3, [sp, 4] | __asm ("ldrd r2, r3, [var_8h]");
0x0007aec4 movs r1, 1 | r1 = 1;
0x0007aec6 bl 0x25074 | fcn_00025074 (r0, r1, r2, r3);
0x0007aeca ldr r4, [sp, 0x38] | r4 = var_38h;
0x0007aecc cmp r4, 0 |
| if (r4 <= 0) {
0x0007aece ble 0x7af04 | goto label_15;
| }
| label_4:
0x0007aed0 ldrd r5, r2, [sp, 0x28] | __asm ("ldrd r5, r2, [var_28h]");
0x0007aed4 movs r0, 0 | r0 = 0;
0x0007aed6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007aed8 str r3, [r5] | *(r5) = r3;
0x0007aeda ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007aedc strd r7, r6, [r2] | __asm ("strd r7, r6, [r2]");
0x0007aee0 str r4, [r3] | *(r3) = r4;
| label_2:
0x0007aee2 ldr r2, [pc, 0x74] |
0x0007aee4 ldr r3, [pc, 0x60] | r3 = *(0x7af48);
0x0007aee6 add r2, pc | r2 = 0xf5e44;
0x0007aee8 ldr r3, [r2, r3] | r3 = *(0xf5e44);
0x0007aeea ldr r2, [r3] | r2 = *(0xf5e44);
0x0007aeec ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0007aeee eors r2, r3 | r2 ^= r3;
0x0007aef0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007aef4 bne 0x7af42 | goto label_16;
| }
0x0007aef6 add sp, 0x44 |
0x0007aef8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0007aefc ldr.w r0, [sl, 0x20] | r0 = *((sl + 0x20));
0x0007af00 cmp r0, 0 |
0x0007af02 bge 0x7aec0 |
| }
| label_15:
0x0007af04 ldr.w r3, [sl] | r3 = *(sl);
0x0007af08 ldr r3, [r3] | r3 = *(r3);
0x0007af0a ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
| if (r3 == 0) {
0x0007af0c cbz r3, 0x7af26 | goto label_17;
| }
0x0007af0e ldr.w r1, [fp] | r1 = *(fp);
0x0007af12 b 0x7adcc | goto label_0;
| label_9:
0x0007af14 movs r4, 1 | r4 = 1;
| label_10:
0x0007af16 cmp r0, 0 |
| if (r0 == 0) {
0x0007af18 beq 0x7ae26 | goto label_1;
| }
0x0007af1a b 0x7aee2 | goto label_2;
| label_12:
0x0007af1c ldr.w r0, [sl, 0x20] | r0 = *((sl + 0x20));
0x0007af20 cmp r0, 0 |
| if (r0 >= 0) {
0x0007af22 bge 0x7aec0 | goto label_3;
| }
0x0007af24 b 0x7aed0 | goto label_4;
| label_17:
0x0007af26 ldr r5, [sp, 0x28] | r5 = var_28h;
| label_8:
0x0007af28 movs r3, 0 | r3 = 0;
0x0007af2a movs r0, 0 | r0 = 0;
0x0007af2c str r3, [r5] | *(r5) = r3;
0x0007af2e b 0x7aee2 | goto label_2;
| label_7:
0x0007af30 ldr.w lr, [pc, 0x28] |
0x0007af34 add lr, pc | lr += pc;
0x0007af36 b 0x7ad94 | goto label_5;
| label_14:
0x0007af38 movs r0, 7 | r0 = 7;
0x0007af3a b 0x7aee2 | goto label_2;
| label_13:
0x0007af3c dmb ish | __asm ("dmb ish");
0x0007af40 b 0x7ae96 | goto label_6;
| label_16:
0x0007af42 blx 0x6430 | fcn_00006430 ();
0x0007af46 nop |
0x0007af48 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007af4a movs r0, r0 |
0x0007af4c bic r0, r0, 6 | r0 = BIT_MASK (r0, 6);
0x0007af50 ldm r5!, {r0, r1, r6} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r6 = *((r5! + 8));
0x0007af52 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7afc0 */
| #include <stdint.h>
|
; (fcn) fcn.0007afc0 () | void fcn_0007afc0 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_bp_0h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3bh;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| arithmetic x;
| int16_t var_60h;
| int32_t var_4h_2;
| int16_t var_ach;
| int16_t var_b0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0007afc0 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0007afc4 mov r3, r1 | r3 = r1;
0x0007afc6 sub sp, 0xb4 |
0x0007afc8 mov r8, r0 | r8 = r0;
0x0007afca mov r0, r3 | r0 = r3;
0x0007afcc mov r5, r2 | r5 = r2;
0x0007afce str r1, [sp, 0x14] | var_14h = r1;
0x0007afd0 movs r1, 1 | r1 = 1;
0x0007afd2 ldr r3, [r3] | r3 = *(r3);
0x0007afd4 ldrb.w sb, [r8, 0x34] | sb = *((r8 + 0x34));
0x0007afd8 strb.w r1, [r0, 0x21] | *((r0 + 0x21)) = r1;
0x0007afdc ldr.w r1, [pc, 0x724] |
0x0007afe0 subs r3, 1 | r3--;
0x0007afe2 ldr.w r2, [pc, 0x724] | r2 = *(0x7b70a);
0x0007afe6 add r1, pc | r1 = 0xf66ee;
0x0007afe8 ldr r2, [r1, r2] |
0x0007afea ldr r2, [r2] | r2 = *(0xf66ee);
0x0007afec str r2, [sp, 0xac] | var_ach = r2;
0x0007afee mov.w r2, 0 | r2 = 0;
0x0007aff2 cmp r3, 3 |
| if (r3 > 3) {
0x0007aff4 bhi.w 0x7b390 | goto label_36;
| }
| /* switch table (4 cases) at 0x7affc */
0x0007aff8 tbb [pc, r3] | __asm ("tbb [0x0007b000]");
0x0007b000 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b002 ldrd r6, r7, [r3, 0xc] | __asm ("ldrd r6, r7, [r3, 0xc]");
0x0007b006 ldr r3, [r5] | r3 = *(r5);
0x0007b008 ldrb.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x0007b00a movs r0, 0x22 | r0 = 0x22;
0x0007b00c cmp r2, 0 |
| if (r2 != 0) {
0x0007b00e bne.w 0x7b1bc | goto label_37;
| }
0x0007b012 ldrb.w r2, [r7, 0x22] | r2 = *((r7 + 0x22));
0x0007b016 cmp r2, 0 |
| if (r2 == 0) {
0x0007b018 beq.w 0x7b208 | goto label_38;
| }
| if (r3 == 0) {
0x0007b01c cbnz r3, 0x7b028 |
0x0007b01e mov r2, r5 | r2 = r5;
0x0007b020 mov r1, r6 | r1 = r6;
0x0007b022 mov r0, r8 | r0 = r8;
0x0007b024 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
| }
0x0007b028 ldrd r2, r3, [r6, 0x18] | __asm ("ldrd r2, r3, [r6, 0x18]");
0x0007b02c ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007b02e strd r2, r3, [r1, 0x18] | __asm ("strd r2, r3, [r1, 0x18]");
0x0007b030 movs r3, 6 | r3 = 6;
0x0007b032 ldrb.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007b036 strb.w r3, [r1, 0x20] | *((r1 + 0x20)) = r3;
0x0007b03a b 0x7b134 | goto label_0;
0x0007b03c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b03e cmp.w sb, 0 |
0x0007b042 ite eq |
| if (sb != 0) {
0x0007b044 moveq sb, 1 | sb = 1;
| }
| if (sb != 0) {
0x0007b048 mov.w sb, -1 | sb = -1;
| }
0x0007b04c ldrd r6, r7, [r3, 0xc] | __asm ("ldrd r6, r7, [r3, 0xc]");
0x0007b050 ldrd r0, ip, [r6, 0x18] | __asm ("ldrd r0, ip, [r6, 0x18]");
0x0007b054 ldrd r2, r1, [r7, 0x18] | __asm ("ldrd r2, r1, [r7, 0x18]");
0x0007b058 cmp r2, r0 |
0x0007b05a sbcs.w r3, r1, ip | __asm ("sbcs.w r3, r1, ip");
0x0007b05e it lt |
| if (r2 >= r0) {
0x0007b060 movlt lr, sb | lr = sb;
| }
| if (r2 >= r0) {
0x0007b062 blt 0x7b07c |
0x0007b064 cmp ip, r1 |
0x0007b066 it eq |
| if (ip == r1) {
0x0007b068 cmpeq r0, r2 | __asm ("cmpeq r0, r2");
| }
0x0007b06a ite ne |
| if (ip == r1) {
0x0007b06c movne lr, 1 | lr = 1;
| }
| if (ip == r1) {
0x0007b070 mov.w lr, 0 | lr = 0;
| }
0x0007b074 rsb.w lr, lr, 0 | lr -= ;
0x0007b078 mul lr, sb, lr | lr = sb * lr;
| }
0x0007b07c ldrb.w fp, [r7, 0x20] | fp = *((r7 + 0x20));
0x0007b080 ldr.w sl, [r5] | sl = *(r5);
0x0007b084 cmp.w fp, 0 |
| if (fp != 0) {
0x0007b088 bne 0x7b154 | goto label_39;
| }
0x0007b08a ldrb.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007b08e cmp r3, 0 |
| if (r3 == 0) {
0x0007b090 beq.w 0x7b1ee | goto label_40;
| }
0x0007b092 strh r5, [r5, 4] | *((r5 + 4)) = r5;
0x0007b094 cmp.w sl, 0 |
| if (sl != 0) {
0x0007b098 bne 0x7b178 | goto label_41;
| }
| label_3:
0x0007b09a mov r2, r5 | r2 = r5;
0x0007b09c mov r0, r8 | r0 = r8;
0x0007b09e mov r1, r7 | r1 = r7;
0x0007b0a0 b 0x7b162 | goto label_42;
0x0007b0a2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b0a4 ldrd r6, r7, [r3, 0xc] | __asm ("ldrd r6, r7, [r3, 0xc]");
0x0007b0a8 ldr r3, [r5] | r3 = *(r5);
0x0007b0aa ldrb.w r2, [r7, 0x21] | r2 = *((r7 + 0x21));
| if (r2 == 0) {
0x0007b0ae cbz r2, 0x7b11c | goto label_43;
| }
| if (r3 != 0) {
0x0007b0b0 cbnz r3, 0x7b122 | goto label_10;
| }
| label_9:
0x0007b0b2 mov r1, r6 | r1 = r6;
0x0007b0b4 mov r2, r5 | r2 = r5;
0x0007b0b6 mov r0, r8 | r0 = r8;
0x0007b0b8 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b0bc ldrb.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
| if (r1 != 0) {
0x0007b0c0 cbnz r1, 0x7b126 | goto label_44;
| }
0x0007b0c2 ldr r4, [r5] | r4 = *(r5);
0x0007b0c4 ldrd ip, r0, [r6, 0x18] | __asm ("ldrd ip, r0, [r6, 0x18]");
0x0007b0c8 mov r3, ip | r3 = ip;
0x0007b0ca mov r2, r0 | r2 = r0;
| if (r4 != 0) {
0x0007b0cc cbnz r4, 0x7b12a | goto label_12;
| }
0x0007b0ce mov r2, r5 | r2 = r5;
0x0007b0d0 mov r5, sb | r5 = sb;
0x0007b0d2 mov sb, r2 | sb = r2;
0x0007b0d4 ldrb.w r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x0007b0d8 mov r4, r0 | r4 = r0;
| if (r2 != 0) {
0x0007b0da cbnz r2, 0x7b114 | goto label_2;
| }
| do {
0x0007b0dc ldrd r0, r1, [r7, 0x18] | __asm ("ldrd r0, r1, [r7, 0x18]");
0x0007b0e0 cmp r5, 0 |
| if (r5 == 0) {
0x0007b0e2 beq 0x7b1dc | goto label_45;
| }
0x0007b0e4 cmp r0, r3 |
0x0007b0e6 sbcs.w r2, r1, r4 | __asm ("sbcs.w r2, r1, r4");
| if (r0 < r3) {
0x0007b0ea blt 0x7b114 | goto label_2;
| }
0x0007b0ec cmp r4, r1 |
0x0007b0ee it eq |
| if (r4 == r1) {
0x0007b0f0 cmpeq r3, r0 | __asm ("cmpeq r3, r0");
| }
| if (r4 == r1) {
0x0007b0f2 beq 0x7b114 | goto label_2;
| }
| label_1:
0x0007b0f4 mov r2, sb | r2 = sb;
0x0007b0f6 mov r1, r7 | r1 = r7;
0x0007b0f8 mov r0, r8 | r0 = r8;
0x0007b0fa bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b0fe ldr.w r3, [sb] | r3 = *(sb);
0x0007b102 cmp r3, 0 |
| if (r3 != 0) {
0x0007b104 bne.w 0x7b360 | goto label_46;
| }
0x0007b108 ldrb.w r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x0007b10c ldrd r3, r4, [r6, 0x18] | __asm ("ldrd r3, r4, [r6, 0x18]");
0x0007b110 cmp r2, 0 |
0x0007b112 beq 0x7b0dc |
| } while (r2 == 0);
| label_2:
0x0007b114 ldrb.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x0007b118 mov r2, r4 | r2 = r4;
0x0007b11a b 0x7b12a | goto label_12;
| label_43:
0x0007b11c cmp r3, 0 |
| if (r3 == 0) {
0x0007b11e beq.w 0x7b346 | goto label_47;
| }
| label_10:
0x0007b122 ldrb.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
| label_44:
0x0007b126 ldrd r3, r2, [r6, 0x18] | __asm ("ldrd r3, r2, [r6, 0x18]");
| label_12:
0x0007b12a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0007b12c strd r3, r2, [r0, 0x18] | __asm ("strd r3, r2, [r0, 0x18]");
0x0007b130 strb.w r1, [r0, 0x20] | *((r0 + 0x20)) = r1;
| do {
| label_0:
0x0007b134 ldr.w r2, [pc, 0x5d4] |
0x0007b138 ldr.w r3, [pc, 0x5cc] | r3 = *(0x7b708);
0x0007b13c add r2, pc | r2 = 0xf684c;
0x0007b13e ldr r3, [r2, r3] | r3 = *(0xf684c);
0x0007b140 ldr r2, [r3] | r2 = *(0xf684c);
0x0007b142 ldr r3, [sp, 0xac] | r3 = var_ach;
0x0007b144 eors r2, r3 | r2 ^= r3;
0x0007b146 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007b14a bne.w 0x7b38c | goto label_48;
| }
0x0007b14e add sp, 0xb4 |
0x0007b150 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_39:
0x0007b154 cmp.w sl, 0 |
| if (sl != 0) {
0x0007b158 bne.w 0x7b35a | goto label_49;
| }
| label_13:
0x0007b15c mov r2, r5 | r2 = r5;
0x0007b15e mov r0, r8 | r0 = r8;
0x0007b160 mov r1, r6 | r1 = r6;
| label_42:
0x0007b162 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
| label_7:
0x0007b166 ldrb.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007b16a ldrd r0, ip, [r6, 0x18] | __asm ("ldrd r0, ip, [r6, 0x18]");
0x0007b16e ldrd r2, r1, [r7, 0x18] | __asm ("ldrd r2, r1, [r7, 0x18]");
| if (r3 != 0) {
| label_11:
0x0007b172 cbz r3, 0x7b180 |
0x0007b174 ldrb.w fp, [r7, 0x20] | fp = *((r7 + 0x20));
| label_41:
0x0007b178 subs.w r3, fp, 0 | r3 -= var_bp_0h;
0x0007b17c it ne |
| if (r3 != var_bp_0h) {
0x0007b17e movne r3, 1 | r3 = 1;
| goto label_4;
| }
| }
| label_4:
0x0007b180 ldr r4, [sp, 0x14] | r4 = var_14h;
0x0007b182 cmp r2, r0 |
0x0007b184 strb.w r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0007b188 sbcs.w r3, r1, ip | __asm ("sbcs.w r3, r1, ip");
| if (r2 >= r0) {
0x0007b18c blt 0x7b1a0 |
0x0007b18e cmp r1, ip |
0x0007b190 it eq |
| if (r1 == ip) {
0x0007b192 cmpeq r2, r0 | __asm ("cmpeq r2, r0");
| }
0x0007b194 ite ne |
| if (r1 == ip) {
0x0007b196 movne r3, 1 | r3 = 1;
| }
| if (r1 != ip) {
0x0007b198 moveq r3, 0 | r3 = 0;
| }
0x0007b19a rsbs r3, r3, 0 | r3 -= ;
0x0007b19c mul sb, r3, sb | sb = r3 * sb;
| }
0x0007b1a0 ldrb.w r3, [r7, 0x20] | r3 = *((r7 + 0x20));
| if (r3 != 0) {
0x0007b1a4 cbnz r3, 0x7b1e6 | goto label_50;
| }
0x0007b1a6 ldrb.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007b1aa cmp r3, 0 |
0x0007b1ac it eq |
| if (r3 == 0) {
0x0007b1ae cmpeq sb, -1 | __asm ("cmpeq sb, -1");
| }
| if (r3 == 0) {
0x0007b1b2 beq 0x7b1e6 | goto label_50;
| }
0x0007b1b4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b1b6 strd r2, r1, [r3, 0x18] | __asm ("strd r2, r1, [r3, 0x18]");
0x0007b1ba b 0x7b134 |
| } while (1);
| if (r3 == 0) {
| label_37:
0x0007b1bc cbnz r3, 0x7b1c8 |
0x0007b1be mov r2, r5 | r2 = r5;
0x0007b1c0 mov r1, r7 | r1 = r7;
0x0007b1c2 mov r0, r8 | r0 = r8;
0x0007b1c4 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
| }
0x0007b1c8 ldrd r2, r3, [r7, 0x18] | __asm ("ldrd r2, r3, [r7, 0x18]");
0x0007b1cc ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007b1ce strd r2, r3, [r1, 0x18] | __asm ("strd r2, r3, [r1, 0x18]");
0x0007b1d2 ldrb.w r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0007b1d6 strb.w r3, [r1, 0x20] | *((r1 + 0x20)) = r3;
0x0007b1da b 0x7b134 | goto label_0;
| label_45:
0x0007b1dc cmp r0, r3 |
0x0007b1de sbcs.w r2, r1, r4 | __asm ("sbcs.w r2, r1, r4");
| if (r0 < r3) {
0x0007b1e2 blt 0x7b0f4 | goto label_1;
| }
0x0007b1e4 b 0x7b114 | goto label_2;
| label_50:
0x0007b1e6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b1e8 strd r0, ip, [r3, 0x18] | __asm ("strd r0, ip, [r3, 0x18]");
0x0007b1ec b 0x7b134 | goto label_0;
| label_40:
0x0007b1ee cmp.w lr, -1 |
| if (lr == -1) {
0x0007b1f2 beq.w 0x7b36a | goto label_51;
| }
0x0007b1f6 cmp.w lr, 1 |
| if (lr != 1) {
0x0007b1fa bne.w 0x7b30c | goto label_52;
| }
0x0007b1fe cmp.w sl, 0 |
| if (sl == 0) {
0x0007b202 beq.w 0x7b09a | goto label_3;
| }
0x0007b206 b 0x7b180 | goto label_4;
| label_38:
0x0007b208 cmp r3, 0 |
| if (r3 == 0) {
0x0007b20a beq.w 0x7b328 | goto label_53;
| }
| label_8:
0x0007b20e ldrb.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x0007b212 ldrd r2, r3, [r6, 0x18] | __asm ("ldrd r2, r3, [r6, 0x18]");
0x0007b216 mov ip, r2 |
0x0007b218 mov r0, r3 | r0 = r3;
| if (r1 != 0) {
0x0007b21a cbnz r1, 0x7b276 | goto label_14;
| }
0x0007b21c mov r4, r2 | r4 = r2;
0x0007b21e ldrb.w r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x0007b222 mov r1, r5 | r1 = r5;
0x0007b224 mov ip, r4 |
0x0007b226 mov r5, sb | r5 = sb;
0x0007b228 mov r0, r3 | r0 = r3;
0x0007b22a mov sb, r1 | sb = r1;
| if (r2 != 0) {
0x0007b22c cbnz r2, 0x7b274 | goto label_54;
| }
| do {
0x0007b22e ldr.w r1, [sb] | r1 = *(sb);
0x0007b232 cmp r1, 0 |
| if (r1 != 0) {
0x0007b234 bne.w 0x7b388 | goto label_55;
| }
0x0007b238 ldrd r1, r0, [r7, 0x18] | __asm ("ldrd r1, r0, [r7, 0x18]");
0x0007b23c cmp r5, 0 |
| if (r5 == 0) {
0x0007b23e beq 0x7b2e2 | goto label_56;
| }
0x0007b240 cmp r1, r4 |
0x0007b242 sbcs.w r2, r0, r3 | __asm ("sbcs.w r2, r0, r3");
| if (r1 < r4) {
0x0007b246 blt 0x7b300 | goto label_57;
| }
0x0007b248 cmp r3, r0 |
0x0007b24a it eq |
| if (r3 == r0) {
0x0007b24c cmpeq r4, r1 | __asm ("cmpeq r4, r1");
| }
| if (r3 == r0) {
0x0007b24e beq 0x7b2f2 | goto label_16;
| }
| label_5:
0x0007b250 mov r2, sb | r2 = sb;
0x0007b252 mov r1, r7 | r1 = r7;
0x0007b254 mov r0, r8 | r0 = r8;
0x0007b256 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
| label_6:
0x0007b25a ldrb.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007b25e cmp r3, 0 |
| if (r3 != 0) {
0x0007b260 bne.w 0x7b374 | goto label_58;
| }
0x0007b264 ldrb.w r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x0007b268 ldrd r4, r3, [r6, 0x18] | __asm ("ldrd r4, r3, [r6, 0x18]");
0x0007b26c mov ip, r4 |
0x0007b26e mov r0, r3 | r0 = r3;
0x0007b270 cmp r2, 0 |
0x0007b272 beq 0x7b22e |
| } while (r2 == 0);
| label_54:
0x0007b274 mov r5, sb | r5 = sb;
| label_14:
0x0007b276 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007b278 movs r2, 1 | r2 = 1;
0x0007b27a ldr r3, [r1] | r3 = *(r1);
0x0007b27c strd ip, r0, [r1, 0x18] | __asm ("strd ip, r0, [r1, 0x18]");
0x0007b280 strb.w r2, [r1, 0x20] | *((r1 + 0x20)) = r2;
0x0007b284 cmp r3, r2 |
| if (r3 != r2) {
0x0007b286 bne.w 0x7b134 | goto label_0;
| }
0x0007b28a ldr r4, [r7, 0x14] | r4 = *((r7 + 0x14));
0x0007b28c ldr r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x0007b28e cbz r3, 0x7b2a8 |
| label_15:
0x0007b290 ldr r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x0007b292 cbnz r3, 0x7b2a8 | goto label_59;
| }
0x0007b294 ldrb.w r1, [r7, 0x20] | r1 = *((r7 + 0x20));
| if (r1 != 0) {
0x0007b298 cbnz r1, 0x7b2a8 | goto label_59;
| }
0x0007b29a ldrd r0, r2, [r4, 0x1c] | __asm ("ldrd r0, r2, [r4, 0x1c]");
0x0007b29e blx 0x62ec | fcn_000062ec ();
0x0007b2a2 ldr r3, [r5] | r3 = *(r5);
0x0007b2a4 cmp r3, 0 |
| if (r3 == 0) {
0x0007b2a6 beq 0x7b37c | goto label_60;
| }
| }
| label_59:
0x0007b2a8 ldr r4, [r6, 0x14] | r4 = *((r6 + 0x14));
| if (r4 == 0) {
0x0007b2aa cbz r4, 0x7b2d6 | goto label_61;
| }
0x0007b2ac ldr r3, [r4] | r3 = *(r4);
| if (r3 == 0) {
0x0007b2ae cbz r3, 0x7b2d6 | goto label_61;
| }
0x0007b2b0 ldr r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x0007b2b2 cbnz r3, 0x7b2d6 | goto label_61;
| }
| do {
0x0007b2b4 ldrb.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
| if (r1 != 0) {
0x0007b2b8 cbnz r1, 0x7b2d6 | goto label_61;
| }
0x0007b2ba ldrd r0, r2, [r4, 0x1c] | __asm ("ldrd r0, r2, [r4, 0x1c]");
0x0007b2be blx 0x62ec | fcn_000062ec ();
0x0007b2c2 ldr r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x0007b2c4 cbnz r3, 0x7b2d6 | goto label_61;
| }
0x0007b2c6 mov r2, r5 | r2 = r5;
0x0007b2c8 mov r1, r6 | r1 = r6;
0x0007b2ca mov r0, r8 | r0 = r8;
0x0007b2cc bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b2d0 ldr r3, [r5] | r3 = *(r5);
0x0007b2d2 cmp r3, 0 |
0x0007b2d4 beq 0x7b2b4 |
| } while (r3 == 0);
| label_61:
0x0007b2d6 movs r3, 1 | r3 = 1;
0x0007b2d8 strb.w r3, [r6, 0x20] | *((r6 + 0x20)) = r3;
0x0007b2dc strb.w r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x0007b2e0 b 0x7b134 | goto label_0;
| label_56:
0x0007b2e2 cmp r1, r4 |
0x0007b2e4 sbcs.w r2, r0, r3 | __asm ("sbcs.w r2, r0, r3");
| if (r1 < r4) {
0x0007b2e8 blt 0x7b250 | goto label_5;
| }
0x0007b2ea cmp r3, r0 |
0x0007b2ec it eq |
| if (r3 == r0) {
0x0007b2ee cmpeq r4, r1 | __asm ("cmpeq r4, r1");
| }
| if (r3 == r0) {
0x0007b2f0 bne 0x7b300 |
| label_16:
0x0007b2f2 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007b2f4 movs r3, 0 | r3 = 0;
0x0007b2f6 strd r1, r0, [r2, 0x18] | __asm ("strd r1, r0, [r2, 0x18]");
0x0007b2fa strb.w r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x0007b2fe b 0x7b134 | goto label_0;
| }
| label_57:
0x0007b300 mov r2, sb | r2 = sb;
0x0007b302 mov r1, r6 | r1 = r6;
0x0007b304 mov r0, r8 | r0 = r8;
0x0007b306 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b30a b 0x7b25a | goto label_6;
| label_52:
0x0007b30c cmp.w sl, 0 |
| if (sl != 0) {
0x0007b310 bne.w 0x7b180 | goto label_4;
| }
0x0007b314 mov r2, r5 | r2 = r5;
0x0007b316 mov r1, r6 | r1 = r6;
0x0007b318 mov r0, r8 | r0 = r8;
0x0007b31a bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b31e ldr r3, [r5] | r3 = *(r5);
0x0007b320 cmp r3, 0 |
| if (r3 == 0) {
0x0007b322 beq.w 0x7b09a | goto label_3;
| }
0x0007b326 b 0x7b166 | goto label_7;
| label_53:
0x0007b328 mov r2, r5 | r2 = r5;
0x0007b32a mov r1, r6 | r1 = r6;
0x0007b32c mov r0, r8 | r0 = r8;
0x0007b32e bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b332 ldr r3, [r5] | r3 = *(r5);
0x0007b334 cmp r3, 0 |
| if (r3 != 0) {
0x0007b336 bne.w 0x7b20e | goto label_8;
| }
0x0007b33a mov r2, r5 | r2 = r5;
0x0007b33c mov r1, r7 | r1 = r7;
0x0007b33e mov r0, r8 | r0 = r8;
0x0007b340 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b344 b 0x7b20e | goto label_8;
| label_47:
0x0007b346 mov r2, r5 | r2 = r5;
0x0007b348 mov r1, r7 | r1 = r7;
0x0007b34a mov r0, r8 | r0 = r8;
0x0007b34c bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b350 ldr r3, [r5] | r3 = *(r5);
0x0007b352 cmp r3, 0 |
| if (r3 == 0) {
0x0007b354 beq.w 0x7b0b2 | goto label_9;
| }
0x0007b358 b 0x7b122 | goto label_10;
| label_49:
0x0007b35a ldrb.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007b35e b 0x7b172 | goto label_11;
| label_46:
0x0007b360 ldrd r3, r2, [r6, 0x18] | __asm ("ldrd r3, r2, [r6, 0x18]");
0x0007b364 ldrb.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x0007b368 b 0x7b12a | goto label_12;
| label_51:
0x0007b36a cmp.w sl, 0 |
| if (sl == 0) {
0x0007b36e beq.w 0x7b15c | goto label_13;
| }
0x0007b372 b 0x7b180 | goto label_4;
| label_58:
0x0007b374 ldrd ip, r0, [r6, 0x18] | __asm ("ldrd ip, r0, [r6, 0x18]");
0x0007b378 mov r5, sb | r5 = sb;
0x0007b37a b 0x7b276 | goto label_14;
| label_60:
0x0007b37c mov r2, r5 | r2 = r5;
0x0007b37e mov r1, r7 | r1 = r7;
0x0007b380 mov r0, r8 | r0 = r8;
0x0007b382 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x0007b386 b 0x7b290 | goto label_15;
| label_55:
0x0007b388 mov r1, r4 | r1 = r4;
0x0007b38a b 0x7b2f2 | goto label_16;
| label_48:
0x0007b38c blx 0x6430 | fcn_00006430 ();
| label_36:
0x0007b390 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b392 ldr r6, [r3, 0x14] | r6 = *((r3 + 0x14));
0x0007b394 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
| if (r3 != 0) {
0x0007b396 cbz r3, 0x7b39e |
0x0007b398 ldr r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0007b39a bl 0x26dbc | fcn_00026dbc (r0);
| }
0x0007b39e ldr.w r3, [r8] | r3 = *(r8);
0x0007b3a2 movs r1, 0 | r1 = 0;
0x0007b3a4 ldr.w sb, [r6, 0x28] | sb = *((r6 + 0x28));
0x0007b3a8 strd r1, r1, [r6, 0x1c] | __asm ("strd r1, r1, [r6, 0x1c]");
0x0007b3ac str r1, [r6, 0x18] | *((r6 + 0x18)) = r1;
0x0007b3ae str r3, [sp, 0x18] | var_18h = r3;
0x0007b3b0 cmp.w sb, 0 |
0x0007b3b2 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x0007b3b4 bne 0x7b3ec |
0x0007b3b6 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0007b3b8 ldrb.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x0007b3bc ldrb.w r0, [r2, 0xef] | r0 = *((r2 + 0xef));
0x0007b3c0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007b3c2 cmp r3, r0 |
0x0007b3c4 add.w ip, r2, 0x20 |
| if (r3 != r0) {
0x0007b3c8 beq 0x7b3d2 |
0x0007b3ca ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0007b3cc cmp r2, 0 |
| if (r2 != 0) {
0x0007b3ce bne.w 0x7b500 | goto label_62;
| }
| }
0x0007b3d2 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0007b3d4 mov r2, ip | r2 = ip;
0x0007b3d6 mov r1, r6 | r1 = r6;
0x0007b3d8 bl 0x2e5e8 | fcn_0002e5e8 (r0, r1, r2);
| label_17:
0x0007b3dc ldrd r2, r3, [r6, 0x10] | __asm ("ldrd r2, r3, [r6, 0x10]");
0x0007b3e0 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007b3e2 str.w sb, [r5] | __asm ("str.w sb, [r5]");
0x0007b3e6 strd r2, r3, [r1, 0x18] | __asm ("strd r2, r3, [r1, 0x18]");
0x0007b3ea b 0x7b134 | goto label_0;
| }
0x0007b3ec ldr r7, [r6, 0x40] | r7 = *((r6 + 0x40));
0x0007b3ee strb.w r1, [sp, 0x3b] | var_3bh = r1;
0x0007b3f2 cmp r7, 1 |
| if (r7 == 1) {
0x0007b3f4 beq 0x7b4d4 | goto label_63;
| }
0x0007b3f6 ldrb.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x0007b3fa mov sb, r1 | sb = r1;
0x0007b3fc add r0, sp, 0x48 | r0 += x;
0x0007b3fe movs r2, 0x60 | r2 = 0x60;
0x0007b400 mov r4, sb | r4 = sb;
0x0007b402 str r0, [sp, 0x20] | var_20h = r0;
0x0007b404 str r3, [sp, 0x24] | var_24h = r3;
0x0007b406 blx 0x62ec | fcn_000062ec ();
0x0007b40a add.w r3, sp, 0x3b | r3 += var_3bh;
0x0007b40e str r5, [sp, 0x1c] | var_1ch = r5;
0x0007b410 str r3, [sp, 0x28] | var_28h = r3;
0x0007b412 mov r3, r7 | r3 = r7;
0x0007b414 cmp r4, 0 |
| if (r4 != 0) {
0x0007b416 bne 0x7b4f6 | goto label_22;
| }
| label_21:
0x0007b418 ldr r5, [sp, 0x20] | r5 = var_20h;
0x0007b41a mov r7, r4 | r7 = r4;
0x0007b41c mov sb, r4 | sb = r4;
0x0007b41e mov sl, r4 | sl = r4;
0x0007b420 mov fp, r4 |
0x0007b422 mov r2, r4 | r2 = r4;
| do {
0x0007b424 cmp r3, sb |
| if (r3 <= sb) {
0x0007b426 ble 0x7b520 | goto label_64;
| }
0x0007b428 cmp r2, 0 |
| if (r2 != 0) {
0x0007b42a bne 0x7b526 | goto label_65;
| }
0x0007b42c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007b42e mov r2, sb | r2 = sb;
0x0007b430 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0007b432 mov r1, r6 | r1 = r6;
0x0007b434 str r3, [sp] | *(sp) = r3;
0x0007b436 mov r3, r5 | r3 = r5;
0x0007b438 bl 0x7af60 | fcn_0007af60 (r0, r1, r2, r3, r4);
0x0007b43c ldr r3, [r5] | r3 = *(r5);
0x0007b43e mov r4, r0 | r4 = r0;
| if (r3 == 0) {
0x0007b440 cbnz r3, 0x7b452 |
0x0007b442 ldrd r0, r3, [r5, 8] | __asm ("ldrd r0, r3, [r5, 8]");
0x0007b446 cmp r7, 0 |
| if (r7 != 0) {
0x0007b448 bne.w 0x7b650 | goto label_66;
| }
| label_30:
0x0007b44c mov sl, r0 | sl = r0;
0x0007b44e mov fp, r3 |
0x0007b450 movs r7, 1 | r7 = 1;
| }
| label_29:
0x0007b452 ldr r3, [r6, 0x40] | r3 = *((r6 + 0x40));
0x0007b454 add.w sb, sb, 1 | sb++;
0x0007b458 ldrb.w r2, [sp, 0x3b] | r2 = var_3bh;
0x0007b45c adds r5, 0x18 | r5 += 0x18;
0x0007b45e cmp r4, 0 |
0x0007b460 beq 0x7b424 |
| } while (r4 == 0);
0x0007b462 mov r8, r2 | r8 = r2;
| label_18:
0x0007b464 cmp r3, 0 |
| if (r3 <= 0) {
0x0007b466 ble 0x7b4c0 | goto label_67;
| }
| label_19:
0x0007b468 mov r5, r8 | r5 = r8;
0x0007b46a mov.w sb, 0 | sb = 0;
0x0007b46e mov r8, r6 | r8 = r6;
| do {
0x0007b470 ldr r6, [sp, 0x28] | r6 = var_28h;
| if (r4 == 0) {
0x0007b472 cbnz r4, 0x7b4b0 |
| label_24:
0x0007b474 cmp r5, 0 |
| if (r5 != 0) {
0x0007b476 bne.w 0x7b5ee | goto label_33;
| }
| label_32:
0x0007b47a add.w r3, sb, sb, lsl 1 | r3 = sb + (sb << 1);
0x0007b47e add r2, sp, 0xb0 | r2 += var_b0h;
0x0007b480 add.w r7, r2, r3, lsl 3 | r7 = r2 + (r3 << 3);
0x0007b484 lsl.w lr, r3, 3 | lr = r3 << 3;
0x0007b488 ldr r0, [r7, -0x68] | r0 = x;
0x0007b48c cmp r0, 0 |
| if (r0 != 0) {
0x0007b48e bne.w 0x7b608 | goto label_68;
| }
0x0007b492 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007b494 sub.w r4, r7, 0x60 | r4 -= var_60h;
0x0007b498 ldr r1, [r7, -0x60] | r1 = var_60h;
0x0007b49c ldr r2, [r4, 4] | r2 = var_4h_2;
0x0007b49e cmp r3, 0 |
| if (r3 == 0) {
0x0007b4a0 beq.w 0x7b676 | goto label_69;
| }
0x0007b4a4 cmp sl, r1 |
0x0007b4a6 sbcs.w r2, fp, r2 | __asm ("sbcs.w r2, fp, r2");
| if (sl < r1) {
0x0007b4aa blt.w 0x7b6bc | goto label_70;
| }
| label_31:
0x0007b4ae mov r4, r0 | r4 = r0;
| }
| label_26:
0x0007b4b0 ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x0007b4b4 add.w sb, sb, 1 | sb++;
0x0007b4b8 cmp sb, r3 |
0x0007b4ba blt 0x7b470 |
| } while (sb < r3);
0x0007b4bc mov r6, r8 | r6 = r8;
0x0007b4be mov r8, r5 | r8 = r5;
| label_67:
0x0007b4c0 cmp.w r8, 0 |
| if (r8 == 0) {
0x0007b4c4 beq 0x7b52c | goto label_71;
| }
| label_20:
0x0007b4c6 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0007b4c8 mov r2, r8 | r2 = r8;
0x0007b4ca mov sb, r4 | sb = r4;
| do {
| label_25:
0x0007b4cc ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007b4ce strb.w r2, [r3, 0x20] | *((r3 + 0x20)) = r2;
0x0007b4d0 movs r0, 0x20 | r0 = 0x20;
0x0007b4d2 b 0x7b3dc | goto label_17;
| label_63:
0x0007b4d4 mov r0, r3 | r0 = r3;
0x0007b4d6 add.w r3, r6, 0x20 | r3 = r6 + 0x20;
0x0007b4da ldr r1, [r6, 0x5c] | r1 = *((r6 + 0x5c));
0x0007b4dc add.w r2, r6, 0x10 | r2 = r6 + 0x10;
0x0007b4e0 str r3, [sp] | *(sp) = r3;
0x0007b4e2 add.w r3, r6, 0x1c | r3 = r6 + 0x1c;
0x0007b4e6 bl 0x7ad5c | fcn_0007ad5c (r0, r1, r2, r3, r4);
0x0007b4ea ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0007b4ec mov sb, r0 | sb = r0;
0x0007b4ee clz r2, r2 | r2 &= r2;
0x0007b4f2 lsrs r2, r2, 5 | r2 >>= 5;
0x0007b4f4 b 0x7b4cc |
| } while (1);
| label_22:
0x0007b4f6 mov.w r8, 0 | r8 = 0;
0x0007b4fa mov sl, r8 | sl = r8;
0x0007b4fc mov fp, r8 |
0x0007b4fe b 0x7b464 | goto label_18;
| label_62:
0x0007b500 mov r3, r6 | r3 = r6;
0x0007b502 add.w r7, r6, 0x10 | r7 = r6 + 0x10;
0x0007b506 ldr r1, [r3], 0x20 | r1 = *(r3);
| r3 += 0x20;
0x0007b50a str.w ip, [sp, 8] | __asm ("str.w ip, [var_8h]");
0x0007b50e strd r7, r3, [sp] | __asm ("strd r7, r3, [sp]");
0x0007b512 add.w r3, r6, 8 | r3 = r6 + 8;
0x0007b516 bl 0x2c890 | fcn_0002c890 (r0, r1, r2, r3, r4, r5, r6);
0x0007b51a ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0007b51c str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x0007b51e b 0x7b3dc | goto label_17;
| label_64:
0x0007b520 mov r8, r2 | r8 = r2;
0x0007b522 movs r4, 0 | r4 = 0;
0x0007b524 b 0x7b464 | goto label_18;
| label_65:
0x0007b526 mov r8, r2 | r8 = r2;
0x0007b528 movs r4, 0 | r4 = 0;
0x0007b52a b 0x7b468 | goto label_19;
| label_71:
0x0007b52c subs r3, 1 | r3--;
0x0007b52e add r2, sp, 0xb0 | r2 += var_b0h;
0x0007b530 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007b534 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x0007b538 ldr r5, [r3, -0x54] | r5 = *((r3 - 0x54));
0x0007b53c ldr r3, [pc, 0x1d0] |
0x0007b53e add r3, pc |
0x0007b540 ldr.w r3, [r3, 0xd0] | r3 = *(0xf6d22);
0x0007b544 cmp r3, 0 |
| if (r3 != 0) {
0x0007b546 bne 0x7b5e0 | goto label_72;
| }
0x0007b548 bl 0x25da0 | r0 = fcn_00025da0 ();
0x0007b54c cmp r0, 0 |
| if (r0 != 0) {
0x0007b54e bne 0x7b5e6 | goto label_73;
| }
0x0007b550 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x0007b554 cmp r0, 0 |
| if (r0 != 0) {
0x0007b556 bne 0x7b5e6 | goto label_73;
| }
| label_23:
0x0007b558 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x0007b55a adds.w r0, r5, 8 | r0 = r5 + 8;
0x0007b55e adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x0007b562 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007b566 mov sb, r0 | sb = r0;
0x0007b568 cmp r0, 0 |
| if (r0 == 0) {
0x0007b56a beq 0x7b5e6 | goto label_73;
| }
0x0007b56c ldr r2, [r6, 0x40] | r2 = *((r6 + 0x40));
0x0007b56e add r3, sp, 0xb0 | r3 += var_b0h;
0x0007b570 subs r2, 1 | r2--;
0x0007b572 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0007b576 add.w r2, r3, r2, lsl 3 | r2 = r3 + (r2 << 3);
0x0007b57a ldr r1, [r2, -0x58] | r1 = *((r2 - 0x58));
0x0007b57e adds r2, r5, 1 | r2 = r5 + 1;
0x0007b580 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007b584 mov.w ip, 0 |
0x0007b588 str.w ip, [sb, r5] | __asm ("str.w ip, [sb, r5]");
0x0007b58c add r5, sb | r5 += sb;
0x0007b58e str.w ip, [r5, 4] | __asm ("str.w ip, [r5, 4]");
0x0007b592 mov r5, ip | r5 = ip;
0x0007b594 ldr r0, [r6, 0x40] | r0 = *((r6 + 0x40));
0x0007b596 subs r1, r0, 1 | r1 = r0 - 1;
0x0007b598 cmp r1, ip |
| if (r1 <= ip) {
0x0007b59a ble 0x7b60c | goto label_74;
| }
0x0007b59c ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x0007b5a0 add r3, sp, 0x44 | r3 += var_44h;
0x0007b5a2 str r3, [sp, 0x2c] | var_2ch = r3;
0x0007b5a4 mov r7, ip | r7 = ip;
0x0007b5a6 add r3, sp, 0x40 | r3 += var_40h;
0x0007b5a8 str r3, [sp, 0x30] | var_30h = r3;
0x0007b5aa add r3, sp, 0x3c | r3 += var_3ch;
0x0007b5ac str r3, [sp, 0x34] | var_34h = r3;
| do {
0x0007b5ae ldr.w r2, [r8] | r2 = *(r8);
| if (r2 == 0) {
0x0007b5b2 cbz r2, 0x7b628 | goto label_75;
| }
| label_28:
0x0007b5b4 adds r7, 1 | r7++;
0x0007b5b6 subs r1, r0, 1 | r1 = r0 - 1;
0x0007b5b8 cmp r1, r7 |
0x0007b5ba add.w r8, r8, 0x18 | r8 += 0x18;
0x0007b5be bgt 0x7b5ae |
| } while (r1 > r7);
| label_27:
0x0007b5c0 cmp r1, r7 |
0x0007b5c2 ldrb.w r8, [sp, 0x3b] | r8 = var_3bh;
| if (r1 == r7) {
0x0007b5c6 beq 0x7b610 | goto label_76;
| }
0x0007b5c8 mov r0, sb | r0 = sb;
0x0007b5ca bl 0x26dbc | fcn_00026dbc (r0);
0x0007b5ce cmp.w r8, 0 |
| if (r8 != 0) {
0x0007b5d2 bne.w 0x7b4c6 | goto label_20;
| }
0x0007b5d6 ldr r3, [r6, 0x40] | r3 = *((r6 + 0x40));
0x0007b5d8 cmp r4, 0 |
| if (r4 == 0) {
0x0007b5da beq.w 0x7b418 | goto label_21;
| }
0x0007b5de b 0x7b4f6 | goto label_22;
| label_72:
0x0007b5e0 dmb ish | __asm ("dmb ish");
0x0007b5e4 b 0x7b558 | goto label_23;
| label_73:
0x0007b5e6 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0007b5e8 mov.w sb, 7 | sb = 7;
0x0007b5ec b 0x7b3dc | goto label_17;
| label_33:
0x0007b5ee ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x0007b5f2 add.w sb, sb, 1 | sb++;
0x0007b5f6 cmp r3, sb |
| if (r3 > sb) {
0x0007b5f8 bgt.w 0x7b474 | goto label_24;
| }
0x0007b5fa add r7, sp, 0xf0 | r7 = sp + 0xf0;
0x0007b5fc mov r2, r5 | r2 = r5;
0x0007b5fe mov r6, r8 | r6 = r8;
0x0007b600 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0007b602 mov.w sb, 0 | sb = 0;
0x0007b606 b 0x7b4cc | goto label_25;
| label_68:
0x0007b608 mov r4, r5 | r4 = r5;
0x0007b60a b 0x7b4b0 | goto label_26;
| label_74:
0x0007b60c mov r7, ip | r7 = ip;
0x0007b60e b 0x7b5c0 | goto label_27;
| label_76:
0x0007b610 mov r3, r5 | r3 = r5;
0x0007b612 mov r2, r8 | r2 = r8;
0x0007b614 mov r8, sb | r8 = sb;
0x0007b616 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0007b618 strd r8, r3, [r6, 0x1c] | __asm ("strd r8, r3, [r6, 0x1c]");
0x0007b61c movs r3, 1 | r3 = 1;
0x0007b61e mov sb, r4 | sb = r4;
0x0007b620 strd sl, fp, [r6, 0x10] | __asm ("strd sl, fp, [r6, 0x10]");
0x0007b624 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x0007b626 b 0x7b4cc | goto label_25;
| label_75:
0x0007b628 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007b62a subs r1, r1, r7 | r1 -= r7;
0x0007b62c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0007b62e strd sb, sb, [sp, 0x40] | __asm ("strd sb, sb, [var_44h]");
0x0007b632 str r3, [sp, 4] | var_4h = r3;
0x0007b634 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007b636 str r3, [sp] | *(sp) = r3;
0x0007b638 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x0007b63c str r3, [sp, 0x3c] | var_3ch = r3;
0x0007b63e movs r3, 1 | r3 = 1;
0x0007b640 bl 0x2e838 | r0 = fcn_0002e838 (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x0007b644 cbz r0, 0x7b6b6 | goto label_77;
| }
0x0007b646 ldr r5, [sp, 0x44] | r5 = var_44h;
0x0007b648 ldr r0, [r6, 0x40] | r0 = *((r6 + 0x40));
0x0007b64a sub.w r5, r5, sb | r5 -= sb;
0x0007b64e b 0x7b5b4 | goto label_28;
| label_66:
0x0007b650 ldr r2, [sp, 0x24] | r2 = var_24h;
| if (r2 == 0) {
0x0007b652 cbz r2, 0x7b660 | goto label_78;
| }
0x0007b654 cmp r0, sl |
0x0007b656 sbcs.w r2, r3, fp | __asm ("sbcs.w r2, r3, fp");
| if (r0 >= sl) {
0x0007b65a bge.w 0x7b452 | goto label_29;
| }
0x0007b65e b 0x7b44c | goto label_30;
| label_78:
0x0007b660 cmp r0, sl |
0x0007b662 sbcs.w r2, r3, fp | __asm ("sbcs.w r2, r3, fp");
| if (r0 < sl) {
0x0007b666 blt.w 0x7b452 | goto label_29;
| }
0x0007b66a cmp r3, fp |
0x0007b66c it eq |
| if (r3 != fp) {
0x0007b66e cmpeq r0, sl | __asm ("cmpeq r0, sl");
| goto label_79;
| }
| if (r3 != fp) {
| label_79:
0x0007b670 bne.w 0x7b44c | goto label_30;
| }
0x0007b674 b 0x7b452 | goto label_29;
| label_69:
0x0007b676 cmp sl, r1 |
0x0007b678 sbcs.w ip, fp, r2 | __asm ("sbcs.w ip, fp, r2");
| if (sl < r1) {
0x0007b67c blt.w 0x7b4ae | goto label_31;
| }
0x0007b680 cmp r2, fp |
0x0007b682 it eq |
| if (r2 != fp) {
0x0007b684 cmpeq r1, sl | __asm ("cmpeq r1, sl");
| goto label_80;
| }
| if (r2 == fp) {
| label_80:
0x0007b686 beq.w 0x7b4ae | goto label_31;
| }
0x0007b68a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0007b68c mov r2, sb | r2 = sb;
0x0007b68e mov r1, r8 | r1 = r8;
0x0007b690 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0007b692 str r6, [sp] | *(sp) = r6;
0x0007b694 add r3, lr | r3 += lr;
0x0007b696 bl 0x7af60 | fcn_0007af60 (r0, r1, r2, r3, r4);
0x0007b69a ldr r2, [r7, -0x60] | r2 = var_60h;
0x0007b69e ldr r3, [r4, 4] | r3 = var_4h_2;
0x0007b6a0 cmp sl, r2 |
0x0007b6a2 sbcs.w r1, fp, r3 | __asm ("sbcs.w r1, fp, r3");
| if (sl < r2) {
0x0007b6a6 blt 0x7b6ee | goto label_81;
| }
| if (r0 != 0) {
| label_34:
0x0007b6a8 cbnz r0, 0x7b6fa | goto label_82;
| }
| label_35:
0x0007b6aa ldrb.w r5, [sp, 0x3b] | r5 = var_3bh;
0x0007b6ae cmp r5, 0 |
| if (r5 == 0) {
0x0007b6b0 beq.w 0x7b47a | goto label_32;
| }
0x0007b6b4 b 0x7b5ee | goto label_33;
| label_77:
0x0007b6b6 ldr r1, [r6, 0x40] | r1 = *((r6 + 0x40));
0x0007b6b8 subs r1, 1 | r1--;
0x0007b6ba b 0x7b5c0 | goto label_27;
| label_70:
0x0007b6bc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0007b6be mov r2, sb | r2 = sb;
0x0007b6c0 mov r1, r8 | r1 = r8;
0x0007b6c2 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0007b6c4 str r6, [sp] | *(sp) = r6;
0x0007b6c6 add r3, lr | r3 += lr;
0x0007b6c8 bl 0x7af60 | fcn_0007af60 (r0, r1, r2, r3, r4);
0x0007b6cc ldr r3, [r7, -0x60] | r3 = var_60h;
0x0007b6d0 ldr r2, [r4, 4] | r2 = var_4h_2;
0x0007b6d2 cmp sl, r3 |
0x0007b6d4 sbcs.w r1, fp, r2 | __asm ("sbcs.w r1, fp, r2");
| if (sl < r3) {
0x0007b6d8 blt 0x7b6a8 | goto label_34;
| }
0x0007b6da cmp r2, fp |
0x0007b6dc it eq |
| if (r2 == fp) {
0x0007b6de cmpeq r3, sl | __asm ("cmpeq r3, sl");
| }
0x0007b6e0 ittt ne |
| if (r2 == fp) {
0x0007b6e2 movne sb, r5 | sb = r5;
| }
| if (r2 == fp) {
0x0007b6e4 movne sl, r3 | sl = r3;
| }
| if (r2 == fp) {
0x0007b6e6 movne fp, r2 |
| }
0x0007b6e8 cmp r0, 0 |
| if (r0 == 0) {
0x0007b6ea beq 0x7b6aa | goto label_35;
| }
0x0007b6ec b 0x7b6fa | goto label_82;
| label_81:
0x0007b6ee ldr.w sb, [sp, 0x24] | sb = var_24h;
0x0007b6f2 mov sl, r2 | sl = r2;
0x0007b6f4 mov fp, r3 |
0x0007b6f6 cmp r0, 0 |
| if (r0 == 0) {
0x0007b6f8 beq 0x7b6aa | goto label_35;
| }
| label_82:
0x0007b6fa ldrb.w r5, [sp, 0x3b] | r5 = var_3bh;
0x0007b6fe mov r4, r0 | r4 = r0;
0x0007b700 b 0x7b4b0 | goto label_26;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7ba2c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007ba2c () | void fcn_0007ba2c (int16_t arg_c8h, arithmetic arg_cch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1h;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| char * s1;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| arithmetic x;
| int16_t var_38h;
| int16_t var_48h;
| int16_t var_49h;
| int16_t var_4ch;
| int16_t var_6ch;
| int16_t var_78h;
| int16_t var_9ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007ba2c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007ba30 mov r8, r2 | r8 = r2;
0x0007ba32 sub sp, 0xa4 |
0x0007ba34 ldr.w r2, [pc, 0x5d8] |
0x0007ba38 mov sb, r0 | sb = r0;
0x0007ba3a mov r7, r1 | r7 = r1;
0x0007ba3c str r3, [sp, 0x10] | var_10h = r3;
0x0007ba3e ldr.w r3, [pc, 0x5d4] | r3 = *(0x7c016);
0x0007ba42 add r2, pc | r2 = 0xf7a56;
0x0007ba44 ldr r3, [r2, r3] |
0x0007ba46 ldr r3, [r3] | r3 = *(0xf7a56);
0x0007ba48 str r3, [sp, 0x9c] | var_9ch = r3;
0x0007ba4a mov.w r3, 0 | r3 = 0;
| if (r1 != 0) {
0x0007ba4e cbz r1, 0x7ba68 |
0x0007ba50 ldr.w r1, [pc, 0x5c4] |
0x0007ba54 mov r0, r7 | r0 = r7;
0x0007ba56 add r1, pc | r1 = 0xf7a72;
0x0007ba58 blx 0x6634 | fcn_00006634 ();
0x0007ba5c ldrb r3, [r7] | r3 = *(r7);
0x0007ba5e mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x0007ba60 cbnz r3, 0x7ba8a | goto label_33;
| }
0x0007ba62 cmp r0, 0 |
| if (r0 == 0) {
0x0007ba64 beq.w 0x7bbc6 | goto label_34;
| }
| }
0x0007ba68 ldrb.w r3, [r8, 0x56] | r3 = *((r8 + 0x56));
0x0007ba6c cmp r3, 2 |
| if (r3 == 2) {
0x0007ba6e beq.w 0x7bbc6 | goto label_34;
| }
0x0007ba72 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007ba74 ands r3, r3, 0x80 | r3 &= 0x80;
0x0007ba76 lsls r0, r0, 0xe | r0 <<= 0xe;
0x0007ba78 str r3, [sp, 0xc] | var_ch = r3;
| if (r0 != r0) {
0x0007ba7a bne.w 0x7bbc6 | goto label_34;
| }
0x0007ba7e ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007ba80 lsls r6, r3, 0x17 | r6 = r3 << 0x17;
| if (r6 >= r3) {
0x0007ba82 bpl.w 0x7beb0 | goto label_35;
| }
0x0007ba86 movs r6, 1 | r6 = 1;
0x0007ba88 b 0x7baa6 | goto label_36;
| label_33:
0x0007ba8a cmp r0, 0 |
| if (r0 != 0) {
0x0007ba8c bne.w 0x7be34 | goto label_37;
| }
| label_0:
0x0007ba90 ldr r3, [sp, 0xc8] | r3 = *(arg_c8h);
0x0007ba92 orr r3, r3, 2 | r3 |= 2;
0x0007ba96 str r3, [sp, 0xc8] | *(arg_c8h) = r3;
0x0007ba98 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007ba9a tst.w r3, 0x100 |
0x0007ba9e mov.w r3, 1 | r3 = 1;
0x0007baa2 str r3, [sp, 0xc] | var_ch = r3;
| if ((r3 & 0x100) != 0) {
0x0007baa4 beq 0x7bab2 |
| label_36:
0x0007baa6 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007baa8 bic r3, r3, 0x300 | r3 = BIT_MASK (r3, 0x300);
0x0007baac orr r3, r3, 0x200 | r3 |= 0x200;
0x0007bab0 str r3, [sp, 0xcc] | *(arg_cch) = r3;
| }
0x0007bab2 movs r0, 0x30 | r0 = 0x30;
0x0007bab4 movs r1, 0 | r1 = 0;
0x0007bab6 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007baba mov r4, r0 | r4 = r0;
0x0007babc cmp r0, 0 |
| if (r0 == 0) {
0x0007babe beq.w 0x7bf08 | goto label_38;
| }
0x0007bac2 movs r2, 0x2c | r2 = 0x2c;
0x0007bac4 movs r1, 0 | r1 = 0;
0x0007bac6 adds r0, 4 | r0 += 4;
0x0007bac8 blx 0x62ec | fcn_000062ec ();
0x0007bacc movs r3, 1 | r3 = 1;
0x0007bace str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x0007bad2 str r4, [r4, 0x20] | *((r4 + 0x20)) = r4;
0x0007bad4 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0007bad6 cmp r6, 0 |
| if (r6 != 0) {
0x0007bad8 bne 0x7bbca | goto label_39;
| }
0x0007bada ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x0007badc cbz r3, 0x7bae4 |
0x0007bade ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007bae0 lsls r5, r3, 0x19 | r5 = r3 << 0x19;
| if (r5 >= r3) {
0x0007bae2 bpl 0x7bbcc | goto label_2;
| }
| }
0x0007bae4 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007bae6 ands r6, r3, 0x20000 | r6 = r3 & 0x20000;
| if (r6 == r3) {
0x0007baea beq 0x7bbcc | goto label_2;
| }
0x0007baec movs r5, 1 | r5 = 1;
| if (r7 != 0) {
0x0007baee cbz r7, 0x7bafc |
| label_1:
0x0007baf0 mov r0, r7 | r0 = r7;
0x0007baf2 blx 0x65dc | r0 = strcmp (r0, r1);
0x0007baf6 bic r5, r0, 0xc0000000 | r5 = BIT_MASK (r0, 0xc0000000);
0x0007bafa adds r5, 1 | r5++;
| }
0x0007bafc ldr.w r6, [sb, 8] | r6 = *((sb + 8));
0x0007bb00 adds r6, 1 | r6++;
0x0007bb02 cmp r6, r5 |
0x0007bb04 mov r0, r6 | r0 = r6;
0x0007bb06 it lt |
| if (r6 >= r5) {
0x0007bb08 movlt r0, r5 | r0 = r5;
| }
0x0007bb0a asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x0007bb0c bl 0x28c3c | fcn_00028c3c (r0);
0x0007bb10 movs r3, 1 | r3 = 1;
0x0007bb12 mov sl, r0 | sl = r0;
0x0007bb14 strb r3, [r4, 9] | *((r4 + 9)) = r3;
0x0007bb16 cmp r0, 0 |
| if (r0 == 0) {
0x0007bb18 beq.w 0x7bf02 | goto label_40;
| }
0x0007bb1c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007bb1e cmp r3, 0 |
| if (r3 != 0) {
0x0007bb20 bne.w 0x7bed4 | goto label_41;
| }
0x0007bb24 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007bb26 mov r2, r6 | r2 = r6;
0x0007bb28 mov r1, r7 | r1 = r7;
0x0007bb2a strb r3, [r0] | *(r0) = r3;
0x0007bb2c mov r3, r0 | r3 = r0;
0x0007bb2e ldr.w r5, [sb, 0x24] | r5 = *((sb + 0x24));
0x0007bb30 str r4, [r4, r0] | *((r4 + r0)) = r4;
0x0007bb32 mov r0, sb | r0 = sb;
0x0007bb34 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007bb36 bics r3, r0, 0x200 | __asm ("bics r3, r0, 0x200");
0x0007bb3a mov fp, r0 |
| if (r3 != 0) {
0x0007bb3c bne.w 0x7c40e | goto label_42;
| }
| label_3:
0x0007bb40 ldr.w r5, [pc, 0x4d8] |
0x0007bb44 add r5, pc | r5 = 0xf7b64;
0x0007bb46 ldrb r6, [r5, 4] | r6 = *((r5 + 4));
0x0007bb48 cmp r6, 0 |
| if (r6 == 0) {
0x0007bb4a beq.w 0x7c322 | goto label_43;
| }
0x0007bb4e ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0007bb50 movs r0, 4 | r0 = 4;
0x0007bb52 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0007bb54 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x0007bb56 cbz r0, 0x7bb5c |
0x0007bb58 ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x0007bb5a blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0007bb5c ldr.w r5, [pc, 0x4c0] |
0x0007bb60 add r5, pc | r5 = 0xf7b84;
0x0007bb62 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x0007bb64 cmp r3, 0 |
| if (r3 == 0) {
0x0007bb66 beq.w 0x7c322 | goto label_43;
| }
0x0007bb6a ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0007bb6c movs r0, 2 | r0 = 2;
0x0007bb6e blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0007bb70 mov fp, r0 |
0x0007bb72 cmp r0, 0 |
| if (r0 == 0) {
0x0007bb74 beq.w 0x7c182 | goto label_44;
| }
0x0007bb78 ldr r2, [r5, 0x50] | r2 = *((r5 + 0x50));
0x0007bb7a blx r2 | uint32_t (*r2)(uint32_t) (r2);
0x0007bb7c ldr.w r2, [pc, 0x4a4] |
0x0007bb80 add r2, pc | r2 = 0xf7ba8;
0x0007bb82 ldr.w r3, [r2, 0x520] | r3 = *(0xf80c8);
0x0007bb84 adds r5, 0x20 | r5 += 0x20;
0x0007bb86 str r3, [sp, 8] | var_8h = r3;
| if (r3 == 0) {
0x0007bb88 cbz r3, 0x7bbb2 | goto label_45;
| }
| label_10:
0x0007bb8a ldr r5, [sp, 8] | r5 = var_8h;
0x0007bb8c str r7, [sp, 8] | var_8h = r7;
| do {
| label_18:
0x0007bb8e ldr r7, [r5] | r7 = *(r5);
0x0007bb90 mov r0, sl | r0 = sl;
0x0007bb92 ldr.w r1, [r7, 0xb8] | r1 = *((r7 + 0xb8));
0x0007bb96 blx 0x6634 | r0 = fcn_00006634 ();
| if (r0 == 0) {
0x0007bb9a cbnz r0, 0x7bba4 |
0x0007bb9c ldr r3, [r7] | r3 = *(r7);
0x0007bb9e cmp sb, r3 |
| if (sb == r3) {
0x0007bba0 beq.w 0x7c064 | goto label_46;
| }
| }
0x0007bba4 ldr r5, [r5, 0x48] | r5 = *((r5 + 0x48));
0x0007bba6 cmp r5, 0 |
0x0007bba8 bne 0x7bb8e |
| } while (r5 != 0);
0x0007bbaa ldr r7, [sp, 8] | r7 = var_8h;
0x0007bbac cmp.w fp, 0 |
| if (fp != 0) {
0x0007bbb0 beq 0x7bbbe |
| label_45:
0x0007bbb2 ldr.w r3, [pc, 0x474] |
0x0007bbb6 mov r0, fp | r0 = fp;
0x0007bbb8 add r3, pc |
0x0007bbba ldr r3, [r3, 0x58] | r3 = *(0xf7c3e);
0x0007bbbc blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
| label_11:
0x0007bbbe mov r0, sl | r0 = sl;
0x0007bbc0 bl 0x26dbc | fcn_00026dbc (r0);
0x0007bbc4 b 0x7bbcc | goto label_2;
| label_34:
0x0007bbc6 movs r6, 1 | r6 = 1;
0x0007bbc8 b 0x7ba90 | goto label_0;
| label_39:
0x0007bbca movs r6, 0 | r6 = 0;
| label_2:
0x0007bbcc movs r0, 0x5c | r0 = 0x5c;
0x0007bbce movs r1, 0 | r1 = 0;
0x0007bbd0 bl 0x28c3c | fcn_00028c3c (r0);
0x0007bbd4 str r0, [sp, 8] | var_8h = r0;
0x0007bbd6 cmp r0, 0 |
| if (r0 == 0) {
0x0007bbd8 beq.w 0x7be6c | goto label_47;
| }
0x0007bbdc movs r2, 0x5c | r2 = 0x5c;
0x0007bbde movs r1, 0 | r1 = 0;
0x0007bbe0 blx 0x62ec | fcn_000062ec ();
0x0007bbe4 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0007bbe8 mov.w r2, 0x1000 | r2 = 0x1000;
0x0007bbec str r2, [sp, 0x30] | var_30h = r2;
0x0007bbee cmp r3, 0x40 |
0x0007bbf0 mov r2, r3 | r2 = r3;
0x0007bbf2 it lt |
| if (r3 >= 0x40) {
0x0007bbf4 movlt r2, 0x40 | r2 = 0x40;
| }
0x0007bbf6 adds r2, 7 | r2 += 7;
0x0007bbf8 bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0007bbfc str r2, [sp, 0x20] | var_20h = r2;
0x0007bbfe ldr r2, [sp, 0xc8] | r2 = *(arg_c8h);
0x0007bc00 ands fp, r2, 2 |
| if (fp == r2) {
0x0007bc04 beq.w 0x7bede | goto label_48;
| }
0x0007bc08 cmp r7, 0 |
| if (r7 == 0) {
0x0007bc0a beq.w 0x7bfd0 | goto label_49;
| }
0x0007bc0e ldrb r2, [r7] | r2 = *(r7);
0x0007bc10 cmp r2, 0 |
| if (r2 != 0) {
0x0007bc12 bne.w 0x7c41c | goto label_50;
| }
0x0007bc16 mov r0, r2 | r0 = r2;
0x0007bc18 str r2, [sp, 0x14] | var_14h = r2;
0x0007bc1a mov fp, r0 |
0x0007bc1c mov.w r2, 0x14a | r2 = 0x14a;
0x0007bc20 movs r1, 1 | r1 = 1;
0x0007bc22 str r7, [sp, 0x24] | var_24h = r7;
0x0007bc24 str r1, [sp, 0x1c] | var_1ch = r1;
0x0007bc26 str r1, [sp, 0x28] | var_28h = r1;
0x0007bc28 str r0, [sp, 0x2c] | var_2ch = r0;
0x0007bc2a str r0, [sp, 0x18] | s1 = r0;
| label_4:
0x0007bc2c ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0007bc2e adds r3, 7 | r3 += 7;
0x0007bc30 ldr r5, [sp, 0x20] | r5 = var_20h;
0x0007bc32 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0007bc36 add r2, r1 | r2 += r1;
0x0007bc38 movs r1, 0 | r1 = 0;
0x0007bc3a add.w r2, r2, r5, lsl 1 | r2 += (r5 << 1);
0x0007bc3e add r2, r3 | r2 += r3;
0x0007bc40 mov r0, r2 | r0 = r2;
0x0007bc42 str r2, [sp, 0x20] | var_20h = r2;
0x0007bc44 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007bc48 mov sl, r0 | sl = r0;
0x0007bc4a cmp r0, 0 |
| if (r0 == 0) {
0x0007bc4c beq.w 0x7c172 | goto label_51;
| }
0x0007bc50 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0007bc52 movs r1, 0 | r1 = 0;
0x0007bc54 blx 0x62ec | fcn_000062ec ();
0x0007bc58 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0007bc5c add.w r1, sl, 0x100 | r1 = sl + 0x100;
0x0007bc60 str.w r1, [sl, 0xf4] | __asm ("str.w r1, [sl, 0xf4]");
0x0007bc64 adds r2, r3, 7 | r2 = r3 + 7;
0x0007bc66 add.w r3, sl, 0x130 | r3 = sl + 0x130;
0x0007bc6a bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0007bc6e str.w r3, [sl, 0x40] | __asm ("str.w r3, [sl, 0x40]");
0x0007bc72 add r2, r3 | r2 += r3;
0x0007bc74 str.w r2, [sl, 0x48] | __asm ("str.w r2, [sl, 0x48]");
0x0007bc78 add r2, r5 | r2 += r5;
0x0007bc7a adds r3, r2, r5 | r3 = r2 + r5;
0x0007bc7c str.w r2, [sl, 0x44] | __asm ("str.w r2, [sl, 0x44]");
0x0007bc80 adds r3, 8 | r3 += 8;
0x0007bc82 str.w sl, [r2, r5] | __asm ("str.w sl, [r2, r5]");
0x0007bc86 str.w r3, [sl, 0xb8] | __asm ("str.w r3, [sl, 0xb8]");
0x0007bc8a cmp.w fp, 0 |
| if (fp != 0) {
0x0007bc8e bne.w 0x7c33c | goto label_52;
| }
0x0007bc92 str.w fp, [sl, 0xbc] | __asm ("str.w fp, [sl, 0xbc]");
0x0007bc96 str.w fp, [sl, 0xfc] | __asm ("str.w fp, [sl, 0xfc]");
| label_19:
0x0007bc9a ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007bc9c str.w sb, [sl] | __asm ("str.w sb, [sl]");
0x0007bca0 str.w r3, [sl, 0x98] | __asm ("str.w r3, [sl, 0x98]");
0x0007bca4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007bca6 cmp r3, 0 |
| if (r3 == 0) {
0x0007bca8 beq.w 0x7c3b0 | goto label_53;
| }
0x0007bcac ldrb r3, [r3] | r3 = *(r3);
0x0007bcae cmp r3, 0 |
| if (r3 != 0) {
0x0007bcb0 bne.w 0x7c2ac | goto label_54;
| }
0x0007bcb4 ldr r2, [sp, 0xcc] | r2 = *(arg_cch);
0x0007bcb6 str r3, [sp, 0x18] | s1 = r3;
0x0007bcb8 and r2, r2, 1 | r2 &= 1;
0x0007bcbc mov r5, r2 | r5 = r2;
| label_17:
0x0007bcbe movs r3, 1 | r3 = 1;
0x0007bcc0 strb.w r3, [sl, 0xd] | *((sl + 0xd)) = r3;
0x0007bcc4 str r3, [sp, 0x14] | var_14h = r3;
0x0007bcc6 movw r3, 0x401 | r3 = 0x401;
0x0007bcca strh.w r3, [sl, 0x11] | *((sl + 0x11)) = r3;
| label_24:
0x0007bcce mov.w r2, -1 | r2 = -1;
0x0007bcd2 add r1, sp, 0x30 | r1 += var_30h;
0x0007bcd4 mov r0, sl | r0 = sl;
0x0007bcd6 bl 0x33fa0 | r0 = fcn_00033fa0 (r0, r1, r2);
0x0007bcda mov fp, r0 |
0x0007bcdc cmp r0, 0 |
| if (r0 != 0) {
0x0007bcde bne.w 0x7c042 | goto label_16;
| }
0x0007bce2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007bce4 str r3, [sp, 0x1c] | var_1ch = r3;
0x0007bce6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007bce8 eor sb, r3, 1 | sb = r3 ^ 1;
| if (r3 == 0) {
0x0007bcec cbnz r3, 0x7bcf4 |
0x0007bcee ldr.w fp, [pc, 0x33c] | fp = *(0x0007c02c);
0x0007bcf2 add fp, pc |
| }
0x0007bcf4 ldr.w r3, [sl, 0xf4] | r3 = *((sl + 0xf4));
0x0007bcf8 movs r2, 0x30 | r2 = 0x30;
0x0007bcfa movs r1, 0 | r1 = 0;
0x0007bcfc mov r0, r3 | r0 = r3;
0x0007bcfe blx 0x62ec | fcn_000062ec ();
0x0007bd00 invalid |
0x0007bd04 lsrs r7, r7, 0xe | r7 >>= 0xe;
0x0007bd06 vldr d17, [pc, 0x300] | __asm ("vldr d17, [0x0007c00c]");
0x0007bd0a add.w r2, r0, 0x10 | r2 = r0 + 0x10;
0x0007bd0e strb.w sb, [r0, 0x20] | *((r0 + 0x20)) = sb;
0x0007bd12 mov r3, r0 | r3 = r0;
0x0007bd14 str.w fp, [r0, 0x24] | __asm ("str.w fp, [r0, 0x24]");
0x0007bd18 str.w sl, [r0, 0x28] | __asm ("str.w sl, [r0, 0x28]");
0x0007bd1c movs r0, 2 | r0 = 2;
0x0007bd1e strb.w r0, [r3, 0x21] | *((r3 + 0x21)) = r0;
0x0007bd22 mov r0, r3 | r0 = r3;
0x0007bd24 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0007bd26 vst1.32 {d16, d17}, [r2] | __asm ("vst1.32 {d16, d17}, [r2]");
0x0007bd2a bl 0x224cc | r0 = fcn_000224cc (r0, r1);
0x0007bd2e mov sb, r0 | sb = r0;
0x0007bd30 cmp r0, 0 |
| if (r0 != 0) {
0x0007bd32 bne.w 0x7c040 | goto label_55;
| }
0x0007bd36 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007bd38 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007bd3a strb.w r5, [sl, 0xe] | *((sl + 0xe)) = r5;
0x0007bd3e strb.w r3, [sl, 0xf] | *((sl + 0xf)) = r3;
0x0007bd42 uxtb r3, r2 | r3 = (int8_t) r2;
0x0007bd44 strb.w r3, [sl, 0xc] | *((sl + 0xc)) = r3;
0x0007bd48 strb.w r3, [sl, 4] | *((sl + 4)) = r3;
0x0007bd4c strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x0007bd50 strb.w r3, [sl, 7] | *((sl + 7)) = r3;
0x0007bd54 ldr r3, [sp, 0xc8] | r3 = *(arg_c8h);
0x0007bd56 and fp, r3, 1 |
0x0007bd5a mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x0007bd5e str.w r3, [sl, 0xa0] | __asm ("str.w r3, [sl, 0xa0]");
0x0007bd62 eor r3, fp, 1 | r3 = fp ^ 1;
0x0007bd66 strb.w r3, [sl, 6] | *((sl + 6)) = r3;
| if (r2 == 0) {
0x0007bd6a cbnz r2, 0x7bd76 |
0x0007bd6c movs r3, 1 |
0x0007bd6e movt r3, 0xa02 | r3 = 0xa020001;
0x0007bd72 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
| }
0x0007bd76 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x0007bd7a movs r3, 0x58 | r3 = 0x58;
0x0007bd7c mov r0, sl | r0 = sl;
0x0007bd7e strh.w r3, [sl, 0x94] | *((sl + 0x94)) = r3;
0x0007bd82 vstr d16, [sl, 0xb0] | __asm ("vstr d16, [sl, 0xb0]");
0x0007bd86 bl 0x2b554 | fcn_0002b554 (r0);
0x0007bd8a cmp.w fp, 0 |
| if (fp == 0) {
0x0007bd8e beq.w 0x7c4a4 | goto label_56;
| }
0x0007bd92 movs r3, 2 | r3 = 2;
0x0007bd94 strb.w r3, [sl, 5] | *((sl + 5)) = r3;
| label_23:
0x0007bd98 ldr r2, [pc, 0x294] |
0x0007bd9a ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0007bd9e add r2, pc | r2 = 0xf7dd2;
0x0007bda0 str.w r2, [sl, 0xd8] | __asm ("str.w r2, [sl, 0xd8]");
0x0007bda4 cmp r3, 0 |
| if (r3 != 0) {
0x0007bda6 bne.w 0x7c49e | goto label_57;
| }
0x0007bdaa ldrb.w r3, [sl, 0x17] | r3 = *((sl + 0x17));
0x0007bdae cmp r3, 0 |
| if (r3 == 0) {
0x0007bdb0 beq.w 0x7c500 | goto label_58;
| }
0x0007bdb4 ldr.w r3, [sl, 0xe0] | r3 = *((sl + 0xe0));
0x0007bdb8 cmp r3, 0 |
| if (r3 == 0) {
0x0007bdba beq.w 0x7c532 | goto label_59;
| }
0x0007bdbe ldr r3, [pc, 0x274] |
0x0007bdc0 add r3, pc | r3 = 0xf7dfa;
| label_22:
0x0007bdc2 str.w r3, [sl, 0xdc] | __asm ("str.w r3, [sl, 0xdc]");
0x0007bdc6 ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
0x0007bdca ldr r5, [sp, 8] | r5 = var_8h;
0x0007bdcc ldrd r0, r1, [r8, 0x30] | __asm ("ldrd r0, r1, [r8, 0x30]");
0x0007bdd0 ldr r3, [r3] | r3 = *(r3);
0x0007bdd2 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x0007bdd6 strd r0, r1, [sl, 0x88] | __asm ("strd r0, r1, [sl, 0x88]");
| if (r3 != 0) {
0x0007bdda cbz r3, 0x7bdec |
0x0007bddc ldr r3, [r3] | r3 = *(r3);
0x0007bdde cmp r3, 2 |
| if (r3 <= 2) {
0x0007bde0 ble 0x7bdec | goto label_60;
| }
0x0007bde2 mov r0, sl | r0 = sl;
0x0007bde4 bl 0x2b830 | fcn_0002b830 (r0, r1);
0x0007bde8 ldr.w sl, [r5] | sl = *(r5);
| }
| label_60:
0x0007bdec add r3, sp, 0x38 | r3 += var_38h;
0x0007bdee movs r2, 0x64 | r2 = 0x64;
0x0007bdf0 mov r0, r3 | r0 = r3;
0x0007bdf2 movs r1, 0 | r1 = 0;
0x0007bdf4 blx 0x62ec | r0 = fcn_000062ec ();
0x0007bdf8 mov r3, r0 | r3 = r0;
0x0007bdfa ldr.w r0, [sl, 0x40] | r0 = *((sl + 0x40));
0x0007bdfe ldr r2, [r0] | r2 = *(r0);
0x0007be00 cmp r2, 0 |
| if (r2 == 0) {
0x0007be02 beq.w 0x7c19e | goto label_61;
| }
0x0007be06 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0007be0a mov r1, r3 | r1 = r3;
0x0007be0c vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x0007be10 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0007be12 movs r2, 0x64 | r2 = 0x64;
0x0007be14 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0007be16 movw r2, 0x20a | r2 = 0x20a;
0x0007be1a mov fp, r0 |
0x0007be1c cmp r0, r2 |
0x0007be1e it ne |
| if (r0 != r2) {
0x0007be20 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
| if (r0 == r2) {
0x0007be22 beq.w 0x7c19e | goto label_61;
| }
| label_5:
0x0007be26 ldr r3, [sp, 8] | r3 = var_8h;
0x0007be28 ldr r0, [r3] | r0 = *(r3);
| if (r0 == 0) {
0x0007be2a cbz r0, 0x7be70 | goto label_62;
| }
0x0007be2c movs r1, 0 | r1 = 0;
0x0007be2e bl 0x78ad0 | fcn_00078ad0 (r0, r1);
0x0007be32 b 0x7be70 | goto label_62;
| label_37:
0x0007be34 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007be36 ands r3, r3, 0x80 | r3 &= 0x80;
0x0007be3a str r3, [sp, 0xc] | var_ch = r3;
| if (r3 != r3) {
0x0007be3c bne 0x7beac | goto label_63;
| }
0x0007be3e movs r0, 0x30 | r0 = 0x30;
0x0007be40 movs r1, 0 | r1 = 0;
0x0007be42 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007be46 mov r4, r0 | r4 = r0;
0x0007be48 cmp r0, 0 |
| if (r0 == 0) {
0x0007be4a beq 0x7bf08 | goto label_38;
| }
0x0007be4c ldr r6, [sp, 0xc] | r6 = var_ch;
0x0007be4e movs r2, 0x2c | r2 = 0x2c;
0x0007be50 adds r0, 4 | r0 += 4;
0x0007be52 mov r1, r6 | r1 = r6;
0x0007be54 blx 0x62ec | fcn_000062ec ();
0x0007be58 movs r3, 1 | r3 = 1;
0x0007be5a str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x0007be5e str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0007be60 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007be62 str r4, [r4, 0x20] | *((r4 + 0x20)) = r4;
0x0007be64 lsls r3, r3, 0xe | r3 <<= 0xe;
| if (r3 < r3) {
0x0007be66 bmi.w 0x7baf0 | goto label_1;
| }
0x0007be6a b 0x7bbcc | goto label_2;
| label_47:
0x0007be6c mov.w fp, 7 |
| label_62:
0x0007be70 ldr r0, [sp, 8] | r0 = var_8h;
0x0007be72 bl 0x26dbc | fcn_00026dbc (r0);
0x0007be76 mov r0, r4 | r0 = r4;
0x0007be78 bl 0x26dbc | fcn_00026dbc (r0);
0x0007be7c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007be7e movs r2, 0 | r2 = 0;
0x0007be80 str r2, [r3] | *(r3) = r2;
| if (r6 == 0) {
| label_6:
0x0007be82 cbz r6, 0x7be8e | goto label_21;
| }
0x0007be84 ldr r2, [pc, 0x1b0] |
0x0007be86 mov r0, r6 | r0 = r6;
0x0007be88 add r2, pc |
0x0007be8a ldr r2, [r2, 0x58] | r2 = *(0xf7f1c);
0x0007be8c blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
| do {
| label_21:
0x0007be8e ldr r1, [pc, 0x1ac] |
0x0007be90 ldr r2, [pc, 0x180] | r2 = *(0x7c014);
0x0007be92 add r1, pc | r1 = 0xf7ed4;
0x0007be94 ldr r2, [r1, r2] | r2 = *(0xf7ed4);
0x0007be96 ldr r1, [r2] | r1 = *(0xf7ed4);
0x0007be98 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x0007be9a eors r1, r2 | r1 ^= r2;
0x0007be9c mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0007bea0 bne.w 0x7c538 | goto label_64;
| }
0x0007bea4 mov r0, fp | r0 = fp;
0x0007bea6 add sp, 0xa4 |
0x0007bea8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_63:
0x0007beac movs r6, 0 | r6 = 0;
0x0007beae b 0x7ba90 | goto label_0;
| label_35:
0x0007beb0 movs r0, 0x30 | r0 = 0x30;
0x0007beb2 movs r1, 0 | r1 = 0;
0x0007beb4 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007beb8 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0007beba cbz r0, 0x7bf08 |
0x0007bebc ldr r6, [sp, 0xc] | r6 = var_ch;
0x0007bebe movs r2, 0x2c | r2 = 0x2c;
0x0007bec0 adds r0, r4, 4 | r0 = r4 + 4;
0x0007bec2 mov r1, r6 | r1 = r6;
0x0007bec4 blx 0x62ec | fcn_000062ec ();
0x0007bec8 movs r3, 1 | r3 = 1;
0x0007beca str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x0007bece str r4, [r4, 0x20] | *((r4 + 0x20)) = r4;
0x0007bed0 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0007bed2 b 0x7bbcc | goto label_2;
| label_41:
0x0007bed4 mov r2, r5 | r2 = r5;
0x0007bed6 mov r1, r7 | r1 = r7;
0x0007bed8 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007bedc b 0x7bb40 | goto label_3;
| label_48:
0x0007bede cmp r7, 0 |
| if (r7 == 0) {
0x0007bee0 beq.w 0x7bfe8 | goto label_65;
| }
0x0007bee4 ldrb r2, [r7] | r2 = *(r7);
| if (r2 != 0) {
0x0007bee6 cbnz r2, 0x7bf0e | goto label_66;
| }
0x0007bee8 movs r1, 1 | r1 = 1;
0x0007beea mov.w r2, 0x14a | r2 = 0x14a;
0x0007beee strd r7, fp, [sp, 0x24] | __asm ("strd r7, fp, [var_24h]");
0x0007bef2 str r1, [sp, 0x1c] | var_1ch = r1;
0x0007bef4 str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
0x0007bef8 str.w fp, [sp, 0x2c] | __asm ("str.w fp, [var_2ch]");
0x0007befc str.w fp, [sp, 0x18] | __asm ("str.w fp, [s1]");
0x0007bf00 b 0x7bc2c | goto label_4;
| label_40:
0x0007bf02 mov r0, r4 | r0 = r4;
0x0007bf04 bl 0x26dbc | fcn_00026dbc (r0);
| }
| label_38:
0x0007bf08 mov.w fp, 7 |
0x0007bf0c b 0x7be8e |
| } while (1);
| label_66:
0x0007bf0e ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x0007bf12 add.w sl, r3, 1 | sl = r3 + 1;
0x0007bf16 lsl.w r0, sl, 1 | r0 = sl << 1;
0x0007bf1a asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x0007bf1c bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007bf20 mov r3, r0 | r3 = r0;
0x0007bf22 str r0, [sp, 0x18] | s1 = r0;
0x0007bf24 cmp r0, 0 |
| if (r0 == 0) {
0x0007bf26 beq.w 0x7c17c | goto label_14;
| }
0x0007bf2a strb.w fp, [r0] | *(r0) = fp;
0x0007bf2e mov r2, sl | r2 = sl;
0x0007bf30 ldr.w r5, [sb, 0x24] | r5 = *((sb + 0x24));
0x0007bf34 mov r1, r7 | r1 = r7;
0x0007bf36 mov r0, sb | r0 = sb;
0x0007bf38 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0007bf3a str r0, [sp, 0x28] | var_28h = r0;
| if (r0 != 0) {
0x0007bf3c cbz r0, 0x7bf54 |
0x0007bf3e cmp.w r0, 0x200 |
| if (r0 != 0x200) {
0x0007bf42 bne 0x7bf54 | goto label_67;
| }
0x0007bf44 ldr r2, [sp, 0xcc] | r2 = *(arg_cch);
0x0007bf46 movw r3, 0x60e | r3 = 0x60e;
0x0007bf4a ands r2, r2, 0x1000000 | r2 &= 0x1000000;
0x0007bf4e it eq |
| if (r2 != r2) {
0x0007bf50 moveq r3, r2 | r3 = r2;
| }
0x0007bf52 str r3, [sp, 0x28] | var_28h = r3;
| }
| label_67:
0x0007bf54 ldr r0, [sp, 0x18] | r0 = s1;
0x0007bf56 blx 0x65dc | r0 = strcmp (r0, r1);
0x0007bf5a bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0007bf5e mov r0, r7 | r0 = r7;
0x0007bf60 mov r5, r3 | r5 = r3;
0x0007bf62 str r3, [sp, 0x14] | var_14h = r3;
0x0007bf64 blx 0x65dc | r0 = strcmp (r0, r1);
0x0007bf68 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0007bf6c mov fp, r5 |
0x0007bf6e adds r3, 1 | r3++;
0x0007bf70 ldrb r2, [r7, r3] | r2 = *((r7 + r3));
0x0007bf72 adds r3, r7, r3 | r3 = r7 + r3;
0x0007bf74 str r3, [sp, 0x2c] | var_2ch = r3;
0x0007bf76 cmp r2, 0 |
| if (r2 == 0) {
0x0007bf78 beq.w 0x7c506 | goto label_68;
| }
0x0007bf7c ldr r5, [sp, 8] | r5 = var_8h;
0x0007bf7e mov sl, r3 | sl = r3;
| do {
0x0007bf80 mov r0, sl | r0 = sl;
0x0007bf82 blx 0x65dc | strcmp (r0, r1);
0x0007bf86 adds r0, 1 | r0++;
0x0007bf88 add sl, r0 | sl += r0;
0x0007bf8a mov r0, sl | r0 = sl;
0x0007bf8c blx 0x65dc | strcmp (r0, r1);
0x0007bf90 adds r0, 1 | r0++;
0x0007bf92 ldrb.w r3, [sl, r0] | r3 = *((sl + r0));
0x0007bf94 adds r0, 0 | r0 += 0;
0x0007bf96 add sl, r0 | sl += r0;
0x0007bf98 cmp r3, 0 |
0x0007bf9a bne 0x7bf80 |
| } while (r3 != 0);
0x0007bf9c str r5, [sp, 8] | var_8h = r5;
| label_27:
0x0007bf9e ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007bfa0 cmp r3, 0 |
| if (r3 != 0) {
0x0007bfa2 bne.w 0x7c488 | goto label_69;
| }
0x0007bfa6 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007bfa8 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x0007bfac adds r2, r1, 7 | r2 = r1 + 7;
0x0007bfae cmp r2, r3 |
| if (r2 >= r3) {
0x0007bfb0 bge.w 0x7c46a | goto label_70;
| }
0x0007bfb4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007bfb6 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0007bfba add.w sl, sl, 1 | sl++;
0x0007bfbe str r7, [sp, 0x24] | var_24h = r7;
0x0007bfc0 add.w r2, r2, 0x14a | r2 += 0x14a;
0x0007bfc4 sub.w r3, sl, r3 | r3 = sl - r3;
0x0007bfc8 str r3, [sp, 0x1c] | var_1ch = r3;
0x0007bfca ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0007bfcc adds r0, 4 | r0 += 4;
0x0007bfce b 0x7bc2c | goto label_4;
| label_49:
0x0007bfd0 movs r2, 1 | r2 = 1;
0x0007bfd2 mov fp, r7 |
0x0007bfd4 mov r1, r2 | r1 = r2;
0x0007bfd6 str r2, [sp, 0x1c] | var_1ch = r2;
0x0007bfd8 str r7, [sp, 0x24] | var_24h = r7;
0x0007bfda mov.w r2, 0x14a | r2 = 0x14a;
0x0007bfde str r7, [sp, 0x2c] | var_2ch = r7;
0x0007bfe0 str r7, [sp, 0x18] | s1 = r7;
0x0007bfe2 str r7, [sp, 0x14] | var_14h = r7;
0x0007bfe4 str r1, [sp, 0x28] | var_28h = r1;
0x0007bfe6 b 0x7bc2c | goto label_4;
| label_65:
0x0007bfe8 movs r1, 1 | r1 = 1;
0x0007bfea mov.w r2, 0x14a | r2 = 0x14a;
0x0007bfee strd r7, r7, [sp, 0x24] | __asm ("strd r7, r7, [var_24h]");
0x0007bff2 str r7, [sp, 0x2c] | var_2ch = r7;
0x0007bff4 str r7, [sp, 0x18] | s1 = r7;
0x0007bff6 str r1, [sp, 0x1c] | var_1ch = r1;
0x0007bff8 str r7, [sp, 0x14] | var_14h = r7;
0x0007bffa b 0x7bc2c | goto label_4;
| label_55:
0x0007c040 mov fp, r0 |
| label_16:
0x0007c042 ldr.w r7, [sl, 0x40] | r7 = *((sl + 0x40));
0x0007c046 ldr r2, [r7] | r2 = *(r7);
| if (r2 != 0) {
0x0007c048 cbz r2, 0x7c054 |
0x0007c04a ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0007c04c mov r0, r7 | r0 = r7;
0x0007c04e blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
0x0007c050 movs r2, 0 | r2 = 0;
0x0007c052 str r2, [r7] | *(r7) = r2;
| }
0x0007c054 ldr.w r0, [sl, 0xf0] | r0 = *((sl + 0xf0));
0x0007c058 bl 0x26f64 | fcn_00026f64 (r0);
0x0007c05c mov r0, sl | r0 = sl;
0x0007c05e bl 0x26dbc | fcn_00026dbc (r0);
0x0007c062 b 0x7be26 | goto label_5;
| label_46:
0x0007c064 ldr.w r0, [r8, 0x14] | r0 = *((r8 + 0x14));
0x0007c068 str r5, [sp, 8] | var_8h = r5;
0x0007c06a subs r1, r0, 1 | r1 = r0 - 1;
| if (r1 < r0) {
0x0007c06c bmi 0x7c08e | goto label_71;
| }
0x0007c06e ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0007c072 add.w r2, r2, r0, lsl 4 | r2 += (r0 << 4);
| do {
0x0007c076 ldr r3, [r2, -0xc] | r3 = *((r2 - 0xc));
| if (r3 != 0) {
0x0007c07a cbz r3, 0x7c084 |
0x0007c07c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0007c07e cmp r3, r5 |
| if (r3 == r5) {
0x0007c080 beq.w 0x7c3e0 | goto label_72;
| }
| }
0x0007c084 subs r1, 1 | r1--;
0x0007c086 subs r2, 0x10 | r2 -= 0x10;
0x0007c088 adds r0, r1, 1 | r0 = r1 + 1;
0x0007c08a bne 0x7c076 |
| } while (r0 != r1);
0x0007c08c str r5, [sp, 8] | var_8h = r5;
| label_71:
0x0007c08e ldr r3, [sp, 8] | r3 = var_8h;
0x0007c090 ldr r2, [r3, 0x44] | r2 = *((r3 + 0x44));
0x0007c092 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0007c094 adds r2, 1 | r2++;
0x0007c096 str r2, [r3, 0x44] | *((r3 + 0x44)) = r2;
0x0007c098 cmp.w fp, 0 |
| if (fp == 0) {
0x0007c09c beq.w 0x7c494 | goto label_73;
| }
0x0007c0a0 ldr.w r3, [pc, 0x498] |
0x0007c0a4 mov r0, fp | r0 = fp;
0x0007c0a6 add r3, pc |
0x0007c0a8 ldr r3, [r3, 0x58] | r3 = *(0xf863e);
0x0007c0aa blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0007c0ac mov r0, sl | r0 = sl;
0x0007c0ae bl 0x26dbc | fcn_00026dbc (r0);
0x0007c0b2 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
| label_15:
0x0007c0b4 cmp r3, 0 |
| if (r3 == 0) {
0x0007c0b6 beq 0x7c132 | goto label_13;
| }
| label_28:
0x0007c0b8 ldr.w r7, [r8, 0x14] | r7 = *((r8 + 0x14));
0x0007c0bc cmp r7, 0 |
| if (r7 <= 0) {
0x0007c0be ble 0x7c0da | goto label_74;
| }
0x0007c0c0 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0007c0c4 movs r1, 0 | r1 = 0;
0x0007c0c6 ldr r5, [sp, 8] | r5 = var_8h;
| do {
0x0007c0c8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
| if (r3 != 0) {
0x0007c0ca cbz r3, 0x7c0d0 |
0x0007c0cc ldrb r0, [r3, 9] | r0 = *((r3 + 9));
| if (r0 != 0) {
0x0007c0ce cbnz r0, 0x7c118 | goto label_75;
| }
| }
0x0007c0d0 adds r1, 1 | r1++;
0x0007c0d2 adds r2, 0x10 | r2 += 0x10;
0x0007c0d4 cmp r1, r7 |
0x0007c0d6 bne 0x7c0c8 |
| } while (r1 != r7);
0x0007c0d8 str r5, [sp, 8] | var_8h = r5;
| label_74:
0x0007c0da ldr r7, [r4, 4] | r7 = *((r4 + 4));
| label_7:
0x0007c0dc ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007c0de str r4, [r3] | *(r3) = r4;
0x0007c0e0 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0007c0e2 ldrb r2, [r4, 0xa] | r2 = *((r4 + 0xa));
0x0007c0e4 adds r1, r3, 1 | r1 = r3 + 1;
0x0007c0e6 str r1, [r4, 0xc] | *((r4 + 0xc)) = r1;
| if (r2 == 0) {
0x0007c0e8 cbnz r2, 0x7c0f8 |
0x0007c0ea mov r0, r4 | r0 = r4;
0x0007c0ec bl 0x2adac | fcn_0002adac (r0);
0x0007c0f0 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
| if (r3 == 0) {
0x0007c0f2 cbz r3, 0x7c0fc | goto label_9;
| }
0x0007c0f4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0007c0f6 subs r3, 1 | r3--;
| }
0x0007c0f8 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r3 == 0) {
0x0007c0fa cbz r3, 0x7c14e | goto label_76;
| }
| label_9:
0x0007c0fc ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
| if (r3 == 0) {
0x0007c0fe cbz r3, 0x7c13e | goto label_77;
| }
| label_8:
0x0007c100 ldr r2, [sp, 8] | r2 = var_8h;
0x0007c102 ldr r3, [r2] | r3 = *(r2);
0x0007c104 ldr r0, [r3, 0x40] | r0 = *((r3 + 0x40));
0x0007c106 ldr r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x0007c108 cbz r3, 0x7c112 |
0x0007c10a ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0007c10c adds r2, 4 | r2 += 4;
0x0007c10e movs r1, 0x1e | r1 = 0x1e;
0x0007c110 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
0x0007c112 mov.w fp, 0 |
0x0007c116 b 0x7be82 | goto label_6;
| do {
| label_75:
0x0007c118 mov r2, r3 | r2 = r3;
0x0007c11a ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0007c11c cmp r3, 0 |
0x0007c11e bne 0x7c118 |
| } while (r3 != 0);
0x0007c120 ldr r7, [r4, 4] | r7 = *((r4 + 4));
0x0007c122 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0007c124 str r5, [sp, 8] | var_8h = r5;
0x0007c126 cmp r1, r7 |
| if (r1 < r7) {
0x0007c128 bls 0x7c156 | goto label_78;
| }
0x0007c12a strd r2, r3, [r4, 0x18] | __asm ("strd r2, r3, [r4, 0x18]");
0x0007c12e str r4, [r2, 0x1c] | *((r2 + 0x1c)) = r4;
0x0007c130 b 0x7c0dc | goto label_7;
| label_13:
0x0007c132 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007c134 ldr r7, [r4, 4] | r7 = *((r4 + 4));
0x0007c136 str r4, [r3] | *(r3) = r4;
0x0007c138 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0007c13a cmp r3, 0 |
| if (r3 != 0) {
0x0007c13c bne 0x7c100 | goto label_8;
| }
| label_77:
0x0007c13e movw r1, 0xf830 |
0x0007c142 mov r0, r4 | r0 = r4;
0x0007c144 movt r1, 0xffff | r1 = 0xfffff830;
0x0007c148 bl 0x30538 | fcn_00030538 (r0, r1);
0x0007c14a invalid |
| label_76:
0x0007c14e mov r0, r4 | r0 = r4;
0x0007c150 bl 0x22944 | fcn_00022944 (r0);
0x0007c154 b 0x7c0fc | goto label_9;
| label_78:
0x0007c156 ldr r5, [sp, 8] | r5 = var_8h;
0x0007c158 b 0x7c160 |
| while (r2 != 0) {
0x0007c15a ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0007c15c cmp r3, r7 |
| if (r3 >= r7) {
0x0007c15e bhs 0x7c194 | goto label_79;
| }
0x0007c160 mov r1, r2 | r1 = r2;
0x0007c162 ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x0007c164 cmp r2, 0 |
0x0007c166 bne 0x7c15a |
| }
0x0007c168 str r5, [sp, 8] | var_8h = r5;
0x0007c16a strd r2, r1, [r4, 0x18] | __asm ("strd r2, r1, [r4, 0x18]");
| label_12:
0x0007c16e str r4, [r1, 0x18] | *((r1 + 0x18)) = r4;
0x0007c170 b 0x7c0dc | goto label_7;
| label_51:
0x0007c172 ldr r3, [sp, 0x18] | r3 = s1;
| if (r3 != 0) {
0x0007c174 cbz r3, 0x7c17c |
0x0007c176 mov r0, r3 | r0 = r3;
0x0007c178 bl 0x26dbc | fcn_00026dbc (r0);
| }
| label_14:
0x0007c17c mov.w fp, 7 |
0x0007c180 b 0x7be26 | goto label_5;
| label_44:
0x0007c182 ldr r2, [pc, 0x3bc] |
0x0007c184 add r2, pc | r2 = 0xf86ca;
0x0007c186 ldr.w r3, [r2, 0x520] | r3 = *(0xf8bea);
0x0007c18a str r3, [sp, 8] | var_8h = r3;
0x0007c18c cmp r3, 0 |
| if (r3 != 0) {
0x0007c18e bne.w 0x7bb8a | goto label_10;
| }
0x0007c192 b 0x7bbbe | goto label_11;
| label_79:
0x0007c194 strd r2, r1, [r4, 0x18] | __asm ("strd r2, r1, [r4, 0x18]");
0x0007c198 str r5, [sp, 8] | var_8h = r5;
0x0007c19a str r4, [r2, 0x1c] | *((r2 + 0x1c)) = r4;
0x0007c19c b 0x7c16e | goto label_12;
| label_61:
0x0007c19e ldr r2, [sp, 8] | r2 = var_8h;
0x0007c1a0 ldr r3, [sp, 0xc8] | r3 = *(arg_c8h);
0x0007c1a2 ldr r0, [r2] | r0 = *(r2);
0x0007c1a4 strb r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0007c1a6 ldr r3, [pc, 0x39c] |
0x0007c1a8 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x0007c1aa str.w r8, [r2, 4] | __asm ("str.w r8, [r2, 4]");
0x0007c1ae add r3, pc | r3 = 0xf86f8;
0x0007c1b0 str.w r2, [r0, 0xc4] | __asm ("str.w r2, [r0, 0xc4]");
0x0007c1b4 str.w r3, [r0, 0xc0] | __asm ("str.w r3, [r0, 0xc0]");
0x0007c1b8 ldr r3, [r1] | r3 = *(r1);
| if (r3 != 0) {
0x0007c1ba cbz r3, 0x7c1cc |
0x0007c1bc ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0007c1be add.w r2, r0, 0xc0 | r2 = r0 + 0xc0;
0x0007c1c2 mov r0, r1 | r0 = r1;
0x0007c1c4 movs r1, 0xf | r1 = 0xf;
0x0007c1c6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007c1c8 ldr r3, [sp, 8] | r3 = var_8h;
0x0007c1ca ldr r0, [r3] | r0 = *(r3);
| }
0x0007c1cc ldr r2, [sp, 8] | r2 = var_8h;
0x0007c1ce vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0007c1d2 add.w r3, r2, 8 | r3 = r2 + 8;
0x0007c1d6 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x0007c1d8 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0007c1dc ldrb r3, [r0, 0xe] | r3 = *((r0 + 0xe));
| if (r3 != 0) {
0x0007c1de cbz r3, 0x7c1e8 |
0x0007c1e0 ldrh r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x0007c1e2 orr r3, r3, 1 | r3 |= 1;
0x0007c1e6 strh r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
| }
0x0007c1e8 ldrb.w r3, [sp, 0x49] | r3 = var_49h;
0x0007c1ec ldrb.w r2, [sp, 0x48] | r2 = var_48h;
0x0007c1f0 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0007c1f2 orr.w r3, r3, r2, lsl 8 | r3 |= (r2 << 8);
0x0007c1f6 ldr r2, [sp, 8] | r2 = var_8h;
0x0007c1f8 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
0x0007c1fa sub.w r2, r3, 0x200 | r2 = r3 - 0x200;
0x0007c1fe cmp.w r2, 0xfe00 |
| if (r2 > 0xfe00) {
0x0007c202 bhi.w 0x7c3be | goto label_80;
| }
0x0007c206 subs r2, r3, 1 | r2 = r3 - 1;
0x0007c208 tst r2, r3 |
| if ((r2 & r3) != 0) {
0x0007c20a bne.w 0x7c3be | goto label_80;
| }
0x0007c20e ldr r2, [sp, 8] | r2 = var_8h;
0x0007c210 ldrb.w r7, [sp, 0x4c] | r7 = var_4ch;
0x0007c214 ldrh r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x0007c216 mov sb, r7 | sb = r7;
0x0007c218 orr r3, r3, 2 | r3 |= 2;
0x0007c21c strh r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
0x0007c21e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0007c220 subs r3, 0 |
0x0007c222 it ne |
| if (r3 == 0) {
0x0007c224 movne r3, 1 | r3 = 1;
| }
0x0007c226 strb r3, [r2, 0x11] | *((r2 + 0x11)) = r3;
0x0007c228 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0007c22a subs r3, 0 |
0x0007c22c it ne |
| if (r3 == 0) {
0x0007c22e movne r3, 1 | r3 = 1;
| }
0x0007c230 strb r3, [r2, 0x12] | *((r2 + 0x12)) = r3;
| label_20:
0x0007c232 ldr r5, [sp, 8] | r5 = var_8h;
0x0007c234 mov r2, sb | r2 = sb;
0x0007c236 add.w r1, r5, 0x24 | r1 = r5 + 0x24;
0x0007c23a bl 0x33fa0 | r0 = fcn_00033fa0 (r0, r1, r2);
0x0007c23e mov fp, r0 |
0x0007c240 cmp r0, 0 |
| if (r0 != 0) {
0x0007c242 bne.w 0x7be26 | goto label_5;
| }
0x0007c246 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x0007c248 subs r2, r2, r7 | r2 -= r7;
0x0007c24a str r2, [r5, 0x28] | *((r5 + 0x28)) = r2;
0x0007c24c movs r2, 1 | r2 = 1;
0x0007c24e str r2, [r5, 0x44] | *((r5 + 0x44)) = r2;
0x0007c250 ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x0007c252 cmp r2, 0 |
| if (r2 == 0) {
0x0007c254 beq.w 0x7c132 | goto label_13;
| }
0x0007c258 ldr r7, [pc, 0x2ec] |
0x0007c25a add r7, pc | r7 = 0xf87a6;
0x0007c25c ldrb r2, [r7, 4] | r2 = *((r7 + 4));
0x0007c25e cmp r2, 0 |
| if (r2 == 0) {
0x0007c260 beq.w 0x7c50c | goto label_81;
| }
0x0007c264 ldr r2, [r7, 0x48] | r2 = *((r7 + 0x48));
0x0007c266 movs r0, 2 | r0 = 2;
0x0007c268 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
0x0007c26a ldrb r2, [r7, 4] | r2 = *((r7 + 4));
0x0007c26c mov sb, r0 | sb = r0;
| if (r2 == 0) {
0x0007c26e cbz r2, 0x7c280 | goto label_82;
| }
0x0007c270 ldr r2, [r7, 0x48] | r2 = *((r7 + 0x48));
0x0007c272 mov r0, fp | r0 = fp;
0x0007c274 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
0x0007c276 ldr r3, [sp, 8] | r3 = var_8h;
0x0007c278 str r0, [r3, 0x3c] | *((r3 + 0x3c)) = r0;
0x0007c27a cmp r0, 0 |
| if (r0 == 0) {
0x0007c27c beq.w 0x7c17c | goto label_14;
| }
| label_82:
0x0007c280 cmp.w sb, 0 |
| if (sb == 0) {
0x0007c284 beq.w 0x7c51e | goto label_83;
| }
0x0007c286 strh r3, [r1, 0xa] | *((r1 + 0xa)) = r3;
0x0007c288 ldr r7, [pc, 0x2c0] |
0x0007c28a mov r0, sb | r0 = sb;
0x0007c28c add r7, pc | r7 = 0xf87dc;
0x0007c28e ldr r3, [r7, 0x50] | r3 = *(0xf882c);
0x0007c290 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0007c292 ldr r3, [pc, 0x2bc] |
0x0007c294 mov r0, sb | r0 = sb;
0x0007c296 ldr r5, [sp, 8] | r5 = var_8h;
0x0007c298 ldr r2, [r7, 0x58] | r2 = *(0xf8834);
0x0007c29a add r3, pc | r3 = 0xf87f0;
0x0007c29c ldr.w r1, [r3, 0x520] | r1 = *(0xf8d10);
0x0007c2a0 str.w r5, [r3, 0x520] | __asm ("str.w r5, [r3, 0x520]");
0x0007c2a4 str r1, [r5, 0x48] | *((r5 + 0x48)) = r1;
0x0007c2a6 blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0007c2a8 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0007c2aa b 0x7c0b4 | goto label_15;
| label_54:
0x0007c2ac ldr r0, [sp, 0xcc] | r0 = *(arg_cch);
0x0007c2ae movw r3, 0x7f7f |
0x0007c2b2 movt r3, 0x108 | r3 = 0x1087f7f;
0x0007c2b6 ldr.w r2, [sl, 0x40] | r2 = *((sl + 0x40));
0x0007c2ba ldr.w r1, [sl, 0xb8] | r1 = *((sl + 0xb8));
0x0007c2be ands r3, r0 | r3 &= r0;
0x0007c2c0 movs r0, 0 | r0 = 0;
0x0007c2c2 str r0, [sp, 0x34] | x = r0;
0x0007c2c4 add r0, sp, 0x34 | r0 += x;
0x0007c2c6 str r0, [sp] | *(sp) = r0;
0x0007c2c8 mov r0, sb | r0 = sb;
0x0007c2ca ldr.w fp, [sb, 0x18] | fp = *((sb + 0x18));
0x0007c2ce blx fp | fp (r0, r1, r2, r3);
0x0007c2d0 ldr r2, [sp, 0x34] | r2 = x;
0x0007c2d2 mov fp, r0 |
0x0007c2d4 ubfx r1, r2, 7, 1 | r1 = (r2 >> 7) & ((1 << 1) - 1);
0x0007c2d8 strb.w r1, [sl, 0x10] | *((sl + 0x10)) = r1;
0x0007c2dc cmp r0, 0 |
| if (r0 != 0) {
0x0007c2de bne.w 0x7c042 | goto label_16;
| }
0x0007c2e2 ldr.w r0, [sl, 0x40] | r0 = *((sl + 0x40));
0x0007c2e6 and r5, r2, 1 | r5 = r2 & 1;
0x0007c2ea str r1, [sp, 0x18] | s1 = r1;
0x0007c2ec ldr r2, [r0] | r2 = *(r0);
0x0007c2ee cmp r2, 0 |
| if (r2 == 0) {
0x0007c2f0 beq.w 0x7c4b4 | goto label_84;
| }
0x0007c2f4 ldr r3, [r2, 0x30] | r3 = *((r2 + 0x30));
0x0007c2f6 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x0007c2f8 mov sb, r0 | sb = r0;
0x0007c2fa cmp r5, 0 |
| if (r5 == 0) {
0x0007c2fc beq.w 0x7c4e0 | goto label_85;
| }
| label_26:
0x0007c300 ldr.w fp, [sl, 0xb8] | fp = *((sl + 0xb8));
0x0007c304 movs r2, 0 | r2 = 0;
0x0007c306 ldr r1, [pc, 0x24c] |
0x0007c308 mov r0, fp | r0 = fp;
0x0007c30a add r1, pc | r1 = 0xf8864;
0x0007c30c bl 0x2c518 | fcn_0002c518 (r0, r1, r2);
0x0007c310 tst.w sb, 0x2000 |
0x0007c314 strb.w r0, [sl, 0xd] | *((sl + 0xd)) = r0;
0x0007c316 movs r5, r1 | r5 = r1;
| if (r5 == r1) {
0x0007c318 beq.w 0x7c4c8 | goto label_86;
| }
| label_25:
0x0007c31c movs r3, 1 | r3 = 1;
0x0007c31e mov r5, r3 | r5 = r3;
0x0007c320 b 0x7bcbe | goto label_17;
| label_43:
0x0007c322 ldr r3, [pc, 0x234] |
0x0007c324 add r3, pc |
0x0007c326 ldr.w r3, [r3, 0x520] | r3 = *(0xf8da2);
0x0007c32a str r3, [sp, 8] | var_8h = r3;
0x0007c32c cmp r3, 0 |
| if (r3 == 0) {
0x0007c32e beq.w 0x7bbbe | goto label_11;
| }
0x0007c332 ldr r5, [sp, 8] | r5 = var_8h;
0x0007c334 mov.w fp, 0 |
0x0007c338 str r7, [sp, 8] | var_8h = r7;
0x0007c33a b 0x7bb8e | goto label_18;
| label_52:
0x0007c33c ldr r5, [sp, 0x14] | r5 = var_14h;
0x0007c33e mov r0, r3 | r0 = r3;
0x0007c340 ldr r1, [sp, 0x18] | r1 = s1;
0x0007c342 mov r2, r5 | r2 = r5;
0x0007c344 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007c348 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0007c34a mov r2, r5 | r2 = r5;
0x0007c34c adds r2, 1 | r2++;
0x0007c34e add r0, r2 | r0 += r2;
0x0007c350 add.w fp, r0, 1 |
| if (r1 != 0) {
0x0007c354 cbz r1, 0x7c360 |
0x0007c356 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0007c358 add.w fp, r0, r2 |
0x0007c35c blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x0007c360 ldrd r2, r5, [sp, 0x14] | __asm ("ldrd r2, r5, [s1]");
0x0007c364 mov r0, fp | r0 = fp;
0x0007c366 str.w fp, [sl, 0xbc] | __asm ("str.w fp, [sl, 0xbc]");
0x0007c36a mov r1, r5 | r1 = r5;
0x0007c36c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007c370 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007c372 ldr.w ip, [pc, 0x1e8] |
0x0007c376 add.w lr, fp, r3 | lr = fp + r3;
0x0007c37a mov r2, r3 | r2 = r3;
0x0007c37c add.w r0, lr, 9 | r0 = lr + 9;
0x0007c380 add ip, pc | ip = 0xf88e2;
0x0007c382 str r0, [sp, 0x18] | s1 = r0;
0x0007c384 ldm.w ip!, {r0, r1} | r0 = *(ip!);
| r1 = *((ip! + 4));
0x0007c388 str.w r0, [fp, r3] | __asm ("str.w r0, [fp, r3]");
0x0007c38c ldr r0, [sp, 0x18] | r0 = s1;
0x0007c38e str.w r1, [lr, 4] | __asm ("str.w r1, [lr, 4]");
0x0007c392 mov r1, r5 | r1 = r5;
0x0007c394 str.w r0, [sl, 0xfc] | __asm ("str.w r0, [sl, 0xfc]");
0x0007c398 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007c39c ldr r2, [pc, 0x1c0] |
0x0007c39e mov r1, r0 | r1 = r0;
0x0007c3a0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007c3a2 add r2, pc | r2 = 0xf8906;
0x0007c3a4 ldr r0, [r2] | r0 = *(0xf8906);
0x0007c3a6 str r0, [r1, r3] | *((r1 + r3)) = r0;
0x0007c3a8 mov r0, r5 | r0 = r5;
0x0007c3aa bl 0x26dbc | fcn_00026dbc (r0);
0x0007c3ae b 0x7bc9a | goto label_19;
| label_53:
0x0007c3b0 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0007c3b2 and r3, r3, 1 | r3 &= 1;
0x0007c3b6 mov r5, r3 | r5 = r3;
0x0007c3b8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007c3ba str r3, [sp, 0x18] | s1 = r3;
0x0007c3bc b 0x7bcbe | goto label_17;
| label_80:
0x0007c3be ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007c3c0 movs r2, 0 | r2 = 0;
0x0007c3c2 ldr r1, [sp, 8] | r1 = var_8h;
0x0007c3c4 eor r3, r3, 1 | r3 ^= 1;
0x0007c3c8 cmp r7, 0 |
0x0007c3ca ite eq |
| if (r7 != 0) {
0x0007c3cc moveq r3, 0 | r3 = 0;
| }
| if (r7 == 0) {
0x0007c3ce andne r3, r3, 1 | r3 &= 1;
| }
0x0007c3d2 str r2, [r1, 0x24] | *((r1 + 0x24)) = r2;
| if (r3 != 0) {
0x0007c3d4 cbz r3, 0x7c3dc |
0x0007c3d6 ldr r3, [sp, 8] | r3 = var_8h;
0x0007c3d8 strh.w r2, [r3, 0x11] | *((r3 + 0x11)) = r2;
| }
0x0007c3dc movs r7, 0 | r7 = 0;
0x0007c3de b 0x7c232 | goto label_20;
| label_72:
0x0007c3e0 cmp.w fp, 0 |
| if (fp != 0) {
0x0007c3e4 beq 0x7c3f0 |
0x0007c3e6 ldr r2, [pc, 0x17c] |
0x0007c3e8 mov r0, fp | r0 = fp;
0x0007c3ea add r2, pc | r2 = 0xf8954;
0x0007c3ec ldr r3, [r2, 0x58] | r3 = *(0xf89ac);
0x0007c3ee blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| }
| if (r6 != 0) {
0x0007c3f0 cbz r6, 0x7c3fc |
0x0007c3f2 ldr r3, [pc, 0x174] |
0x0007c3f4 mov r0, r6 | r0 = r6;
0x0007c3f6 add r3, pc |
0x0007c3f8 ldr r3, [r3, 0x58] | r3 = *(0xf89bc);
0x0007c3fa blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x0007c3fc mov r0, sl | r0 = sl;
0x0007c3fe mov.w fp, 0x13 |
0x0007c402 bl 0x26dbc | fcn_00026dbc (r0);
0x0007c406 mov r0, r4 | r0 = r4;
0x0007c408 bl 0x26dbc | fcn_00026dbc (r0);
0x0007c40c b 0x7be8e | goto label_21;
| label_42:
0x0007c40e mov r0, sl | r0 = sl;
0x0007c410 bl 0x26dbc | fcn_00026dbc (r0);
0x0007c414 mov r0, r4 | r0 = r4;
0x0007c416 bl 0x26dbc | fcn_00026dbc (r0);
0x0007c41a b 0x7be8e | goto label_21;
| label_50:
0x0007c41c mov r0, r7 | r0 = r7;
0x0007c41e blx 0x65dc | r0 = strcmp (r0, r1);
0x0007c422 add.w sl, r0, 1 | sl = r0 + 1;
0x0007c426 movs r1, 0 | r1 = 0;
0x0007c428 mov r0, sl | r0 = sl;
0x0007c42a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0007c42e mov r5, r0 | r5 = r0;
0x0007c430 str r0, [sp, 0x18] | s1 = r0;
0x0007c432 cmp r0, 0 |
| if (r0 == 0) {
0x0007c434 beq.w 0x7c17c | goto label_14;
| }
0x0007c438 mov r2, sl | r2 = sl;
0x0007c43a mov r1, r7 | r1 = r7;
0x0007c43c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x0007c440 mov r0, r5 | r0 = r5;
0x0007c442 movs r5, 0 | r5 = 0;
0x0007c444 blx 0x65dc | r0 = strcmp (r0, r1);
0x0007c448 bic r1, r0, 0xc0000000 | r1 = BIT_MASK (r0, 0xc0000000);
0x0007c44c movs r0, 1 | r0 = 1;
0x0007c44e add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0007c450 lsls r1, r0, 9 | r1 = r0 << 9;
0x0007c452 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0007c456 mov fp, r1 |
0x0007c458 str r1, [sp, 0x14] | var_14h = r1;
0x0007c45a add.w r2, r2, 0x14a | r2 += 0x14a;
0x0007c45e str r0, [sp, 0x1c] | var_1ch = r0;
0x0007c460 str r5, [sp, 0x24] | var_24h = r5;
0x0007c462 strd r0, r5, [sp, 0x28] | __asm ("strd r0, r5, [var_2ch]");
0x0007c466 b.w 0x7bc2c | goto label_4;
| label_70:
0x0007c46a ldr r3, [pc, 0x100] |
0x0007c46c movs r0, 0xe | r0 = 0xe;
0x0007c46e ldr r2, [pc, 0x100] |
0x0007c470 ldr r1, [pc, 0x100] |
0x0007c472 add r3, pc | r3 = 0xf89e4;
0x0007c474 adds r3, 0x14 | r3 += 0x14;
0x0007c476 add r2, pc | r2 = 0xf89ec;
0x0007c478 str r3, [sp] | *(sp) = r3;
0x0007c47a movs r3, 0xe | r3 = 0xe;
0x0007c47c str r3, [sp, 0x28] | var_28h = r3;
0x0007c47e add r1, pc | r1 = 0xf89f6;
0x0007c480 movw r3, 0xe615 | r3 = 0xe615;
0x0007c484 bl 0x50814 | fcn_00050814 (r0, r1, r2);
| label_69:
0x0007c488 ldr r0, [sp, 0x18] | r0 = s1;
0x0007c48a bl 0x26dbc | fcn_00026dbc (r0);
0x0007c48e ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0007c492 b 0x7be26 | goto label_5;
| label_73:
0x0007c494 mov r0, sl | r0 = sl;
0x0007c496 bl 0x26dbc | fcn_00026dbc (r0);
0x0007c49a ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0007c49c b 0x7c0b4 | goto label_15;
| label_57:
0x0007c49e ldr r3, [pc, 0xd8] |
0x0007c4a0 add r3, pc | r3 = 0xf8a1e;
0x0007c4a2 b 0x7bdc2 | goto label_22;
| label_56:
0x0007c4a4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007c4a6 ldr r2, [sp, 0x18] | r2 = s1;
0x0007c4a8 orrs r3, r2 | r3 |= r2;
0x0007c4aa itt ne |
| if (r3 == r2) {
0x0007c4ac movne r3, 4 | r3 = 4;
| }
| if (r3 == r2) {
0x0007c4ae strbne r3, [sl, 5] | *((sl + 5)) = r3;
| }
0x0007c4b2 b 0x7bd98 | goto label_23;
| if (r5 == 0) {
| label_84:
0x0007c4b4 cbz r5, 0x7c4de | goto label_87;
| }
0x0007c4b6 ldr.w fp, [sl, 0xb8] | fp = *((sl + 0xb8));
0x0007c4ba ldr r1, [pc, 0xc0] |
0x0007c4bc mov r0, fp | r0 = fp;
0x0007c4be add r1, pc | r1 = 0xf8a40;
0x0007c4c0 bl 0x2c518 | fcn_0002c518 (r0, r1, r2);
0x0007c4c4 strb.w r0, [sl, 0xd] | *((sl + 0xd)) = r0;
0x0007c4c6 movs r5, r1 | r5 = r1;
| label_86:
0x0007c4c8 ldr r1, [pc, 0xb4] |
0x0007c4ca mov r0, fp | r0 = fp;
0x0007c4cc movs r2, 0 | r2 = 0;
0x0007c4ce add r1, pc | r1 = 0xf8a52;
0x0007c4d0 bl 0x2c518 | fcn_0002c518 (r0, r1, r2);
0x0007c4d4 str r0, [sp, 0x14] | var_14h = r0;
0x0007c4d6 cmp r0, 0 |
| if (r0 == 0) {
0x0007c4d8 beq.w 0x7bcce | goto label_24;
| }
0x0007c4dc b 0x7c31c | goto label_25;
| label_87:
0x0007c4de mov sb, r5 | sb = r5;
| label_85:
0x0007c4e0 mov r0, sl | r0 = sl;
0x0007c4e2 bl 0x2b554 | fcn_0002b554 (r0);
0x0007c4e6 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x0007c4ea cmp.w r3, 0x1000 |
| if (r3 < 0x1000) {
0x0007c4ee bls.w 0x7c300 | goto label_26;
| }
0x0007c4f2 cmp.w r3, 0x2000 |
0x0007c4f6 it hi |
| if (r3 <= 0x2000) {
0x0007c4f8 movhi r3, 0x2000 | r3 = 0x2000;
| }
0x0007c4fc str r3, [sp, 0x30] | var_30h = r3;
0x0007c4fe b 0x7c300 | goto label_26;
| label_58:
0x0007c500 ldr r3, [pc, 0x80] |
0x0007c502 add r3, pc | r3 = 0xf8a8a;
0x0007c504 b 0x7bdc2 | goto label_22;
| label_68:
0x0007c506 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0007c50a b 0x7bf9e | goto label_27;
| label_81:
0x0007c50c ldr r3, [pc, 0x78] |
0x0007c50e ldr r1, [sp, 8] | r1 = var_8h;
0x0007c510 add r3, pc | r3 = 0xf8a9c;
0x0007c512 ldr.w r2, [r3, 0x520] | r2 = *(0xf8fbc);
0x0007c516 str.w r1, [r3, 0x520] | __asm ("str.w r1, [r3, 0x520]");
0x0007c51a str r2, [r1, 0x48] | *((r1 + 0x48)) = r2;
0x0007c51c b 0x7c0b8 | goto label_28;
| label_83:
0x0007c51e ldr r2, [pc, 0x6c] |
0x0007c520 ldr r0, [sp, 8] | r0 = var_8h;
0x0007c522 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0007c524 add r2, pc | r2 = 0xf8ab6;
0x0007c526 ldr.w r1, [r2, 0x520] | r1 = *(0xf8fd6);
0x0007c52a str.w r0, [r2, 0x520] | __asm ("str.w r0, [r2, 0x520]");
0x0007c52e str r1, [r0, 0x48] | *((r0 + 0x48)) = r1;
0x0007c530 b 0x7c0b4 | goto label_15;
| label_59:
0x0007c532 ldr r3, [pc, 0x5c] |
0x0007c534 add r3, pc | r3 = 0xf8aca;
0x0007c536 b 0x7bdc2 | goto label_22;
| label_64:
0x0007c538 blx 0x6430 | fcn_00006430 ();
0x0007c53c b 0x7c91c | goto label_88;
| label_29:
0x0007c900 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0007c904 lsls r3, r5, 4 | r3 = r5 << 4;
0x0007c906 adds r1, r2, r3 | r1 = r2 + r3;
0x0007c908 ldr r1, [r1, 4] | r1 = *((r1 + 4));
| if (r1 == 0) {
0x0007c90a cbz r1, 0x7c936 | goto label_31;
| }
| if (r7 == 0) {
0x0007c90c cbz r7, 0x7c944 | goto label_89;
| }
0x0007c90e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0007c910 add.w lr, r7, -1 | lr = r7 + -1;
0x0007c914 add.w ip, r3, -1 |
| do {
| label_30:
0x0007c918 ldrb r3, [lr, 1]! | r3 = *((lr += 1));
| label_88:
0x0007c91c ldrb r2, [ip, 1]! | r2 = *((ip += 1));
0x0007c920 adds r0, r4, r3 | r0 = r4 + r3;
0x0007c922 cmp r3, r2 |
0x0007c924 add.w r1, r4, r2 | r1 = r4 + r2;
| if (r3 == r2) {
0x0007c928 beq 0x7c940 | goto label_90;
| }
0x0007c92a ldrb.w r2, [r0, 0x140] | r2 = *((r0 + 0x140));
0x0007c92e ldrb.w r3, [r1, 0x140] | r3 = *((r1 + 0x140));
0x0007c932 cmp r2, r3 |
0x0007c934 beq 0x7c918 |
| } while (r2 == r3);
| label_31:
0x0007c936 adds r5, 1 | r5++;
0x0007c938 cmp sl, r5 |
| if (sl > r5) {
0x0007c93a bgt 0x7c900 | goto label_29;
| }
| label_32:
0x0007c93c pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_90:
0x0007c940 cmp r3, 0 |
| if (r3 != 0) {
0x0007c942 bne 0x7c918 | goto label_30;
| }
| label_89:
0x0007c944 ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x0007c946 lsl.w r2, sb, r5 | r2 = sb << r5;
0x0007c94a cmp r0, 0 |
0x0007c94c it eq |
| if (r0 != 0) {
0x0007c94e moveq r0, r6 | r0 = r6;
| }
0x0007c950 ldr r3, [r0, 0x54] | r3 = *((r0 + 0x54));
0x0007c952 tst r3, r2 |
| if ((r3 & r2) != 0) {
0x0007c954 bne 0x7c936 | goto label_31;
| }
0x0007c956 cmp r5, 1 |
0x0007c958 orr.w r3, r3, r2 | r3 |= r2;
0x0007c95a lsls r2, r0, 0xc | r2 = r0 << 0xc;
0x0007c95c str r3, [r0, 0x54] | *((r0 + 0x54)) = r3;
| if (r2 != r0) {
0x0007c95e bne 0x7c936 | goto label_31;
| }
0x0007c960 bl 0x7c594 | fcn_0007c594 (r0);
0x0007c964 ldr.w sl, [r8, 0x14] | sl = *((r8 + 0x14));
0x0007c968 adds r5, 1 | r5++;
0x0007c96a cmp sl, r5 |
| if (sl > r5) {
0x0007c96c bgt 0x7c900 | goto label_29;
| }
0x0007c96e b 0x7c93c | goto label_32;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7cac8 */
| #include <stdint.h>
|
; (fcn) fcn.0007cac8 () | void fcn_0007cac8 (int16_t arg_1h, int16_t arg_ch, int16_t arg_14h, int16_t arg_20h, arithmetic x, int16_t arg_8ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007cac8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007cacc sub sp, 0x64 |
0x0007cace str r2, [sp, 0x1c] | var_1ch = r2;
0x0007cad0 mov sl, r0 | sl = r0;
0x0007cad2 mov fp, r1 |
0x0007cad4 ldr.w r2, [pc, 0x710] |
0x0007cad8 str r3, [sp, 0x10] | var_10h = r3;
0x0007cada ldr r0, [sp, 0x88] | r0 = *(x);
0x0007cadc ldr.w r3, [pc, 0x70c] | r3 = *(0x7d1ec);
0x0007cae0 add r2, pc | r2 = 0xf9ccc;
0x0007cae2 str r0, [sp, 8] | var_8h = r0;
0x0007cae4 ldr r3, [r2, r3] |
0x0007cae6 ldr r2, [sp, 0x8c] | r2 = *(arg_8ch);
0x0007cae8 ldr r3, [r3] | r3 = *(0xf9ccc);
0x0007caea str r3, [sp, 0x5c] | var_5ch = r3;
0x0007caec mov.w r3, 0 | r3 = 0;
0x0007caf0 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0007caf4 str r2, [sp, 0x18] | var_18h = r2;
0x0007caf6 str r3, [sp, 0x20] | var_20h = r3;
0x0007caf8 cmp r3, 0 |
| if (r3 == 0) {
0x0007cafa beq.w 0x7cc7c | goto label_35;
| }
| label_3:
0x0007cafe ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0007cb02 str r3, [sp, 0xc] | var_ch = r3;
0x0007cb04 adds r3, 1 | r3++;
0x0007cb06 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x0007cb0a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007cb0c cmp r3, 0 |
| if (r3 == 0) {
0x0007cb0e beq.w 0x7cc8e | goto label_36;
| }
0x0007cb12 ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x0007cb16 lsls r0, r7, 0x13 | r0 = r7 << 0x13;
| if (r0 >= r7) {
0x0007cb18 bpl 0x7cb52 | goto label_37;
| }
0x0007cb1a ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0007cb1e movs r5, 0 | r5 = 0;
0x0007cb20 ldr r4, [r3, 0x1c] | r4 = *((r3 + 0x1c));
0x0007cb22 ldr r6, [r4] | r6 = *(r4);
0x0007cb24 cmp r6, 0 |
| if (r6 > 0) {
0x0007cb26 bgt 0x7cb34 | goto label_38;
| }
0x0007cb28 b 0x7cb3e | goto label_39;
| do {
0x0007cb2a adds r5, 1 | r5++;
0x0007cb2c adds r4, 0x10 | r4 += 0x10;
0x0007cb2e cmp r5, r6 |
| if (r5 == r6) {
0x0007cb30 beq.w 0x7cd1e | goto label_40;
| }
| label_38:
0x0007cb34 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0007cb36 bl 0x2329c | r0 = fcn_0002329c (r0);
0x0007cb3a cmp r0, 0 |
0x0007cb3c beq 0x7cb2a |
| } while (r0 == 0);
| label_39:
0x0007cb3e cmp r6, r5 |
| if (r6 == r5) {
0x0007cb40 beq.w 0x7cd1e | goto label_40;
| }
0x0007cb44 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0007cb48 cmp r3, 0 |
| if (r3 != 0) {
0x0007cb4a bne 0x7cc16 | goto label_4;
| }
0x0007cb4c ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x0007cb50 b 0x7cc9e | goto label_8;
| label_37:
0x0007cb52 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0007cb56 cmp r3, 0 |
| if (r3 == 0) {
0x0007cb58 beq 0x7cbf6 | goto label_5;
| }
0x0007cb5a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007cb5c cmp r3, 3 |
| if (r3 != 3) {
0x0007cb5e bne 0x7cbfc | goto label_41;
| }
0x0007cb60 lsls r3, r7, 0x13 | r3 = r7 << 0x13;
| if (r3 >= r7) {
0x0007cb62 bpl 0x7cc24 | goto label_42;
| }
| label_1:
0x0007cb64 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007cb66 ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
0x0007cb6a cmp r3, 0 |
| if (r3 == 0) {
0x0007cb6c beq.w 0x7cd34 | goto label_43;
| }
0x0007cb70 ldr.w r5, [sl, 0x2c] | r5 = *((sl + 0x2c));
0x0007cb74 mov r1, fp | r1 = fp;
0x0007cb76 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007cb78 mov r0, sl | r0 = sl;
0x0007cb7a ldr r6, [sp, 0xc] | r6 = var_ch;
0x0007cb7c adds r5, 1 | r5++;
0x0007cb7e str.w r5, [sl, 0x2c] | __asm ("str.w r5, [sl, 0x2c]");
0x0007cb82 mov r2, r6 | r2 = r6;
0x0007cb84 str r5, [r3] | *(r3) = r5;
0x0007cb86 bl 0x8d0fc | fcn_0008d0fc (r0, r1, r2, r3, r4, r5, r6);
| if (r5 != 0) {
0x0007cb8a cbz r5, 0x7cb96 |
0x0007cb8c ldr r0, [sp, 0x20] | r0 = var_20h;
0x0007cb8e mov r2, r5 | r2 = r5;
0x0007cb90 mov r1, r6 | r1 = r6;
0x0007cb92 bl 0x4f598 | fcn_0004f598 (r0, r1, r2);
| }
| label_0:
0x0007cb96 ldr r3, [sp, 8] | r3 = var_8h;
0x0007cb98 movs r5, 2 | r5 = 2;
0x0007cb9a str.w r4, [sl, 0x88] | __asm ("str.w r4, [sl, 0x88]");
| if (r3 == 0) {
0x0007cb9e cbz r3, 0x7cbce | goto label_2;
| }
0x0007cba0 ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x0007cba4 movs r5, 2 | r5 = 2;
| label_10:
0x0007cba6 ldrb r3, [r4] | r3 = *(r4);
0x0007cba8 cmp r3, 0xb0 |
0x0007cbaa it eq |
| if (r3 != 0xb0) {
0x0007cbac ldrbeq r3, [r4, 2] | r3 = *((r4 + 2));
| }
0x0007cbae cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0007cbb0 beq.w 0x7cd4a | goto label_44;
| }
0x0007cbb4 cmp r3, 0x8a |
0x0007cbb6 it ne |
| if (r3 == 0x8a) {
0x0007cbb8 movne r1, 1 | r1 = 1;
| }
| if (r3 == 0x8a) {
0x0007cbba beq.w 0x7ccfe | goto label_45;
| }
| label_6:
0x0007cbbe ldr r3, [sp, 8] | r3 = var_8h;
0x0007cbc0 subs r2, r3, 4 | r2 = r3 - 4;
0x0007cbc2 movs r3, 0 | r3 = 0;
| do {
0x0007cbc4 str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x0007cbc8 adds r3, 1 | r3++;
0x0007cbca cmp r1, r3 |
0x0007cbcc bgt 0x7cbc4 |
| } while (r1 > r3);
| label_2:
0x0007cbce ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007cbd0 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0007cbd2 str r2, [r3] | *(r3) = r2;
0x0007cbd4 ldr.w r2, [pc, 0x618] |
0x0007cbd6 movs r6, 0x18 | r6 = 0x18;
0x0007cbd8 ldr.w r3, [pc, 0x610] | r3 = *(0x7d1ec);
0x0007cbdc add r2, pc | r2 = 0xf9dd0;
0x0007cbde ldr r3, [r2, r3] | r3 = *(0xf9dd0);
0x0007cbe0 ldr r2, [r3] | r2 = *(0xf9dd0);
0x0007cbe2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0007cbe4 eors r2, r3 | r2 ^= r3;
0x0007cbe6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007cbea bne.w 0x7d1e4 | goto label_46;
| }
0x0007cbee mov r0, r5 | r0 = r5;
0x0007cbf0 add sp, 0x64 |
0x0007cbf2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x0007cbf6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007cbf8 cmp r3, 3 |
| if (r3 == 3) {
0x0007cbfa beq 0x7cc24 | goto label_42;
| }
| do {
| label_41:
0x0007cbfc ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
| label_9:
0x0007cc00 movs r3, 0 | r3 = 0;
0x0007cc02 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0007cc04 mov r1, fp | r1 = fp;
0x0007cc06 mov r0, sl | r0 = sl;
0x0007cc08 str.w r3, [sl, 0x88] | __asm ("str.w r3, [sl, 0x88]");
0x0007cc0c bl 0x8d0fc | fcn_0008d0fc (r0, r1, r2, r3, r4, r5, r6);
0x0007cc10 b 0x7cb96 | goto label_0;
| label_12:
0x0007cc12 ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
| label_4:
0x0007cc16 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007cc18 cmp r3, 3 |
0x0007cc1a bne 0x7cbfc |
| } while (r3 != 3);
0x0007cc1c ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x0007cc20 lsls r3, r7, 0x13 | r3 = r7 << 0x13;
| if (r3 < r7) {
0x0007cc22 bmi 0x7cb64 | goto label_1;
| }
| label_42:
0x0007cc24 ldr.w r3, [pc, 0x5cc] | r3 = *(0x0007d1f4);
0x0007cc28 mov r1, fp | r1 = fp;
0x0007cc2a ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x0007cc2e add r0, sp, 0x40 | r0 += var_40h;
0x0007cc30 add r3, pc | r3 += pc;
0x0007cc32 str r3, [sp, 0x44] | var_44h = r3;
0x0007cc34 ldr.w r3, [pc, 0x5c0] | r3 = *(0x0007d1f8);
0x0007cc38 add r3, pc | r3 += pc;
0x0007cc3a str r3, [sp, 0x48] | var_48h = r3;
0x0007cc3c movs r3, 0 | r3 = 0;
0x0007cc3e str r3, [sp, 0x58] | var_58h = r3;
0x0007cc40 str.w r3, [fp, 0xc] | __asm ("str.w r3, [arg_ch]");
0x0007cc44 movs r3, 1 | r3 = 1;
0x0007cc46 strh.w r3, [sp, 0x54] | var_54h = r3;
0x0007cc4a bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0007cc4e ldrh.w r3, [sp, 0x54] | r3 = var_54h;
0x0007cc52 str.w r4, [fp, 0xc] | __asm ("str.w r4, [arg_ch]");
| if (r3 == 0) {
0x0007cc56 cbz r3, 0x7cc62 | goto label_47;
| }
0x0007cc58 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0007cc5c ldr r3, [r3] | r3 = *(r3);
0x0007cc5e cmp r3, 2 |
| if (r3 > 2) {
0x0007cc60 bgt 0x7cb64 | goto label_1;
| }
| label_47:
0x0007cc62 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0007cc66 subs r3, 1 | r3--;
0x0007cc68 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x0007cc6c ldr r3, [sp, 8] | r3 = var_8h;
0x0007cc6e cmp r3, 0 |
| if (r3 != 0) {
0x0007cc70 bne 0x7cd40 | goto label_48;
| }
0x0007cc72 mov.w r3, -1 | r3 = -1;
0x0007cc76 movs r5, 5 | r5 = 5;
0x0007cc78 str r3, [sp, 0xc] | var_ch = r3;
0x0007cc7a b 0x7cbce | goto label_2;
| label_35:
0x0007cc7c ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x0007cc80 cmp r3, 0 |
| if (r3 == 0) {
0x0007cc82 beq 0x7cd0c | goto label_49;
| }
| label_7:
0x0007cc84 mov r0, sl | r0 = sl;
0x0007cc86 bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x0007cc8a str r0, [sp, 0x20] | var_20h = r0;
0x0007cc8c b 0x7cafe | goto label_3;
| label_36:
0x0007cc8e ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0007cc92 cmp r3, 0 |
| if (r3 != 0) {
0x0007cc94 bne 0x7cc16 | goto label_4;
| }
0x0007cc96 ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x0007cc9a lsls r1, r7, 0x13 | r1 = r7 << 0x13;
| if (r1 >= r7) {
0x0007cc9c bpl 0x7cbf6 | goto label_5;
| }
| label_8:
0x0007cc9e lsls r2, r7, 0x19 | r2 = r7 << 0x19;
| if (r2 < r7) {
0x0007cca0 bmi 0x7cc16 | goto label_4;
| }
0x0007cca2 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0007cca6 ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x0007cca8 cmp r2, 0 |
| if (r2 != 0) {
0x0007ccaa bne 0x7cc16 | goto label_4;
| }
0x0007ccac ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0007ccae tst.w r2, 9 |
| if ((r2 & 9) != 0) {
0x0007ccb2 bne 0x7cc16 | goto label_4;
| }
0x0007ccb4 ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x0007ccb6 cmp r2, 0 |
| if (r2 != 0) {
0x0007ccb8 bne 0x7cc16 | goto label_4;
| }
0x0007ccba ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x0007ccbc cmp r2, 0 |
| if (r2 != 0) {
0x0007ccbe bne 0x7cc16 | goto label_4;
| }
0x0007ccc0 ldr r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x0007ccc2 ldr r2, [r0] | r2 = *(r0);
0x0007ccc4 cmp r2, 1 |
| if (r2 != 1) {
0x0007ccc6 bne 0x7cc16 | goto label_4;
| }
0x0007ccc8 ldr r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x0007ccca cmp r2, 0 |
| if (r2 != 0) {
0x0007cccc bne 0x7cc16 | goto label_4;
| }
0x0007ccce ldr r7, [r0, 0x18] | r7 = *((r0 + 0x18));
0x0007ccd0 ldrb.w r1, [r7, 0x2b] | r1 = *((r7 + 0x2b));
0x0007ccd4 cmp r1, 1 |
| if (r1 == 1) {
0x0007ccd6 beq 0x7cc16 | goto label_4;
| }
0x0007ccd8 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0007ccda ldr.w r8, [r1] | r8 = *(r1);
0x0007ccde str r1, [sp, 0x2c] | var_2ch = r1;
0x0007cce0 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0007cce4 ble 0x7cd58 | goto label_50;
| }
0x0007cce6 mov r3, r2 | r3 = r2;
0x0007cce8 mov r2, r1 | r2 = r1;
0x0007ccea b 0x7ccf4 |
| while (r1 == 0xa7) {
0x0007ccec adds r3, 1 | r3++;
0x0007ccee adds r2, 0x10 | r2 += 0x10;
0x0007ccf0 cmp r3, r8 |
| if (r3 == r8) {
0x0007ccf2 beq 0x7cd50 | goto label_51;
| }
0x0007ccf4 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0007ccf6 ldrb r1, [r1] | r1 = *(r1);
0x0007ccf8 cmp r1, 0xa7 |
0x0007ccfa beq 0x7ccec |
| }
0x0007ccfc b 0x7cc16 | goto label_4;
| label_45:
0x0007ccfe ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0007cd00 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0007cd02 ldr r1, [r3] | r1 = *(r3);
| label_11:
0x0007cd04 cmp r1, 0 |
| if (r1 > 0) {
0x0007cd06 bgt.w 0x7cbbe | goto label_6;
| }
0x0007cd0a b 0x7cbce | goto label_2;
| label_49:
0x0007cd0c ldr.w r3, [sl] | r3 = *(sl);
0x0007cd10 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007cd12 lsls r4, r3, 0x1c | r4 = r3 << 0x1c;
0x0007cd14 itt pl |
| if (r4 < r3) {
0x0007cd16 movpl r3, 1 | r3 = 1;
| }
| if (r4 < r3) {
0x0007cd18 strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x0007cd1c b 0x7cc84 | goto label_7;
| label_40:
0x0007cd1e ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| if (r3 == 0) {
0x0007cd22 cbnz r3, 0x7cd28 |
0x0007cd24 str r3, [sp, 0x10] | var_10h = r3;
0x0007cd26 b 0x7cc9e | goto label_8;
| }
0x0007cd28 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007cd2a ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
0x0007cd2e cmp r3, 3 |
| if (r3 != 3) {
0x0007cd30 bne.w 0x7cc00 | goto label_9;
| }
| label_43:
0x0007cd34 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0007cd36 mov r1, fp | r1 = fp;
0x0007cd38 mov r0, sl | r0 = sl;
0x0007cd3a bl 0x8d0fc | fcn_0008d0fc (r0, r1, r2, r3, r4, r5, r6);
0x0007cd3e b 0x7cb96 | goto label_0;
| label_48:
0x0007cd40 mov.w r3, -1 | r3 = -1;
0x0007cd44 movs r5, 5 | r5 = 5;
0x0007cd46 str r3, [sp, 0xc] | var_ch = r3;
0x0007cd48 b 0x7cba6 | goto label_10;
| label_44:
0x0007cd4a ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0007cd4c ldr r1, [r3] | r1 = *(r3);
0x0007cd4e b 0x7cd04 | goto label_11;
| label_51:
0x0007cd50 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007cd52 ldr r7, [r0, 0x18] | r7 = *((r0 + 0x18));
0x0007cd54 ldr.w r8, [r3] | r8 = *(r3);
| label_50:
0x0007cd58 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x0007cd5a ldr.w r4, [sl] | r4 = *(sl);
0x0007cd5e cmp r1, 0 |
| if (r1 == 0) {
0x0007cd60 beq.w 0x7d1d4 | goto label_52;
| }
0x0007cd64 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0007cd66 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0007cd68 cmp r1, r2 |
| if (r1 == r2) {
0x0007cd6a beq.w 0x7d1ae | goto label_53;
| }
0x0007cd6e movs r5, 0 | r5 = 0;
| do {
0x0007cd70 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0007cd72 adds r3, 0x10 | r3 += 0x10;
0x0007cd74 adds r5, 1 | r5++;
0x0007cd76 cmp r1, r2 |
0x0007cd78 bne 0x7cd70 |
| } while (r1 != r2);
0x0007cd7a movs r3, 1 | r3 = 1;
0x0007cd7c lsls r3, r5 | r3 <<= r5;
| label_29:
0x0007cd7e ldr.w r0, [sl, 0x74] | r0 = *((sl + 0x74));
0x0007cd82 cmp r0, 0 |
0x0007cd84 it eq |
| if (r0 != 0) {
0x0007cd86 moveq r0, sl | r0 = sl;
| }
0x0007cd88 ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x0007cd8a tst r2, r3 |
| if ((r2 & r3) != 0) {
0x0007cd8c bne.w 0x7d130 | goto label_54;
| }
0x0007cd90 cmp r5, 1 |
0x0007cd92 orr.w r2, r2, r3 | r2 |= r3;
0x0007cd96 str r2, [r0, 0x54] | *((r0 + 0x54)) = r2;
| if (r5 == 1) {
0x0007cd98 beq.w 0x7d1b4 | goto label_55;
| }
0x0007cd9c ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x0007cd9e ldr r1, [r7] | r1 = *(r7);
| label_27:
0x0007cda0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0007cda2 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x0007cda6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0007cda8 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 != 0) {
0x0007cdaa cbz r3, 0x7cdb8 |
0x0007cdac str r1, [sp] | *(sp) = r1;
0x0007cdae movs r3, 0 | r3 = 0;
0x0007cdb0 mov r1, r5 | r1 = r5;
0x0007cdb2 mov r0, sl | r0 = sl;
0x0007cdb4 bl 0x42ffc | fcn_00042ffc (r0, r1, r2, r3, r4);
| }
| label_26:
0x0007cdb8 cmp.w r8, 1 |
| if (r8 == 1) {
0x0007cdbc beq.w 0x7d13c | goto label_56;
| }
0x0007cdc0 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0007cdc4 ble 0x7ce82 | goto label_57;
| }
| label_28:
0x0007cdc6 ldr.w sb, [fp, 0xc] | sb = *(arg_ch);
0x0007cdca movs r4, 0 | r4 = 0;
0x0007cdcc ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0007cdce str r5, [sp, 0x14] | var_14h = r5;
0x0007cdd0 ldrb.w r2, [sb] | r2 = *(sb);
0x0007cdd4 str.w sl, [sp, 0x24] | __asm ("str.w sl, [var_24h]");
0x0007cdd8 mov sl, r7 | sl = r7;
0x0007cdda mov r7, sb | r7 = sb;
0x0007cddc str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x0007cdde add sp, 0xa0 |
0x0007cde0 sub.w r3, r2, 0x8a | r3 = r2 - 0x8a;
0x0007cde4 mov sb, r2 | sb = r2;
0x0007cde6 clz r3, r3 | r3 &= r3;
0x0007cdea lsrs r3, r3, 5 | r3 >>= 5;
0x0007cdec mov r5, r3 | r5 = r3;
| do {
0x0007cdee cmp.w sb, 0xb0 |
0x0007cdf2 ite eq |
| if (sb != 0xb0) {
0x0007cdf4 ldrbeq r3, [r7, 2] | r3 = *((r7 + 2));
| }
| if (sb == 0xb0) {
0x0007cdf6 movne r3, sb | r3 = sb;
| }
0x0007cdf8 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0007cdfa beq.w 0x7d0fa | goto label_58;
| }
0x0007cdfe cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x0007ce00 beq.w 0x7d036 | goto label_59;
| }
0x0007ce02 strh r1, [r3, 8] | *((r3 + 8)) = r1;
| label_15:
0x0007ce04 mov r0, r7 | r0 = r7;
| label_21:
0x0007ce06 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0007ce08 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0007ce0c cmp r3, 0 |
| if (r3 < 0) {
0x0007ce0e blt.w 0x7d068 | goto label_60;
| }
| label_16:
0x0007ce12 ldrsh.w ip, [sl, 0x22] | ip = *((sl + 0x22));
0x0007ce16 cmp r3, ip |
| if (r3 >= ip) {
0x0007ce18 bge.w 0x7d068 | goto label_60;
| }
0x0007ce1c add.w ip, r3, r3, lsl 1 |
0x0007ce20 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0007ce24 add.w r3, r3, ip, lsl 2 | r3 += (ip << 2);
0x0007ce28 ldrb.w fp, [r3, 5] | fp = *((r3 + 5));
0x0007ce2c bl 0x25460 | r0 = fcn_00025460 (r0);
0x0007ce30 cmp r0, 0x40 |
0x0007ce32 it hi |
| if (r0 > 0x40) {
0x0007ce34 cmphi fp, 0x40 | __asm ("cmphi fp, 0x40");
| }
0x0007ce38 ite hi |
| if (r0 <= 0x40) {
0x0007ce3a movhi ip, 1 |
| }
| if (r0 <= 0x40) {
0x0007ce3e mov.w ip, 0 |
| }
| if (r0 < 0x40) {
0x0007ce42 bls.w 0x7d0d4 | goto label_61;
| }
0x0007ce46 cmp.w fp, 0x42 |
0x0007ce4a ite ls |
| if (fp > 0x42) {
0x0007ce4c movls r3, 0 | r3 = 0;
| }
| if (fp <= 0x42) {
0x0007ce4e movhi r3, 1 | r3 = 1;
| }
0x0007ce50 cmp r0, 0x42 |
0x0007ce52 ite ls |
| if (r0 > 0x42) {
0x0007ce54 movls r2, r3 | r2 = r3;
| }
| if (r0 <= 0x42) {
0x0007ce56 orrhi r2, r3, 1 | r2 = r3 | 1;
| }
0x0007ce5a cmp r2, 0 |
| if (r2 != 0) {
0x0007ce5c bne.w 0x7d078 | goto label_62;
| }
0x0007ce60 movs r3, 1 | r3 = 1;
| label_17:
0x0007ce62 adds r4, 1 | r4++;
0x0007ce64 adds r6, 0x10 | r6 += 0x10;
0x0007ce66 cmp r4, r8 |
0x0007ce68 ite ge |
| if (r4 < r8) {
0x0007ce6a movge r0, 0 | r0 = 0;
| }
| if (r4 >= r8) {
0x0007ce6c andlt r0, ip, 1 | r0 = ip & 1;
| }
0x0007ce70 cmp r0, 0 |
0x0007ce72 bne 0x7cdee |
| } while (r0 != 0);
0x0007ce74 mov r7, sl | r7 = sl;
0x0007ce76 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0007ce78 ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
0x0007ce7c cmp r3, 0 |
| if (r3 == 0) {
0x0007ce7e beq.w 0x7cc16 | goto label_4;
| }
| label_57:
0x0007ce82 ldr r7, [r7, 8] | r7 = *((r7 + 8));
0x0007ce84 cmp r7, 0 |
| if (r7 == 0) {
0x0007ce86 beq.w 0x7cc16 | goto label_4;
| }
0x0007ce8a movs r3, 1 | r3 = 1;
0x0007ce8c sub.w r2, r8, 0x20 | r2 = r8 - 0x20;
0x0007ce90 rsb.w r1, r8, 0x20 | r1 = 0x20 - r8;
0x0007ce94 lsl.w r2, r3, r2 | r2 = r3 << r2;
0x0007ce98 lsr.w r1, r3, r1 | r1 = r3 >> r1;
0x0007ce9c lsl.w r3, r3, r8 | r3 <<= r8;
0x0007cea0 ldr r4, [pc, 0x358] |
0x0007cea2 subs r3, 1 | r3--;
0x0007cea4 orr.w r2, r2, r1 | r2 |= r1;
0x0007cea8 str r3, [sp, 0x34] | var_34h = r3;
0x0007ceaa adc r3, r2, -1 | __asm ("adc r3, r2, -1");
0x0007ceae str r3, [sp, 0x38] | var_38h = r3;
0x0007ceb0 add r4, pc | r4 = 0xfa0b0;
0x0007ceb2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007ceb4 strd sl, fp, [sp, 0x24] | __asm ("strd sl, fp, [var_0hx24]");
0x0007ceb8 str r5, [sp, 0x3c] | var_3ch = r5;
0x0007ceba and r3, r3, 4 | r3 &= 4;
0x0007cebc lsls r4, r0, 0xc | r4 = r0 << 0xc;
0x0007cebe mov fp, r3 |
0x0007cec0 b 0x7ceca | goto label_63;
| label_13:
0x0007cec2 ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x0007cec4 cmp r7, 0 |
| if (r7 == 0) {
0x0007cec6 beq.w 0x7cc12 | goto label_12;
| }
| label_63:
0x0007ceca ldrh r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x0007cecc cmp r2, r8 |
| if (r2 < r8) {
0x0007cece blt 0x7cec2 | goto label_13;
| }
0x0007ced0 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0007ced2 cmp r2, 0x3e |
0x0007ced4 it ls |
| if (r2 > 0x3e) {
0x0007ced6 cmpls r3, 0 | __asm ("cmpls r3, 0");
| goto label_64;
| }
| if (r2 != 0x3e) {
| label_64:
0x0007ced8 bne 0x7cec2 | goto label_13;
| }
0x0007ceda cmp.w fp, 0 |
| if (fp == 0) {
0x0007cede beq 0x7cef2 | goto label_65;
| }
0x0007cee0 ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x0007cee2 cmp r3, r8 |
| if (r3 > r8) {
0x0007cee4 bgt 0x7cec2 | goto label_13;
| }
0x0007cee6 cmp r2, r8 |
| if (r2 <= r8) {
0x0007cee8 ble 0x7cef2 | goto label_65;
| }
0x0007ceea ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
0x0007ceee cmp r3, 0 |
| if (r3 == 0) {
0x0007cef0 beq 0x7cec2 | goto label_13;
| }
| label_65:
0x0007cef2 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0007cef6 ble 0x7cf88 | goto label_66;
| }
0x0007cef8 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0007cefc movs r6, 0 | r6 = 0;
0x0007cefe mov sb, r6 | sb = r6;
0x0007cf00 mov r5, r6 | r5 = r6;
0x0007cf02 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
| label_20:
0x0007cf06 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007cf08 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0007cf0a ldrb r3, [r1] | r3 = *(r1);
0x0007cf0c cmp r3, 0xb0 |
0x0007cf0e ite eq |
| if (r3 != 0xb0) {
0x0007cf10 ldrbeq r2, [r1, 2] | r2 = *((r1 + 2));
| }
| if (r3 == 0xb0) {
0x0007cf12 movne r2, r3 | r2 = r3;
| }
0x0007cf14 cmp r2, 0xb1 |
| if (r2 == 0xb1) {
0x0007cf16 beq.w 0x7d12a | goto label_67;
| }
0x0007cf1a cmp r2, 0x8a |
| if (r2 == 0x8a) {
0x0007cf1c beq.w 0x7d100 | goto label_68;
| }
| label_24:
0x0007cf20 ldr.w fp, [sl, 8] | fp = *((sl + 8));
0x0007cf24 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0007cf26 mov r2, fp | r2 = fp;
0x0007cf28 bl 0x46074 | fcn_00046074 (r0, r1, r2);
0x0007cf2c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0007cf2e movs r1, 0 | r1 = 0;
0x0007cf30 ldrsh.w lr, [fp, 0x20] |
0x0007cf34 str r5, [sp, 0x14] | var_14h = r5;
0x0007cf36 sub.w ip, r3, 2 |
| label_14:
0x0007cf3a ldrsh r3, [ip, 2]! | r3 = *((ip += 2));
0x0007cf3e cmp r3, lr |
| if (r3 != lr) {
0x0007cf40 bne 0x7cf74 | goto label_69;
| }
0x0007cf42 cmp r0, 0 |
| if (r0 == 0) {
0x0007cf44 beq.w 0x7d082 | goto label_70;
| }
0x0007cf48 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0007cf4a ldr.w r5, [r3, r1, lsl 2] | offset_0 = r1 << 2;
| r5 = *((r3 + offset_0));
0x0007cf4e ldr r3, [r0] | r3 = *(r0);
0x0007cf50 subs r5, 1 | r5--;
0x0007cf52 add.w fp, r3, -1 |
0x0007cf54 subs r3, 0xff | r3 -= 0xff;
| do {
| label_18:
0x0007cf56 ldrb r3, [fp, 1]! | r3 = *(arg_1h);
0x0007cf5a ldrb r2, [r5, 1]! | r2 = *((r5 += 1));
0x0007cf5e cmp r3, r2 |
| if (r3 == r2) {
0x0007cf60 beq.w 0x7d07c | goto label_71;
| }
0x0007cf64 add r3, r4 | r3 += r4;
0x0007cf66 add r2, r4 | r2 += r4;
0x0007cf68 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0007cf6c ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x0007cf70 cmp r3, r2 |
0x0007cf72 beq 0x7cf56 |
| } while (r3 == r2);
| label_69:
0x0007cf74 adds r1, 1 | r1++;
0x0007cf76 cmp r1, r8 |
| if (r1 != r8) {
0x0007cf78 bne 0x7cf3a | goto label_14;
| }
| label_19:
0x0007cf7a ldrd fp, r3, [sp, 0x30] | __asm ("ldrd fp, r3, [var_34h]");
0x0007cf7e ldr r2, [sp, 0x38] | r2 = var_38h;
0x0007cf80 cmp r2, sb |
0x0007cf82 it eq |
| if (r2 != sb) {
0x0007cf84 cmpeq r3, r6 | __asm ("cmpeq r3, r6");
| goto label_72;
| }
| if (r2 != sb) {
| label_72:
0x0007cf86 bne 0x7cec2 | goto label_13;
| }
| label_66:
0x0007cf88 ldr.w sb, [sp, 0x20] | sb = var_20h;
0x0007cf8c movs r6, 0 | r6 = 0;
0x0007cf8e mov r3, r6 | r3 = r6;
0x0007cf90 mov r2, r6 | r2 = r6;
0x0007cf92 movs r1, 0xe | r1 = 0xe;
0x0007cf94 str r6, [sp] | *(sp) = r6;
0x0007cf96 mov r0, sb | r0 = sb;
0x0007cf98 ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x0007cf9a ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
0x0007cf9e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007cfa2 ldr r2, [pc, 0x25c] |
0x0007cfa4 mov r1, r6 | r1 = r6;
0x0007cfa6 ldr r3, [r7] | r3 = *(r7);
0x0007cfa8 mov r4, r0 | r4 = r0;
0x0007cfaa mov r0, sl | r0 = sl;
0x0007cfac add r2, pc | r2 = 0xfa1b2;
0x0007cfae bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0007cfb2 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0007cfb4 movs r1, 0x70 | r1 = 0x70;
0x0007cfb6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0007cfb8 mov r0, sb | r0 = sb;
0x0007cfba str r5, [sp] | *(sp) = r5;
0x0007cfbc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007cfc0 mov r1, r7 | r1 = r7;
0x0007cfc2 mov r0, sl | r0 = sl;
0x0007cfc4 bl 0x45f30 | fcn_00045f30 (r0);
0x0007cfc6 vtbl.8 d4, {d20, d21}, d14 | __asm ("vtbl.8 d4, {d20, d21}, d14");
0x0007cfca mov r0, sb | r0 = sb;
0x0007cfcc ldr r2, [r7] | r2 = *(r7);
0x0007cfce add r1, pc | r1 += pc;
0x0007cfd0 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0007cfd4 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0007cfd6 ldrb r5, [r3] | r5 = *(r3);
0x0007cfd8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007cfda adds r5, 3 | r5 += 3;
| if (r3 != 0) {
0x0007cfdc cbz r3, 0x7cff6 |
0x0007cfde ldr.w r2, [sl, 0x2c] | r2 = *((sl + 0x2c));
0x0007cfe2 cmp.w r8, 1 |
0x0007cfe6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007cfe8 add.w r2, r2, 1 | r2++;
0x0007cfec str.w r2, [sl, 0x2c] | __asm ("str.w r2, [sl, 0x2c]");
0x0007cff0 str r2, [r3] | *(r3) = r2;
| if (r8 == 1) {
0x0007cff2 beq.w 0x7d1ca | goto label_73;
| }
| }
| label_32:
0x0007cff6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0007cff8 cmp r4, 0 |
0x0007cffa ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007cffc ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x0007cffe ldr r3, [r1] | r3 = *(r1);
0x0007d000 it lt |
| if (r4 >= 0) {
0x0007d002 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0007d006 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007d00a cmp r3, 0 |
| if (r3 != 0) {
0x0007d00c bne.w 0x7d1c2 | goto label_74;
| }
0x0007d010 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0007d012 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0007d016 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x0007d018 lsls r4, r0, 0xf | r4 = r0 << 0xf;
| label_31:
0x0007d01a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0007d01c ldr r3, [sp, 8] | r3 = var_8h;
0x0007d01e cmp r3, 0 |
0x0007d020 it ne |
| if (r3 == 0) {
0x0007d022 cmpne r5, 3 | __asm ("cmpne r5, 3");
| goto label_75;
| }
| if (r3 == 0) {
| label_75:
0x0007d024 beq.w 0x7cbce | goto label_2;
| }
0x0007d028 cmp r5, 4 |
0x0007d02a it ne |
| if (r5 == 4) {
0x0007d02c ldrne r4, [fp, 0xc] | r4 = *(arg_ch);
| }
0x0007d02e ands r4, r1 | r4 &= r1;
| if (r4 == r1) {
0x0007d030 beq.w 0x7cbce | goto label_2;
| }
0x0007d034 b 0x7cba6 | goto label_10;
| label_59:
0x0007d036 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0007d038 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0007d03a ldr r3, [r3] | r3 = *(r3);
| label_23:
0x0007d03c cmp r3, 1 |
| if (r3 <= 1) {
0x0007d03e ble.w 0x7ce04 | goto label_15;
| }
0x0007d042 ldrb r3, [r7, 2] | r3 = *((r7 + 2));
0x0007d044 cmp r3, 0x8a |
0x0007d046 ite ne |
| if (r3 == 0x8a) {
0x0007d048 movne r0, r5 | r0 = r5;
| }
| if (r3 != 0x8a) {
0x0007d04a orreq r0, r5, 1 | r0 = r5 | 1;
| }
0x0007d04e ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0007d050 cmp r0, 0 |
| if (r0 == 0) {
0x0007d052 beq 0x7d0cc | goto label_76;
| }
0x0007d054 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0007d056 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x0007d05a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0007d05c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0007d05e ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0007d062 cmp r3, 0 |
| if (r3 >= 0) {
0x0007d064 bge.w 0x7ce12 | goto label_16;
| }
| label_60:
0x0007d068 bl 0x25460 | r0 = fcn_00025460 (r0);
0x0007d06c cmp r0, 0x40 |
0x0007d06e it ls |
| if (r0 > 0x40) {
0x0007d070 movls fp, 0x44 |
| }
| if (r0 < 0x40) {
0x0007d074 bls 0x7d0e8 | goto label_77;
| }
| label_22:
0x0007d076 movs r3, 1 | r3 = 1;
| label_62:
0x0007d078 mov ip, r3 |
0x0007d07a b 0x7ce62 | goto label_17;
| label_71:
0x0007d07c cmp r3, 0 |
| if (r3 != 0) {
0x0007d07e bne.w 0x7cf56 | goto label_18;
| }
| label_70:
0x0007d082 cmp r8, r1 |
0x0007d084 ldr r5, [sp, 0x14] | r5 = var_14h;
| if (r8 == r1) {
0x0007d086 beq.w 0x7cf7a | goto label_19;
| }
0x0007d088 add r7, sp, 0x1e0 | r7 = sp + 0x1e0;
0x0007d08a movs r0, 1 | r0 = 1;
0x0007d08c sub.w r2, r1, 0x20 | r2 = r1 - 0x20;
0x0007d090 rsb.w r3, r1, 0x20 | r3 = 0x20 - r1;
0x0007d094 lsl.w r2, r0, r2 | r2 = r0 << r2;
0x0007d098 lsr.w r3, r0, r3 | r3 = r0 >> r3;
0x0007d09c lsls r0, r1 | r0 <<= r1;
0x0007d09e orrs r2, r3 | r2 |= r3;
0x0007d0a0 and.w r3, r0, r6 | r3 = r0 & r6;
0x0007d0a4 and.w ip, r2, sb |
0x0007d0a8 orrs.w r3, r3, ip | r3 |= ip;
| if (r3 != r3) {
0x0007d0ac bne.w 0x7cf7a | goto label_19;
| }
0x0007d0b0 ldr r3, [sp, 8] | r3 = var_8h;
0x0007d0b2 orrs r6, r0 | r6 |= r0;
0x0007d0b4 orr.w sb, r2, sb | sb = r2 | sb;
| if (r3 != 0) {
0x0007d0b8 cbz r3, 0x7d0be |
0x0007d0ba str.w r1, [r3, r5, lsl 2] | __asm ("str.w r1, [r3, r5, lsl 2]");
| }
0x0007d0be adds r5, 1 | r5++;
0x0007d0c0 add.w sl, sl, 0x10 | sl += 0x10;
0x0007d0c4 cmp r5, r8 |
| if (r5 != r8) {
0x0007d0c6 bne.w 0x7cf06 | goto label_20;
| }
0x0007d0ca b 0x7cf7a | goto label_19;
| label_76:
0x0007d0cc add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x0007d0d0 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0007d0d2 b 0x7ce06 | goto label_21;
| label_61:
0x0007d0d4 cmp r0, 0x40 |
0x0007d0d6 itet hi |
| if (r0 <= 0x40) {
0x0007d0d8 orrhi r0, r0, 0x40 | r0 |= 0x40;
| }
| if (r0 <= 0x40) {
0x0007d0dc orrhi r0, fp, 0x40 | r0 = fp | 0x40;
| }
| if (r0 > 0x40) {
0x0007d0e0 uxtb r0, r0 | r0 = (int8_t) r0;
| }
0x0007d0e2 subs r0, 0x41 | r0 -= 0x41;
0x0007d0e4 cmp r0, 1 |
| if (r0 < 1) {
0x0007d0e6 bls 0x7d076 | goto label_22;
| }
| label_77:
0x0007d0e8 cmp.w fp, 0x42 |
0x0007d0ec ite ls |
| if (fp > 0x42) {
0x0007d0ee movls ip, 0 |
| }
| if (fp > 0x42) {
0x0007d0f2 mov.w ip, 1 |
| }
0x0007d0f6 mov r3, ip | r3 = ip;
0x0007d0f8 b 0x7ce62 | goto label_17;
| label_58:
0x0007d0fa ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0007d0fc ldr r3, [r3] | r3 = *(r3);
0x0007d0fe b 0x7d03c | goto label_23;
| label_68:
0x0007d100 ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0007d102 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0007d104 ldr r2, [r2] | r2 = *(r2);
| label_25:
0x0007d106 cmp r2, 1 |
| if (r2 <= 1) {
0x0007d108 ble.w 0x7cf20 | goto label_24;
| }
0x0007d10c ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x0007d10e ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0007d110 cmp r3, 0x8a |
0x0007d112 it ne |
| if (r3 != 0x8a) {
0x0007d114 cmpne r0, 0x8a | __asm ("cmpne r0, 0x8a");
| }
0x0007d116 iteet eq |
| if (r3 != 0x8a) {
0x0007d118 ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 == 0x8a) {
0x0007d11a addne r2, r2, r5, lsl 4 | r2 += (r5 << 4);
| }
| if (r3 != 0x8a) {
0x0007d11e ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
| if (r3 == 0x8a) {
0x0007d120 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
| }
0x0007d124 it eq |
| if (r3 != 0x8a) {
0x0007d126 ldreq r1, [r3, 8] | r1 = *((r3 + 8));
| }
0x0007d128 b 0x7cf20 | goto label_24;
| label_67:
0x0007d12a ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x0007d12c ldr r2, [r2] | r2 = *(r2);
0x0007d12e b 0x7d106 | goto label_25;
| label_54:
0x0007d130 cmp r5, 1 |
0x0007d132 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x0007d134 ldr r1, [r7] | r1 = *(r7);
| if (r5 == 1) {
0x0007d136 beq.w 0x7cdb8 | goto label_26;
| }
0x0007d13a b 0x7cda0 | goto label_27;
| label_56:
0x0007d13c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007d13e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0007d140 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0007d144 cmp r3, 0 |
| if (r3 >= 0) {
0x0007d146 bge.w 0x7cdc6 | goto label_28;
| }
0x0007d14a ldr r6, [sp, 0x20] | r6 = var_20h;
0x0007d14c movs r4, 0 | r4 = 0;
0x0007d14e mov r3, r4 | r3 = r4;
0x0007d150 mov r2, r4 | r2 = r4;
0x0007d152 movs r1, 0xe | r1 = 0xe;
0x0007d154 str r4, [sp] | *(sp) = r4;
0x0007d156 mov r0, r6 | r0 = r6;
0x0007d158 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_33:
0x0007d15c movs r3, 0x70 | r3 = 0x70;
0x0007d15e mov r2, r5 | r2 = r5;
0x0007d160 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0007d162 mov r5, r0 | r5 = r0;
0x0007d164 str r3, [sp] | *(sp) = r3;
0x0007d166 mov r0, sl | r0 = sl;
0x0007d168 mov r3, r7 | r3 = r7;
0x0007d16a invalid |
| label_34:
0x0007d16c invalid |
0x0007d170 mov r1, r4 | r1 = r4;
0x0007d172 ldr r3, [r7] | r3 = *(r7);
0x0007d174 mov r0, sl | r0 = sl;
0x0007d176 add r2, pc | r2 += pc;
0x0007d178 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0007d17c ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007d17e cmp r5, r4 |
0x0007d180 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0007d182 ldr r3, [r1] | r3 = *(r1);
0x0007d184 it lt |
| if (r5 >= r4) {
0x0007d186 addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x0007d18a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0007d18e cbnz r3, 0x7d1ba | goto label_78;
| }
0x0007d190 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0007d192 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0007d196 add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_30:
0x0007d19a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0007d19c movs r5, 1 | r5 = 1;
0x0007d19e ldr r3, [sp, 8] | r3 = var_8h;
0x0007d1a0 cmp r3, 0 |
| if (r3 == 0) {
0x0007d1a2 beq.w 0x7cbce | goto label_2;
| }
0x0007d1a6 ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x0007d1aa movs r5, 1 | r5 = 1;
0x0007d1ac b 0x7cba6 | goto label_10;
| label_53:
0x0007d1ae movs r3, 1 | r3 = 1;
0x0007d1b0 movs r5, 0 | r5 = 0;
0x0007d1b2 b 0x7cd7e | goto label_29;
| label_55:
0x0007d1b4 bl 0x7c594 | fcn_0007c594 (r0);
0x0007d1b8 b 0x7cdb8 | goto label_26;
| label_78:
0x0007d1ba ldr r3, [pc, 0x50] |
0x0007d1bc add r3, pc | r3 = 0xfa3ce;
0x0007d1be adds r3, 4 | r3 += 4;
0x0007d1c0 b 0x7d19a | goto label_30;
| label_74:
0x0007d1c2 ldr r3, [pc, 0x4c] |
0x0007d1c4 add r3, pc | r3 = 0xfa3da;
0x0007d1c6 adds r3, 4 | r3 += 4;
0x0007d1c8 b 0x7d01a | goto label_31;
| label_73:
0x0007d1ca ldr r1, [sp, 0xc] | r1 = var_ch;
0x0007d1cc ldr r0, [sp, 0x20] | r0 = var_20h;
0x0007d1ce bl 0x4f598 | fcn_0004f598 (r0, r1, r2);
0x0007d1d2 b 0x7cff6 | goto label_32;
| label_52:
0x0007d1d4 mov.w r2, 0x8000 | r2 = 0x8000;
0x0007d1d8 movs r3, 1 | r3 = 1;
0x0007d1da movt r2, 0xffff | r2 = (r2 & 0xFFFF) | 0xffff0000;
0x0007d1de lsls r3, r2 | r3 <<= r2;
0x0007d1e0 mov r5, r2 | r5 = r2;
0x0007d1e2 b 0x7cd7e | goto label_29;
| label_46:
0x0007d1e4 blx 0x6430 | fcn_00006430 ();
| if (r3 >= r2) {
0x0007d1e8 bhs 0x7d15c | goto label_33;
| }
0x0007d1ea movs r6, r0 | r6 = r0;
0x0007d1ec lsls r4, r6, 8 | r4 = r6 << 8;
0x0007d1ee movs r0, r0 |
| if (r0 != r0) {
0x0007d1f0 bne 0x7d16c | goto label_34;
| }
0x0007d1f2 movs r6, r0 | r6 = r0;
0x0007d1f4 strh r5, [r5, 0x12] | *((r5 + 0x12)) = r5;
0x0007d1f6 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7d214 */
| #include <stdint.h>
|
; (fcn) fcn.0007d214 () | void fcn_0007d214 (int16_t arg_2h, int16_t arg_14h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_4;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_3;
| int16_t var_20h_3;
| int16_t var_24h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_0h_3;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_1ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007d214 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007d218 sub sp, 0x5c |
0x0007d21a strd r2, r3, [sp, 0x1c] | __asm ("strd r2, r3, [var_1ch_3]");
0x0007d21e mov r4, r0 | r4 = r0;
0x0007d220 mov r6, r1 | r6 = r1;
0x0007d222 ldr.w r2, [pc, 0x720] |
0x0007d226 ldr.w r3, [pc, 0x720] | r3 = *(0x7d94a);
0x0007d22a ldrb.w r8, [r0, 0x17] | r8 = *((r0 + 0x17));
0x0007d22e add r2, pc | r2 = 0xfab78;
0x0007d230 ldr.w fp, [r1, 0xc] | fp = *((r1 + 0xc));
0x0007d234 ldr r3, [r2, r3] |
0x0007d236 ldr r3, [r3] | r3 = *(0xfab78);
0x0007d238 str r3, [sp, 0x54] | var_1ch_2 = r3;
0x0007d23a mov.w r3, 0 | r3 = 0;
0x0007d23e movs r3, 0 | r3 = 0;
0x0007d240 str r3, [sp, 0x44] | var_44h = r3;
0x0007d242 str r3, [sp, 0x4c] | var_4ch = r3;
0x0007d244 bl 0x4a0cc | r0 = fcn_0004a0cc (r0, r1);
0x0007d248 cbz r0, 0x7d26a |
| while (r3 == 0) {
0x0007d24a ldr.w r2, [pc, 0x700] |
0x0007d24e ldr.w r3, [pc, 0x6f8] | r3 = *(0x7d94a);
0x0007d252 add r2, pc | r2 = 0xfaba4;
0x0007d254 ldr r3, [r2, r3] | r3 = *(0xfaba4);
0x0007d256 ldr r2, [r3] | r2 = *(0xfaba4);
0x0007d258 ldr r3, [sp, 0x54] | r3 = var_1ch_2;
0x0007d25a eors r2, r3 | r2 ^= r3;
0x0007d25c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007d260 bne.w 0x7d93e | goto label_31;
| }
0x0007d264 add sp, 0x5c |
0x0007d266 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0007d26a mov r5, r0 | r5 = r0;
0x0007d26c mov r1, r6 | r1 = r6;
0x0007d26e ldr r0, [r4] | r0 = *(r4);
0x0007d270 bl 0x39628 | fcn_00039628 (r0, r1);
0x0007d274 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0007d276 str r0, [sp, 0x24] | var_24h_2 = r0;
0x0007d278 ldrb r3, [r2] | r3 = *(r2);
0x0007d27a cmp r3, 0xb0 |
0x0007d27c it eq |
| if (r3 != 0xb0) {
0x0007d27e ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x0007d280 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0007d282 beq.w 0x7d606 | goto label_32;
| }
0x0007d286 cmp r3, 0x8a |
0x0007d288 ittt ne |
| if (r3 == 0x8a) {
0x0007d28a movne r2, 6 | r2 = 6;
| }
| if (r3 == 0x8a) {
0x0007d28c movne r7, 1 | r7 = 1;
| }
| if (r3 == 0x8a) {
0x0007d28e movne sb, r2 | sb = r2;
| }
| if (r3 == 0x8a) {
0x0007d290 bne 0x7d2a2 |
0x0007d292 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0007d294 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0007d296 ldr r7, [r3] | r7 = *(r3);
0x0007d298 add.w sb, r7, r7, lsl 2 | sb = r7 + (r7 << 2);
0x0007d29c add.w sb, sb, 1 | sb++;
0x0007d2a0 mov r2, sb | r2 = sb;
| }
| label_12:
0x0007d2a2 ldr r1, [r4] | r1 = *(r4);
0x0007d2a4 cmp r1, 0 |
| if (r1 == 0) {
0x0007d2a6 beq.w 0x7d422 | goto label_33;
| }
0x0007d2aa mov r0, r1 | r0 = r1;
0x0007d2ac movs r3, 0 | r3 = 0;
0x0007d2ae bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0007d2b2 str r0, [sp, 0x18] | var_18h = r0;
| label_2:
0x0007d2b4 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x0007d2b6 cbz r3, 0x7d2fe | goto label_34;
| }
0x0007d2b8 mov r0, r3 | r0 = r3;
0x0007d2ba mov r2, sb | r2 = sb;
0x0007d2bc movs r1, 0 | r1 = 0;
0x0007d2be blx 0x62ec | fcn_000062ec ();
0x0007d2c2 ldr r0, [r4] | r0 = *(r4);
0x0007d2c4 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
| if (r3 == 0) {
0x0007d2c8 cbz r3, 0x7d308 | goto label_35;
| }
| label_5:
0x0007d2ca ldr r1, [sp, 0x18] | r1 = var_18h;
0x0007d2cc bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0007d2d0 ldr r0, [r4] | r0 = *(r4);
| label_0:
0x0007d2d2 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0007d2d4 cmp r3, 0 |
0x0007d2d6 beq 0x7d24a |
| }
0x0007d2d8 ldr.w r2, [pc, 0x674] |
0x0007d2dc ldr.w r3, [pc, 0x668] | r3 = *(0x7d948);
0x0007d2e0 add r2, pc | r2 = 0xfac34;
0x0007d2e2 ldr r3, [r2, r3] | r3 = *(0xfac34);
0x0007d2e4 ldr r2, [r3] | r2 = *(0xfac34);
0x0007d2e6 ldr r3, [sp, 0x54] | r3 = var_1ch_2;
0x0007d2e8 eors r2, r3 | r2 ^= r3;
0x0007d2ea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007d2ee bne.w 0x7d93e | goto label_31;
| }
0x0007d2f2 ldr r1, [sp, 0x24] | r1 = var_24h_2;
0x0007d2f4 add sp, 0x5c |
0x0007d2f6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007d2fa b.w 0x2d144 | void (*0x2d144)() ();
| label_34:
0x0007d2fe ldr r0, [r4] | r0 = *(r4);
0x0007d300 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0007d304 cmp r3, 0 |
| if (r3 != 0) {
0x0007d306 bne 0x7d2d2 | goto label_0;
| }
| label_35:
0x0007d308 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0007d30c ldr.w r1, [pc, 0x644] |
0x0007d310 mov r0, sl | r0 = sl;
0x0007d312 add r1, pc | r1 = 0xfac6a;
0x0007d314 bl 0x4a160 | fcn_0004a160 (r0);
0x0007d318 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d31c cmp r3, r2 |
0x0007d31e it eq |
| if (r3 != r2) {
0x0007d320 moveq r3, 0 | r3 = 0;
| }
| if (r3 != r2) {
0x0007d322 beq 0x7d326 |
0x0007d324 add r3, sp, 0x44 | r3 += var_44h;
| }
0x0007d326 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0007d328 mov r1, r6 | r1 = r6;
0x0007d32a mov.w sb, 0 | sb = 0;
0x0007d32e mov r0, r4 | r0 = r4;
0x0007d330 str r2, [sp] | *(sp) = r2;
0x0007d332 add r2, sp, 0x4c | r2 += var_4ch;
0x0007d334 str r2, [sp, 4] | var_4h = r2;
0x0007d336 movs r2, 3 | r2 = 3;
0x0007d338 bl 0x7cac8 | fcn_0007cac8 (r0, r1, r2, r3, r4, r5, r6);
0x0007d33c add r2, sp, 0x48 | r2 += var_48h;
0x0007d33e str r0, [sp, 0x30] | var_30h = r0;
0x0007d340 mov r1, fp | r1 = fp;
0x0007d342 mov r0, r4 | r0 = r4;
0x0007d344 strb.w sb, [r4, 0x17] | *((r4 + 0x17)) = sb;
0x0007d348 bl 0x85a48 | fcn_00085a48 (r0, r1, r2, r3, r4);
0x0007d34c cmp r7, sb |
0x0007d34e strb.w r8, [r4, 0x17] | *((r4 + 0x17)) = r8;
0x0007d352 str r0, [sp, 0x2c] | var_2ch = r0;
| if (r7 <= sb) {
0x0007d354 ble.w 0x7d884 | goto label_36;
| }
0x0007d358 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0007d35a mov r3, sb | r3 = sb;
0x0007d35c sub.w sb, r2, 4 | sb = r2 - 4;
0x0007d360 mov r2, sb | r2 = sb;
0x0007d362 b 0x7d36a |
| while (r1 == r3) {
0x0007d364 adds r3, 1 | r3++;
0x0007d366 cmp r3, r7 |
| if (r3 == r7) {
0x0007d368 beq 0x7d46a | goto label_37;
| }
0x0007d36a ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0007d36e cmp r1, r3 |
0x0007d370 beq 0x7d364 |
| }
0x0007d372 cmp r7, r3 |
| if (r7 == r3) {
0x0007d374 beq 0x7d46a | goto label_37;
| }
0x0007d376 mov r1, r7 | r1 = r7;
0x0007d378 mov r0, r4 | r0 = r4;
0x0007d37a bl 0x27744 | fcn_00027744 (r0, r1);
0x0007d37e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007d380 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x0007d384 str r5, [sp, 0x34] | var_34h = r5;
0x0007d386 mov r5, r0 | r5 = r0;
0x0007d388 mov r8, r3 | r8 = r3;
0x0007d38a adds r3, r7, r3 | r3 = r7 + r3;
0x0007d38c mov fp, r3 |
0x0007d38e str r0, [sp, 0x14] | var_14h = r0;
| do {
0x0007d390 ldr r3, [sb, 4]! | r3 = *((sb += 4));
0x0007d394 movs r2, 0 | r2 = 0;
0x0007d396 str r2, [sp] | *(sp) = r2;
0x0007d398 movs r1, 0x50 | r1 = 0x50;
0x0007d39a mov r2, r8 | r2 = r8;
0x0007d39c mov r0, sl | r0 = sl;
0x0007d39e add r3, r5 | r3 += r5;
0x0007d3a0 add.w r8, r8, 1 | r8++;
0x0007d3a4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d3a8 cmp fp, r8 |
0x0007d3aa bne 0x7d390 |
| } while (fp != r8);
0x0007d3ac ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0007d3b0 ldr r5, [sp, 0x34] | r5 = var_34h;
| label_7:
0x0007d3b2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007d3b4 cmp r3, 5 |
| if (r3 == 5) {
0x0007d3b6 beq.w 0x7d6e6 | goto label_38;
| }
0x0007d3ba ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d3be cmp r3, r2 |
0x0007d3c0 iteee ne |
| if (r3 == r2) {
0x0007d3c2 ldrne r3, [r4, 0x38] | r3 = *((r4 + 0x38));
| }
| if (r3 != r2) {
0x0007d3c4 moveq r3, 0 | r3 = 0;
| }
| if (r3 != r2) {
0x0007d3c6 ldreq sb, [sp, 0x1c] | sb = var_1ch_3;
| }
| if (r3 == r2) {
0x0007d3ca str r3, [sp, 0x34] | var_34h = r3;
| }
0x0007d3cc ittt ne |
| if (r3 == r2) {
0x0007d3ce addne sb, r3, -1 | sb = r3 + -1;
| }
| if (r3 == r2) {
0x0007d3d2 strne sb, [r4, 0x38] | *((r4 + 0x38)) = sb;
| }
| if (r3 != r2) {
0x0007d3d6 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
| }
0x0007d3da cmp r7, 0 |
0x0007d3dc itt gt |
| if (r7 <= 0) {
0x0007d3de movgt r8, 0 | r8 = 0;
| }
| if (r7 > 0) {
0x0007d3e2 str r5, [sp, 0x28] | var_28h = r5;
| }
| if (r7 > 0) {
0x0007d3e4 bgt 0x7d3f0 | goto label_39;
| }
0x0007d3e6 b 0x7d472 | goto label_28;
| do {
| label_1:
0x0007d3e8 add.w r8, r8, 1 | r8++;
0x0007d3ec cmp r8, r7 |
| if (r8 == r7) {
0x0007d3ee beq 0x7d470 | goto label_40;
| }
| label_39:
0x0007d3f0 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0007d3f2 ldrb r3, [r0] | r3 = *(r0);
0x0007d3f4 cmp r3, 0xb0 |
0x0007d3f6 ite eq |
| if (r3 != 0xb0) {
0x0007d3f8 ldrbeq r2, [r0, 2] | r2 = *((r0 + 2));
| }
| if (r3 == 0xb0) {
0x0007d3fa movne r2, r3 | r2 = r3;
| }
0x0007d3fc cmp r2, 0xb1 |
| if (r2 == 0xb1) {
0x0007d3fe beq 0x7d464 | goto label_41;
| }
0x0007d400 cmp r2, 0x8a |
| if (r2 == 0x8a) {
0x0007d402 beq 0x7d42c | goto label_42;
| }
| label_3:
0x0007d404 ldr r5, [r4, 0x24] | r5 = *((r4 + 0x24));
| if (r5 != 0) {
0x0007d406 cbnz r5, 0x7d458 | goto label_43;
| }
| label_4:
0x0007d408 bl 0x2329c | r0 = fcn_0002329c (r0);
0x0007d40c cmp r0, 0 |
0x0007d40e beq 0x7d3e8 |
| } while (r0 == 0);
0x0007d410 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007d412 mov r3, sb | r3 = sb;
0x0007d414 movs r1, 0x32 | r1 = 0x32;
0x0007d416 mov r0, sl | r0 = sl;
0x0007d418 str r5, [sp] | *(sp) = r5;
0x0007d41a add r2, r8 | r2 += r8;
0x0007d41c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d420 b 0x7d3e8 | goto label_1;
| label_33:
0x0007d422 mov r0, r2 | r0 = r2;
0x0007d424 bl 0x28c3c | fcn_00028c3c (r0);
0x0007d428 str r0, [sp, 0x18] | var_18h = r0;
0x0007d42a b 0x7d2b4 | goto label_2;
| label_42:
0x0007d42c ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0007d42e ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0007d430 ldr r2, [r2] | r2 = *(r2);
| label_6:
0x0007d432 cmp r2, 1 |
| if (r2 <= 1) {
0x0007d434 ble 0x7d404 | goto label_3;
| }
0x0007d436 ldrb r1, [r0, 2] | r1 = *((r0 + 2));
0x0007d438 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0007d43a ldr r5, [r4, 0x24] | r5 = *((r4 + 0x24));
0x0007d43c cmp r3, 0x8a |
0x0007d43e it ne |
| if (r3 != 0x8a) {
0x0007d440 cmpne r1, 0x8a | __asm ("cmpne r1, 0x8a");
| }
0x0007d442 iteet eq |
| if (r3 != 0x8a) {
0x0007d444 ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 == 0x8a) {
0x0007d446 addne r2, r2, r8, lsl 4 | r2 += (r8 << 4);
| }
| if (r3 != 0x8a) {
0x0007d44a ldreq r0, [r2, 8] | r0 = *((r2 + 8));
| }
| if (r3 == 0x8a) {
0x0007d44c add.w r3, r3, r8, lsl 4 | r3 += (r8 << 4);
| }
0x0007d450 it eq |
| if (r3 != 0x8a) {
0x0007d452 ldreq r0, [r3, 8] | r0 = *((r3 + 8));
| }
0x0007d454 cmp r5, 0 |
| if (r5 == 0) {
0x0007d456 beq 0x7d408 | goto label_4;
| }
| label_43:
0x0007d458 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007d45a ldr r0, [r4] | r0 = *(r4);
0x0007d45c cmp r3, 0 |
| if (r3 == 0) {
0x0007d45e beq.w 0x7d2d2 | goto label_0;
| }
0x0007d462 b 0x7d2ca | goto label_5;
| label_41:
0x0007d464 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0007d466 ldr r2, [r2] | r2 = *(r2);
0x0007d468 b 0x7d432 | goto label_6;
| label_37:
0x0007d46a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007d46c str r3, [sp, 0x14] | var_14h = r3;
0x0007d46e b 0x7d3b2 | goto label_7;
| label_40:
0x0007d470 ldr r5, [sp, 0x28] | r5 = var_28h;
| label_28:
0x0007d472 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0007d474 str r3, [sp, 0x28] | var_28h = r3;
0x0007d476 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007d478 cmp r3, 1 |
| if (r3 == 1) {
0x0007d47a beq.w 0x7d67a | goto label_44;
| }
| label_30:
0x0007d47e ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0007d480 movs r6, 0 | r6 = 0;
0x0007d482 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007d484 movs r1, 0x60 | r1 = 0x60;
0x0007d486 mov r0, sl | r0 = sl;
0x0007d488 str r7, [sp, 8] | var_8h = r7;
0x0007d48a str r3, [sp, 4] | var_4h = r3;
0x0007d48c mov r3, r7 | r3 = r7;
0x0007d48e str r6, [sp] | *(sp) = r6;
0x0007d490 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0007d494 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d498 cmp r3, r2 |
| if (r3 == r2) {
0x0007d49a beq.w 0x7d872 | goto label_45;
| }
0x0007d49e ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007d4a0 mov r3, r6 | r3 = r6;
0x0007d4a2 movs r1, 0x1c | r1 = 0x1c;
0x0007d4a4 mov r0, sl | r0 = sl;
0x0007d4a6 str r7, [sp, 4] | var_4h = r7;
0x0007d4a8 str r2, [sp] | *(sp) = r2;
0x0007d4aa ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d4ac bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0007d4ae stc2 p10, c9, [r6, -0x44] | __asm ("stc2 p10, c9, [r6, -0x44]");
0x0007d4b2 mov r8, r0 | r8 = r0;
0x0007d4b4 subs r3, r2, 0 | r3 = r2 - 0;
0x0007d4b6 it ne |
| if (r3 == r2) {
0x0007d4b8 movne r3, 1 | r3 = 1;
| }
0x0007d4ba cmp r7, 1 |
0x0007d4bc it ne |
| if (r7 == 1) {
0x0007d4be movne r3, 0 | r3 = 0;
| }
0x0007d4c0 cmp r3, 0 |
| if (r3 != 0) {
0x0007d4c2 bne.w 0x7d8b8 | goto label_46;
| }
| label_17:
0x0007d4c6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007d4c8 cmp r3, 0 |
| if (r3 != 0) {
0x0007d4ca bne.w 0x7d6c6 | goto label_47;
| }
| label_18:
0x0007d4ce movs r6, 0 | r6 = 0;
0x0007d4d0 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0007d4d2 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d4d4 movs r1, 0x23 | r1 = 0x23;
0x0007d4d6 mov r0, sl | r0 = sl;
0x0007d4d8 str r6, [sp] | *(sp) = r6;
0x0007d4da bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d4de cmp r7, 1 |
0x0007d4e0 str r0, [sp, 0x34] | var_34h = r0;
| if (r7 <= 1) {
0x0007d4e2 ble.w 0x7d670 | goto label_48;
| }
0x0007d4e6 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0007d4e8 add.w sb, r3, -1 | sb = r3 + -1;
0x0007d4ec str.w sb, [r4, 0x38] | __asm ("str.w sb, [r4, 0x38]");
| label_16:
0x0007d4f0 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x0007d4f4 mov r8, r7 | r8 = r7;
| do {
0x0007d4f6 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007d4f8 cmp r3, 0 |
| if (r3 == 0) {
0x0007d4fa beq 0x7d5f6 | goto label_49;
| }
0x0007d4fc subs r3, 1 | r3--;
0x0007d4fe uxtb r3, r3 | r3 = (int8_t) r3;
0x0007d500 strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0007d502 adds r3, 0x26 | r3 += 0x26;
0x0007d504 ldr.w r6, [r4, r3, lsl 2] | offset_0 = r3 << 2;
| r6 = *((r4 + offset_0));
| label_10:
0x0007d508 ldrb.w r3, [fp] | r3 = *(fp);
0x0007d50c cmp r3, 0xb0 |
0x0007d50e ite eq |
| if (r3 != 0xb0) {
0x0007d510 ldrbeq r2, [fp, 2] | r2 = *(arg_2h);
| }
| if (r3 != 0xb0) {
0x0007d514 mov r2, r3 | r2 = r3;
| }
0x0007d516 cmp r2, 0xb1 |
| if (r2 == 0xb1) {
0x0007d518 beq 0x7d5fe | goto label_50;
| }
0x0007d51a cmp r2, 0x8a |
| if (r2 == 0x8a) {
0x0007d51c beq 0x7d5c8 | goto label_51;
| }
| label_8:
0x0007d51e mov r1, fp | r1 = fp;
| label_9:
0x0007d520 mov r0, r4 | r0 = r4;
0x0007d522 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0007d526 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d528 mov r7, r0 | r7 = r0;
0x0007d52a mov r3, r5 | r3 = r5;
0x0007d52c movs r1, 0x5e | r1 = 0x5e;
0x0007d52e mov r0, sl | r0 = sl;
0x0007d530 str r6, [sp] | *(sp) = r6;
0x0007d532 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d536 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007d538 mvn r3, 1 | r3 = ~1;
0x0007d53c str r3, [sp, 8] | var_8h = r3;
0x0007d53e movs r1, 0x34 | r1 = 0x34;
0x0007d540 mov r3, sb | r3 = sb;
0x0007d542 mov r0, sl | r0 = sl;
0x0007d544 adds r2, r5, r2 | r2 = r5 + r2;
0x0007d546 str r7, [sp, 4] | var_4h = r7;
0x0007d548 str r6, [sp] | *(sp) = r6;
0x0007d54a bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
| if (r6 != 0) {
0x0007d54e cbz r6, 0x7d560 |
0x0007d550 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007d552 cmp r3, 7 |
0x0007d554 itttt ls |
| if (r3 > 7) {
0x0007d556 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0007d558 addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0007d55a strbls r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0007d55c strls r6, [r4, r3, lsl 2] | offset_1 = r3 << 2;
| *((r4 + offset_1)) = r6;
| goto label_52;
| }
| }
| label_52:
0x0007d560 adds r5, 1 | r5++;
0x0007d562 cmp r5, r8 |
0x0007d564 blt 0x7d4f6 |
| } while (r5 < r8);
0x0007d566 movs r2, 0 | r2 = 0;
0x0007d568 mov r7, r8 | r7 = r8;
0x0007d56a ldr r3, [sp, 0x20] | r3 = var_20h_3;
0x0007d56c movs r1, 8 | r1 = 8;
0x0007d56e mov r0, sl | r0 = sl;
0x0007d570 str r2, [sp] | *(sp) = r2;
0x0007d572 ldr.w r8, [sp, 0x30] | r8 = var_30h;
0x0007d576 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d57a cmp r7, 1 |
| if (r7 > 1) {
0x0007d57c bgt 0x7d61e | goto label_53;
| }
| label_14:
0x0007d57e ldr.w r3, [sl] | r3 = *(sl);
0x0007d582 cmp.w r8, 0 |
0x0007d586 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x0007d58a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007d58e it lt |
| if (r8 >= 0) {
0x0007d590 addlt r8, r2, -1 | r8 = r2 + -1;
| }
0x0007d594 cmp r3, 0 |
| if (r3 != 0) {
0x0007d596 bne 0x7d616 | goto label_54;
| }
0x0007d598 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x0007d59c add.w r1, r8, r8, lsl 1 | r1 = r8 + (r8 << 1);
0x0007d5a0 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
0x0007d5a2 lsls r1, r0, 0xf | r1 = r0 << 0xf;
| label_13:
0x0007d5a4 str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_21:
0x0007d5a6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007d5a8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0007d5aa cmp r3, r2 |
0x0007d5ac it ne |
| if (r3 != r2) {
0x0007d5ae cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != r2) {
0x0007d5b0 bne 0x7d65c | goto label_55;
| }
| label_15:
0x0007d5b2 ldr r1, [pc, 0x3a4] |
0x0007d5b4 mov r0, sl | r0 = sl;
0x0007d5b6 add r1, pc | r1 = 0xfaf14;
0x0007d5b8 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0007d5bc ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007d5be ldr r0, [r4] | r0 = *(r4);
0x0007d5c0 cmp r3, 0 |
| if (r3 == 0) {
0x0007d5c2 beq.w 0x7d2d2 | goto label_0;
| }
0x0007d5c6 b 0x7d2ca | goto label_5;
| label_51:
0x0007d5c8 ldr.w r2, [fp, 0x14] | r2 = *(arg_14h);
0x0007d5cc ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0007d5ce ldr r2, [r2] | r2 = *(r2);
| label_11:
0x0007d5d0 cmp r2, 1 |
| if (r2 <= 1) {
0x0007d5d2 ble 0x7d51e | goto label_8;
| }
0x0007d5d4 ldrb.w r1, [fp, 2] | r1 = *(arg_2h);
0x0007d5d8 ldr.w r2, [fp, 0x14] | r2 = *(arg_14h);
0x0007d5dc cmp r3, 0x8a |
0x0007d5de it ne |
| if (r3 != 0x8a) {
0x0007d5e0 cmpne r1, 0x8a | __asm ("cmpne r1, 0x8a");
| }
0x0007d5e2 iteet eq |
| if (r3 != 0x8a) {
0x0007d5e4 ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 == 0x8a) {
0x0007d5e6 addne r2, r2, r5, lsl 4 | r2 += (r5 << 4);
| }
| if (r3 != 0x8a) {
0x0007d5ea ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
| if (r3 == 0x8a) {
0x0007d5ec add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
| }
0x0007d5f0 it eq |
| if (r3 != 0x8a) {
0x0007d5f2 ldreq r1, [r3, 8] | r1 = *((r3 + 8));
| }
0x0007d5f4 b 0x7d520 | goto label_9;
| label_49:
0x0007d5f6 ldr r6, [r4, 0x2c] | r6 = *((r4 + 0x2c));
0x0007d5f8 adds r6, 1 | r6++;
0x0007d5fa str r6, [r4, 0x2c] | *((r4 + 0x2c)) = r6;
0x0007d5fc b 0x7d508 | goto label_10;
| label_50:
0x0007d5fe ldr.w r2, [fp, 0x14] | r2 = *(arg_14h);
0x0007d602 ldr r2, [r2] | r2 = *(r2);
0x0007d604 b 0x7d5d0 | goto label_11;
| label_32:
0x0007d606 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0007d608 ldr r7, [r3] | r7 = *(r3);
0x0007d60a add.w sb, r7, r7, lsl 2 | sb = r7 + (r7 << 2);
0x0007d60e add.w sb, sb, 1 | sb++;
0x0007d612 mov r2, sb | r2 = sb;
0x0007d614 b 0x7d2a2 | goto label_12;
| label_54:
0x0007d616 ldr r3, [pc, 0x344] |
0x0007d618 add r3, pc | r3 = 0xfaf7a;
0x0007d61a adds r3, 4 | r3 += 4;
0x0007d61c b 0x7d5a4 | goto label_13;
| label_53:
0x0007d61e ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x0007d622 mvn.w r2, sb | r2 = ~sb;
0x0007d626 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0007d62a cmn r1, r3 |
| if (r1 < r3) {
0x0007d62c bmi.w 0x7d8a2 | goto label_56;
| }
0x0007d630 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0007d632 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x0007d636 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_22:
0x0007d63a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007d63c movs r5, 0 | r5 = 0;
0x0007d63e ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d640 movs r1, 0x26 | r1 = 0x26;
0x0007d642 mov r0, sl | r0 = sl;
0x0007d644 str r5, [sp] | *(sp) = r5;
0x0007d646 adds r3, 1 | r3++;
0x0007d648 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d64c ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0007d64e mov r2, r5 | r2 = r5;
0x0007d650 movs r1, 8 | r1 = 8;
0x0007d652 mov r0, sl | r0 = sl;
0x0007d654 str r5, [sp] | *(sp) = r5;
0x0007d656 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d65a b 0x7d57e | goto label_14;
| label_55:
0x0007d65c ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007d65e cmp r3, 7 |
| if (r3 > 7) {
0x0007d660 bhi 0x7d5b2 | goto label_15;
| }
0x0007d662 adds r2, r3, 1 | r2 = r3 + 1;
0x0007d664 adds r3, 0x26 | r3 += 0x26;
0x0007d666 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x0007d668 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007d66a str.w r2, [r4, r3, lsl 2] | __asm ("str.w r2, [r4, r3, lsl 2]");
0x0007d66e b 0x7d5b2 | goto label_15;
| if (r3 != 0x26) {
| label_48:
0x0007d670 bne.w 0x7d892 | goto label_57;
| }
0x0007d674 ldr.w sb, [sp, 0x1c] | sb = var_1ch_3;
0x0007d678 b 0x7d4f0 | goto label_16;
| label_44:
0x0007d67a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007d67c movs r1, 0x1d | r1 = 0x1d;
0x0007d67e ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d680 mov r0, sl | r0 = sl;
0x0007d682 str r3, [sp] | *(sp) = r3;
0x0007d684 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0007d686 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d68a movs r3, 0 | r3 = 0;
0x0007d68c movs r1, 8 | r1 = 8;
0x0007d68e mov r2, r3 | r2 = r3;
0x0007d690 str r3, [sp] | *(sp) = r3;
0x0007d692 mov r0, sl | r0 = sl;
0x0007d694 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d698 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0007d69a sub.w r3, r7, 1 | r3 = r7 - 1;
0x0007d69e clz r3, r3 | r3 &= r3;
0x0007d6a2 mov r8, r0 | r8 = r0;
0x0007d6a4 lsrs r3, r3, 5 | r3 >>= 5;
0x0007d6a6 cmp r2, 0 |
0x0007d6a8 it eq |
| if (r2 != 0) {
0x0007d6aa moveq r3, 0 | r3 = 0;
| }
0x0007d6ac cmp r3, 0 |
| if (r3 != 0) {
0x0007d6ae bne.w 0x7d8b8 | goto label_46;
| }
| label_25:
0x0007d6b2 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d6b6 cmp r3, r2 |
| if (r3 != r2) {
0x0007d6b8 bne.w 0x7d4c6 | goto label_17;
| }
0x0007d6bc mov r1, r3 | r1 = r3;
0x0007d6be mov r0, sl | r0 = sl;
0x0007d6c0 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0007d6c4 b 0x7d4c6 | goto label_17;
| label_47:
0x0007d6c6 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x0007d6ca mvns r2, r3 | r2 = ~r3;
0x0007d6cc ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0007d6d0 cmn r1, r3 |
| if (r1 < r3) {
0x0007d6d2 bmi.w 0x7d8c8 | goto label_58;
| }
0x0007d6d6 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0007d6d8 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x0007d6dc str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x0007d6e0 b 0x7d4ce | goto label_18;
| label_27:
0x0007d6e2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007d6e4 str r3, [sp, 0x14] | var_14h = r3;
| label_38:
0x0007d6e6 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0007d6e8 mov r0, r4 | r0 = r4;
0x0007d6ea ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0007d6ec ldr r7, [r6, 0x14] | r7 = *((r6 + 0x14));
0x0007d6ee str r3, [sp, 0x3c] | var_3ch = r3;
0x0007d6f0 subs r3, 1 | r3--;
0x0007d6f2 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x0007d6f4 str r3, [sp, 0x34] | var_34h = r3;
0x0007d6f6 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0007d6fa ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d6fe mov fp, r0 |
0x0007d700 cmp r3, r2 |
| if (r3 == r2) {
0x0007d702 beq.w 0x7d8aa | goto label_59;
| }
0x0007d704 strh r2, [r2, 6] | *((r2 + 6)) = r2;
0x0007d706 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007d708 cmp r3, 0 |
| if (r3 == 0) {
0x0007d70a beq.w 0x7d8fa | goto label_60;
| }
0x0007d70e subs r3, 1 | r3--;
0x0007d710 uxtb r3, r3 | r3 = (int8_t) r3;
0x0007d712 strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0007d714 adds r3, 0x26 | r3 += 0x26;
0x0007d716 ldr.w r8, [r4, r3, lsl 2] | offset_2 = r3 << 2;
| r8 = *((r4 + offset_2));
| label_29:
0x0007d71a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007d71c movs r1, 0x66 | r1 = 0x66;
0x0007d71e mov r0, sl | r0 = sl;
0x0007d720 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0007d724 mov r2, r3 | r2 = r3;
0x0007d726 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d72a ldr r3, [r7] | r3 = *(r7);
0x0007d72c cmp r3, 0 |
| if (r3 <= 0) {
0x0007d72e ble 0x7d81e | goto label_61;
| }
| label_23:
0x0007d730 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d734 mov r6, r7 | r6 = r7;
0x0007d736 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x0007d73a ldr.w fp, [sp, 0x14] | fp = var_14h;
0x0007d73e subs.w sb, r3, r2 | sb = r3 - r2;
0x0007d742 add r3, sp, 0x50 | r3 += var_50h;
0x0007d744 it ne |
| if (sb == r3) {
0x0007d746 movne sb, 1 | sb = 1;
| }
0x0007d74a str r3, [sp, 0x28] | var_28h = r3;
0x0007d74c b 0x7d7b8 |
| while (r8 == 0) {
| label_19:
0x0007d74e ldr r2, [sp, 0x50] | r2 = var_50h;
| if (r2 != 0) {
0x0007d750 cbz r2, 0x7d762 |
0x0007d752 ldrb r1, [r4, 0x13] | r1 = *((r4 + 0x13));
0x0007d754 cmp r1, 7 |
0x0007d756 itttt ls |
| if (r1 > 7) {
0x0007d758 addls r0, r1, 1 | r0 = r1 + 1;
| }
| if (r1 > 7) {
0x0007d75a addls r1, 0x26 | r1 += 0x26;
| }
| if (r1 > 7) {
0x0007d75c strbls r0, [r4, 0x13] | *((r4 + 0x13)) = r0;
| }
| if (r1 <= 7) {
0x0007d75e strls r2, [r4, r1, lsl 2] | offset_3 = r1 << 2;
| *((r4 + offset_3)) = r2;
| goto label_62;
| }
| }
| label_62:
0x0007d762 ldr r2, [r7] | r2 = *(r7);
0x0007d764 subs r2, 1 | r2--;
0x0007d766 cmp r2, r5 |
0x0007d768 ite le |
| if (r2 > r5) {
0x0007d76a movle r1, sb | r1 = sb;
| }
| if (r2 <= r5) {
0x0007d76c orrgt r1, sb, 1 | r1 = sb | 1;
| }
0x0007d770 mvn r2, 1 | r2 = ~1;
0x0007d774 str r2, [sp, 8] | var_8h = r2;
0x0007d776 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0007d778 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x0007d77c cmp r1, 0 |
| if (r1 == 0) {
0x0007d77e beq 0x7d7ea | goto label_63;
| }
0x0007d780 cmp r3, fp |
0x0007d782 ite ne |
| if (r3 == fp) {
0x0007d784 movne r1, 0x35 | r1 = 0x35;
| }
| if (r3 != fp) {
0x0007d786 moveq r1, 0x33 | r1 = 0x33;
| }
0x0007d788 mov r2, fp | r2 = fp;
0x0007d78a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007d78c mov r0, sl | r0 = sl;
0x0007d78e bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0007d792 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x0007d796 ldr r2, [sp, 0x24] | r2 = var_24h_2;
0x0007d798 cmp r3, 0 |
0x0007d79a ldrb r1, [r2] | r1 = *(r2);
| if (r3 > 0) {
0x0007d79c ble 0x7d7ae |
0x0007d79e ldr.w r2, [sl, 0x68] | r2 = *((sl + 0x68));
0x0007d7a2 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007d7a6 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0007d7aa strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
| label_20:
0x0007d7ae ldr r3, [r7] | r3 = *(r7);
0x0007d7b0 adds r5, 1 | r5++;
0x0007d7b2 adds r6, 0x10 | r6 += 0x10;
0x0007d7b4 cmp r3, r5 |
| if (r3 <= r5) {
0x0007d7b6 ble 0x7d81e | goto label_61;
| }
0x0007d7b8 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0007d7ba mov r0, r4 | r0 = r4;
0x0007d7bc ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d7be bl 0x889dc | r0 = fcn_000889dc (r0, r1, r2);
0x0007d7c2 mov r3, r0 | r3 = r0;
0x0007d7c4 cmp.w r8, 0 |
0x0007d7c8 beq 0x7d74e |
| }
0x0007d7ca str r0, [sp, 0x38] | var_0h_3 = r0;
0x0007d7cc ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x0007d7ce bl 0x2329c | fcn_0002329c (r0);
0x0007d7d2 ldr r3, [sp, 0x38] | r3 = var_0h_3;
0x0007d7d4 cmp r0, 0 |
| if (r0 == 0) {
0x0007d7d6 beq 0x7d74e | goto label_19;
| }
0x0007d7d8 mov r2, r8 | r2 = r8;
0x0007d7da movs r1, 0x66 | r1 = 0x66;
0x0007d7dc mov r0, sl | r0 = sl;
0x0007d7de str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0007d7e2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d7e6 ldr r3, [sp, 0x38] | r3 = var_0h_3;
0x0007d7e8 b 0x7d74e | goto label_19;
| label_63:
0x0007d7ea cmp r3, fp |
0x0007d7ec ite ne |
| if (r3 == fp) {
0x0007d7ee movne r1, 0x34 | r1 = 0x34;
| }
| if (r3 != fp) {
0x0007d7f0 moveq r1, 0x32 | r1 = 0x32;
| }
0x0007d7f2 mov r2, fp | r2 = fp;
0x0007d7f4 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0007d7f6 mov r0, sl | r0 = sl;
0x0007d7f8 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0007d7fc ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x0007d800 ldr r2, [sp, 0x24] | r2 = var_24h_2;
0x0007d802 cmp r3, 0 |
0x0007d804 ldrb r2, [r2] | r2 = *(r2);
| if (r3 <= 0) {
0x0007d806 ble 0x7d7ae | goto label_20;
| }
0x0007d808 ldr.w r1, [sl, 0x68] | r1 = *((sl + 0x68));
0x0007d80c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007d810 orr r2, r2, 0x10 | r2 |= 0x10;
0x0007d814 add.w r1, r1, r3, lsl 3 | r1 += (r3 << 3);
0x0007d818 strh r2, [r1, -0x16] | *((r1 - 0x16)) = r2;
0x0007d81c b 0x7d7ae | goto label_20;
| label_61:
0x0007d81e cmp.w r8, 0 |
| if (r8 != 0) {
0x0007d822 beq 0x7d83c |
0x0007d824 movs r2, 0 | r2 = 0;
0x0007d826 movs r1, 0x32 | r1 = 0x32;
0x0007d828 str r2, [sp] | *(sp) = r2;
0x0007d82a mov r0, sl | r0 = sl;
0x0007d82c ldr r3, [sp, 0x20] | r3 = var_20h_3;
0x0007d82e mov r2, r8 | r2 = r8;
0x0007d830 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d834 ldr r1, [sp, 0x1c] | r1 = var_1ch_3;
0x0007d836 mov r0, sl | r0 = sl;
0x0007d838 bl 0x42960 | fcn_00042960 (r0, r1, r2);
| }
| label_24:
0x0007d83c ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x0007d840 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0007d844 cmn r2, r3 |
| if (r2 < r3) {
0x0007d846 bmi 0x7d8d0 | goto label_64;
| }
0x0007d848 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0007d84a ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0007d84c ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x0007d850 lsls r3, r3, 2 | r3 <<= 2;
0x0007d852 rsbs r3, r3, 0 | r3 -= ;
0x0007d854 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_26:
0x0007d856 cmp.w r8, 0 |
| if (r8 == 0) {
0x0007d85a beq.w 0x7d5a6 | goto label_21;
| }
0x0007d85e ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007d860 cmp r3, 7 |
| if (r3 > 7) {
0x0007d862 bhi.w 0x7d5a6 | goto label_21;
| }
0x0007d866 adds r2, r3, 1 | r2 = r3 + 1;
0x0007d868 adds r3, 0x26 | r3 += 0x26;
0x0007d86a strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x0007d86c str.w r8, [r4, r3, lsl 2] | __asm ("str.w r8, [r4, r3, lsl 2]");
0x0007d870 b 0x7d5a6 | goto label_21;
| label_45:
0x0007d872 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0007d874 mov r0, sl | r0 = sl;
0x0007d876 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d878 str r7, [sp, 4] | var_4h = r7;
0x0007d87a str r1, [sp] | *(sp) = r1;
0x0007d87c movs r1, 0x1b | r1 = 0x1b;
0x0007d87e bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0007d882 b 0x7d5a6 | goto label_21;
| if (r1 == 0x1b) {
| label_36:
0x0007d884 beq 0x7d8dc | goto label_65;
| }
0x0007d886 mov r1, r7 | r1 = r7;
0x0007d888 mov r0, r4 | r0 = r4;
0x0007d88a bl 0x27744 | fcn_00027744 (r0, r1);
0x0007d88e str r0, [sp, 0x14] | var_14h = r0;
0x0007d890 b 0x7d3b2 | goto label_7;
| label_57:
0x0007d892 ldr r3, [sp, 0x20] | r3 = var_20h_3;
0x0007d894 mov r2, r6 | r2 = r6;
0x0007d896 movs r1, 8 | r1 = 8;
0x0007d898 mov r0, sl | r0 = sl;
0x0007d89a str r6, [sp] | *(sp) = r6;
0x0007d89c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d8a0 b 0x7d57e | goto label_14;
| label_56:
0x0007d8a2 mov r1, sl | r1 = sl;
0x0007d8a4 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0007d8a8 b 0x7d63a | goto label_22;
| label_59:
0x0007d8aa ldr r3, [r7] | r3 = *(r7);
0x0007d8ac mov.w r8, 0 | r8 = 0;
0x0007d8b0 cmp r3, 0 |
| if (r3 > 0) {
0x0007d8b2 bgt.w 0x7d730 | goto label_23;
| }
0x0007d8b6 b 0x7d83c | goto label_24;
| label_46:
0x0007d8b8 movs r3, 0 | r3 = 0;
0x0007d8ba movs r1, 0x33 | r1 = 0x33;
0x0007d8bc str r3, [sp] | *(sp) = r3;
0x0007d8be mov r0, sl | r0 = sl;
0x0007d8c0 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0007d8c2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d8c6 b 0x7d6b2 | goto label_25;
| label_58:
0x0007d8c8 mov r1, sl | r1 = sl;
0x0007d8ca bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0007d8ce b 0x7d4ce | goto label_18;
| label_64:
0x0007d8d0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0007d8d2 mov r1, sl | r1 = sl;
0x0007d8d4 rsbs r2, r3, 0 | r2 = r3 - ;
0x0007d8d6 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0007d8da b 0x7d856 | goto label_26;
| label_65:
0x0007d8dc ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007d8de cmp r3, 5 |
| if (r3 == 5) {
0x0007d8e0 beq.w 0x7d6e2 | goto label_27;
| }
0x0007d8e4 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch_3]");
0x0007d8e8 cmp r3, r2 |
| if (r3 != r2) {
0x0007d8ea beq 0x7d906 |
0x0007d8ec ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0007d8ee subs r3, 1 | r3--;
0x0007d8f0 str r3, [sp, 0x34] | var_34h = r3;
0x0007d8f2 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x0007d8f4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007d8f6 str r3, [sp, 0x14] | var_14h = r3;
0x0007d8f8 b 0x7d472 | goto label_28;
| label_60:
0x0007d8fa ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0007d8fc add.w r8, r3, 1 | r8 = r3 + 1;
0x0007d900 str.w r8, [r4, 0x2c] | __asm ("str.w r8, [r4, 0x2c]");
0x0007d904 b 0x7d71a | goto label_29;
| }
0x0007d906 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0007d908 str r3, [sp, 0x28] | var_28h = r3;
0x0007d90a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007d90c cmp r3, 1 |
| if (r3 != 1) {
0x0007d90e beq 0x7d918 |
0x0007d910 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007d912 str r7, [sp, 0x34] | var_34h = r7;
0x0007d914 str r3, [sp, 0x14] | var_14h = r3;
0x0007d916 b 0x7d47e | goto label_30;
| }
0x0007d918 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0007d91a movs r1, 0x1d | r1 = 0x1d;
0x0007d91c ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0007d91e mov r0, sl | r0 = sl;
0x0007d920 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007d922 str r6, [sp] | *(sp) = r6;
0x0007d924 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d928 mov r3, r7 | r3 = r7;
0x0007d92a mov r2, r7 | r2 = r7;
0x0007d92c movs r1, 8 | r1 = 8;
0x0007d92e mov r0, sl | r0 = sl;
0x0007d930 str r7, [sp] | *(sp) = r7;
0x0007d932 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007d936 str r7, [sp, 0x34] | var_34h = r7;
0x0007d938 mov r8, r0 | r8 = r0;
0x0007d93a str r6, [sp, 0x14] | var_14h = r6;
0x0007d93c b 0x7d6b2 | goto label_25;
| label_31:
0x0007d93e blx 0x6430 | fcn_00006430 ();
0x0007d942 nop |
0x0007d944 ldm r3, {r1, r3, r5, r6} | r1 = *(r3);
| r3 = *((r3 + 4));
| r5 = *((r3 + 8));
| r6 = *((r3 + 12));
0x0007d946 movs r6, r0 | r6 = r0;
0x0007d948 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007d94a movs r0, r0 |
0x0007d94c ldm r3!, {r1, r2, r6} | r1 = *(r3!);
| r2 = *((r3! + 4));
| r6 = *((r3! + 8));
0x0007d94e movs r6, r0 | r6 = r0;
0x0007d950 ldm r2!, {r3, r4, r5, r7} | r3 = *(r2!);
| r4 = *((r2! + 4));
| r5 = *((r2! + 8));
| r7 = *((r2! + 12));
0x0007d952 movs r6, r0 | r6 = r0;
0x0007d954 ldrb r6, [r2, 0x14] | r6 = *((r2 + 0x14));
0x0007d956 movs r5, r0 | r5 = r0;
0x0007d958 ldrb r2, [r0, 0xa] | r2 = *((r0 + 0xa));
0x0007d95a movs r5, r0 | r5 = r0;
0x0007d95c ldcl p0, c0, [r4, 0x18]! | __asm ("ldcl p0, c0, [r4, 0x18]!");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7e074 */
| #include <stdint.h>
|
; (fcn) fcn.0007e074 () | void fcn_0007e074 (int16_t arg_48h, int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007e074 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0007e078 sub sp, 0x24 |
0x0007e07a str r3, [sp, 0x14] | var_14h = r3;
0x0007e07c mov r7, r0 | r7 = r0;
0x0007e07e mov r5, r1 | r5 = r1;
0x0007e080 ldrd r4, r3, [sp, 0x48] | __asm ("ldrd r4, r3, [arg_48h]");
0x0007e084 ldr.w r8, [sp, 0x50] | r8 = *(arg_50h);
0x0007e088 ldr.w sl, [r0, 8] | sl = *((r0 + 8));
0x0007e08c str r2, [sp, 8] | var_8h = r2;
0x0007e08e cmp r3, 0 |
| if (r3 == 0) {
0x0007e090 beq.w 0x7e1b6 | goto label_8;
| }
0x0007e094 ldr r1, [r1, 0x24] | r1 = *((r1 + 0x24));
0x0007e096 cmp r1, 0 |
| if (r1 == 0) {
0x0007e098 beq.w 0x7e1b4 | goto label_9;
| }
0x0007e09c ldr r2, [r0, 0x38] | r2 = *((r0 + 0x38));
0x0007e09e movs r6, 1 | r6 = 1;
0x0007e0a0 subs r2, 1 | r2--;
0x0007e0a2 str r2, [r0, 0x38] | *((r0 + 0x38)) = r2;
0x0007e0a4 str r2, [r3] | *(r3) = r2;
0x0007e0a6 ldr r2, [sp, 8] | r2 = var_8h;
0x0007e0a8 adds r2, 1 | r2++;
0x0007e0aa str r2, [r0, 0x34] | *((r0 + 0x34)) = r2;
0x0007e0ac ldr r2, [r3] | r2 = *(r3);
0x0007e0ae bl 0x7e024 | fcn_0007e024 (r0, r1, r2);
0x0007e0b2 movs r3, 0 | r3 = 0;
0x0007e0b4 mov r8, r3 | r8 = r3;
0x0007e0b6 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
| if (r4 != 0) {
| label_2:
0x0007e0b8 cbz r4, 0x7e0c4 |
0x0007e0ba ldrb.w r3, [r5, 0x37] | r3 = *((r5 + 0x37));
0x0007e0be lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
| if (r0 < r3) {
0x0007e0c0 bmi.w 0x7e1d6 | goto label_10;
| }
| }
0x0007e0c4 ldrh.w sb, [r5, 0x34] | sb = *((r5 + 0x34));
| label_4:
0x0007e0c8 mov r1, sb | r1 = sb;
0x0007e0ca mov r0, r7 | r0 = r7;
0x0007e0cc bl 0x27744 | fcn_00027744 (r0, r1);
0x0007e0d0 ldr r3, [sp, 0x54] | r3 = *(arg_54h);
0x0007e0d2 mov fp, r0 |
0x0007e0d4 cmp r0, r3 |
0x0007e0d6 it ne |
| if (r0 == r3) {
0x0007e0d8 orrne r6, r6, 1 | r6 |= 1;
| }
0x0007e0dc cmp r6, 0 |
| if (r6 == 0) {
0x0007e0de beq.w 0x7e20a | goto label_11;
| }
0x0007e0e2 mov.w r8, 0 | r8 = 0;
0x0007e0e6 cmp.w sb, 0 |
| if (sb == 0) {
0x0007e0ea beq.w 0x7e21e | goto label_12;
| }
| label_6:
0x0007e0ee ldr r3, [sp, 8] | r3 = var_8h;
0x0007e0f0 movs r4, 0 | r4 = 0;
0x0007e0f2 mov r6, r8 | r6 = r8;
0x0007e0f4 adds r3, 1 | r3++;
0x0007e0f6 str r3, [sp, 0xc] | var_ch = r3;
0x0007e0f8 b 0x7e100 |
| while (r1 != 0) {
| label_0:
0x0007e0fa adds r4, 1 | r4++;
0x0007e0fc cmp sb, r4 |
| if (sb == r4) {
0x0007e0fe beq 0x7e198 | goto label_13;
| }
| label_1:
0x0007e100 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0007e102 lsl.w r8, r4, 1 | r8 = r4 << 1;
0x0007e106 ldrsh.w r3, [r3, r4, lsl 1] | offset_0 = r4 << 1;
| r3 = *((r3 + offset_0));
| if (r6 == 0) {
0x0007e10a cbz r6, 0x7e126 | goto label_14;
| }
0x0007e10c ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0007e10e ldrsh.w r2, [r2, r4, lsl 1] | offset_1 = r4 << 1;
| r2 = *((r2 + offset_1));
0x0007e112 subs r1, r2, r3 | r1 = r2 - r3;
0x0007e114 adds r2, 2 | r2 += 2;
0x0007e116 clz r1, r1 | r1 &= r1;
0x0007e11a lsr.w r1, r1, 5 | r1 >>= 5;
0x0007e11e it eq |
| if (r2 != 2) {
0x0007e120 moveq r1, 0 | r1 = 0;
| }
0x0007e122 cmp r1, 0 |
0x0007e124 bne 0x7e0fa |
| }
| label_14:
0x0007e126 adds r1, r3, 2 | r1 = r3 + 2;
0x0007e128 add.w r2, fp, r4 | r2 = fp + r4;
| if (r1 == r3) {
0x0007e12c beq 0x7e1be | goto label_15;
| }
0x0007e12e str r2, [sp] | *(sp) = r2;
0x0007e130 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x0007e132 ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x0007e134 ldr r2, [sp, 8] | r2 = var_8h;
0x0007e136 bl 0x8771c | fcn_0008771c (r0, r1, r2, r3, r4);
| label_3:
0x0007e13a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0007e13c ldrsh.w r3, [r3, r8] | r3 = *((r3 + r8));
0x0007e140 cmp r3, 0 |
| if (r3 < 0) {
0x0007e142 blt 0x7e0fa | goto label_0;
| }
0x0007e144 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x0007e148 cmp r3, 0 |
| if (r3 <= 0) {
0x0007e14a ble 0x7e0fa | goto label_0;
| }
0x0007e14c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007e150 lsls r3, r3, 3 | r3 <<= 3;
0x0007e152 sub.w r8, r3, 0x18 | r8 = r3 - 0x18;
0x0007e156 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x0007e15a ldrb.w r2, [r3, r8] | r2 = *((r3 + r8));
0x0007e15e add.w r1, r3, r8 | r1 = r3 + r8;
0x0007e162 str r1, [sp, 0x10] | var_10h = r1;
0x0007e164 cmp r2, 0x57 |
| if (r2 != 0x57) {
0x0007e166 bne 0x7e0fa | goto label_0;
| }
0x0007e168 ldr.w r0, [sl] | r0 = *(sl);
0x0007e16c str r3, [sp, 0x1c] | var_1ch = r3;
0x0007e16e ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0007e172 str r3, [sp, 0x18] | var_18h = r3;
0x0007e174 cmp r3, 0 |
| if (r3 != 0) {
0x0007e176 bne 0x7e0fa | goto label_0;
| }
0x0007e178 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x0007e17a adds r4, 1 | r4++;
0x0007e17c ldrsb.w r1, [r1, 1] | r1 = *((r1 + 1));
0x0007e180 bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x0007e184 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0007e186 cmp sb, r4 |
0x0007e188 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007e18a str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0007e18c mov.w r2, 0xb8 | r2 = 0xb8;
0x0007e190 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007e192 strh.w r2, [r3, r8] | *((r3 + r8)) = r2;
| if (sb != r4) {
0x0007e196 bne 0x7e100 | goto label_1;
| }
| label_13:
0x0007e198 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 != 0) {
0x0007e19a cbnz r3, 0x7e1dc | goto label_16;
| }
0x0007e19c cmp.w sb, 1 |
| if (sb == 1) {
0x0007e1a0 beq 0x7e1f2 | goto label_17;
| }
| do {
| label_7:
0x0007e1a2 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0007e1a4 cmp sb, r3 |
0x0007e1a6 it gt |
| if (sb > r3) {
0x0007e1a8 strdgt sb, fp, [r7, 0x1c] | __asm ("strdgt sb, fp, [r7, 0x1c]");
| }
| label_5:
0x0007e1ac mov r0, fp | r0 = fp;
0x0007e1ae add sp, 0x24 |
0x0007e1b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0007e1b4 str r1, [r3] | *(r3) = r1;
| label_8:
0x0007e1b6 clz r6, r8 | r6 &= r8;
0x0007e1ba lsrs r6, r6, 5 | r6 >>= 5;
0x0007e1bc b 0x7e0b8 | goto label_2;
| label_15:
0x0007e1be ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007e1c0 mov r0, r7 | r0 = r7;
0x0007e1c2 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x0007e1c4 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0007e1c6 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x0007e1ca ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0007e1cc bl 0x875e0 | fcn_000875e0 (r0, r1, r2);
0x0007e1d0 movs r3, 0 | r3 = 0;
0x0007e1d2 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x0007e1d4 b 0x7e13a | goto label_3;
| label_10:
0x0007e1d6 ldrh.w sb, [r5, 0x32] | sb = *((r5 + 0x32));
0x0007e1da b 0x7e0c8 | goto label_4;
| label_16:
0x0007e1dc ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007e1de mov r0, sl | r0 = sl;
0x0007e1e0 mov r2, fp | r2 = fp;
0x0007e1e2 movs r1, 0x61 | r1 = 0x61;
0x0007e1e4 str r3, [sp] | *(sp) = r3;
0x0007e1e6 mov r3, sb | r3 = sb;
0x0007e1e8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e1ec cmp.w sb, 1 |
0x0007e1f0 bne 0x7e1a2 |
| } while (sb != 1);
| label_17:
0x0007e1f2 cmp.w fp, 0 |
| if (fp == 0) {
0x0007e1f6 beq 0x7e1ac | goto label_5;
| }
0x0007e1f8 ldrb r3, [r7, 0x13] | r3 = *((r7 + 0x13));
0x0007e1fa cmp r3, 7 |
| if (r3 > 7) {
0x0007e1fc bhi 0x7e1ac | goto label_5;
| }
0x0007e1fe adds r1, r3, 1 | r1 = r3 + 1;
0x0007e200 adds r3, 0x26 | r3 += 0x26;
0x0007e202 strb r1, [r7, 0x13] | *((r7 + 0x13)) = r1;
0x0007e204 str.w fp, [r7, r3, lsl 2] | __asm ("str.w fp, [r7, r3, lsl 2]");
0x0007e208 b 0x7e1ac | goto label_5;
| label_11:
0x0007e20a ldr.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x0007e20e cmp r3, 0 |
0x0007e210 it ne |
| if (r3 == 0) {
0x0007e212 movne r8, 0 | r8 = 0;
| }
0x0007e216 cmp.w sb, 0 |
| if (sb != 0) {
0x0007e21a bne.w 0x7e0ee | goto label_6;
| }
0x0007e21c add r7, sp, 0x1a0 | r7 = sp + 0x1a0;
| label_12:
0x0007e21e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007e220 cmp r3, 0 |
| if (r3 == 0) {
0x0007e222 beq 0x7e1a2 | goto label_7;
| }
0x0007e224 str r3, [sp] | *(sp) = r3;
0x0007e226 mov r0, sl | r0 = sl;
0x0007e228 mov r3, sb | r3 = sb;
0x0007e22a mov r2, fp | r2 = fp;
0x0007e22c movs r1, 0x61 | r1 = 0x61;
0x0007e22e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e232 b 0x7e1a2 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7e234 */
| #include <stdint.h>
|
; (fcn) fcn.0007e234 () | void fcn_0007e234 (int16_t arg_140h, int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0007e234 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007e238 sub sp, 0x2c |
0x0007e23a str r2, [sp, 0x18] | var_18h = r2;
0x0007e23c mov r6, r1 | r6 = r1;
0x0007e23e mov r4, r0 | r4 = r0;
0x0007e240 ldr r2, [pc, 0x3e8] |
0x0007e242 ldr r3, [pc, 0x3ec] | r3 = *(0x7e632);
0x0007e244 ldr r7, [r0, 0x28] | r7 = *((r0 + 0x28));
0x0007e246 add r2, pc | r2 = 0xfc876;
0x0007e248 ldr.w sl, [r1, 0xc] | sl = *((r1 + 0xc));
0x0007e24c ldr r3, [r2, r3] |
0x0007e24e ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x0007e250 adds r2, r7, 2 | r2 = r7 + 2;
0x0007e252 ldr r3, [r3] | r3 = *(0xfc876);
0x0007e254 str r3, [sp, 0x24] | var_24h = r3;
0x0007e256 mov.w r3, 0 | r3 = 0;
0x0007e25a ldr r3, [r0] | r3 = *(r0);
0x0007e25c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0007e25e str r2, [r0, 0x28] | *((r0 + 0x28)) = r2;
0x0007e260 cmp r1, 0 |
| if (r1 == 0) {
0x0007e262 beq.w 0x7e614 | goto label_23;
| }
0x0007e266 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0007e268 cmp r1, r2 |
| if (r1 == r2) {
0x0007e26a beq.w 0x7e5e0 | goto label_24;
| }
0x0007e26e adds r3, 0x10 | r3 += 0x10;
0x0007e270 mov.w sb, 0 | sb = 0;
| do {
0x0007e274 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0007e276 mov r0, r3 | r0 = r3;
0x0007e278 add.w sb, sb, 1 | sb++;
0x0007e27c adds r3, 0x10 | r3 += 0x10;
0x0007e27e cmp r1, r2 |
0x0007e280 bne 0x7e274 |
| } while (r1 != r2);
0x0007e282 ldr r3, [r0] | r3 = *(r0);
0x0007e284 movs r1, 0x1b | r1 = 0x1b;
0x0007e286 mov r0, r4 | r0 = r4;
0x0007e288 str r3, [sp] | *(sp) = r3;
0x0007e28a movs r3, 0 | r3 = 0;
0x0007e28c ldr r2, [r6] | r2 = *(r6);
0x0007e28e bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0007e292 cbz r0, 0x7e2b0 |
| while (1) {
| label_4:
0x0007e294 ldr r2, [pc, 0x39c] |
0x0007e296 ldr r3, [pc, 0x398] | r3 = *(0x7e632);
0x0007e298 add r2, pc | r2 = 0xfc8d0;
0x0007e29a ldr r3, [r2, r3] | r3 = *(0xfc8d0);
0x0007e29c ldr r2, [r3] | r2 = *(0xfc8d0);
0x0007e29e ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007e2a0 eors r2, r3 | r2 ^= r3;
0x0007e2a2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007e2a6 bne.w 0x7e628 | goto label_25;
| }
0x0007e2aa add sp, 0x2c |
0x0007e2ac pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0007e2b0 cmp.w sb, 1 |
| if (sb != 1) {
0x0007e2b4 beq 0x7e2d2 |
0x0007e2b6 ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x0007e2ba lsl.w r5, sb, 4 | r5 = sb << 4;
0x0007e2be ldr.w r1, [sl] | r1 = *(sl);
| label_11:
0x0007e2c2 ldr r3, [r4] | r3 = *(r4);
0x0007e2c4 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0007e2c6 add r3, r5 | r3 += r5;
0x0007e2c8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0007e2ca ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0007e2cc cmp r3, 0 |
| if (r3 != 0) {
0x0007e2ce bne.w 0x7e53c | goto label_26;
| }
| }
| label_5:
0x0007e2d2 ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x0007e2d4 cmp r5, 0 |
| if (r5 == 0) {
0x0007e2d6 beq.w 0x7e528 | goto label_27;
| }
| label_3:
0x0007e2da ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007e2dc mov r1, r6 | r1 = r6;
0x0007e2de mov r0, r4 | r0 = r4;
0x0007e2e0 cmp r3, 0 |
0x0007e2e2 ite lt |
| if (r3 >= 0) {
0x0007e2e4 ldrlt r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
| }
| if (r3 < 0) {
0x0007e2e6 ldrge r3, [sp, 0x18] | r3 = var_18h;
| }
0x0007e2e8 str r3, [sp, 0x1c] | var_1ch = r3;
0x0007e2ea bl 0x45e80 | fcn_00045e80 (r0, r1);
0x0007e2ee ldr.w r8, [r4, 0x28] | r8 = *((r4 + 0x28));
0x0007e2f0 strh r0, [r5] | *(r5) = r0;
0x0007e2f2 mov fp, r0 |
0x0007e2f4 ldrh r2, [r6, 0x32] | r2 = *((r6 + 0x32));
0x0007e2f6 add.w r3, r8, 1 | r3 = r8 + 1;
0x0007e2fa str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| if (r0 != 0) {
0x0007e2fc cbz r0, 0x7e304 |
0x0007e2fe ldr r3, [r0] | r3 = *(r0);
0x0007e300 adds r3, 1 | r3++;
0x0007e302 str r3, [r0] | *(r0) = r3;
| }
0x0007e304 mvn r3, 7 | r3 = ~7;
0x0007e308 movs r1, 0x77 | r1 = 0x77;
0x0007e30a strd r2, fp, [sp] | __asm ("strd r2, fp, [sp]");
0x0007e30e mov r0, r5 | r0 = r5;
0x0007e310 mov r2, r8 | r2 = r8;
0x0007e312 str r3, [sp, 8] | var_8h = r3;
0x0007e314 movs r3, 0 | r3 = 0;
0x0007e316 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0007e31a movs r2, 0x70 | r2 = 0x70;
0x0007e31c mov r3, sl | r3 = sl;
0x0007e31e mov r1, r7 | r1 = r7;
0x0007e320 mov r0, r4 | r0 = r4;
0x0007e322 str r2, [sp] | *(sp) = r2;
0x0007e324 mov r2, sb | r2 = sb;
0x0007e326 bl 0x4ef30 | fcn_0004ef30 (r0, r1, r2, r3, r4);
0x0007e32a movs r3, 0 | r3 = 0;
0x0007e32c mov r2, r7 | r2 = r7;
0x0007e32e str r3, [sp] | *(sp) = r3;
0x0007e330 movs r1, 0x23 | r1 = 0x23;
0x0007e332 mov r0, r5 | r0 = r5;
0x0007e334 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e338 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007e33a mov sl, r0 | sl = r0;
0x0007e33c cmp r3, 0 |
| if (r3 == 0) {
0x0007e33e beq.w 0x7e558 | goto label_28;
| }
0x0007e342 subs r3, 1 | r3--;
0x0007e344 uxtb r3, r3 | r3 = (int8_t) r3;
0x0007e346 strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0007e348 adds r3, 0x26 | r3 += 0x26;
0x0007e34a ldr.w r3, [r4, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r4 + offset_0));
0x0007e34e str r3, [sp, 0x14] | var_14h = r3;
| label_7:
0x0007e350 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0007e352 movs r2, 1 | r2 = 1;
0x0007e354 mov r1, r6 | r1 = r6;
0x0007e356 mov r0, r4 | r0 = r4;
0x0007e358 cmp r3, 0 |
0x0007e35a it eq |
| if (r3 != 0) {
0x0007e35c moveq r3, r4 | r3 = r4;
| }
0x0007e35e strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0007e360 movs r3, 0 | r3 = 0;
0x0007e362 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_8h]");
0x0007e366 mov r2, r7 | r2 = r7;
0x0007e368 str r3, [sp] | *(sp) = r3;
0x0007e36a add r3, sp, 0x20 | r3 += var_20h;
0x0007e36c str r3, [sp, 4] | var_4h = r3;
0x0007e36e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007e370 bl 0x7e074 | fcn_0007e074 (r0, r1, r2, r3, r4, r5, r6);
0x0007e374 movs r2, 0 | r2 = 0;
0x0007e376 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007e378 str r2, [sp] | *(sp) = r2;
0x0007e37a movs r1, 0x8b | r1 = 0x8b;
0x0007e37c mov r2, r8 | r2 = r8;
0x0007e37e mov r0, r5 | r0 = r5;
0x0007e380 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e384 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0007e386 cmp r2, 0 |
| if (r2 != 0) {
0x0007e388 bne.w 0x7e562 | goto label_29;
| }
| label_8:
0x0007e38c movs r3, 0 | r3 = 0;
0x0007e38e movs r1, 0x26 | r1 = 0x26;
0x0007e390 str r3, [sp] | *(sp) = r3;
0x0007e392 mov r2, r7 | r2 = r7;
0x0007e394 add.w r3, sl, 1 | r3 = sl + 1;
0x0007e398 mov r0, r5 | r0 = r5;
0x0007e39a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e39e ldr r3, [r5] | r3 = *(r5);
0x0007e3a0 cmp.w sl, 0 |
0x0007e3a4 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0007e3a6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007e3aa it lt |
| if (sl >= 0) {
0x0007e3ac addlt sl, r1, -1 | sl = r1 + -1;
| }
0x0007e3b0 cmp r3, 0 |
| if (r3 != 0) {
0x0007e3b2 bne.w 0x7e4e2 | goto label_30;
| }
0x0007e3b6 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x0007e3b8 add.w r3, sl, sl, lsl 1 | r3 = sl + (sl << 1);
0x0007e3bc add.w sl, r7, 1 | sl = r7 + 1;
0x0007e3c0 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x0007e3c4 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0007e3c6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007e3c8 cmp r3, 0 |
| if (r3 < 0) {
0x0007e3ca blt.w 0x7e4f6 | goto label_31;
| }
| label_0:
0x0007e3ce mvn r2, 7 | r2 = ~7;
0x0007e3d2 movs r1, 0x71 | r1 = 0x71;
0x0007e3d4 str r2, [sp, 8] | var_8h = r2;
0x0007e3d6 mov r0, r5 | r0 = r5;
0x0007e3d8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007e3da mov r2, sl | r2 = sl;
0x0007e3dc strd sb, fp, [sp] | __asm ("strd sb, fp, [sp]");
0x0007e3e0 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0007e3e4 movs r1, 0x11 | r1 = 0x11;
| label_1:
0x0007e3e6 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0007e3e8 mov.w fp, 0 |
0x0007e3ec mov r0, r5 | r0 = r5;
0x0007e3ee cmp r3, 0 |
0x0007e3f0 ittt gt |
| if (r3 <= 0) {
0x0007e3f2 ldrgt r2, [r5, 0x68] | r2 = *((r5 + 0x68));
| }
| if (r3 <= 0) {
0x0007e3f4 addgt r3, r3, r3, lsl 1 | r3 += (r3 << 1);
| }
| if (r3 > 0) {
0x0007e3f8 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
| }
0x0007e3fc mov r3, fp | r3 = fp;
0x0007e3fe it gt |
| if (r3 > 0) {
0x0007e400 strhgt r1, [r2, -0x16] | __asm ("strhgt r1, [r2, -0x16]");
| }
0x0007e404 mov r2, r8 | r2 = r8;
0x0007e406 movs r1, 0x21 | r1 = 0x21;
0x0007e408 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0007e40c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e410 ldrb.w r3, [r6, 0x36] | r3 = *((r6 + 0x36));
0x0007e414 mov sb, r0 | sb = r0;
0x0007e416 cmp r3, 0 |
| if (r3 != 0) {
0x0007e418 bne.w 0x7e57c | goto label_32;
| }
0x0007e41c ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0007e41e movs r2, 1 | r2 = 1;
0x0007e420 cmp r3, 0 |
0x0007e422 it eq |
| if (r3 != 0) {
0x0007e424 moveq r3, r4 | r3 = r4;
| }
0x0007e426 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x0007e428 ldr.w fp, [r5, 0x6c] | fp = *((r5 + 0x6c));
| label_9:
0x0007e42c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007e42e mov r2, r8 | r2 = r8;
0x0007e430 movs r1, 0x85 | r1 = 0x85;
0x0007e432 mov r0, r5 | r0 = r5;
0x0007e434 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0007e438 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e43c ldrb.w r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x0007e440 ands r3, r3, 2 | r3 &= 2;
| if (r3 == r3) {
0x0007e444 beq.w 0x7e5d2 | goto label_33;
| }
| label_10:
0x0007e448 movs r3, 0 | r3 = 0;
0x0007e44a mov r2, sl | r2 = sl;
0x0007e44c str r3, [sp] | *(sp) = r3;
0x0007e44e movs r1, 0x8a | r1 = 0x8a;
0x0007e450 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007e452 mov r0, r5 | r0 = r5;
0x0007e454 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e458 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0007e45a cmp r3, 0 |
| if (r3 > 0) {
0x0007e45c ble 0x7e46e |
0x0007e45e ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x0007e460 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007e464 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0007e468 movs r3, 0x10 | r3 = 0x10;
0x0007e46a strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0007e46e ldr r1, [sp, 0x14] | r1 = var_14h;
| if (r1 != 0) {
0x0007e470 cbz r1, 0x7e482 |
0x0007e472 ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x0007e474 cmp r3, 7 |
0x0007e476 itttt ls |
| if (r3 > 7) {
0x0007e478 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0007e47a addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0007e47c strbls r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0007e47e strls r1, [r4, r3, lsl 2] | offset_1 = r3 << 2;
| *((r4 + offset_1)) = r1;
| goto label_34;
| }
| }
| label_34:
0x0007e482 movs r2, 0 | r2 = 0;
0x0007e484 mov r3, fp | r3 = fp;
0x0007e486 str r2, [sp] | *(sp) = r2;
0x0007e488 movs r1, 0x24 | r1 = 0x24;
0x0007e48a mov r2, r8 | r2 = r8;
0x0007e48c mov r0, r5 | r0 = r5;
0x0007e48e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e492 ldr r3, [r5] | r3 = *(r5);
0x0007e494 cmp.w sb, 0 |
0x0007e498 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x0007e49a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007e49e it lt |
| if (sb >= 0) {
0x0007e4a0 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x0007e4a4 cmp r3, 0 |
| if (r3 != 0) {
0x0007e4a6 bne 0x7e520 | goto label_35;
| }
0x0007e4a8 ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x0007e4aa add.w sb, sb, sb, lsl 1 | sb += (sb << 1);
0x0007e4ae add.w r3, r3, sb, lsl 3 | r3 += (sb << 3);
| label_2:
0x0007e4b2 movs r4, 0 | r4 = 0;
0x0007e4b4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0007e4b6 movs r1, 0x7a | r1 = 0x7a;
0x0007e4b8 mov r2, r7 | r2 = r7;
0x0007e4ba mov r3, r4 | r3 = r4;
0x0007e4bc mov r0, r5 | r0 = r5;
0x0007e4be str r4, [sp] | *(sp) = r4;
0x0007e4c0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e4c4 mov r3, r4 | r3 = r4;
0x0007e4c6 mov r2, sl | r2 = sl;
0x0007e4c8 movs r1, 0x7a | r1 = 0x7a;
0x0007e4ca mov r0, r5 | r0 = r5;
0x0007e4cc str r4, [sp] | *(sp) = r4;
0x0007e4ce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e4d2 mov r3, r4 | r3 = r4;
0x0007e4d4 mov r2, r8 | r2 = r8;
0x0007e4d6 movs r1, 0x7a | r1 = 0x7a;
0x0007e4d8 mov r0, r5 | r0 = r5;
0x0007e4da str r4, [sp] | *(sp) = r4;
0x0007e4dc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e4e0 b 0x7e294 |
| }
| label_30:
0x0007e4e2 ldr r3, [pc, 0x154] |
0x0007e4e4 add.w sl, r7, 1 | sl = r7 + 1;
0x0007e4e8 add r3, pc | r3 = 0xfcb26;
0x0007e4ea adds r3, 4 | r3 += 4;
0x0007e4ec str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0007e4ee ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007e4f0 cmp r3, 0 |
| if (r3 >= 0) {
0x0007e4f2 bge.w 0x7e3ce | goto label_0;
| }
| label_31:
0x0007e4f6 movs r3, 0 | r3 = 0;
0x0007e4f8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0007e4fa movs r1, 0x91 | r1 = 0x91;
0x0007e4fc str r3, [sp] | *(sp) = r3;
0x0007e4fe mov r0, r5 | r0 = r5;
0x0007e500 mov r3, sb | r3 = sb;
0x0007e502 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e506 mvn r2, 7 | r2 = ~7;
0x0007e50a movs r1, 0x71 | r1 = 0x71;
0x0007e50c str r2, [sp, 8] | var_8h = r2;
0x0007e50e mov r0, r5 | r0 = r5;
0x0007e510 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007e512 mov r2, sl | r2 = sl;
0x0007e514 strd sb, fp, [sp] | __asm ("strd sb, fp, [sp]");
0x0007e518 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0007e51c movs r1, 1 | r1 = 1;
0x0007e51e b 0x7e3e6 | goto label_1;
| label_35:
0x0007e520 ldr r3, [pc, 0x118] |
0x0007e522 add r3, pc | r3 = 0xfcb62;
0x0007e524 adds r3, 4 | r3 += 4;
0x0007e526 b 0x7e4b2 | goto label_2;
| label_27:
0x0007e528 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
| if (r3 == 0) {
0x0007e52a cbz r3, 0x7e54a | goto label_36;
| }
| label_6:
0x0007e52c mov r0, r4 | r0 = r4;
0x0007e52e bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x0007e532 mov r5, r0 | r5 = r0;
0x0007e534 cmp r0, 0 |
| if (r0 != 0) {
0x0007e536 bne.w 0x7e2da | goto label_3;
| }
0x0007e53a b 0x7e294 | goto label_4;
| label_26:
0x0007e53c str r1, [sp] | *(sp) = r1;
0x0007e53e movs r3, 1 | r3 = 1;
0x0007e540 mov r1, sb | r1 = sb;
0x0007e542 mov r0, r4 | r0 = r4;
0x0007e544 bl 0x42ffc | fcn_00042ffc (r0, r1, r2, r3, r4);
0x0007e548 b 0x7e2d2 | goto label_5;
| label_36:
0x0007e54a ldr r3, [r4] | r3 = *(r4);
0x0007e54c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007e54e lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0007e550 itt pl |
| if (r3 < r3) {
0x0007e552 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0007e554 strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0007e556 b 0x7e52c | goto label_6;
| label_28:
0x0007e558 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0007e55a adds r3, 1 | r3++;
0x0007e55c str r3, [sp, 0x14] | var_14h = r3;
0x0007e55e str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0007e560 b 0x7e350 | goto label_7;
| label_29:
0x0007e562 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0007e564 mvn.w ip, r2 |
0x0007e568 ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x0007e56a ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0007e56e cmn r2, r3 |
| if (r2 < r3) {
0x0007e570 bmi 0x7e60c | goto label_37;
| }
0x0007e572 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x0007e574 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0007e576 str.w r1, [r3, ip, lsl 2] | __asm ("str.w r1, [r3, ip, lsl 2]");
0x0007e57a b 0x7e38c | goto label_8;
| label_32:
0x0007e57c mov r2, fp | r2 = fp;
0x0007e57e movs r3, 1 | r3 = 1;
0x0007e580 movs r1, 8 | r1 = 8;
0x0007e582 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0007e586 mov r0, r5 | r0 = r5;
0x0007e588 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e58c ldrh r2, [r6, 0x32] | r2 = *((r6 + 0x32));
0x0007e58e mov r3, r0 | r3 = r0;
0x0007e590 ldr.w fp, [r5, 0x6c] | fp = *((r5 + 0x6c));
0x0007e594 movs r1, 0x84 | r1 = 0x84;
0x0007e596 str r0, [sp, 0x18] | var_18h = r0;
0x0007e598 mov r0, r5 | r0 = r5;
0x0007e59a str r2, [sp, 4] | var_4h = r2;
0x0007e59c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007e59e str r2, [sp] | *(sp) = r2;
0x0007e5a0 mov r2, r8 | r2 = r8;
0x0007e5a2 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0007e5a4 stc2 p6, c4, [fp], {0x32} | __asm ("stc2 p6, c4, [fp], {0x32}");
0x0007e5a8 movs r1, 2 | r1 = 2;
0x0007e5aa mov r0, r4 | r0 = r4;
0x0007e5ac bl 0x41f38 | fcn_00041f38 (r0, r1, r2, r3, r4, r5, r6);
0x0007e5b0 ldr r2, [r5] | r2 = *(r5);
0x0007e5b2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007e5b4 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0007e5b6 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0007e5ba cmp r3, 0 |
0x0007e5bc it lt |
| if (r3 >= 0) {
0x0007e5be addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r2 != 0) {
0x0007e5c2 cbnz r2, 0x7e604 | goto label_38;
| }
0x0007e5c4 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x0007e5c6 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007e5ca add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_12:
0x0007e5ce str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0007e5d0 b 0x7e42c | goto label_9;
| label_33:
0x0007e5d2 mov r2, sl | r2 = sl;
0x0007e5d4 movs r1, 0x89 | r1 = 0x89;
0x0007e5d6 mov r0, r5 | r0 = r5;
0x0007e5d8 str r3, [sp] | *(sp) = r3;
0x0007e5da bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e5de b 0x7e448 | goto label_10;
| label_24:
0x0007e5e0 movs r5, 0 | r5 = 0;
0x0007e5e2 mov sb, r5 | sb = r5;
| label_13:
0x0007e5e4 ldr r3, [r3] | r3 = *(r3);
0x0007e5e6 movs r1, 0x1b | r1 = 0x1b;
0x0007e5e8 mov r0, r4 | r0 = r4;
0x0007e5ea str r3, [sp] | *(sp) = r3;
0x0007e5ec movs r3, 0 | r3 = 0;
0x0007e5ee ldr r2, [r6] | r2 = *(r6);
0x0007e5f0 bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0007e5f4 cmp r0, 0 |
| if (r0 != 0) {
0x0007e5f6 bne.w 0x7e294 | goto label_4;
| }
0x0007e5fa ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x0007e5fe ldr.w r1, [sl] | r1 = *(sl);
0x0007e602 b 0x7e2c2 | goto label_11;
| label_38:
0x0007e604 ldr r3, [pc, 0x38] |
0x0007e606 add r3, pc | r3 = 0xfcc4a;
0x0007e608 adds r3, 4 | r3 += 4;
0x0007e60a b 0x7e5ce | goto label_12;
| label_37:
0x0007e60c mov r2, ip | r2 = ip;
0x0007e60e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0007e612 b 0x7e38c | goto label_8;
| label_23:
0x0007e614 movs r5, 0 | r5 = 0;
0x0007e616 mov.w sb, 0x8000 | sb = 0x8000;
0x0007e61a sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x0007e61e movt r5, 0xfff8 | r5 = (r5 & 0xFFFF) | 0xfff80000;
0x0007e622 movt sb, 0xffff | sb = (sb & 0xFFFF) | 0xffff0000;
0x0007e626 b 0x7e5e4 | goto label_13;
| label_25:
0x0007e628 blx 0x6430 | fcn_00006430 ();
| if (r2 != 0) {
0x0007e62c cbnz r2, 0x7e684 | goto label_20;
| }
0x0007e62e movs r6, r0 | r6 = r0;
0x0007e630 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007e632 movs r0, r0 |
| if (r0 != 0) {
0x0007e634 cbnz r0, 0x7e678 | goto label_39;
| }
0x0007e636 movs r6, r0 | r6 = r0;
0x0007e638 svc 0x24 | __asm ("svc 0x24");
0x0007e63a movs r6, r0 | r6 = r0;
0x0007e63c udf 0xea | __asm ("udf 0xea");
| label_14:
0x0007e65c cmp r5, 0 |
| if (r5 != 0) {
0x0007e65e bne 0x7e6d6 | goto label_40;
| }
| label_19:
0x0007e660 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x0007e662 ldr r3, [r6] | r3 = *(r6);
0x0007e664 cmp r0, 0 |
| if (r0 == 0) {
0x0007e666 beq 0x7e73e | goto label_41;
| }
0x0007e668 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0007e66a ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0007e66c cmp r2, r0 |
| if (r2 == r0) {
0x0007e66e beq 0x7e72e | goto label_42;
| }
0x0007e670 movs r2, 0 | r2 = 0;
| do {
0x0007e672 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0007e674 adds r2, 1 | r2++;
0x0007e676 adds r3, 0x10 | r3 += 0x10;
| label_39:
0x0007e678 cmp r0, r1 |
0x0007e67a bne 0x7e672 |
| } while (r0 != r1);
| label_22:
0x0007e67c mov.w sb, 1 | sb = 1;
0x0007e680 lsl.w sb, sb, r2 | sb <<= r2;
| label_20:
0x0007e684 ldr.w sl, [r6, 0x74] | sl = *((r6 + 0x74));
0x0007e688 cmp.w sl, 0 |
0x0007e68c it eq |
| if (sl != 0) {
0x0007e68e moveq sl, r6 | sl = r6;
| }
0x0007e690 ldr.w r3, [sl, 0x54] | r3 = *((sl + 0x54));
0x0007e694 tst.w r3, sb |
| if ((r3 & sb) == 0) {
0x0007e698 bne 0x7e6a6 |
0x0007e69a cmp r2, 1 |
0x0007e69c orr.w r3, r3, sb | r3 |= sb;
0x0007e6a0 str.w r3, [sl, 0x54] | __asm ("str.w r3, [sl, 0x54]");
| if (r2 == 1) {
0x0007e6a4 beq 0x7e736 | goto label_43;
| }
| }
| label_21:
0x0007e6a6 ldr.w r3, [sl, 0x50] | r3 = *((sl + 0x50));
0x0007e6aa mov.w r2, -1 | r2 = -1;
0x0007e6ae mov r1, r8 | r1 = r8;
0x0007e6b0 mov r0, r6 | r0 = r6;
0x0007e6b2 orr.w r3, r3, sb | r3 |= sb;
0x0007e6b6 str.w r3, [sl, 0x50] | __asm ("str.w r3, [sl, 0x50]");
0x0007e6ba bl 0x7e234 | fcn_0007e234 (r0, r1, r2, r3);
| label_15:
0x0007e6be ldr.w r8, [r8, 0x14] | r8 = *((r8 + 0x14));
0x0007e6c2 cmp.w r8, 0 |
| if (r8 != 0) {
0x0007e6c6 bne 0x7e65c | goto label_14;
| }
| do {
0x0007e6c8 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0007e6cc ldr.w r8, [r8, 0x14] | r8 = *((r8 + 0x14));
0x0007e6d0 cmp.w r8, 0 |
0x0007e6d4 beq 0x7e6c8 |
| } while (r8 == 0);
| label_40:
0x0007e6d6 ldrh.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x0007e6da cmp r3, 0 |
| if (r3 == 0) {
0x0007e6dc beq 0x7e6be | goto label_15;
| }
0x0007e6de ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x0007e6e2 ldr.w sb, [r8, 0x20] | sb = *((r8 + 0x20));
0x0007e6e6 add.w sl, r0, r3, lsl 1 | sl = r0 + (r3 << 1);
0x0007e6ea b 0x7e6f4 | goto label_44;
| label_17:
0x0007e6ec cmp sl, r0 |
0x0007e6ee add.w sb, sb, 4 | sb += 4;
| if (sl == r0) {
0x0007e6f2 beq 0x7e6cc | goto label_16;
| }
| label_44:
0x0007e6f4 ldrsh r3, [r0], 2 | r3 = *(r0);
| r0 += 2;
0x0007e6f8 cmp r3, 0 |
| if (r3 < 0) {
0x0007e6fa blt 0x7e6ec | goto label_17;
| }
0x0007e6fc ldr.w r3, [sb] | r3 = *(sb);
0x0007e700 subs r2, r5, 1 | r2 = r5 - 1;
0x0007e702 add.w lr, r3, -1 | lr = r3 + -1;
| do {
| label_18:
0x0007e706 ldrb r3, [lr, 1]! | r3 = *((lr += 1));
0x0007e70a ldrb ip, [r2, 1]! | ip = *((r2 += 1));
0x0007e70e add.w fp, r4, r3 |
0x0007e712 cmp r3, ip |
0x0007e714 add.w r1, r4, ip | r1 = r4 + ip;
| if (r3 == ip) {
0x0007e718 beq 0x7e728 | goto label_45;
| }
0x0007e71a ldrb.w ip, [fp, 0x140] | ip = *(arg_140h);
0x0007e71e ldrb.w r3, [r1, 0x140] | r3 = *((r1 + 0x140));
0x0007e722 cmp ip, r3 |
0x0007e724 beq 0x7e706 |
| } while (ip == r3);
0x0007e726 b 0x7e6ec | goto label_17;
| label_45:
0x0007e728 cmp r3, 0 |
| if (r3 != 0) {
0x0007e72a bne 0x7e706 | goto label_18;
| }
0x0007e72c b 0x7e660 | goto label_19;
| label_42:
0x0007e72e mov.w sb, 1 | sb = 1;
0x0007e732 movs r2, 0 | r2 = 0;
0x0007e734 b 0x7e684 | goto label_20;
| label_43:
0x0007e736 mov r0, sl | r0 = sl;
0x0007e738 bl 0x7c594 | fcn_0007c594 (r0);
0x0007e73c b 0x7e6a6 | goto label_21;
| label_41:
0x0007e73e mov.w r2, 0x8000 |
0x0007e742 movt r2, 0xffff | r2 = 0x-8000;
0x0007e746 b 0x7e67c | goto label_22;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7e794 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007e794 () | void fcn_0007e794 (int16_t arg_13h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_80h, int16_t arg_88h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_1ch;
| int16_t var_20h;
| arithmetic x;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0007e794 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007e798 sub sp, 0x5c |
0x0007e79a ldrd r3, r4, [sp, 0x80] | __asm ("ldrd r3, r4, [arg_80h]");
0x0007e79e mov r5, r2 | r5 = r2;
0x0007e7a0 movs r6, 0 | r6 = 0;
0x0007e7a2 mov r7, r1 | r7 = r1;
0x0007e7a4 ldr.w r2, [pc, 0x6ac] |
0x0007e7a8 mov fp, r0 |
0x0007e7aa strd r3, r4, [sp, 0x10] | __asm ("strd r3, r4, [var_10h]");
0x0007e7ae ldr.w r3, [pc, 0x6a8] | r3 = *(0x7ee5a);
0x0007e7b2 add r2, pc | r2 = 0xfd60a;
0x0007e7b4 str r1, [sp, 0x3c] | var_3ch = r1;
0x0007e7b6 ldr r4, [sp, 0x88] | r4 = *(arg_88h);
0x0007e7b8 movs r1, 0xe | r1 = 0xe;
0x0007e7ba ldr r3, [r2, r3] |
0x0007e7bc mov r2, r6 | r2 = r6;
0x0007e7be ldr r3, [r3] | r3 = *(0xfd60a);
0x0007e7c0 str r3, [sp, 0x54] | var_54h = r3;
0x0007e7c2 mov.w r3, 0 | r3 = 0;
0x0007e7c6 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0007e7c8 str r6, [sp] | *(sp) = r6;
0x0007e7ca str r4, [sp, 0x2c] | var_2ch = r4;
0x0007e7cc mov r0, r3 | r0 = r3;
0x0007e7ce str r3, [sp, 0x30] | var_30h = r3;
0x0007e7d0 mov r3, r6 | r3 = r6;
0x0007e7d2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007e7d6 mov r2, r7 | r2 = r7;
0x0007e7d8 ldr r7, [r7, 0xc] | r7 = *((r7 + 0xc));
0x0007e7da ldr r4, [r2, 0x18] | r4 = *((r2 + 0x18));
0x0007e7dc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007e7de ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0007e7e0 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x0007e7e4 str r0, [sp, 0x40] | var_40h = r0;
0x0007e7e6 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007e7e8 add.w r7, r4, r7, lsl 4 | r7 = r4 + (r7 << 4);
0x0007e7ec str r2, [sp, 0x34] | var_34h = r2;
0x0007e7ee cmp r4, r7 |
0x0007e7f0 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r4 >= r7) {
0x0007e7f2 bhs.w 0x7ee42 | goto label_21;
| }
0x0007e7f6 ldr.w r3, [pc, 0x664] |
0x0007e7fa mov sb, r6 | sb = r6;
0x0007e7fc strd r6, fp, [sp, 0x24] | __asm ("strd r6, fp, [var_0hx24]");
0x0007e800 mov sl, r6 | sl = r6;
0x0007e802 mov fp, r6 |
0x0007e804 str r6, [sp, 0x20] | var_20h = r6;
0x0007e806 add r3, pc | r3 = 0xfd668;
0x0007e808 str r3, [sp, 0x38] | var_38h = r3;
| do {
0x0007e80a ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x0007e80c ands r6, r3, 2 | r6 = r3 & 2;
| if (r6 == r3) {
0x0007e810 beq.w 0x7ebc4 | goto label_22;
| }
| label_2:
0x0007e814 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x0007e818 mov r1, r5 | r1 = r5;
0x0007e81a mov r0, r4 | r0 = r4;
0x0007e81c bl 0x2f1dc | r0 = fcn_0002f1dc (r0, r1);
| if (r0 != 0) {
0x0007e820 cbz r0, 0x7e866 |
0x0007e822 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0007e824 cmp r3, 0x3f |
0x0007e826 itt gt |
| if (r3 <= 0x3f) {
0x0007e828 movgt r8, 0 | r8 = 0;
| }
| if (r3 > 0x3f) {
0x0007e82c mov.w r6, -0x80000000 | r6 = -0x80000000;
| }
| if (r3 <= 0x3f) {
0x0007e830 bgt 0x7e84a |
0x0007e832 movs r1, 1 | r1 = 1;
0x0007e834 sub.w r6, r3, 0x20 | r6 = r3 - 0x20;
0x0007e838 rsb.w r2, r3, 0x20 | r2 = 0x20 - r3;
0x0007e83c lsl.w r6, r1, r6 | r6 = r1 << r6;
0x0007e840 lsr.w r2, r1, r2 | r2 = r1 >> r2;
0x0007e844 lsl.w r8, r1, r3 | r8 = r1 << r3;
0x0007e848 orrs r6, r2 | r6 |= r2;
| }
0x0007e84a cmp.w sb, 0 |
| if (sb == 0) {
0x0007e84e beq.w 0x7ec2e | goto label_23;
| }
| label_4:
0x0007e852 and.w r3, r8, sl | r3 = r8 & sl;
0x0007e856 and.w r2, r6, fp | r2 = r6 & fp;
0x0007e85a orrs r3, r2 | r3 |= r2;
0x0007e85c it ne |
| if (r3 == r2) {
0x0007e85e movne sb, 1 | sb = 1;
| }
0x0007e860 lsrs r1, r0, 4 | r1 = r0 >> 4;
| if (r1 == r0) {
0x0007e862 beq.w 0x7ebfa | goto label_24;
| }
| }
| label_3:
0x0007e866 adds r4, 0x30 | r4 += 0x30;
0x0007e868 cmp r7, r4 |
0x0007e86a bhi 0x7e80a |
| } while (r7 > r4);
0x0007e86c ldr r3, [sp, 0x24] | r3 = x;
0x0007e86e mov r2, fp | r2 = fp;
0x0007e870 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0007e874 mvns r4, r2 | r4 = ~r2;
0x0007e876 mvn.w ip, sl |
0x0007e87a orr r4, r4, 0x80000000 | r4 |= 0x80000000;
0x0007e87e uxth r6, r3 | r6 = (int16_t) r3;
| label_19:
0x0007e880 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0007e882 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0007e884 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x0007e886 strh r6, [r2, 0x2c] | *((r2 + 0x2c)) = r6;
0x0007e888 strh r6, [r2, 0x18] | *((r2 + 0x18)) = r6;
0x0007e88a ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
0x0007e88c ands r4, r1 | r4 &= r1;
0x0007e88e ldrsh.w r0, [r0, 0x22] | r0 = *((r0 + 0x22));
0x0007e892 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0007e894 and.w sb, r2, ip | sb = r2 & ip;
0x0007e896 lsrs r4, r1, 4 | r4 = r1 >> 4;
0x0007e898 movw r2, 0x4241 | r2 = 0x4241;
0x0007e89c cmp r0, 0x3f |
0x0007e89e str r0, [sp, 0x28] | var_28h = r0;
0x0007e8a0 str r2, [r6, 0x28] | *((r6 + 0x28)) = r2;
0x0007e8a2 mov r2, r0 | r2 = r0;
0x0007e8a4 it ge |
| if (r0 < 0x3f) {
0x0007e8a6 movge r0, 0x3f | r0 = 0x3f;
| }
0x0007e8a8 cmp r2, 0 |
0x0007e8aa mov sl, r0 | sl = r0;
| if (r2 <= 0) {
0x0007e8ac ble 0x7e8d4 | goto label_25;
| }
0x0007e8ae movs r2, 0 | r2 = 0;
| do {
0x0007e8b0 rsb.w r6, r2, 0x20 | r6 = 0x20 - r2;
0x0007e8b4 lsr.w r0, sb, r2 | r0 = sb >> r2;
0x0007e8b8 lsl.w r6, r4, r6 | r6 = r4 << r6;
0x0007e8bc orrs r0, r6 | r0 |= r6;
0x0007e8be sub.w r6, r2, 0x20 | r6 = r2 - 0x20;
0x0007e8c2 lsr.w r6, r4, r6 | r6 = r4 >> r6;
0x0007e8c6 adds r2, 1 | r2++;
0x0007e8c8 orrs r0, r6 | r0 |= r6;
0x0007e8ca lsls r6, r0, 0x1f | r6 = r0 << 0x1f;
0x0007e8cc it mi |
| if (r6 >= r0) {
0x0007e8ce addmi r3, 1 | r3++;
| }
0x0007e8d0 cmp sl, r2 |
0x0007e8d2 bne 0x7e8b0 |
| } while (sl != r2);
| label_25:
0x0007e8d4 cmp r1, 0 |
0x0007e8d6 ldr.w r0, [fp] | r0 = *(fp);
0x0007e8da ittt lt |
| if (r1 >= 0) {
0x0007e8dc ldrlt r2, [sp, 0x28] | r2 = var_28h;
| }
| if (r1 >= 0) {
0x0007e8de sublt r2, 0x3f | r2 -= 0x3f;
| }
| if (r1 >= 0) {
| label_20:
0x0007e8e0 addlt r3, r3, r2 | r3 += r2;
| }
0x0007e8e2 movs r2, 0 | r2 = 0;
0x0007e8e4 adds r3, 1 | r3++;
0x0007e8e6 sxth r1, r3 | __asm ("sxth r1, r3");
0x0007e8e8 str r3, [sp, 0x38] | var_38h = r3;
0x0007e8ea add r3, sp, 0x50 | r3 += var_50h;
0x0007e8ec bl 0x39abc | fcn_00039abc (r0, r1, r2, r3);
0x0007e8f0 str r0, [sp, 0x24] | x = r0;
0x0007e8f2 cmp r0, 0 |
| if (r0 == 0) {
0x0007e8f4 beq.w 0x7ec98 | goto label_16;
| }
0x0007e8f8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007e8fa str r0, [r3, 0x20] | *((r3 + 0x20)) = r0;
0x0007e8fc ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007e8fe str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0007e900 ldr.w r3, [pc, 0x55c] |
0x0007e904 add r3, pc | r3 = 0xfd768;
0x0007e906 str r3, [r0] | *(r0) = r3;
0x0007e908 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0007e90a ldr r6, [r3, 0x18] | r6 = *(0xfd780);
0x0007e90c cmp r7, r6 |
| if (r7 < r6) {
0x0007e90e bls.w 0x7ee3a | goto label_26;
| }
0x0007e912 mov.w ip, 0 |
0x0007e916 str.w sl, [sp, 0x44] | __asm ("str.w sl, [var_44h]");
0x0007e91a str.w sb, [sp, 0x48] | __asm ("str.w sb, [var_48h]");
0x0007e91e mov r8, ip | r8 = ip;
0x0007e920 str r4, [sp, 0x4c] | var_4ch = r4;
0x0007e922 mov sl, ip | sl = ip;
0x0007e924 mov sb, ip | sb = ip;
0x0007e926 mov r4, r0 | r4 = r0;
0x0007e928 b 0x7e930 |
| while (r0 == 0) {
| label_0:
0x0007e92a adds r6, 0x30 | r6 += 0x30;
0x0007e92c cmp r7, r6 |
| if (r7 < r6) {
0x0007e92e bls 0x7e9b0 | goto label_27;
| }
| label_1:
0x0007e930 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x0007e934 mov r1, r5 | r1 = r5;
0x0007e936 mov r0, r6 | r0 = r6;
0x0007e938 bl 0x2f1dc | r0 = fcn_0002f1dc (r0, r1);
0x0007e93c cmp r0, 0 |
0x0007e93e beq 0x7e92a |
| }
0x0007e940 ldr r1, [r6, 0x18] | r1 = *((r6 + 0x18));
0x0007e942 cmp r1, 0x3f |
0x0007e944 itt gt |
| if (r1 <= 0x3f) {
0x0007e946 movgt r0, 0 | r0 = 0;
| }
| if (r1 <= 0x3f) {
0x0007e948 movgt r2, -0x80000000 | r2 = -0x80000000;
| }
| if (r1 <= 0x3f) {
0x0007e94c bgt 0x7e964 |
0x0007e94e movs r0, 1 | r0 = 1;
0x0007e950 sub.w r2, r1, 0x20 | r2 = r1 - 0x20;
0x0007e954 rsb.w r3, r1, 0x20 | r3 = 0x20 - r1;
0x0007e958 lsl.w r2, r0, r2 | r2 = r0 << r2;
0x0007e95c lsr.w r3, r0, r3 | r3 = r0 >> r3;
0x0007e960 lsls r0, r1 | r0 <<= r1;
0x0007e962 orrs r2, r3 | r2 |= r3;
| }
0x0007e964 and.w r3, r0, sb | r3 = r0 & sb;
0x0007e968 and.w ip, r2, sl |
0x0007e96c orrs.w r3, r3, ip | r3 |= ip;
| if (r3 != r3) {
0x0007e970 bne 0x7e92a | goto label_0;
| }
0x0007e972 ldr r3, [r6] | r3 = *(r6);
0x0007e974 orr.w sl, r2, sl | sl = r2 | sl;
0x0007e978 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0007e97a orr.w sb, r0, sb | sb = r0 | sb;
0x0007e97e strh.w r1, [r2, r8, lsl 1] | offset_0 = r8 << 1;
| *((r2 + offset_0)) = r1;
0x0007e982 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0007e984 ldrd r1, r3, [r3, 0xc] | __asm ("ldrd r1, r3, [r3, 0xc]");
0x0007e988 lsls r0, r2, 0x15 | r0 = r2 << 0x15;
0x0007e98a mov r0, fp | r0 = fp;
0x0007e98c itet mi |
| if (r0 >= r2) {
0x0007e98e movmi r2, r1 | r2 = r1;
| }
| if (r0 < r2) {
0x0007e990 movpl r2, r3 | r2 = r3;
| }
| if (r0 >= r2) {
0x0007e992 movmi r1, r3 | r1 = r3;
| }
0x0007e994 bl 0x46074 | r0 = fcn_00046074 (r0, r1, r2);
0x0007e998 cmp r0, 0 |
| if (r0 == 0) {
0x0007e99a beq.w 0x7edfc | goto label_28;
| }
0x0007e99e ldr r3, [r0] | r3 = *(r0);
| label_12:
0x0007e9a0 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x0007e9a2 adds r6, 0x30 | r6 += 0x30;
0x0007e9a4 cmp r7, r6 |
0x0007e9a6 str.w r3, [r2, r8, lsl 2] | __asm ("str.w r3, [r2, r8, lsl 2]");
0x0007e9aa add.w r8, r8, 1 | r8++;
| if (r7 > r6) {
0x0007e9ae bhi 0x7e930 | goto label_1;
| }
| label_27:
0x0007e9b0 ldrd sl, sb, [sp, 0x44] | __asm ("ldrd sl, sb, [var_44h]");
0x0007e9b4 lsl.w r7, r8, 1 | r7 = r8 << 1;
0x0007e9b8 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x0007e9ba lsl.w r6, r8, 2 | r6 = r8 << 2;
| label_18:
0x0007e9be ldr r3, [sp, 0x24] | r3 = x;
0x0007e9c0 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0007e9c2 ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x0007e9c4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007e9c6 cmp r3, 0 |
| if (r3 <= 0) {
0x0007e9c8 ble 0x7ea10 | goto label_29;
| }
0x0007e9ca ldr.w r7, [pc, 0x498] |
0x0007e9ce movs r3, 0 | r3 = 0;
0x0007e9d0 add r7, pc |
0x0007e9d2 add.w r7, r7, 0x780 | r7 = 0xfdfba;
| do {
0x0007e9d6 rsb.w r6, r3, 0x20 | r6 = 0x20 - r3;
0x0007e9da lsr.w r2, sb, r3 | r2 = sb >> r3;
0x0007e9de lsl.w r6, r4, r6 | r6 = r4 << r6;
0x0007e9e2 orrs r2, r6 | r2 |= r6;
0x0007e9e4 sub.w r6, r3, 0x20 | r6 = r3 - 0x20;
0x0007e9e8 lsr.w r6, r4, r6 | r6 = r4 >> r6;
0x0007e9ec orrs r2, r6 | r2 |= r6;
0x0007e9ee lsls r2, r2, 0x1f | r2 <<= 0x1f;
0x0007e9f0 it mi |
| if (r2 < r2) {
0x0007e9f2 strhmi r3, [r0, r8, lsl 1] | __asm ("strhmi r3, [r0, r8, lsl 1]");
| }
0x0007e9f6 add.w r3, r3, 1 | r3++;
0x0007e9fa itt mi |
| if (r2 >= r2) {
0x0007e9fc strmi r7, [r1, r8, lsl 2] | offset_1 = r8 << 2;
| *((r1 + offset_1)) = r7;
| }
| if (r2 < r2) {
0x0007ea00 add.w r8, r8, 1 | r8++;
| }
0x0007ea04 cmp sl, r3 |
0x0007ea06 bne 0x7e9d6 |
| } while (sl != r3);
0x0007ea08 lsl.w r7, r8, 1 | r7 = r8 << 1;
0x0007ea0c lsl.w r6, r8, 2 | r6 = r8 << 2;
| label_29:
0x0007ea10 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0007ea12 cmp r3, 0 |
| if (r3 < 0) {
0x0007ea14 blt.w 0x7ed2c | goto label_30;
| }
| label_8:
0x0007ea18 ldr.w r4, [pc, 0x44c] |
0x0007ea1c movw ip, 0xffff | ip = 0xffff;
0x0007ea20 ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
0x0007ea24 strh.w ip, [r0, r7] | *((r0 + r7)) = ip;
0x0007ea26 stm r0!, {r0, r1, r2} | *(r0!) = r0;
| *((r0! + 4)) = r1;
| *((r0! + 8)) = r2;
0x0007ea28 add r4, pc |
0x0007ea2a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0007ea2c add.w r4, r4, 0x780 | r4 = 0xfe014;
0x0007ea30 adds r5, r2, 1 | r5 = r2 + 1;
0x0007ea32 str r4, [r1, r6] | *((r1 + r6)) = r4;
0x0007ea34 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0007ea36 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0007ea38 str.w r5, [fp, 0x28] | __asm ("str.w r5, [arg_28h]");
0x0007ea3c str r2, [r1, 8] | *((r1 + 8)) = r2;
0x0007ea3e movs r1, 0 | r1 = 0;
0x0007ea40 str r1, [sp] | *(sp) = r1;
0x0007ea42 mov r0, r4 | r0 = r4;
0x0007ea44 movs r1, 0x74 | r1 = 0x74;
0x0007ea46 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007ea4a ldr r1, [sp, 0x24] | r1 = x;
0x0007ea4c mov r0, fp | r0 = fp;
0x0007ea4e bl 0x45f30 | fcn_00045f30 (r0);
0x0007ea52 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007ea54 mov r0, r4 | r0 = r4;
0x0007ea56 ldr.w r1, [pc, 0x414] |
0x0007ea5a ldr r2, [r3] | r2 = *(r3);
0x0007ea5c add r1, pc | r1 = 0xfd8ce;
0x0007ea5e bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0007ea62 ldr.w r3, [fp] | r3 = *(fp);
0x0007ea66 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007ea68 ands r3, r3, 0x80000 | r3 &= 0x80000;
| if (r3 == r3) {
0x0007ea6c beq.w 0x7ed70 | goto label_31;
| }
| label_9:
0x0007ea70 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0007ea72 ldr r3, [r3] | r3 = *(r3);
0x0007ea74 ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x0007ea76 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007ea78 ldrb.w r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x0007ea7c lsl.w sl, r3, 6 | sl = r3 << 6;
0x0007ea80 add.w r6, r5, sl | r6 = r5 + sl;
0x0007ea84 ldrb.w r3, [r6, 0x2d] | r3 = *((r6 + 0x2d));
0x0007ea88 ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 != r3) {
0x0007ea8c bne.w 0x7ecc4 | goto label_32;
| }
0x0007ea90 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0007ea92 movs r1, 0x23 | r1 = 0x23;
0x0007ea94 str r3, [sp] | *(sp) = r3;
0x0007ea96 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0007ea98 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0007ea9a str r3, [sp, 0x10] | var_10h = r3;
0x0007ea9c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007eaa0 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007eaa2 mov r4, r0 | r4 = r0;
0x0007eaa4 cmp r1, 0 |
| if (r1 == 0) {
0x0007eaa6 beq.w 0x7ed12 | goto label_33;
| }
| label_5:
0x0007eaaa ldr.w r2, [fp, 0x38] | r2 = *(arg_38h);
0x0007eaae movs r3, 0x10 | r3 = 0x10;
0x0007eab0 mov r0, fp | r0 = fp;
0x0007eab2 add.w sb, r2, -1 | sb = r2 + -1;
0x0007eab6 mov r2, sb | r2 = sb;
0x0007eab8 str.w sb, [fp, 0x38] | __asm ("str.w sb, [arg_38h]");
0x0007eabc bl 0x7dcb8 | fcn_0007dcb8 (r0, r1, r2, r3);
0x0007eac0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0007eac2 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x0007eac4 orr r3, r3, 0x20000 | r3 |= 0x20000;
0x0007eac8 str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x0007eaca ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x0007eace cmp r3, 0 |
| if (r3 == 0) {
0x0007ead0 beq.w 0x7ed20 | goto label_34;
| }
| label_6:
0x0007ead4 subs r3, 1 | r3--;
0x0007ead6 uxtb r3, r3 | r3 = (int8_t) r3;
0x0007ead8 strb.w r3, [fp, 0x13] | *(arg_13h) = r3;
0x0007eadc adds r3, 0x26 | r3 += 0x26;
0x0007eade ldr.w r7, [fp, r3, lsl 2] | offset_2 = r3 << 2;
| r7 = *((fp + offset_2));
| label_7:
0x0007eae2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007eae4 movs r6, 0 | r6 = 0;
0x0007eae6 strd r6, r6, [sp, 8] | __asm ("strd r6, r6, [var_8h]");
0x0007eaea mov r0, fp | r0 = fp;
0x0007eaec strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x0007eaf0 ldr r1, [sp, 0x24] | r1 = x;
0x0007eaf2 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0007eaf4 mov r3, r7 | r3 = r7;
0x0007eaf6 bl 0x7e074 | fcn_0007e074 (r0, r1, r2, r3, r4, r5, r6);
0x0007eaf8 invalid |
0x0007eafc str r0, [sp, 0x24] | x = r0;
0x0007eafe ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x0007eb00 cmp r2, 0 |
| if (r2 != 0) {
0x0007eb02 bne.w 0x7ee06 | goto label_35;
| }
| label_13:
0x0007eb06 movs r3, 0 | r3 = 0;
0x0007eb08 ldr r6, [sp, 0x30] | r6 = var_30h;
0x0007eb0a str r3, [sp] | *(sp) = r3;
0x0007eb0c movs r1, 0x8a | r1 = 0x8a;
0x0007eb0e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007eb10 mov r0, r6 | r0 = r6;
0x0007eb12 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0007eb14 mov r3, r7 | r3 = r7;
0x0007eb16 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007eb1a ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0007eb1c cmp r3, 0 |
| if (r3 > 0) {
0x0007eb1e ble 0x7eb30 |
0x0007eb20 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0007eb22 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0007eb26 add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0007eb2a movs r1, 0x10 | r1 = 0x10;
0x0007eb2c strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0007eb30 ldr r2, [sp, 0x20] | r2 = var_20h;
| if (r2 != 0) {
0x0007eb32 cbz r2, 0x7eb4c |
0x0007eb34 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0007eb36 mvn.w r2, sb | r2 = ~sb;
0x0007eb3a ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x0007eb3c ldrd r1, r6, [r0, 0x38] | __asm ("ldrd r1, r6, [r0, 0x38]");
0x0007eb3e asrs r6, r1, 0x18 | r6 = r1 >> 0x18;
0x0007eb40 cmn r6, r1 |
| if (r6 < r1) {
0x0007eb42 bmi.w 0x7ee32 | goto label_36;
| }
0x0007eb46 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x0007eb48 str.w r3, [r1, r2, lsl 2] | __asm ("str.w r3, [r1, r2, lsl 2]");
| }
| label_17:
0x0007eb4c add.w r3, r5, sl | r3 = r5 + sl;
0x0007eb50 ldrb.w r1, [r3, 0x2d] | r1 = *((r3 + 0x2d));
0x0007eb54 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007eb56 ands r1, r1, 0x20 | r1 &= 0x20;
0x0007eb5a ldr r3, [r3, 4] | r3 = *((r3 + 4));
| if (r1 == r1) {
0x0007eb5c beq 0x7ec48 | goto label_37;
| }
0x0007eb5e ldr r2, [sp, 0x10] | r2 = var_10h;
0x0007eb60 ldr r6, [sp, 0x30] | r6 = var_30h;
0x0007eb62 ldr r0, [sp, 0x24] | r0 = x;
0x0007eb64 cmp r2, 0 |
0x0007eb66 it lt |
| if (r2 >= 0) {
0x0007eb68 ldrlt r2, [sp, 0x30] | r2 = var_30h;
| }
0x0007eb6a add r0, r8 | r0 += r8;
0x0007eb6c ittt lt |
| if (r2 >= 0) {
0x0007eb6e ldrlt r2, [r2, 0x6c] | r2 = *((r2 + 0x6c));
| }
| if (r2 >= 0) {
0x0007eb70 addlt r2, r2, -1 | r2 += -1;
| }
| if (r2 < 0) {
0x0007eb74 str r2, [sp, 0x10] | var_10h = r2;
| }
0x0007eb76 ldr r2, [r6] | r2 = *(r6);
0x0007eb78 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0007eb7c cmp r2, 0 |
| if (r2 != 0) {
0x0007eb7e bne.w 0x7ee24 | goto label_38;
| }
0x0007eb82 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0007eb84 add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x0007eb88 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0007eb8a add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
| label_15:
0x0007eb8e str r0, [r2, 8] | *((r2 + 8)) = r0;
0x0007eb90 add r5, sl | r5 += sl;
0x0007eb92 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0007eb94 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0007eb96 str r2, [sp, 4] | var_4h = r2;
0x0007eb98 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0007eb9a str r2, [sp] | *(sp) = r2;
0x0007eb9c mov r2, r4 | r2 = r4;
0x0007eb9e ldr.w r1, [fp, 8] | r1 = *(arg_88h);
0x0007eba2 ldr.w r0, [fp] | r0 = *(fp);
0x0007eba6 bl 0x29e3c | fcn_00029e3c (r0, r1, r2, r3, r4, r5);
0x0007eba8 invalid |
0x0007ebac mov r1, r4 | r1 = r4;
0x0007ebae mov r0, r6 | r0 = r6;
0x0007ebb0 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0007ebb4 ldrb.w r3, [r5, 0x2d] | r3 = *((r5 + 0x2d));
0x0007ebb8 bfc r3, 5, 1 | value_3 = BIT_MASK (1, );
| value_3 = ~value_3;
| r3 &= value_3;
0x0007ebbc strb.w r3, [r5, 0x2d] | *((r5 + 0x2d)) = r3;
0x0007ebc0 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0007ebc2 b 0x7ec6e | goto label_39;
| label_22:
0x0007ebc4 ldr.w r8, [r4] | r8 = *(r4);
0x0007ebc8 mov r1, r5 | r1 = r5;
0x0007ebca mov r0, r8 | r0 = r8;
0x0007ebcc bl 0x35e00 | fcn_00035e00 (r0, r1);
0x0007ebce invalid |
| if (r2 == 0) {
0x0007ebd2 beq.w 0x7e814 | goto label_2;
| }
0x0007ebd6 cmp.w r8, 0 |
| if (r8 != 0) {
0x0007ebda beq 0x7ebec |
0x0007ebdc ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007ebde mov r1, r8 | r1 = r8;
0x0007ebe0 mov r2, r6 | r2 = r6;
0x0007ebe2 ldr r0, [r3] | r0 = *(r3);
0x0007ebe4 mov r3, r6 | r3 = r6;
0x0007ebe6 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0007ebea mov r8, r0 | r8 = r0;
| }
0x0007ebec ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007ebee mov r2, r8 | r2 = r8;
0x0007ebf0 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0007ebf2 bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x0007ebf6 str r0, [sp, 0x20] | var_20h = r0;
0x0007ebf8 b 0x7e814 | goto label_2;
| label_24:
0x0007ebfa ldr r3, [sp, 0x24] | r3 = x;
0x0007ebfc ldr r1, [sp, 0x28] | r1 = var_28h;
0x0007ebfe add.w sb, r3, 1 | sb = r3 + 1;
0x0007ec02 ldr r0, [r1] | r0 = *(r1);
0x0007ec04 mov r2, sb | r2 = sb;
0x0007ec06 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0007ec08 bl 0x38274 | r0 = fcn_00038274 (r0, r1, r2);
0x0007ec0c cmp r0, 0 |
| if (r0 != 0) {
0x0007ec0e bne.w 0x7ee2c | goto label_40;
| }
0x0007ec12 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0007ec14 orr.w sl, r8, sl | sl = r8 | sl;
0x0007ec18 ldr r2, [sp, 0x24] | r2 = x;
0x0007ec1a orr.w fp, r6, fp |
0x0007ec1e str.w sb, [sp, 0x24] | __asm ("str.w sb, [x]");
0x0007ec22 mov.w sb, 1 | sb = 1;
0x0007ec26 ldr r3, [r1, 0x34] | r3 = *((r1 + 0x34));
0x0007ec28 str.w r4, [r3, r2, lsl 2] | __asm ("str.w r4, [r3, r2, lsl 2]");
0x0007ec2c b 0x7e866 | goto label_3;
| label_23:
0x0007ec2e ldr r1, [sp, 0x34] | r1 = var_34h;
0x0007ec30 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0007ec32 lsls r3, r0, 0xd | r3 = r0 << 0xd;
0x0007ec34 mov.w r0, 0x11c | r0 = 0x11c;
0x0007ec38 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0007ec3a ldr.w r3, [r2, r3, lsl 2] | offset_4 = r3 << 2;
| r3 = *((r2 + offset_4));
0x0007ec3e ldr r2, [r1] | r2 = *(r1);
0x0007ec40 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0007ec42 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x0007ec46 b 0x7e852 | goto label_4;
| label_37:
0x0007ec48 ldr r5, [sp, 0x30] | r5 = var_30h;
0x0007ec4a mov r2, r3 | r2 = r3;
0x0007ec4c str r1, [sp] | *(sp) = r1;
0x0007ec4e adds r3, r4, 1 | r3 = r4 + 1;
0x0007ec50 movs r1, 0x26 | r1 = 0x26;
0x0007ec52 mov r0, r5 | r0 = r5;
0x0007ec54 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007ec58 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0007ec5a cmp r3, 0 |
| if (r3 > 0) {
0x0007ec5c ble 0x7ec6e |
0x0007ec5e ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x0007ec60 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0007ec64 add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0007ec68 movs r1, 3 | r1 = 3;
0x0007ec6a strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
| label_39:
0x0007ec6e ldr r2, [sp, 0x30] | r2 = var_30h;
0x0007ec70 cmp r4, 0 |
0x0007ec72 it lt |
| if (r4 >= 0) {
0x0007ec74 addlt r4, r3, -1 | r4 = r3 + -1;
| }
0x0007ec78 ldr r2, [r2] | r2 = *(r2);
0x0007ec7a ldrb.w r1, [r2, 0x57] | r1 = *((r2 + 0x57));
0x0007ec7e cmp r1, 0 |
| if (r1 == 0) {
0x0007ec80 beq.w 0x7eda8 | goto label_41;
| }
0x0007ec84 ldr r2, [pc, 0x1e8] |
0x0007ec86 add r2, pc | r2 = 0xfdafa;
0x0007ec88 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x0007ec8a cmp r7, 0 |
| if (r7 != 0) {
0x0007ec8c bne.w 0x7ee1a | goto label_42;
| }
| label_10:
0x0007ec90 ldr r2, [pc, 0x1e0] |
0x0007ec92 add r2, pc | r2 = 0xfdb0a;
0x0007ec94 adds r2, 4 | r2 += 4;
| label_11:
0x0007ec96 str r3, [r2, 8] | *((r2 + 8)) = r3;
| label_16:
0x0007ec98 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0007ec9a cmp r3, 0 |
| if (r3 == 0) {
0x0007ec9c beq 0x7ed8e | goto label_43;
| }
0x0007ec9e ldr r2, [pc, 0x1d8] |
0x0007eca0 ldr r3, [pc, 0x1b4] | r3 = *(0x7ee58);
0x0007eca2 add r2, pc | r2 = 0xfdb20;
0x0007eca4 ldr r3, [r2, r3] | r3 = *(0xfdb20);
0x0007eca6 ldr r2, [r3] | r2 = *(0xfdb20);
0x0007eca8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0007ecaa eors r2, r3 | r2 ^= r3;
0x0007ecac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007ecb0 bne.w 0x7ee4e | goto label_44;
| }
0x0007ecb4 ldr.w r0, [fp] | r0 = *(fp);
0x0007ecb8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007ecba add sp, 0x5c |
0x0007ecbc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007ecc0 b.w 0x30c30 | void (*0x30c30)() ();
| label_32:
0x0007ecc4 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x0007ecc8 movs r7, 0 | r7 = 0;
0x0007ecca ldr r4, [r6, 0x24] | r4 = *((r6 + 0x24));
0x0007eccc mov r3, r7 | r3 = r7;
0x0007ecce mov r2, r7 | r2 = r7;
0x0007ecd0 movs r1, 0x47 | r1 = 0x47;
0x0007ecd2 mov r0, sb | r0 = sb;
0x0007ecd4 str r7, [sp] | *(sp) = r7;
0x0007ecd6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007ecda ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007ecdc mov r2, r4 | r2 = r4;
0x0007ecde movs r1, 0xa | r1 = 0xa;
0x0007ece0 str r0, [sp, 0x10] | var_10h = r0;
0x0007ece2 mov r0, sb | r0 = sb;
0x0007ece4 str r3, [sp] | *(sp) = r3;
0x0007ece6 mov r3, r7 | r3 = r7;
0x0007ece8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007ecec mov r2, r4 | r2 = r4;
0x0007ecee mov r3, r7 | r3 = r7;
0x0007ecf0 movs r1, 0xb | r1 = 0xb;
0x0007ecf2 mov r0, sb | r0 = sb;
0x0007ecf4 str r7, [sp] | *(sp) = r7;
0x0007ecf6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007ecfa ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0007ecfc mov r4, r0 | r4 = r0;
0x0007ecfe ldr r1, [pc, 0x17c] |
0x0007ed00 mov r0, sb | r0 = sb;
0x0007ed02 ldr r2, [r3] | r2 = *(r3);
0x0007ed04 add r1, pc | r1 = 0xfdb86;
0x0007ed06 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0007ed0a ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007ed0c cmp r1, 0 |
| if (r1 != 0) {
0x0007ed0e bne.w 0x7eaaa | goto label_5;
| }
| label_33:
0x0007ed12 ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x0007ed16 ldr.w sb, [sp, 0x20] | sb = var_20h;
0x0007ed1a cmp r3, 0 |
| if (r3 != 0) {
0x0007ed1c bne.w 0x7ead4 | goto label_6;
| }
| label_34:
0x0007ed20 ldr.w r7, [fp, 0x2c] | r7 = *(arg_2ch);
0x0007ed24 adds r7, 1 | r7++;
0x0007ed26 str.w r7, [fp, 0x2c] | __asm ("str.w r7, [arg_2ch]");
0x0007ed2a b 0x7eae2 | goto label_7;
| label_30:
0x0007ed2c ldr r5, [sp, 0x34] | r5 = var_34h;
0x0007ed2e ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x0007ed32 cmp r3, 0x3f |
| if (r3 <= 0x3f) {
0x0007ed34 ble.w 0x7ea18 | goto label_8;
| }
0x0007ed38 ldr r6, [pc, 0x144] |
0x0007ed3a add.w r4, r0, r8, lsl 1 | r4 = r0 + (r8 << 1);
0x0007ed3e add.w r2, r1, r8, lsl 2 | r2 = r1 + (r8 << 2);
0x0007ed42 movs r3, 0x3f | r3 = 0x3f;
0x0007ed44 mov ip, r5 |
0x0007ed46 add r6, pc |
0x0007ed48 add.w r6, r6, 0x780 | r6 = 0xfe34a;
| do {
0x0007ed4c strh r3, [r4], 2 | *(r4) = r3;
| r4 += 2;
0x0007ed50 mov r7, r3 | r7 = r3;
0x0007ed52 ldrsh.w r5, [ip, 0x22] | r5 = *((ip + 0x22));
0x0007ed56 adds r3, 1 | r3++;
0x0007ed58 str r6, [r2], 4 | *(r2) = r6;
| r2 += 4;
0x0007ed5c cmp r5, r3 |
0x0007ed5e bgt 0x7ed4c |
| } while (r5 > r3);
0x0007ed60 sub.w r8, r8, 0x3e | r8 -= 0x3e;
0x0007ed64 add r8, r7 | r8 += r7;
0x0007ed66 lsl.w r7, r8, 1 | r7 = r8 << 1;
0x0007ed6a lsl.w r6, r8, 2 | r6 = r8 << 2;
0x0007ed6e b 0x7ea18 | goto label_8;
| label_31:
0x0007ed70 str r3, [sp] | *(sp) = r3;
0x0007ed72 movs r1, 0x4d | r1 = 0x4d;
0x0007ed74 ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x0007ed78 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0007ed7a ldr r0, [sp, 0x30] | r0 = var_30h;
0x0007ed7c adds r3, 1 | r3++;
0x0007ed7e str.w r3, [fp, 0x2c] | __asm ("str.w r3, [arg_2ch]");
0x0007ed82 str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0007ed84 movw r2, 0x2710 | r2 = 0x2710;
0x0007ed88 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0007ed8c b 0x7ea70 | goto label_9;
| label_43:
0x0007ed8e ldr r2, [pc, 0xf4] |
0x0007ed90 ldr r3, [pc, 0xc4] | r3 = *(0x7ee58);
0x0007ed92 add r2, pc | r2 = 0xfdc1c;
0x0007ed94 ldr r3, [r2, r3] | r3 = *(0xfdc1c);
0x0007ed96 ldr r2, [r3] | r2 = *(0xfdc1c);
0x0007ed98 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0007ed9a eors r2, r3 | r2 ^= r3;
0x0007ed9c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007eda0 bne 0x7ee4e | goto label_44;
| }
0x0007eda2 add sp, 0x5c |
0x0007eda4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_41:
0x0007eda8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0007edaa add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0007edae ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0007edb0 add.w r4, r2, r4, lsl 3 | r4 = r2 + (r4 << 3);
0x0007edb4 str r3, [r4, 8] | *((r4 + 8)) = r3;
| if (r7 == 0) {
0x0007edb6 cbz r7, 0x7ede4 | goto label_45;
| }
0x0007edb8 ldrb.w r0, [fp, 0x13] | r0 = *(arg_13h);
0x0007edbc cmp r0, 7 |
| if (r0 > 7) {
0x0007edbe bhi 0x7ede4 | goto label_45;
| }
| label_14:
0x0007edc0 adds r2, r0, 1 | r2 = r0 + 1;
0x0007edc2 adds r0, 0x26 | r0 += 0x26;
0x0007edc4 strb.w r2, [fp, 0x13] | *(arg_13h) = r2;
0x0007edc8 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0007edca str.w r7, [fp, r0, lsl 2] | __asm ("str.w r7, [fp, r0, lsl 2]");
0x0007edce cmp r2, 0 |
0x0007edd0 itt lt |
| if (r2 >= 0) {
0x0007edd2 addlt r2, r3, -1 | r2 = r3 + -1;
| }
| if (r2 < 0) {
0x0007edd6 str r2, [sp, 0x40] | var_40h = r2;
| }
0x0007edd8 cmp r1, 0 |
| if (r1 != 0) {
0x0007edda bne.w 0x7ec90 | goto label_10;
| }
0x0007edde ldr r2, [sp, 0x30] | r2 = var_30h;
0x0007ede0 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0007ede2 b 0x7edf0 | goto label_46;
| label_45:
0x0007ede4 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0007ede6 cmp r1, 0 |
0x0007ede8 itt lt |
| if (r1 >= 0) {
0x0007edea addlt r1, r3, -1 | r1 = r3 + -1;
| }
| if (r1 < 0) {
0x0007edee str r1, [sp, 0x40] | var_40h = r1;
| }
| label_46:
0x0007edf0 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0007edf2 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x0007edf6 add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0007edfa b 0x7ec96 | goto label_11;
| label_28:
0x0007edfc ldr r3, [pc, 0x88] |
0x0007edfe add r3, pc |
0x0007ee00 add.w r3, r3, 0x780 | r3 = 0xfe40a;
0x0007ee04 b 0x7e9a0 | goto label_12;
| label_35:
0x0007ee06 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007ee08 movs r1, 0xb4 | r1 = 0xb4;
0x0007ee0a ldrh r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0007ee0c str r0, [sp] | *(sp) = r0;
0x0007ee0e ldr r0, [sp, 0x30] | r0 = var_30h;
0x0007ee10 str r3, [sp, 4] | var_4h = r3;
0x0007ee12 mov r3, r6 | r3 = r6;
0x0007ee14 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0007ee18 b 0x7eb06 | goto label_13;
| label_42:
0x0007ee1a ldrb.w r0, [fp, 0x13] | r0 = *(arg_13h);
0x0007ee1e cmp r0, 7 |
| if (r0 < 7) {
0x0007ee20 bls 0x7edc0 | goto label_14;
| }
0x0007ee22 b 0x7ec90 | goto label_10;
| label_38:
0x0007ee24 ldr r2, [pc, 0x64] |
0x0007ee26 add r2, pc | r2 = 0xfdcb6;
0x0007ee28 adds r2, 4 | r2 += 4;
0x0007ee2a b 0x7eb8e | goto label_15;
| label_40:
0x0007ee2c ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0007ee30 b 0x7ec98 | goto label_16;
| label_36:
0x0007ee32 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0007ee34 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0007ee38 b 0x7eb4c | goto label_17;
| label_26:
0x0007ee3a movs r6, 0 | r6 = 0;
0x0007ee3c mov r7, r6 | r7 = r6;
0x0007ee3e mov r8, r6 | r8 = r6;
0x0007ee40 b 0x7e9be | goto label_18;
| label_21:
0x0007ee42 mov.w ip, -1 |
0x0007ee46 mov r3, r6 | r3 = r6;
0x0007ee48 mov r4, ip | r4 = ip;
0x0007ee4a str r6, [sp, 0x20] | var_20h = r6;
0x0007ee4c b 0x7e880 | goto label_19;
| label_44:
0x0007ee4e blx 0x6430 | fcn_00006430 ();
0x0007ee52 nop |
0x0007ee54 push {r1, r2, r5, r6, r7, lr} |
0x0007ee56 movs r6, r0 | r6 = r0;
0x0007ee58 lsls r4, r6, 8 | r4 = r6 << 8;
0x0007ee5a movs r0, r0 |
0x0007ee5c ldr r6, [r7] | r6 = *(r7);
0x0007ee5e movs r5, r0 | r5 = r0;
0x0007ee60 str r4, [r3, 0x74] | *((r3 + 0x74)) = r4;
0x0007ee62 movs r5, r0 | r5 = r0;
0x0007ee64 b 0x7e8e0 | goto label_20;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7ee90 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007ee90 () | void fcn_0007ee90 (int16_t arg_8h, int16_t arg_1f0h, int16_t arg_1f4h, int16_t arg_1f8h, int16_t arg_1fch, arithmetic arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_44h;
| arithmetic var_4ch;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_b0h;
| int32_t var_b4h;
| int32_t var_b4h_2;
| int16_t var_bch;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int32_t var_cch_2;
| int32_t var_d4h;
| int32_t var_d4h_2;
| arithmetic x;
| int32_t var_114h_2;
| int32_t var_11ch;
| int32_t var_11ch_2;
| int16_t var_124h;
| int16_t var_128h;
| int16_t var_12ch;
| int16_t var_148h;
| int16_t var_158h;
| int16_t var_15ch;
| int16_t var_160h;
| int16_t var_162h;
| int16_t var_164h;
| int32_t var_20h_2;
| int32_t var_20h_3;
| int16_t var_190h;
| int16_t var_1ach;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007ee90 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007ee94 mov sb, r3 | sb = r3;
0x0007ee96 vpush {d8, d9, d10} | __asm ("vpush {d8, d9, d10}");
0x0007ee9a sub sp, 0x1b4 |
0x0007ee9c ldr r4, [sp, 0x1f0] | r4 = *(arg_1f0h);
0x0007ee9e str r1, [sp, 0x34] | var_34h = r1;
0x0007eea0 ldr r1, [pc, 0x334] |
0x0007eea2 str r4, [sp, 0x4c] | var_4ch = r4;
0x0007eea4 mov r4, r2 | r4 = r2;
0x0007eea6 ldr r2, [pc, 0x334] | r2 = *(0x7f1de);
0x0007eea8 add r1, pc | r1 = 0xfe084;
0x0007eeaa str r0, [sp, 0x1c] | var_1ch = r0;
0x0007eeac ldr r7, [sp, 0x1f4] | r7 = *(arg_1f4h);
0x0007eeae ldr r2, [r1, r2] |
0x0007eeb0 add r1, sp, 0xc4 | r1 += var_c4h;
0x0007eeb2 ldr r2, [r2] | r2 = *(0xfe084);
0x0007eeb4 str r2, [sp, 0x1ac] | var_1ach = r2;
0x0007eeb6 mov.w r2, 0 | r2 = 0;
0x0007eeba str r1, [sp, 0x44] | var_44h = r1;
0x0007eebc ldrh.w r1, [sp, 0x1f8] | r1 = *(arg_1f8h);
0x0007eec0 movs r2, 0 | r2 = 0;
0x0007eec2 strd r2, r2, [sp, 0xc4] | __asm ("strd r2, r2, [var_c4h]");
0x0007eec6 strd r2, r2, [sp, 0xcc] | __asm ("strd r2, r2, [var_cch]");
0x0007eeca strd r2, r2, [sp, 0xd4] | __asm ("strd r2, r2, [var_d4h]");
0x0007eece str r1, [sp, 0x5c] | var_5ch = r1;
0x0007eed0 ldr r2, [r0] | r2 = *(r0);
0x0007eed2 ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x0007eed4 str r2, [sp, 0x54] | var_54h = r2;
0x0007eed6 str r1, [sp, 0x20] | var_20h = r1;
| if (r3 != 0) {
0x0007eed8 cbz r3, 0x7eee4 |
0x0007eeda ldr r3, [r3] | r3 = *(r3);
0x0007eedc cmp r3, 0x40 |
0x0007eede it ge |
| if (r3 >= 0x40) {
0x0007eee0 movge sb, 0 | sb = 0;
| goto label_27;
| }
| }
| label_27:
0x0007eee4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007eee6 ldr r3, [r3] | r3 = *(r3);
0x0007eee8 cmp r3, 0x40 |
0x0007eeea str r3, [sp, 0x58] | var_58h = r3;
| if (r3 > 0x40) {
0x0007eeec bgt.w 0x8110e | goto label_28;
| }
0x0007eef0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0007eef2 lsls r5, r3, 0x1a | r5 = r3 << 0x1a;
| if (r5 >= r3) {
0x0007eef4 bpl.w 0x7f0d0 | goto label_29;
| }
0x0007eef8 mov.w r2, 0x3a8 | r2 = 0x3a8;
0x0007eefc mov.w r5, 0x360 | r5 = 0x360;
0x0007ef00 movs r3, 1 | r3 = 1;
0x0007ef02 str r3, [sp, 0x58] | var_58h = r3;
| label_3:
0x0007ef04 ldr r6, [sp, 0x54] | r6 = var_54h;
0x0007ef06 movs r3, 0 | r3 = 0;
0x0007ef08 mov r0, r6 | r0 = r6;
0x0007ef0a bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0007ef0e ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x0007ef12 str r0, [sp, 0x28] | var_28h = r0;
0x0007ef14 str r3, [sp, 0x60] | var_60h = r3;
0x0007ef16 cmp r3, 0 |
| if (r3 != 0) {
0x0007ef18 bne.w 0x7fdc0 | goto label_30;
| }
0x0007ef1a strh r2, [r2, 0x3a] | *((r2 + 0x3a)) = r2;
0x0007ef1c ldr r6, [sp, 0x28] | r6 = var_28h;
0x0007ef1e movs r2, 0x27 | r2 = 0x27;
0x0007ef20 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007ef22 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0007ef24 str r4, [r6, 0x10] | *((r6 + 0x10)) = r4;
0x0007ef26 add r5, r6 | r5 += r6;
0x0007ef28 strd r3, sb, [sp, 0xb4] | __asm ("strd r3, sb, [var_b4h]");
0x0007ef2c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0007ef2e str r1, [sp, 0xb0] | var_b0h = r1;
0x0007ef30 vmov.i8 d18, 0xff | __asm ("vmov.i8 d18, 0xff");
0x0007ef34 str r3, [sp, 0xbc] | var_bch = r3;
0x0007ef36 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0007ef38 vldr d16, [sp, 0xb0] | __asm ("vldr d16, [sp, 0xb0]");
0x0007ef3c vldr d17, [sp, 0xb8] | __asm ("vldr d17, [sp, 0xb8]");
0x0007ef40 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0007ef42 vst1.64 {d16, d17}, [r6:0x40] | __asm ("vst1.64 {d16, d17}, [r6:0x40]");
0x0007ef46 strb.w r3, [r6, 0x30] | *((r6 + 0x30)) = r3;
0x0007ef48 adds r0, 0x30 | r0 += 0x30;
0x0007ef4a vstr d18, [r6, 0x18] | __asm ("vstr d18, [r6, 0x18]");
0x0007ef4e ldr r3, [r1, 0x38] | r3 = *((r1 + 0x38));
0x0007ef50 ldr.w r8, [sp, 0x60] | r8 = var_60h;
0x0007ef54 subs r3, 1 | r3--;
0x0007ef56 str r3, [r1, 0x38] | *((r1 + 0x38)) = r3;
0x0007ef58 vdup.32 d16, r3 | __asm ("vdup.32 d16, r3");
0x0007ef5c strh r0, [r6, 0x2c] | *((r6 + 0x2c)) = r0;
0x0007ef5e vstr d16, [r6, 0x20] | __asm ("vstr d16, [r6, 0x20]");
0x0007ef60 lsrs r0, r1, 0xc | r0 = r1 >> 0xc;
0x0007ef62 ldr r0, [sp, 0x1fc] | r0 = *(arg_1fch);
0x0007ef64 ldr.w r3, [r1, 0x88] | r3 = *((r1 + 0x88));
0x0007ef66 adds r0, 0x88 | r0 += 0x88;
0x0007ef68 mov r1, r8 | r1 = r8;
0x0007ef6a str r7, [r6, 0x14] | *((r6 + 0x14)) = r7;
0x0007ef6c strh r0, [r6, 0x2e] | *((r6 + 0x2e)) = r0;
0x0007ef6e add.w r0, r6, 0x31 | r0 = r6 + 0x31;
0x0007ef72 str r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
0x0007ef74 blx 0x62ec | fcn_000062ec ();
0x0007ef78 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0007ef7a add.w r0, r6, 0x300 | r0 = r6 + 0x300;
0x0007ef7e mov r1, r8 | r1 = r8;
0x0007ef80 str r0, [sp, 0x68] | var_68h = r0;
0x0007ef82 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0007ef86 lsls r2, r2, 5 | r2 <<= 5;
0x0007ef88 adds r2, 0x48 | r2 += 0x48;
0x0007ef8a blx 0x62ec | fcn_000062ec ();
0x0007ef8e add.w r3, r6, 0x1fc | r3 = r6 + 0x1fc;
0x0007ef92 vldr d17, [pc, 0x234] | __asm ("vldr d17, [0x0007f1cc]");
0x0007ef96 mov r1, r4 | r1 = r4;
0x0007ef98 mov r4, r6 | r4 = r6;
0x0007ef9a vst1.32 {d17}, [r3] | __asm ("vst1.32 {d17}, [r3]");
0x0007ef9e add.w r2, r5, 0x3c | r2 = r5 + 0x3c;
0x0007efa2 add.w r3, r4, 0x64 | r3 = r4 + 0x64;
0x0007efa6 str r2, [r5, 0x34] | *((r5 + 0x34)) = r2;
0x0007efa8 vldr d16, [pc, 0x224] | __asm ("vldr d16, [0x0007f1d4]");
0x0007efac movs r2, 3 | r2 = 3;
0x0007efae strh r2, [r5, 0x30] | *((r5 + 0x30)) = r2;
0x0007efb0 add.w r0, r4, 0x58 | r0 = r4 + 0x58;
0x0007efb4 strh.w r8, [r5, 0x2c] | *((r5 + 0x2c)) = r8;
0x0007efb8 movs r2, 0x2c | r2 = 0x2c;
0x0007efba str.w r8, [r5, 0x28] | __asm ("str.w r8, [r5, 0x28]");
0x0007efbe str r4, [r4, 0x58] | *((r4 + 0x58)) = r4;
0x0007efc0 strb.w r8, [r4, 0x61] | *((r4 + 0x61)) = r8;
0x0007efc4 str.w r8, [r4, 0x5c] | __asm ("str.w r8, [r4, 0x5c]");
0x0007efc8 str.w r8, [r4, 0x6c] | __asm ("str.w r8, [r4, 0x6c]");
0x0007efcc vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0007efd0 add.w r3, r4, 0x78 | r3 = r4 + 0x78;
0x0007efd4 str r3, [r4, 0x70] | *((r4 + 0x70)) = r3;
0x0007efd6 str r6, [sp, 0xc4] | var_c4h = r6;
0x0007efd8 mov r6, r8 | r6 = r8;
0x0007efda str r5, [sp, 0xcc] | var_cch = r5;
0x0007efdc str r0, [sp, 0x38] | var_38h = r0;
0x0007efde str r0, [sp, 0xc8] | var_c8h = r0;
0x0007efe0 bl 0x38d78 | fcn_00038d78 (r0, r1, r2);
0x0007efe4 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0007efe6 cmp r3, 0 |
| if (r3 != 0) {
0x0007efe8 bne.w 0x7fc62 | goto label_31;
| }
0x0007efec cmp.w sb, 0 |
| if (sb != 0) {
0x0007eff0 beq 0x7effa |
0x0007eff2 ldr.w r3, [sb] | r3 = *(sb);
0x0007eff6 strb.w r3, [r4, 0x31] | *((r4 + 0x31)) = r3;
| }
0x0007effa ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0007effc lsls r4, r3, 0x17 | r4 = r3 << 0x17;
| if (r4 < r3) {
0x0007effe bmi.w 0x7fe44 | goto label_32;
| }
0x0007f000 strh r1, [r4, 0x38] | *((r4 + 0x38)) = r1;
| label_11:
0x0007f002 ldr r2, [pc, 0x1dc] |
0x0007f004 movs r1, 0 | r1 = 0;
0x0007f006 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0007f008 add r2, pc | r2 = 0xfe1ee;
0x0007f00a bl 0x4ed48 | fcn_0004ed48 (r0, r1);
| label_6:
0x0007f00e ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007f010 ldr r4, [r3, 0x64] | r4 = *((r3 + 0x64));
0x0007f012 subs r4, 1 | r4--;
0x0007f014 it pl |
| if (r4 >= 1) {
0x0007f016 ldrdpl r6, r5, [sp, 0x34] | __asm ("ldrdpl r6, r5, [var_34h]");
| }
| if (r4 < 1) {
0x0007f01a bmi 0x7f02c | goto label_33;
| }
| do {
0x0007f01c mov r2, r4 | r2 = r4;
0x0007f01e mov r0, r6 | r0 = r6;
0x0007f020 subs r4, 1 | r4--;
0x0007f022 mov r1, r5 | r1 = r5;
0x0007f024 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0007f028 adds r0, r4, 1 | r0 = r4 + 1;
0x0007f02a bne 0x7f01c |
| } while (r0 != r4);
| if (r7 != 0) {
| label_33:
0x0007f02c cbz r7, 0x7f03c |
0x0007f02e ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
| if (r0 == 0) {
0x0007f030 cbz r0, 0x7f03c | goto label_8;
| }
0x0007f032 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0007f034 ands r2, r3, 9 | r2 = r3 & 9;
| if (r2 == r3) {
0x0007f038 beq.w 0x7fdd2 | goto label_34;
| }
| }
| label_8:
0x0007f03c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007f03e ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0007f040 str r3, [sp, 0x64] | var_64h = r3;
0x0007f042 cmp r3, 0 |
| if (r3 != 0) {
0x0007f044 bne 0x7f13c | void (*0x7f13c)() ();
| }
0x0007f046 ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x0007f048 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0007f04a cmp r3, 0 |
| if (r3 <= 0) {
0x0007f04c ble.w 0x7f1f0 | goto label_35;
| }
0x0007f050 ldr r7, [pc, 0x190] |
0x0007f052 ldr.w r8, [pc, 0x194] | r8 = *(0x0007f1e8);
0x0007f056 ldr r5, [sp, 0x64] | r5 = var_64h;
0x0007f058 add r7, pc | r7 = 0xfe240;
0x0007f05a ldr.w sl, [sp, 0x28] | sl = var_28h;
0x0007f05e mov fp, r7 |
0x0007f060 add r8, pc | r8 += pc;
0x0007f062 ldr r7, [sp, 0x58] | r7 = var_58h;
0x0007f064 mov r6, r5 | r6 = r5;
0x0007f066 b 0x7f0a0 | goto label_36;
| label_1:
0x0007f068 str r3, [sp, 0x128] | var_128h = r3;
0x0007f06a add r0, sp, 0x114 | r0 += x;
0x0007f06c strd r3, fp, [sp, 0x114] | __asm ("strd r3, fp, [x]");
0x0007f070 strd r8, r3, [sp, 0x11c] | __asm ("strd r8, r3, [var_11ch]");
0x0007f074 str r3, [sp, 0x124] | var_124h = r3;
0x0007f076 str r3, [sp, 0x12c] | var_12ch = r3;
0x0007f078 movs r3, 1 | r3 = 1;
0x0007f07a strh.w r3, [sp, 0x128] | var_128h = r3;
0x0007f07e cmp r1, 0 |
| if (r1 == 0) {
0x0007f080 beq.w 0x7fc5c | goto label_37;
| }
0x0007f084 bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0007f088 ldrh.w r3, [sp, 0x128] | r3 = var_128h;
0x0007f08c cmp r3, 0 |
| if (r3 != 0) {
0x0007f08e bne.w 0x7fc5c | goto label_37;
| }
0x0007f090 strh r5, [r4, 0x2e] | *((r4 + 0x2e)) = r5;
| label_2:
0x0007f092 ldr r2, [sp, 0xc8] | r2 = var_c8h;
| do {
| label_0:
0x0007f094 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0007f096 adds r6, 1 | r6++;
0x0007f098 adds r5, 0x30 | r5 += 0x30;
0x0007f09a cmp r3, r6 |
| if (r3 <= r6) {
0x0007f09c ble.w 0x7f1f0 | goto label_35;
| }
| label_36:
0x0007f0a0 ldr r4, [r2, 0x18] | r4 = *((r2 + 0x18));
0x0007f0a2 add r4, r5 | r4 += r5;
0x0007f0a4 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x0007f0a6 ands r3, r3, 2 | r3 &= 2;
0x0007f0aa bne 0x7f094 |
| } while (r3 != r3);
0x0007f0ac ldrd r1, r0, [r4, 0x28] | __asm ("ldrd r1, r0, [r4, 0x28]");
0x0007f0b0 orrs r1, r0 | r1 |= r0;
| if (r1 != r0) {
0x0007f0b2 bne 0x7f094 | goto label_0;
| }
0x0007f0b4 ldr r1, [r4] | r1 = *(r4);
0x0007f0b6 cmp r7, 0 |
| if (r7 != 0) {
0x0007f0b8 bne 0x7f068 | goto label_1;
| }
| do {
0x0007f0ba movs r3, 0x10 | r3 = 0x10;
0x0007f0bc ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x0007f0c0 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0007f0c2 bl 0x7dcb8 | fcn_0007dcb8 (r0, r1, r2, r3);
0x0007f0c6 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x0007f0c8 orr r3, r3, 4 | r3 |= 4;
0x0007f0cc strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x0007f0ce b 0x7f092 | goto label_2;
| label_29:
0x0007f0d0 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0007f0d2 subs r2, r3, 1 | r2 = r3 - 1;
0x0007f0d4 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0007f0d8 lsls r2, r2, 5 | r2 <<= 5;
0x0007f0da add.w r5, r2, 0x360 | r5 = r2 + 0x360;
0x0007f0de add.w r2, r2, 0x3a8 | r2 += 0x3a8;
0x0007f0e2 b 0x7ef04 | goto label_3;
| label_35:
0x0007f1f0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0007f1f2 lsls r6, r3, 0x17 | r6 = r3 << 0x17;
| if (r6 < r3) {
0x0007f1f4 bpl 0x7f218 |
0x0007f1f6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0007f1f8 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007f1fa ands r3, r3, 0x10 | r3 &= 0x10;
| if (r3 == r3) {
0x0007f1fe beq.w 0x7fe70 | goto label_38;
| }
0x0007f202 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0007f204 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007f206 bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x0007f20a lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0007f20c lsrs r3, r3, 0x10 | r3 >>= 0x10;
0x0007f20e str r3, [sp, 0x5c] | var_5ch = r3;
0x0007f210 ldrh r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0007f212 bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x0007f216 strh r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
| }
| label_15:
0x0007f218 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0007f21a ldr.w r8, [sp, 0xc4] | r8 = var_c4h;
0x0007f21e ldr r4, [sp, 0xcc] | r4 = var_cch;
0x0007f220 cmp r3, 1 |
0x0007f222 ldr.w r7, [r8, 4] | r7 = *((r8 + 4));
| if (r3 == 1) {
0x0007f226 beq.w 0x80ba0 | goto label_39;
| }
| label_37:
0x0007fc5c ldr r1, [r4] | r1 = *(r4);
0x0007fc5e b.w 0x7f0ba |
| } while (1);
| label_31:
0x0007fc62 ldr.w r8, [pc, 0x684] |
0x0007fc66 ldr r6, [sp, 0x34] | r6 = var_34h;
0x0007fc68 ldr.w sl, [sp, 0x60] | sl = var_60h;
0x0007fc6c add r8, pc | r8 = 0xfff5a;
0x0007fc6e str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x0007fc72 str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h]");
0x0007fc76 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x0007fc7a str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x0007fc7e str r7, [sp, 0x2c] | var_2ch = r7;
| label_5:
0x0007fc80 ldr r4, [sp, 0x28] | r4 = var_28h;
0x0007fc82 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0007fc84 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0007fc86 ldr.w r3, [r4, 0x1fc] | r3 = *((r4 + 0x1fc));
0x0007fc8a ldr r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x0007fc8c add.w r2, r2, r0, lsl 6 | r2 += (r0 << 6);
0x0007fc90 adds r0, r3, 1 | r0 = r3 + 1;
0x0007fc92 add.w r3, r4, r3, lsl 2 | r3 = r4 + (r3 << 2);
0x0007fc96 str.w r0, [r4, 0x1fc] | __asm ("str.w r0, [r4, 0x1fc]");
0x0007fc9a str.w r1, [r3, 0x200] | __asm ("str.w r1, [r3, 0x200]");
0x0007fc9c asrs r0, r0, 8 | r0 >>= 8;
0x0007fc9e ldrb.w r3, [r2, 0x2d] | r3 = *((r2 + 0x2d));
0x0007fca2 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 >= r3) {
0x0007fca4 bpl 0x7fd96 | goto label_7;
| }
0x0007fca6 ldr.w sl, [r6, 0x40] | sl = *((r6 + 0x40));
0x0007fcaa ldr r7, [r6, 0x18] | r7 = *((r6 + 0x18));
0x0007fcac cmp.w sl, 0 |
| if (sl == 0) {
0x0007fcb0 beq 0x7fd96 | goto label_7;
| }
0x0007fcb2 ldr.w r3, [sl] | r3 = *(sl);
0x0007fcb6 cmp r3, 0 |
| if (r3 <= 0) {
0x0007fcb8 ble 0x7fd96 | goto label_7;
| }
0x0007fcba movs r4, 0 | r4 = 0;
0x0007fcbc mov fp, sl |
0x0007fcbe mov sb, r4 | sb = r4;
0x0007fcc0 mov r5, sl | r5 = sl;
| label_4:
0x0007fcc2 ldrsh.w r1, [r7, 0x22] | r1 = *((r7 + 0x22));
0x0007fcc6 cmp r1, r4 |
| if (r1 <= r4) {
0x0007fcc8 ble 0x7fdb2 | goto label_40;
| }
0x0007fcca ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0007fccc add.w r2, r4, r4, lsl 1 | r2 = r4 + (r4 << 1);
0x0007fcd0 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0007fcd4 b 0x7fcde |
| while (r2 >= r2) {
0x0007fcd6 adds r4, 1 | r4++;
0x0007fcd8 adds r3, 0xc | r3 += 0xc;
0x0007fcda cmp r4, r1 |
| if (r4 == r1) {
0x0007fcdc beq 0x7fdb2 | goto label_40;
| }
0x0007fcde ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0007fce0 lsls r2, r2, 0x1e | r2 <<= 0x1e;
0x0007fce2 bpl 0x7fcd6 |
| }
0x0007fce4 cmp r1, r4 |
| if (r1 <= r4) {
0x0007fce6 ble 0x7fdb2 | goto label_40;
| }
0x0007fce8 ldr.w r0, [r8] | r0 = *(r8);
0x0007fcec movs r2, 0x34 | r2 = 0x34;
0x0007fcee movs r3, 0 | r3 = 0;
0x0007fcf0 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x0007fcf4 mov sl, r0 | sl = r0;
0x0007fcf6 cmp r0, 0 |
| if (r0 == 0) {
0x0007fcf8 beq 0x7fd96 | goto label_7;
| }
0x0007fcfa movs r2, 0x33 | r2 = 0x33;
0x0007fcfc movs r1, 0 | r1 = 0;
0x0007fcfe adds r0, 1 | r0++;
0x0007fd00 blx 0x62ec | fcn_000062ec ();
0x0007fd04 movs r3, 0xa7 | r3 = 0xa7;
0x0007fd06 sxth r0, r4 | __asm ("sxth r0, r4");
0x0007fd08 strb.w r3, [sl] | *(sl) = r3;
0x0007fd0c mov r1, r7 | r1 = r7;
0x0007fd0e ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0007fd10 adds r4, 1 | r4++;
0x0007fd12 str.w r7, [sl, 0x2c] | __asm ("str.w r7, [sl, 0x2c]");
0x0007fd16 strh.w r0, [sl, 0x20] | *((sl + 0x20)) = r0;
0x0007fd1a str.w r3, [sl, 0x1c] | __asm ("str.w r3, [sl, 0x1c]");
0x0007fd1e movw r3, 0xffff | r3 = 0xffff;
0x0007fd22 strh.w r3, [sl, 0x22] | *((sl + 0x22)) = r3;
0x0007fd26 movs r3, 1 | r3 = 1;
0x0007fd28 str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
0x0007fd2c bl 0x29fe0 | fcn_00029fe0 (r0, r1, r2);
0x0007fd30 ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x0007fd32 orrs r3, r0 | r3 |= r0;
0x0007fd34 str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
0x0007fd36 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x0007fd38 orrs r3, r1 | r3 |= r1;
0x0007fd3a str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x0007fd3c ldr.w r2, [fp, 8] | r2 = *(arg_8h);
| if (r2 != 0) {
0x0007fd40 cbz r2, 0x7fd52 |
0x0007fd42 movs r3, 0 | r3 = 0;
0x0007fd44 mov r1, r2 | r1 = r2;
0x0007fd46 ldr.w r0, [r8] | r0 = *(r8);
0x0007fd4a mov r2, r3 | r2 = r3;
0x0007fd4c bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0007fd50 mov r2, r0 | r2 = r0;
| }
0x0007fd52 movs r1, 0xae | r1 = 0xae;
0x0007fd54 movs r3, 0 | r3 = 0;
0x0007fd56 mov r0, r8 | r0 = r8;
0x0007fd58 add.w sb, sb, 1 | sb++;
0x0007fd5c bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x0007fd60 mov r2, sl | r2 = sl;
0x0007fd62 mov r3, r0 | r3 = r0;
0x0007fd64 movs r1, 0x35 | r1 = 0x35;
0x0007fd66 mov r0, r8 | r0 = r8;
0x0007fd68 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x0007fd6c ldrb.w r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0007fd70 mov sl, r0 | sl = r0;
0x0007fd72 ldr r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x0007fd74 add.w fp, fp, 0x10 |
0x0007fd78 tst.w r3, 0x48 |
0x0007fd7c ite eq |
| if ((r3 & 0x48) != 0) {
0x0007fd7e moveq r2, 2 | r2 = 2;
| }
| if ((r3 & 0x48) == 0) {
0x0007fd80 movne r2, 1 | r2 = 1;
| }
0x0007fd82 bl 0x23654 | fcn_00023654 (r0, r1, r2);
0x0007fd86 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0007fd88 mov r1, sl | r1 = sl;
0x0007fd8a movs r2, 1 | r2 = 1;
0x0007fd8c bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0007fd90 ldr r3, [r5] | r3 = *(r5);
0x0007fd92 cmp sb, r3 |
| if (sb < r3) {
0x0007fd94 blt 0x7fcc2 | goto label_4;
| }
| label_7:
0x0007fd96 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007fd98 adds r6, 0x40 | r6 += 0x40;
0x0007fd9a ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007fd9c ldr r3, [r3] | r3 = *(r3);
0x0007fd9e adds r2, 1 | r2++;
0x0007fda0 str r2, [sp, 0x14] | var_14h = r2;
0x0007fda2 cmp r3, r2 |
| if (r3 > r2) {
0x0007fda4 bgt.w 0x7fc80 | goto label_5;
| }
0x0007fda8 ldr.w sb, [sp, 0x24] | sb = var_24h;
0x0007fdac ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x0007fdae b.w 0x7f00e | goto label_6;
| label_40:
0x0007fdb2 ldr r2, [r7] | r2 = *(r7);
0x0007fdb4 mov r3, sb | r3 = sb;
0x0007fdb6 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0007fdb8 mov r0, r8 | r0 = r8;
0x0007fdba bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0007fdbe b 0x7fd96 | goto label_7;
| label_30:
0x0007fdc0 cmp r0, 0 |
| if (r0 == 0) {
0x0007fdc2 beq.w 0x7f1a2 | void (*0x7f1a2)() ();
| }
0x0007fdc6 mov r1, r0 | r1 = r0;
0x0007fdc8 ldr r0, [sp, 0x54] | r0 = var_54h;
0x0007fdca bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0007fdce b.w 0x7f1a2 | void (*0x7f1a2)() ();
| label_34:
0x0007fdd2 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0007fdd4 ldr r1, [r3] | r1 = *(r3);
0x0007fdd6 cmp r1, 1 |
| if (r1 != 1) {
0x0007fdd8 bne.w 0x7f03c | goto label_8;
| }
0x0007fdda add r1, sp, 0xc0 | r1 = sp + 0xc0;
0x0007fddc ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x0007fdde ldrb.w r1, [r1, 0x2b] | r1 = *((r1 + 0x2b));
0x0007fde2 cmp r1, 1 |
| if (r1 != 1) {
0x0007fde4 bne.w 0x7f03c | goto label_8;
| }
0x0007fde8 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0007fdea ldr r4, [r3, 0x30] | r4 = *((r3 + 0x30));
0x0007fdec ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x0007fdee ldr r6, [r1, 0x64] | r6 = *((r1 + 0x64));
0x0007fdf0 cmp r6, 0 |
| if (r6 <= 0) {
0x0007fdf2 ble 0x7fe0c | goto label_41;
| }
0x0007fdf4 ldr r5, [r1, 0x70] | r5 = *((r1 + 0x70));
| label_9:
0x0007fdf6 ldrh r1, [r5, 0xa] | r1 = *((r5 + 0xa));
0x0007fdf8 lsls r1, r1, 0x1d | r1 <<= 0x1d;
| if (r1 < r1) {
0x0007fdfa bmi 0x7fe04 | goto label_42;
| }
0x0007fdfc ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x0007fdfe cmp r4, r1 |
| if (r4 != r1) {
0x0007fe00 bne.w 0x7f03c | goto label_8;
| }
0x0007fe02 add r1, sp, 0x70 | r1 = sp + 0x70;
| label_42:
0x0007fe04 adds r2, 1 | r2++;
0x0007fe06 adds r5, 0x30 | r5 += 0x30;
0x0007fe08 cmp r2, r6 |
| if (r2 != r6) {
0x0007fe0a bne 0x7fdf6 | goto label_9;
| }
| label_41:
0x0007fe0c cmp r3, 0 |
| if (r3 == 0) {
0x0007fe0e beq.w 0x8208c | goto label_43;
| }
0x0007fe12 ldr r6, [r3] | r6 = *(r3);
0x0007fe14 cmp r6, 0 |
| if (r6 <= 0) {
0x0007fe16 ble.w 0x8208c | goto label_43;
| }
0x0007fe1a movs r2, 0 | r2 = 0;
0x0007fe1c b 0x7fe38 | goto label_44;
| label_10:
0x0007fe1e ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
0x0007fe20 cmp r4, r1 |
| if (r4 != r1) {
0x0007fe22 bne.w 0x7f03c | goto label_8;
| }
0x0007fe26 ldrb r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x0007fe28 lsls r1, r1, 0x1e | r1 <<= 0x1e;
| if (r1 < r1) {
0x0007fe2a bmi.w 0x7f03c | goto label_8;
| }
0x0007fe2c add r1, sp, 0x1c | r1 = sp + 0x1c;
0x0007fe2e adds r2, 1 | r2++;
0x0007fe30 adds r3, 0x10 | r3 += 0x10;
0x0007fe32 cmp r2, r6 |
| if (r2 == r6) {
0x0007fe34 beq.w 0x8208c | goto label_43;
| }
| label_44:
0x0007fe38 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0007fe3a ldrb r5, [r1] | r5 = *(r1);
0x0007fe3c cmp r5, 0xa7 |
| if (r5 == 0xa7) {
0x0007fe3e beq 0x7fe1e | goto label_10;
| }
0x0007fe40 b.w 0x7f03c | goto label_8;
| label_32:
0x0007fe44 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0007fe46 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007fe48 lsls r0, r3, 0x1b | r0 = r3 << 0x1b;
0x0007fe4a ittt pl |
| if (r0 < r3) {
0x0007fe4c ldrpl r2, [sp, 0x28] | r2 = var_28h;
| }
| if (r0 < r3) {
0x0007fe4e movpl r3, 1 | r3 = 1;
| }
| if (r0 < r3) {
0x0007fe50 strbpl r3, [r2, 0x33] | *((r2 + 0x33)) = r3;
| }
0x0007fe54 b.w 0x7f002 | goto label_11;
| label_38:
0x0007fe70 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0007fe72 ldr r2, [r1] | r2 = *(r1);
0x0007fe74 cmp r2, 1 |
| if (r2 != 1) {
0x0007fe76 bne.w 0x7ff8c | goto label_45;
| }
0x0007fe7a ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0007fe7c ldr.w lr, [r1, 0x30] |
0x0007fe80 ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x0007fe82 ldr r4, [r0] | r4 = *(r0);
0x0007fe84 cmp r4, 0 |
| if (r4 <= 0) {
0x0007fe86 ble 0x7febe | goto label_46;
| }
0x0007fe88 mov r2, r3 | r2 = r3;
| label_12:
0x0007fe8a ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x0007fe8c cbnz r3, 0x7fe9c | goto label_47;
| }
0x0007fe8e b 0x7feb6 | goto label_21;
| do {
0x0007fe90 lsls r5, r5, 0xc | r5 <<= 0xc;
0x0007fe92 itet mi |
| if (r5 >= r5) {
0x0007fe94 ldrmi r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r5 < r5) {
0x0007fe96 ldrpl r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r5 >= r5) {
0x0007fe98 ldrmi r3, [r3, 8] | r3 = *((r3 + 8));
| }
| if (r3 == 0) {
0x0007fe9a cbz r3, 0x7feb6 | goto label_21;
| }
| label_47:
0x0007fe9c ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x0007fe9e tst.w r5, 0x82000 |
0x0007fea2 bne 0x7fe90 |
| } while ((r5 & 0x82000) != 0);
0x0007fea4 ldrb r5, [r3] | r5 = *(r3);
0x0007fea6 adds r5, 0x59 | r5 += 0x59;
0x0007fea8 tst.w r5, 0xfd |
0x0007feaa lsrs r5, r7, 0x1f | r5 = r7 >> 0x1f;
| if (r5 == r7) {
0x0007feac bne 0x7feb6 |
0x0007feae ldr r5, [r3, 0x1c] | r5 = *((r3 + 0x1c));
0x0007feb0 cmp lr, r5 |
| if (lr == r5) {
0x0007feb2 beq.w 0x8197c | goto label_48;
| }
| }
| label_21:
0x0007feb6 adds r2, 1 | r2++;
0x0007feb8 adds r0, 0x10 | r0 += 0x10;
0x0007feba cmp r2, r4 |
| if (r2 != r4) {
0x0007febc bne 0x7fe8a | goto label_12;
| }
| label_46:
0x0007febe ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x0007fec0 cmp r6, 0 |
| if (r6 == 0) {
0x0007fec2 beq 0x7ff8c | goto label_45;
| }
0x0007fec4 ldr.w sl, [pc, 0x424] |
0x0007fec8 mov r5, sb | r5 = sb;
0x0007feca mov r8, lr | r8 = lr;
0x0007fecc ldr.w sb, [sp, 0x38] | sb = var_38h;
0x0007fed0 add sl, pc | sl = 0x1001c0;
0x0007fed2 b 0x7feda |
| while (r3 == 0) {
| label_13:
0x0007fed4 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x0007fed6 cmp r6, 0 |
| if (r6 == 0) {
0x0007fed8 beq 0x7ff8a | goto label_49;
| }
0x0007feda ldrb.w r3, [r6, 0x36] | r3 = *((r6 + 0x36));
0x0007fede cmp r3, 0 |
0x0007fee0 beq 0x7fed4 |
| }
0x0007fee2 ldr r7, [r6, 0x24] | r7 = *((r6 + 0x24));
0x0007fee4 cmp r7, 0 |
| if (r7 != 0) {
0x0007fee6 bne 0x7fed4 | goto label_13;
| }
0x0007fee8 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0007feea cmp r3, 0 |
| if (r3 == 0) {
0x0007feec beq 0x7ff7e | goto label_22;
| }
0x0007feee vmov.i8 d8, 0xff | __asm ("vmov.i8 d8, 0xff");
0x0007fef2 b 0x7fefc |
| while (r0 != 0) {
| label_18:
0x0007fef4 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0007fef6 adds r7, 1 | r7++;
0x0007fef8 cmp r7, r3 |
| if (r7 >= r3) {
0x0007fefa bge 0x7ff7a | goto label_19;
| }
0x0007fefc movs r3, 2 | r3 = 2;
0x0007fefe mov r2, r7 | r2 = r7;
0x0007ff00 mov r1, r8 | r1 = r8;
0x0007ff02 mov r0, sb | r0 = sb;
0x0007ff04 str r6, [sp, 0xc] | var_ch = r6;
0x0007ff06 vstr d8, [sp] | __asm ("vstr d8, [sp]");
0x0007ff0a str r3, [sp, 8] | var_8h = r3;
0x0007ff0c bl 0x4c6d0 | r0 = fcn_0004c6d0 (r0, r1, r2, r3, r4, r5);
0x0007ff10 cmp r0, 0 |
0x0007ff12 bne 0x7fef4 |
| }
0x0007ff14 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007ff16 ldr.w r3, [r3, r7, lsl 2] | offset_0 = r7 << 2;
| r3 = *((r3 + offset_0));
0x0007ff1a str r3, [sp, 0x18] | var_18h = r3;
0x0007ff1c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0007ff1e ldr.w ip, [r3] | ip = *(r3);
0x0007ff22 cmp.w ip, 0 |
| if (ip <= 0) {
0x0007ff26 ble.w 0x81958 | goto label_20;
| }
0x0007ff2a lsls r2, r7, 1 | r2 = r7 << 1;
0x0007ff2c str r5, [sp, 0x14] | var_14h = r5;
0x0007ff2e mov r4, r0 | r4 = r0;
0x0007ff30 mov r5, r2 | r5 = r2;
0x0007ff32 mov fp, r3 |
0x0007ff34 mov r2, ip | r2 = ip;
| label_14:
0x0007ff36 ldr.w r1, [fp, 8] | r1 = *(arg_8h);
0x0007ff3a mov r3, r1 | r3 = r1;
| if (r1 != 0) {
0x0007ff3c cbnz r1, 0x7ff4c | goto label_50;
| }
0x0007ff3e b 0x7ff6c | goto label_16;
| do {
0x0007ff40 lsls r0, r0, 0xc | r0 <<= 0xc;
0x0007ff42 itet mi |
| if (r0 >= r0) {
0x0007ff44 ldrmi r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r0 < r0) {
0x0007ff46 ldrpl r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r0 >= r0) {
0x0007ff48 ldrmi r3, [r3, 8] | r3 = *((r3 + 8));
| }
| if (r3 == 0) {
0x0007ff4a cbz r3, 0x7ff6c | goto label_16;
| }
| label_50:
0x0007ff4c ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0007ff4e tst.w r0, 0x82000 |
0x0007ff52 bne 0x7ff40 |
| } while ((r0 & 0x82000) != 0);
0x0007ff54 ldrb r0, [r3] | r0 = *(r3);
0x0007ff56 adds r0, 0x59 | r0 += 0x59;
0x0007ff58 tst.w r0, 0xfd |
| if ((r0 & 0xfd) == 0) {
0x0007ff5c bne 0x7ff6c |
0x0007ff5e ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007ff60 ldrsh.w lr, [r3, 0x20] |
0x0007ff64 ldrsh r0, [r0, r5] | r0 = *((r0 + r5));
0x0007ff66 cmp lr, r0 |
| if (lr == r0) {
0x0007ff68 beq.w 0x81900 | goto label_51;
| }
| }
| label_16:
0x0007ff6c adds r4, 1 | r4++;
0x0007ff6e add.w fp, fp, 0x10 |
0x0007ff72 cmp r4, r2 |
| if (r4 < r2) {
0x0007ff74 blt 0x7ff36 | goto label_14;
| }
0x0007ff76 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0007ff78 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
| label_19:
0x0007ff7a cmp r3, r7 |
| if (r3 != r7) {
0x0007ff7c bne 0x7fed4 | goto label_13;
| }
| label_22:
0x0007ff7e ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007ff80 movs r3, 1 | r3 = 1;
0x0007ff82 strb.w r3, [r2, 0x33] | *((r2 + 0x33)) = r3;
0x0007ff86 b.w 0x7f218 | goto label_15;
| label_49:
0x0007ff8a mov sb, r5 | sb = r5;
| label_45:
0x0007ff8c cmp.w sb, 0 |
| if (sb != 0) {
0x0007ff90 bne.w 0x7f218 | goto label_15;
| }
0x0007ff94 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007ff96 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0007ff98 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0007ff9a ldrh r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0007ff9c orr r3, r3, 0x80 | r3 |= 0x80;
0x0007ffa0 strh r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x0007ffa2 b.w 0x7f218 | goto label_15;
| label_39:
0x00080ba0 ldrh.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x00080ba4 lsls r1, r3, 0x1a | r1 = r3 << 0x1a;
| if (r1 < r3) {
0x00080ba6 bmi.w 0x7f22a | void (*0x7f22a)() ();
| }
0x00080baa ldr r5, [r7, 0x18] | r5 = *((r7 + 0x18));
0x00080bac ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x00080bb0 cmp r3, 1 |
| if (r3 == 1) {
0x00080bb2 beq.w 0x7f22a | void (*0x7f22a)() ();
| }
0x00080bb6 ldrb.w r3, [r7, 0x2d] | r3 = *((r7 + 0x2d));
0x00080bba ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x00080bbe bne.w 0x7f22a | void (*0x7f22a)() ();
| }
0x00080bc2 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00080bc4 add.w sl, sp, 0x148 | sl += var_148h;
0x00080bc8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00080bcc mov r0, sl | r0 = sl;
0x00080bce ldr.w fp, [r7, 0x30] | fp = *((r7 + 0x30));
0x00080bd2 strb.w r2, [sp, 0x162] | var_162h = r2;
0x00080bd6 add.w r2, r8, 0x58 | r2 = r8 + 0x58;
0x00080bda str r3, [sp, 0x158] | var_158h = r3;
0x00080bdc str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x00080bde strh r3, [r4, 0x2e] | *((r4 + 0x2e)) = r3;
0x00080be0 movs r3, 0x82 | r3 = 0x82;
0x00080be2 vstr d16, [sp, 0x150] | __asm ("vstr d16, [sp, 0x150]");
0x00080be6 str r3, [sp, 0x15c] | var_15ch = r3;
0x00080be8 mov.w r3, 0x100 | r3 = 0x100;
0x00080bec vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
0x00080bf0 strh.w r3, [sp, 0x160] | var_160h = r3;
0x00080bf4 movw r3, 0xffff | r3 = 0xffff;
0x00080bf8 str r2, [sp, 0x14] | var_14h = r2;
0x00080bfa vstr d16, [sp, 0x148] | __asm ("vstr d16, [sp, 0x148]");
0x00080bfe str.w fp, [sp, 0x164] | __asm ("str.w fp, [var_164h]");
0x00080c02 strh.w r3, [sp, 0x190] | var_190h = r3;
0x00080c06 bl 0x4c3c0 | r0 = fcn_0004c3c0 (r0, r1);
| if (r0 != 0) {
0x00080c0a cbnz r0, 0x80c1c | goto label_52;
| }
0x00080c0c b.w 0x81e4c | goto label_53;
| do {
0x00080c10 mov r0, sl | r0 = sl;
0x00080c12 bl 0x4c3c0 | r0 = fcn_0004c3c0 (r0, r1);
0x00080c16 cmp r0, 0 |
| if (r0 == 0) {
0x00080c18 beq.w 0x81e4c | goto label_53;
| }
| label_52:
0x00080c1c ldrd r3, r2, [r0, 0x20] | __asm ("ldrd r3, r2, [var_20h_2]");
0x00080c20 orrs r3, r2 | r3 |= r2;
0x00080c22 bne 0x80c10 |
| } while (r3 != r2);
0x00080c24 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00080c26 movw r3, 0x1101 | r3 = 0x1101;
0x00080c2a str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x00080c2c str r0, [r2] | *(r2) = r0;
0x00080c2e movs r2, 1 | r2 = 1;
0x00080c30 strh r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x00080c32 strh r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x00080c34 movs r2, 0x21 | r2 = 0x21;
0x00080c36 strh r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
| label_28:
0x0008110e ldr.w r1, [pc, 0xa1c] |
0x00081112 movs r2, 0x40 | r2 = 0x40;
0x00081114 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00081116 add r1, pc | r1 = 0x102c48;
0x00081118 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0008111c b.w 0x7f1a2 | void (*0x7f1a2)() ();
| label_51:
0x00081900 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00081902 cmp r8, r3 |
| if (r8 != r3) {
0x00081904 bne.w 0x7ff6c | goto label_16;
| }
0x00081908 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008190a bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x0008190e cmp r0, 0 |
| if (r0 == 0) {
0x00081910 beq.w 0x81cf0 | goto label_54;
| }
| label_23:
0x00081914 ldr r0, [r0] | r0 = *(r0);
0x00081916 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00081918 subs r0, 1 | r0--;
0x0008191a add.w ip, r3, -1 |
| do {
| label_17:
0x0008191e ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00081922 ldrb r2, [ip, 1]! | r2 = *((ip += 1));
0x00081926 cmp r3, r2 |
| if (r3 == r2) {
0x00081928 beq 0x81942 | goto label_55;
| }
0x0008192a add r3, sl | r3 += sl;
0x0008192c add r2, sl | r2 += sl;
0x0008192e ldrb.w r1, [r3, 0x140] | r1 = *((r3 + 0x140));
0x00081932 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x00081936 cmp r1, r3 |
0x00081938 beq 0x8191e |
| } while (r1 == r3);
0x0008193a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008193c ldr r2, [r3] | r2 = *(r3);
0x0008193e b.w 0x7ff6c | goto label_16;
| label_55:
0x00081942 cmp r3, 0 |
| if (r3 != 0) {
0x00081944 bne 0x8191e | goto label_17;
| }
0x00081946 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00081948 mov r2, r5 | r2 = r5;
0x0008194a ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008194c ldrsh r3, [r3, r2] | r3 = *((r3 + r2));
0x0008194e cmp r3, 0 |
| if (r3 >= 0) {
0x00081950 bge 0x81966 | goto label_56;
| }
0x00081952 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00081954 beq.w 0x7fef4 | goto label_18;
| }
| label_20:
0x00081958 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0008195a b.w 0x7ff7a | goto label_19;
| label_56:
0x00081966 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00081968 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008196c ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008196e add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x00081972 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x00081974 lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
| if (r0 != r3) {
0x00081976 bne.w 0x7fef4 | goto label_18;
| }
0x0008197a b 0x81958 | goto label_20;
| label_48:
0x0008197c ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00081980 cmp r3, 0 |
| if (r3 >= 0) {
0x00081982 bge.w 0x7feb6 | goto label_21;
| }
0x00081986 b.w 0x7ff7e | goto label_22;
| label_54:
0x00081cf0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00081cf2 ldr r3, [r3] | r3 = *(r3);
0x00081cf4 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00081cf6 b 0x81914 | goto label_23;
| label_53:
0x00081e4c ldr r6, [r5, 8] | r6 = *((r5 + 8));
| if (r6 != 0) {
0x00081e4e cbnz r6, 0x81e5a | goto label_57;
| }
0x00081e50 b 0x820d6 | void (*0x820d6)() ();
| label_24:
0x00081e52 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x00081e54 cmp r6, 0 |
| if (r6 == 0) {
0x00081e56 beq.w 0x820d6 | void (*0x820d6)() ();
| }
| label_57:
0x00081e5a ldrb.w r3, [r6, 0x36] | r3 = *((r6 + 0x36));
0x00081e5e cmp r3, 0 |
| if (r3 == 0) {
0x00081e60 beq 0x81e52 | goto label_24;
| }
0x00081e62 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00081e64 cmp r3, 0 |
| if (r3 != 0) {
0x00081e66 bne 0x81e52 | goto label_24;
| }
0x00081e68 ldrh r5, [r6, 0x32] | r5 = *((r6 + 0x32));
0x00081e6a cmp r5, 3 |
| if (r5 > 3) {
0x00081e6c bhi 0x81e52 | goto label_24;
| }
0x00081e6e ldrb.w r2, [r6, 0x37] | r2 = *((r6 + 0x37));
0x00081e72 tst.w r2, 8 |
0x00081e76 ite eq |
| if ((r2 & 8) != 0) {
0x00081e78 moveq sb, 2 | sb = 2;
| }
| if ((r2 & 8) != 0) {
0x00081e7c mov.w sb, 0x82 | sb = 0x82;
| }
| if (r5 == 0) {
0x00081e80 cbz r5, 0x81ebe | goto label_58;
| }
0x00081e82 mov r5, r3 | r5 = r3;
| label_25:
0x00081e84 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00081e86 mov r3, r5 | r3 = r5;
0x00081e88 mov r2, fp | r2 = fp;
0x00081e8a mov r0, sl | r0 = sl;
0x00081e8c strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x00081e90 bl 0x4c62c | r0 = fcn_0004c62c (r0, r1, r2, r3);
| if (r0 != 0) {
0x00081e94 cbnz r0, 0x81ea0 | goto label_59;
| }
0x00081e96 b 0x81eee | goto label_60;
| do {
0x00081e98 mov r0, sl | r0 = sl;
0x00081e9a bl 0x4c3c0 | r0 = fcn_0004c3c0 (r0, r1);
| if (r0 == 0) {
0x00081e9e cbz r0, 0x81eee | goto label_60;
| }
| label_59:
0x00081ea0 ldrd r2, r3, [r0, 0x20] | __asm ("ldrd r2, r3, [var_20h_2]");
0x00081ea4 orrs r3, r2 | r3 |= r2;
0x00081ea6 bne 0x81e98 |
| } while (r3 != r2);
0x00081ea8 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00081eaa str.w r0, [r3, r5, lsl 2] | __asm ("str.w r0, [r3, r5, lsl 2]");
0x00081eae adds r5, 1 | r5++;
0x00081eb0 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x00081eb2 cmp r5, r3 |
| if (r5 < r3) {
0x00081eb4 blt 0x81e84 | goto label_25;
| }
| label_26:
0x00081eb6 cmp r3, r5 |
| if (r3 != r5) {
0x00081eb8 bne 0x81e52 | goto label_24;
| }
0x00081eba ldrb.w r2, [r6, 0x37] | r2 = *((r6 + 0x37));
| label_58:
0x00081ebe lsls r2, r2, 0x1a | r2 <<= 0x1a;
0x00081ec0 movw r3, 0x1201 | r3 = 0x1201;
0x00081ec4 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| if (r2 >= r2) {
0x00081ec6 bmi 0x81ed8 |
0x00081ec8 ldrd r0, r2, [r7, 0x38] | __asm ("ldrd r0, r2, [r7, 0x38]");
0x00081ecc ldr r1, [r6, 0x40] | r1 = *((r6 + 0x40));
0x00081ece ands r0, r1 | r0 &= r1;
0x00081ed0 ldr r1, [r6, 0x44] | r1 = *((r6 + 0x44));
0x00081ed2 ands r2, r1 | r2 &= r1;
0x00081ed4 orrs r2, r0 | r2 |= r0;
| if (r2 != r0) {
0x00081ed6 bne 0x81ede | goto label_61;
| }
| }
0x00081ed8 movw r3, 0x1241 | r3 = 0x1241;
0x00081edc str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| label_61:
0x00081ede uxth r2, r5 | r2 = (int16_t) r5;
0x00081ee0 str r6, [r4, 0x20] | *((r4 + 0x20)) = r6;
0x00081ee2 strh r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x00081ee4 strh r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x00081ee6 movs r2, 0x27 | r2 = 0x27;
0x00081ee8 strh r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x00081eea b.w 0x80c38 | void (*0x80c38)() ();
| label_60:
0x00081eee ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x00081ef0 b 0x81eb6 | goto label_26;
| label_43:
0x0008208c ldr r5, [sp, 0x38] | r5 = var_38h;
0x0008208e movs r3, 0x49 | r3 = 0x49;
0x00082090 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00082092 str r3, [sp] | *(sp) = r3;
0x00082094 mov r3, r4 | r3 = r4;
0x00082096 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x00082098 mov r0, r5 | r0 = r5;
0x0008209a bl 0x49dcc | fcn_00049dcc (r0, r1, r2, r3, r4);
0x0008209e ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x000820a0 cmp r1, 0 |
| if (r1 <= 0) {
0x000820a2 ble.w 0x7f03c | goto label_8;
| }
0x000820a6 ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x000820a8 movs r0, 0x4a | r0 = 0x4a;
0x000820aa mov r3, r4 | r3 = r4;
0x000820ac ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000820ae str r0, [sp] | *(sp) = r0;
0x000820b0 mov r0, r5 | r0 = r5;
0x000820b2 bl 0x49dcc | fcn_00049dcc (r0, r1, r2, r3, r4);
0x000820b6 b.w 0x7f03c | goto label_8;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x82144 */
| #include <stdint.h>
|
; (fcn) fcn.00082144 () | void fcn_00082144 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int32_t var_30h_2;
| int16_t var_38h;
| int16_t var_5ch;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00082144 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00082148 sub sp, 0x84 |
0x0008214a mov r7, r2 | r7 = r2;
0x0008214c str r2, [sp, 0x28] | var_28h = r2;
0x0008214e mov r8, r1 | r8 = r1;
0x00082150 mov sb, r0 | sb = r0;
0x00082152 ldr r2, [pc, 0x31c] |
0x00082154 movs r1, 1 | r1 = 1;
0x00082156 ldr r3, [pc, 0x31c] | r3 = *(0x82476);
0x00082158 ldr r5, [r7, 0x38] | r5 = *((r7 + 0x38));
0x0008215a add r2, pc | r2 = 0x1045d0;
0x0008215c ldr r6, [r0] | r6 = *(r0);
0x0008215e ldr r3, [r2, r3] |
0x00082160 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00082162 mov r0, r6 | r0 = r6;
0x00082164 ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x00082166 ldr r3, [r3] | r3 = imp.atan;
0x00082168 str r3, [sp, 0x7c] | var_7ch = r3;
0x0008216a mov.w r3, 0 | r3 = 0;
0x0008216e ldrb.w r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00082172 str r5, [sp, 0x1c] | var_1ch = r5;
0x00082174 ldr r5, [r7, 0x50] | r5 = *((r7 + 0x50));
0x00082176 str r2, [sp, 0x14] | var_14h = r2;
0x00082178 lsls r7, r3, 6 | r7 = r3 << 6;
0x0008217a ldr r2, [pc, 0x2fc] |
0x0008217c str r5, [sp, 0x20] | var_20h = r5;
0x0008217e str r7, [sp, 0x18] | var_18h = r7;
0x00082180 ldr r7, [sp, 0x14] | r7 = var_14h;
0x00082182 add r2, pc | r2 = 0x104600;
0x00082184 add.w r3, r7, r3, lsl 6 | r3 = r7 + (r3 << 6);
0x00082188 add.w r5, r3, 8 | r5 = r3 + 8;
0x0008218c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008218e str r5, [sp, 0x24] | var_24h = r5;
0x00082190 adds r3, r7, r3 | r3 = r7 + r3;
0x00082192 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00082194 ldr r3, [r3] | r3 = *(r3);
0x00082196 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008219a cmp.w r8, 0 |
| if (r8 == 0) {
0x0008219e beq.w 0x8245c | goto label_4;
| }
0x000821a2 add.w r5, r8, r8, lsl 1 | r5 = r8 + (r8 << 1);
0x000821a6 mov.w fp, 0 |
0x000821aa mov r7, sb | r7 = sb;
0x000821ac add.w sl, sb, r5, lsl 5 | sl = sb + (r5 << 5);
0x000821b0 mov r8, fp | r8 = fp;
0x000821b2 mov r5, fp | r5 = fp;
0x000821b4 b 0x821bc |
| while (r2 == 0) {
0x000821b6 adds r7, 0x60 | r7 += 0x60;
0x000821b8 cmp sl, r7 |
| if (sl == r7) {
0x000821ba beq 0x821f6 | goto label_2;
| }
| label_0:
0x000821bc ldr.w r3, [r7, 0x350] | r3 = *((r7 + 0x350));
0x000821c0 mov r0, r4 | r0 = r4;
0x000821c2 ldr.w r2, [r7, 0x304] | r2 = *((r7 + 0x304));
0x000821c6 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x000821c8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000821ca str r5, [sp] | *(sp) = r5;
0x000821cc orr.w fp, fp, r1 |
0x000821d0 movs r1, 0x88 | r1 = 0x88;
0x000821d2 orr.w r8, r8, r3 | r8 |= r3;
0x000821d6 movs r3, 0 | r3 = 0;
0x000821d8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000821dc ldr.w r2, [r7, 0x308] | r2 = *((r7 + 0x308));
0x000821e0 cmp r2, 0 |
0x000821e2 beq 0x821b6 |
| }
0x000821e4 movs r3, 0 | r3 = 0;
0x000821e6 movs r1, 0x88 | r1 = 0x88;
0x000821e8 mov r0, r4 | r0 = r4;
0x000821ea adds r7, 0x60 | r7 += 0x60;
0x000821ec str r5, [sp] | *(sp) = r5;
0x000821ee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000821f2 cmp sl, r7 |
| if (sl != r7) {
0x000821f4 bne 0x821bc | goto label_0;
| }
| label_2:
0x000821f6 ldrd r3, r2, [sp, 0x14] | __asm ("ldrd r3, r2, [var_14h]");
0x000821fa add r3, r2 | r3 += r2;
0x000821fc ldrb.w r7, [r3, 0x2c] | r7 = *((r3 + 0x2c));
0x00082200 ands r7, r7, 0x40 | r7 &= 0x40;
0x00082204 itt ne |
| if (r7 == r7) {
0x00082206 movne r3, 0 | r3 = 0;
| }
| if (r7 == r7) {
0x00082208 strne r3, [sp, 0x20] | var_20h = r3;
| }
| if (r7 != r7) {
0x0008220a bne 0x8228c | goto label_3;
| }
0x0008220c ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008220e ldr.w r0, [sb, 0x64] | r0 = *((sb + 0x64));
0x00082212 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x00082214 cmp r0, 0 |
0x00082216 orr.w r5, fp, r3 | r5 = fp | r3;
0x0008221a ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0008221c orr.w r8, r8, r3 | r8 |= r3;
| if (r0 <= 0) {
0x00082220 ble.w 0x82460 | goto label_5;
| }
0x00082224 movw sl, 0x8002 |
0x00082228 mvn.w fp, r8 |
0x0008222c str r4, [sp, 0x2c] | var_2ch = r4;
0x0008222e mvns r5, r5 | r5 = ~r5;
0x00082230 movt sl, 0xffff | sl = 0xffff8002;
0x00082234 mov r8, r7 | r8 = r7;
0x00082236 mov r4, r7 | r4 = r7;
| do {
0x00082238 ldr.w r3, [sb, 0x70] | r3 = *((sb + 0x70));
0x0008223c add r3, r7 | r3 += r7;
0x0008223e ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x00082240 tst.w sl, r2 |
| if ((sl & r2) != 0) {
0x00082244 beq 0x8224e |
0x00082246 ldrh r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00082248 cmp.w r2, 0x2000 |
| if (r2 != 0x2000) {
0x0008224c bne 0x82288 | goto label_6;
| }
| }
0x0008224e ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x00082250 ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x00082252 ands r2, r5 | r2 &= r5;
0x00082254 and.w r1, fp, r1 | r1 = fp & r1;
0x00082258 orrs r2, r1 | r2 |= r1;
| if (r2 == r1) {
0x0008225a bne 0x8227e |
0x0008225c ldr r1, [r3] | r1 = *(r3);
0x0008225e ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00082260 ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x00082264 bne 0x8227e | goto label_7;
| }
0x00082266 mov r2, r3 | r2 = r3;
0x00082268 ldr r0, [r6] | r0 = *(r6);
0x0008226a bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
0x0008226e mov r1, r4 | r1 = r4;
0x00082270 mov r2, r0 | r2 = r0;
0x00082272 mov r0, r6 | r0 = r6;
0x00082274 bl 0x48d98 | r0 = fcn_00048d98 (r0, r1, r2);
0x00082278 mov r4, r0 | r4 = r0;
0x0008227a ldr.w r0, [sb, 0x64] | r0 = *((sb + 0x64));
| }
| label_7:
0x0008227e add.w r8, r8, 1 | r8++;
0x00082282 adds r7, 0x30 | r7 += 0x30;
0x00082284 cmp r0, r8 |
0x00082286 bgt 0x82238 |
| } while (r0 > r8);
| label_6:
0x00082288 str r4, [sp, 0x20] | var_20h = r4;
0x0008228a ldr r4, [sp, 0x2c] | r4 = var_2ch;
| label_3:
0x0008228c ldr.w lr, [sp, 0x24] | lr = var_24h;
0x00082290 add r7, sp, 0x38 | r7 += var_38h;
0x00082292 movs r3, 1 | r3 = 1;
0x00082294 strd r3, r3, [sp, 0x30] | __asm ("strd r3, r3, [var_30h]");
0x00082298 add.w ip, lr, 0x40 |
0x0008229a lsrs r0, r0, 0x11 | r0 >>= 0x11;
| do {
0x0008229c ldr.w r0, [lr] | r0 = *(lr);
0x000822a0 add.w lr, lr, 0x10 | lr += 0x10;
0x000822a4 ldr r1, [lr, -0xc] | r1 = *((lr - 0xc));
0x000822a8 mov r5, r7 | r5 = r7;
0x000822aa ldr r2, [lr, -0x8] | r2 = *((lr - 0x8));
0x000822ae adds r7, 0x10 | r7 += 0x10;
0x000822b0 ldr r3, [lr, -0x4] | r3 = *((lr - 0x4));
0x000822b4 cmp lr, ip |
0x000822b6 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x000822b8 bne 0x8229c |
| } while (lr != ip);
0x000822ba movs r3, 0 | r3 = 0;
0x000822bc add r1, sp, 0x30 | r1 += var_30h;
0x000822be mov r0, r6 | r0 = r6;
0x000822c0 strb.w r3, [sp, 0x5c] | var_5ch = r3;
0x000822c4 ldrb r2, [r6, 0x1a] | r2 = *((r6 + 0x1a));
0x000822c6 adds r2, 1 | r2++;
0x000822c8 strb r2, [r6, 0x1a] | *((r6 + 0x1a)) = r2;
0x000822ca mov.w r2, 0x1000 | r2 = 0x1000;
0x000822ce str r2, [sp, 8] | var_8h = r2;
0x000822d0 str r3, [sp, 0xc] | var_ch = r3;
0x000822d2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000822d4 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x000822d8 bl 0x7ee90 | fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x000822dc str r0, [sp, 0x24] | var_24h = r0;
0x000822de cmp r0, 0 |
| if (r0 == 0) {
0x000822e0 beq.w 0x823f4 | goto label_8;
| }
0x000822e4 ldrd r3, r1, [sp, 0x14] | __asm ("ldrd r3, r1, [var_14h]");
0x000822e8 ldr r7, [r6, 0x2c] | r7 = *((r6 + 0x2c));
0x000822ea ldr r2, [r0, 0x20] | r2 = *((r0 + 0x20));
0x000822ec add r3, r1 | r3 += r1;
0x000822ee ldr r1, [sp, 0x28] | r1 = var_28h;
0x000822f0 ldr.w r8, [r3, 0x18] | r8 = *((r3 + 0x18));
0x000822f4 adds r7, 1 | r7++;
0x000822f6 str r2, [sp, 0x14] | var_14h = r2;
0x000822f8 ldr.w fp, [r1, 4] | fp = *((r1 + 4));
0x000822fc ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x00082300 str r7, [r6, 0x2c] | *((r6 + 0x2c)) = r7;
0x00082302 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x00082306 beq 0x8235e | goto label_9;
| }
0x00082308 ldr.w sl, [r8, 8] | sl = *((r8 + 8));
0x0008230c mov r2, sl | r2 = sl;
0x0008230e cmp.w sl, 0 |
| if (sl != 0) {
0x00082312 bne 0x8231e | goto label_10;
| }
0x00082314 b 0x82468 | goto label_11;
| do {
0x00082316 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00082318 cmp r2, 0 |
| if (r2 == 0) {
0x0008231a beq.w 0x82468 | goto label_11;
| }
| label_10:
0x0008231e ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x00082322 and r3, r3, 3 | r3 &= 3;
0x00082326 cmp r3, 2 |
0x00082328 bne 0x82316 |
| } while (r3 != 2);
0x0008232a ldrh.w sb, [r2, 0x32] | sb = *((r2 + 0x32));
0x0008232e mov sl, r2 | sl = r2;
0x00082330 add.w r3, sb, -1 | r3 = sb + -1;
0x00082334 add r3, r7 | r3 += r7;
0x00082336 str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x00082338 cmp.w sb, 0 |
| if (sb == 0) {
0x0008233c beq 0x8237e | goto label_12;
| }
0x0008233e movs r5, 0 | r5 = 0;
| do {
0x00082340 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00082344 adds r2, r7, r5 | r2 = r7 + r5;
0x00082346 mov r1, r8 | r1 = r8;
0x00082348 mov r0, r4 | r0 = r4;
0x0008234a ldrsh.w r3, [r3, r5, lsl 1] | offset_0 = r5 << 1;
| r3 = *((r3 + offset_0));
0x0008234e adds r5, 1 | r5++;
0x00082350 str r2, [sp] | *(sp) = r2;
0x00082352 mov r2, fp | r2 = fp;
0x00082354 bl 0x8771c | fcn_0008771c (r0, r1, r2, r3, r4);
0x00082358 cmp sb, r5 |
0x0008235a bne 0x82340 |
| } while (sb != r5);
0x0008235c b 0x8237e | goto label_12;
| label_9:
0x0008235e mov r2, fp | r2 = fp;
0x00082360 movs r1, 0x87 | r1 = 0x87;
0x00082362 str r3, [sp] | *(sp) = r3;
0x00082364 mov r0, r4 | r0 = r4;
0x00082366 mov r3, r7 | r3 = r7;
0x00082368 mov.w sb, 1 | sb = 1;
0x0008236c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082370 ldr r1, [pc, 0x108] |
0x00082372 mov r0, r4 | r0 = r4;
0x00082374 ldr.w r2, [r8] | r2 = *(r8);
0x00082378 add r1, pc | r1 = 0x1047f8;
0x0008237a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
| label_12:
0x0008237e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00082380 movs r1, 0x3f | r1 = 0x3f;
0x00082382 mov r0, r4 | r0 = r4;
0x00082384 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00082386 movs r3, 0 | r3 = 0;
0x00082388 str r7, [sp] | *(sp) = r7;
0x0008238a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008238e ldr r3, [r4] | r3 = *(r4);
0x00082390 mov r5, r0 | r5 = r0;
0x00082392 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x00082396 cbnz r3, 0x823aa |
0x00082398 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0008239a add.w r2, r0, r0, lsl 1 | r2 = r0 + (r0 << 1);
0x0008239c lsls r0, r0, 9 | r0 <<= 9;
0x0008239e add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x000823a2 movs r2, 0xfd | r2 = 0xfd;
0x000823a4 str.w sb, [r3, 0x10] | __asm ("str.w sb, [r3, 0x10]");
0x000823a8 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x000823aa ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000823ac movs r1, 0x1c | r1 = 0x1c;
0x000823ae ldr r3, [sp, 0x14] | r3 = var_14h;
0x000823b0 mov r0, r4 | r0 = r4;
0x000823b2 ldr r2, [r2] | r2 = *(r2);
0x000823b4 strd r7, sb, [sp] | __asm ("strd r7, sb, [sp]");
0x000823b8 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x000823bc ldr r3, [r4] | r3 = *(r4);
0x000823be cmp r5, 0 |
0x000823c0 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x000823c2 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000823c6 it lt |
| if (r5 >= 0) {
0x000823c8 addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x000823cc cmp r3, 0 |
| if (r3 != 0) {
0x000823ce bne 0x82454 | goto label_13;
| }
0x000823d0 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000823d2 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000823d6 add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_1:
0x000823da str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000823dc movs r1, 0 | r1 = 0;
0x000823de ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000823e0 mov r0, r4 | r0 = r4;
0x000823e2 ldrd r2, r3, [r2, 8] | __asm ("ldrd r2, r3, [r2, 8]");
0x000823e6 str r1, [sp] | *(sp) = r1;
0x000823e8 movs r1, 9 | r1 = 9;
0x000823ea bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000823ee ldr r0, [sp, 0x24] | r0 = var_24h;
0x000823f0 bl 0x8248c | fcn_0008248c (r0, r1);
| label_8:
0x000823f4 ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x000823f6 cbz r3, 0x82400 |
0x000823f8 ldr r0, [r6] | r0 = *(r6);
0x000823fa mov r1, r3 | r1 = r3;
0x000823fc bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x00082400 ldr.w r3, [r6, 0xdc] | r3 = *((r6 + 0xdc));
0x00082404 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00082406 cmp r3, 0 |
| if (r3 == 0) {
0x00082408 beq 0x82424 | goto label_14;
| }
0x0008240a ldr r1, [r2] | r1 = *(r2);
0x0008240c it lt |
| if (r3 >= 0) {
0x0008240e ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x00082410 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00082414 it lt |
| if (r3 >= 0) {
0x00082416 addlt r3, r3, -1 | r3 += -1;
| }
| if (r1 == 0) {
0x0008241a cbz r1, 0x82448 | goto label_15;
| }
0x0008241c ldr r3, [pc, 0x60] |
0x0008241e add r3, pc | r3 = 0x1048a2;
0x00082420 adds r3, 4 | r3 += 4;
| do {
0x00082422 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| label_14:
0x00082424 ldrb r2, [r6, 0x1a] | r2 = *((r6 + 0x1a));
0x00082426 str.w r3, [r6, 0xdc] | __asm ("str.w r3, [r6, 0xdc]");
0x0008242a subs r3, r2, 1 | r3 = r2 - 1;
0x0008242c ldr r2, [pc, 0x54] |
0x0008242e strb r3, [r6, 0x1a] | *((r6 + 0x1a)) = r3;
0x00082430 ldr r3, [pc, 0x40] | r3 = *(0x82474);
0x00082432 add r2, pc | r2 = 0x1048ba;
0x00082434 ldr r3, [r2, r3] | r3 = imp.atan;
0x00082436 ldr r2, [r3] | r2 = imp.atan;
0x00082438 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0008243a eors r2, r3 | r2 ^= r3;
0x0008243c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00082440 bne 0x82464 | goto label_16;
| }
0x00082442 add sp, 0x84 |
0x00082444 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x00082448 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0008244a add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008244e add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x00082452 b 0x82422 |
| } while (1);
| label_13:
0x00082454 ldr r3, [pc, 0x30] |
0x00082456 add r3, pc | r3 = 0x1048e2;
0x00082458 adds r3, 4 | r3 += 4;
0x0008245a b 0x823da | goto label_1;
| label_4:
0x0008245c mov fp, r8 |
0x0008245e b 0x821f6 | goto label_2;
| label_5:
0x00082460 str r7, [sp, 0x20] | var_20h = r7;
0x00082462 b 0x8228c | goto label_3;
| label_16:
0x00082464 blx 0x6430 | fcn_00006430 ();
| label_11:
0x00082468 movs r3, 0 | r3 = 0;
0x0008246a ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0008246c udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8248c */
| #include <stdint.h>
|
; (fcn) fcn.0008248c () | void fcn_0008248c (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int32_t var_34h_2;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x0008248c push {r0, r1, fp, sp, lr} |
0x00082490 ldr r7, [pc, 0x3c0] | r7 = *(0x82854);
0x00082492 sub sp, 0x44 |
0x00082494 ldrb.w r4, [r0, 0x30] | r4 = *((r0 + 0x30));
0x00082498 mov sb, r0 | sb = r0;
0x0008249a ldr.w sl, [r3, 8] | sl = *((r3 + 8));
0x0008249e str r3, [sp, 0x18] | var_18h = r3;
0x000824a0 ldr r3, [r3] | r3 = *(r3);
0x000824a2 ldr r7, [r0, 4] | r7 = *((r0 + 4));
0x000824a4 str r3, [sp, 0xc] | var_ch = r3;
0x000824a6 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x000824aa str r3, [sp, 0x3c] | var_3ch = r3;
0x000824ac cmp r4, 0 |
| if (r4 == 0) {
0x000824ae beq.w 0x82cde | goto label_36;
| }
0x000824b2 ldr.w r3, [pc, 0x84c] |
0x000824b6 add.w r8, r4, -1 | r8 = r4 + -1;
0x000824ba ldr.w r2, [pc, 0x848] |
0x000824be add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x000824c2 str r7, [sp, 0x30] | var_30h = r7;
0x000824c4 add r3, pc | r3 = 0x1051ca;
0x000824c6 add.w r4, r0, r4, lsl 5 | r4 = r0 + (r4 << 5);
0x000824ca adds r3, 4 | r3 += 4;
0x000824cc str r3, [sp, 0x2c] | var_2ch = r3;
0x000824ce add r2, pc | r2 = 0x1051d8;
0x000824d0 ldr.w r3, [pc, 0x834] |
0x000824d4 str r2, [sp, 0x24] | var_24h = r2;
0x000824d6 adds r2, 4 | r2 += 4;
0x000824d8 str r2, [sp, 0x28] | var_28h = r2;
0x000824da add r3, pc | r3 = 0x1051e6;
0x000824dc str r3, [sp, 0x20] | var_20h = r3;
0x000824de movs r3, 0 | r3 = 0;
0x000824e0 mov fp, r3 |
0x000824e2 str r3, [sp, 8] | var_8h = r3;
0x000824e4 b 0x825ac |
| while (r3 != 0xb8) {
0x000824e6 ldrb.w r3, [sb, 0x33] | r3 = *((sb + 0x33));
0x000824ea cmp r3, 2 |
| if (r3 == 2) {
0x000824ec beq.w 0x8285e | goto label_37;
| }
| label_6:
0x000824f0 movs r5, 0 | r5 = 0;
| label_7:
0x000824f2 ldr.w r2, [r4, 0x2b8] | r2 = *((r4 + 0x2b8));
0x000824f6 cmp r2, 0 |
| if (r2 != 0) {
0x000824f8 bne.w 0x828fe | goto label_38;
| }
| label_8:
0x000824fc ldrb.w r0, [r4, 0x2de] | r0 = *((r4 + 0x2de));
0x00082500 ldrd r2, r3, [r4, 0x2e0] | __asm ("ldrd r2, r3, [r4, 0x2e0]");
0x00082502 movs r3, 0xb8 | r3 = 0xb8;
0x00082504 ldrb.w r1, [r4, 0x2dd] | r1 = *((r4 + 0x2dd));
0x00082508 str r0, [sp] | *(sp) = r0;
0x0008250a mov r0, sl | r0 = sl;
0x0008250c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082510 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x00082514 cmp r3, 0 |
| if (r3 > 0) {
0x00082516 ble 0x8252c |
0x00082518 ldr.w r2, [sl, 0x68] | r2 = *((sl + 0x68));
0x0008251c add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x00082520 add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x00082522 lsls r1, r0, 0xb | r1 = r0 << 0xb;
0x00082524 ldrb.w r1, [r4, 0x2df] | r1 = *((r4 + 0x2df));
0x00082528 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0008252c ldr.w r2, [r4, 0x2c4] | r2 = *((r4 + 0x2c4));
0x00082530 cmp r2, 0 |
| if (r2 != 0) {
0x00082532 bne.w 0x82940 | goto label_39;
| }
| label_9:
0x00082536 cmp r5, 0 |
0x00082538 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
| if (r5 != 0) {
0x0008253c bne.w 0x8291a | goto label_40;
| }
| label_0:
0x00082540 ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x00082542 lsls r5, r3, 0x14 | r5 = r3 << 0x14;
| if (r5 < r3) {
0x00082544 bpl 0x82550 |
0x00082546 ldr.w r3, [r4, 0x2e8] | r3 = *((r4 + 0x2e8));
0x0008254a cmp r3, 0 |
| if (r3 > 0) {
0x0008254c bgt.w 0x829f8 | goto label_41;
| }
| }
| label_21:
0x00082550 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00082554 ldr.w r2, [r4, 0x2ac] | r2 = *((r4 + 0x2ac));
0x00082558 cmn r1, r3 |
0x0008255a mvn.w r2, r2 | r2 = ~r2;
| if (r1 < r3) {
0x0008255e bmi.w 0x82856 | goto label_42;
| }
0x00082562 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00082564 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00082568 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_5:
0x0008256c ldr.w r3, [r4, 0x2d8] | r3 = *((r4 + 0x2d8));
| if (r3 != 0) {
0x00082570 cbz r3, 0x82582 |
0x00082572 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00082574 movs r3, 1 | r3 = 1;
0x00082576 str r3, [sp] | *(sp) = r3;
0x00082578 movs r1, 0x43 | r1 = 0x43;
0x0008257a movs r3, 0 | r3 = 0;
0x0008257c mov r0, sl | r0 = sl;
0x0008257e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
0x00082582 ldr.w r3, [r4, 0x2b4] | r3 = *((r4 + 0x2b4));
0x00082586 cmp r3, 0 |
| if (r3 != 0) {
0x00082588 bne.w 0x827f4 | goto label_43;
| }
| label_4:
0x0008258c ldr.w r3, [r4, 0x2d0] | r3 = *((r4 + 0x2d0));
0x00082590 cmp r3, 0 |
| if (r3 != 0) {
0x00082592 bne.w 0x827e0 | goto label_44;
| }
| label_3:
0x00082596 ldr.w r2, [r4, 0x2a0] | r2 = *((r4 + 0x2a0));
0x0008259a cmp r2, 0 |
| if (r2 != 0) {
0x0008259c bne 0x82622 | goto label_45;
| }
0x0008259e add.w r8, r8, -1 | r8 += -1;
0x000825a2 subs r4, 0x60 | r4 -= 0x60;
0x000825a4 cmp.w r8, -1 |
| if (r8 == -1) {
0x000825a8 beq.w 0x826f4 | goto label_46;
| }
| label_1:
0x000825ac ldr.w r5, [r4, 0x2d8] | r5 = *((r4 + 0x2d8));
| if (r5 != 0) {
0x000825b0 cbz r5, 0x825f0 |
0x000825b2 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000825b6 ldr.w r2, [r4, 0x2b8] | r2 = *((r4 + 0x2b8));
0x000825ba ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000825be mvns r2, r2 | r2 = ~r2;
0x000825c0 cmn r1, r3 |
| if (r1 < r3) {
0x000825c2 bmi.w 0x8298a | goto label_47;
| }
0x000825c6 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000825c8 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x000825cc str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_14:
0x000825d0 ldr r3, [sp, 8] | r3 = var_8h;
0x000825d2 movs r1, 1 | r1 = 1;
0x000825d4 str.w fp, [r4, 0x2b8] | __asm ("str.w fp, [r4, 0x2b8]");
0x000825d8 mov r0, sl | r0 = sl;
0x000825da adds r3, 1 | r3++;
0x000825dc str r3, [sp, 8] | var_8h = r3;
0x000825de ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x000825e2 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000825e4 ldrd r2, r3, [r5, 8] | __asm ("ldrd r2, r3, [r5, 8]");
0x000825e8 str r1, [sp] | *(sp) = r1;
0x000825ea movs r1, 0x43 | r1 = 0x43;
0x000825ec bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
0x000825f0 ldrb.w r3, [r4, 0x2dd] | r3 = *((r4 + 0x2dd));
0x000825f4 ldr.w r6, [r4, 0x2f0] | r6 = *((r4 + 0x2f0));
0x000825f8 cmp r3, 0xb8 |
0x000825fa bne.w 0x824e6 |
| }
0x000825fe ldr.w r2, [r4, 0x2b8] | r2 = *((r4 + 0x2b8));
0x00082602 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00082606 cmp r2, 0 |
| if (r2 == 0) {
0x00082608 beq 0x82540 | goto label_0;
| }
0x0008260a ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0008260e mvns r2, r2 | r2 = ~r2;
0x00082610 cmn r1, r3 |
| if (r1 < r3) {
0x00082612 bmi.w 0x82c9c | goto label_48;
| }
0x00082616 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x0008261a ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008261c str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x00082620 b 0x82540 | goto label_0;
| label_45:
0x00082622 ldr r6, [r6, 0x28] | r6 = *((r6 + 0x28));
0x00082624 movs r3, 0 | r3 = 0;
0x00082626 movs r1, 0x31 | r1 = 0x31;
0x00082628 mov r0, sl | r0 = sl;
0x0008262a str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008262e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082630 invalid |
0x00082634 lsls r0, r0, 0xd | r0 <<= 0xd;
0x00082636 mov r5, r0 | r5 = r0;
| if (r0 == r0) {
0x00082638 beq.w 0x829e0 | goto label_49;
| }
| label_17:
0x0008263c lsls r1, r6, 0x16 | r1 = r6 << 0x16;
0x0008263e and r3, r6, 0x2000 | r3 = r6 & 0x2000;
| if (r1 < r6) {
0x00082642 bmi.w 0x82976 | goto label_50;
| }
| if (r3 == 0) {
0x00082646 cbz r3, 0x82696 | goto label_51;
| }
0x00082648 ldr.w r6, [r4, 0x2e8] | r6 = *((r4 + 0x2e8));
| if (r6 == 0) {
0x0008264c cbz r6, 0x82696 | goto label_51;
| }
| label_12:
0x0008264e ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00082650 cmp r0, 0 |
| if (r0 == 0) {
0x00082652 beq.w 0x82cee | goto label_52;
| }
0x00082656 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00082658 movs r1, 0 | r1 = 0;
0x0008265a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0008265c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0008265e cmp r0, r2 |
| if (r0 == r2) {
0x00082660 beq 0x8266c | goto label_35;
| }
| do {
0x00082662 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00082664 adds r3, 0x10 | r3 += 0x10;
0x00082666 adds r1, 1 | r1++;
0x00082668 cmp r0, r2 |
0x0008266a bne 0x82662 |
| } while (r0 != r2);
| label_35:
0x0008266c ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0008266e mov r0, sl | r0 = sl;
0x00082670 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x00082674 str r1, [sp] | *(sp) = r1;
0x00082676 movs r1, 0x65 | r1 = 0x65;
0x00082678 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008267c ldr r0, [sp, 0x18] | r0 = var_18h;
0x0008267e mov r1, r6 | r1 = r6;
0x00082680 bl 0x45f30 | fcn_00045f30 (r0);
| label_11:
0x00082684 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x00082688 movs r3, 0 | r3 = 0;
0x0008268a movs r1, 0x88 | r1 = 0x88;
0x0008268c mov r0, sl | r0 = sl;
0x0008268e str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00082692 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_51:
0x00082696 ldrb.w r2, [r4, 0x2dd] | r2 = *((r4 + 0x2dd));
0x0008269a mov r0, sl | r0 = sl;
0x0008269c ldr.w r3, [r4, 0x2bc] | r3 = *((r4 + 0x2bc));
0x000826a0 cmp r2, 0x43 |
0x000826a2 itete eq |
| if (r2 != 0x43) {
0x000826a4 ldreq r2, [r4, 0x2e0] | r2 = *((r4 + 0x2e0));
| }
| if (r2 != 0x43) {
0x000826a8 moveq r2, 0 | r2 = 0;
| }
| if (r2 == 0x43) {
0x000826aa movne r1, 9 | r1 = 9;
| }
| if (r2 != 0x43) {
0x000826ac movs r1, 8 | r1 = 8;
| }
0x000826ae ite eq |
| if (r1 != 8) {
0x000826b0 streq fp, [sp] | *(sp) = fp;
| }
| if (r1 != 8) {
0x000826b4 str.w fp, [sp] | __asm ("str.w fp, [sp]");
| }
0x000826b8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000826bc ldr.w r3, [sl] | r3 = *(sl);
0x000826c0 cmp r5, 0 |
0x000826c2 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x000826c6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000826ca it lt |
| if (r5 >= 0) {
0x000826cc addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x000826d0 cmp r3, 0 |
| if (r3 != 0) {
0x000826d2 bne.w 0x82972 | goto label_53;
| }
0x000826d6 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x000826da add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000826de add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_10:
0x000826e2 add.w r8, r8, -1 | r8 += -1;
0x000826e6 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000826e8 cmp.w r8, -1 |
0x000826ec sub.w r4, r4, 0x60 | r4 -= 0x60;
| if (r8 != -1) {
0x000826f0 bne.w 0x825ac | goto label_1;
| }
| label_46:
0x000826f4 ldr.w r1, [sb, 0x44] | r1 = *((sb + 0x44));
0x000826f8 ldr r7, [sp, 0x30] | r7 = var_30h;
| if (r1 == 0) {
0x000826fa cbz r1, 0x82748 | goto label_54;
| }
| label_2:
0x000826fc ldrd r0, r2, [r1] | __asm ("ldrd r0, r2, [r1]");
0x00082700 add.w r3, r1, 8 | r3 = r1 + 8;
0x00082704 add.w ip, r1, 0x38 |
0x00082708 str.w r0, [sb, 0x44] | __asm ("str.w r0, [sb, 0x44]");
| do {
0x0008270c ldr r6, [r3] | r6 = *(r3);
0x0008270e adds r3, 0x10 | r3 += 0x10;
0x00082710 ldr r5, [r3, -0xc] | r5 = *((r3 - 0xc));
0x00082714 adds r2, 0x10 | r2 += 0x10;
0x00082716 ldr r4, [r3, -0x8] | r4 = *((r3 - 0x8));
0x0008271a ldr r0, [r3, -0x4] | r0 = *((r3 - 0x4));
0x0008271e cmp r3, ip |
0x00082720 str r6, [r2, -0x10] | *((r2 - 0x10)) = r6;
0x00082724 str r5, [r2, -0xc] | *((r2 - 0xc)) = r5;
0x00082728 str r4, [r2, -0x8] | *((r2 - 0x8)) = r4;
0x0008272c str r0, [r2, -0x4] | *((r2 - 0x4)) = r0;
0x00082730 bne 0x8270c |
| } while (r3 != ip);
0x00082732 ldr r3, [r3] | r3 = *(r3);
0x00082734 str r3, [r2] | *(r2) = r3;
0x00082736 ldr.w r3, [sb] | r3 = *(sb);
0x0008273a ldr r0, [r3] | r0 = *(r3);
0x0008273c bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00082740 ldr.w r1, [sb, 0x44] | r1 = *((sb + 0x44));
0x00082744 cmp r1, 0 |
| if (r1 != 0) {
0x00082746 bne 0x826fc | goto label_2;
| }
| label_54:
0x00082748 ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x0008274c add.w r4, sb, 0x300 | r4 = sb + 0x300;
| if (r1 == 0) {
0x00082750 cbz r1, 0x827a0 | goto label_55;
| }
0x00082752 ldr.w r8, [sp, 0x18] | r8 = var_18h;
0x00082756 movs r5, 0 | r5 = 0;
| do {
0x00082758 ldrb.w r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0008275c ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0008275e ldr r0, [r4, 0x50] | r0 = *((r4 + 0x50));
0x00082760 add.w r3, r7, r3, lsl 6 | r3 = r7 + (r3 << 6);
0x00082764 ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x00082766 cmp r2, 0 |
| if (r2 != 0) {
0x00082768 bne.w 0x829a8 | goto label_56;
| }
0x0008276c ldrb.w ip, [r3, 0x2d] | ip = *((r3 + 0x2d));
0x00082770 tst.w ip, 0x20 |
| if ((ip & 0x20) != 0) {
0x00082774 bne.w 0x829c4 | goto label_57;
| }
0x00082778 ldr r3, [r0, 0x28] | r3 = *((r0 + 0x28));
0x0008277a tst.w r3, 0x240 |
| if ((r3 & 0x240) == 0) {
0x0008277e beq.w 0x829b8 | goto label_58;
| }
0x00082782 ldr.w lr, [r0, 0x20] |
| label_16:
0x00082786 cmp.w lr, 0 |
| if (lr != 0) {
0x0008278a beq 0x82798 |
0x0008278c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008278e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00082792 cmp r3, 0 |
| if (r3 == 0) {
0x00082794 beq.w 0x82b58 | goto label_59;
| }
| }
| label_15:
0x00082798 adds r5, 1 | r5++;
0x0008279a adds r4, 0x60 | r4 += 0x60;
0x0008279c cmp r1, r5 |
0x0008279e bgt 0x82758 |
| } while (r1 > r5);
| label_55:
0x000827a0 ldrb.w r4, [sp, 8] | r4 = var_8h;
| label_34:
0x000827a4 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000827a8 ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x000827ac ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000827b0 mvns r2, r2 | r2 = ~r2;
0x000827b2 cmn r1, r3 |
| if (r1 < r3) {
0x000827b4 bmi.w 0x82c94 | goto label_60;
| }
0x000827b8 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x000827bc ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000827be str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_30:
0x000827c2 ldr r5, [sp, 0x18] | r5 = var_18h;
0x000827c4 mov r1, sb | r1 = sb;
0x000827c6 ldr.w r3, [sb, 0x28] | r3 = *((sb + 0x28));
0x000827ca ldr r0, [sp, 0xc] | r0 = var_ch;
0x000827cc str.w r3, [r5, 0x88] | __asm ("str.w r3, [r5, 0x88]");
0x000827d0 bl 0x31028 | fcn_00031028 (r0, r1);
0x000827d2 stc2 p14, c7, [sl], -0x2ac | __asm ("stc2 p14, c7, [sl], -0x2ac");
0x000827d6 subs r3, r3, r4 | r3 -= r4;
0x000827d8 strb r3, [r5, 0x1a] | *((r5 + 0x1a)) = r3;
0x000827da add sp, 0x44 |
0x000827dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_44:
0x000827e0 ldr.w r2, [r4, 0x2cc] | r2 = *((r4 + 0x2cc));
0x000827e4 movs r1, 0x3c | r1 = 0x3c;
0x000827e6 mov r0, sl | r0 = sl;
0x000827e8 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000827ec lsrs r2, r2, 1 | r2 >>= 1;
0x000827ee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000827f2 b 0x82596 | goto label_3;
| label_43:
0x000827f4 movs r2, 0 | r2 = 0;
0x000827f6 movs r1, 8 | r1 = 8;
0x000827f8 mov r0, sl | r0 = sl;
0x000827fa str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000827fe bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082802 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x00082804 mov r0, sl | r0 = sl;
0x00082806 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00082808 ldr r2, [r3] | r2 = *(r3);
0x0008280a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008280e ldr.w r1, [r4, 0x2b4] | r1 = *((r4 + 0x2b4));
0x00082812 ldr.w r3, [sl] | r3 = *(sl);
0x00082814 adds r0, 0 | r0 += 0;
0x00082816 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x0008281a cmp r1, 0 |
0x0008281c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r1 < 0) {
0x00082820 blt.w 0x82992 | goto label_61;
| }
0x00082824 cmp r3, 0 |
| if (r3 != 0) {
0x00082826 bne.w 0x82982 | goto label_62;
| }
0x0008282a add.w r0, r1, r1, lsl 1 | r0 = r1 + (r1 << 1);
0x0008282e ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x00082832 cmp r1, 1 |
0x00082834 lsl.w r0, r0, 3 | r0 <<= 3;
0x00082838 it le |
| if (r1 > 1) {
0x0008283a addle r1, r2, -1 | r1 = r2 + -1;
| }
0x0008283e add.w r5, r3, r0 | r5 = r3 + r0;
0x00082842 itt le |
| if (r1 > 1) {
0x00082844 movle r0, 0x18 | r0 = 0x18;
| }
| if (r1 <= 1) {
0x00082846 mlale r3, r0, r1, r3 | __asm ("mlale r3, r0, r1, r3");
| }
0x0008284a str r2, [r5, 8] | *((r5 + 8)) = r2;
0x0008284c itt gt |
| if (r1 <= 1) {
0x0008284e subgt r0, 0x30 | r0 -= 0x30;
| }
| if (r1 <= 1) {
0x00082850 addgt r3, r3, r0 | r3 += r0;
| }
| label_13:
0x00082852 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00082854 b 0x8258c | goto label_4;
| label_42:
0x00082856 mov r1, sl | r1 = sl;
0x00082858 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008285c b 0x8256c | goto label_5;
| label_37:
0x0008285e ldrb.w r3, [sb, 0x30] | r3 = *((sb + 0x30));
0x00082862 subs r3, 1 | r3--;
0x00082864 cmp r3, r8 |
| if (r3 != r8) {
0x00082866 bne.w 0x824f0 | goto label_6;
| }
0x0008286a ldr r5, [r6, 0x28] | r5 = *((r6 + 0x28));
0x0008286c ands r5, r5, 0x200 | r5 &= 0x200;
| if (r5 == r5) {
0x00082870 beq.w 0x824f2 | goto label_7;
| }
0x00082874 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x00082876 ldrsb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x0008287a cmp r2, 0 |
| if (r2 >= 0) {
0x0008287c bge.w 0x824f0 | goto label_6;
| }
0x00082880 ldrh r5, [r6, 0x1e] | r5 = *((r6 + 0x1e));
0x00082882 cmp r5, 0 |
| if (r5 == 0) {
0x00082884 beq.w 0x824f2 | goto label_7;
| }
0x00082888 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008288a ldrsh.w r3, [r3, r5, lsl 1] | offset_0 = r5 << 1;
| r3 = *((r3 + offset_0));
0x0008288e cmp r3, 0x23 |
| if (r3 <= 0x23) {
0x00082890 ble.w 0x824f0 | goto label_6;
| }
0x00082894 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00082896 movs r7, 0 | r7 = 0;
0x00082898 str r6, [sp, 0x10] | var_10h = r6;
0x0008289a ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0008289c adds r1, r3, 1 | r1 = r3 + 1;
0x0008289e mov r6, r1 | r6 = r1;
| do {
0x000828a0 adds r1, r6, r7 | r1 = r6 + r7;
0x000828a2 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x000828a4 movs r2, 0xa8 | r2 = 0xa8;
0x000828a6 mov r3, r7 | r3 = r7;
0x000828a8 str r1, [sp] | *(sp) = r1;
0x000828aa mov r0, sl | r0 = sl;
0x000828ac movs r1, 0x5e | r1 = 0x5e;
0x000828ae bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000828b2 mov r2, r7 | r2 = r7;
0x000828b4 adds r7, 1 | r7++;
0x000828b6 cmp r5, r7 |
0x000828b8 bne 0x828a0 |
| } while (r5 != r7);
0x000828ba ldr r0, [sp, 0x18] | r0 = var_18h;
0x000828bc mov r3, r2 | r3 = r2;
0x000828be adds r3, 2 | r3 += 2;
0x000828c0 mov r1, r6 | r1 = r6;
0x000828c2 ldr r6, [sp, 0x10] | r6 = var_10h;
0x000828c4 ldr r2, [r0, 0x2c] | r2 = *((r0 + 0x2c));
0x000828c6 add r2, r3 | r2 += r3;
0x000828c8 ldrb.w r3, [r4, 0x2dd] | r3 = *((r4 + 0x2dd));
0x000828cc str r2, [r0, 0x2c] | *((r0 + 0x2c)) = r2;
0x000828ce mov r0, sl | r0 = sl;
0x000828d0 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x000828d4 cmp r3, 0x25 |
0x000828d6 strd r1, r5, [sp] | __asm ("strd r1, r5, [sp]");
0x000828da mov.w r3, 0 | r3 = 0;
0x000828de ite ne |
| if (r3 == 0x25) {
0x000828e0 movne r1, 0x17 | r1 = 0x17;
| }
| if (r3 != 0x25) {
0x000828e2 moveq r1, 0x14 | r1 = 0x14;
| }
0x000828e4 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x000828e8 movs r2, 0 | r2 = 0;
0x000828ea ldr.w r3, [r4, 0x2e4] | r3 = *((r4 + 0x2e4));
0x000828ee mov r5, r0 | r5 = r0;
0x000828f0 str r2, [sp] | *(sp) = r2;
0x000828f2 movs r1, 8 | r1 = 8;
0x000828f4 movs r2, 1 | r2 = 1;
0x000828f6 mov r0, sl | r0 = sl;
0x000828f8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000828fc b 0x824f2 | goto label_7;
| label_38:
0x000828fe ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00082902 mvns r2, r2 | r2 = ~r2;
0x00082904 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00082908 cmn r1, r3 |
| if (r1 < r3) {
0x0008290a bmi.w 0x82c06 | goto label_63;
| }
0x0008290e ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00082910 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00082914 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x00082918 b 0x824fc | goto label_8;
| label_40:
0x0008291a ldr.w r3, [sl] | r3 = *(sl);
0x0008291e ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x00082922 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00082926 it lt |
| if (r1 >= r3) {
0x00082928 addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x0008292c cmp r3, 0 |
| if (r3 != 0) {
0x0008292e bne 0x829f0 | goto label_64;
| }
0x00082930 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x00082934 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x00082938 add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_18:
0x0008293c str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008293e b 0x82540 | goto label_0;
| label_39:
0x00082940 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00082944 ldr.w r2, [r4, 0x2c8] | r2 = *((r4 + 0x2c8));
0x00082948 ldrd r1, r7, [r0, 0x38] | __asm ("ldrd r1, r7, [r0, 0x38]");
0x0008294c mvns r2, r2 | r2 = ~r2;
0x0008294e cmn r7, r1 |
| if (r7 < r1) {
0x00082950 bmi.w 0x82bfe | goto label_65;
| }
0x00082954 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x00082956 str.w r3, [r1, r2, lsl 2] | __asm ("str.w r3, [r1, r2, lsl 2]");
| label_28:
0x0008295a ldr.w r3, [r4, 0x2e4] | r3 = *((r4 + 0x2e4));
0x0008295e movs r1, 0x3c | r1 = 0x3c;
0x00082960 ldr.w r2, [r4, 0x2c4] | r2 = *((r4 + 0x2c4));
0x00082964 mov r0, sl | r0 = sl;
0x00082966 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008296a subs r3, 1 | r3--;
0x0008296c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082970 b 0x82536 | goto label_9;
| label_53:
0x00082972 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00082974 b 0x826e2 | goto label_10;
| label_50:
0x00082976 cmp r3, 0 |
| if (r3 == 0) {
0x00082978 beq.w 0x82684 | goto label_11;
| }
0x0008297a add r6, sp, 0x210 | r6 = sp + 0x210;
0x0008297c ldr.w r6, [r4, 0x2e8] | r6 = *((r4 + 0x2e8));
0x00082980 b 0x8264e | goto label_12;
| do {
| label_62:
0x00082982 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00082984 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x00082986 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00082988 b 0x82852 | goto label_13;
| label_47:
0x0008298a mov r1, sl | r1 = sl;
0x0008298c bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00082990 b 0x825d0 | goto label_14;
| label_61:
0x00082992 cmp r3, 0 |
0x00082994 bne 0x82982 |
| } while (r3 != 0);
0x00082996 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x0008299a subs r1, r2, 1 | r1 = r2 - 1;
0x0008299c add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000829a0 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
0x000829a4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000829a6 b 0x82852 | goto label_13;
| label_56:
0x000829a8 mov r1, r5 | r1 = r5;
0x000829aa mov r2, r4 | r2 = r4;
0x000829ac mov r0, sb | r0 = sb;
0x000829ae bl 0x82144 | fcn_00082144 (r0, r1, r2);
0x000829b2 ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x000829b6 b 0x82798 | goto label_15;
| label_58:
0x000829b8 lsls r2, r3, 0x12 | r2 = r3 << 0x12;
| if (r2 >= r3) {
0x000829ba bpl.w 0x82798 | goto label_15;
| }
0x000829be ldr.w lr, [r4, 0x48] |
0x000829c2 b 0x82786 | goto label_16;
| label_57:
0x000829c4 ldr.w r1, [r8, 8] | r1 = *((r8 + 8));
0x000829c8 ldr.w r0, [r8] | r0 = *(r8);
0x000829cc str r2, [sp, 4] | var_4h = r2;
0x000829ce ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000829d0 str r3, [sp] | *(sp) = r3;
0x000829d2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000829d4 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000829d6 bl 0x29e3c | fcn_00029e3c (r0, r1, r2, r3, r4, r5);
0x000829da ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x000829de b 0x82798 | goto label_15;
| label_49:
0x000829e0 ldr.w r2, [r4, 0x2a4] | r2 = *((r4 + 0x2a4));
0x000829e4 movs r1, 0x88 | r1 = 0x88;
0x000829e6 mov r0, sl | r0 = sl;
0x000829e8 str r3, [sp] | *(sp) = r3;
0x000829ea bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000829ee b 0x8263c | goto label_17;
| label_64:
0x000829f0 ldr r3, [pc, 0x318] |
0x000829f2 add r3, pc | r3 = 0x105702;
0x000829f4 adds r3, 4 | r3 += 4;
0x000829f6 b 0x8293c | goto label_18;
| label_41:
0x000829f8 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000829fc ldr.w r2, [r4, 0x2b0] | r2 = *((r4 + 0x2b0));
0x00082a00 cmn r1, r3 |
0x00082a02 mvn.w r2, r2 | r2 = ~r2;
| if (r1 < r3) {
0x00082a06 bmi.w 0x82cb0 | goto label_66;
| }
0x00082a0a ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00082a0c ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00082a10 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_32:
0x00082a14 ldrd r7, r5, [r4, 0x2e8] | __asm ("ldrd r7, r5, [r4, 0x2e8]");
0x00082a18 cmp r7, 0 |
0x00082a1a add.w r3, r7, r7, lsl 2 | r3 = r7 + (r7 << 2);
0x00082a1e lsl.w r3, r3, 2 | r3 <<= 2;
| if (r7 <= 0) {
0x00082a22 ble 0x82aea | goto label_67;
| }
0x00082a24 subs r3, 0x28 | r3 -= 0x28;
0x00082a26 strd r8, sb, [sp, 0x34] | __asm ("strd r8, sb, [var_34h]");
0x00082a2a add r5, r3 | r5 += r3;
0x00082a2c ldr.w r3, [sl] | r3 = *(sl);
0x00082a30 mov.w ip, 0x400 |
0x00082a34 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x00082a38 movt ip, 4 |
0x00082a3c str r6, [sp, 0x1c] | var_1ch = r6;
0x00082a3e ldrb.w r0, [r3, 0x57] | r0 = *((r3 + 0x57));
0x00082a42 mov sb, ip | sb = ip;
0x00082a44 ldr r3, [pc, 0x2c8] |
0x00082a46 add r3, pc | r3 = 0x10575a;
0x00082a48 adds r3, 4 | r3 += 4;
0x00082a4a str r3, [sp, 0x10] | var_10h = r3;
0x00082a4c ldr r3, [pc, 0x2c4] |
0x00082a4e add r3, pc | r3 = 0x105766;
0x00082a50 adds r3, 4 | r3 += 4;
0x00082a52 str r3, [sp, 0x14] | var_14h = r3;
0x00082a54 b 0x82ac6 |
| while (r0 == 0) {
0x00082a56 ldr.w r6, [sl, 0x68] | r6 = *((sl + 0x68));
0x00082a5a add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x00082a5e add.w r1, r6, r1, lsl 3 | r1 = r6 + (r1 << 3);
| label_19:
0x00082a62 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x00082a64 ldrb.w r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00082a68 cmp r1, 0xb8 |
| if (r1 != 0xb8) {
0x00082a6a beq 0x82aa6 |
0x00082a6c ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
| if (r0 != 0) {
0x00082a6e cbz r0, 0x82a8c |
0x00082a70 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00082a72 ldr.w r3, [r4, 0x2a0] | r3 = *((r4 + 0x2a0));
0x00082a76 ldr r1, [r1, 0x28] | r1 = *((r1 + 0x28));
0x00082a78 and.w r8, sb, r1 | r8 = sb & r1;
0x00082a7c cmp r3, 0 |
| if (r3 != 0) {
0x00082a7e bne 0x82af0 | goto label_68;
| }
0x00082a80 cmp.w r8, 0x40000 |
| if (r8 == 0x40000) {
0x00082a84 beq 0x82b0e | goto label_69;
| }
| label_22:
0x00082a86 ldrb.w r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00082a8a ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| }
| label_23:
0x00082a8c movs r0, 0 | r0 = 0;
0x00082a8e ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00082a90 str r0, [sp] | *(sp) = r0;
0x00082a92 mov r0, sl | r0 = sl;
0x00082a94 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082a98 ldr.w r3, [sl] | r3 = *(sl);
0x00082a9c ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x00082aa0 ldrb.w r0, [r3, 0x57] | r0 = *((r3 + 0x57));
0x00082aa4 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| }
0x00082aa6 subs r3, 1 | r3--;
0x00082aa8 it mi |
| if (r3 >= 1) {
0x00082aaa addmi r3, r2, -1 | r3 = r2 + -1;
| }
| if (r0 != 0) {
0x00082aae cbnz r0, 0x82ad8 | goto label_70;
| }
0x00082ab0 ldr.w r1, [sl, 0x68] | r1 = *((sl + 0x68));
0x00082ab4 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00082ab8 subs r7, 1 | r7--;
0x00082aba sub.w r5, r5, 0x14 | r5 -= 0x14;
0x00082abe add.w r3, r1, r3, lsl 3 | r3 = r1 + (r3 << 3);
0x00082ac2 str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r7 == 1) {
0x00082ac4 beq 0x82ae4 | goto label_71;
| }
| label_20:
0x00082ac6 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00082ac8 adds r1, r3, 1 | r1 = r3 + 1;
0x00082aca it mi |
| if (r1 >= r3) {
0x00082acc addmi r1, r2, -1 | r1 = r2 + -1;
| }
0x00082ad0 cmp r0, 0 |
0x00082ad2 beq 0x82a56 |
| }
0x00082ad4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00082ad6 b 0x82a62 | goto label_19;
| label_70:
0x00082ad8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00082ada subs r7, 1 | r7--;
0x00082adc sub.w r5, r5, 0x14 | r5 -= 0x14;
0x00082ae0 str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r7 != 1) {
0x00082ae2 bne 0x82ac6 | goto label_20;
| }
| label_71:
0x00082ae4 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x00082ae6 ldrd r8, sb, [sp, 0x34] | __asm ("ldrd r8, sb, [var_34h]");
| label_67:
0x00082aea ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00082aee b 0x82550 | goto label_21;
| label_68:
0x00082af0 adds r3, r2, 2 | r3 = r2 + 2;
0x00082af2 movs r1, 0 | r1 = 0;
0x00082af4 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00082af6 cmp.w r8, 0x40000 |
0x00082afa it eq |
| if (r8 != 0x40000) {
0x00082afc addeq r3, 1 | r3++;
| }
0x00082afe str r1, [sp] | *(sp) = r1;
0x00082b00 mov r0, sl | r0 = sl;
0x00082b02 movs r1, 0x18 | r1 = 0x18;
0x00082b04 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00082b08 cmp.w r8, 0x40000 |
| if (r8 != 0x40000) {
0x00082b0c bne 0x82a86 | goto label_22;
| }
| label_69:
0x00082b0e ldr r1, [r5, 0x20] | r1 = *((r5 + 0x20));
0x00082b10 mov r0, sl | r0 = sl;
0x00082b12 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x00082b16 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x00082b1a str r1, [sp, 4] | var_4h = r1;
0x00082b1c ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x00082b1e adds r3, 2 | r3 += 2;
0x00082b20 str r1, [sp] | *(sp) = r1;
0x00082b22 movs r1, 0x19 | r1 = 0x19;
0x00082b24 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x00082b28 ldr.w r0, [sl] | r0 = *(sl);
0x00082b2c ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00082b2e ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00082b32 ldrb.w r0, [r0, 0x57] | r0 = *((r0 + 0x57));
0x00082b36 adds r2, r3, 1 | r2 = r3 + 1;
0x00082b38 it mi |
| if (r2 >= r3) {
0x00082b3a addmi r2, r1, -1 | r2 = r1 + -1;
| }
0x00082b3e cmp r0, 0 |
| if (r0 != 0) {
0x00082b40 bne.w 0x82ca8 | goto label_72;
| }
0x00082b44 add.w r0, r2, r2, lsl 1 | r0 = r2 + (r2 << 1);
0x00082b48 ldr.w r2, [sl, 0x68] | r2 = *((sl + 0x68));
0x00082b4c add.w r2, r2, r0, lsl 3 | r2 += (r0 << 3);
| label_31:
0x00082b50 str r1, [r2, 8] | *((r2 + 8)) = r1;
0x00082b52 ldrb.w r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00082b56 b 0x82a8c | goto label_23;
| label_59:
0x00082b58 ldrb.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x00082b5c cmp r3, 0 |
| if (r3 != 0) {
0x00082b5e bne 0x82be0 | goto label_73;
| }
| label_25:
0x00082b60 ldr r0, [sp, 0x3c] | r0 = var_3ch;
| label_26:
0x00082b62 ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x00082b64 ldr.w r2, [sl] | r2 = *(sl);
0x00082b68 adds r1, 1 | r1++;
0x00082b6a ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x00082b6e itee pl |
| if (r1 < 1) {
0x00082b70 movpl r3, r1 | r3 = r1;
| }
| if (r1 >= 1) {
0x00082b72 ldrmi r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
| }
| if (r1 < 1) {
0x00082b76 add.w r3, r3, -1 | r3 += -1;
| }
0x00082b7a cmp r2, 0 |
| if (r2 != 0) {
0x00082b7c bne.w 0x82c8c | goto label_74;
| }
0x00082b80 ldr.w r2, [sl, 0x68] | r2 = *((sl + 0x68));
0x00082b84 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00082b88 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_29:
0x00082b8c subs r0, r0, r1 | r0 -= r1;
0x00082b8e strd r5, r6, [sp, 0x10] | __asm ("strd r5, r6, [var_10h]");
0x00082b92 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00082b96 ldr.w fp, [r4, 4] | fp = *((r4 + 4));
0x00082b9a mov r5, lr | r5 = lr;
0x00082b9c add.w r0, r3, r0, lsl 3 | r0 = r3 + (r0 << 3);
0x00082ba0 adds r3, 0x18 | r3 += 0x18;
0x00082ba2 b 0x82bac |
| while (r1 != fp) {
| label_27:
0x00082ba4 cmp r0, r2 |
0x00082ba6 add.w r3, r3, 0x18 | r3 += 0x18;
| if (r0 < r2) {
0x00082baa bls 0x82bd8 | goto label_75;
| }
| label_24:
0x00082bac ldr r1, [r3, -0x14] | r1 = *((r3 - 0x14));
0x00082bb0 mov r2, r3 | r2 = r3;
0x00082bb2 cmp r1, fp |
0x00082bb4 bne 0x82ba4 |
| }
0x00082bb6 ldrb r1, [r3, -0x18] | r1 = *((r3 - 0x18));
0x00082bba sub.w r6, r1, 0x5d | r6 = r1 - 0x5d;
0x00082bbe cmp r6, 1 |
| if (r6 < 1) {
0x00082bc0 bls 0x82c0e | goto label_76;
| }
0x00082bc2 cmp r1, 0x87 |
| if (r1 == 0x87) {
0x00082bc4 beq 0x82bf0 | goto label_77;
| }
0x00082bc6 cmp r1, 0x12 |
0x00082bc8 add.w r3, r3, 0x18 | r3 += 0x18;
0x00082bcc itt eq |
| if (r1 != 0x12) {
0x00082bce ldreq r1, [r4, 8] | r1 = *((r4 + 8));
| }
| if (r1 != 0x12) {
0x00082bd0 streq r1, [r3, -0x2c] | *((r3 - 0x2c)) = r1;
| }
0x00082bd4 cmp r0, r2 |
| if (r0 > r2) {
0x00082bd6 bhi 0x82bac | goto label_24;
| }
| label_75:
0x00082bd8 ldr r5, [sp, 0x10] | r5 = var_10h;
0x00082bda ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x00082bde b 0x82798 | goto label_15;
| label_73:
0x00082be0 ldr.w r3, [lr, 0xc] | r3 = *((lr + 0xc));
0x00082be4 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00082be6 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 < r3) {
0x00082be8 bmi 0x82b60 | goto label_25;
| }
0x00082bea ldr.w r0, [sb, 0x3c] | r0 = *((sb + 0x3c));
0x00082bee b 0x82b62 | goto label_26;
| label_77:
0x00082bf0 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00082bf2 str r1, [r3, -0x14] | *((r3 - 0x14)) = r1;
0x00082bf6 movs r1, 0x8e | r1 = 0x8e;
0x00082bf8 strb r1, [r3, -0x18] | *((r3 - 0x18)) = r1;
0x00082bfc b 0x82ba4 | goto label_27;
| label_65:
0x00082bfe mov r1, sl | r1 = sl;
0x00082c00 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00082c04 b 0x8295a | goto label_28;
| label_63:
0x00082c06 mov r1, sl | r1 = sl;
0x00082c08 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00082c0c b 0x824fc | goto label_8;
| label_76:
0x00082c0e ldr ip, [r3, -0x10] | ip = *((r3 - 0x10));
0x00082c12 cmp r1, 0x5d |
0x00082c14 it eq |
| if (r1 == 0x5d) {
0x00082c16 sxtheq ip, ip | __asm ("sxtheq ip, ip");
| }
| if (r1 == 0x5d) {
0x00082c1a beq 0x82c52 | goto label_33;
| }
0x00082c1c ldr r1, [sp, 0x14] | r1 = var_14h;
0x00082c1e ldr r6, [r1, 0x1c] | r6 = *((r1 + 0x1c));
0x00082c20 ands r1, r6, 0x80 | r1 = r6 & 0x80;
| if (r1 != r6) {
0x00082c24 bne 0x82cb8 | goto label_78;
| }
0x00082c26 lsls r6, r6, 0x1a | r6 <<= 0x1a;
0x00082c28 sxth.w ip, ip | __asm ("sxth.w ip, ip");
| if (r6 >= r6) {
0x00082c2c bpl 0x82c52 | goto label_33;
| }
0x00082c2e cmp.w ip, 0 |
| if (ip < 0) {
0x00082c32 blt 0x82c52 | goto label_33;
| }
0x00082c34 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00082c36 ldr r6, [r6, 4] | r6 = *((r6 + 4));
| do {
0x00082c38 ldrh.w lr, [r6, 0xa] |
0x00082c3c adds r1, 1 | r1++;
0x00082c3e adds r6, 0xc | r6 += 0xc;
0x00082c40 tst.w lr, 0x20 |
0x00082c44 itt ne |
| if ((lr & 0x20) == 0) {
0x00082c46 addne ip, ip, 1 |
| }
| if ((lr & 0x20) != 0) {
0x00082c4a sxth.w ip, ip | __asm ("sxth.w ip, ip");
| }
0x00082c4e cmp ip, r1 |
0x00082c50 bge 0x82c38 |
| } while (ip >= r1);
| label_33:
0x00082c52 ldrh.w lr, [r5, 0x34] |
0x00082c56 cmp.w lr, 0 |
| if (lr == 0) {
0x00082c5a beq 0x82ba4 | goto label_27;
| }
0x00082c5c ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x00082c5e movs r1, 0 | r1 = 0;
0x00082c60 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x00082c64 subs r6, 2 | r6 -= 2;
0x00082c66 b 0x82c6e |
| while (fp != ip) {
0x00082c68 adds r1, 1 | r1++;
0x00082c6a cmp r1, lr |
| if (r1 == lr) {
0x00082c6c beq 0x82cd8 | goto label_79;
| }
0x00082c6e ldrsh fp, [r6, 2]! | fp = *((r6 += 2));
0x00082c72 cmp fp, ip |
0x00082c74 bne 0x82c68 |
| }
0x00082c76 sxth r1, r1 | __asm ("sxth r1, r1");
0x00082c78 ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x00082c7c cmp r1, 0 |
| if (r1 < 0) {
0x00082c7e blt 0x82ba4 | goto label_27;
| }
0x00082c80 str r1, [r3, -0x10] | *((r3 - 0x10)) = r1;
0x00082c84 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00082c86 str r1, [r3, -0x14] | *((r3 - 0x14)) = r1;
0x00082c8a b 0x82ba4 | goto label_27;
| label_74:
0x00082c8c ldr r3, [pc, 0x88] |
0x00082c8e add r3, pc | r3 = 0x1059aa;
0x00082c90 adds r3, 4 | r3 += 4;
0x00082c92 b 0x82b8c | goto label_29;
| label_60:
0x00082c94 mov r1, sl | r1 = sl;
0x00082c96 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00082c9a b 0x827c2 | goto label_30;
| label_48:
0x00082c9c mov r1, sl | r1 = sl;
0x00082c9e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00082ca2 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00082ca6 b 0x82540 | goto label_0;
| label_72:
0x00082ca8 ldr r2, [pc, 0x70] |
0x00082caa add r2, pc | r2 = 0x1059ca;
0x00082cac adds r2, 4 | r2 += 4;
0x00082cae b 0x82b50 | goto label_31;
| label_66:
0x00082cb0 mov r1, sl | r1 = sl;
0x00082cb2 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00082cb6 b 0x82a14 | goto label_32;
| label_78:
0x00082cb8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00082cba ldr r1, [r1, 8] | r1 = *((r1 + 8));
| if (r1 != 0) {
0x00082cbc cbnz r1, 0x82cc4 | goto label_80;
| }
0x00082cbe b 0x82cf8 | goto label_81;
| do {
0x00082cc0 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
| if (r1 == 0) {
0x00082cc2 cbz r1, 0x82cf8 | goto label_81;
| }
| label_80:
0x00082cc4 ldrb.w r6, [r1, 0x37] | r6 = *((r1 + 0x37));
0x00082cc8 and r6, r6, 3 | r6 &= 3;
0x00082ccc cmp r6, 2 |
0x00082cce bne 0x82cc0 |
| } while (r6 != 2);
0x00082cd0 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00082cd2 ldrsh.w ip, [r1, ip, lsl 1] | offset_1 = ip << 1;
| ip = *((r1 + offset_1));
0x00082cd6 b 0x82c52 | goto label_33;
| label_79:
0x00082cd8 ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x00082cdc b 0x82ba4 | goto label_27;
| label_36:
0x00082cde ldr r1, [r0, 0x44] | r1 = *((r0 + 0x44));
0x00082ce0 mov r4, r1 | r4 = r1;
0x00082ce2 cmp r1, 0 |
| if (r1 == 0) {
0x00082ce4 beq.w 0x827a4 | goto label_34;
| }
0x00082ce8 movs r3, 0 | r3 = 0;
0x00082cea str r3, [sp, 8] | var_8h = r3;
0x00082cec b 0x826fc | goto label_2;
| label_52:
0x00082cee mov.w r1, 0x8000 |
0x00082cf2 movt r1, 0xffff | r1 = 0x-8000;
0x00082cf6 b 0x8266c | goto label_35;
| label_81:
0x00082cf8 movs r3, 0 | r3 = 0;
0x00082cfa ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00082cfc udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x82d20 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00082d20 () | void fcn_00082d20 (int16_t arg_0h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_11h, int16_t arg_12h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_2dh, int16_t arg_2eh, int16_t arg_30h, int16_t arg_44h, int16_t arg_4ch, int16_t arg_54h, int16_t arg_58h, int16_t arg_6ch, int16_t arg_d64h, int16_t arg_d6ch, arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| arithmetic var_14h;
| arithmetic x;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| arithmetic var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_8ch;
| int16_t var_8dh;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c8h;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_dch;
| int32_t var_dch_2;
| int16_t var_e4h;
| int16_t var_e8h;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_f4h;
| int16_t var_f8h;
| int16_t var_fch;
| int16_t var_100h;
| int16_t var_104h;
| int16_t var_108h;
| int16_t var_10ch;
| int16_t var_110h;
| int16_t var_114h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00082d20 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00082d24 mov sl, r0 | sl = r0;
0x00082d26 ldr.w r3, [sl] | r3 = *(sl);
0x00082d2a mov r7, r1 | r7 = r1;
0x00082d2c vpush {d8} | __asm ("vpush {d8}");
0x00082d30 sub sp, 0x11c |
0x00082d32 str r2, [sp, 0x10] | var_10h = r2;
0x00082d34 ldr.w r2, [pc, 0xaec] |
0x00082d38 str r3, [sp, 0x18] | x = r3;
0x00082d3a ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x00082d3c ldr.w r3, [pc, 0xae8] | r3 = *(0x83828);
0x00082d40 add r2, pc | r2 = 0x106568;
0x00082d42 str r0, [sp, 0x14] | var_14h = r0;
0x00082d44 ldr r3, [r2, r3] |
0x00082d46 ldr r3, [r3] | r3 = imp.atan;
0x00082d48 str r3, [sp, 0x114] | var_114h = r3;
0x00082d4a mov.w r3, 0 | r3 = 0;
0x00082d4e cbz r0, 0x82d80 |
| while (1) {
| if (r7 != 0) {
0x00082d50 cbz r7, 0x82d58 |
0x00082d52 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| if (r3 == 0) {
0x00082d56 cbz r3, 0x82d92 | goto label_116;
| }
| }
| label_0:
0x00082d58 movs r4, 1 | r4 = 1;
| label_1:
0x00082d5a ldr.w r2, [pc, 0xad0] |
0x00082d5e ldr.w r3, [pc, 0xac8] | r3 = *(0x8382a);
0x00082d62 add r2, pc | r2 = 0x106594;
0x00082d64 ldr r3, [r2, r3] | r3 = imp.atan;
0x00082d66 ldr r2, [r3] | r2 = imp.atan;
0x00082d68 ldr r3, [sp, 0x114] | r3 = var_114h;
0x00082d6a eors r2, r3 | r2 ^= r3;
0x00082d6c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00082d70 bne.w 0x85374 | goto label_117;
| }
0x00082d74 mov r0, r4 | r0 = r4;
0x00082d76 add sp, 0x11c |
0x00082d78 vpop {d8} | __asm ("vpop {d8}");
0x00082d7c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00082d80 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00082d84 cmp r3, 0 |
| if (r3 == 0) {
0x00082d86 beq 0x82e4c | goto label_118;
| }
| label_2:
0x00082d88 mov r0, sl | r0 = sl;
0x00082d8a bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x00082d8e str r0, [sp, 0x14] | var_14h = r0;
0x00082d90 b 0x82d50 |
| }
| label_116:
0x00082d92 mov r2, r3 | r2 = r3;
0x00082d94 movs r1, 0x15 | r1 = 0x15;
0x00082d96 mov r0, sl | r0 = sl;
0x00082d98 str r3, [sp] | *(sp) = r3;
0x00082d9a bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x00082d9e cmp r0, 0 |
| if (r0 != 0) {
0x00082da0 bne 0x82d58 | goto label_0;
| }
0x00082da2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00082da4 ldrb r3, [r3] | r3 = *(r3);
0x00082da6 cmp r3, 6 |
| if (r3 <= 6) {
0x00082da8 bhi 0x82dea |
0x00082daa ldr r4, [r7, 0x30] | r4 = *((r7 + 0x30));
| if (r4 != 0) {
0x00082dac cbz r4, 0x82dde |
0x00082dae ldr.w r0, [sl] | r0 = *(sl);
0x00082db2 cmp r0, 0 |
| if (r0 == 0) {
0x00082db4 beq.w 0x83014 | goto label_119;
| }
0x00082db8 movs r2, 0xc | r2 = 0xc;
0x00082dba movs r3, 0 | r3 = 0;
0x00082dbc bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| label_13:
0x00082dc0 cmp r0, 0 |
| if (r0 == 0) {
0x00082dc2 beq.w 0x8360a | goto label_120;
| }
0x00082dc6 ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x00082dca str r3, [r0] | *(r0) = r3;
0x00082dcc ldr.w r3, [pc, 0xa60] | r3 = *(0x00083830);
0x00082dd0 str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x00082dd4 str r4, [r0, 4] | *((r0 + 4)) = r4;
0x00082dd6 add r3, pc | r3 += pc;
0x00082dd8 str r3, [r0, 8] | *((r0 + 8)) = r3;
| label_23:
0x00082dda movs r3, 0 | r3 = 0;
0x00082ddc str r3, [r7, 0x30] | *((r7 + 0x30)) = r3;
| }
0x00082dde ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00082de0 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x00082de4 orr r3, r3, 0x400000 | r3 |= 0x400000;
0x00082de8 str r3, [r7, 4] | *((r7 + 4)) = r3;
| }
0x00082dea movs r2, 0 | r2 = 0;
0x00082dec mov r1, r7 | r1 = r7;
0x00082dee mov r0, sl | r0 = sl;
0x00082df0 bl 0x36278 | fcn_00036278 (r0, r1, r2);
0x00082df4 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| if (r3 == 0) {
0x00082df8 cbnz r3, 0x82e1a |
0x00082dfa ldr r4, [r7, 4] | r4 = *((r7 + 4));
0x00082dfc lsls r5, r4, 8 | r5 = r4 << 8;
| if (r5 < r4) {
0x00082dfe bmi.w 0x82ffe | goto label_121;
| }
| label_12:
0x00082e02 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00082e04 ldrb r3, [r3] | r3 = *(r3);
0x00082e06 cmp r3, 9 |
| if (r3 == 9) {
0x00082e08 beq.w 0x83038 | goto label_122;
| }
| label_15:
0x00082e0c mov r1, r7 | r1 = r7;
0x00082e0e mov r0, sl | r0 = sl;
0x00082e10 bl 0x62ec8 | r0 = fcn_00062ec8 (r0, r1);
0x00082e14 mov r1, r0 | r1 = r0;
0x00082e16 str r0, [sp, 0x24] | var_24h = r0;
| if (r0 == 0) {
0x00082e18 cbz r0, 0x82e66 | goto label_123;
| }
| }
| label_3:
0x00082e1a movs r4, 1 | r4 = 1;
| label_25:
0x00082e1c ldr.w r3, [sl, 0xdc] | r3 = *((sl + 0xdc));
0x00082e20 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x00082e24 cmp r3, 0 |
| if (r3 == 0) {
0x00082e26 beq 0x82e46 | goto label_5;
| }
0x00082e28 ldr r1, [r2] | r1 = *(r2);
0x00082e2a it lt |
| if (r3 >= 0) {
0x00082e2c ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x00082e2e ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00082e32 it lt |
| if (r3 >= 0) {
0x00082e34 addlt r3, r3, -1 | r3 += -1;
| }
| if (r1 != 0) {
0x00082e38 cbnz r1, 0x82e5c | goto label_124;
| }
| label_6:
0x00082e3a ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x00082e3c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00082e40 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| do {
| label_7:
0x00082e44 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| label_5:
0x00082e46 str.w r3, [sl, 0xdc] | __asm ("str.w r3, [sl, 0xdc]");
0x00082e4a b 0x82d5a | goto label_1;
| label_118:
0x00082e4c ldr r3, [sp, 0x18] | r3 = x;
0x00082e4e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00082e50 lsls r6, r3, 0x1c | r6 = r3 << 0x1c;
0x00082e52 itt pl |
| if (r6 < r3) {
0x00082e54 movpl r3, 1 | r3 = 1;
| }
| if (r6 < r3) {
0x00082e56 strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x00082e5a b 0x82d88 | goto label_2;
| label_124:
0x00082e5c ldr.w r3, [pc, 0x9d4] |
0x00082e60 add r3, pc | r3 = 0x106698;
0x00082e62 adds r3, 4 | r3 += 4;
0x00082e64 b 0x82e44 |
| } while (1);
| label_123:
0x00082e66 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00082e68 movs r2, 0x24 | r2 = 0x24;
0x00082e6a add r0, sp, 0xb8 | r0 += var_b8h;
0x00082e6c ldr.w fp, [r7, 0x20] | fp = *((r7 + 0x20));
0x00082e70 and r6, r3, 8 | r6 = r3 & 8;
0x00082e74 ubfx sb, r3, 3, 1 | sb = (r3 >> 3) & ((1 << 1) - 1);
0x00082e78 blx 0x62ec | fcn_000062ec ();
0x00082e7c ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00082e7e mov r2, r3 | r2 = r3;
0x00082e80 str r3, [sp, 0x28] | var_28h = r3;
0x00082e82 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x00082e84 str r3, [sp, 0xb4] | var_b4h = r3;
0x00082e86 cmp r2, 0 |
| if (r2 != 0) {
0x00082e88 bne 0x82f34 | goto label_125;
| }
0x00082e8a ldr r4, [sp, 0x28] | r4 = var_28h;
0x00082e8c ldr.w r8, [sp, 0x18] | r8 = x;
0x00082e90 str r6, [sp, 0x20] | var_20h = r6;
| label_4:
0x00082e92 ldr.w r2, [fp] | r2 = *(fp);
0x00082e96 cmp r2, r4 |
| if (r2 <= r4) {
0x00082e98 ble.w 0x83042 | goto label_126;
| }
0x00082e9c add.w r2, fp, r4, lsl 6 | r2 = fp + (r4 << 6);
0x00082ea0 ldrb.w r1, [r2, 0x2c] | r1 = *((r2 + 0x2c));
0x00082ea4 ldrd r6, r5, [r2, 0x18] | __asm ("ldrd r6, r5, [r2, 0x18]");
0x00082ea8 and r1, r1, 0x18 | r1 &= 0x18;
0x00082eac cmp r1, 8 |
| if (r1 == 8) {
0x00082eae beq 0x82f76 | goto label_127;
| }
| label_8:
0x00082eb0 cmp r5, 0 |
| if (r5 == 0) {
0x00082eb2 beq 0x82f2c | goto label_128;
| }
0x00082eb4 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x00082eb6 ldr r0, [r2] | r0 = *(r2);
0x00082eb8 ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x00082ebc cmp r2, r0 |
| if (r2 != r0) {
0x00082ebe bne.w 0x835de | goto label_129;
| }
0x00082ec2 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00082ec4 lsls r0, r2, 0x1c | r0 = r2 << 0x1c;
| if (r0 < r2) {
0x00082ec6 bmi 0x82f2c | goto label_128;
| }
0x00082ec8 ldr r6, [r5, 0x30] | r6 = *((r5 + 0x30));
| if (r6 != 0) {
0x00082eca cbz r6, 0x82ef8 |
0x00082ecc ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x00082ece cmp r1, 0 |
| if (r1 == 0) {
0x00082ed0 beq.w 0x82ff2 | goto label_130;
| }
| label_11:
0x00082ed4 ldr r1, [r5, 0x3c] | r1 = *((r5 + 0x3c));
0x00082ed6 cmp r1, 0 |
| if (r1 == 0) {
0x00082ed8 beq 0x82fae | goto label_131;
| }
| if (r4 != 0) {
| label_9:
0x00082eda cbnz r4, 0x82ef8 | goto label_10;
| }
0x00082edc ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00082ede lsls r5, r2, 0xd | r5 = r2 << 0xd;
| if (r5 >= r2) {
0x00082ee0 bpl 0x82ef8 | goto label_10;
| }
0x00082ee2 ldr.w r2, [fp] | r2 = *(fp);
0x00082ee6 cmp r2, 1 |
| if (r2 == 1) {
0x00082ee8 beq.w 0x83034 | goto label_132;
| }
0x00082eec ldrb.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x00082ef0 tst.w r2, 0x22 |
| if ((r2 & 0x22) != 0) {
0x00082ef4 bne.w 0x83034 | goto label_132;
| }
| }
| label_10:
0x00082ef8 mov r3, sb | r3 = sb;
0x00082efa mov r2, r4 | r2 = r4;
0x00082efc mov r1, r7 | r1 = r7;
0x00082efe mov r0, sl | r0 = sl;
0x00082f00 bl 0x49670 | r0 = fcn_00049670 (r0, r1, r2, r3, r4, r5, r6);
| if (r0 == 0) {
0x00082f04 cbz r0, 0x82f12 | goto label_133;
| }
0x00082f06 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00082f0a cmp r3, 0 |
| if (r3 != 0) {
0x00082f0c bne 0x82e1a | goto label_3;
| }
0x00082f0e mov.w r4, -1 | r4 = -1;
| label_133:
0x00082f12 ldrb.w r2, [r8, 0x57] | r2 = *((r8 + 0x57));
0x00082f16 ldr.w fp, [r7, 0x20] | fp = *((r7 + 0x20));
0x00082f1a cmp r2, 0 |
| if (r2 != 0) {
0x00082f1c bne.w 0x82e1a | goto label_3;
| }
0x00082f20 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00082f22 ldrb r2, [r3] | r2 = *(r3);
0x00082f24 cmp r2, 8 |
0x00082f26 itt hi |
| if (r2 <= 8) {
0x00082f28 ldrhi r2, [r7, 0x30] | r2 = *((r7 + 0x30));
| }
| if (r2 <= 8) {
0x00082f2a strhi r2, [sp, 0xb4] | var_b4h = r2;
| }
| label_128:
0x00082f2c adds r4, 1 | r4++;
| label_14:
0x00082f2e ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00082f30 cmp r2, 0 |
| if (r2 == 0) {
0x00082f32 beq 0x82e92 | goto label_4;
| }
| label_125:
0x00082f34 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00082f36 mov r1, r7 | r1 = r7;
0x00082f38 mov r0, sl | r0 = sl;
0x00082f3a bl 0x8d678 | fcn_0008d678 (r0, r1, r2);
0x00082f3e ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00082f40 mov r4, r0 | r4 = r0;
0x00082f42 cmp r3, 0 |
| if (r3 != 0) {
0x00082f44 bne.w 0x82d5a | goto label_1;
| }
0x00082f48 ldr.w r3, [sl, 0xdc] | r3 = *((sl + 0xdc));
0x00082f4c ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x00082f50 cmp r3, 0 |
| if (r3 == 0) {
0x00082f52 beq.w 0x82e46 | goto label_5;
| }
0x00082f56 ldr r1, [r2] | r1 = *(r2);
0x00082f58 it lt |
| if (r3 >= 0) {
0x00082f5a ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x00082f5c ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00082f60 it lt |
| if (r3 >= 0) {
0x00082f62 addlt r3, r3, -1 | r3 += -1;
| }
0x00082f66 cmp r1, 0 |
| if (r1 == 0) {
0x00082f68 beq.w 0x82e3a | goto label_6;
| }
0x00082f6c ldr.w r3, [pc, 0x8c8] |
0x00082f70 add r3, pc | r3 = 0x1067ac;
0x00082f72 adds r3, 4 | r3 += 4;
0x00082f74 b 0x82e44 | goto label_7;
| label_127:
0x00082f76 ldr r1, [r2, 0x30] | r1 = *((r2 + 0x30));
0x00082f78 ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x00082f7a str r2, [sp, 0x1c] | var_1ch = r2;
0x00082f7c bl 0x35c9c | r0 = fcn_00035c9c (r0, r1);
0x00082f80 cmp r0, 0 |
| if (r0 == 0) {
0x00082f82 beq 0x82eb0 | goto label_8;
| }
0x00082f84 ldr.w r1, [r8, 0x50] | r1 = *((r8 + 0x50));
0x00082f88 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00082f8a tst.w r1, 0x2000 |
| if ((r1 & 0x2000) != 0) {
0x00082f8e bne 0x82eb0 | goto label_8;
| }
0x00082f90 ldrb.w r1, [r2, 0x2c] | r1 = *((r2 + 0x2c));
0x00082f94 ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x00082f96 bic r1, r1, 0x28 | r1 = BIT_MASK (r1, 0x28);
0x00082f9a strb.w r1, [r2, 0x2c] | *((r2 + 0x2c)) = r1;
0x00082f9e ldr r1, [r2, 0x30] | r1 = *((r2 + 0x30));
0x00082fa0 ldrb.w r2, [fp, 0x2c] | r2 = *(arg_2ch);
0x00082fa4 and r2, r2, 0x40 | r2 &= 0x40;
0x00082fa8 bl 0x236b4 | fcn_000236b4 (r0, r1, r2);
0x00082fac b 0x82eb0 | goto label_8;
| label_131:
0x00082fae lsls r1, r2, 4 | r1 = r2 << 4;
| if (r1 < r2) {
0x00082fb0 bmi 0x82eda | goto label_9;
| }
0x00082fb2 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00082fb4 lsls r2, r2, 4 | r2 <<= 4;
| if (r2 < r2) {
0x00082fb6 bmi 0x82eda | goto label_9;
| }
0x00082fb8 ldr.w r2, [r8, 0x50] | r2 = *((r8 + 0x50));
0x00082fbc lsls r3, r2, 0xd | r3 = r2 << 0xd;
| if (r3 < r2) {
0x00082fbe bmi 0x82eda | goto label_9;
| }
0x00082fc0 ldr.w r0, [sl] | r0 = *(sl);
0x00082fc4 cmp r0, 0 |
| if (r0 == 0) {
0x00082fc6 beq.w 0x843ec | goto label_134;
| }
0x00082fca movs r2, 0xc | r2 = 0xc;
0x00082fcc movs r3, 0 | r3 = 0;
0x00082fce bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| label_39:
0x00082fd2 cmp r0, 0 |
| if (r0 == 0) {
0x00082fd4 beq.w 0x849f4 | goto label_135;
| }
0x00082fd8 ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x00082fdc str r3, [r0] | *(r0) = r3;
0x00082fde ldr.w r3, [pc, 0x85c] | r3 = *(0x0008383c);
0x00082fe2 str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x00082fe6 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x00082fe8 add r3, pc | r3 += pc;
0x00082fea str r3, [r0, 8] | *((r0 + 8)) = r3;
| label_69:
0x00082fec movs r3, 0 | r3 = 0;
0x00082fee str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x00082ff0 b 0x82ef8 | goto label_10;
| label_130:
0x00082ff2 ldr.w r1, [fp] | r1 = *(fp);
0x00082ff6 cmp r1, 1 |
| if (r1 > 1) {
0x00082ff8 bgt.w 0x82ed4 | goto label_11;
| }
0x00082ffa add r7, sp, 0x1b0 | r7 = sp + 0x1b0;
0x00082ffc b 0x82eda | goto label_9;
| label_121:
0x00082ffe ldr r5, [r7, 0x20] | r5 = *((r7 + 0x20));
0x00083000 mov r1, r5 | r1 = r5;
0x00083002 add.w r0, r5, 8 | r0 = r5 + 8;
0x00083006 bl 0x33260 | r0 = fcn_00033260 (r0, r1);
| if (r0 == 0) {
0x0008300a cbnz r0, 0x8301e |
0x0008300c bic r4, r4, 0x800000 | r4 = BIT_MASK (r4, 0x800000);
0x00083010 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x00083012 b 0x82e02 | goto label_12;
| label_119:
0x00083014 movs r1, 0 | r1 = 0;
0x00083016 movs r0, 0xc | r0 = 0xc;
0x00083018 bl 0x28c3c | fcn_00028c3c (r0);
0x0008301c b 0x82dc0 | goto label_13;
| }
0x0008301e ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00083020 cmp r2, 0 |
| if (r2 == 0) {
0x00083022 beq.w 0x8413a | goto label_136;
| }
| label_31:
0x00083026 ldr.w r1, [pc, 0x818] |
0x0008302a mov r0, sl | r0 = sl;
0x0008302c add r1, pc | r1 = 0x106872;
0x0008302e bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00083032 b 0x82e1a | goto label_3;
| label_132:
0x00083034 movs r4, 1 | r4 = 1;
0x00083036 b 0x82f2e | goto label_14;
| label_122:
0x00083038 mov r1, r7 | r1 = r7;
0x0008303a mov r0, sl | r0 = sl;
0x0008303c bl 0x4a6fc | fcn_0004a6fc (r0, r1, r2);
0x00083040 b 0x82e0c | goto label_15;
| label_126:
0x00083042 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x00083044 mov r3, r2 | r3 = r2;
0x00083046 ldr r6, [sp, 0x20] | r6 = var_20h;
| if (r1 != 0) {
0x00083048 cbz r1, 0x83052 |
0x0008304a ldrb r2, [r1] | r2 = *(r1);
0x0008304c cmp r2, 0x2c |
| if (r2 == 0x2c) {
0x0008304e beq.w 0x840a2 | goto label_137;
| }
| }
| label_28:
0x00083052 cmp r3, 0 |
| if (r3 <= 0) {
0x00083054 ble.w 0x831f0 | goto label_138;
| }
0x00083058 ldr.w r3, [pc, 0x7e8] |
0x0008305c add.w ip, fp, 8 |
0x00083060 ldr.w sb, [sp, 0x18] | sb = x;
0x00083064 movs r1, 0 | r1 = 0;
0x00083066 str r7, [sp, 0x1c] | var_1ch = r7;
0x00083068 mov r4, ip | r4 = ip;
0x0008306a mov r7, r1 | r7 = r1;
0x0008306c add r3, pc | r3 = 0x1068b4;
0x0008306e str r3, [sp, 0x40] | var_40h = r3;
0x00083070 str r6, [sp, 0x44] | var_44h = r6;
0x00083072 str.w ip, [sp, 0x38] | __asm ("str.w ip, [var_38h]");
| label_17:
0x00083076 ldrd r3, r2, [r4, 0x30] | __asm ("ldrd r3, r2, [r4, 0x30]");
0x0008307a orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0008307c bne 0x83090 |
0x0008307e ldr r2, [r4, 8] | r2 = *((r4 + 8));
| if (r2 == 0) {
0x00083080 cbz r2, 0x83090 | goto label_139;
| }
0x00083082 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00083084 movs r1, 0x14 | r1 = 0x14;
0x00083086 mov r0, sl | r0 = sl;
0x00083088 str r3, [sp] | *(sp) = r3;
0x0008308a ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008308c bl 0x43e6c | fcn_00043e6c (r0, r1);
| }
| label_139:
0x00083090 ldr.w r8, [r4, 0x14] | r8 = *((r4 + 0x14));
0x00083094 cmp.w r8, 0 |
| if (r8 == 0) {
0x00083098 beq.w 0x831de | goto label_140;
| }
0x0008309c movs r3, 0 | r3 = 0;
0x0008309e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000830a0 str r3, [sp, 0xdc] | var_dch = r3;
0x000830a2 add r3, sp, 0xdc | r3 += var_dch;
0x000830a4 mov r1, r3 | r1 = r3;
0x000830a6 str r3, [sp, 0x34] | var_34h = r3;
0x000830a8 bl 0x2b3d8 | fcn_0002b3d8 (r0, r1);
0x000830ac ldr.w r3, [sl, 0xd8] | r3 = *((sl + 0xd8));
0x000830b0 ldr r2, [sp, 0xdc] | r2 = var_dch;
0x000830b2 add r3, r2 | r3 += r2;
0x000830b4 str.w r3, [sl, 0xd8] | __asm ("str.w r3, [sl, 0xd8]");
0x000830b8 ldr.w r3, [sb, 0x50] | r3 = *((sb + 0x50));
0x000830bc lsls r1, r3, 0x13 | r1 = r3 << 0x13;
| if (r1 >= r3) {
0x000830be bmi 0x830dc |
0x000830c0 add.w r3, fp, r7, lsl 6 | r3 = fp + (r7 << 6);
0x000830c4 ldrb.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x000830c8 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 >= r3) {
0x000830ca bpl.w 0x835ce | goto label_141;
| }
0x000830ce ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000830d0 ldrb r2, [r3, 0x12] | r2 = *((r3 + 0x12));
| if (r2 == 0) {
0x000830d2 cbz r2, 0x830dc | goto label_20;
| }
0x000830d4 ldr r3, [r3] | r3 = *(r3);
0x000830d6 cmp r3, 1 |
| if (r3 <= 1) {
0x000830d8 ble.w 0x835ce | goto label_141;
| }
| }
| label_20:
0x000830dc ldr.w r3, [sl, 0xf8] | r3 = *((sl + 0xf8));
0x000830e0 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x000830e2 str r3, [sp, 0x20] | var_20h = r3;
0x000830e4 str.w r2, [sl, 0xf8] | __asm ("str.w r2, [sl, 0xf8]");
| if (r7 == 0) {
0x000830e8 cbnz r7, 0x83118 |
0x000830ea ldr.w r3, [fp] | r3 = *(fp);
0x000830ee cmp r3, 1 |
| if (r3 != 1) {
0x000830f0 beq 0x830fc |
0x000830f2 ldrb.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x000830f6 tst.w r3, 0x22 |
| if ((r3 & 0x22) == 0) {
0x000830fa beq 0x83118 | goto label_142;
| }
| }
0x000830fc ldrb.w r3, [fp, 0x2e] | r3 = *(arg_2eh);
0x00083100 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x00083102 bpl 0x8310c |
0x00083104 ldr.w r3, [fp, 0x44] | r3 = *(arg_44h);
0x00083108 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
| if (r3 == 0) {
0x0008310a cbz r3, 0x83124 | goto label_143;
| }
| }
0x0008310c ldrb.w r5, [fp, 0x2c] | r5 = *(arg_2ch);
0x00083110 ands r5, r5, 0x40 | r5 &= 0x40;
| if (r5 == r5) {
0x00083114 beq.w 0x83fda | goto label_144;
| }
| }
| label_142:
0x00083118 add.w r3, fp, r7, lsl 6 | r3 = fp + (r7 << 6);
0x0008311c ldrb.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x00083120 lsls r6, r3, 0x1f | r6 = r3 << 0x1f;
| if (r6 < r3) {
0x00083122 bpl 0x8312e |
| label_143:
0x00083124 ldr r5, [r4, 0x3c] | r5 = *((r4 + 0x3c));
0x00083126 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00083128 cmp r3, 0 |
| if (r3 > 0) {
0x0008312a bgt.w 0x83598 | goto label_145;
| }
| }
0x0008312e ldr.w ip, [r4, 0x14] | ip = *((r4 + 0x14));
0x00083132 ldr.w r3, [ip, 4] | r3 = *((ip + 4));
0x00083136 lsls r5, r3, 7 | r5 = r3 << 7;
| if (r5 < r3) {
0x00083138 bmi.w 0x83466 | goto label_146;
| }
0x0008313c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008313e cmp r3, r4 |
0x00083140 mov r5, r3 | r5 = r3;
| if (r3 >= r4) {
0x00083142 bhs.w 0x83466 | goto label_146;
| }
0x00083146 strd r7, r2, [sp, 0x2c] | __asm ("strd r7, r2, [var_2ch]");
0x0008314a mov r7, r4 | r7 = r4;
0x0008314c str.w ip, [sp, 0x3c] | __asm ("str.w ip, [var_3ch]");
0x00083150 b 0x8315a |
| while (r6 == 0) {
| label_16:
0x00083152 adds r5, 0x40 | r5 += 0x40;
0x00083154 cmp r5, r7 |
| if (r5 >= r7) {
0x00083156 bhs.w 0x83462 | goto label_147;
| }
0x0008315a ldr r6, [r5, 0x14] | r6 = *((r5 + 0x14));
0x0008315c cmp r6, 0 |
0x0008315e beq 0x83152 |
| }
0x00083160 ldrb.w r2, [r5, 0x25] | r2 = *((r5 + 0x25));
0x00083164 lsls r4, r2, 0x1a | r4 = r2 << 0x1a;
| if (r4 < r2) {
0x00083166 bmi 0x83152 | goto label_16;
| }
0x00083168 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0008316a cmp r0, 0 |
| if (r0 == 0) {
0x0008316c beq 0x83152 | goto label_16;
| }
0x0008316e ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00083170 ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x00083172 ldr r4, [r2, 0x3c] | r4 = *((r2 + 0x3c));
0x00083174 ldr r1, [r1, 0x3c] | r1 = *((r1 + 0x3c));
0x00083176 cmp r4, r1 |
| if (r4 != r1) {
0x00083178 bne 0x83152 | goto label_16;
| }
0x0008317a ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008317c bl 0x31abc | r0 = fcn_00031abc (r0, r1);
0x00083180 cmp r0, 0 |
| if (r0 != 0) {
0x00083182 bne 0x83152 | goto label_16;
| }
0x00083184 cmp r4, 0 |
| if (r4 == 0) {
0x00083186 beq.w 0x835fc | goto label_148;
| }
| label_22:
0x0008318a ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0008318c ands r1, r1, 0x1000000 | r1 &= 0x1000000;
| if (r1 != r1) {
0x00083190 bne 0x83152 | goto label_16;
| }
0x00083192 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00083194 mov r4, r7 | r4 = r7;
0x00083196 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x00083198 cmp r3, 0 |
| if (r3 != 0) {
0x0008319a bne.w 0x835ee | goto label_149;
| }
| label_21:
0x0008319e movs r1, 0 | r1 = 0;
0x000831a0 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000831a2 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x000831a4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000831a6 str r1, [sp] | *(sp) = r1;
0x000831a8 movs r1, 0x73 | r1 = 0x73;
0x000831aa bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000831ae ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000831b0 ldrsh.w r3, [r3, 2] | r3 = *((r3 + 2));
0x000831b4 strh.w r3, [r8, 2] | *((r8 + 2)) = r3;
| label_19:
0x000831b8 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x000831bc cmp r3, 0 |
| if (r3 != 0) {
0x000831be bne.w 0x82e1a | goto label_3;
| }
0x000831c2 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000831c4 add r1, sp, 0x98 | r1 += var_98h;
0x000831c6 str r3, [sp, 0x98] | var_98h = r3;
0x000831c8 bl 0x2b3d8 | fcn_0002b3d8 (r0, r1);
0x000831cc ldr r3, [sp, 0x20] | r3 = var_20h;
0x000831ce ldr r2, [sp, 0x98] | r2 = var_98h;
0x000831d0 str.w r3, [sl, 0xf8] | __asm ("str.w r3, [sl, 0xf8]");
0x000831d4 ldr.w r3, [sl, 0xd8] | r3 = *((sl + 0xd8));
0x000831d8 subs r3, r3, r2 | r3 -= r2;
0x000831da str.w r3, [sl, 0xd8] | __asm ("str.w r3, [sl, 0xd8]");
| label_140:
0x000831de ldr.w r3, [fp] | r3 = *(fp);
0x000831e2 adds r7, 1 | r7++;
0x000831e4 adds r4, 0x40 | r4 += 0x40;
0x000831e6 cmp r3, r7 |
| if (r3 > r7) {
0x000831e8 bgt.w 0x83076 | goto label_17;
| }
0x000831ec ldr r6, [sp, 0x44] | r6 = var_44h;
0x000831ee ldr r7, [sp, 0x1c] | r7 = var_1ch;
| label_138:
0x000831f0 ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x000831f2 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000831f4 str r2, [sp, 0x2c] | var_2ch = r2;
0x000831f6 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x000831f8 str r2, [sp, 0x34] | var_34h = r2;
0x000831fa ldrd r8, r2, [r7, 0x28] | __asm ("ldrd r8, r2, [r7, 0x28]");
0x000831fe str r2, [sp, 0x3c] | var_3ch = r2;
0x00083200 ldr r2, [sp, 0xb4] | r2 = var_b4h;
0x00083202 str r2, [sp, 0x20] | var_20h = r2;
0x00083204 and r2, r3, 1 | r2 = r3 & 1;
0x00083208 and r3, r3, 9 | r3 &= 9;
0x0008320c strb.w r2, [sp, 0x8c] | var_8ch = r2;
0x00083210 cmp r3, 1 |
| if (r3 == 1) {
0x00083212 beq.w 0x843f8 | goto label_150;
| }
| label_40:
0x00083216 ldr r5, [sp, 0x20] | r5 = var_20h;
0x00083218 mov r1, r5 | r1 = r5;
0x0008321a cmp r5, 0 |
| if (r5 == 0) {
0x0008321c beq.w 0x8409a | goto label_151;
| }
0x00083220 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x00083222 movs r2, 0 | r2 = 0;
0x00083224 mov r0, sl | r0 = sl;
0x00083226 ldr r3, [r4] | r3 = *(r4);
0x00083228 bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x0008322c ldr r3, [r5] | r3 = *(r5);
0x0008322e ldr.w r2, [sl, 0x28] | r2 = *((sl + 0x28));
0x00083232 ldr r1, [r4] | r1 = *(r4);
0x00083234 adds r3, 1 | r3++;
0x00083236 str r0, [sp, 4] | var_4h = r0;
0x00083238 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008323a add r3, r1 | r3 += r1;
0x0008323c adds r1, r2, 1 | r1 = r2 + 1;
0x0008323e str.w r1, [sl, 0x28] | __asm ("str.w r1, [sl, 0x28]");
0x00083242 mvn r1, 7 | r1 = ~7;
0x00083246 str r1, [sp, 8] | var_8h = r1;
0x00083248 movs r1, 0 | r1 = 0;
0x0008324a str r1, [sp] | *(sp) = r1;
0x0008324c movs r1, 0x76 | r1 = 0x76;
0x0008324e str r2, [sp, 0xbc] | var_bch = r2;
0x00083250 bl 0x429f8 | r0 = fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00083254 mov r5, r0 | r5 = r0;
| label_27:
0x00083256 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00083258 str r5, [sp, 0xc8] | var_c8h = r5;
0x0008325a ldrb r3, [r3] | r3 = *(r3);
0x0008325c cmp r3, 0xc |
| if (r3 == 0xc) {
0x0008325e beq.w 0x84438 | goto label_152;
| }
0x00083262 ldr r1, [r7, 4] | r1 = *((r7 + 4));
| label_41:
0x00083264 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x00083268 lsls r1, r1, 0x11 | r1 <<= 0x11;
0x0008326a mov r0, sl | r0 = sl;
0x0008326c mov r1, r7 | r1 = r7;
0x0008326e add.w r2, r3, -1 | r2 = r3 + -1;
0x00083272 str r3, [sp, 0x38] | var_38h = r3;
0x00083274 it pl |
| if (r1 < r1) {
0x00083276 movpl r3, 0x140 | r3 = 0x140;
| }
0x0008327a str.w r2, [sl, 0x38] | __asm ("str.w r2, [sl, 0x38]");
0x0008327e it pl |
| if (r1 >= r1) {
0x00083280 strhpl r3, [r7, 2] | __asm ("strhpl r3, [r7, 2]");
| }
0x00083282 bl 0x883c8 | fcn_000883c8 (r0, r1, r2, r3, r4);
0x00083286 ldr r3, [r7, 8] | r3 = *((r7 + 8));
| if (r3 == 0) {
0x00083288 cbnz r3, 0x83290 |
0x0008328a cmp r5, 0 |
| if (r5 >= 0) {
0x0008328c bge.w 0x843c6 | goto label_153;
| }
| }
| label_38:
0x00083290 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00083292 ands r3, r3, 1 | r3 &= 1;
| if (r3 != r3) {
0x00083296 bne.w 0x8414e | goto label_154;
| }
| label_33:
0x0008329a strb.w r3, [sp, 0x8d] | var_8dh = r3;
0x0008329e orrs.w r3, r8, r6 | r3 = r8 | r6;
0x000832a2 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r3 != r8) {
0x000832a4 bne.w 0x83640 | goto label_155;
| }
0x000832a8 ldrb.w r2, [sp, 0x8c] | r2 = var_8ch;
0x000832ac ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000832ae ldr.w r8, [r7, 0x44] | r8 = *((r7 + 0x44));
0x000832b2 str r2, [sp, 0x30] | var_30h = r2;
0x000832b4 subs r2, 0 |
0x000832b6 and r3, r3, 0x4000 | r3 &= 0x4000;
0x000832ba it ne |
| if (r2 == 0) {
0x000832bc movne r2, 1 | r2 = 1;
| }
0x000832be orr.w r3, r3, r2, lsl 8 | r3 |= (r2 << 8);
0x000832c2 str r3, [sp, 0x28] | var_28h = r3;
0x000832c4 cmp.w r8, 0 |
| if (r8 == 0) {
0x000832c8 beq.w 0x83884 | goto label_73;
| }
0x000832cc ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000832ce ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000832d0 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000832d2 ldr r4, [r3] | r4 = *(r3);
0x000832d4 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000832d8 mov r5, r3 | r5 = r3;
0x000832da cmp r3, 0 |
| if (r3 == 0) {
0x000832dc beq.w 0x845d8 | goto label_156;
| }
| label_54:
0x000832e0 mov r3, r4 | r3 = r4;
0x000832e2 movs r4, 0 | r4 = 0;
0x000832e4 ldr.w r2, [r8, 0x30] | r2 = *((r8 + 0x30));
0x000832e8 movs r1, 0x76 | r1 = 0x76;
0x000832ea mov r0, r5 | r0 = r5;
0x000832ec str r4, [sp] | *(sp) = r4;
0x000832ee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000832f2 ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x000832f6 movs r1, 0x73 | r1 = 0x73;
0x000832f8 mov r0, r5 | r0 = r5;
0x000832fa str r4, [sp] | *(sp) = r4;
0x000832fc adds r2, r3, 1 | r2 = r3 + 1;
0x000832fe bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083302 ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x00083306 movs r1, 0x73 | r1 = 0x73;
0x00083308 mov r0, r5 | r0 = r5;
0x0008330a str r4, [sp] | *(sp) = r4;
0x0008330c adds r2, r3, 2 | r2 = r3 + 2;
0x0008330e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083312 ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x00083316 movs r1, 0x73 | r1 = 0x73;
0x00083318 mov r0, r5 | r0 = r5;
0x0008331a str r4, [sp] | *(sp) = r4;
0x0008331c adds r2, r3, 3 | r2 = r3 + 3;
0x0008331e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083322 ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
| if (r3 != 0) {
0x00083326 cbz r3, 0x8334e |
0x00083328 mov r2, r4 | r2 = r4;
0x0008332a ldr.w r4, [sl, 0x2c] | r4 = *((sl + 0x2c));
0x0008332e ldr.w ip, [r3] | ip = *(r3);
0x00083332 movs r1, 0x4b | r1 = 0x4b;
0x00083334 mov r0, r5 | r0 = r5;
0x00083336 adds r3, r4, 1 | r3 = r4 + 1;
0x00083338 add r4, ip | r4 += ip;
0x0008333a add ip, r3 |
0x0008333c str.w r3, [r8, 0x44] | __asm ("str.w r3, [r8, 0x44]");
0x00083340 str.w r4, [sl, 0x2c] | __asm ("str.w r4, [sl, 0x2c]");
0x00083344 add.w r4, ip, -1 | r4 = ip + -1;
0x00083348 str r4, [sp] | *(sp) = r4;
0x0008334a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
0x0008334e ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00083352 movs r4, 0 | r4 = 0;
0x00083354 movs r2, 1 | r2 = 1;
0x00083356 movs r1, 0x47 | r1 = 0x47;
0x00083358 mov r0, r5 | r0 = r5;
0x0008335a adds r3, 1 | r3++;
0x0008335c str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00083360 str.w r3, [r8, 0x54] | __asm ("str.w r3, [r8, 0x54]");
0x00083362 adds r0, 0x54 | r0 += 0x54;
0x00083364 str r4, [sp] | *(sp) = r4;
0x00083366 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008336a ldrb.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0008336e cmp r3, 0 |
| if (r3 != 0) {
0x00083370 bne.w 0x84e8c | goto label_157;
| }
0x00083374 ldr.w r1, [pc, 0x4d0] |
0x00083378 mov r4, r8 | r4 = r8;
0x0008337a strd fp, r7, [sp, 0x3c] | __asm ("strd fp, r7, [var_40h]");
0x0008337e add r1, pc | r1 = 0x106bca;
0x00083380 addw sb, r1, 0xd4c | __asm ("addw sb, r1, 0xd4c");
0x00083384 addw r6, r1, 0xd58 | __asm ("addw r6, r1, 0xd58");
0x00083388 mov fp, r1 |
0x0008338a b 0x8341c |
| while (r7 < r2) {
0x0008338c ldrb r2, [r4, 0x11] | r2 = *((r4 + 0x11));
0x0008338e cmp r2, 0x5a |
| if (r2 == 0x5a) {
0x00083390 beq 0x83424 | goto label_158;
| }
0x00083392 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00083394 mov r0, sl | r0 = sl;
0x00083396 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x00083398 movs r3, 0 | r3 = 0;
0x0008339a mov r2, r3 | r2 = r3;
0x0008339c bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x000833a0 ldrd r2, r3, [sl, 0x28] | __asm ("ldrd r2, r3, [sl, 0x28]");
0x000833a4 mov r7, r0 | r7 = r0;
0x000833a6 adds r1, r2, 1 | r1 = r2 + 1;
0x000833a8 str.w r1, [sl, 0x28] | __asm ("str.w r1, [sl, 0x28]");
0x000833ac adds r1, r3, 1 | r1 = r3 + 1;
0x000833ae adds r3, 3 | r3 += 3;
0x000833b0 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x000833b2 str r1, [r4, 0x40] | *((r4 + 0x40)) = r1;
0x000833b4 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x000833b8 cmp r0, 0 |
| if (r0 == 0) {
0x000833ba beq.w 0x845b0 | goto label_159;
| }
0x000833be ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000833c0 movs r1, 0x76 | r1 = 0x76;
0x000833c2 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000833c4 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x000833c6 cmp r3, 0x69 |
0x000833c8 itt eq |
| if (r3 != 0x69) {
0x000833ca ldreq r3, [r0, 0x10] | r3 = *((r0 + 0x10));
| }
| if (r3 != 0x69) {
0x000833cc moveq r2, 1 | r2 = 1;
| }
0x000833ce mov r0, r5 | r0 = r5;
0x000833d0 it eq |
| if (r3 != 0x69) {
0x000833d2 strbeq r2, [r3] | *(r3) = r2;
| }
0x000833d4 mov.w r3, 0 | r3 = 0;
0x000833d8 it eq |
| if (r3 != 0x69) {
0x000833da ldreq r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
| }
0x000833dc str r3, [sp] | *(sp) = r3;
0x000833de movs r3, 2 | r3 = 2;
0x000833e0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000833e4 ldr r3, [r5] | r3 = *(r5);
0x000833e6 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x000833ea cmp r2, 0 |
| if (r2 != 0) {
0x000833ec bne.w 0x846d2 | goto label_160;
| }
| label_51:
0x000833f0 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000833f2 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x000833f4 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000833f8 lsls r3, r3, 3 | r3 <<= 3;
0x000833fa subs r3, 0x18 | r3 -= 0x18;
0x000833fc add r3, r2 | r3 += r2;
0x000833fe movs r2, 0xf8 | r2 = 0xf8;
0x00083400 str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x00083402 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| label_52:
0x00083404 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00083406 movs r2, 0 | r2 = 0;
0x00083408 movs r1, 0x47 | r1 = 0x47;
0x0008340a mov r0, r5 | r0 = r5;
0x0008340c str r2, [sp] | *(sp) = r2;
0x0008340e adds r3, 1 | r3++;
0x00083410 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_18:
0x00083414 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x00083416 cmp r4, 0 |
| if (r4 == 0) {
0x00083418 beq.w 0x83880 | goto label_161;
| }
0x0008341c ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0008341e ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00083420 lsls r7, r2, 0x13 | r7 = r2 << 0x13;
0x00083422 bmi 0x8338c |
| }
| label_158:
0x00083424 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00083426 cmp r3, r6 |
0x00083428 it ne |
| if (r3 != r6) {
0x0008342a cmpne r3, sb | __asm ("cmpne r3, sb");
| }
0x0008342c ite eq |
| if (r3 != r6) {
0x0008342e moveq r1, 1 | r1 = 1;
| }
| if (r3 == r6) {
0x00083430 movne r1, 0 | r1 = 0;
| }
| if (r3 == r6) {
0x00083432 beq.w 0x83618 | goto label_162;
| }
0x00083436 addw r2, fp, 0xd64 | __asm ("addw r2, arg_d64h");
0x0008343a addw r0, fp, 0xd6c | __asm ("addw r0, arg_d6ch");
0x0008343e cmp r3, r0 |
0x00083440 it ne |
| if (r3 == r0) {
0x00083442 cmpne r3, r2 | __asm ("cmpne r3, r2");
| goto label_163;
| }
| if (r3 != r0) {
| label_163:
0x00083444 bne 0x83414 | goto label_18;
| }
0x00083446 ldr.w r2, [sl, 0x28] | r2 = *((sl + 0x28));
0x0008344a ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x0008344e adds r0, r2, 1 | r0 = r2 + 1;
0x00083450 str.w r0, [sl, 0x28] | __asm ("str.w r0, [sl, 0x28]");
0x00083454 mov r0, r5 | r0 = r5;
0x00083456 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x00083458 str r1, [sp] | *(sp) = r1;
0x0008345a movs r1, 0x73 | r1 = 0x73;
0x0008345c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083460 b 0x83414 | goto label_18;
| label_147:
0x00083462 mov r4, r7 | r4 = r7;
0x00083464 ldr r7, [sp, 0x2c] | r7 = var_2ch;
| label_146:
0x00083466 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0008346a movs r6, 0 | r6 = 0;
0x0008346c mov r2, r6 | r2 = r6;
0x0008346e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00083470 movs r1, 8 | r1 = 8;
0x00083472 adds r3, 1 | r3++;
0x00083474 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00083478 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0008347a mov r3, r6 | r3 = r6;
0x0008347c str r6, [sp] | *(sp) = r6;
0x0008347e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083482 lsls r3, r7, 6 | r3 = r7 << 6;
0x00083484 mov r2, r0 | r2 = r0;
0x00083486 adds r2, 1 | r2++;
0x00083488 str r0, [sp, 0x2c] | var_2ch = r0;
0x0008348a str r3, [sp, 0x3c] | var_3ch = r3;
0x0008348c add r3, fp | r3 += fp;
0x0008348e str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x00083490 ldrb.w r5, [r3, 0x2d] | r5 = *((r3 + 0x2d));
0x00083494 str r2, [sp, 0x30] | var_30h = r2;
0x00083496 orr r5, r5, 0x10 | r5 |= 0x10;
0x0008349a strb.w r5, [r3, 0x2d] | *((r3 + 0x2d)) = r5;
0x0008349e ands r5, r5, 8 | r5 &= 8;
| if (r5 != r5) {
0x000834a2 bne.w 0x8419c | goto label_164;
| }
0x000834a6 mov r3, r5 | r3 = r5;
0x000834a8 mov r2, r5 | r2 = r5;
0x000834aa movs r1, 0xe | r1 = 0xe;
0x000834ac ldr r0, [sp, 0x14] | r0 = var_14h;
0x000834ae str r5, [sp] | *(sp) = r5;
0x000834b0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000834b4 ldr r1, [pc, 0x394] |
0x000834b6 mov r6, r0 | r6 = r0;
0x000834b8 mov r2, r4 | r2 = r4;
0x000834ba ldr r0, [sp, 0x14] | r0 = var_14h;
0x000834bc add r1, pc | r1 = 0x106d0c;
0x000834be bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x000834c2 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x000834c4 movs r1, 0xc | r1 = 0xc;
0x000834c6 ldr r2, [pc, 0x388] |
0x000834c8 mov r0, sl | r0 = sl;
0x000834ca strb.w r1, [sp, 0xdc] | var_dch = r1;
0x000834ce movs r1, 1 | r1 = 1;
0x000834d0 strd r3, r5, [sp, 0xe0] | __asm ("strd r3, r5, [var_e4h]");
0x000834d4 mov r3, r4 | r3 = r4;
0x000834d6 add r2, pc | r2 = 0x106d2c;
0x000834d8 str r5, [sp, 0xf0] | var_f0h = r5;
0x000834da strd r5, r5, [sp, 0xe8] | __asm ("strd r5, r5, [var_e8h]");
0x000834de bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x000834e2 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000834e4 mov r1, r8 | r1 = r8;
0x000834e6 mov r0, sl | r0 = sl;
0x000834e8 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x000834ec ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000834ee cmp r6, 0 |
0x000834f0 ldrh.w r2, [r8, 2] | r2 = *((r8 + 2));
0x000834f4 strh r2, [r3, 0x26] | *((r3 + 0x26)) = r2;
| if (r6 != 0) {
0x000834f6 beq 0x8351c |
0x000834f8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000834fa ldr r1, [sp, 0x14] | r1 = var_14h;
0x000834fc ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x000834fe ldr r3, [r1] | r3 = *(r1);
0x00083500 it lt |
| if (r6 >= 0) {
0x00083502 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x00083506 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008350a cmp r3, 0 |
| if (r3 != 0) {
0x0008350c bne.w 0x84610 | goto label_165;
| }
0x00083510 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x00083512 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x00083516 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| label_57:
0x0008351a str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
| label_34:
0x0008351c ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008351e movs r1, 0 | r1 = 0;
0x00083520 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00083522 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00083524 mov r0, r5 | r0 = r5;
0x00083526 str r1, [sp] | *(sp) = r1;
0x00083528 movs r1, 0x43 | r1 = 0x43;
0x0008352a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008352e ldr r1, [pc, 0x324] |
0x00083530 mov r2, r4 | r2 = r4;
0x00083532 mov r0, r5 | r0 = r5;
0x00083534 add r1, pc | r1 = 0x106d8e;
0x00083536 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008353a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008353c ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0008353e ldr r2, [sp, 0x14] | r2 = var_14h;
0x00083540 cmp r3, 0 |
0x00083542 itt lt |
| if (r3 >= 0) {
0x00083544 addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r3 < 0) {
0x00083548 str r3, [sp, 0x2c] | var_2ch = r3;
| }
0x0008354a ldr r3, [r2] | r3 = *(r2);
0x0008354c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00083550 cmp r3, 0 |
| if (r3 != 0) {
0x00083552 bne.w 0x84142 | goto label_166;
| }
0x00083556 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00083558 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0008355a add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008355e add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_32:
0x00083562 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x00083564 movs r2, 0 | r2 = 0;
0x00083566 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00083568 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008356c str.w r2, [sl, 0x1c] | __asm ("str.w r2, [sl, 0x1c]");
0x00083570 add r3, fp | r3 += fp;
0x00083572 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x00083574 and r3, r3, 0x10800 | r3 &= 0x10800;
0x00083578 cmp.w r3, 0x10000 |
| if (r3 != 0x10000) {
0x0008357c bne.w 0x831b8 | goto label_19;
| }
0x00083580 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00083582 vldr d16, [r4, 0x18] | __asm ("vldr d16, [r4, 0x18]");
0x00083586 ldrh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x0008358a adds r2, r3, 4 | r2 = r3 + 4;
0x0008358c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00083590 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00083592 strh r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x00083594 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x00083596 b 0x831b8 | goto label_19;
| label_145:
0x00083598 movs r6, 0 | r6 = 0;
0x0008359a ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0008359c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008359e movs r1, 9 | r1 = 9;
0x000835a0 str r6, [sp] | *(sp) = r6;
0x000835a2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000835a6 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x000835a8 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000835aa cmp r2, r3 |
| if (r2 != r3) {
0x000835ac beq 0x835c6 |
0x000835ae str r6, [sp] | *(sp) = r6;
0x000835b0 movs r1, 0x73 | r1 = 0x73;
0x000835b2 ldr r6, [sp, 0x14] | r6 = var_14h;
0x000835b4 mov r0, r6 | r0 = r6;
0x000835b6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000835ba ldr r1, [pc, 0x29c] |
0x000835bc mov r2, r4 | r2 = r4;
0x000835be mov r0, r6 | r0 = r6;
0x000835c0 add r1, pc | r1 = 0x106e1e;
0x000835c2 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
| }
0x000835c6 ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000835c8 strh.w r3, [r8, 2] | *((r8 + 2)) = r3;
0x000835cc b 0x831b8 | goto label_19;
| label_141:
0x000835ce ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000835d0 mov r1, r8 | r1 = r8;
0x000835d2 mov r0, sl | r0 = sl;
0x000835d4 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x000835d6 mov r3, r4 | r3 = r4;
0x000835d8 bl 0x48f90 | fcn_00048f90 (r0, r1, r2, r3);
0x000835dc b 0x830dc | goto label_20;
| label_129:
0x000835de ldr r1, [pc, 0x27c] |
0x000835e0 ldr r3, [r6] | r3 = *(r6);
0x000835e2 str r0, [sp] | *(sp) = r0;
0x000835e4 mov r0, sl | r0 = sl;
0x000835e6 add r1, pc | r1 = 0x106e48;
0x000835e8 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000835ec b 0x82e1a | goto label_3;
| label_149:
0x000835ee ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000835f0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000835f2 str r1, [sp] | *(sp) = r1;
0x000835f4 movs r1, 9 | r1 = 9;
0x000835f6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000835fa b 0x8319e | goto label_21;
| label_148:
0x000835fc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000835fe ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x00083600 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x00083602 cmp r1, r2 |
| if (r1 == r2) {
0x00083604 beq.w 0x8318a | goto label_22;
| }
0x00083608 b 0x83152 | goto label_16;
| label_120:
0x0008360a ldr.w r0, [sl] | r0 = *(sl);
0x0008360e mov r1, r4 | r1 = r4;
0x00083610 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x00083614 b.w 0x82dda | goto label_23;
| label_162:
0x00083618 ldrd r2, r1, [sl, 0x28] | __asm ("ldrd r2, r1, [sl, 0x28]");
0x0008361c ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x00083620 adds r0, r1, 1 | r0 = r1 + 1;
0x00083622 adds r1, 2 | r1 += 2;
0x00083624 str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x00083626 adds r0, r2, 1 | r0 = r2 + 1;
0x00083628 str.w r0, [sl, 0x28] | __asm ("str.w r0, [sl, 0x28]");
0x0008362c mov r0, r5 | r0 = r5;
0x0008362e str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x00083630 str.w r1, [sl, 0x2c] | __asm ("str.w r1, [sl, 0x2c]");
0x00083634 movs r1, 0 | r1 = 0;
0x00083636 str r1, [sp] | *(sp) = r1;
0x00083638 movs r1, 0x73 | r1 = 0x73;
0x0008363a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008363e b 0x83414 | goto label_18;
| label_155:
0x00083640 cmp.w r8, 0 |
| if (r8 == 0) {
0x00083644 beq.w 0x84510 | goto label_167;
| }
0x00083648 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0008364a ldr r2, [r3], 8 | r2 = *(r3);
| r3 += 8;
0x0008364e cmp r2, 0 |
| if (r2 <= 0) {
0x00083650 ble 0x8365e | goto label_168;
| }
0x00083652 movs r1, 0 | r1 = 0;
| do {
0x00083654 subs r2, 1 | r2--;
0x00083656 strh r1, [r3, 0xe] | *((r3 + 0xe)) = r1;
0x00083658 add.w r3, r3, 0x10 | r3 += 0x10;
0x0008365c bne 0x83654 |
| } while (r2 != 1);
| label_168:
0x0008365e mov r3, r8 | r3 = r8;
0x00083660 ldr r0, [r3], 8 | r0 = *(r3);
| r3 += 8;
0x00083664 cmp r0, 0 |
0x00083666 itt gt |
| if (r0 <= 0) {
0x00083668 movgt r2, r0 | r2 = r0;
| }
| if (r0 <= 0) {
0x0008366a movgt r1, 0 | r1 = 0;
| }
| if (r0 <= 0) {
0x0008366c ble 0x83678 | goto label_169;
| }
| do {
0x0008366e subs r2, 1 | r2--;
0x00083670 strh r1, [r3, 0xe] | *((r3 + 0xe)) = r1;
0x00083672 add.w r3, r3, 0x10 | r3 += 0x10;
0x00083676 bne 0x8366e |
| } while (r2 != 1);
| label_169:
0x00083678 ldrsh.w r3, [r7, 2] | r3 = *((r7 + 2));
0x0008367c cmp r3, 0x42 |
0x0008367e itt gt |
| if (r3 <= 0x42) {
0x00083680 movgt r3, 0x42 | r3 = 0x42;
| }
| if (r3 > 0x42) {
0x00083682 strhgt r3, [r7, 2] | __asm ("strhgt r3, [r7, 2]");
| }
0x00083684 ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x00083686 cbz r3, 0x83690 |
0x00083688 ldr r3, [r3] | r3 = *(r3);
0x0008368a cmp r3, r0 |
| if (r3 == r0) {
0x0008368c beq.w 0x8482c | goto label_170;
| }
| }
| label_44:
0x00083690 movs r3, 0 | r3 = 0;
0x00083692 str r3, [sp, 0x40] | var_40h = r3;
| label_65:
0x00083694 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x00083698 ldr r0, [sp, 0x18] | r0 = x;
0x0008369a str r3, [sp, 0x4c] | var_4ch = r3;
0x0008369c subs r3, 1 | r3--;
0x0008369e str r3, [sp, 0x44] | var_44h = r3;
0x000836a0 str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x000836a4 cmp r0, 0 |
| if (r0 == 0) {
0x000836a6 beq.w 0x841ec | goto label_171;
| }
0x000836aa movs r2, 0x34 | r2 = 0x34;
0x000836ac movs r3, 0 | r3 = 0;
0x000836ae bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x000836b2 mov r4, r0 | r4 = r0;
| if (r4 != 0) {
| label_36:
0x000836b4 cbz r4, 0x836ea |
0x000836b6 movs r2, 0x34 | r2 = 0x34;
0x000836b8 movs r1, 0 | r1 = 0;
0x000836ba mov r0, r4 | r0 = r4;
0x000836bc blx 0x62ec | fcn_000062ec ();
0x000836c0 ldr.w r0, [sl] | r0 = *(sl);
0x000836c4 cmp r0, 0 |
| if (r0 == 0) {
0x000836c6 beq.w 0x845cc | goto label_172;
| }
0x000836ca movs r2, 0xc | r2 = 0xc;
0x000836cc movs r3, 0 | r3 = 0;
0x000836ce bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| label_53:
0x000836d2 cmp r0, 0 |
| if (r0 == 0) {
0x000836d4 beq.w 0x85162 | goto label_173;
| }
0x000836d8 ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x000836dc str r3, [r0] | *(r0) = r3;
0x000836de ldr r3, [pc, 0x180] |
0x000836e0 str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x000836e4 str r4, [r0, 4] | *((r0 + 4)) = r4;
0x000836e6 add r3, pc | r3 = 0x106f4c;
0x000836e8 str r3, [r0, 8] | *((r0 + 8)) = r3;
| }
| label_84:
0x000836ea ldr r3, [sp, 0x18] | r3 = x;
0x000836ec ldrb.w r5, [r3, 0x57] | r5 = *((r3 + 0x57));
0x000836f0 str r5, [sp, 0x48] | var_48h = r5;
0x000836f2 cmp r5, 0 |
| if (r5 != 0) {
0x000836f4 bne.w 0x82e1a | goto label_3;
| }
0x000836f8 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000836fc ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000836fe adds r3, 1 | r3++;
0x00083700 str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x00083702 str r5, [sp, 0xe8] | var_e8h = r5;
0x00083704 strd sl, fp, [sp, 0xdc] | __asm ("strd sl, fp, [var_0hxdc]");
0x00083708 str r4, [sp, 0xe4] | var_e4h = r4;
0x0008370a strd r5, r5, [sp, 0xec] | __asm ("strd r5, r5, [var_f0h]");
0x0008370e strd r5, r5, [sp, 0xf4] | __asm ("strd r5, r5, [var_f4h]");
0x00083712 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00083714 add r3, sp, 0xdc | r3 += var_dch;
0x00083716 mov r6, r3 | r6 = r3;
0x00083718 str r3, [sp, 0x30] | var_30h = r3;
0x0008371a cmp.w r8, 0 |
| if (r8 == 0) {
0x0008371e beq.w 0x849ba | goto label_174;
| }
0x00083722 ldr.w r3, [r8] | r3 = *(r8);
0x00083726 mov r0, r6 | r0 = r6;
0x00083728 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008372a str.w r8, [r4, 0x18] | __asm ("str.w r8, [r4, 0x18]");
0x0008372e str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00083730 bl 0x35d6c | fcn_00035d6c (r0, r1);
0x00083734 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00083736 mov r0, r6 | r0 = r6;
0x00083738 bl 0x35d6c | fcn_00035d6c (r0, r1);
0x0008373c ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r3 != 0) {
0x0008373e cbz r3, 0x8378c |
0x00083740 ldr r3, [pc, 0x120] |
0x00083742 ldr r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00083744 str r5, [sp, 0xa0] | var_a0h = r5;
0x00083746 add r3, pc | r3 = 0x106fae;
0x00083748 str.w sl, [sp, 0x98] | __asm ("str.w sl, [var_98h]");
0x0008374c str r3, [sp, 0x9c] | var_9ch = r3;
0x0008374e add r3, sp, 0x98 | r3 += var_98h;
0x00083750 str r7, [sp, 0xb0] | var_b0h = r7;
0x00083752 strd r5, r5, [sp, 0xa4] | __asm ("strd r5, r5, [var_a4h]");
0x00083756 str r5, [sp, 0xac] | var_ach = r5;
| if (r1 != 0) {
0x00083758 cbz r1, 0x83764 |
0x0008375a mov r0, r3 | r0 = r3;
0x0008375c str r3, [sp, 0x1c] | var_1ch = r3;
0x0008375e bl 0x35b0c | fcn_00035b0c (r0, r1);
0x00083762 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| }
0x00083764 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x00083766 str r2, [sp, 0x34] | var_34h = r2;
| label_67:
0x00083768 mov r0, r3 | r0 = r3;
0x0008376a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008376c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008376e str r3, [sp, 0xb0] | var_b0h = r3;
0x00083770 ldr r3, [pc, 0xf4] |
0x00083772 add r3, pc | r3 = 0x106fde;
0x00083774 str r3, [sp, 0x9c] | var_9ch = r3;
0x00083776 ldr r3, [pc, 0xf4] |
0x00083778 add r3, pc | r3 = 0x106fea;
0x0008377a str r3, [sp, 0xa0] | var_a0h = r3;
0x0008377c ldr r3, [pc, 0xf0] |
0x0008377e add r3, pc | r3 = 0x106ff2;
0x00083780 str r3, [sp, 0xa4] | var_a4h = r3;
0x00083782 movs r3, 0 | r3 = 0;
0x00083784 str r3, [sp, 0xa8] | var_a8h = r3;
0x00083786 str r3, [sp, 0x98] | var_98h = r3;
0x00083788 bl 0x35b0c | fcn_00035b0c (r0, r1);
| }
| label_66:
0x0008378c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0008378e ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x00083790 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x00083792 cmp r3, 0 |
| if (r3 == 0) {
0x00083794 beq.w 0x849e2 | goto label_175;
| }
0x00083798 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x0008379a movs r3, 0 | r3 = 0;
0x0008379c str r3, [sp, 0x1c] | var_1ch = r3;
| label_68:
0x0008379e cmp r0, 0 |
| if (r0 <= 0) {
0x000837a0 ble.w 0x84ef8 | goto label_176;
| }
0x000837a4 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
| label_91:
0x000837a6 ldr r3, [pc, 0xcc] |
0x000837a8 ldr.w sb, [pc, 0xcc] | sb = *(0x00083878);
0x000837ac ldr r6, [pc, 0xcc] |
0x000837ae add r3, pc | r3 = 0x107028;
0x000837b0 str.w r8, [sp, 0x50] | __asm ("str.w r8, [var_50h]");
0x000837b4 add sb, pc | sb += pc;
0x000837b6 str r3, [sp, 0x20] | var_20h = r3;
0x000837b8 add r6, pc | r6 = 0x107038;
0x000837ba movs r3, 0 | r3 = 0;
0x000837bc str r7, [sp, 0x54] | var_54h = r7;
0x000837be mov r8, r3 | r8 = r3;
0x000837c0 mov r7, r6 | r7 = r6;
0x000837c2 ldr r1, [sp, 0xf4] | r1 = var_f4h;
0x000837c4 ldr r5, [sp, 0x30] | r5 = var_30h;
0x000837c6 mov r6, sb | r6 = sb;
0x000837c8 b 0x837e0 |
| while (r3 >= r1) {
| label_24:
0x000837ca ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000837cc add.w r8, r8, 1 | r8++;
0x000837d0 ldr r1, [sp, 0xf4] | r1 = var_f4h;
0x000837d2 cmp r0, r8 |
0x000837d4 bic r1, r1, 0x20000 | r1 = BIT_MASK (r1, 0x20000);
0x000837d8 str r1, [sp, 0xf4] | var_f4h = r1;
| if (r0 <= r8) {
0x000837da ble.w 0x841fa | goto label_177;
| }
0x000837de ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x000837e0 add.w r0, r8, r8, lsl 2 | r0 = r8 + (r8 << 2);
0x000837e4 orr r1, r1, 0x20000 | r1 |= 0x20000;
0x000837e8 ldr.w sb, [r2, r0, lsl 2] | offset_0 = r0 << 2;
| sb = *((r2 + offset_0));
0x000837ec mov r0, r5 | r0 = r5;
0x000837ee str r1, [sp, 0xf4] | var_f4h = r1;
0x000837f0 ldr.w r1, [sb, 0x14] | r1 = *((sb + 0x14));
0x000837f4 bl 0x35d6c | fcn_00035d6c (r0, r1);
0x000837f8 ldr.w r1, [sb, 4] | r1 = *((sb + 4));
0x000837fc lsls r3, r1, 7 | r3 = r1 << 7;
0x000837fe bpl 0x837ca |
| }
0x00083800 ldr.w r2, [sb, 0x2c] | r2 = *((sb + 0x2c));
0x00083804 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00083806 ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x00083808 movs r2, 0 | r2 = 0;
0x0008380a strd r3, r6, [sp, 0x9c] | __asm ("strd r3, r6, [var_9ch]");
0x0008380e str r7, [sp, 0xa4] | var_a4h = r7;
0x00083810 str r5, [sp, 0xb0] | var_b0h = r5;
0x00083812 str r2, [sp, 0xa8] | var_a8h = r2;
0x00083814 str r2, [sp, 0x98] | var_98h = r2;
0x00083816 cmp r1, 0 |
| if (r1 == 0) {
0x00083818 beq 0x837ca | goto label_24;
| }
0x0008381a add r0, sp, 0x98 | r0 += var_98h;
0x0008381c bl 0x35b0c | fcn_00035b0c (r0, r1);
0x00083820 b 0x837ca | goto label_24;
| label_161:
0x00083880 ldrd fp, r7, [sp, 0x3c] | __asm ("ldrd fp, r7, [var_40h]");
| label_73:
0x00083884 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00083886 mov r1, fp | r1 = fp;
0x00083888 str r7, [sp, 4] | var_4h = r7;
0x0008388a mov r0, sl | r0 = sl;
0x0008388c ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008388e str r3, [sp, 8] | var_8h = r3;
0x00083890 ldrsh.w r3, [r7, 2] | r3 = *((r7 + 2));
0x00083894 str r3, [sp, 0xc] | var_ch = r3;
0x00083896 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00083898 str r3, [sp] | *(sp) = r3;
0x0008389a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008389c bl 0x7ee90 | fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x000838a0 str r0, [sp, 0x28] | var_28h = r0;
0x000838a2 cmp r0, 0 |
| if (r0 == 0) {
0x000838a4 beq.w 0x82e1a | goto label_3;
| }
0x000838a8 ldrsh.w r3, [r0, 0x36] | r3 = *((r0 + 0x36));
0x000838ac ldrsh.w r2, [r7, 2] | r2 = *((r7 + 2));
0x000838b0 cmp r2, r3 |
0x000838b2 it gt |
| if (r2 > r3) {
0x000838b4 strhgt r3, [r7, 2] | __asm ("strhgt r3, [r7, 2]");
| }
0x000838b6 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x000838b8 cbz r3, 0x838c6 |
0x000838ba ldr r3, [sp, 0x28] | r3 = var_28h;
0x000838bc ldrb.w r3, [r3, 0x33] | r3 = *((r3 + 0x33));
| if (r3 == 0) {
0x000838c0 cbz r3, 0x838c6 | goto label_178;
| }
0x000838c2 strb.w r3, [sp, 0x8d] | var_8dh = r3;
| }
| label_178:
0x000838c6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000838c8 cmp r3, 0 |
| if (r3 == 0) {
0x000838ca beq.w 0x83fca | goto label_179;
| }
0x000838ce ldr r3, [sp, 0x28] | r3 = var_28h;
0x000838d0 ldrsb.w r1, [r3, 0x31] | r1 = *((r3 + 0x31));
0x000838d4 ldrb.w r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x000838d8 str r1, [sp, 0xb8] | var_b8h = r1;
0x000838da lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
| if (r0 >= r3) {
0x000838dc bpl.w 0x847b8 | goto label_180;
| }
0x000838e0 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000838e2 ldrb.w r3, [r0, 0x30] | r3 = *((r0 + 0x30));
0x000838e6 subs r3, 1 | r3--;
0x000838e8 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000838ec add.w r2, r0, r2, lsl 5 | r2 = r0 + (r2 << 5);
0x000838f0 ldr.w r2, [r2, 0x338] | r2 = *((r2 + 0x338));
0x000838f4 cmp r2, 0 |
| if (r2 == 0) {
0x000838f6 beq.w 0x84ee8 | goto label_181;
| }
0x000838fa ldr r3, [r0, 0x20] | r3 = *((r0 + 0x20));
| label_63:
0x000838fc str r3, [sp, 0xd0] | var_d0h = r3;
0x000838fe ldr r3, [sp, 0x20] | r3 = var_20h;
0x00083900 ldr r3, [r3] | r3 = *(r3);
0x00083902 cmp r3, r1 |
0x00083904 itt eq |
| if (r3 != r1) {
0x00083906 moveq r3, 0 | r3 = 0;
| }
| if (r3 != r1) {
0x00083908 streq r3, [sp, 0xb4] | var_b4h = r3;
| }
| if (r3 == r1) {
0x0008390a beq.w 0x83fca | goto label_179;
| }
| label_26:
0x0008390e cmp.w r8, 0 |
| if (r8 == 0) {
0x00083912 beq.w 0x8457e | goto label_182;
| }
0x00083916 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0008391a ldr.w r2, [sl, 0x38] | r2 = *((sl + 0x38));
0x0008391e ldr.w fp, [r7, 0x44] | fp = *((r7 + 0x44));
0x00083922 adds r3, 1 | r3++;
0x00083924 ldr.w r8, [sl, 8] | r8 = *((sl + 8));
0x00083928 str r3, [sp, 0x4c] | var_4ch = r3;
0x0008392a str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x0008392e mov r3, r2 | r3 = r2;
0x00083930 subs r4, r3, 1 | r4 = r3 - 1;
0x00083932 subs r3, 2 | r3 -= 2;
0x00083934 str r3, [sp, 0x6c] | var_6ch = r3;
0x00083936 ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x0008393a str r2, [sp, 0x70] | var_70h = r2;
0x0008393c subs r2, 3 | r2 -= 3;
0x0008393e str r2, [sp, 0x3c] | var_3ch = r2;
0x00083940 str.w r2, [sl, 0x38] | __asm ("str.w r2, [sl, 0x38]");
0x00083944 str r3, [sp, 0x48] | var_48h = r3;
0x00083946 cmp.w r8, 0 |
| if (r8 == 0) {
0x0008394a beq.w 0x84562 | goto label_183;
| }
0x0008394e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00083950 str r3, [sp, 0x54] | var_54h = r3;
| label_49:
0x00083952 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00083954 movs r1, 0 | r1 = 0;
0x00083956 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00083958 add r0, sp, 0xf0 | r0 += var_f0h;
0x0008395a ldr r5, [r3, 0x18] | r5 = *((r3 + 0x18));
0x0008395c ldr.w sb, [r3, 0x30] | sb = *((r3 + 0x30));
0x00083960 subs r6, r2, 1 | r6 = r2 - 1;
0x00083962 movs r2, 0x24 | r2 = 0x24;
0x00083964 str r6, [sp, 0x5c] | var_5ch = r6;
0x00083966 ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x0008396a str.w r6, [sl, 0x38] | __asm ("str.w r6, [sl, 0x38]");
0x0008396e str r3, [sp, 0x30] | var_30h = r3;
0x00083970 blx 0x62ec | fcn_000062ec ();
0x00083974 ldr.w r2, [fp, 0x30] | r2 = *(arg_30h);
0x00083978 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008397a str r4, [sp, 0xe8] | var_e8h = r4;
0x0008397c str r2, [sp, 0x104] | var_104h = r2;
0x0008397e str r3, [sp, 0xec] | var_ech = r3;
0x00083980 adds r3, r2, 2 | r3 = r2 + 2;
0x00083982 str r3, [sp, 0xfc] | var_fch = r3;
0x00083984 str r3, [sp, 0x84] | var_84h = r3;
0x00083986 adds r3, r2, 3 | r3 = r2 + 3;
0x00083988 strd sl, fp, [sp, 0xdc] | __asm ("strd sl, fp, [var_0hxdc]");
0x0008398c str.w r8, [sp, 0xe4] | __asm ("str.w r8, [var_e4h]");
0x00083990 str r3, [sp, 0x60] | var_60h = r3;
0x00083992 str r3, [sp, 0x10c] | var_10ch = r3;
0x00083994 ldrb.w r3, [fp, 0x11] | r3 = *(arg_11h);
0x00083998 str r2, [sp, 0x40] | var_40h = r2;
0x0008399a adds r2, 1 | r2++;
0x0008399c str r2, [sp, 0x50] | var_50h = r2;
0x0008399e cmp r3, 0x56 |
| if (r3 == 0x56) {
0x000839a0 beq.w 0x846a4 | goto label_184;
| }
0x000839a4 cmp r3, 0x5a |
| if (r3 == 0x5a) {
0x000839a6 beq.w 0x847c0 | goto label_185;
| }
0x000839aa movs r2, 2 | r2 = 2;
0x000839ac str r2, [sp, 0xf4] | var_f4h = r2;
| label_79:
0x000839ae ldr.w r1, [sl, 0x2c] | r1 = *((sl + 0x2c));
0x000839b2 subs r3, 0x56 | r3 -= 0x56;
0x000839b4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000839b6 tst.w r3, 0xfd |
0x000839ba it ne |
| if ((r3 & 0xfd) == 0) {
0x000839bc movne r3, 0 | r3 = 0;
| }
0x000839be add.w r5, r1, 1 | r5 = r1 + 1;
0x000839c2 it ne |
| if ((r3 & 0xfd) == 0) {
0x000839c4 strne r3, [sp, 0x20] | var_20h = r3;
| }
0x000839c6 add r2, r1 | r2 += r1;
0x000839c8 add.w r1, r2, 2 | r1 = r2 + 2;
0x000839cc str r1, [sp, 0x64] | var_64h = r1;
0x000839ce str.w r1, [sl, 0x2c] | __asm ("str.w r1, [sl, 0x2c]");
0x000839d2 str r1, [sp, 0xf8] | var_f8h = r1;
0x000839d4 add.w r1, r2, 1 | r1 = r2 + 1;
0x000839d8 str r1, [sp, 0x44] | var_44h = r1;
| if ((r3 & 0xfd) == 0) {
0x000839da bne 0x839e4 |
| label_59:
0x000839dc adds r3, r2, 3 | r3 = r2 + 3;
0x000839de str r3, [sp, 0x20] | var_20h = r3;
0x000839e0 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
| }
| label_64:
0x000839e4 ldrb.w r3, [fp, 0x12] | r3 = *(arg_12h);
0x000839e8 subs r3, 0x56 | r3 -= 0x56;
0x000839ea tst.w r3, 0xfd |
0x000839ee iteet eq |
| if ((r3 & 0xfd) != 0) {
0x000839f0 ldreq r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
| }
| if ((r3 & 0xfd) == 0) {
0x000839f4 movne r3, 0 | r3 = 0;
| }
| if ((r3 & 0xfd) != 0) {
0x000839f6 streq r3, [sp, 0x34] | var_34h = r3;
| }
| if ((r3 & 0xfd) == 0) {
0x000839f8 adds r3, 1 | r3++;
| }
0x000839fa itt eq |
| if (r3 != 1) {
0x000839fc streq r3, [sp, 0x34] | var_34h = r3;
| }
| if (r3 != 1) {
0x000839fe streq r3, [sl, 0x2c] | *((sl + 0x2c)) = r3;
| }
0x00083a02 ldrb.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x00083a06 cmp r3, 0x4c |
| if (r3 == 0x4c) {
0x00083a08 beq.w 0x846c6 | goto label_186;
| }
0x00083a0c ldr r3, [sp, 0x48] | r3 = var_48h;
0x00083a0e cmp r3, 0 |
| if (r3 == 0) {
0x00083a10 beq.w 0x84ee2 | goto label_187;
| }
0x00083a14 ldr r3, [r3] | r3 = *(r3);
| label_74:
0x00083a16 ldr.w r1, [fp, 0x4c] | r1 = *(arg_4ch);
0x00083a1a ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x00083a1e adds r1, r5, r1 | r1 = r5 + r1;
0x00083a20 str r1, [sp, 0x74] | var_74h = r1;
| if (r2 != 0) {
0x00083a22 cbz r2, 0x83a2a |
0x00083a24 ldr r2, [r2] | r2 = *(r2);
0x00083a26 add r1, r2 | r1 += r2;
0x00083a28 str r1, [sp, 0x74] | var_74h = r1;
| }
0x00083a2a ldr.w r1, [sl, 0x2c] | r1 = *((sl + 0x2c));
0x00083a2e adds r2, r1, r3 | r2 = r1 + r3;
0x00083a30 adds r1, 1 | r1++;
0x00083a32 str r1, [sp, 0x68] | var_68h = r1;
0x00083a34 add.w r1, r3, r2 | r1 = r3 + r2;
0x00083a38 add.w r2, r2, 1 | r2++;
0x00083a3c str r2, [sp, 0x100] | var_100h = r2;
0x00083a3e add.w r2, r3, r1 | r2 = r3 + r1;
0x00083a42 add r3, r2 | r3 += r2;
0x00083a44 add.w r2, r2, 1 | r2++;
0x00083a48 str r2, [sp, 0x110] | var_110h = r2;
0x00083a4a add.w r1, r1, 1 | r1++;
0x00083a4e ldr r2, [sp, 0x48] | r2 = var_48h;
0x00083a50 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00083a54 ite ne |
| if (r1 == 1) {
0x00083a56 movne r3, 1 | r3 = 1;
| }
| if (r1 != 1) {
0x00083a58 moveq r3, 0 | r3 = 0;
| }
0x00083a5a str r1, [sp, 0x108] | var_108h = r1;
0x00083a5c cmp r2, 0 |
0x00083a5e ite eq |
| if (r2 != 0) {
0x00083a60 moveq r3, 0 | r3 = 0;
| }
| if (r2 == 0) {
0x00083a62 andne r3, r3, 1 | r3 &= 1;
| }
0x00083a66 str r3, [sp, 0x7c] | var_7ch = r3;
| label_60:
0x00083a68 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00083a6a cmp r3, 0 |
0x00083a6c itt gt |
| if (r3 <= 0) {
0x00083a6e ldrgt r6, [sp, 0x30] | r6 = var_30h;
| }
| if (r3 <= 0) {
0x00083a70 movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x00083a72 ble 0x83a8a | goto label_188;
| }
| do {
0x00083a74 adds r3, r5, r4 | r3 = r5 + r4;
0x00083a76 mov r2, sb | r2 = sb;
0x00083a78 str r3, [sp] | *(sp) = r3;
0x00083a7a movs r1, 0x5e | r1 = 0x5e;
0x00083a7c mov r3, r4 | r3 = r4;
0x00083a7e mov r0, r8 | r0 = r8;
0x00083a80 adds r4, 1 | r4++;
0x00083a82 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083a86 cmp r6, r4 |
0x00083a88 bne 0x83a74 |
| } while (r6 != r4);
| label_188:
0x00083a8a ldr r2, [sp, 0x44] | r2 = var_44h;
0x00083a8c movs r1, 0x61 | r1 = 0x61;
0x00083a8e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00083a90 mov r0, r8 | r0 = r8;
0x00083a92 str r2, [sp] | *(sp) = r2;
0x00083a94 mov r2, r5 | r2 = r5;
0x00083a96 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083a9a ldr.w r1, [fp, 8] | r1 = *(arg_8h);
0x00083a9e cmp r1, 0 |
| if (r1 == 0) {
0x00083aa0 beq.w 0x8455a | goto label_189;
| }
0x00083aa4 ldr.w r3, [fp, 0x4c] | r3 = *(arg_4ch);
0x00083aa8 mov r0, sl | r0 = sl;
0x00083aaa add.w sb, r5, r3 | sb = r5 + r3;
0x00083aae movs r3, 0 | r3 = 0;
0x00083ab0 mov r2, r3 | r2 = r3;
0x00083ab2 ldr r5, [r1] | r5 = *(r1);
0x00083ab4 bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x00083ab6 mcr2 p8, 5, pc, c12, c10, 6 | __asm ("mcr2 p8, 5, pc, c12, c10, 6");
0x00083aba adds r0, 0x2c | r0 += 0x2c;
0x00083abc mov r2, sb | r2 = sb;
0x00083abe mov r4, r0 | r4 = r0;
0x00083ac0 movs r1, 0x5a | r1 = 0x5a;
0x00083ac2 mov r0, r8 | r0 = r8;
0x00083ac4 adds r3, 1 | r3++;
0x00083ac6 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00083aca str r3, [sp, 0x58] | var_58h = r3;
0x00083acc ldr.w r3, [fp, 0x44] | r3 = *(arg_44h);
0x00083ad0 str r5, [sp] | *(sp) = r5;
0x00083ad2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083ad6 ldr.w r3, [r8] | r3 = *(r8);
0x00083ada mov r6, r0 | r6 = r0;
0x00083adc ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00083ae0 cmp r2, 0 |
| if (r2 != 0) {
0x00083ae2 bne.w 0x850ce | goto label_190;
| }
0x00083ae6 ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x00083aea ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x00083aee add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00083af2 lsls r3, r3, 3 | r3 <<= 3;
0x00083af4 subs r3, 0x18 | r3 -= 0x18;
0x00083af6 add r3, r2 | r3 += r2;
0x00083af8 movs r2, 0xf8 | r2 = 0xf8;
0x00083afa str r4, [r3, 0x10] | *((r3 + 0x10)) = r4;
0x00083afc strb r2, [r3, 1] | *((r3 + 1)) = r2;
| label_78:
0x00083afe adds r2, r6, 2 | r2 = r6 + 2;
0x00083b00 adds r3, r6, 4 | r3 = r6 + 4;
0x00083b02 movs r1, 0xd | r1 = 0xd;
0x00083b04 str r2, [sp] | *(sp) = r2;
0x00083b06 mov r0, r8 | r0 = r8;
0x00083b08 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083b0c movs r3, 0 | r3 = 0;
0x00083b0e ldr r2, [sp, 0x58] | r2 = var_58h;
0x00083b10 str r3, [sp] | *(sp) = r3;
0x00083b12 movs r1, 9 | r1 = 9;
0x00083b14 mov r0, r8 | r0 = r8;
0x00083b16 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083b1a ldr.w r1, [pc, 0xbe8] |
0x00083b1e str r0, [sp, 0x78] | var_78h = r0;
0x00083b20 mov r0, r8 | r0 = r8;
0x00083b22 add r1, pc | r1 = 0x10822c;
0x00083b24 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00083b28 subs r1, r5, 1 | r1 = r5 - 1;
0x00083b2a ldr.w r3, [fp, 0x44] | r3 = *(arg_44h);
0x00083b2e mov r2, sb | r2 = sb;
0x00083b30 str r1, [sp] | *(sp) = r1;
0x00083b32 mov r0, r8 | r0 = r8;
0x00083b34 movs r1, 0x50 | r1 = 0x50;
0x00083b36 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_48:
0x00083b3a ldr r5, [sp, 0x64] | r5 = var_64h;
0x00083b3c movs r4, 0 | r4 = 0;
0x00083b3e ldr r6, [sp, 0x50] | r6 = var_50h;
0x00083b40 movs r1, 0x7f | r1 = 0x7f;
0x00083b42 mov r0, r8 | r0 = r8;
0x00083b44 str r4, [sp] | *(sp) = r4;
0x00083b46 mov r3, r5 | r3 = r5;
0x00083b48 mov r2, r6 | r2 = r6;
0x00083b4a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083b4e mov r2, r6 | r2 = r6;
0x00083b50 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00083b52 movs r1, 0x80 | r1 = 0x80;
0x00083b54 mov r0, r8 | r0 = r8;
0x00083b56 str r5, [sp] | *(sp) = r5;
0x00083b58 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083b5c ldr.w r2, [fp, 0x54] | r2 = *(arg_54h);
0x00083b60 mov r3, r4 | r3 = r4;
0x00083b62 movs r1, 0x34 | r1 = 0x34;
0x00083b64 mov r0, r8 | r0 = r8;
0x00083b66 str r5, [sp] | *(sp) = r5;
0x00083b68 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083b6c mov r6, r0 | r6 = r0;
0x00083b6e ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00083b72 cmp r0, 0 |
| if (r0 == 0) {
0x00083b74 beq.w 0x84546 | goto label_191;
| }
| label_47:
0x00083b78 ldr.w ip, [pc, 0xb8c] |
0x00083b7c movs r1, 0 | r1 = 0;
0x00083b7e str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x00083b82 mov r4, fp | r4 = fp;
0x00083b84 str.w sl, [sp, 0x64] | __asm ("str.w sl, [var_64h]");
0x00083b88 mov r8, r0 | r8 = r0;
0x00083b8a add ip, pc | ip = 0x108296;
0x00083b8c mov r5, r1 | r5 = r1;
0x00083b8e addw sb, ip, 0xd58 | __asm ("addw sb, ip, 0xd58");
0x00083b92 mov sl, ip | sl = ip;
0x00083b94 str r6, [sp, 0x44] | var_44h = r6;
0x00083b96 str r7, [sp, 0x80] | var_80h = r7;
| do {
0x00083b98 movs r2, 0 | r2 = 0;
0x00083b9a ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00083b9c ldr r6, [r4, 0x2c] | r6 = *((r4 + 0x2c));
0x00083b9e movs r1, 0x4b | r1 = 0x4b;
0x00083ba0 mov r0, r8 | r0 = r8;
0x00083ba2 str r2, [sp] | *(sp) = r2;
0x00083ba4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083ba8 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00083baa ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| if (r3 != 0) {
0x00083bac cbz r3, 0x83bb0 |
0x00083bae ldr r3, [r3] | r3 = *(r3);
| }
0x00083bb0 ldr.w r7, [fp, 0x58] | r7 = *(arg_58h);
0x00083bb4 cmp r5, r3 |
0x00083bb6 it lt |
| if (r5 >= r3) {
0x00083bb8 movlt r5, r3 | r5 = r3;
| }
| if (r7 == 0) {
0x00083bba cbnz r7, 0x83bf6 |
0x00083bbc ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x00083bbe addw r1, sl, 0xd4c | __asm ("addw r1, sl, 0xd4c");
0x00083bc2 cmp r3, r1 |
0x00083bc4 it ne |
| if (r3 != r1) {
0x00083bc6 cmpne r3, sb | __asm ("cmpne r3, sb");
| }
| if (r3 == r1) {
0x00083bc8 bne 0x83be8 |
0x00083bca ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00083bcc mov r2, r7 | r2 = r7;
0x00083bce movs r1, 0x47 | r1 = 0x47;
0x00083bd0 mov r0, r8 | r0 = r8;
0x00083bd2 str r7, [sp] | *(sp) = r7;
0x00083bd4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083bd8 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00083bda mov r2, r7 | r2 = r7;
0x00083bdc movs r1, 0x47 | r1 = 0x47;
0x00083bde mov r0, r8 | r0 = r8;
0x00083be0 str r7, [sp] | *(sp) = r7;
0x00083be2 adds r3, 1 | r3++;
0x00083be4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
0x00083be8 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00083bea lsls r6, r3, 0x13 | r6 = r3 << 0x13;
| if (r6 >= r3) {
0x00083bec bpl 0x83bf6 | goto label_42;
| }
0x00083bee ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x00083bf0 cmp r2, 0 |
| if (r2 != 0) {
0x00083bf2 bne.w 0x844e8 | goto label_192;
| }
| }
| label_42:
0x00083bf6 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x00083bf8 cmp r4, 0 |
0x00083bfa bne 0x83b98 |
| } while (r4 != 0);
0x00083bfc ldr.w sl, [sp, 0x64] | sl = var_64h;
0x00083c00 mov r1, r5 | r1 = r5;
0x00083c02 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00083c04 ldr.w r8, [sp, 0x30] | r8 = var_30h;
0x00083c08 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00083c0c ldr r6, [sp, 0x44] | r6 = var_44h;
0x00083c0e ldr r7, [sp, 0x80] | r7 = var_80h;
0x00083c10 add r1, r3 | r1 += r3;
0x00083c12 adds r3, 1 | r3++;
0x00083c14 str.w r1, [sl, 0x2c] | __asm ("str.w r1, [sl, 0x2c]");
0x00083c18 str r3, [sp, 0xf0] | var_f0h = r3;
| if (r2 != 0) {
0x00083c1a cbz r2, 0x83c40 |
0x00083c1c ldr.w r3, [sl, 8] | r3 = *((sl + 8));
| if (r3 != 0) {
0x00083c20 cbz r3, 0x83c2c |
0x00083c22 ldr.w r1, [fp, 0x18] | r1 = *(arg_18h);
0x00083c26 mov r0, sl | r0 = sl;
0x00083c28 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
0x00083c2c ldrb.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x00083c30 mov r0, sl | r0 = sl;
0x00083c32 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00083c34 cmp r3, 0x59 |
0x00083c36 ite eq |
| if (r3 != 0x59) {
0x00083c38 moveq r2, 3 | r2 = 3;
| }
| if (r3 == 0x59) {
0x00083c3a movne r2, 0 | r2 = 0;
| }
0x00083c3c bl 0x42488 | fcn_00042488 (r0, r1, r2);
| }
0x00083c40 ldr r2, [sp, 0x34] | r2 = var_34h;
| if (r2 != 0) {
0x00083c42 cbz r2, 0x83c68 |
0x00083c44 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
| if (r3 != 0) {
0x00083c48 cbz r3, 0x83c54 |
0x00083c4a ldr.w r1, [fp, 0x1c] | r1 = *(arg_1ch);
0x00083c4e mov r0, sl | r0 = sl;
0x00083c50 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
0x00083c54 ldrb.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x00083c58 mov r0, sl | r0 = sl;
0x00083c5a ldr r1, [sp, 0x34] | r1 = var_34h;
0x00083c5c cmp r3, 0x59 |
0x00083c5e ite ne |
| if (r3 == 0x59) {
0x00083c60 movne r2, 1 | r2 = 1;
| }
| if (r3 != 0x59) {
0x00083c62 moveq r2, 4 | r2 = 4;
| }
0x00083c64 bl 0x42488 | fcn_00042488 (r0, r1, r2);
| }
0x00083c68 ldrb.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x00083c6c ldrb.w r3, [fp, 0x11] | r3 = *(arg_11h);
0x00083c70 cmp r2, 0x59 |
| if (r2 == 0x59) {
0x00083c72 beq.w 0x846f4 | goto label_193;
| }
0x00083c76 ldrb.w r2, [fp, 0x12] | r2 = *(arg_12h);
0x00083c7a ldr r1, [sp, 0x20] | r1 = var_20h;
0x00083c7c subs r2, r2, r3 | r2 -= r3;
0x00083c7e clz r2, r2 | r2 &= r2;
0x00083c82 cmp r1, 0 |
0x00083c84 lsr.w r2, r2, 5 | r2 >>= 5;
0x00083c88 it eq |
| if (r1 != 0) {
0x00083c8a moveq r2, 0 | r2 = 0;
| }
0x00083c8c cmp r2, 0 |
| if (r2 != 0) {
0x00083c8e bne.w 0x85292 | goto label_194;
| }
0x00083c92 add r2, sp, 0xdc | r2 += var_dch;
0x00083c94 str r2, [sp, 0x30] | var_30h = r2;
| label_88:
0x00083c96 cmp r3, 0x56 |
| if (r3 == 0x56) {
0x00083c98 beq.w 0x84a22 | goto label_195;
| }
| label_62:
0x00083c9c cmp r3, 0x5a |
| if (r3 != 0x5a) {
0x00083c9e bne.w 0x84526 | goto label_70;
| }
| label_45:
0x00083ca2 movs r4, 0 | r4 = 0;
0x00083ca4 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00083ca6 movs r3, 1 | r3 = 1;
0x00083ca8 movs r1, 0x23 | r1 = 0x23;
0x00083caa mov r0, r8 | r0 = r8;
0x00083cac str r4, [sp] | *(sp) = r4;
0x00083cae bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083cb2 movs r3, 1 | r3 = 1;
0x00083cb4 ldr r2, [sp, 0x60] | r2 = var_60h;
0x00083cb6 movs r1, 0x23 | r1 = 0x23;
0x00083cb8 mov r0, r8 | r0 = r8;
0x00083cba str r4, [sp] | *(sp) = r4;
0x00083cbc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083cc0 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00083cc2 cmp r3, 0 |
| if (r3 != 0) {
0x00083cc4 bne.w 0x84768 | void (*0x84768)() ();
| }
| label_50:
0x00083f52 ldrb.w r3, [sp, 0x8d] | r3 = var_8dh;
0x00083f56 cmp r3, 3 |
| if (r3 == 3) {
0x00083f58 beq.w 0x845ee | goto label_196;
| }
| label_55:
0x00083f5c ldr r3, [sp, 0xb4] | r3 = var_b4h;
| if (r3 != 0) {
0x00083f5e cbz r3, 0x83f8e |
0x00083f60 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x00083f62 cmp r3, 0 |
| if (r3 <= 0) {
0x00083f64 ble.w 0x8450a | goto label_197;
| }
0x00083f68 ldr.w r3, [pc, 0x7ac] |
0x00083f6c add r3, pc | r3 = 0x108688;
| label_43:
0x00083f6e ldr.w r2, [pc, 0x7ac] |
0x00083f72 movs r1, 0 | r1 = 0;
0x00083f74 mov r0, sl | r0 = sl;
0x00083f76 add r2, pc | r2 = 0x108698;
0x00083f78 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x00083f7c ldr r2, [sp, 0x10] | r2 = var_10h;
0x00083f7e mov r1, r7 | r1 = r7;
0x00083f80 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00083f82 mov r0, sl | r0 = sl;
0x00083f84 ldr r3, [r3] | r3 = *(r3);
0x00083f86 str r2, [sp] | *(sp) = r2;
0x00083f88 add r2, sp, 0xb4 | r2 += var_b4h;
0x00083f8a bl 0x502a8 | fcn_000502a8 (r0, r1, r2, r3, r4, r5, r6);
| }
0x00083f8e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00083f90 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00083f92 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00083f96 cmn r2, r3 |
| if (r2 < r3) {
0x00083f98 bmi.w 0x8453a | goto label_198;
| }
0x00083f9c ldr r3, [sp, 0x14] | r3 = var_14h;
0x00083f9e ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00083fa0 ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x00083fa2 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00083fa4 lsls r3, r3, 2 | r3 <<= 2;
0x00083fa6 rsbs r3, r3, 0 | r3 -= ;
0x00083fa8 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_46:
0x00083faa ldr.w r4, [sl, 0x24] | r4 = *((sl + 0x24));
0x00083fae cmp r4, 0 |
0x00083fb0 ite le |
| if (r4 > 0) {
0x00083fb2 movle r4, 0 | r4 = 0;
| }
| if (r4 <= 0) {
0x00083fb4 movgt r4, 1 | r4 = 1;
| }
| label_56:
0x00083fb6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00083fb8 cmp r3, 0 |
| if (r3 == 0) {
0x00083fba beq.w 0x82e1c | goto label_25;
| }
0x00083fbe ldrd r0, r1, [sp, 0x18] | __asm ("ldrd r0, r1, [x]");
0x00083fc2 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x00083fc6 b.w 0x82e1c | goto label_25;
| label_179:
0x00083fca ldr r1, [sp, 0xc8] | r1 = var_c8h;
0x00083fcc cmp r1, 0 |
| if (r1 < 0) {
0x00083fce blt.w 0x8390e | goto label_26;
| }
0x00083fd2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00083fd4 bl 0x32ebc | fcn_00032ebc (r0, r1);
0x00083fd8 b 0x8390e | goto label_26;
| label_144:
0x00083fda ldr r0, [sp, 0x14] | r0 = var_14h;
0x00083fdc movs r1, 0xa | r1 = 0xa;
0x00083fde ldr.w r2, [sl, 0x2c] | r2 = *((sl + 0x2c));
0x00083fe2 ldr r3, [r0, 0x6c] | r3 = *((r0 + 0x6c));
0x00083fe4 adds r2, 1 | r2++;
0x00083fe6 str.w r2, [sl, 0x2c] | __asm ("str.w r2, [sl, 0x2c]");
0x00083fea adds r6, r3, 1 | r6 = r3 + 1;
0x00083fec str.w r2, [fp, 0x24] | __asm ("str.w r2, [arg_24h]");
0x00083ff0 str r3, [sp, 0x2c] | var_2ch = r3;
0x00083ff2 mov r3, r5 | r3 = r5;
0x00083ff4 str r6, [sp] | *(sp) = r6;
0x00083ff6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00083ffa ldr.w r1, [pc, 0x724] |
0x00083ffe mov r2, r4 | r2 = r4;
0x00084000 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00084002 add r1, pc | r1 = 0x108728;
0x00084004 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084008 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0008400c movs r1, 0xd | r1 = 0xd;
0x0008400e ldr.w r2, [pc, 0x714] |
0x00084012 mov r0, sl | r0 = sl;
0x00084014 str.w r6, [fp, 0x20] | __asm ("str.w r6, [arg_20h]");
0x00084018 strd r3, r5, [sp, 0xe0] | __asm ("strd r3, r5, [var_e4h]");
0x0008401c mov r3, r4 | r3 = r4;
0x0008401e add r2, pc | r2 = 0x108748;
0x00084020 strb.w r1, [sp, 0xdc] | var_dch = r1;
0x00084024 movs r1, 1 | r1 = 1;
0x00084026 str r5, [sp, 0xf0] | var_f0h = r5;
0x00084028 strd r5, r5, [sp, 0xe8] | __asm ("strd r5, r5, [var_e8h]");
0x0008402c bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x00084030 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00084032 mov r1, r8 | r1 = r8;
0x00084034 mov r0, sl | r0 = sl;
0x00084036 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008403a ldrb.w r3, [fp, 0x2d] | r3 = *(arg_2dh);
0x0008403e ldrh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x00084042 ldr.w r2, [fp, 0x18] | r2 = *(arg_18h);
0x00084046 orr r3, r3, 0x20 | r3 |= 0x20;
0x0008404a ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008404c strh r1, [r2, 0x26] | *((r2 + 0x26)) = r1;
0x0008404e strb.w r3, [fp, 0x2d] | *(arg_2dh) = r3;
0x00084052 mov r0, r5 | r0 = r5;
0x00084054 ldr r3, [sp, 0xe8] | r3 = var_e8h;
0x00084056 ldr.w r1, [fp, 0x24] | r1 = *(arg_24h);
0x0008405a str.w r3, [fp, 0x28] | __asm ("str.w r3, [arg_28h]");
0x0008405e bl 0x42e6c | fcn_00042e6c (r0, r1, r2);
0x00084062 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00084064 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x00084066 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00084068 cmp r3, 0 |
0x0008406a itt lt |
| if (r3 >= 0) {
0x0008406c addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r3 < 0) {
0x00084070 str r3, [sp, 0x2c] | var_2ch = r3;
| }
0x00084072 ldr r3, [r2] | r3 = imp.atan;
0x00084074 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00084078 cmp r3, 0 |
| if (r3 != 0) {
0x0008407a bne.w 0x841e2 | goto label_199;
| }
0x0008407e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00084080 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x00084082 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00084086 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_35:
0x0008408a str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0008408c movs r3, 0 | r3 = 0;
0x0008408e strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x00084092 str.w r3, [sl, 0x1c] | __asm ("str.w r3, [sl, 0x1c]");
0x00084096 b.w 0x831b8 | goto label_19;
| label_151:
0x0008409a mov.w r5, -1 | r5 = -1;
0x0008409e b.w 0x83256 | goto label_27;
| label_137:
0x000840a2 ldr r2, [sp, 0x18] | r2 = x;
0x000840a4 ldr r2, [r2, 0x50] | r2 = *((r2 + 0x50));
0x000840a6 lsls r0, r2, 0x10 | r0 = r2 << 0x10;
| if (r0 < r2) {
0x000840a8 bmi.w 0x83052 | goto label_28;
| }
0x000840ac ldr.w r3, [sl] | r3 = *(sl);
0x000840b0 mov r8, r6 | r8 = r6;
0x000840b2 ldr.w r4, [pc, 0x674] | r4 = *(0x00084728);
0x000840b6 ldr.w r5, [pc, 0x674] | r5 = *(0x0008472c);
0x000840ba adds r3, 0x57 | r3 += 0x57;
0x000840bc vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000840c0 add r4, pc | r4 += pc;
0x000840c2 str r3, [sp, 0x9c] | var_9ch = r3;
0x000840c4 add r3, sp, 0x98 | r3 += var_98h;
0x000840c6 mov r6, r4 | r6 = r4;
0x000840c8 add r5, pc | r5 += pc;
0x000840ca mov r4, r3 | r4 = r3;
0x000840cc str.w sl, [sp, 0x98] | __asm ("str.w sl, [var_98h]");
0x000840d0 b 0x840dc |
| while (r3 == 0) {
| label_29:
0x000840d2 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x000840d4 cmp r3, 0 |
| if (r3 == 0) {
0x000840d6 beq.w 0x845a6 | goto label_200;
| }
0x000840da ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x000840dc ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000840de movs r2, 0 | r2 = 0;
0x000840e0 vstr d8, [sp, 0xa0] | __asm ("vstr d8, [sp, 0xa0]");
0x000840e4 str r2, [sp, 0xb0] | var_b0h = r2;
0x000840e6 str r2, [sp, 0xa8] | var_a8h = r2;
| if (r3 == 0) {
0x000840e8 cbz r3, 0x84136 | goto label_201;
| }
0x000840ea ldr r2, [r3] | r2 = *(r3);
0x000840ec cmp r2, 0 |
| if (r2 <= 0) {
0x000840ee ble 0x84136 | goto label_201;
| }
0x000840f0 ldrb.w r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x000840f4 tst.w r3, 0x40 |
0x000840f8 ite eq |
| if ((r3 & 0x40) != 0) {
0x000840fa moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x40) == 0) {
0x000840fc movne r3, 3 | r3 = 3;
| }
| label_30:
0x000840fe mov r0, r4 | r0 = r4;
0x00084100 str r3, [sp, 0xac] | var_ach = r3;
0x00084102 bl 0x463f4 | fcn_000463f4 (r0, r1);
0x00084106 ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x00084108 cmp r3, 0 |
0x0008410a beq 0x840d2 |
| }
0x0008410c ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x0008410e movs r3, 0 | r3 = 0;
0x00084110 add r0, sp, 0xdc | r0 += var_dch;
0x00084112 strd sl, r5, [sp, 0xdc] | __asm ("strd sl, r5, [var_dch]");
0x00084116 str r6, [sp, 0xe4] | var_e4h = r6;
0x00084118 str r4, [sp, 0xf4] | var_f4h = r4;
0x0008411a strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x0008411e str r3, [sp, 0xf0] | var_f0h = r3;
| if (r1 != 0) {
0x00084120 cbz r1, 0x84126 |
0x00084122 bl 0x35b0c | fcn_00035b0c (r0, r1);
| }
0x00084126 ldr r1, [sp, 0xb0] | r1 = var_b0h;
0x00084128 ldr r3, [sp, 0x98] | r3 = var_98h;
0x0008412a ldr r0, [r3] | r0 = *(r3);
0x0008412c cmp r1, 0 |
| if (r1 == 0) {
0x0008412e beq 0x840d2 | goto label_29;
| }
0x00084130 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00084134 b 0x840d2 | goto label_29;
| label_201:
0x00084136 movs r3, 1 | r3 = 1;
0x00084138 b 0x840fe | goto label_30;
| label_136:
0x0008413a ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0008413c ldr r2, [r3] | r2 = *(r3);
0x0008413e b.w 0x83026 | goto label_31;
| label_166:
0x00084142 ldr.w r3, [pc, 0x5ec] |
0x00084146 add r3, pc | r3 = 0x10887c;
0x00084148 adds r3, 4 | r3 += 4;
0x0008414a b.w 0x83562 | goto label_32;
| label_154:
0x0008414e ldr.w r4, [sl, 0x28] | r4 = *((sl + 0x28));
0x00084152 movs r3, 0 | r3 = 0;
0x00084154 ldr r1, [r7, 0x1c] | r1 = *((r7 + 0x1c));
0x00084156 mov r0, sl | r0 = sl;
0x00084158 adds r2, r4, 1 | r2 = r4 + 1;
0x0008415a str r4, [sp, 0x90] | var_90h = r4;
0x0008415c str.w r2, [sl, 0x28] | __asm ("str.w r2, [sl, 0x28]");
0x00084160 mov r2, r3 | r2 = r3;
0x00084162 bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x00084166 mov r2, r4 | r2 = r4;
0x00084168 ldr r4, [sp, 0x14] | r4 = var_14h;
0x0008416a movs r3, 0 | r3 = 0;
0x0008416c mvn r1, 7 | r1 = ~7;
0x00084170 str r0, [sp, 4] | var_4h = r0;
0x00084172 str r3, [sp] | *(sp) = r3;
0x00084174 mov r0, r4 | r0 = r4;
0x00084176 str r1, [sp, 8] | var_8h = r1;
0x00084178 movs r1, 0x76 | r1 = 0x76;
0x0008417a bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0008417e ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00084180 str r0, [sp, 0x94] | var_94h = r0;
0x00084182 cmp r3, 0 |
| if (r3 > 0) {
0x00084184 ble 0x84196 |
0x00084186 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x00084188 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008418c add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x00084190 movs r3, 8 | r3 = 8;
0x00084192 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x00084196 movs r3, 3 | r3 = 3;
0x00084198 b.w 0x8329a | goto label_33;
| label_164:
0x0008419c ldr.w r1, [pc, 0x594] |
0x000841a0 mov r2, r4 | r2 = r4;
0x000841a2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000841a4 add r1, pc | r1 = 0x1088dc;
0x000841a6 bl 0x4a160 | fcn_0004a160 (r0);
0x000841aa ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x000841ac movs r1, 0xc | r1 = 0xc;
0x000841ae ldr.w r2, [pc, 0x588] |
0x000841b2 mov r0, sl | r0 = sl;
0x000841b4 strb.w r1, [sp, 0xdc] | var_dch = r1;
0x000841b8 movs r1, 1 | r1 = 1;
0x000841ba strd r3, r6, [sp, 0xe0] | __asm ("strd r3, r6, [var_e4h]");
0x000841be mov r3, r4 | r3 = r4;
0x000841c0 add r2, pc | r2 = 0x1088fe;
0x000841c2 str r6, [sp, 0xf0] | var_f0h = r6;
0x000841c4 strd r6, r6, [sp, 0xe8] | __asm ("strd r6, r6, [var_e8h]");
0x000841c8 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x000841cc ldr r2, [sp, 0x34] | r2 = var_34h;
0x000841ce mov r1, r8 | r1 = r8;
0x000841d0 mov r0, sl | r0 = sl;
0x000841d2 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x000841d6 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000841d8 ldrh.w r2, [r8, 2] | r2 = *((r8 + 2));
0x000841dc strh r2, [r3, 0x26] | *((r3 + 0x26)) = r2;
0x000841de b.w 0x8351c | goto label_34;
| label_199:
0x000841e2 ldr.w r3, [pc, 0x558] |
0x000841e6 add r3, pc | r3 = 0x108928;
0x000841e8 adds r3, 4 | r3 += 4;
0x000841ea b 0x8408a | goto label_35;
| label_171:
0x000841ec movs r0, 0x34 | r0 = 0x34;
0x000841ee movs r1, 0 | r1 = 0;
0x000841f0 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000841f4 mov r4, r0 | r4 = r0;
0x000841f6 b.w 0x836b4 | goto label_36;
| label_177:
0x000841fa ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000841fe ldr r2, [sp, 0x18] | r2 = x;
0x00084200 ldrd r8, r7, [sp, 0x50] | __asm ("ldrd r8, r7, [var_54h]");
0x00084204 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00084206 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008420a cmp r2, 0 |
| if (r2 != 0) {
0x0008420c bne.w 0x8460c | goto label_75;
| }
0x00084210 cmp.w r8, 0 |
| if (r8 == 0) {
0x00084214 beq.w 0x84f12 | goto label_202;
| }
0x00084218 cmp r0, 1 |
| if (r0 == 1) {
0x0008421a beq.w 0x85202 | goto label_203;
| }
| label_76:
0x0008421e movs r3, 0 | r3 = 0;
0x00084220 str r3, [sp, 0x58] | var_58h = r3;
| label_86:
0x00084222 ldr.w r6, [sl, 0x28] | r6 = *((sl + 0x28));
0x00084226 movs r2, 0 | r2 = 0;
0x00084228 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0008422a mov r1, r8 | r1 = r8;
0x0008422c mov r0, sl | r0 = sl;
0x0008422e adds r5, r6, 1 | r5 = r6 + 1;
0x00084230 str.w r5, [sl, 0x28] | __asm ("str.w r5, [sl, 0x28]");
0x00084234 str r6, [r4, 4] | *((r4 + 4)) = r6;
0x00084236 bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x0008423a ldr.w sb, [sp, 0x14] | sb = var_14h;
0x0008423e movs r1, 0 | r1 = 0;
0x00084240 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00084242 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00084244 str r1, [sp] | *(sp) = r1;
0x00084246 mvn r1, 7 | r1 = ~7;
0x0008424a str r0, [sp, 0x70] | var_70h = r0;
0x0008424c str r0, [sp, 4] | var_4h = r0;
0x0008424e mov r0, sb | r0 = sb;
0x00084250 str r1, [sp, 8] | var_8h = r1;
0x00084252 movs r1, 0x77 | r1 = 0x77;
0x00084254 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00084258 ldr.w r5, [sl, 0x2c] | r5 = *((sl + 0x2c));
0x0008425c movs r2, 0 | r2 = 0;
0x0008425e ldr.w r3, [r8] | r3 = *(r8);
0x00084262 str r2, [sp] | *(sp) = r2;
0x00084264 adds r1, r5, 4 | r1 = r5 + 4;
0x00084266 ldr.w r6, [sl, 0x38] | r6 = *((sl + 0x38));
0x0008426a str r1, [sp, 0x54] | var_54h = r1;
0x0008426c add r1, r3 | r1 += r3;
0x0008426e add r3, r1 | r3 += r1;
0x00084270 str r0, [sp, 0x78] | var_78h = r0;
0x00084272 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00084276 adds r3, r1, 1 | r3 = r1 + 1;
0x00084278 adds r0, r5, 2 | r0 = r5 + 2;
0x0008427a strd r6, r3, [sp, 0x64] | __asm ("strd r6, r3, [var_64h]");
0x0008427e subs r3, r6, 2 | r3 = r6 - 2;
0x00084280 adds r6, r5, 5 | r6 = r5 + 5;
0x00084282 movs r1, 0x47 | r1 = 0x47;
0x00084284 str r0, [sp, 0x6c] | var_6ch = r0;
0x00084286 str r3, [sp, 0x60] | var_60h = r3;
0x00084288 str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x0008428c mov r3, r0 | r3 = r0;
0x0008428e str r6, [sp, 0x5c] | var_5ch = r6;
0x00084290 mov r0, sb | r0 = sb;
0x00084292 adds r6, r5, 1 | r6 = r5 + 1;
0x00084294 adds r5, 3 | r5 += 3;
0x00084296 str r6, [sp, 0x50] | var_50h = r6;
0x00084298 str r5, [sp, 0x48] | var_48h = r5;
0x0008429a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008429e ldr.w r1, [pc, 0x4a0] |
0x000842a2 mov r0, sb | r0 = sb;
0x000842a4 add r1, pc | r1 = 0x1089ea;
0x000842a6 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x000842aa ldr r5, [sp, 0x5c] | r5 = var_5ch;
0x000842ac movs r2, 0 | r2 = 0;
0x000842ae ldr.w r3, [r8] | r3 = *(r8);
0x000842b2 movs r1, 0x4b | r1 = 0x4b;
0x000842b4 mov r0, sb | r0 = sb;
0x000842b6 add r3, r5 | r3 += r5;
0x000842b8 subs r3, 1 | r3--;
0x000842ba str r3, [sp] | *(sp) = r3;
0x000842bc mov r3, r5 | r3 = r5;
0x000842be movs r5, 0 | r5 = 0;
0x000842c0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000842c4 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000842c6 movs r1, 9 | r1 = 9;
0x000842c8 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000842ca mov r0, sb | r0 = sb;
0x000842cc str r5, [sp] | *(sp) = r5;
0x000842ce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000842d2 str r5, [sp, 0xc] | var_ch = r5;
0x000842d4 mov r1, fp | r1 = fp;
0x000842d6 str r5, [sp, 4] | var_4h = r5;
0x000842d8 ldrb.w r5, [sp, 0x8c] | r5 = var_8ch;
0x000842dc ldr r6, [sp, 0x40] | r6 = var_40h;
0x000842de ldr r3, [sp, 0x28] | r3 = var_28h;
0x000842e0 cmp r5, 2 |
0x000842e2 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000842e4 ite eq |
| if (r5 != 2) {
0x000842e6 moveq r0, 0x80 | r0 = 0x80;
| }
| if (r5 == 2) {
0x000842e8 movne r0, 0x40 | r0 = 0x40;
| }
0x000842ea orr.w r0, r0, r6, lsl 9 | r0 |= (r6 << 9);
0x000842ee ldr r6, [sp, 0x58] | r6 = var_58h;
0x000842f0 str r3, [sp] | *(sp) = r3;
0x000842f2 mov r3, r8 | r3 = r8;
0x000842f4 orrs r0, r6 | r0 |= r6;
0x000842f6 str r0, [sp, 8] | var_8h = r0;
0x000842f8 mov r0, sl | r0 = sl;
0x000842fa bl 0x7ee90 | fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x000842fe ldr r6, [sp, 0x64] | r6 = var_64h;
0x00084300 str r0, [sp, 0x34] | var_34h = r0;
0x00084302 subs r3, r6, 1 | r3 = r6 - 1;
0x00084304 str r3, [sp, 0x74] | var_74h = r3;
0x00084306 cmp r0, 0 |
| if (r0 == 0) {
0x00084308 beq.w 0x84600 | goto label_204;
| }
0x0008430c ldr r1, [sp, 0x34] | r1 = var_34h;
0x0008430e ldr.w r3, [r8] | r3 = *(r8);
0x00084312 ldrsb.w r2, [r1, 0x31] | r2 = *((r1 + 0x31));
0x00084316 ldrb.w sb, [r1, 0x33] | sb = *((r1 + 0x33));
0x0008431a cmp r3, r2 |
| if (r3 == r2) {
0x0008431c beq.w 0x85334 | goto label_205;
| }
0x00084320 cmp r5, 0 |
| if (r5 == 0) {
0x00084322 beq.w 0x8531c | goto label_206;
| }
0x00084326 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00084328 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x0008432a bmi.w 0x854fa | goto label_207;
| }
0x0008432e ldr.w r3, [pc, 0x414] |
0x00084332 add r3, pc | r3 = 0x108a7c;
| label_89:
0x00084334 ldr.w r2, [pc, 0x410] |
0x00084338 movs r1, 0 | r1 = 0;
0x0008433a mov r0, sl | r0 = sl;
0x0008433c add r2, pc | r2 = 0x108a88;
0x0008433e bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x00084342 ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x00084344 ldr.w r6, [r8] | r6 = *(r8);
0x00084348 cmp r1, 0 |
| if (r1 <= 0) {
0x0008434a ble.w 0x8569e | goto label_208;
| }
0x0008434e ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00084350 movs r2, 0x14 | r2 = 0x14;
0x00084352 mla r1, r2, r1, r3 | __asm ("mla r1, r2, r1, r3");
0x00084356 mov r2, r6 | r2 = r6;
| do {
0x00084358 ldrsh.w r0, [r3, 0x12] | r0 = *((r3 + 0x12));
0x0008435c adds r3, 0x14 | r3 += 0x14;
0x0008435e cmp r2, r0 |
0x00084360 it le |
| if (r2 > r0) {
0x00084362 addle r2, 1 | r2++;
| }
0x00084364 cmp r1, r3 |
0x00084366 bne 0x84358 |
| } while (r1 != r3);
0x00084368 str r2, [sp, 0x20] | var_20h = r2;
| label_104:
0x0008436a movs r5, 0 | r5 = 0;
0x0008436c ldr r1, [sp, 0x20] | r1 = var_20h;
0x0008436e mov r0, sl | r0 = sl;
0x00084370 bl 0x27744 | fcn_00027744 (r0, r1);
0x00084374 mov r3, r5 | r3 = r5;
0x00084376 mov r2, r0 | r2 = r0;
0x00084378 str r0, [sp, 0x30] | var_30h = r0;
0x0008437a mov r1, r8 | r1 = r8;
0x0008437c mov r0, sl | r0 = sl;
0x0008437e str r5, [sp] | *(sp) = r5;
0x00084380 bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
0x00084384 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00084386 cmp r0, r5 |
0x00084388 it gt |
| if (r0 <= r5) {
0x0008438a movgt fp, r5 |
| }
| if (r0 > r5) {
0x0008438c bgt 0x8439c | goto label_209;
| }
0x0008438e b 0x84ac0 | goto label_210;
| do {
| label_37:
0x00084390 adds r5, 1 | r5++;
0x00084392 add.w fp, fp, 0x14 |
0x00084396 cmp r0, r5 |
| if (r0 <= r5) {
0x00084398 ble.w 0x84ac0 | goto label_210;
| }
| label_209:
0x0008439c ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0008439e add.w r2, r3, fp | r2 = r3 + fp;
0x000843a2 ldrsh.w r1, [r2, 0x12] | r1 = *((r2 + 0x12));
0x000843a6 cmp r1, r6 |
0x000843a8 blt 0x84390 |
| } while (r1 < r6);
0x000843aa ldr r0, [sp, 0x30] | r0 = var_30h;
0x000843ac ldr.w r1, [r3, fp] | r1 = *((r3 + fp));
0x000843b0 ldrsh.w r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000843b4 add r0, r6 | r0 += r6;
0x000843b6 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000843b8 str r0, [sp] | *(sp) = r0;
0x000843ba adds r6, 1 | r6++;
0x000843bc ldr r0, [sp, 0x14] | r0 = var_14h;
0x000843be bl 0x8771c | fcn_0008771c (r0, r1, r2, r3, r4);
0x000843c2 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x000843c4 b 0x84390 | goto label_37;
| label_153:
0x000843c6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000843c8 ldr r3, [r2] | r3 = *(r2);
0x000843ca ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000843ce cmp r3, 0 |
| if (r3 != 0) {
0x000843d0 bne.w 0x8462e | goto label_211;
| }
0x000843d4 ldr r3, [r2, 0x68] | r3 = *((r2 + 0x68));
0x000843d6 add.w r4, r5, r5, lsl 1 | r4 = r5 + (r5 << 1);
0x000843da add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
| label_58:
0x000843de movs r2, 0x77 | r2 = 0x77;
0x000843e0 strb r2, [r3] | *(r3) = r2;
0x000843e2 movs r3, 1 | r3 = 1;
0x000843e4 strb.w r3, [sp, 0xd4] | var_d4h = r3;
0x000843e8 b.w 0x83290 | goto label_38;
| label_134:
0x000843ec movs r1, 0 | r1 = 0;
0x000843ee movs r0, 0xc | r0 = 0xc;
0x000843f0 bl 0x28c3c | fcn_00028c3c (r0);
0x000843f4 b.w 0x82fd2 | goto label_39;
| label_150:
0x000843f8 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000843fa mov.w r2, -1 | r2 = -1;
0x000843fe ldr r0, [sp, 0x20] | r0 = var_20h;
0x00084400 bl 0x4c004 | r0 = fcn_0004c004 (r0, r1, r2);
0x00084404 cmp r0, 0 |
| if (r0 != 0) {
0x00084406 bne.w 0x83216 | goto label_40;
| }
0x0008440a ldr r2, [r7, 0x44] | r2 = *((r7 + 0x44));
0x0008440c cmp r2, 0 |
| if (r2 != 0) {
0x0008440e bne.w 0x83216 | goto label_40;
| }
0x00084412 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00084414 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00084416 ldr r0, [sp, 0x18] | r0 = x;
0x00084418 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0008441c str r3, [r7, 4] | *((r7 + 4)) = r3;
0x0008441e bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x00084422 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00084424 mov r8, r0 | r8 = r0;
0x00084426 str r0, [r7, 0x28] | *((r7 + 0x28)) = r0;
0x00084428 orr r3, r3, 8 | r3 |= 8;
0x0008442c str r3, [r7, 4] | *((r7 + 4)) = r3;
0x0008442e movs r3, 2 | r3 = 2;
0x00084430 strb.w r3, [sp, 0x8c] | var_8ch = r3;
0x00084434 b.w 0x83216 | goto label_40;
| label_152:
0x00084438 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0008443a movs r2, 0 | r2 = 0;
0x0008443c movs r1, 0x76 | r1 = 0x76;
0x0008443e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00084440 ldr r3, [r4] | r3 = *(r4);
0x00084442 str r2, [sp] | *(sp) = r2;
0x00084444 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00084446 str r3, [sp, 0x1c] | var_1ch = r3;
0x00084448 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008444a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008444e ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00084450 lsls r2, r3, 0x14 | r2 = r3 << 0x14;
0x00084452 mov r1, r3 | r1 = r3;
| if (r2 >= r3) {
0x00084454 bpl.w 0x83264 | goto label_41;
| }
0x00084458 ldr r2, [r4] | r2 = *(r4);
0x0008445a mov r1, r4 | r1 = r4;
0x0008445c subs r4, r2, 1 | r4 = r2 - 1;
0x0008445e cmp r4, 0 |
| if (r4 <= 0) {
0x00084460 ble 0x844b0 | goto label_212;
| }
0x00084462 add.w r3, r1, r2, lsl 4 | r3 = r1 + (r2 << 4);
0x00084466 str r6, [sp, 0x1c] | var_1ch = r6;
0x00084468 str r5, [sp, 0x30] | var_30h = r5;
0x0008446a mov r5, r1 | r5 = r1;
0x0008446c ldr.w sb, [sp, 0x18] | sb = x;
0x00084470 mov r6, r3 | r6 = r3;
0x00084472 mov r1, r2 | r1 = r2;
0x00084474 b 0x8449e |
| while (r0 >= r0) {
0x00084476 ldr r1, [r6, -0x8] | r1 = *((r6 - 0x8));
| if (r1 != 0) {
0x0008447a cbz r1, 0x84482 |
0x0008447c mov r0, sb | r0 = sb;
0x0008447e bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x00084482 ldr r1, [r6, -0x4] | r1 = *((r6 - 0x4));
| if (r1 != 0) {
0x00084486 cbz r1, 0x8448e |
0x00084488 mov r0, sb | r0 = sb;
0x0008448a bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x0008448e ldr r1, [r5] | r1 = *(r5);
0x00084490 subs r4, 1 | r4--;
0x00084492 sub.w r6, r6, 0x10 | r6 -= 0x10;
0x00084496 add.w r1, r1, -1 | r1 += -1;
0x0008449a str r1, [r5] | *(r5) = r1;
| if (r4 == 1) {
0x0008449c beq 0x844a8 | goto label_213;
| }
0x0008449e add.w r0, r5, r4, lsl 4 | r0 = r5 + (r4 << 4);
0x000844a2 ldrb r0, [r0, 0x11] | r0 = *((r0 + 0x11));
0x000844a4 lsls r0, r0, 0x19 | r0 <<= 0x19;
0x000844a6 bpl 0x84476 |
| }
| label_213:
0x000844a8 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x000844aa mov r2, r1 | r2 = r1;
0x000844ac ldr r5, [sp, 0x30] | r5 = var_30h;
0x000844ae ldr r3, [r7, 4] | r3 = *((r7 + 4));
| label_212:
0x000844b0 cmp r2, 0 |
0x000844b2 mov r1, r3 | r1 = r3;
| if (r2 <= 0) {
0x000844b4 ble.w 0x83264 | goto label_41;
| }
0x000844b8 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x000844ba movs r3, 0 | r3 = 0;
0x000844bc mov.w ip, 0x79 |
0x000844c0 mov sb, r1 | sb = r1;
0x000844c2 mov r0, r4 | r0 = r4;
| do {
0x000844c4 adds r3, 1 | r3++;
0x000844c6 adds r0, 0x10 | r0 += 0x10;
0x000844c8 add.w lr, r4, r3, lsl 4 | lr = r4 + (r3 << 4);
0x000844cc ldrb.w lr, [lr, 1] |
0x000844d0 tst.w lr, 0x40 |
0x000844d4 itt eq |
| if ((lr & 0x40) != 0) {
0x000844d6 ldreq r1, [r0, -0x8] | r1 = *((r0 - 0x8));
| }
| if ((lr & 0x40) == 0) {
0x000844da strb.w ip, [r1] | *(r1) = ip;
| }
0x000844de cmp r3, r2 |
0x000844e0 bne 0x844c4 |
| } while (r3 != r2);
0x000844e2 mov r1, sb | r1 = sb;
0x000844e4 b.w 0x83264 | goto label_41;
| label_192:
0x000844e8 movs r6, 0 | r6 = 0;
0x000844ea movs r1, 0x92 | r1 = 0x92;
0x000844ec mov r3, r6 | r3 = r6;
0x000844ee mov r0, r8 | r0 = r8;
0x000844f0 str r6, [sp] | *(sp) = r6;
0x000844f2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000844f6 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x000844f8 mov r2, r6 | r2 = r6;
0x000844fa movs r1, 0x47 | r1 = 0x47;
0x000844fc mov r0, r8 | r0 = r8;
0x000844fe str r6, [sp] | *(sp) = r6;
0x00084500 adds r3, 1 | r3++;
0x00084502 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084506 b.w 0x83bf6 | goto label_42;
| label_197:
0x0008450a ldr r3, [pc, 0x240] |
0x0008450c add r3, pc | r3 = 0x108c5e;
0x0008450e b 0x83f6e | goto label_43;
| label_167:
0x00084510 strh.w r8, [r7, 2] | *((r7 + 2)) = r8;
0x00084514 b.w 0x83690 | goto label_44;
| label_61:
0x00084522 add r3, sp, 0xdc | r3 += var_dch;
0x00084524 str r3, [sp, 0x30] | var_30h = r3;
| label_70:
0x00084526 movs r3, 0 | r3 = 0;
0x00084528 ldr r2, [sp, 0x84] | r2 = var_84h;
0x0008452a str r3, [sp] | *(sp) = r3;
0x0008452c movs r1, 0x23 | r1 = 0x23;
0x0008452e movs r3, 1 | r3 = 1;
0x00084530 mov r0, r8 | r0 = r8;
0x00084532 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084536 b.w 0x83ca2 | goto label_45;
| label_198:
0x0008453a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008453c ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008453e rsbs r2, r3, 0 | r2 = r3 - ;
0x00084540 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00084544 b 0x83faa | goto label_46;
| label_191:
0x00084546 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x0008454a cmp r3, 0 |
| if (r3 == 0) {
0x0008454c beq.w 0x85170 | goto label_214;
| }
| label_85:
0x00084550 mov r0, sl | r0 = sl;
0x00084552 bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x00084556 b.w 0x83b78 | goto label_47;
| label_189:
0x0008455a str r1, [sp, 0x58] | var_58h = r1;
0x0008455c str r1, [sp, 0x78] | var_78h = r1;
0x0008455e b.w 0x83b3a | goto label_48;
| label_183:
0x00084562 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00084566 cmp r3, 0 |
| if (r3 == 0) {
0x00084568 beq.w 0x85142 | goto label_215;
| }
| label_83:
0x0008456c mov r0, sl | r0 = sl;
0x0008456e bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x00084572 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x00084576 mov r8, r0 | r8 = r0;
0x00084578 str r3, [sp, 0x54] | var_54h = r3;
0x0008457a b.w 0x83952 | goto label_49;
| label_182:
0x0008457e ldr r4, [sp, 0x28] | r4 = var_28h;
0x00084580 mov r0, sl | r0 = sl;
0x00084582 mov.w r2, -1 | r2 = -1;
0x00084586 mov r1, r7 | r1 = r7;
0x00084588 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0008458a str r3, [sp, 0xc] | var_ch = r3;
0x0008458c ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0008458e str r3, [sp, 8] | var_8h = r3;
0x00084590 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00084592 str r3, [sp, 4] | var_4h = r3;
0x00084594 add r3, sp, 0x8c | r3 += var_8ch;
0x00084596 str r3, [sp] | *(sp) = r3;
0x00084598 add r3, sp, 0xb4 | r3 += var_b4h;
0x0008459a bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x0008459e mov r0, r4 | r0 = r4;
0x000845a0 bl 0x8248c | fcn_0008248c (r0, r1);
0x000845a4 b 0x83f52 | goto label_50;
| label_200:
0x000845a6 ldr.w r3, [fp] | r3 = *(fp);
0x000845aa mov r6, r8 | r6 = r8;
0x000845ac b.w 0x83052 | goto label_28;
| label_159:
0x000845b0 movs r3, 2 | r3 = 2;
0x000845b2 str r0, [sp] | *(sp) = r0;
0x000845b4 movs r1, 0x76 | r1 = 0x76;
0x000845b6 mov r0, r5 | r0 = r5;
0x000845b8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000845bc ldr r3, [r5] | r3 = *(r5);
0x000845be ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000845c2 cmp r3, 0 |
| if (r3 == 0) {
0x000845c4 beq.w 0x833f0 | goto label_51;
| }
0x000845c6 add r7, sp, 0x50 | r7 = sp + 0x50;
0x000845c8 b.w 0x83404 | goto label_52;
| label_172:
0x000845cc movs r1, 0 | r1 = 0;
0x000845ce movs r0, 0xc | r0 = 0xc;
0x000845d0 bl 0x28c3c | fcn_00028c3c (r0);
0x000845d4 b.w 0x836d2 | goto label_53;
| label_156:
0x000845d8 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x000845dc cmp r3, 0 |
| if (r3 == 0) {
0x000845de beq.w 0x8525e | goto label_216;
| }
| label_87:
0x000845e2 mov r0, sl | r0 = sl;
0x000845e4 bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000845e8 mov r5, r0 | r5 = r0;
0x000845ea b.w 0x832e0 | goto label_54;
| label_196:
0x000845ee ldr r3, [pc, 0x164] |
0x000845f0 movs r1, 0 | r1 = 0;
0x000845f2 ldr r2, [pc, 0x164] |
0x000845f4 mov r0, sl | r0 = sl;
0x000845f6 add r3, pc | r3 = 0x108d50;
0x000845f8 add r2, pc | r2 = 0x108d56;
0x000845fa bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x000845fe b 0x83f5c | goto label_55;
| label_204:
0x00084600 ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 != 0) {
0x00084602 cbz r3, 0x8460c |
0x00084604 ldr r0, [sp, 0x18] | r0 = x;
0x00084606 mov r1, r3 | r1 = r3;
0x00084608 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
| label_75:
0x0008460c movs r4, 1 | r4 = 1;
0x0008460e b 0x83fb6 | goto label_56;
| label_165:
0x00084610 ldr r3, [pc, 0x148] |
0x00084612 add r3, pc | r3 = 0x108d72;
0x00084614 adds r3, 4 | r3 += 4;
0x00084616 b.w 0x8351a | goto label_57;
| label_72:
0x0008461a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008461c rsbs r2, r3, 0 | r2 = r3 - ;
0x0008461e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00084620 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x00084624 b 0x83f52 | goto label_50;
| label_211:
0x0008462e ldr r3, [pc, 0x134] |
0x00084630 add r3, pc | r3 = 0x108d9a;
0x00084632 adds r3, 4 | r3 += 4;
0x00084634 b 0x843de | goto label_58;
| label_184:
0x000846a4 ldrb.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000846a8 cmp r3, 0x59 |
| if (r3 != 0x59) {
0x000846aa bne.w 0x850f6 | goto label_217;
| }
0x000846ae ldr.w r1, [sl, 0x2c] | r1 = *((sl + 0x2c));
0x000846b2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000846b4 adds r5, r1, 1 | r5 = r1 + 1;
0x000846b6 adds r2, r3, r1 | r2 = r3 + r1;
0x000846b8 adds r3, r2, 2 | r3 = r2 + 2;
0x000846ba str r3, [sp, 0x64] | var_64h = r3;
0x000846bc str r3, [sp, 0xf8] | var_f8h = r3;
0x000846be adds r3, r2, 1 | r3 = r2 + 1;
0x000846c0 str r3, [sp, 0x44] | var_44h = r3;
0x000846c2 b.w 0x839dc | goto label_59;
| label_186:
0x000846c6 movs r3, 0 | r3 = 0;
0x000846c8 str r3, [sp, 0x68] | var_68h = r3;
0x000846ca str r3, [sp, 0x74] | var_74h = r3;
0x000846cc str r3, [sp, 0x7c] | var_7ch = r3;
0x000846ce b.w 0x83a68 | goto label_60;
| label_160:
0x000846d2 ldr.w r3, [r3, 0x210] | r3 = *((r3 + 0x210));
0x000846d6 cmp r3, 0 |
| if (r3 != 0) {
0x000846d8 bne.w 0x83404 | goto label_52;
| }
0x000846dc ldr r3, [r7] | r3 = *(r7);
0x000846de subs r3, 1 | r3--;
0x000846e0 str r3, [r7] | *(r7) = r3;
0x000846e2 cmp r3, 0 |
| if (r3 != 0) {
0x000846e4 bne.w 0x83404 | goto label_52;
| }
0x000846e8 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000846ea mov r1, r7 | r1 = r7;
0x000846ec bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000846f0 b.w 0x83404 | goto label_52;
| label_193:
0x000846f4 cmp r3, 0x56 |
| if (r3 == 0x56) {
0x000846f6 beq.w 0x84522 | goto label_61;
| }
0x000846fa add r2, sp, 0xdc | r2 += var_dch;
0x000846fc str r2, [sp, 0x30] | var_30h = r2;
0x000846fe b.w 0x83c9c | goto label_62;
| label_180:
0x000847b8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000847ba ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000847bc b.w 0x838fc | goto label_63;
| label_185:
0x000847c0 ldr.w r3, [fp, 0x58] | r3 = *(arg_58h);
| if (r3 != 0) {
0x000847c4 cbnz r3, 0x8480c | goto label_80;
| }
0x000847c6 ldr.w r1, [pc, 0xc60] |
0x000847ca mov r2, fp | r2 = fp;
0x000847cc add r1, pc | r1 = 0x109bfa;
0x000847ce addw r6, r1, 0xd58 | __asm ("addw r6, r1, 0xd58");
0x000847d2 addw r4, r1, 0xd4c | __asm ("addw r4, r1, 0xd4c");
0x000847d6 addw r0, r1, 0xd64 | __asm ("addw r0, r1, 0xd64");
0x000847da addw r1, r1, 0xd6c | __asm ("addw r1, r1, 0xd6c");
0x000847de b 0x847e8 |
| while (r3 == 0) {
0x000847e0 ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x000847e2 cmp r2, 0 |
| if (r2 == 0) {
0x000847e4 beq.w 0x85114 | goto label_218;
| }
0x000847e8 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000847ea ldr r5, [r3, 0x20] | r5 = *((r3 + 0x20));
0x000847ec cmp r5, r4 |
0x000847ee it ne |
| if (r5 != r4) {
0x000847f0 cmpne r5, r6 | __asm ("cmpne r5, r6");
| }
0x000847f2 ite eq |
| if (r5 != r4) {
0x000847f4 moveq r3, 1 | r3 = 1;
| }
| if (r5 == r4) {
0x000847f6 movne r3, 0 | r3 = 0;
| }
0x000847f8 cmp r5, r0 |
0x000847fa it eq |
| if (r5 != r0) {
0x000847fc orreq r3, r3, 1 | r3 |= 1;
| }
0x00084800 cmp r5, r1 |
0x00084802 it eq |
| if (r5 != r1) {
0x00084804 orreq r3, r3, 1 | r3 |= 1;
| }
0x00084808 cmp r3, 0 |
0x0008480a beq 0x847e0 |
| }
| label_80:
0x0008480c movs r3, 0 | r3 = 0;
0x0008480e ldr.w r1, [sl, 0x2c] | r1 = *((sl + 0x2c));
0x00084812 str r3, [sp, 0x20] | var_20h = r3;
0x00084814 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00084816 adds r5, r1, 1 | r5 = r1 + 1;
0x00084818 adds r3, r1, r3 | r3 = r1 + r3;
0x0008481a adds r2, r3, 2 | r2 = r3 + 2;
0x0008481c adds r3, 1 | r3++;
0x0008481e str r2, [sp, 0x64] | var_64h = r2;
0x00084820 str r3, [sp, 0x44] | var_44h = r3;
0x00084822 str.w r2, [sl, 0x2c] | __asm ("str.w r2, [sl, 0x2c]");
0x00084826 str r2, [sp, 0xf8] | var_f8h = r2;
0x00084828 b.w 0x839e4 | goto label_64;
| label_170:
0x0008482c cmp r0, 0 |
| if (r0 <= 0) {
0x0008482e ble 0x8484a | goto label_219;
| }
0x00084830 ldr r4, [sp, 0x20] | r4 = var_20h;
0x00084832 movs r1, 0 | r1 = 0;
0x00084834 movs r3, 0x10 | r3 = 0x10;
| do {
0x00084836 ldrb r2, [r4, r3] | r2 = *((r4 + r3));
0x00084838 adds r1, 1 | r1++;
0x0008483a cmp r0, r1 |
0x0008483c and r2, r2, 1 | r2 &= 1;
0x00084840 strb.w r2, [r8, r3] | *((r8 + r3)) = r2;
0x00084844 add.w r3, r3, 0x10 | r3 += 0x10;
0x00084848 bne 0x84836 |
| } while (r0 != r1);
| label_219:
0x0008484a ldr r1, [sp, 0x20] | r1 = var_20h;
0x0008484c mov.w r2, -1 | r2 = -1;
0x00084850 mov r0, r8 | r0 = r8;
0x00084852 bl 0x4c004 | r0 = fcn_0004c004 (r0, r1, r2);
0x00084856 clz r3, r0 | r3 &= r0;
0x0008485a lsrs r3, r3, 5 | r3 >>= 5;
0x0008485c str r3, [sp, 0x40] | var_40h = r3;
0x0008485e b.w 0x83694 | goto label_65;
| label_174:
0x000849ba ldrd r1, r5, [sp, 0x2c] | __asm ("ldrd r1, r5, [var_2ch]");
0x000849be str.w r8, [r4, 0xc] | __asm ("str.w r8, [r4, 0xc]");
0x000849c2 str.w r8, [r4, 0x18] | __asm ("str.w r8, [r4, 0x18]");
0x000849c6 mov r0, r5 | r0 = r5;
0x000849c8 bl 0x35d6c | fcn_00035d6c (r0, r1);
0x000849cc ldr r1, [sp, 0x20] | r1 = var_20h;
0x000849ce mov r0, r5 | r0 = r5;
0x000849d0 bl 0x35d6c | fcn_00035d6c (r0, r1);
0x000849d2 vst4.32 {d25[0], d26[0], d27[0], d28[0]}, [ip] | __asm ("vst4.32 {d25[0], d26[0], d27[0], d28[0]}, [ip]");
0x000849d6 cmp r3, 0 |
| if (r3 == 0) {
0x000849d8 beq.w 0x8378c | goto label_66;
| }
0x000849dc add r3, sp, 0x98 | r3 += var_98h;
0x000849de b.w 0x83768 | goto label_67;
| label_175:
0x000849e2 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x000849e4 str r2, [sp, 0x1c] | var_1ch = r2;
0x000849e6 cmp r2, 0 |
| if (r2 == 0) {
0x000849e8 beq.w 0x85378 | goto label_220;
| }
0x000849ec ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000849ee str r3, [sp, 0x1c] | var_1ch = r3;
0x000849f0 b.w 0x8379e | goto label_68;
| label_135:
0x000849f4 ldr.w r0, [sl] | r0 = *(sl);
0x000849f8 mov r1, r6 | r1 = r6;
0x000849fa bl 0x30cbc | fcn_00030cbc (r0, r1);
0x000849fe b.w 0x82fec | goto label_69;
| label_195:
0x00084a22 ldrb.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x00084a26 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00084a28 cmp r3, 0x59 |
0x00084a2a it ne |
| if (r3 == 0x59) {
0x00084a2c cmpne r2, 0 | __asm ("cmpne r2, 0");
| goto label_221;
| }
| if (r3 == 0x59) {
| label_221:
0x00084a2e beq.w 0x84526 | goto label_70;
| }
| label_210:
0x00084ac0 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x00084ac4 cmp r3, 0 |
| if (r3 == 0) {
0x00084ac6 beq.w 0x854ae | goto label_222;
| }
0x00084aca subs r3, 1 | r3--;
0x00084acc uxtb r3, r3 | r3 = (int8_t) r3;
0x00084ace strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x00084ad2 adds r3, 0x26 | r3 += 0x26;
0x00084ad4 ldr.w r5, [sl, r3, lsl 2] | offset_1 = r3 << 2;
| r5 = *((sl + offset_1));
| label_95:
0x00084ad8 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00084ada movs r1, 0x61 | r1 = 0x61;
0x00084adc ldr r3, [sp, 0x20] | r3 = var_20h;
0x00084ade ldr r2, [sp, 0x30] | r2 = var_30h;
0x00084ae0 mov r0, r6 | r0 = r6;
0x00084ae2 str r5, [sp] | *(sp) = r5;
0x00084ae4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084ae8 movs r3, 0 | r3 = 0;
0x00084aea ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00084aec movs r1, 0x8b | r1 = 0x8b;
0x00084aee str r3, [sp] | *(sp) = r3;
0x00084af0 mov r0, r6 | r0 = r6;
0x00084af2 mov r3, r5 | r3 = r5;
0x00084af4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| if (r5 != 0) {
0x00084af8 cbz r5, 0x84b02 |
0x00084afa mov r1, r5 | r1 = r5;
0x00084afc mov r0, sl | r0 = sl;
0x00084afe bl 0x27730 | fcn_00027730 (r0, r1);
0x00084b00 invalid |
| }
0x00084b02 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00084b04 cmp r3, 1 |
| if (r3 == 1) {
0x00084b06 beq.w 0x855d2 | goto label_223;
| }
0x00084b0a ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00084b0e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00084b10 cmp r2, r3 |
0x00084b12 itt gt |
| if (r2 <= r3) {
0x00084b14 ldrgt r3, [sp, 0x30] | r3 = var_30h;
| }
| if (r2 > r3) {
0x00084b16 strdgt r2, r3, [sl, 0x1c] | __asm ("strdgt r2, r3, [sl, 0x1c]");
| }
| label_101:
0x00084b1a ldr r0, [sp, 0x34] | r0 = var_34h;
0x00084b1c bl 0x8248c | fcn_0008248c (r0, r1);
0x00084b20 ldr.w r6, [sl, 0x28] | r6 = *((sl + 0x28));
0x00084b24 adds r3, r6, 1 | r3 = r6 + 1;
0x00084b26 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x00084b2a str r6, [r4, 8] | *((r4 + 8)) = r6;
0x00084b2c ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x00084b30 cmp r3, 0 |
| if (r3 == 0) {
0x00084b32 beq.w 0x854a0 | goto label_224;
| }
0x00084b36 subs r3, 1 | r3--;
0x00084b38 uxtb r3, r3 | r3 = (int8_t) r3;
0x00084b3a strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x00084b3e adds r3, 0x26 | r3 += 0x26;
0x00084b40 ldr.w r5, [sl, r3, lsl 2] | offset_2 = r3 << 2;
| r5 = *((sl + offset_2));
| label_94:
0x00084b44 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x00084b48 mov r2, r6 | r2 = r6;
0x00084b4a ldr r3, [sp, 0x20] | r3 = var_20h;
0x00084b4c movs r1, 0x79 | r1 = 0x79;
0x00084b4e mov r0, fp | r0 = fp;
0x00084b50 str r3, [sp] | *(sp) = r3;
0x00084b52 mov r3, r5 | r3 = r5;
0x00084b54 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084b58 movs r3, 0 | r3 = 0;
0x00084b5a ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00084b5c movs r1, 0x21 | r1 = 0x21;
0x00084b5e str r3, [sp] | *(sp) = r3;
0x00084b60 mov r0, fp | r0 = fp;
0x00084b62 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00084b64 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084b66 invalid |
0x00084b6a adds r0, r1, r3 | r0 = r1 + r3;
0x00084b6c mov r0, fp | r0 = fp;
0x00084b6e add r1, pc | r1 += pc;
0x00084b70 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084b74 movs r3, 1 | r3 = 1;
0x00084b76 strb r3, [r4, 1] | *((r4 + 1)) = r3;
0x00084b78 ldr r3, [sp, 0x40] | r3 = var_40h;
| if (r3 != 0) {
0x00084b7a cbz r3, 0x84b96 |
0x00084b7c ldr r3, [sp, 0x18] | r3 = x;
0x00084b7e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00084b80 ands r3, r3, 4 | r3 &= 4;
| if (r3 != r3) {
0x00084b84 bne.w 0x854bc | goto label_225;
| }
0x00084b88 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x00084b8c ldr r1, [sp, 0xc8] | r1 = var_c8h;
0x00084b8e str r3, [sp, 0xb4] | var_b4h = r3;
0x00084b90 mov r0, fp | r0 = fp;
0x00084b92 bl 0x32ebc | fcn_00032ebc (r0, r1);
| }
0x00084b96 ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x00084b9a str r3, [sp, 0x20] | var_20h = r3;
| label_96:
0x00084b9c mov r3, r5 | r3 = r5;
0x00084b9e str r6, [sp] | *(sp) = r6;
0x00084ba0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00084ba2 movs r1, 0x85 | r1 = 0x85;
0x00084ba4 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00084ba6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084baa ldr.w r3, [r8] | r3 = *(r8);
0x00084bae movs r2, 1 | r2 = 1;
0x00084bb0 str r2, [sp, 0x40] | var_40h = r2;
| label_90:
0x00084bb2 cmp r3, 0 |
| if (r3 <= 0) {
0x00084bb4 ble 0x84c0e | goto label_226;
| }
0x00084bb6 str r6, [sp, 0x30] | var_30h = r6;
0x00084bb8 mov fp, r8 |
0x00084bba ldr r6, [sp, 0x24] | r6 = var_24h;
0x00084bbc movs r5, 1 | r5 = 1;
0x00084bbe str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x00084bc2 str r7, [sp, 0x7c] | var_7ch = r7;
0x00084bc4 ldr.w sb, [sp, 0x68] | sb = var_68h;
0x00084bc8 ldr r7, [sp, 0x40] | r7 = var_40h;
0x00084bca b 0x84be8 |
| while (r7 != 0) {
0x00084bcc str r2, [sp] | *(sp) = r2;
0x00084bce mov r3, r6 | r3 = r6;
0x00084bd0 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00084bd2 movs r1, 0x5e | r1 = 0x5e;
0x00084bd4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00084bd6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_71:
0x00084bda ldr.w r2, [r8] | r2 = *(r8);
0x00084bde adds r6, 1 | r6++;
0x00084be0 add.w fp, fp, 0x10 |
0x00084be4 cmp r2, r6 |
| if (r2 <= r6) {
0x00084be6 ble 0x84c06 | goto label_227;
| }
0x00084be8 add.w r2, sb, r6 | r2 = sb + r6;
0x00084bec cmp r7, 0 |
0x00084bee bne 0x84bcc |
| }
0x00084bf0 strb r5, [r4] | *(r4) = r5;
0x00084bf2 ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x00084bf6 cmp r1, 0 |
| if (r1 == 0) {
0x00084bf8 beq 0x84bda | goto label_71;
| }
0x00084bfa ldr.w r1, [fp, 8] | r1 = *(arg_8h);
0x00084bfe mov r0, sl | r0 = sl;
0x00084c00 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x00084c04 b 0x84bda | goto label_71;
| label_227:
0x00084c06 ldr.w sb, [sp, 0x24] | sb = var_24h;
0x00084c0a mov r3, r2 | r3 = r2;
0x00084c0c ldr r7, [sp, 0x7c] | r7 = var_7ch;
| label_226:
0x00084c0e ldr r1, [sp, 0x70] | r1 = var_70h;
| if (r1 != 0) {
0x00084c10 cbz r1, 0x84c18 |
0x00084c12 ldr r2, [r1] | r2 = *(r1);
0x00084c14 adds r2, 1 | r2++;
0x00084c16 str r2, [r1] | *(r1) = r2;
| }
0x00084c18 ldr r2, [sp, 0x70] | r2 = var_70h;
0x00084c1a movs r1, 0x5a | r1 = 0x5a;
0x00084c1c ldr r5, [sp, 0x14] | r5 = var_14h;
0x00084c1e strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x00084c22 mvn r3, 7 | r3 = ~7;
0x00084c26 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00084c28 mov r0, r5 | r0 = r5;
0x00084c2a str r3, [sp, 8] | var_8h = r3;
0x00084c2c mov fp, r5 |
0x00084c2e ldr r3, [sp, 0x68] | r3 = var_68h;
0x00084c30 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00084c34 ldr r6, [r5, 0x6c] | r6 = *((r5 + 0x6c));
0x00084c36 movs r3, 0 | r3 = 0;
0x00084c38 mov r0, r5 | r0 = r5;
0x00084c3a movs r1, 0xd | r1 = 0xd;
0x00084c3c mov r5, r3 | r5 = r3;
0x00084c3e adds r2, r6, 1 | r2 = r6 + 1;
0x00084c40 str r2, [sp] | *(sp) = r2;
0x00084c42 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084c46 ldr.w r3, [r8] | r3 = *(r8);
0x00084c4a movs r1, 0x4f | r1 = 0x4f;
0x00084c4c ldr r2, [sp, 0x68] | r2 = var_68h;
0x00084c4e str r3, [sp] | *(sp) = r3;
0x00084c50 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00084c52 ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00084c56 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084c5a ldr r3, [sp, 0x74] | r3 = var_74h;
0x00084c5c movs r1, 9 | r1 = 9;
0x00084c5e ldr r2, [sp, 0x48] | r2 = var_48h;
0x00084c60 mov r0, fp | r0 = fp;
0x00084c62 str r5, [sp] | *(sp) = r5;
0x00084c64 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084c68 ldr.w r1, [pc, 0x7cc] |
0x00084c6c mov r0, fp | r0 = fp;
0x00084c6e add r1, pc | r1 = 0x10a0aa;
0x00084c70 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084c74 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00084c76 movs r1, 0x31 | r1 = 0x31;
0x00084c78 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x00084c7a mov r0, fp | r0 = fp;
0x00084c7c str r5, [sp] | *(sp) = r5;
0x00084c7e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084c82 ldr.w r1, [pc, 0x7b8] |
0x00084c84 asrs r0, r7, 0x1e | r0 = r7 >> 0x1e;
0x00084c86 mov r0, fp | r0 = fp;
0x00084c88 add r1, pc | r1 = 0x10a0ca;
0x00084c8a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084c8e ldr r3, [sp, 0x60] | r3 = var_60h;
0x00084c90 movs r1, 9 | r1 = 9;
0x00084c92 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00084c94 mov r0, fp | r0 = fp;
0x00084c96 str r5, [sp] | *(sp) = r5;
0x00084c98 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084c9c ldr.w r1, [pc, 0x7a0] |
0x00084ca0 mov r0, fp | r0 = fp;
0x00084ca2 add r1, pc | r1 = 0x10a0e6;
0x00084ca4 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084ca8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00084caa cmp r6, 0 |
0x00084cac ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x00084cb0 ldr r3, [r1] | r3 = imp.atan;
0x00084cb2 it lt |
| if (r6 >= 0) {
0x00084cb4 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x00084cb8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00084cbc cmp r3, 0 |
| if (r3 != 0) {
0x00084cbe bne.w 0x8513a | goto label_228;
| }
0x00084cc2 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x00084cc4 movs r1, 0x18 | r1 = 0x18;
0x00084cc6 mla r3, r1, r6, r3 | __asm ("mla r3, r1, r6, r3");
| label_82:
0x00084cca ldr r6, [sp, 0x50] | r6 = var_50h;
0x00084ccc str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00084cce mov r0, sl | r0 = sl;
0x00084cd0 mov r3, sb | r3 = sb;
0x00084cd2 mov r2, r4 | r2 = r4;
0x00084cd4 mov r1, r6 | r1 = r6;
0x00084cd6 movs r5, 0 | r5 = 0;
0x00084cd8 bl 0x8c06c | fcn_0008c06c (r0, r1, r2, r3, r4, r5, r6);
0x00084cdc mov r3, r6 | r3 = r6;
0x00084cde ldr r6, [sp, 0x14] | r6 = var_14h;
0x00084ce0 movs r1, 0x47 | r1 = 0x47;
0x00084ce2 movs r2, 1 | r2 = 1;
0x00084ce4 str r5, [sp] | *(sp) = r5;
0x00084ce6 mov r0, r6 | r0 = r6;
0x00084ce8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084cec ldr.w r1, [pc, 0x754] |
0x00084cf0 mov r0, r6 | r0 = r6;
0x00084cf2 add r1, pc | r1 = 0x10a13a;
0x00084cf4 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084cf6 ldr.w sb, [sl, 0xb10] | sb = *((sl + 0xb10));
0x00084cfa cmp r3, 0 |
| if (r3 == 0) {
0x00084cfc beq.w 0x8512a | goto label_229;
| }
0x00084d00 str r5, [sp] | *(sp) = r5;
0x00084d02 movs r1, 0x24 | r1 = 0x24;
0x00084d04 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00084d06 mov r0, r6 | r0 = r6;
0x00084d08 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00084d0a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_81:
0x00084d0e ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 != 0) {
0x00084d10 cbz r3, 0x84d1a |
0x00084d12 ldr r0, [sp, 0x18] | r0 = x;
0x00084d14 mov r1, r3 | r1 = r3;
0x00084d16 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x00084d1a ldr r5, [sp, 0x14] | r5 = var_14h;
0x00084d1c movs r6, 0 | r6 = 0;
0x00084d1e ldr.w fp, [sp, 0x48] | fp = var_48h;
0x00084d22 movs r1, 9 | r1 = 9;
0x00084d24 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00084d26 mov r0, r5 | r0 = r5;
0x00084d28 str r6, [sp] | *(sp) = r6;
0x00084d2a mov r2, fp | r2 = fp;
0x00084d2c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084d30 ldr.w r1, [pc, 0x714] |
0x00084d34 mov r0, r5 | r0 = r5;
0x00084d36 add r1, pc | r1 = 0x10a182;
0x00084d38 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084d3c mov r0, r5 | r0 = r5;
0x00084d3e ldr r1, [sp, 0x44] | r1 = var_44h;
0x00084d40 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x00084d44 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00084d46 movs r2, 1 | r2 = 1;
0x00084d48 mov r0, r5 | r0 = r5;
0x00084d4a movs r1, 0x47 | r1 = 0x47;
0x00084d4c ldr r5, [r5, 0x6c] | r5 = *((r5 + 0x6c));
0x00084d4e mov r8, r0 | r8 = r0;
0x00084d50 str r6, [sp] | *(sp) = r6;
0x00084d52 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084d56 ldr.w r1, [pc, 0x6f4] |
0x00084d5a mov r0, r8 | r0 = r8;
0x00084d5c add r1, pc | r1 = 0x10a1ae;
0x00084d5e bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084d62 mov r3, r6 | r3 = r6;
0x00084d64 mov r2, fp | r2 = fp;
0x00084d66 movs r1, 0x43 | r1 = 0x43;
0x00084d68 mov r0, r8 | r0 = r8;
0x00084d6a str r6, [sp] | *(sp) = r6;
0x00084d6c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084d70 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00084d74 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00084d78 cmn r2, r3 |
| if (r2 < r3) {
0x00084d7a bmi.w 0x853f4 | goto label_230;
| }
0x00084d7e ldr r3, [sp, 0x64] | r3 = var_64h;
0x00084d80 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00084d82 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00084d84 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x00084d86 lsls r3, r3, 2 | r3 <<= 2;
0x00084d88 rsbs r3, r3, 0 | r3 -= ;
0x00084d8a str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_93:
0x00084d8c ldr r3, [sp, 0x14] | r3 = var_14h;
0x00084d8e mov.w r8, 0 | r8 = 0;
0x00084d92 ldr r2, [sp, 0x50] | r2 = var_50h;
0x00084d94 movs r1, 0x31 | r1 = 0x31;
0x00084d96 ldr r6, [r3, 0x6c] | r6 = *((r3 + 0x6c));
0x00084d98 mov fp, r3 |
0x00084d9a mov r0, r3 | r0 = r3;
0x00084d9c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00084da0 adds r3, r6, 2 | r3 = r6 + 2;
0x00084da2 adds r6, 1 | r6++;
0x00084da4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084da8 ldr.w r1, [pc, 0x6a4] |
0x00084dac mov r0, fp | r0 = fp;
0x00084dae add r1, pc | r1 = 0x10a202;
0x00084db0 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084db4 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00084db6 mov r3, r8 | r3 = r8;
0x00084db8 movs r1, 0x43 | r1 = 0x43;
0x00084dba mov r0, fp | r0 = fp;
0x00084dbc str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00084dc0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084dc4 ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00084dc8 mov r1, r4 | r1 = r4;
0x00084dca bl 0x42608 | fcn_00042608 (r0, r1, r2);
0x00084dce ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00084dd0 movs r3, 0x10 | r3 = 0x10;
0x00084dd2 mov r2, r6 | r2 = r6;
0x00084dd4 mov r0, sl | r0 = sl;
0x00084dd6 bl 0x7dcb8 | fcn_0007dcb8 (r0, r1, r2, r3);
0x00084dda ldr r1, [sp, 0x10] | r1 = var_10h;
0x00084ddc add r3, sp, 0x8c | r3 += var_8ch;
0x00084dde mov.w r2, -1 | r2 = -1;
0x00084de2 mov r0, sl | r0 = sl;
0x00084de4 str r3, [sp] | *(sp) = r3;
0x00084de6 add r3, sp, 0xb4 | r3 += var_b4h;
0x00084de8 str r1, [sp, 4] | var_4h = r1;
0x00084dea mov r1, r7 | r1 = r7;
0x00084dec strd r6, r5, [sp, 8] | __asm ("strd r6, r5, [var_8h]");
0x00084df0 bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x00084df4 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00084df6 mov r3, r8 | r3 = r8;
0x00084df8 movs r1, 0x43 | r1 = 0x43;
0x00084dfa mov r0, fp | r0 = fp;
0x00084dfc str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00084e00 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084e04 ldr.w r1, [pc, 0x64c] |
0x00084e08 mov r0, fp | r0 = fp;
0x00084e0a add r1, pc | r1 = 0x10a262;
0x00084e0c bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084e10 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x00084e14 ldr r2, [sp, 0x60] | r2 = var_60h;
0x00084e16 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00084e1a mvns r2, r2 | r2 = ~r2;
0x00084e1c cmn r1, r3 |
| if (r1 < r3) {
0x00084e1e bmi.w 0x853ec | goto label_231;
| }
0x00084e22 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00084e24 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00084e26 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x00084e28 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_92:
0x00084e2c mov r1, r4 | r1 = r4;
0x00084e2e mov r0, sl | r0 = sl;
0x00084e30 bl 0x4eddc | fcn_0004eddc (r0, r1);
0x00084e32 invalid |
0x00084e36 movs r5, 0 | r5 = 0;
0x00084e38 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00084e3a mov r2, r5 | r2 = r5;
0x00084e3c movs r1, 0x47 | r1 = 0x47;
0x00084e3e str r5, [sp] | *(sp) = r5;
0x00084e40 mov r0, r6 | r0 = r6;
0x00084e42 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084e44 mrc2 p8, 0, apsr_nzcv, c11, c15, 6 | __asm ("mrc2 p8, 0, apsr_nzcv, c11, c15, 6");
0x00084e48 asrs r0, r2, 0x18 | r0 = r2 >> 0x18;
0x00084e4a mov r0, r6 | r0 = r6;
0x00084e4c add r1, pc | r1 += pc;
0x00084e4e bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00084e52 mov r3, r5 | r3 = r5;
0x00084e54 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00084e56 movs r1, 0x43 | r1 = 0x43;
0x00084e58 mov r0, r6 | r0 = r6;
0x00084e5a str r5, [sp] | *(sp) = r5;
0x00084e5c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084e5e invalid |
0x00084e62 cmp r3, r5 |
0x00084e64 it ne |
| if (r3 != r5) {
0x00084e66 cmpne sb, r5 | __asm ("cmpne sb, r5");
| }
| if (r3 != r5) {
0x00084e68 bne.w 0x85324 | goto label_232;
| }
| label_77:
0x00084e6c ldr r3, [sp, 0x14] | r3 = var_14h;
0x00084e6e ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00084e70 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00084e74 cmn r2, r3 |
| if (r2 < r3) {
0x00084e76 bmi.w 0x8461a | goto label_72;
| }
0x00084e7a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00084e7c ldr r1, [sp, 0x14] | r1 = var_14h;
0x00084e7e ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00084e80 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x00084e82 lsls r3, r3, 2 | r3 <<= 2;
0x00084e84 rsbs r3, r3, 0 | r3 -= ;
0x00084e86 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x00084e88 b.w 0x83f52 | goto label_50;
0x00084e8a invalid |
| label_157:
0x00084e8c ldrd lr, ip, [sl, 0x28] | __asm ("ldrd lr, ip, [sl, 0x28]");
0x00084e90 movs r2, 1 | r2 = 1;
0x00084e92 movs r1, 0x47 | r1 = 0x47;
0x00084e94 mov r0, r5 | r0 = r5;
0x00084e96 add.w r3, ip, r2 | r3 = ip + r2;
0x00084e9a add.w ip, ip, 2 |
0x00084e9e str.w r3, [r8, 0x58] | __asm ("str.w r3, [r8, 0x58]");
0x00084ea2 str.w ip, [sl, 0x2c] | __asm ("str.w ip, [sl, 0x2c]");
0x00084ea6 str.w ip, [r8, 0x5c] | __asm ("str.w ip, [r8, 0x5c]");
0x00084eaa add.w ip, lr, r2 |
0x00084eae str.w ip, [sl, 0x28] | __asm ("str.w ip, [sl, 0x28]");
0x00084eb2 str.w lr, [r8, 0x3c] | __asm ("str.w lr, [r8, 0x3c]");
0x00084eb6 str r4, [sp] | *(sp) = r4;
0x00084eb8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084ebc mov r2, r4 | r2 = r4;
0x00084ebe str r4, [sp] | *(sp) = r4;
0x00084ec0 movs r1, 0x47 | r1 = 0x47;
0x00084ec2 ldr.w r3, [r8, 0x5c] | r3 = *((r8 + 0x5c));
0x00084ec6 mov r0, r5 | r0 = r5;
0x00084ec8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084ecc str r4, [sp] | *(sp) = r4;
0x00084ece mov r0, r5 | r0 = r5;
0x00084ed0 ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x00084ed4 movs r1, 0x73 | r1 = 0x73;
0x00084ed6 ldr.w r2, [r8, 0x3c] | r2 = *((r8 + 0x3c));
0x00084eda bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00084ede b.w 0x83884 | goto label_73;
| label_187:
0x00084ee2 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00084ee4 b.w 0x83a16 | goto label_74;
| label_181:
0x00084ee8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00084eea movs r2, 0x60 | r2 = 0x60;
0x00084eec mla r3, r2, r3, r0 | __asm ("mla r3, r2, r3, r0");
0x00084eee lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x00084ef0 ldr.w r3, [r3, 0x310] | r3 = *((r3 + 0x310));
0x00084ef4 b.w 0x838fc | goto label_63;
| label_176:
0x00084ef8 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00084efc ldr r2, [sp, 0x18] | r2 = x;
0x00084efe str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00084f00 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x00084f04 cmp r2, 0 |
| if (r2 != 0) {
0x00084f06 bne.w 0x8460c | goto label_75;
| }
0x00084f0a cmp.w r8, 0 |
| if (r8 != 0) {
0x00084f0e bne.w 0x8421e | goto label_76;
| }
| label_202:
0x00084f12 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x00084f14 cmp r2, 0 |
| if (r2 != 0) {
0x00084f16 bne.w 0x85528 | goto label_233;
| }
0x00084f1a ldr r1, [r7, 0x1c] | r1 = *((r7 + 0x1c));
0x00084f1c ldr r2, [r1] | r2 = *(r1);
0x00084f1e cmp r2, 1 |
| if (r2 != 1) {
0x00084f20 bne.w 0x85528 | goto label_233;
| }
0x00084f24 ldr r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x00084f26 ldr r5, [r2] | r5 = *(r2);
0x00084f28 cmp r5, 1 |
| if (r5 != 1) {
0x00084f2a bne.w 0x85528 | goto label_233;
| }
0x00084f2e ldr r5, [r2, 0x1c] | r5 = *((r2 + 0x1c));
0x00084f30 cmp r5, 0 |
| if (r5 != 0) {
0x00084f32 bne.w 0x85528 | goto label_233;
| }
0x00084f36 cmp r0, 1 |
| if (r0 != 1) {
0x00084f38 bne.w 0x85768 | goto label_234;
| }
0x00084f3c ldr.w r8, [r7, 0x2c] | r8 = *((r7 + 0x2c));
0x00084f40 cmp.w r8, 0 |
| if (r8 != 0) {
0x00084f44 bne.w 0x857b6 | goto label_235;
| }
0x00084f48 ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x00084f4a str r2, [sp, 0x20] | var_20h = r2;
0x00084f4c ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
0x00084f50 cmp r2, 0 |
| if (r2 != 0) {
0x00084f52 bne.w 0x857b6 | goto label_235;
| }
0x00084f56 ldr r5, [r1, 8] | r5 = *((r1 + 8));
0x00084f58 ldrb r2, [r5] | r2 = *(r5);
0x00084f5a cmp r2, 0xa8 |
| if (r2 != 0xa8) {
0x00084f5c bne.w 0x857b6 | goto label_235;
| }
0x00084f60 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x00084f62 cmp r4, r2 |
| if (r4 != r2) {
0x00084f64 bne.w 0x857b6 | goto label_235;
| }
0x00084f68 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00084f6a ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00084f6c ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00084f6e lsls r6, r1, 0x17 | r6 = r1 << 0x17;
| if (r6 >= r1) {
0x00084f70 bpl.w 0x85794 | goto label_236;
| }
0x00084f74 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x00084f76 movs r1, 4 |
0x00084f78 movt r1, 0x100 | r1 = 0x1000004;
0x00084f7c tst r1, r5 |
| if ((r1 & r5) != 0) {
0x00084f7e bne.w 0x85794 | goto label_236;
| }
0x00084f82 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00084f84 ldr.w r0, [sl] | r0 = *(sl);
0x00084f88 ldr r1, [r3, 0x3c] | r1 = *((r3 + 0x3c));
0x00084f8a cmp r1, 0 |
| if (r1 == 0) {
0x00084f8c beq.w 0x857c2 | goto label_237;
| }
0x00084f90 bl 0x27814 | r0 = fcn_00027814 (r0, r1);
0x00084f94 mov r6, r0 | r6 = r0;
| label_115:
0x00084f96 ldr.w sb, [sl, 0x28] | sb = *((sl + 0x28));
0x00084f9a mov r1, r6 | r1 = r6;
0x00084f9c ldr.w r0, [sl, 0x74] | r0 = *((sl + 0x74));
0x00084fa0 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00084fa2 add.w r3, sb, 1 | r3 = sb + 1;
0x00084fa6 cmp r0, 0 |
0x00084fa8 it eq |
| if (r0 != 0) {
0x00084faa moveq r0, sl | r0 = sl;
| }
0x00084fac str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x00084fb0 ldr r5, [r2, 0x14] | r5 = *((r2 + 0x14));
0x00084fb2 bl 0x7c8bc | fcn_0007c8bc (r0, r1);
0x00084fb6 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00084fb8 mov r1, r6 | r1 = r6;
0x00084fba mov r0, sl | r0 = sl;
0x00084fbc ldr r3, [r2] | r3 = *(r2);
0x00084fbe str r3, [sp] | *(sp) = r3;
0x00084fc0 movs r3, 0 | r3 = 0;
0x00084fc2 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00084fc4 bl 0x430a8 | fcn_000430a8 (r0, r1, r2, r3);
0x00084fc8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00084fca ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00084fcc tst.w r3, 0x80 |
0x00084fd0 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
| if ((r3 & 0x80) != 0) {
0x00084fd2 bne.w 0x854c6 | goto label_238;
| }
0x00084fd6 ldrb.w r3, [r3, 0x2d] | r3 = *((r3 + 0x2d));
0x00084fda lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x00084fdc bmi.w 0x855fc | goto label_239;
| }
0x00084fe0 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x00084fe2 cmp r3, 0 |
| if (r3 == 0) {
0x00084fe4 beq.w 0x855fc | goto label_239;
| }
| label_98:
0x00084fe8 mov r0, r8 | r0 = r8;
| do {
0x00084fea ldrb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x00084fee lsls r2, r2, 0x1d | r2 <<= 0x1d;
| if (r2 >= r2) {
0x00084ff0 bmi 0x85008 |
0x00084ff2 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00084ff4 ldrsh.w r2, [r3, 0x30] | r2 = *((r3 + 0x30));
0x00084ff8 ldrsh.w r1, [r1, 0x28] | r1 = *((r1 + 0x28));
0x00084ffc cmp r1, r2 |
| if (r1 <= r2) {
0x00084ffe ble 0x85008 | goto label_103;
| }
0x00085000 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00085002 cmp r1, 0 |
| if (r1 == 0) {
0x00085004 beq.w 0x85646 | goto label_240;
| }
| }
| label_103:
0x00085008 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008500a cmp r3, 0 |
0x0008500c bne 0x84fea |
| } while (r3 != 0);
0x0008500e mov r8, r0 | r8 = r0;
0x00085010 cmp r0, 0 |
| if (r0 == 0) {
0x00085012 beq.w 0x855fc | goto label_239;
| }
0x00085014 strh r3, [r6, 0x16] | *((r6 + 0x16)) = r3;
| label_97:
0x00085016 ldr.w r5, [r8, 0x2c] | r5 = *((r8 + 0x2c));
0x0008501a mov r1, r8 | r1 = r8;
0x0008501c mov r0, sl | r0 = sl;
0x0008501e bl 0x45e80 | fcn_00045e80 (r0, r1);
0x00085022 movs r2, 1 | r2 = 1;
0x00085024 str r6, [sp] | *(sp) = r6;
0x00085026 mov r6, r0 | r6 = r0;
0x00085028 str r2, [sp, 4] | var_4h = r2;
0x0008502a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008502c mov r3, r5 | r3 = r5;
0x0008502e mov r2, sb | r2 = sb;
0x00085030 movs r1, 0x70 | r1 = 0x70;
0x00085032 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
| if (r6 != 0) {
0x00085036 cbz r6, 0x85048 |
0x00085038 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008503a mov r2, r6 | r2 = r6;
0x0008503c mvn r3, 7 | r3 = ~7;
0x00085040 mov.w r1, -1 | r1 = -1;
0x00085044 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
| }
0x00085048 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0008504a movs r4, 0 | r4 = 0;
0x0008504c ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008504e mov r2, sb | r2 = sb;
0x00085050 movs r1, 0x62 | r1 = 0x62;
0x00085052 str r4, [sp] | *(sp) = r4;
0x00085054 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00085056 mov r0, r5 | r0 = r5;
0x00085058 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008505c mov r3, r4 | r3 = r4;
0x0008505e mov r2, sb | r2 = sb;
0x00085060 movs r1, 0x7a | r1 = 0x7a;
0x00085062 mov r0, r5 | r0 = r5;
0x00085064 str r4, [sp] | *(sp) = r4;
0x00085066 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008506a ldrb.w r3, [sl, 0xcf] | r3 = *((sl + 0xcf));
0x0008506e cmp r3, 2 |
| if (r3 == 2) {
0x00085070 bne 0x850a2 |
0x00085072 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00085074 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00085076 ldr r3, [r3] | r3 = *(r3);
0x00085078 lsls r2, r2, 0x18 | r2 <<= 0x18;
| if (r2 < r2) {
0x0008507a bpl 0x8508a |
0x0008507c ldrb.w r2, [r8, 0x37] | r2 = *((r8 + 0x37));
0x00085080 and r2, r2, 3 | r2 &= 3;
0x00085084 cmp r2, 2 |
| if (r2 == 2) {
0x00085086 beq.w 0x85778 | goto label_241;
| }
| }
0x0008508a ldr r2, [pc, 0x3d0] |
0x0008508c ldr.w r1, [r8] | r1 = *(r8);
0x00085090 add r2, pc | r2 = 0x10a4f2;
| label_102:
0x00085092 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x00085096 mov r0, sl | r0 = sl;
0x00085098 ldr r2, [pc, 0x3c4] |
0x0008509a movs r1, 0 | r1 = 0;
0x0008509c add r2, pc | r2 = 0x10a500;
0x0008509e bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x000850a0 invalid |
| }
| label_100:
0x000850a2 ldr r5, [sp, 0x44] | r5 = var_44h;
0x000850a4 movs r4, 0 | r4 = 0;
0x000850a6 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000850a8 mov r0, sl | r0 = sl;
0x000850aa movs r3, 0x10 | r3 = 0x10;
0x000850ac str r4, [sp, 0xb4] | var_b4h = r4;
0x000850ae mov r2, r5 | r2 = r5;
0x000850b0 bl 0x7dcb8 | fcn_0007dcb8 (r0, r1, r2, r3);
0x000850b4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000850b6 mov.w r2, -1 | r2 = -1;
0x000850ba mov r1, r7 | r1 = r7;
0x000850bc mov r0, sl | r0 = sl;
0x000850be strd r5, r5, [sp, 8] | __asm ("strd r5, r5, [var_8h]");
0x000850c2 strd r4, r3, [sp] | __asm ("strd r4, r3, [sp]");
0x000850c6 mov r3, r4 | r3 = r4;
0x000850c8 bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x000850cc b 0x84e6c | goto label_77;
| label_190:
0x000850ce ldr.w r3, [r3, 0x210] | r3 = *((r3 + 0x210));
0x000850d2 cmp r3, 0 |
| if (r3 != 0) {
0x000850d4 bne.w 0x83afe | goto label_78;
| }
0x000850d8 cmp r4, 0 |
| if (r4 == 0) {
0x000850da beq.w 0x83afe | goto label_78;
| }
0x000850de ldr r3, [r4] | r3 = *(r4);
0x000850e0 subs r3, 1 | r3--;
0x000850e2 str r3, [r4] | *(r4) = r3;
0x000850e4 cmp r3, 0 |
| if (r3 != 0) {
0x000850e6 bne.w 0x83afe | goto label_78;
| }
0x000850ea ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000850ec mov r1, r4 | r1 = r4;
0x000850ee bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000850f2 b.w 0x83afe | goto label_78;
| label_217:
0x000850f6 ldr.w r1, [fp, 0x18] | r1 = *(arg_18h);
0x000850fa ldr.w r0, [sl] | r0 = *(sl);
0x000850fe bl 0x4aebc | r0 = fcn_0004aebc (r0, r1);
0x00085102 cmp r0, 0 |
| if (r0 == 0) {
0x00085104 beq.w 0x8528a | goto label_242;
| }
0x00085108 movs r3, 1 | r3 = 1;
0x0008510a str r3, [sp, 0xf4] | var_f4h = r3;
0x0008510c ldrb.w r3, [fp, 0x11] | r3 = *(arg_11h);
0x00085110 b.w 0x839ae | goto label_79;
| label_218:
0x00085114 ldrb.w r2, [fp, 0x12] | r2 = *(arg_12h);
0x00085118 ldrb.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x0008511c cmp r2, 0x58 |
| if (r2 == 0x58) {
0x0008511e beq.w 0x85272 | goto label_243;
| }
0x00085122 movs r3, 1 | r3 = 1;
0x00085124 str r3, [sp, 0xf4] | var_f4h = r3;
0x00085126 b.w 0x8480c | goto label_80;
| label_229:
0x0008512a ldr r0, [sp, 0x34] | r0 = var_34h;
0x0008512c bl 0x8248c | fcn_0008248c (r0, r1);
0x00085130 ldr r1, [sp, 0x78] | r1 = var_78h;
0x00085132 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00085134 bl 0x32ebc | fcn_00032ebc (r0, r1);
0x00085138 b 0x84d0e | goto label_81;
| label_228:
0x0008513a ldr r3, [pc, 0x328] |
0x0008513c add r3, pc | r3 = 0x10a5a6;
0x0008513e adds r3, 4 | r3 += 4;
0x00085140 b 0x84cca | goto label_82;
| label_215:
0x00085142 ldr.w r3, [sl] | r3 = *(sl);
0x00085146 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00085148 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
0x0008514a itt pl |
| if (r2 < r3) {
0x0008514c movpl r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x0008514e strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x00085152 b.w 0x8456c | goto label_83;
| label_173:
0x00085162 ldr.w r0, [sl] | r0 = *(sl);
0x00085166 mov r1, r4 | r1 = r4;
0x00085168 bl 0x2d738 | fcn_0002d738 (r0, r1);
0x0008516c b.w 0x836ea | goto label_84;
| label_214:
0x00085170 ldr.w r3, [sl] | r3 = *(sl);
0x00085174 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00085176 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00085178 itt pl |
| if (r3 < r3) {
0x0008517a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0008517c strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x00085180 b.w 0x84550 | goto label_85;
| label_203:
0x00085202 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00085204 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00085206 cmp r2, 0 |
| if (r2 < 0) {
0x00085208 blt.w 0x8421e | goto label_76;
| }
0x0008520c ldr r2, [r3] | r2 = *(r3);
0x0008520e cmp r2, 0 |
| if (r2 == 0) {
0x00085210 beq.w 0x8421e | goto label_76;
| }
0x00085214 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00085216 ands r0, r3, 0x1000 | r0 = r3 & 0x1000;
| if (r0 != r3) {
0x0008521a bne.w 0x8421e | goto label_76;
| }
0x0008521e ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00085220 cmp r2, 0 |
| if (r2 == 0) {
0x00085222 beq.w 0x8421e | goto label_76;
| }
0x00085226 ldr r5, [r2, 8] | r5 = *((r2 + 8));
| if (r5 != 0) {
0x00085228 cbz r5, 0x85238 |
0x0008522a mov r1, r5 | r1 = r5;
0x0008522c mov r3, r0 | r3 = r0;
0x0008522e mov r2, r0 | r2 = r0;
0x00085230 ldr r0, [sp, 0x18] | r0 = x;
0x00085232 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x00085236 mov r5, r0 | r5 = r0;
| }
0x00085238 movs r2, 0 | r2 = 0;
0x0008523a mov r1, r8 | r1 = r8;
0x0008523c ldr r0, [sp, 0x18] | r0 = x;
0x0008523e bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x00085242 mov r2, r5 | r2 = r5;
0x00085244 mov r1, r0 | r1 = r0;
0x00085246 mov r0, sl | r0 = sl;
0x00085248 bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
0x0008524c subs r3, r0, 0 | r3 = r0 - 0;
0x0008524e str r3, [sp, 0x28] | var_28h = r3;
0x00085250 ite ne |
| if (r3 == r0) {
0x00085252 movne r3, 0x500 | r3 = 0x500;
| }
| if (r3 == r0) {
0x00085256 movs r3, 0 | r3 = 0;
| }
0x00085258 str r3, [sp, 0x58] | var_58h = r3;
0x0008525a b.w 0x84222 | goto label_86;
| label_216:
0x0008525e ldr.w r3, [sl] | r3 = *(sl);
0x00085262 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00085264 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00085266 itt pl |
| if (r3 < r3) {
0x00085268 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0008526a strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x0008526e b.w 0x845e2 | goto label_87;
| label_243:
0x00085272 cmp r3, 0x59 |
| if (r3 == 0x59) {
0x00085274 beq.w 0x8480c | goto label_80;
| }
0x00085278 ldr.w r1, [fp, 0x1c] | r1 = *(arg_1ch);
0x0008527c ldr.w r0, [sl] | r0 = *(sl);
0x00085280 bl 0x4aebc | r0 = fcn_0004aebc (r0, r1);
| if (r0 != 0) {
0x00085284 cbz r0, 0x8528a |
0x00085286 movs r3, 3 | r3 = 3;
0x00085288 str r3, [sp, 0xf4] | var_f4h = r3;
| }
| label_242:
0x0008528a ldrb.w r3, [fp, 0x11] | r3 = *(arg_11h);
0x0008528e b.w 0x839ae | goto label_79;
| label_194:
0x00085292 cmp r3, 0x56 |
0x00085294 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00085296 ite ne |
| if (r3 == 0x56) {
0x00085298 movne r1, 0x37 | r1 = 0x37;
| }
| if (r3 != 0x56) {
0x0008529a moveq r1, 0x39 | r1 = 0x39;
| }
0x0008529c movs r4, 0 | r4 = 0;
0x0008529e ldr r2, [sp, 0x20] | r2 = var_20h;
0x000852a0 str r3, [sp] | *(sp) = r3;
0x000852a2 mov r0, r8 | r0 = r8;
0x000852a4 movs r3, 0 | r3 = 0;
0x000852a6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000852aa mov r2, r4 | r2 = r4;
0x000852ac mov r5, r0 | r5 = r0;
0x000852ae mov r1, fp | r1 = fp;
0x000852b0 mov r0, sl | r0 = sl;
0x000852b2 bl 0x41b94 | fcn_00041b94 (r0, r1, r2);
0x000852b6 ldr.w sb, [sp, 0x40] | sb = var_40h;
0x000852ba movs r1, 0x23 | r1 = 0x23;
0x000852bc movs r3, 1 | r3 = 1;
0x000852be mov r0, r8 | r0 = r8;
0x000852c0 str r4, [sp] | *(sp) = r4;
0x000852c2 mov r2, sb | r2 = sb;
0x000852c4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000852c8 add r3, sp, 0xdc | r3 += var_dch;
0x000852ca mov r0, r3 | r0 = r3;
0x000852cc str r3, [sp, 0x30] | var_30h = r3;
0x000852ce bl 0x8b5ac | fcn_0008b5ac (r0, r1, r2, r3, r4);
0x000852d2 mov r3, r4 | r3 = r4;
0x000852d4 mov r2, sb | r2 = sb;
0x000852d6 movs r1, 0x92 | r1 = 0x92;
0x000852d8 mov r0, r8 | r0 = r8;
0x000852da str r4, [sp] | *(sp) = r4;
0x000852dc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000852e0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000852e2 mov r2, r4 | r2 = r4;
0x000852e4 movs r1, 8 | r1 = 8;
0x000852e6 mov r0, r8 | r0 = r8;
0x000852e8 str r4, [sp] | *(sp) = r4;
0x000852ea bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000852ee ldr.w r3, [r8] | r3 = *(r8);
0x000852f2 cmp r5, r4 |
0x000852f4 ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x000852f8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000852fc it lt |
| if (r5 >= r4) {
0x000852fe addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x00085302 cmp r3, 0 |
| if (r3 != 0) {
0x00085304 bne.w 0x85502 | goto label_244;
| }
0x00085306 strh r5, [r7, 6] | *((r7 + 6)) = r5;
0x00085308 ldr.w r3, [r8, 0x68] | r3 = *((r8 + 0x68));
0x0008530c movs r1, 0x18 | r1 = 0x18;
0x0008530e mla r3, r1, r5, r3 | __asm ("mla r3, r1, r5, r3");
| label_99:
0x00085312 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00085314 ldrb.w r3, [fp, 0x11] | r3 = *(arg_11h);
0x00085318 b.w 0x83c96 | goto label_88;
| label_206:
0x0008531c ldr r3, [pc, 0x150] |
0x0008531e add r3, pc | r3 = 0x10a792;
0x00085320 b.w 0x84334 | goto label_89;
| label_232:
0x00085324 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00085326 mov r1, sb | r1 = sb;
0x00085328 mov r0, sl | r0 = sl;
0x0008532a ldrd r2, r3, [r2, 0xc] | __asm ("ldrd r2, r3, [r2, 0xc]");
0x0008532e bl 0x35584 | fcn_00035584 (r0, r1, r2, r3, r4);
0x00085330 vld3.32 {d14, d16, d18}, [sb:0x40], fp | __asm ("vld3.32 {d14, d16, d18}, [sb:0x40], fp");
0x00085332 b 0x84e6c | goto label_77;
| label_205:
0x00085334 ldr r6, [sp, 0x40] | r6 = var_40h;
| if (r6 != 0) {
0x00085336 cbz r6, 0x85348 |
0x00085338 ldr r2, [sp, 0x18] | r2 = x;
0x0008533a ldr r2, [r2, 0x50] | r2 = *((r2 + 0x50));
0x0008533c ands r2, r2, 4 | r2 &= 4;
| if (r2 == r2) {
0x00085340 beq.w 0x8550a | goto label_245;
| }
0x00085344 movs r6, 0 | r6 = 0;
0x00085346 str r6, [sp, 0x40] | var_40h = r6;
| }
0x00085348 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008534a ldr r2, [r2, 0x6c] | r2 = *((r2 + 0x6c));
0x0008534c str r2, [sp, 0x20] | var_20h = r2;
0x0008534e b 0x84bb2 | goto label_90;
| label_117:
0x00085374 blx 0x6430 | fcn_00006430 ();
| label_220:
0x00085378 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x0008537a cmp r0, 1 |
| if (r0 != 1) {
0x0008537c bne.w 0x8379e | goto label_68;
| }
0x00085380 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00085382 ldr r3, [r2] | r3 = *(r2);
0x00085384 ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x00085388 cmp.w sb, 0 |
| if (sb == 0) {
0x0008538c beq.w 0x837a6 | goto label_91;
| }
0x00085390 ldr.w r6, [sb] | r6 = *(sb);
0x00085394 cmp r6, 1 |
| if (r6 != 1) {
0x00085396 bne.w 0x837a6 | goto label_91;
| }
0x0008539a ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0008539c lsls r0, r1, 7 | r0 = r1 << 7;
| if (r0 < r1) {
0x0008539e bmi.w 0x837a6 | goto label_91;
| }
0x000853a2 ldr r1, [sp, 0x18] | r1 = x;
0x000853a4 ldr r1, [r1, 0x50] | r1 = *((r1 + 0x50));
0x000853a6 lsls r1, r1, 0xf | r1 <<= 0xf;
| if (r1 < r1) {
0x000853a8 bmi.w 0x837a6 | goto label_91;
| }
0x000853aa add r1, sp, 0x3f4 | r1 = sp + 0x3f4;
0x000853ac ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x000853ae ldr r1, [pc, 0xc4] |
0x000853b0 str r2, [sp, 0x20] | var_20h = r2;
0x000853b2 mov r0, r5 | r0 = r5;
0x000853b4 add r1, pc | r1 = 0x10a82e;
0x000853b6 bl 0x215c4 | fcn_000215c4 (r0);
0x000853ba ldr r2, [sp, 0x20] | r2 = var_20h;
0x000853bc cmp r0, 0 |
| if (r0 != 0) {
0x000853be bne.w 0x8574e | goto label_246;
| }
0x000853c2 ldr.w r0, [sb, 8] | r0 = *((sb + 8));
0x000853c6 bl 0x2329c | r0 = fcn_0002329c (r0);
0x000853ca subs r3, r0, 0 | r3 = r0 - 0;
0x000853cc it ne |
| if (r3 == r0) {
0x000853ce movne r3, 1 | r3 = 1;
| }
0x000853d0 lsls r5, r3, 1 | r5 = r3 << 1;
| label_109:
0x000853d2 ldr r0, [sp, 0x18] | r0 = x;
0x000853d4 mov r1, sb | r1 = sb;
0x000853d6 movs r2, 0 | r2 = 0;
0x000853d8 bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x000853dc str r0, [sp, 0x1c] | var_1ch = r0;
| if (r0 != 0) {
0x000853de cbz r0, 0x853e2 |
0x000853e0 strb r5, [r0, 0x10] | *((r0 + 0x10)) = r5;
| }
0x000853e2 uxtb r3, r6 | r3 = (int8_t) r6;
0x000853e4 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000853e6 str r3, [sp, 0x48] | var_48h = r3;
0x000853e8 b.w 0x8379e | goto label_68;
| label_231:
0x000853ec ldr r1, [sp, 0x14] | r1 = var_14h;
0x000853ee bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x000853f2 b 0x84e2c | goto label_92;
| label_230:
0x000853f4 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000853f6 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000853f8 rsbs r2, r3, 0 | r2 = r3 - ;
0x000853fa bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x000853fe b 0x84d8c | goto label_93;
| label_224:
0x000854a0 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000854a4 adds r5, r3, 1 | r5 = r3 + 1;
0x000854a6 str.w r5, [sl, 0x2c] | __asm ("str.w r5, [sl, 0x2c]");
0x000854aa b.w 0x84b44 | goto label_94;
| label_222:
0x000854ae ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000854b2 adds r5, r3, 1 | r5 = r3 + 1;
0x000854b4 str.w r5, [sl, 0x2c] | __asm ("str.w r5, [sl, 0x2c]");
0x000854b8 b.w 0x84ad8 | goto label_95;
| label_225:
0x000854bc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000854be ldr r3, [r3, 0x6c] | r3 = *((r3 + 0x6c));
0x000854c0 str r3, [sp, 0x20] | var_20h = r3;
0x000854c2 b.w 0x84b9c | goto label_96;
| label_238:
0x000854c6 ldrb.w r1, [r3, 0x2d] | r1 = *((r3 + 0x2d));
0x000854ca ldr r3, [sp, 0x20] | r3 = var_20h;
0x000854cc and r1, r1, 1 | r1 &= 1;
0x000854d0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000854d2 cmp r3, 0 |
| if (r3 == 0) {
0x000854d4 beq.w 0x855fc | goto label_239;
| }
0x000854d8 mov r2, r3 | r2 = r3;
0x000854da b 0x854e4 |
| while (r0 != 2) {
0x000854dc ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000854de cmp r2, 0 |
| if (r2 == 0) {
0x000854e0 beq.w 0x855f4 | goto label_247;
| }
0x000854e4 ldrb.w r0, [r2, 0x37] | r0 = *((r2 + 0x37));
0x000854e8 and r0, r0, 3 | r0 &= 3;
0x000854ec cmp r0, 2 |
0x000854ee bne 0x854dc |
| }
0x000854f0 mov r8, r2 | r8 = r2;
0x000854f2 cmp r1, 0 |
| if (r1 != 0) {
0x000854f4 bne.w 0x85016 | goto label_97;
| }
0x000854f8 b 0x84fe8 | goto label_98;
| label_207:
0x000854fa ldr r3, [pc, 0x2d4] |
0x000854fc add r3, pc | r3 = 0x10acd2;
0x000854fe b.w 0x84334 | goto label_89;
| label_244:
0x00085502 ldr r3, [pc, 0x2d0] |
0x00085504 add r3, pc | r3 = 0x10acde;
0x00085506 adds r3, 4 | r3 += 4;
0x00085508 b 0x85312 | goto label_99;
| label_245:
0x0008550a ldr r1, [sp, 0x34] | r1 = var_34h;
0x0008550c ldrb.w r1, [r1, 0x34] | r1 = *((r1 + 0x34));
0x00085510 ubfx r0, r1, 3, 1 | r0 = (r1 >> 3) & ((1 << 1) - 1);
0x00085514 lsls r1, r1, 0x1c | r1 <<= 0x1c;
| if (r1 < r1) {
0x00085516 bmi.w 0x85708 | goto label_248;
| }
0x0008551a ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008551c mov r6, r0 | r6 = r0;
0x0008551e str r0, [sp, 0x40] | var_40h = r0;
0x00085520 ldr r2, [r2, 0x6c] | r2 = *((r2 + 0x6c));
0x00085522 str r2, [sp, 0x20] | var_20h = r2;
0x00085524 b.w 0x84bb2 | goto label_90;
| label_233:
0x00085528 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0008552a cmp r2, 0 |
| if (r2 == 0) {
0x0008552c beq.w 0x85728 | goto label_249;
| }
| label_110:
0x00085530 cmp r0, 0 |
| if (r0 <= 0) {
0x00085532 ble.w 0x85732 | goto label_250;
| }
| label_113:
0x00085536 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
| label_111:
0x00085538 movs r1, 0 | r1 = 0;
| do {
0x0008553a ldr r5, [r2] | r5 = *(r2);
0x0008553c ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x0008553e lsls r5, r5, 7 | r5 <<= 7;
| if (r5 >= r5) {
0x00085540 bmi 0x8554a |
0x00085542 ldr r5, [r2, 4] | r5 = *((r2 + 4));
0x00085544 ldr r5, [r5, 4] | r5 = *((r5 + 4));
0x00085546 lsls r6, r5, 0x1a | r6 = r5 << 0x1a;
| if (r6 < r5) {
0x00085548 bmi 0x85552 | goto label_108;
| }
| }
0x0008554a adds r1, 1 | r1++;
0x0008554c adds r2, 0x14 | r2 += 0x14;
0x0008554e cmp r0, r1 |
0x00085550 bgt 0x8553a |
| } while (r0 > r1);
| label_108:
0x00085552 cmp r0, r1 |
| if (r0 == r1) {
0x00085554 beq.w 0x85736 | goto label_251;
| }
| label_112:
0x00085558 movs r5, 0 | r5 = 0;
| label_107:
0x0008555a mov r1, r4 | r1 = r4;
0x0008555c mov r0, sl | r0 = sl;
0x0008555e bl 0x4eddc | fcn_0004eddc (r0, r1);
0x00085562 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00085564 mov r1, fp | r1 = fp;
0x00085566 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00085568 mov r0, sl | r0 = sl;
0x0008556a str r3, [sp] | *(sp) = r3;
0x0008556c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008556e orrs r3, r5 | r3 |= r5;
0x00085570 str r3, [sp, 8] | var_8h = r3;
0x00085572 movs r3, 0 | r3 = 0;
0x00085574 str r3, [sp, 0xc] | var_ch = r3;
0x00085576 str r3, [sp, 4] | var_4h = r3;
0x00085578 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008557a bl 0x7ee90 | r0 = fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x0008557e mov r6, r0 | r6 = r0;
0x00085580 cmp r0, 0 |
| if (r0 == 0) {
0x00085582 beq.w 0x8460c | goto label_75;
| }
0x00085586 ldrb.w r5, [r0, 0x33] | r5 = *((r0 + 0x33));
0x0008558a mov r2, r4 | r2 = r4;
0x0008558c ldr r1, [sp, 0x24] | r1 = var_24h;
0x0008558e mov r0, sl | r0 = sl;
0x00085590 mov r3, r5 | r3 = r5;
0x00085592 bl 0x8c06c | fcn_0008c06c (r0, r1, r2, r3, r4, r5, r6);
| if (r5 != 0) {
0x00085596 cbz r5, 0x855a8 |
0x00085598 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
| if (r2 == 0) {
0x0008559a cbz r2, 0x855a8 | goto label_252;
| }
0x0008559c ldrd r2, r3, [r2, 0xc] | __asm ("ldrd r2, r3, [r2, 0xc]");
0x000855a0 mov r1, r5 | r1 = r5;
0x000855a2 mov r0, sl | r0 = sl;
0x000855a4 bl 0x35584 | fcn_00035584 (r0, r1, r2, r3, r4);
| }
| label_252:
0x000855a8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000855aa cmp r3, 0 |
| if (r3 != 0) {
0x000855ac bne.w 0x856f8 | goto label_253;
| }
| label_106:
0x000855b0 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000855b2 cmp r3, 0 |
| if (r3 != 0) {
0x000855b4 bne 0x856b4 | goto label_254;
| }
| label_105:
0x000855b6 mov r0, r6 | r0 = r6;
0x000855b8 bl 0x8248c | fcn_0008248c (r0, r1);
0x000855bc ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x000855c0 mov r1, r4 | r1 = r4;
0x000855c2 bl 0x42608 | fcn_00042608 (r0, r1, r2);
0x000855c6 b 0x850a2 | goto label_100;
| label_223:
0x000855d2 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000855d4 cmp r1, 0 |
| if (r1 == 0) {
0x000855d6 beq.w 0x84b1a | goto label_101;
| }
0x000855da ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x000855de cmp r3, 7 |
| if (r3 > 7) {
0x000855e0 bhi.w 0x84b1a | goto label_101;
| }
0x000855e4 adds r2, r3, 1 | r2 = r3 + 1;
0x000855e6 adds r3, 0x26 | r3 += 0x26;
0x000855e8 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x000855ec str.w r1, [sl, r3, lsl 2] | __asm ("str.w r1, [sl, r3, lsl 2]");
0x000855f0 b.w 0x84b1a | goto label_101;
| label_247:
0x000855f4 mov r8, r2 | r8 = r2;
0x000855f6 cmp r1, 0 |
| if (r1 == 0) {
0x000855f8 beq.w 0x84fe8 | goto label_98;
| }
| label_239:
0x000855fc mov r3, r5 | r3 = r5;
0x000855fe ldr r5, [sp, 0x14] | r5 = var_14h;
0x00085600 movs r2, 1 | r2 = 1;
0x00085602 movs r1, 0x70 | r1 = 0x70;
0x00085604 str r2, [sp, 4] | var_4h = r2;
0x00085606 mov r2, sb | r2 = sb;
0x00085608 mov r0, r5 | r0 = r5;
0x0008560a str r6, [sp] | *(sp) = r6;
0x0008560c bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x00085610 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00085612 movs r4, 0 | r4 = 0;
0x00085614 mov r2, sb | r2 = sb;
0x00085616 movs r1, 0x62 | r1 = 0x62;
0x00085618 str r4, [sp] | *(sp) = r4;
0x0008561a mov r0, r5 | r0 = r5;
0x0008561c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008561e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085622 mov r3, r4 | r3 = r4;
0x00085624 mov r2, sb | r2 = sb;
0x00085626 movs r1, 0x7a | r1 = 0x7a;
0x00085628 mov r0, r5 | r0 = r5;
0x0008562a str r4, [sp] | *(sp) = r4;
0x0008562c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085630 ldrb.w r3, [sl, 0xcf] | r3 = *((sl + 0xcf));
0x00085634 cmp r3, 2 |
| if (r3 != 2) {
0x00085636 bne.w 0x850a2 | goto label_100;
| }
0x0008563a ldr r2, [pc, 0x1a0] |
0x0008563c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008563e add r2, pc | r2 = 0x10ae20;
0x00085640 ldr r3, [r3] | r3 = *(r3);
0x00085642 mov r1, r2 | r1 = r2;
0x00085644 b 0x85092 | goto label_102;
| label_240:
0x00085646 cmp r0, 0 |
| if (r0 == 0) {
0x00085648 beq 0x85724 | goto label_255;
| }
0x0008564a ldrsh.w r1, [r0, 0x30] | r1 = *((r0 + 0x30));
0x0008564e cmp r1, r2 |
0x00085650 it gt |
| if (r1 <= r2) {
0x00085652 movgt r0, r3 | r0 = r3;
| }
0x00085654 b 0x85008 | goto label_103;
| label_208:
0x0008569e str r6, [sp, 0x20] | var_20h = r6;
0x000856a0 b.w 0x8436a | goto label_104;
| label_254:
0x000856b4 ldrb.w r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000856b8 lsls r5, r3, 0x1d | r5 = r3 << 0x1d;
| if (r5 >= r3) {
0x000856ba bpl.w 0x855b6 | goto label_105;
| }
0x000856be ldrsb.w r3, [r6, 0x31] | r3 = *((r6 + 0x31));
0x000856c2 cmp r3, 0 |
| if (r3 == 0) {
0x000856c4 beq.w 0x855b6 | goto label_105;
| }
0x000856c8 ldrb.w r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000856cc add.w r5, r6, 0x350 | r5 = r6 + 0x350;
0x000856d0 movs r1, 0x60 | r1 = 0x60;
0x000856d2 subs r3, 1 | r3--;
0x000856d4 b 0x856e4 |
| while (r0 != r3) {
0x000856d6 mul r2, r1, r3 | r2 = r1 * r3;
0x000856da ldr r0, [r5, r2] | r0 = *((r5 + r2));
0x000856dc ldr r0, [r0, 0x28] | r0 = *((r0 + 0x28));
0x000856de lsls r0, r0, 0x1d | r0 <<= 0x1d;
| if (r0 < r0) {
0x000856e0 bmi 0x85780 | goto label_256;
| }
0x000856e2 subs r3, 1 | r3--;
0x000856e4 adds r0, r3, 1 | r0 = r3 + 1;
0x000856e6 bne 0x856d6 |
| }
0x000856e8 movs r2, 0 | r2 = 0;
0x000856ea ldr r0, [sp, 0x14] | r0 = var_14h;
0x000856ec str r2, [sp] | *(sp) = r2;
0x000856ee movs r1, 8 | r1 = 8;
0x000856f0 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000856f2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000856f6 b 0x855b6 | goto label_105;
| label_253:
0x000856f8 movs r2, 0 | r2 = 0;
0x000856fa ldr r0, [sp, 0x14] | r0 = var_14h;
0x000856fc str r2, [sp] | *(sp) = r2;
0x000856fe movs r1, 0x47 | r1 = 0x47;
0x00085700 movs r2, 1 | r2 = 1;
0x00085702 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085706 b 0x855b0 | goto label_106;
| label_248:
0x00085708 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008570a mov r6, r2 | r6 = r2;
0x0008570c ldr r1, [sp, 0xc8] | r1 = var_c8h;
0x0008570e str r2, [sp, 0xb4] | var_b4h = r2;
0x00085710 mov r0, r5 | r0 = r5;
0x00085712 str r2, [sp, 0x40] | var_40h = r2;
0x00085714 bl 0x32ebc | fcn_00032ebc (r0, r1);
0x00085718 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0008571a str r3, [sp, 0x20] | var_20h = r3;
0x0008571c ldr.w r3, [r8] | r3 = *(r8);
0x00085720 b.w 0x84bb2 | goto label_90;
| label_255:
0x00085724 mov r0, r3 | r0 = r3;
0x00085726 b 0x85008 | goto label_103;
| label_249:
0x00085728 cmp r0, 1 |
| if (r0 == 1) {
0x0008572a beq 0x857be | goto label_257;
| }
0x0008572c mov r5, r2 | r5 = r2;
0x0008572e str r2, [sp, 0x24] | var_24h = r2;
0x00085730 b 0x8555a | goto label_107;
| label_250:
0x00085732 movs r1, 0 | r1 = 0;
0x00085734 b 0x85552 | goto label_108;
| label_251:
0x00085736 adds r3, 1 | r3++;
0x00085738 movs r2, 0 | r2 = 0;
0x0008573a str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x0008573e movs r1, 0x47 | r1 = 0x47;
0x00085740 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00085742 mov r5, r2 | r5 = r2;
0x00085744 str r2, [sp] | *(sp) = r2;
0x00085746 str r3, [sp, 0x24] | var_24h = r3;
0x00085748 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008574c b 0x8555a | goto label_107;
| label_246:
0x0008574e ldr r1, [pc, 0x90] |
0x00085750 mov r0, r5 | r0 = r5;
0x00085752 str r2, [sp, 0x20] | var_20h = r2;
0x00085754 add r1, pc | r1 = 0x10af3a;
0x00085756 bl 0x215c4 | fcn_000215c4 (r0);
0x0008575a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008575c cmp r0, 0 |
| if (r0 != 0) {
0x0008575e bne.w 0x837a6 | goto label_91;
| }
0x00085760 add r0, sp, 0x88 | r0 = sp + 0x88;
0x00085762 mov r5, r6 | r5 = r6;
0x00085764 movs r6, 2 | r6 = 2;
0x00085766 b 0x853d2 | goto label_109;
| label_234:
0x00085768 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0008576a cmp r2, 0 |
| if (r2 != 0) {
0x0008576c bne.w 0x85530 | goto label_110;
| }
0x00085770 mov r5, r2 | r5 = r2;
0x00085772 strd r2, r2, [sp, 0x24] | __asm ("strd r2, r2, [var_28h]");
0x00085776 b 0x8555a | goto label_107;
| label_241:
0x00085778 ldr r2, [pc, 0x68] |
0x0008577a add r2, pc | r2 = 0x10af62;
0x0008577c mov r1, r2 | r1 = r2;
0x0008577e b 0x85092 | goto label_102;
| label_256:
0x00085780 adds r3, r6, r2 | r3 = r6 + r2;
0x00085782 movs r2, 0 | r2 = 0;
0x00085784 str r2, [sp] | *(sp) = r2;
0x00085786 movs r1, 8 | r1 = 8;
0x00085788 ldr.w r3, [r3, 0x310] | r3 = *((r3 + 0x310));
0x0008578c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008578e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085792 b 0x855b6 | goto label_105;
| label_236:
0x00085794 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00085796 cmp r1, 0 |
| if (r1 != 0) {
0x00085798 bne.w 0x85538 | goto label_111;
| }
| label_114:
0x0008579c ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0008579e cmp r3, 0 |
| if (r3 < 0) {
0x000857a0 blt.w 0x85558 | goto label_112;
| }
0x000857a4 ldr r3, [r2] | r3 = *(r2);
0x000857a6 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000857a8 cmp r3, 0 |
0x000857aa str r3, [sp, 0x28] | var_28h = r3;
0x000857ac ite eq |
| if (r3 != 0) {
0x000857ae moveq r5, 0 | r5 = 0;
| }
| if (r3 == 0) {
0x000857b0 movne r5, 0x500 | r5 = 0x500;
| }
0x000857b4 b 0x8555a | goto label_107;
| label_235:
0x000857b6 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x000857b8 cmp r2, 0 |
| if (r2 != 0) {
0x000857ba bne.w 0x85536 | goto label_113;
| }
| label_257:
0x000857be ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x000857c0 b 0x8579c | goto label_114;
| label_237:
0x000857c2 mov.w r6, 0x8000 |
0x000857c6 movt r6, 0xffff | r6 = 0x-8000;
0x000857ca b.w 0x84f96 | goto label_115;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x857e8 */
| #include <stdint.h>
|
; (fcn) fcn.000857e8 () | void fcn_000857e8 (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h;
| int16_t var_20h;
| int16_t var_24h_2;
| r0 = arg1;
| r1 = arg2;
0x000857e8 ldr r2, [pc, 0x22c] |
0x000857ea ldr r3, [pc, 0x230] | r3 = *(0x85a1e);
0x000857ec push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000857f0 mov r5, r1 | r5 = r1;
0x000857f2 add r2, pc | r2 = 0x10b20e;
0x000857f4 ldr r1, [r0, 0x24] | r1 = *((r0 + 0x24));
0x000857f6 sub sp, 0x38 |
0x000857f8 ldr r3, [r2, r3] |
0x000857fa ldr r3, [r3] | r3 = imp.atan;
0x000857fc str r3, [sp, 0x34] | *((sp + 0x34)) = r3;
0x000857fe mov.w r3, 0 | r3 = 0;
0x00085802 cmp r1, 0 |
| if (r1 != 0) {
0x00085804 bne.w 0x859ec | goto label_6;
| }
0x00085808 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0008580a mov r4, r0 | r4 = r0;
0x0008580c ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0008580e ldr r6, [r5, 0x14] | r6 = *((r5 + 0x14));
0x00085810 ands r2, r3, 0x2000000 | r2 = r3 & 0x2000000;
| if (r2 != r3) {
0x00085814 bne.w 0x8591e | goto label_7;
| }
0x00085818 orr r3, r3, 0x2000000 | r3 |= 0x2000000;
0x0008581c movs r1, 0x4a | r1 = 0x4a;
0x0008581e str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00085820 str r2, [sp] | *(sp) = r2;
0x00085822 ldr r3, [r0, 0x2c] | r3 = *((r0 + 0x2c));
0x00085824 adds r3, 1 | r3++;
0x00085826 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
0x00085828 mov r0, r7 | r0 = r7;
0x0008582a str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0008582c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085830 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00085832 adds r0, 1 | r0++;
0x00085834 str r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
0x00085836 ands r3, r3, 0x40 | r3 &= 0x40;
| if (r3 == r3) {
0x0008583a beq.w 0x859f0 | goto label_8;
| }
| label_3:
0x0008583e ldr r3, [pc, 0x1e0] |
0x00085840 mov.w sb, 0 | sb = 0;
0x00085844 add r3, pc | r3 = 0x10b26a;
| label_4:
0x00085846 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x00085848 movs r1, 1 | r1 = 1;
0x0008584a mov r0, r4 | r0 = r4;
0x0008584c str r2, [sp] | *(sp) = r2;
0x0008584e ldr r2, [pc, 0x1d4] |
0x00085850 add r2, pc | r2 = 0x10b27a;
0x00085852 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x00085856 ldrb r3, [r5] | r3 = *(r5);
0x00085858 cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x0008585a beq.w 0x85978 | goto label_9;
| }
0x0008585e ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00085860 movs r2, 0 | r2 = 0;
0x00085862 movs r1, 3 | r1 = 3;
0x00085864 mov r0, r7 | r0 = r7;
0x00085866 strb.w r1, [sp, 0x18] | *((sp + 0x18)) = r1;
0x0008586a movs r1, 0x47 | r1 = 0x47;
0x0008586c adds r3, 1 | r3++;
0x0008586e str r2, [sp, 0x20] | var_20h = r2;
0x00085870 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00085872 str r2, [sp] | *(sp) = r2;
0x00085874 str r3, [sp, 0x1c] | *((sp + 0x1c)) = r3;
0x00085876 str r2, [sp, 0x2c] | *((sp + 0x2c)) = r2;
0x00085878 strd r2, r2, [sp, 0x24] | __asm ("strd r2, r2, [var_24h_2]");
0x0008587c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085880 ldr r1, [pc, 0x1a4] |
0x00085882 mov r0, r7 | r0 = r7;
0x00085884 add r1, pc | r1 = 0x10b2b0;
0x00085886 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008588a ldr.w r8, [r6, 0x3c] | r8 = *((r6 + 0x3c));
0x0008588e ldr.w sl, [r4] | sl = *(r4);
0x00085892 cmp.w r8, 0 |
| if (r8 == 0) {
0x00085896 beq.w 0x859be | goto label_10;
| }
| label_0:
0x0008589a ldr r3, [pc, 0x190] |
0x0008589c add r2, sp, 0x10 | r2 += var_10h_2;
0x0008589e movs r1, 0x9b | r1 = 0x9b;
0x000858a0 mov r0, sl | r0 = sl;
0x000858a2 add r3, pc | r3 = 0x10b2d4;
0x000858a4 str r3, [sp, 0x10] | var_10h_2 = r3;
0x000858a6 movs r3, 1 | r3 = 1;
0x000858a8 str r3, [sp, 0x14] | var_14h = r3;
0x000858aa movs r3, 0 | r3 = 0;
0x000858ac bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x000858b0 mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x000858b2 cbz r0, 0x858d8 |
0x000858b4 movs r3, 0x43 | r3 = 0x43;
0x000858b6 strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x000858b8 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000858ba ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| if (r2 != 0) {
0x000858bc cbz r2, 0x858cc |
0x000858be movs r3, 0 | r3 = 0;
0x000858c0 mov r1, r2 | r1 = r2;
0x000858c2 mov r0, sl | r0 = sl;
0x000858c4 mov r2, r3 | r2 = r3;
0x000858c6 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x000858ca mov r2, r0 | r2 = r0;
| }
0x000858cc mov r3, r8 | r3 = r8;
0x000858ce movs r1, 0x34 | r1 = 0x34;
0x000858d0 mov r0, r4 | r0 = r4;
0x000858d2 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x000858d6 mov r8, r0 | r8 = r0;
| }
0x000858d8 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000858da ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| if (r1 != 0) {
0x000858dc cbz r1, 0x858e6 |
0x000858de mov r0, sl | r0 = sl;
0x000858e0 bl 0x30c30 | fcn_00030c30 (r0, r1);
0x000858e4 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
| }
0x000858e6 str.w r8, [r3, 0xc] | __asm ("str.w r8, [r3, 0xc]");
| label_1:
0x000858ea movs r3, 0 | r3 = 0;
0x000858ec mov r1, r6 | r1 = r6;
0x000858ee add r2, sp, 0x18 | r2 = sp + 0x18;
0x000858f0 mov r0, r4 | r0 = r4;
0x000858f2 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x000858f4 bl 0x82d20 | r0 = fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x000858f8 cmp r0, 0 |
| if (r0 != 0) {
0x000858fa bne 0x859e4 | goto label_11;
| }
0x000858fc ldr r6, [sp, 0x1c] | r6 = *((sp + 0x1c));
0x000858fe cmp.w sb, 0 |
0x00085902 str r6, [r5, 0x1c] | *((r5 + 0x1c)) = r6;
0x00085904 bne 0x85958 |
| while (1) {
0x00085906 movs r3, 1 | r3 = 1;
0x00085908 mov r0, r7 | r0 = r7;
0x0008590a str r3, [sp] | *(sp) = r3;
0x0008590c movs r1, 0x43 | r1 = 0x43;
0x0008590e ldrd r3, r2, [r5, 0x2c] | __asm ("ldrd r3, r2, [r5, 0x2c]");
0x00085912 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00085916 movs r3, 0 | r3 = 0;
0x00085918 strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0008591a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0008591c b 0x8593c | goto label_2;
| label_7:
0x0008591e ldr r2, [pc, 0x110] |
0x00085920 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00085922 str r1, [sp, 0xc] | var_ch_2 = r1;
0x00085924 add r2, pc | r2 = 0x10b35a;
0x00085926 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008592a ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x0008592c mov r0, r7 | r0 = r7;
0x0008592e ldrd r3, r2, [r5, 0x2c] | __asm ("ldrd r3, r2, [r5, 0x2c]");
0x00085932 str r1, [sp] | *(sp) = r1;
0x00085934 movs r1, 9 | r1 = 9;
0x00085936 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008593a ldr r6, [r5, 0x1c] | r6 = *((r5 + 0x1c));
| label_2:
0x0008593c ldr r2, [pc, 0xf4] |
0x0008593e ldr r3, [pc, 0xdc] | r3 = *(0x85a1e);
0x00085940 add r2, pc | r2 = 0x10b378;
0x00085942 ldr r3, [r2, r3] | r3 = imp.atan;
0x00085944 ldr r2, [r3] | r2 = imp.atan;
0x00085946 ldr r3, [sp, 0x34] | r3 = *((sp + 0x34));
0x00085948 eors r2, r3 | r2 ^= r3;
0x0008594a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008594e bne 0x85a12 | goto label_12;
| }
0x00085950 mov r0, r6 | r0 = r6;
0x00085952 add sp, 0x38 |
0x00085954 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00085958 ldr r3, [r7] | r3 = *(r7);
0x0008595a ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x0008595c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00085960 it lt |
| if (r2 >= r3) {
0x00085962 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x00085966 cmp r3, 0 |
| if (r3 != 0) {
0x00085968 bne 0x85a0a | goto label_13;
| }
0x0008596a ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x0008596c add.w sb, sb, sb, lsl 1 | sb += (sb << 1);
0x00085970 add.w r3, r3, sb, lsl 3 | r3 += (sb << 3);
| label_5:
0x00085974 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00085976 b 0x85906 |
| }
| label_9:
0x00085978 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0008597a movs r2, 0 | r2 = 0;
0x0008597c ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x0008597e str r2, [sp, 0x20] | var_20h = r2;
0x00085980 ldr r1, [r3] | r1 = *(r3);
0x00085982 adds r3, r0, 1 | r3 = r0 + 1;
0x00085984 str r2, [sp, 0x2c] | *((sp + 0x2c)) = r2;
0x00085986 str r3, [sp, 0x1c] | *((sp + 0x1c)) = r3;
0x00085988 add r0, r1 | r0 += r1;
0x0008598a str r1, [sp, 0x28] | *((sp + 0x28)) = r1;
0x0008598c add r1, r3 | r1 += r3;
0x0008598e str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x00085990 subs r1, 1 | r1--;
0x00085992 movs r0, 0xa | r0 = 0xa;
0x00085994 str r1, [sp] | *(sp) = r1;
0x00085996 movs r1, 0x4b | r1 = 0x4b;
0x00085998 strb.w r0, [sp, 0x18] | *((sp + 0x18)) = r0;
0x0008599c mov r0, r7 | r0 = r7;
0x0008599e str r3, [sp, 0x24] | var_24h_2 = r3;
0x000859a0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000859a4 ldr r1, [pc, 0x90] |
0x000859a6 mov r0, r7 | r0 = r7;
0x000859a8 add r1, pc | r1 = 0x10b3e4;
0x000859aa bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x000859ae ldr.w r8, [r6, 0x3c] | r8 = *((r6 + 0x3c));
0x000859b2 ldr.w sl, [r4] | sl = *(r4);
0x000859b6 cmp.w r8, 0 |
| if (r8 != 0) {
0x000859ba bne.w 0x8589a | goto label_0;
| }
| label_10:
0x000859be ldr r3, [pc, 0x7c] |
0x000859c0 movs r1, 0x9b | r1 = 0x9b;
0x000859c2 add r2, sp, 0x10 | r2 += var_10h_2;
0x000859c4 mov r0, sl | r0 = sl;
0x000859c6 add r3, pc | r3 = 0x10b408;
0x000859c8 str r3, [sp, 0x10] | var_10h_2 = r3;
0x000859ca movs r3, 1 | r3 = 1;
0x000859cc str r3, [sp, 0x14] | var_14h = r3;
0x000859ce mov r3, r8 | r3 = r8;
0x000859d0 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000859d4 mov r3, r8 | r3 = r8;
0x000859d6 mov r2, r0 | r2 = r0;
0x000859d8 movs r1, 0x94 | r1 = 0x94;
0x000859da mov r0, r4 | r0 = r4;
0x000859dc bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x000859e0 str r0, [r6, 0x3c] | *((r6 + 0x3c)) = r0;
0x000859e2 b 0x858ea | goto label_1;
| label_11:
0x000859e4 ldrb r3, [r5] | r3 = *(r5);
0x000859e6 movs r2, 0xb6 | r2 = 0xb6;
0x000859e8 strb r2, [r5] | *(r5) = r2;
0x000859ea strb r3, [r5, 2] | *((r5 + 2)) = r3;
| label_6:
0x000859ec movs r6, 0 | r6 = 0;
0x000859ee b 0x8593c | goto label_2;
| label_8:
0x000859f0 mov r2, r3 | r2 = r3;
0x000859f2 movs r1, 0xe | r1 = 0xe;
0x000859f4 mov r0, r7 | r0 = r7;
0x000859f6 str r3, [sp] | *(sp) = r3;
0x000859f8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000859fa invalid |
0x000859fe cmp r0, 0 |
| if (r0 == 0) {
0x00085a00 beq.w 0x8583e | goto label_3;
| }
0x00085a04 ldr r3, [pc, 0x38] |
0x00085a06 add r3, pc | r3 = 0x10b44a;
0x00085a08 b 0x85846 | goto label_4;
| label_13:
0x00085a0a ldr r3, [pc, 0x38] |
0x00085a0c add r3, pc | r3 = 0x10b456;
0x00085a0e adds r3, 4 | r3 += 4;
0x00085a10 b 0x85974 | goto label_5;
| label_12:
0x00085a12 blx 0x6430 | fcn_00006430 ();
0x00085a16 nop |
0x00085a18 cmp lr, r4 |
0x00085a1a movs r6, r0 | r6 = r0;
0x00085a1c lsls r4, r6, 8 | r4 = r6 << 8;
0x00085a1e movs r0, r0 |
0x00085a20 umlal r0, r0, r4, r4 | __asm ("umlal r0, r0, r4, r4");
0x00085a24 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x871f0 */
| #include <stdint.h>
|
; (fcn) fcn.000871f0 () | void fcn_000871f0 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| r0 = arg1;
| r1 = arg2;
0x000871f0 blhs 0xa6404 | __asm ("blhs 0xa6404");
| if (? != ?) {
0x000871f4 bne.w 0x8756e | goto label_7;
| }
0x000871f8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000871fc mov r4, r0 | r4 = r0;
0x000871fe ldr r5, [r0, 0x24] | r5 = *((r0 + 0x24));
0x00087200 sub sp, 0x1c |
0x00087202 ldr.w r8, [r0] | r8 = *(r0);
0x00087206 cmp r5, 0 |
| if (r5 != 0) {
0x00087208 bne.w 0x8755c | goto label_8;
| }
0x0008720c ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x0008720e cmp r6, 0 |
| if (r6 == 0) {
0x00087210 beq.w 0x87570 | goto label_9;
| }
| label_1:
0x00087214 ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
0x00087218 cmp r3, 0 |
| if (r3 == 0) {
0x0008721a beq 0x872ae | goto label_10;
| }
0x0008721c ldr.w sb, [r4, 0x84] | sb = *((r4 + 0x84));
0x00087220 ldr.w r3, [sb, 0x60] | r3 = *((sb + 0x60));
0x00087224 cmp r3, 0 |
| if (r3 == 0) {
0x00087226 beq 0x872ae | goto label_10;
| }
0x00087228 movs r7, 0 | r7 = 0;
0x0008722a movs r1, 0x53 | r1 = 0x53;
0x0008722c mov r0, r6 | r0 = r6;
0x0008722e bl 0x429a8 | fcn_000429a8 (r0, r1);
0x00087232 ldr.w r2, [sb, 0x5c] | r2 = *((sb + 0x5c));
0x00087236 mov r3, r7 | r3 = r7;
0x00087238 movs r1, 0x23 | r1 = 0x23;
0x0008723a mov r0, r6 | r0 = r6;
0x0008723c str r7, [sp] | *(sp) = r7;
0x0008723e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00087242 ldrd r3, fp, [sb, 0x60] | __asm ("ldrd r3, fp, [sb, 0x60]");
0x00087246 mov sl, r0 | sl = r0;
0x00087248 cmp r3, r7 |
| if (r3 <= r7) {
0x0008724a ble 0x8726a | goto label_11;
| }
| do {
0x0008724c add.w r3, r7, fp | r3 = r7 + fp;
0x00087250 ldr.w r2, [sb, 0x5c] | r2 = *((sb + 0x5c));
0x00087254 movs r1, 0x5e | r1 = 0x5e;
0x00087256 str r3, [sp] | *(sp) = r3;
0x00087258 mov r0, r6 | r0 = r6;
0x0008725a mov r3, r7 | r3 = r7;
0x0008725c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00087260 ldr.w r3, [sb, 0x60] | r3 = *((sb + 0x60));
0x00087264 adds r7, 1 | r7++;
0x00087266 cmp r3, r7 |
0x00087268 bgt 0x8724c |
| } while (r3 > r7);
| label_11:
0x0008726a mov r3, r7 | r3 = r7;
0x0008726c movs r7, 0 | r7 = 0;
0x0008726e mov r2, fp | r2 = fp;
0x00087270 movs r1, 0x54 | r1 = 0x54;
0x00087272 mov r0, r6 | r0 = r6;
0x00087274 str r7, [sp] | *(sp) = r7;
0x00087276 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008727a ldr.w r2, [sb, 0x5c] | r2 = *((sb + 0x5c));
0x0008727e add.w r3, sl, 1 | r3 = sl + 1;
0x00087282 movs r1, 0x26 | r1 = 0x26;
0x00087284 mov r0, r6 | r0 = r6;
0x00087286 str r7, [sp] | *(sp) = r7;
0x00087288 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008728c ldr r3, [r6] | r3 = *(r6);
0x0008728e cmp sl, r7 |
0x00087290 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x00087292 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00087296 it lt |
| if (sl >= r7) {
0x00087298 addlt sl, r2, -1 | sl = r2 + -1;
| }
0x0008729c cmp r3, 0 |
| if (r3 != 0) {
0x0008729e bne.w 0x875a8 | goto label_12;
| }
0x000872a2 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x000872a4 add.w sl, sl, sl, lsl 1 | sl += (sl << 1);
0x000872a8 add.w r3, r3, sl, lsl 3 | r3 += (sl << 3);
| label_4:
0x000872ac str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_10:
0x000872ae movs r3, 0 | r3 = 0;
0x000872b0 movs r1, 0x46 | r1 = 0x46;
0x000872b2 mov r2, r3 | r2 = r3;
0x000872b4 str r3, [sp] | *(sp) = r3;
0x000872b6 mov r0, r6 | r0 = r6;
0x000872b8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000872bc ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000872c0 cmp r3, 0 |
| if (r3 != 0) {
0x000872c2 bne.w 0x8754e | goto label_2;
| }
0x000872c6 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
| if (r2 == 0) {
0x000872c8 cbnz r2, 0x872d2 |
0x000872ca ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x000872cc cmp r3, 0 |
| if (r3 == 0) {
0x000872ce beq.w 0x8754e | goto label_2;
| }
| }
0x000872d2 ldr r3, [r6] | r3 = *(r6);
0x000872d4 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x000872d6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000872da cmp r3, 0 |
| if (r3 != 0) {
0x000872dc bne.w 0x875a0 | goto label_13;
| }
0x000872e0 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
| label_3:
0x000872e2 ldr.w sl, [pc, 0x2ec] |
0x000872e6 movs r7, 0 | r7 = 0;
0x000872e8 mov.w sb, 1 | sb = 1;
0x000872ec str r1, [r3, 8] | *((r3 + 8)) = r1;
0x000872ee add sl, pc | sl = 0x10e8c4;
0x000872f0 b 0x872f4 |
| while (r3 > r7) {
0x000872f2 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x000872f4 lsl.w r3, sb, r7 | r3 = sb << r7;
0x000872f8 tst r3, r2 |
| if ((r3 & r2) != 0) {
0x000872fa beq 0x8737a |
0x000872fc ldr.w r2, [r6, 0x98] | r2 = *((r6 + 0x98));
0x00087300 cmp r7, 1 |
0x00087302 lsl.w r1, r7, 4 | r1 = r7 << 4;
0x00087306 orr.w r2, r2, r3 | r2 |= r3;
0x0008730a str.w r2, [r6, 0x98] | __asm ("str.w r2, [r6, 0x98]");
| if (r7 != 1) {
0x0008730e beq 0x87326 |
0x00087310 ldr r2, [r6] | r2 = *(r6);
0x00087312 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00087314 add r2, r1 | r2 += r1;
0x00087316 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00087318 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
| if (r2 == 0) {
0x0008731a cbz r2, 0x87326 | goto label_14;
| }
0x0008731c ldr.w r2, [r6, 0x9c] | r2 = *((r6 + 0x9c));
0x00087320 orrs r2, r3 | r2 |= r3;
0x00087322 str.w r2, [r6, 0x9c] | __asm ("str.w r2, [r6, 0x9c]");
| }
| label_14:
0x00087326 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0008732a mov r0, r6 | r0 = r6;
0x0008732c add r2, r1 | r2 += r1;
0x0008732e ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x00087330 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00087332 tst r3, r1 |
0x00087334 mov.w r1, 2 | r1 = 2;
0x00087338 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008733a str r3, [sp, 4] | var_4h = r3;
0x0008733c ldr r3, [r2] | r3 = *(r2);
0x0008733e mov r2, r7 | r2 = r7;
0x00087340 str r3, [sp] | *(sp) = r3;
0x00087342 ite ne |
| if ((r3 & r1) == 0) {
0x00087344 movne r3, 1 | r3 = 1;
| }
| if ((r3 & r1) != 0) {
0x00087346 moveq r3, 0 | r3 = 0;
| }
0x00087348 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008734c ldrb.w r3, [r8, 0xb1] | r3 = *((r8 + 0xb1));
| if (r3 == 0) {
0x00087350 cbnz r3, 0x87366 |
0x00087352 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x00087354 cmp r3, 0 |
0x00087356 itttt gt |
| if (r3 <= 0) {
0x00087358 ldrgt r2, [r6, 0x68] | r2 = *((r6 + 0x68));
| }
| if (r3 <= 0) {
0x0008735a addgt r3, r3, r3, lsl 1 | r3 += (r3 << 1);
| }
| if (r3 <= 0) {
0x0008735e addgt r2, r2, r3, lsl 3 | r2 += (r3 << 3);
| }
| if (r3 <= 0) {
0x00087362 strh sb, [r2, -0x16] | *((r2 - 0x16)) = sb;
| goto label_15;
| }
| }
| label_15:
0x00087366 ldrb r2, [r4, 0x15] | r2 = *((r4 + 0x15));
| if (r2 != 0) {
0x00087368 cbz r2, 0x87372 |
0x0008736a ldrb r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0008736c subs r2, 0 |
0x0008736e it ne |
| if (r2 != 0) {
0x00087370 movne r2, 1 | r2 = 1;
| goto label_16;
| }
| }
| label_16:
0x00087372 mov r1, sl | r1 = sl;
0x00087374 mov r0, r6 | r0 = r6;
0x00087376 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
| }
0x0008737a ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0008737e adds r7, 1 | r7++;
0x00087380 cmp r3, r7 |
0x00087382 bgt 0x872f2 |
| }
0x00087384 ldr.w r3, [r4, 0xd4] | r3 = *((r4 + 0xd4));
0x00087388 cmp r3, 0 |
0x0008738a itt gt |
| if (r3 <= 0) {
0x0008738c movgt sb, 0 | sb = 0;
| }
| if (r3 > 0) {
0x00087390 mov sl, sb | sl = sb;
| }
| if (r3 <= 0) {
0x00087392 ble 0x873d6 | goto label_17;
| }
| label_0:
0x00087394 ldr.w r3, [r4, 0x104] | r3 = *((r4 + 0x104));
0x00087398 ldr.w r3, [r3, sb, lsl 2] | offset_0 = sb << 2;
| r3 = *((r3 + offset_0));
0x0008739c ldr r7, [r3, 0x34] | r7 = *((r3 + 0x34));
| if (r7 != 0) {
0x0008739e cbnz r7, 0x873a6 | goto label_18;
| }
0x000873a0 b 0x873ac | goto label_19;
| do {
0x000873a2 ldr r7, [r7, 0x18] | r7 = *((r7 + 0x18));
| if (r7 == 0) {
0x000873a4 cbz r7, 0x873ac | goto label_19;
| }
| label_18:
0x000873a6 ldr r3, [r7] | r3 = *(r7);
0x000873a8 cmp r8, r3 |
0x000873aa bne 0x873a2 |
| } while (r8 != r3);
| label_19:
0x000873ac movs r3, 0 | r3 = 0;
0x000873ae movs r1, 0xaa | r1 = 0xaa;
0x000873b0 mov r2, r3 | r2 = r3;
0x000873b2 mov r0, r6 | r0 = r6;
0x000873b4 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000873b8 add.w sb, sb, 1 | sb++;
0x000873bc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000873c0 mvn r3, 0xa | r3 = ~0xa;
0x000873c4 mov r1, r0 | r1 = r0;
0x000873c6 mov r2, r7 | r2 = r7;
0x000873c8 mov r0, r6 | r0 = r6;
0x000873ca bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x000873ce ldr.w r3, [r4, 0xd4] | r3 = *((r4 + 0xd4));
0x000873d2 cmp r3, sb |
| if (r3 > sb) {
0x000873d4 bgt 0x87394 | goto label_0;
| }
| label_17:
0x000873d6 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x000873d8 movs r3, 0 | r3 = 0;
0x000873da ldr r7, [r4, 8] | r7 = *((r4 + 8));
0x000873dc str.w r3, [r4, 0xd4] | __asm ("str.w r3, [r4, 0xd4]");
0x000873e0 cmp r2, r3 |
0x000873e2 it gt |
| if (r2 <= r3) {
0x000873e4 movgt r8, r3 | r8 = r3;
| }
| if (r2 <= r3) {
0x000873e6 ble 0x87426 | goto label_20;
| }
| do {
0x000873e8 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x000873ea lsl.w r3, r8, 4 | r3 = r8 << 4;
0x000873ee movs r1, 0xa9 | r1 = 0xa9;
0x000873f0 mov r0, r7 | r0 = r7;
0x000873f2 add.w r8, r8, 1 | r8++;
0x000873f6 add.w ip, r2, r3 |
0x000873fa ldr r2, [r2, r3] | r2 = *((r2 + r3));
0x000873fc ldrb.w lr, [ip, 8] |
0x00087400 ldr.w sb, [ip, 0xc] | sb = *((ip + 0xc));
0x00087404 ldr.w r3, [ip, 4] | r3 = *((ip + 4));
0x00087408 str.w lr, [sp] | __asm ("str.w lr, [sp]");
0x0008740c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00087410 mov.w r3, -1 | r3 = -1;
0x00087414 mov r1, r0 | r1 = r0;
0x00087416 mov r2, sb | r2 = sb;
0x00087418 mov r0, r7 | r0 = r7;
0x0008741a bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0008741e ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00087420 cmp r8, r3 |
0x00087422 blt 0x873e8 |
| } while (r8 < r3);
0x00087424 ldr r7, [r4, 8] | r7 = *((r4 + 8));
| label_20:
0x00087426 ldr.w r8, [r4, 0x70] | r8 = *((r4 + 0x70));
0x0008742a ldr.w sl, [r4] | sl = *(r4);
0x0008742e cmp.w r8, 0 |
| if (r8 == 0) {
0x00087432 beq 0x874fe | goto label_21;
| }
0x00087434 ldr r3, [pc, 0x19c] |
0x00087436 mov.w fp, 0x70 |
0x0008743a strd r6, r5, [sp, 0x10] | __asm ("strd r6, r5, [var_10h]");
0x0008743e mov r6, r8 | r6 = r8;
0x00087440 mov r8, r4 | r8 = r4;
0x00087442 add r3, pc | r3 = 0x10ea1a;
0x00087444 addw r3, r3, 0xd78 | __asm ("addw r3, r3, 0xd78");
0x00087448 str r3, [sp, 0xc] | var_ch = r3;
0x0008744a b 0x87480 |
| while (r0 != 0) {
0x0008744c strd r5, r3, [r0, 8] | __asm ("strd r5, r3, [r0, 8]");
0x00087450 str.w r3, [r0, 0xb0] | __asm ("str.w r3, [r0, 0xb0]");
0x00087454 ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x00087458 str r4, [r0, 0x4c] | *((r0 + 0x4c)) = r4;
0x0008745a strh.w r1, [r0, 0x4a] | *((r0 + 0x4a)) = r1;
0x0008745e str r2, [r0, 0x68] | *((r0 + 0x68)) = r2;
0x00087460 str r5, [r0, 0x3c] | *((r0 + 0x3c)) = r5;
0x00087462 str r5, [r0, 0x54] | *((r0 + 0x54)) = r5;
0x00087464 str.w r5, [r0, 0x84] | __asm ("str.w r5, [r0, 0x84]");
0x00087468 str.w r5, [r0, 0x94] | __asm ("str.w r5, [r0, 0x94]");
0x0008746c str.w r5, [r0, 0xac] | __asm ("str.w r5, [r0, 0xac]");
0x00087470 str.w r5, [r0, 0xf8] | __asm ("str.w r5, [r0, 0xf8]");
| if (r3 == 0) {
0x00087474 cbnz r3, 0x8747a |
0x00087476 str.w ip, [r8, 0x28] | __asm ("str.w ip, [r8, 0x28]");
| }
0x0008747a ldr r6, [r6] | r6 = *(r6);
0x0008747c cmp r6, 0 |
| if (r6 == 0) {
0x0008747e beq 0x874f8 | goto label_22;
| }
0x00087480 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00087482 movs r1, 0 | r1 = 0;
0x00087484 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00087488 mov r0, r8 | r0 = r8;
0x0008748a ldr r5, [r6, 0xc] | r5 = *((r6 + 0xc));
0x0008748c add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00087490 subs r4, r5, 1 | r4 = r5 - 1;
0x00087492 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00087494 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x00087496 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008749a bl 0x4ef30 | fcn_0004ef30 (r0, r1, r2, r3, r4);
0x0008749e ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000874a0 movs r1, 0x75 | r1 = 0x75;
0x000874a2 mov r0, r7 | r0 = r7;
0x000874a4 ldr.w sb, [r3] | sb = *(r3);
0x000874a8 movs r3, 0 | r3 = 0;
0x000874aa mov r2, r3 | r2 = r3;
0x000874ac str r3, [sp] | *(sp) = r3;
0x000874ae mov r3, r4 | r3 = r4;
0x000874b0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000874b4 ldr r3, [r7] | r3 = *(r7);
0x000874b6 mov r2, sb | r2 = sb;
0x000874b8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000874bc cbnz r3, 0x874de |
0x000874be cmp r0, 0 |
0x000874c0 ldr r1, [r7, 0x68] | r1 = *((r7 + 0x68));
0x000874c2 it lt |
| if (r0 >= 0) {
0x000874c4 ldrlt r0, [r7, 0x6c] | r0 = *((r7 + 0x6c));
| }
0x000874c6 mov.w r3, 0 | r3 = 0;
0x000874ca it lt |
| if (r0 >= 0) {
0x000874cc addlt r0, r0, -1 | r0 += -1;
| }
0x000874d0 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000874d4 add.w r1, r1, r0, lsl 3 | r1 += (r0 << 3);
0x000874d8 mov r0, r7 | r0 = r7;
0x000874da bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
| }
0x000874de ldr r2, [sp, 0xc] | r2 = var_ch;
0x000874e0 movs r1, 0xc | r1 = 0xc;
0x000874e2 mov r0, r7 | r0 = r7;
0x000874e4 bl 0x41994 | fcn_00041994 (r0, r1, r2);
0x000874e8 mov.w ip, 1 |
0x000874ec adds r3, r5, 2 | r3 = r5 + 2;
0x000874ee movs r1, 0x10 | r1 = 0x10;
0x000874f0 add.w r2, r5, ip | r2 = r5 + ip;
0x000874f4 cmp r0, 0 |
0x000874f6 bne 0x8744c |
| }
| label_22:
0x000874f8 ldrd r6, r5, [sp, 0x10] | __asm ("ldrd r6, r5, [var_10h]");
0x000874fc mov r4, r8 | r4 = r8;
| label_21:
0x000874fe ldr.w r8, [r4, 0x44] | r8 = *((r4 + 0x44));
0x00087502 cmp.w r8, 0 |
| if (r8 == 0) {
0x00087506 beq 0x87536 | goto label_23;
| }
0x00087508 movs r3, 0 | r3 = 0;
0x0008750a strb r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
0x0008750c ldr.w r3, [r8] | r3 = *(r8);
0x00087510 cmp r3, 0 |
| if (r3 <= 0) {
0x00087512 ble 0x87536 | goto label_23;
| }
0x00087514 mov r7, r8 | r7 = r8;
| do {
0x00087516 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x00087518 adds r5, 1 | r5++;
0x0008751a cmp r2, 0 |
| if (r2 > 0) {
0x0008751c ble 0x8752e |
0x0008751e ldr r1, [r4, 8] | r1 = *((r4 + 8));
| if (r1 == 0) {
0x00087520 cbz r1, 0x8752e | goto label_24;
| }
0x00087522 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x00087524 mov r0, r4 | r0 = r4;
0x00087526 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x0008752a ldr.w r3, [r8] | r3 = *(r8);
| }
| label_24:
0x0008752e cmp r3, r5 |
0x00087530 add.w r7, r7, 0x10 | r7 += 0x10;
0x00087534 bgt 0x87516 |
| } while (r3 > r5);
| label_23:
0x00087536 ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
| if (r3 != 0) {
0x0008753a cbz r3, 0x87546 |
0x0008753c ldr.w r2, [r4, 0x84] | r2 = *((r4 + 0x84));
0x00087540 ldr r3, [r2, 0x60] | r3 = *((r2 + 0x60));
0x00087542 cmp r3, 0 |
| if (r3 != 0) {
0x00087544 bne 0x875b0 | goto label_25;
| }
| }
| label_5:
0x00087546 movs r1, 1 | r1 = 1;
0x00087548 mov r0, r6 | r0 = r6;
0x0008754a bl 0x42960 | fcn_00042960 (r0, r1, r2);
| label_2:
0x0008754e ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x00087550 cbz r3, 0x8758e | goto label_26;
| }
0x00087552 movs r3, 1 | r3 = 1;
0x00087554 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| do {
0x00087556 add sp, 0x1c |
0x00087558 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0008755c ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00087560 cmp r3, 0 |
0x00087562 beq 0x87556 |
| } while (r3 == 0);
0x00087564 movs r3, 7 | r3 = 7;
0x00087566 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00087568 add sp, 0x1c |
0x0008756a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0008756e bx lr | return;
| label_9:
0x00087570 ldrb.w r3, [r8, 0xb1] | r3 = *((r8 + 0xb1));
| if (r3 != 0) {
0x00087574 cbnz r3, 0x87596 | goto label_27;
| }
0x00087576 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x00087578 cbz r3, 0x875c0 | goto label_28;
| }
| label_6:
0x0008757a mov r0, r4 | r0 = r4;
0x0008757c bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x00087580 mov r6, r0 | r6 = r0;
0x00087582 cmp r0, 0 |
| if (r0 != 0) {
0x00087584 bne.w 0x87214 | goto label_1;
| }
0x00087588 movs r3, 1 | r3 = 1;
0x0008758a str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0008758c b 0x8754e | goto label_2;
| label_26:
0x0008758e mov r1, r4 | r1 = r4;
0x00087590 mov r0, r6 | r0 = r6;
0x00087592 bl 0x3f48c | fcn_0003f48c (r0, r1, r2, r3, r4);
| label_27:
0x00087596 movs r3, 0x65 | r3 = 0x65;
0x00087598 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0008759a add sp, 0x1c |
0x0008759c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x000875a0 ldr r3, [pc, 0x34] |
0x000875a2 add r3, pc | r3 = 0x10eb7e;
0x000875a4 adds r3, 4 | r3 += 4;
0x000875a6 b 0x872e2 | goto label_3;
| label_12:
0x000875a8 ldr r3, [pc, 0x30] |
0x000875aa add r3, pc | r3 = 0x10eb8a;
0x000875ac adds r3, 4 | r3 += 4;
0x000875ae b 0x872ac | goto label_4;
| label_25:
0x000875b0 movs r1, 0 | r1 = 0;
0x000875b2 ldr r2, [r2, 0x5c] | r2 = *((r2 + 0x5c));
0x000875b4 mov r0, r6 | r0 = r6;
0x000875b6 str r1, [sp] | *(sp) = r1;
0x000875b8 movs r1, 0x76 | r1 = 0x76;
0x000875ba bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000875be b 0x87546 | goto label_5;
| label_28:
0x000875c0 ldr.w r3, [r8, 0x50] | r3 = *((r8 + 0x50));
0x000875c4 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000875c6 itt pl |
| if (r3 < r3) {
0x000875c8 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000875ca strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x000875cc b 0x8757a | goto label_6;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8762c */
| #include <stdint.h>
|
; (fcn) fcn.0008762c () | void fcn_0008762c (arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008762c push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00087630 mov r5, r2 | r5 = r2;
0x00087632 ldr r2, [r0, 0x34] | r2 = *((r0 + 0x34));
0x00087634 sub sp, 0xc |
0x00087636 mov r4, r0 | r4 = r0;
0x00087638 mov r7, r1 | r7 = r1;
0x0008763a ldr.w sb, [r0, 8] | sb = *((r0 + 8));
0x0008763e mov r6, r3 | r6 = r3;
0x00087640 cmp r2, 0 |
0x00087642 it le |
| if (r2 > 0) {
0x00087644 movle r8, 0 | r8 = 0;
| }
| if (r2 > 0) {
0x00087648 ble 0x8765a |
0x0008764a str r3, [sp] | *(sp) = r3;
0x0008764c subs r2, 1 | r2--;
0x0008764e movs r3, 0 | r3 = 0;
0x00087650 movs r1, 0x12 | r1 = 0x12;
0x00087652 mov r0, sb | r0 = sb;
0x00087654 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x00087658 mov r8, r0 | r8 = r0;
| }
0x0008765a ldrh r3, [r5, 8] | r3 = *((r5 + 8));
0x0008765c cmp r3, 0 |
| if (r3 == 0) {
0x0008765e beq 0x8770a | goto label_2;
| }
0x00087660 ldrb.w r2, [r7, 0x2b] | r2 = *((r7 + 0x2b));
0x00087664 cmp r2, 0 |
| if (r2 != 0) {
0x00087666 bne 0x8770a | goto label_2;
| }
0x00087668 ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
| if (r1 != 0) {
0x0008766a cbz r1, 0x8767e |
0x0008766c ldr r0, [r1] | r0 = *(r1);
0x0008766e cmp r0, r3 |
0x00087670 it lt |
| if (r0 >= r3) {
0x00087672 movlt r1, r2 | r1 = r2;
| }
| if (r0 < r3) {
0x00087674 blt 0x8767e | goto label_1;
| }
0x00087676 add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0008767a ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| }
| label_1:
0x0008767e mov r0, r4 | r0 = r4;
0x00087680 mov r2, r6 | r2 = r6;
0x00087682 bl 0x875e0 | fcn_000875e0 (r0, r1, r2);
0x00087686 ldrb r3, [r5, 5] | r3 = *((r5 + 5));
0x00087688 cmp r3, 0x41 |
0x0008768a bhi 0x87698 |
| while (r3 != 0) {
0x0008768c cmp.w r8, 0 |
| if (r8 != 0) {
0x00087690 bne 0x876e2 | goto label_3;
| }
| label_0:
0x00087692 add sp, 0xc |
0x00087694 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x00087698 movs r3, 0 | r3 = 0;
0x0008769a mov r2, r6 | r2 = r6;
0x0008769c str r3, [sp] | *(sp) = r3;
0x0008769e movs r1, 0x60 | r1 = 0x60;
0x000876a0 movs r3, 1 | r3 = 1;
0x000876a2 mov r0, sb | r0 = sb;
0x000876a4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000876a8 ldr.w r3, [sb] | r3 = *(sb);
0x000876ac ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000876b0 cmp r3, 0 |
0x000876b2 bne 0x8768c |
| }
0x000876b4 cmp r0, 0 |
0x000876b6 ldr.w r1, [sb, 0x68] | r1 = *((sb + 0x68));
0x000876ba it lt |
| if (r0 >= 0) {
0x000876bc ldrlt r0, [sb, 0x6c] | r0 = *((sb + 0x6c));
| }
0x000876c0 add.w r2, r5, 5 | r2 = r5 + 5;
0x000876c4 mov.w r3, 1 | r3 = 1;
0x000876c8 it lt |
| if (r0 >= 0) {
0x000876ca addlt r0, r0, -1 | r0 += -1;
| }
0x000876ce add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000876d2 add.w r1, r1, r0, lsl 3 | r1 += (r0 << 3);
0x000876d6 mov r0, sb | r0 = sb;
0x000876d8 bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
0x000876dc cmp.w r8, 0 |
| if (r8 == 0) {
0x000876e0 beq 0x87692 | goto label_0;
| }
| label_3:
0x000876e2 ldr.w r3, [sb] | r3 = *(sb);
0x000876e6 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x000876ea ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000876ee it lt |
| if (r8 >= 0) {
0x000876f0 addlt r8, r2, -1 | r8 = r2 + -1;
| }
| if (r3 != 0) {
0x000876f4 cbnz r3, 0x8770e | goto label_4;
| }
0x000876f6 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x000876fa add.w r8, r8, r8, lsl 1 | r8 += (r8 << 1);
0x000876fe add.w r3, r3, r8, lsl 3 | r3 += (r8 << 3);
| do {
0x00087702 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00087704 add sp, 0xc |
0x00087706 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x0008770a movs r1, 0 | r1 = 0;
0x0008770c b 0x8767e | goto label_1;
| label_4:
0x0008770e ldr r3, [pc, 8] |
0x00087710 add r3, pc | r3 = 0x10ee2e;
0x00087712 adds r3, 4 | r3 += 4;
0x00087714 b 0x87702 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8771c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008771c () | void fcn_0008771c (int16_t arg_30h, arithmetic arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008771c push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00087720 sub sp, 0x14 |
0x00087722 ldr r5, [pc, 0x26c] |
0x00087724 ldr r4, [pc, 0x26c] | r4 = *(0x87994);
0x00087726 add r5, pc | r5 = 0x10f0bc;
0x00087728 ldr.w r8, [sp, 0x30] | r8 = *(arg_30h);
0x0008772c ldr r4, [r5, r4] |
0x0008772e ldr r4, [r4] | r4 = imp.atan;
0x00087730 str r4, [sp, 0xc] | var_ch = r4;
0x00087732 mov.w r4, 0 | r4 = 0;
0x00087736 cmp r1, 0 |
| if (r1 == 0) {
0x00087738 beq.w 0x87918 | goto label_5;
| }
0x0008773c cmp r3, 0 |
0x0008773e mov r5, r0 | r5 = r0;
0x00087740 mov r6, r2 | r6 = r2;
0x00087742 mov ip, r3 |
0x00087744 mov r4, r1 | r4 = r1;
| if (r3 >= 0) {
0x00087746 blt 0x87840 |
0x00087748 ldrsh.w r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x0008774c cmp r3, ip |
| if (r3 == ip) {
0x0008774e beq 0x87840 | goto label_6;
| }
0x00087750 ldrb.w r3, [r1, 0x2b] | r3 = *((r1 + 0x2b));
0x00087754 add.w r7, ip, ip, lsl 1 | r7 = ip + (ip << 1);
0x00087758 lsls r7, r7, 2 | r7 <<= 2;
0x0008775a cmp r3, 1 |
| if (r3 == 1) {
0x0008775c beq.w 0x87938 | goto label_7;
| }
0x00087760 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00087762 add.w sb, r2, r7 | sb = r2 + r7;
0x00087766 ldrh.w r3, [sb, 0xa] | r3 = *((sb + 0xa));
0x0008776a lsls r0, r3, 0x1a | r0 = r3 << 0x1a;
| if (r0 < r3) {
0x0008776c bmi.w 0x878ec | goto label_8;
| }
0x00087770 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00087772 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x00087774 bmi 0x87876 | goto label_9;
| }
0x00087776 eor r3, r3, 0x20 | r3 ^= 0x20;
0x0008777a ubfx r2, ip, 0xf, 1 | r2 = (ip >> 0xf) & ((1 << 1) - 1);
0x0008777e ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x00087782 sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x00087786 orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x00087788 bne 0x87794 |
0x0008778a mov r1, ip | r1 = ip;
0x0008778c mov r0, r4 | r0 = r4;
0x0008778e bl 0x277d4 | r0 = fcn_000277d4 (r0, r1);
0x00087792 mov ip, r0 |
| }
| label_0:
0x00087794 movs r1, 0x5e | r1 = 0x5e;
| label_2:
0x00087796 mov r3, ip | r3 = ip;
0x00087798 mov r2, r6 | r2 = r6;
0x0008779a mov r0, r5 | r0 = r5;
0x0008779c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000877a0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000877a4 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x000877a8 cmp r3, 2 |
| if (r3 == 2) {
0x000877aa beq.w 0x878ba | goto label_10;
| }
0x000877ae movs r3, 0 | r3 = 0;
0x000877b0 ldr r1, [pc, 0x1e4] |
0x000877b2 str r3, [sp, 8] | var_8h = r3;
0x000877b4 mov r0, r5 | r0 = r5;
0x000877b6 ldr r3, [r5] | r3 = *(r5);
0x000877b8 add r1, pc | r1 = 0x10f154;
0x000877ba ldrb.w sb, [r3, 0x54] | sb = *((r3 + 0x54));
0x000877be ldrd r2, r3, [r4] | __asm ("ldrd r2, r3, [r4]");
0x000877c2 adds r6, r3, r7 | r6 = r3 + r7;
0x000877c4 ldr r3, [r3, r7] | r3 = *((r3 + r7));
0x000877c6 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x000877ca ldrh r2, [r6, 8] | r2 = *((r6 + 8));
| if (r2 != 0) {
0x000877cc cbz r2, 0x877f6 |
0x000877ce ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
| if (r3 != 0) {
0x000877d2 cbnz r3, 0x877f6 | goto label_11;
| }
0x000877d4 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 == 0) {
0x000877d6 cbz r3, 0x877f6 | goto label_11;
| }
0x000877d8 ldr r1, [r3] | r1 = *(r3);
0x000877da cmp r1, r2 |
| if (r1 < r2) {
0x000877dc blt 0x877f6 | goto label_11;
| }
0x000877de add.w r2, r3, r2, lsl 4 | r2 = r3 + (r2 << 4);
0x000877e2 ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000877e4 ldr r1, [r2, -0x8] | r1 = *((r2 - 0x8));
| if (r1 == 0) {
0x000877e8 cbz r1, 0x877f6 | goto label_11;
| }
0x000877ea add r0, sp, 8 | r0 += var_8h;
0x000877ec mov r2, sb | r2 = sb;
0x000877ee str r0, [sp] | *(sp) = r0;
0x000877f0 ldr r0, [r5] | r0 = *(r5);
0x000877f2 bl 0x4ab20 | fcn_0004ab20 (r0, r1, r2, r3, r4, r5);
| }
| label_11:
0x000877f6 ldr r1, [sp, 8] | r1 = var_8h;
| if (r1 != 0) {
0x000877f8 cbz r1, 0x8781a |
0x000877fa ldr r0, [r5] | r0 = *(r5);
0x000877fc ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x00087800 cmp r3, 0 |
| if (r3 != 0) {
0x00087802 bne.w 0x87976 | goto label_12;
| }
0x00087806 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00087808 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x0008780a add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008780e lsls r3, r3, 3 | r3 <<= 3;
0x00087810 subs r3, 0x18 | r3 -= 0x18;
0x00087812 add r3, r2 | r3 += r2;
0x00087814 movs r2, 0xf6 | r2 = 0xf6;
0x00087816 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x00087818 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
| label_4:
0x0008781a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008781c add r3, r7 | r3 += r7;
0x0008781e ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00087820 cmp r3, 0x45 |
| if (r3 == 0x45) {
0x00087822 beq.w 0x8796a | goto label_13;
| }
| label_1:
0x00087826 ldr r2, [pc, 0x174] |
0x00087828 ldr r3, [pc, 0x168] | r3 = *(0x87994);
0x0008782a add r2, pc | r2 = 0x10f1cc;
0x0008782c ldr r3, [r2, r3] | r3 = imp.atan;
0x0008782e ldr r2, [r3] | r2 = imp.atan;
0x00087830 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00087832 eors r2, r3 | r2 ^= r3;
0x00087834 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00087838 bne 0x87934 | goto label_14;
| }
0x0008783a add sp, 0x14 |
0x0008783c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
| label_6:
0x00087840 movs r1, 0 | r1 = 0;
0x00087842 mov r3, r8 | r3 = r8;
0x00087844 mov r2, r6 | r2 = r6;
0x00087846 str r1, [sp] | *(sp) = r1;
0x00087848 mov r0, r5 | r0 = r5;
0x0008784a movs r1, 0x87 | r1 = 0x87;
0x0008784c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00087850 ldr r2, [pc, 0x14c] |
0x00087852 ldr r3, [pc, 0x140] | r3 = *(0x87996);
0x00087854 add r2, pc | r2 = 0x10f1f8;
0x00087856 ldr r3, [r2, r3] | r3 = imp.atan;
0x00087858 ldr r2, [r3] | r2 = imp.atan;
0x0008785a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008785c eors r2, r3 | r2 ^= r3;
0x0008785e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00087862 bne 0x87934 | goto label_14;
| }
0x00087864 ldr r1, [pc, 0x13c] |
0x00087866 mov r0, r5 | r0 = r5;
0x00087868 ldr r2, [r4] | r2 = *(r4);
0x0008786a add r1, pc | r1 = 0x10f212;
0x0008786c add sp, 0x14 |
0x0008786e pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00087872 b.w 0x4eeac | void (*0x4eeac)() ();
| label_9:
0x00087876 ldr r3, [r1, 8] | r3 = *((r1 + 8));
| if (r3 != 0) {
0x00087878 cbnz r3, 0x87884 | goto label_15;
| }
0x0008787a b 0x8798a | goto label_16;
| do {
0x0008787c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008787e cmp r3, 0 |
| if (r3 == 0) {
0x00087880 beq.w 0x8798a | goto label_16;
| }
0x00087882 strh r3, [r0, 4] | *((r0 + 4)) = r3;
| label_15:
0x00087884 ldrb.w r1, [r3, 0x37] | r1 = *((r3 + 0x37));
0x00087888 and r1, r1, 3 | r1 &= 3;
0x0008788c cmp r1, 2 |
0x0008788e bne 0x8787c |
| } while (r1 != 2);
0x00087890 ldrh r0, [r3, 0x34] | r0 = *((r3 + 0x34));
0x00087892 sxth.w r1, ip | __asm ("sxth.w r1, ip");
0x00087896 cmp r0, 0 |
| if (r0 == 0) {
0x00087898 beq 0x87964 | goto label_17;
| }
0x0008789a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008789c mov.w ip, 0 |
0x000878a0 subs r3, 2 | r3 -= 2;
0x000878a2 b 0x878ac |
| while (r2 != r1) {
0x000878a4 add.w ip, ip, 1 |
0x000878a8 cmp ip, r0 |
| if (ip == r0) {
0x000878aa beq 0x87964 | goto label_17;
| }
0x000878ac ldrsh r2, [r3, 2]! | r2 = *((r3 += 2));
0x000878b0 cmp r2, r1 |
0x000878b2 bne 0x878a4 |
| }
0x000878b4 sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x000878b8 b 0x87794 | goto label_0;
| label_10:
0x000878ba ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000878bc add r3, r7 | r3 += r7;
0x000878be ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x000878c0 cmp r3, 0x45 |
| if (r3 != 0x45) {
0x000878c2 bne 0x87826 | goto label_1;
| }
| label_3:
0x000878c4 ldr r2, [pc, 0xe0] |
0x000878c6 ldr r3, [pc, 0xcc] | r3 = *(0x87996);
0x000878c8 add r2, pc | r2 = 0x10f274;
0x000878ca ldr r3, [r2, r3] | r3 = imp.atan;
0x000878cc ldr r2, [r3] | r2 = imp.atan;
0x000878ce ldr r3, [sp, 0xc] | r3 = var_ch;
0x000878d0 eors r2, r3 | r2 ^= r3;
0x000878d2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000878d6 bne 0x87934 | goto label_14;
| }
0x000878d8 mov r2, r8 | r2 = r8;
0x000878da movs r1, 0x57 | r1 = 0x57;
0x000878dc mov r0, r5 | r0 = r5;
0x000878de movs r3, 0 | r3 = 0;
0x000878e0 str r3, [sp, 0x30] | *(arg_30h) = r3;
| do {
0x000878e2 add sp, 0x14 |
0x000878e4 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000878e8 b.w 0x41a7c | void (*0x41a7c)() ();
| label_8:
0x000878ec lsls r0, r3, 0x17 | r0 = r3 << 0x17;
0x000878ee ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
| if (r0 >= r3) {
0x000878f0 bpl 0x8793c | goto label_18;
| }
0x000878f2 ldr r1, [pc, 0xb8] |
0x000878f4 ldr r3, [pc, 0x9c] | r3 = *(0x87994);
0x000878f6 add r1, pc | r1 = 0x10f2a8;
0x000878f8 ldr r3, [r1, r3] | r3 = imp.atan;
0x000878fa ldr r1, [r3] | r1 = imp.atan;
0x000878fc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000878fe eors r1, r3 | r1 ^= r3;
0x00087900 mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x00087904 bne 0x87934 | goto label_14;
| }
0x00087906 ldr r1, [pc, 0xa8] |
0x00087908 mov r0, r5 | r0 = r5;
0x0008790a ldr r2, [r2, r7] | r2 = *((r2 + r7));
0x0008790c add r1, pc | r1 = 0x10f2c2;
0x0008790e add sp, 0x14 |
0x00087910 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00087914 b.w 0x37f78 | void (*0x37f78)() ();
| label_5:
0x00087918 ldr r4, [pc, 0x98] |
0x0008791a ldr r1, [pc, 0x78] | r1 = *(0x87996);
0x0008791c add r4, pc | r4 = 0x10f2d4;
0x0008791e ldr r1, [r4, r1] | r1 = imp.atan;
0x00087920 ldr r4, [r1] | r4 = imp.atan;
0x00087922 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00087924 eors r4, r1 | r4 ^= r1;
0x00087926 mov.w r1, 0 | r1 = 0;
0x0008792a itt eq |
| if (r4 != r1) {
0x0008792c moveq r1, 0x5e | r1 = 0x5e;
| }
| if (r4 != r1) {
0x0008792e streq r8, [sp, 0x30] | *(arg_30h) = r8;
| }
0x00087932 beq 0x878e2 |
| } while (r4 == r1);
| label_14:
0x00087934 blx 0x6430 | fcn_00006430 ();
| label_7:
0x00087938 movs r1, 0xaf | r1 = 0xaf;
0x0008793a b 0x87796 | goto label_2;
| label_18:
0x0008793c orr r4, r3, 0x100 | r4 = r3 | 0x100;
0x00087940 adds r6, 1 | r6++;
0x00087942 ldr r7, [r5, 0x34] | r7 = *((r5 + 0x34));
0x00087944 mov r3, r8 | r3 = r8;
0x00087946 strh.w r4, [sb, 0xa] | *((sb + 0xa)) = r4;
0x0008794a mov r2, sb | r2 = sb;
0x0008794c mov r0, r5 | r0 = r5;
0x0008794e str r6, [r5, 0x34] | *((r5 + 0x34)) = r6;
0x00087950 bl 0x8762c | fcn_0008762c (r0, r1, r2, r3);
0x00087954 ldrh.w r3, [sb, 0xa] | r3 = *((sb + 0xa));
0x00087958 str r7, [r5, 0x34] | *((r5 + 0x34)) = r7;
0x0008795a bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x0008795e strh.w r3, [sb, 0xa] | *((sb + 0xa)) = r3;
0x00087962 b 0x87826 | goto label_1;
| label_17:
0x00087964 mov.w ip, -1 |
0x00087968 b 0x87794 | goto label_0;
| label_13:
0x0008796a ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0008796e cmp r3, 1 |
| if (r3 == 1) {
0x00087970 beq.w 0x87826 | goto label_1;
| }
0x00087974 b 0x878c4 | goto label_3;
| label_12:
0x00087976 ldr.w r3, [r0, 0x210] | r3 = *((r0 + 0x210));
| if (r3 != 0) {
0x0008797a cbz r3, 0x87982 |
0x0008797c bl 0x32b70 | fcn_00032b70 (r0, r1);
0x00087980 b 0x8781a | goto label_4;
| }
0x00087982 mov r0, r1 | r0 = r1;
0x00087984 bl 0x32bd0 | fcn_00032bd0 (r0);
0x00087988 b 0x8781a | goto label_4;
| label_16:
0x0008798a movs r3, 0 | r3 = 0;
0x0008798c ldrh r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x0008798e udf 0xff | __asm ("udf 0xff");
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x879b8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x87fec */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00087fec () | void fcn_00087fec (int16_t arg_0h, arithmetic arg1, int16_t arg2, int16_t arg3) {
| arithmetic var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00087fec svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00087ff0 sub sp, 0x2c |
0x00087ff2 str r0, [sp] | *(sp) = r0;
0x00087ff4 mov r4, r0 | r4 = r0;
0x00087ff6 mov r5, r2 | r5 = r2;
0x00087ff8 mov r2, r1 | r2 = r1;
0x00087ffa ldr r0, [pc, 0x1b0] |
0x00087ffc ldr r3, [pc, 0x1b0] | r3 = *(0x881b0);
0x00087ffe str r1, [sp, 4] | var_4h = r1;
0x00088000 mov r1, r5 | r1 = r5;
0x00088002 add r0, pc | r0 = 0x1101b4;
0x00088004 ldr r3, [r0, r3] |
0x00088006 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00088008 ldr r3, [r3] | r3 = imp.atan;
0x0008800a str r3, [sp, 0x24] | var_24h = r3;
0x0008800c mov.w r3, 0 | r3 = 0;
0x00088010 bl 0x438fc | fcn_000438fc (r0, r1, r2);
0x00088014 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00088016 lsls r3, r3, 0x19 | r3 <<= 0x19;
| if (r3 < r3) {
0x00088018 bpl 0x88046 |
0x0008801a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0008801c ldr r1, [r3] | r1 = *(r3);
0x0008801e ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x00088020 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00088024 cmp r1, 0 |
| if (r1 != 0) {
0x00088026 bne.w 0x8816a | goto label_4;
| }
0x0008802a ldr r3, [r3, 0x68] | r3 = *((r3 + 0x68));
0x0008802c subs r2, 1 | r2--;
0x0008802e add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00088032 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x00088036 ldrb r2, [r3] | r2 = *(r3);
0x00088038 cmp r2, 0x60 |
| if (r2 == 0x60) {
0x0008803a beq.w 0x88178 | goto label_5;
| }
| label_2:
0x0008803e cmp r2, 0x5f |
0x00088040 itt eq |
| if (r2 != 0x5f) {
0x00088042 moveq r2, 1 | r2 = 1;
| }
| if (r2 == 0x5f) {
0x00088044 streq r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
| goto label_3;
| }
| }
| label_3:
0x00088046 ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x0008804a cmp r3, 0 |
| if (r3 <= 0) {
0x0008804c ble 0x8806c | goto label_6;
| }
0x0008804e ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00088050 movs r0, 0xc | r0 = 0xc;
0x00088052 smlabb r0, r3, r0, r2 | __asm ("smlabb r0, r3, r0, r2");
| do {
0x00088056 ldrh r1, [r2, 0xa] | r1 = *((r2 + 0xa));
0x00088058 adds r2, 0xc | r2 += 0xc;
0x0008805a tst.w r1, 0x60 |
0x0008805e itt ne |
| if ((r1 & 0x60) == 0) {
0x00088060 orrne r1, r1, 0x80 | r1 |= 0x80;
| }
| if ((r1 & 0x60) != 0) {
0x00088064 strh r1, [r2, -0x2] | *((r2 - 0x2)) = r1;
| }
0x00088068 cmp r0, r2 |
0x0008806a bne 0x88056 |
| } while (r0 != r2);
| label_6:
0x0008806c ldr r2, [pc, 0x144] |
0x0008806e mov.w r8, 0 | r8 = 0;
0x00088072 ldr r1, [sp] | r1 = *(sp);
0x00088074 str r5, [sp, 0x20] | var_20h = r5;
0x00088076 add r2, pc | r2 = 0x11022e;
0x00088078 strd r8, r8, [sp, 0x10] | __asm ("strd r8, r8, [var_10h]");
0x0008807c str r2, [sp, 0xc] | var_ch = r2;
0x0008807e ldr r2, [sp, 4] | r2 = var_4h;
0x00088080 rsbs r2, r2, 0 | r2 -= ;
0x00088082 str r2, [r1, 0x34] | *((r1 + 0x34)) = r2;
| label_0:
0x00088084 cmp r3, 0 |
| if (r3 <= 0) {
0x00088086 ble 0x88118 | goto label_7;
| }
0x00088088 movs r6, 0 | r6 = 0;
0x0008808a add.w sb, sp, 8 | sb += var_8h;
0x0008808e mov sl, r6 | sl = r6;
0x00088090 mov fp, r6 |
0x00088092 mov r7, r6 | r7 = r6;
| do {
0x00088094 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00088096 adds r4, r2, r6 | r4 = r2 + r6;
0x00088098 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x0008809a lsls r1, r3, 0x18 | r1 = r3 << 0x18;
| if (r1 < r3) {
0x0008809c bpl 0x880e8 |
0x0008809e orr r1, r3, 0x100 | r1 = r3 | 0x100;
0x000880a2 strh r1, [r4, 0xa] | *((r4 + 0xa)) = r1;
0x000880a4 strh.w r8, [sp, 0x1c] | var_1ch = r8;
0x000880a8 ldrh r2, [r4, 8] | r2 = *((r4 + 8));
0x000880aa cmp r2, 0 |
| if (r2 == 0) {
0x000880ac beq 0x88138 | goto label_8;
| }
0x000880ae ldrb.w r1, [r5, 0x2b] | r1 = *((r5 + 0x2b));
0x000880b2 cmp r1, 0 |
| if (r1 != 0) {
0x000880b4 bne 0x88138 | goto label_8;
| }
0x000880b6 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x000880b8 cmp r1, 0 |
| if (r1 == 0) {
0x000880ba beq 0x88138 | goto label_8;
| }
0x000880bc ldr r0, [r1] | r0 = *(r1);
0x000880be cmp r0, r2 |
| if (r0 < r2) {
0x000880c0 blt 0x88138 | goto label_8;
| }
0x000880c2 add.w r1, r1, r2, lsl 4 | r1 += (r2 << 4);
0x000880c6 ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
0x000880ca cmp r1, 0 |
| if (r1 == 0) {
0x000880cc beq 0x88138 | goto label_8;
| }
0x000880ce mov r0, sb | r0 = sb;
0x000880d0 bl 0x35b0c | fcn_00035b0c (r0, r1);
0x000880d4 ldrh.w r1, [sp, 0x1c] | r1 = var_1ch;
0x000880d8 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x000880da lsls r2, r1, 0x18 | r2 = r1 << 0x18;
0x000880dc bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x000880e0 it mi |
| if (r2 >= r1) {
0x000880e2 movmi fp, r4 |
| }
0x000880e4 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
| if (r2 >= r1) {
0x000880e6 bpl 0x8813e | goto label_9;
| }
| }
| label_1:
0x000880e8 ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x000880ec adds r7, 1 | r7++;
0x000880ee adds r6, 0xc | r6 += 0xc;
0x000880f0 cmp r3, r7 |
0x000880f2 bgt 0x88094 |
| } while (r3 > r7);
0x000880f4 cmp.w fp, 0 |
0x000880f8 ite eq |
| if (fp != 0) {
0x000880fa moveq r0, 0 | r0 = 0;
| }
| if (fp == 0) {
0x000880fc andne r0, sl, 1 | r0 = sl & 1;
| }
0x00088100 cmp r0, 0 |
| if (r0 != 0) {
0x00088102 bne 0x88084 | goto label_0;
| }
0x00088104 cmp.w fp, 0 |
| if (fp != 0) {
0x00088108 beq 0x88118 |
0x0008810a ldr r1, [pc, 0xac] |
0x0008810c ldr.w r2, [fp] | r2 = *(fp);
0x00088110 ldr r0, [sp] | r0 = *(sp);
0x00088112 add r1, pc | r1 = 0x1102d0;
0x00088114 bl 0x37f78 | fcn_00037f78 (r0, r1);
| }
| label_7:
0x00088118 ldr r2, [sp] | r2 = *(sp);
0x0008811a movs r3, 0 | r3 = 0;
0x0008811c str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0008811e ldr r2, [pc, 0x9c] |
0x00088120 ldr r3, [pc, 0x8c] | r3 = *(0x881b0);
0x00088122 add r2, pc | r2 = 0x1102e4;
0x00088124 ldr r3, [r2, r3] | r3 = imp.atan;
0x00088126 ldr r2, [r3] | r2 = imp.atan;
0x00088128 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008812a eors r2, r3 | r2 ^= r3;
0x0008812c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00088130 bne 0x881a8 | goto label_10;
| }
0x00088132 add sp, 0x2c |
0x00088134 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00088138 bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x0008813c strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
| label_9:
0x0008813e ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00088140 sxth r1, r7 | __asm ("sxth r1, r7");
0x00088142 lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 < r3) {
0x00088144 bpl 0x8814e |
0x00088146 mov r0, r5 | r0 = r5;
0x00088148 bl 0x277d4 | r0 = fcn_000277d4 (r0, r1);
0x0008814c mov r1, r0 | r1 = r0;
| }
0x0008814e ldr r3, [sp, 4] | r3 = var_4h;
0x00088150 mov r2, r4 | r2 = r4;
0x00088152 ldr r0, [sp] | r0 = *(sp);
0x00088154 mov.w sl, 1 | sl = 1;
0x00088158 adds r3, r1, r3 | r3 = r1 + r3;
0x0008815a mov r1, r5 | r1 = r5;
0x0008815c bl 0x8762c | fcn_0008762c (r0, r1, r2, r3);
0x0008815e invalid |
0x00088162 bic r3, r3, 0x80 | r3 = BIT_MASK (r3, 0x80);
0x00088166 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x00088168 b 0x880e8 | goto label_1;
| label_4:
0x0008816a ldr r3, [pc, 0x54] |
0x0008816c add r3, pc | r3 = 0x110332;
0x0008816e ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x00088170 adds r3, 4 | r3 += 4;
0x00088172 cmp r2, 0x60 |
| if (r2 != 0x60) {
0x00088174 bne.w 0x8803e | goto label_2;
| }
| label_5:
0x00088178 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x0008817a ldrb r3, [r0] | r3 = *(r0);
0x0008817c cmp r3, 0 |
| if (r3 == 0) {
0x0008817e beq.w 0x88046 | goto label_3;
| }
0x00088182 movs r1, 0 | r1 = 0;
0x00088184 mov r4, r0 | r4 = r0;
0x00088186 mov r2, r1 | r2 = r1;
0x00088188 movs r6, 0x40 | r6 = 0x40;
| do {
0x0008818a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0008818c add r3, r1 | r3 += r1;
0x0008818e ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x00088190 lsls r7, r3, 0x1a | r7 = r3 << 0x1a;
| if (r7 >= r3) {
0x00088192 bmi 0x8819c |
0x00088194 adds r2, 1 | r2++;
0x00088196 lsls r7, r3, 0x19 | r7 = r3 << 0x19;
0x00088198 it mi |
| if (r7 < r3) {
0x0008819a strbmi r6, [r4] | *(r4) = r6;
| goto label_11;
| }
| }
| label_11:
0x0008819c ldrb r3, [r0, r2] | r3 = *((r0 + r2));
0x0008819e adds r4, r0, r2 | r4 = r0 + r2;
0x000881a0 adds r1, 0xc | r1 += 0xc;
0x000881a2 cmp r3, 0 |
0x000881a4 bne 0x8818a |
| } while (r3 != 0);
0x000881a6 b 0x88046 | goto label_3;
| label_10:
0x000881a8 blx 0x6430 | fcn_00006430 ();
0x000881ac adds r6, r2, 6 | r6 = r2 + 6;
0x000881ae movs r6, r0 | r6 = r0;
0x000881b0 lsls r4, r6, 8 | r4 = r6 << 8;
0x000881b2 movs r0, r0 |
0x000881b4 adds r3, r0, r1 | r3 = r0 + r1;
0x000881b6 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x881c4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000881c4 () | void fcn_000881c4 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_28h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x000881c4 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x000881c8 lsr.w sl, r2, 0x1f | sl = r2 >> 0x1f;
0x000881cc ldr.w sb, [r0, 0x44] | sb = *((r0 + 0x44));
0x000881d0 sub sp, 8 |
0x000881d2 mov r8, r0 | r8 = r0;
0x000881d4 mov r7, r2 | r7 = r2;
0x000881d6 mov r6, r1 | r6 = r1;
0x000881d8 subs.w r3, sb, 0 | r3 = sb - 0;
0x000881dc it ne |
| if (r3 == sb) {
0x000881de movne r3, 1 | r3 = 1;
| }
0x000881e0 ands.w r3, r3, r2, lsr 31 | r3 &= (r2 >> 31);
| if (r3 == r3) {
0x000881e4 beq 0x881f0 | goto label_4;
| }
0x000881e6 mov r4, sb | r4 = sb;
0x000881e8 ldr r5, [r4], 8 | r5 = *(r4);
| r4 += 8;
0x000881ec cmp r5, 0 |
| if (r5 > 0) {
0x000881ee bgt 0x88278 | goto label_5;
| }
| do {
| label_4:
0x000881f0 ldr.w r0, [r8] | r0 = *(r8);
0x000881f4 cmp r6, 0 |
| if (r6 == 0) {
0x000881f6 beq 0x8828e | goto label_6;
| }
0x000881f8 movs r3, 0 | r3 = 0;
0x000881fa mov r1, r6 | r1 = r6;
0x000881fc mov r2, r3 | r2 = r3;
0x000881fe bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x00088202 mov r4, r0 | r4 = r0;
0x00088204 cmp r0, 0 |
| if (r0 == 0) {
0x00088206 beq 0x8828e | goto label_6;
| }
0x00088208 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0008820a lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 < r3) {
0x0008820c bmi 0x88292 | goto label_7;
| }
| label_2:
0x0008820e mov r2, r4 | r2 = r4;
0x00088210 mov r1, sb | r1 = sb;
0x00088212 mov r0, r8 | r0 = r8;
0x00088214 mov r5, r7 | r5 = r7;
0x00088216 bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
| if (r0 != 0) {
0x0008821a cbz r0, 0x88248 |
0x0008821c ldr r3, [r0] | r3 = *(r0);
0x0008821e cmp r7, 0 |
0x00088220 it lt |
| if (r7 >= 0) {
0x00088222 ldrlt r7, [r8, 0x2c] | r7 = *((r8 + 0x2c));
| }
0x00088226 add.w r2, r3, -1 | r2 = r3 + -1;
0x0008822a add.w r3, r0, r3, lsl 4 | r3 = r0 + (r3 << 4);
0x0008822e it lt |
| if (r7 >= 0) {
0x00088230 addlt r7, 1 | r7++;
| }
0x00088232 mov r5, r7 | r5 = r7;
0x00088234 ldrb r1, [r3, 1] | r1 = *((r3 + 1));
0x00088236 bfi r1, sl, 3, 1 | value_0 = BIT_MASK (3, 1);
| value_1 = sl & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x0008823a strb r1, [r3, 1] | *((r3 + 1)) = r1;
0x0008823c add.w r3, r0, r2, lsl 4 | r3 = r0 + (r2 << 4);
0x00088240 it lt |
| if (r7 >= 0) {
0x00088242 strlt r7, [r8, 0x2c] | *((r8 + 0x2c)) = r7;
| }
0x00088246 str r7, [r3, 0x14] | *((r3 + 0x14)) = r7;
| }
0x00088248 str.w r0, [r8, 0x44] | __asm ("str.w r0, [r8, 0x44]");
0x0008824c mov r0, r5 | r0 = r5;
0x0008824e add sp, 8 |
0x00088250 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x00088254 ldr r1, [r4] | r1 = *(r4);
0x00088256 mov.w r3, -1 | r3 = -1;
0x0008825a mov r2, r6 | r2 = r6;
0x0008825c cmp r6, 0 |
0x0008825e it ne |
| if (r6 != 0) {
0x00088260 cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x00088262 ite eq |
| if (r6 != 0) {
0x00088264 moveq r0, 1 | r0 = 1;
| }
| if (r6 == 0) {
0x00088266 movne r0, 0 | r0 = 0;
| }
| if (r6 == 0) {
0x00088268 beq 0x88280 | goto label_8;
| }
0x0008826a bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
| if (r0 == 0) {
0x0008826e cbz r0, 0x88284 | goto label_9;
| }
| label_0:
0x00088270 subs r5, 1 | r5--;
0x00088272 add.w r4, r4, 0x10 | r4 += 0x10;
0x00088276 beq 0x881f0 |
| } while (r5 == 1);
| label_5:
0x00088278 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0008827a lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
| if (r2 >= r3) {
0x0008827c bpl 0x88270 | goto label_0;
| }
0x0008827e b 0x88254 | goto label_1;
| label_8:
0x00088280 cmp r1, r6 |
| if (r1 != r6) {
0x00088282 bne 0x88270 | goto label_0;
| }
| label_9:
0x00088284 ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x00088286 mov r0, r5 | r0 = r5;
0x00088288 add sp, 8 |
0x0008828a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x0008828e movs r4, 0 | r4 = 0;
0x00088290 b 0x8820e | goto label_2;
| label_7:
0x00088292 ldr.w sb, [r8, 8] | sb = *((r8 + 8));
0x00088296 movs r5, 0 | r5 = 0;
0x00088298 mov r3, r5 | r3 = r5;
0x0008829a mov r2, r5 | r2 = r5;
0x0008829c movs r1, 0xe | r1 = 0xe;
0x0008829e str r5, [sp] | *(sp) = r5;
0x000882a0 mov r0, sb | r0 = sb;
0x000882a2 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x000882a6 mov r6, r0 | r6 = r0;
0x000882a8 ldr.w r0, [r8] | r0 = *(r8);
0x000882ac strb.w r5, [r8, 0x17] | *((r8 + 0x17)) = r5;
0x000882b0 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
| if (r3 != 0) {
0x000882b4 cbnz r3, 0x88312 | goto label_10;
| }
0x000882b6 cmp r7, r5 |
0x000882b8 ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x000882bc itett lt |
| if (r7 >= r5) {
0x000882be ldrlt r5, [r8, 0x2c] | r5 = *((r8 + 0x2c));
| }
| if (r7 >= r5) {
0x000882c2 movlt r5, r7 | r5 = r7;
| }
| if (r7 >= r5) {
0x000882c4 addlt r5, 1 | r5++;
| }
| if (r7 < r5) {
0x000882c6 str.w r5, [r8, 0x2c] | __asm ("str.w r5, [r8, 0x2c]");
| }
| if (r3 == 0) {
0x000882ca cbz r3, 0x882da | goto label_11;
| }
0x000882cc mov r0, r8 | r0 = r8;
0x000882ce mov r2, r5 | r2 = r5;
0x000882d0 mov r1, r4 | r1 = r4;
0x000882d2 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x000882d6 ldr.w r0, [r8] | r0 = *(r8);
| do {
| label_11:
0x000882da movs r3, 1 | r3 = 1;
0x000882dc mov r1, r4 | r1 = r4;
0x000882de strb.w r3, [r8, 0x17] | *((r8 + 0x17)) = r3;
0x000882e2 bl 0x30c30 | fcn_00030c30 (r0, r1);
0x000882e6 ldr.w r3, [sb] | r3 = *(sb);
0x000882ea cmp r6, 0 |
0x000882ec ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x000882f0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000882f4 it lt |
| if (r6 >= 0) {
0x000882f6 addlt r6, r2, -1 | r6 = r2 + -1;
| }
| if (r3 != 0) {
0x000882fa cbnz r3, 0x88316 | goto label_12;
| }
0x000882fc ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x00088300 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x00088304 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| label_3:
0x00088308 mov r0, r5 | r0 = r5;
0x0008830a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008830c add sp, 8 |
0x0008830e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_10:
0x00088312 mov r5, r7 | r5 = r7;
0x00088314 b 0x882da |
| } while (1);
| label_12:
0x00088316 ldr r3, [pc, 8] |
0x00088318 add r3, pc | r3 = 0x11063e;
0x0008831a adds r3, 4 | r3 += 4;
0x0008831c b 0x88308 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x883c8 */
| #include <stdint.h>
|
; (fcn) fcn.000883c8 () | void fcn_000883c8 (int16_t arg_1h, int16_t arg_7ch, arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h_2;
| int32_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000883c8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000883cc mov sb, r2 | sb = r2;
0x000883ce ldr r2, [pc, 0x204] |
0x000883d0 sub sp, 0x14 |
0x000883d2 ldr r3, [pc, 0x204] | r3 = *(0x885da);
0x000883d4 add r2, pc | r2 = 0x1109ae;
0x000883d6 ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x000883d8 ldr r3, [r2, r3] |
0x000883da ldr r3, [r3] | r3 = imp.atan;
0x000883dc str r3, [sp, 0xc] | var_ch = r3;
0x000883de mov.w r3, 0 | r3 = 0;
0x000883e2 cmp r6, 0 |
| if (r6 != 0) {
0x000883e4 bne 0x884bc | goto label_12;
| }
0x000883e6 ldr.w r8, [r1, 0x3c] | r8 = *((r1 + 0x3c));
0x000883ea mov r5, r1 | r5 = r1;
0x000883ec cmp.w r8, 0 |
| if (r8 == 0) {
0x000883f0 beq 0x884bc | goto label_12;
| }
0x000883f2 ldr r7, [r0, 0x2c] | r7 = *((r0 + 0x2c));
0x000883f4 mov r4, r0 | r4 = r0;
0x000883f6 ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x000883f8 adds r7, 1 | r7++;
0x000883fa str r7, [r0, 0x2c] | *((r0 + 0x2c)) = r7;
0x000883fc str r7, [r1, 8] | *((r1 + 8)) = r7;
0x000883fe cmp r6, 0 |
| if (r6 == 0) {
0x00088400 beq 0x884d6 | goto label_13;
| }
0x00088402 ldr.w sl, [r8, 0xc] | sl = *((r8 + 0xc));
0x00088406 add r1, sp, 8 | r1 += var_8h;
0x00088408 mov r0, sl | r0 = sl;
0x0008840a bl 0x23220 | r0 = fcn_00023220 (r0, r1);
0x0008840e cmp r0, 0 |
| if (r0 != 0) {
0x00088410 bne 0x884f4 | goto label_14;
| }
| do {
0x00088412 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 != 0) {
0x00088414 cbz r3, 0x88420 |
0x00088416 mov r1, sl | r1 = sl;
0x00088418 mov r2, r7 | r2 = r7;
0x0008841a mov r0, r4 | r0 = r4;
0x0008841c bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
0x00088420 mov.w sl, 0 | sl = 0;
0x00088424 mov r2, r7 | r2 = r7;
0x00088426 mov r3, sl | r3 = sl;
0x00088428 movs r1, 0xc | r1 = 0xc;
0x0008842a mov r0, r6 | r0 = r6;
0x0008842c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00088430 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088434 ldr r1, [pc, 0x1a4] |
0x00088436 mov r0, r6 | r0 = r6;
0x00088438 add r1, pc | r1 = 0x110a18;
0x0008843a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008843e mov r3, sb | r3 = sb;
0x00088440 mov r2, r7 | r2 = r7;
0x00088442 movs r1, 0x10 | r1 = 0x10;
0x00088444 mov r0, r6 | r0 = r6;
0x00088446 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0008844a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_0:
0x0008844e ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
| if (r1 != 0) {
0x00088452 cbz r1, 0x884bc |
0x00088454 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00088456 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00088458 add.w r8, r3, 1 | r8 = r3 + 1;
0x0008845c str.w r8, [r5, 0xc] | __asm ("str.w r8, [r5, 0xc]");
0x00088460 adds r5, r3, 2 | r5 = r3 + 2;
0x00088462 str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
| if (r2 != 0) {
0x00088464 cbz r2, 0x8846e |
0x00088466 mov r0, r4 | r0 = r4;
0x00088468 mov r2, r8 | r2 = r8;
0x0008846a bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x0008846c invalid |
| }
0x0008846e movs r3, 0 | r3 = 0;
0x00088470 mov r2, r8 | r2 = r8;
0x00088472 str r3, [sp] | *(sp) = r3;
0x00088474 movs r1, 0xc | r1 = 0xc;
0x00088476 mov r0, r6 | r0 = r6;
0x00088478 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008847c ldr r1, [pc, 0x160] |
0x0008847e mov r0, r6 | r0 = r6;
0x00088480 add r1, pc | r1 = 0x110a64;
0x00088482 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00088486 mov r3, r5 | r3 = r5;
0x00088488 mov r2, r7 | r2 = r7;
0x0008848a movs r1, 0xa0 | r1 = 0xa0;
0x0008848c mov r0, r6 | r0 = r6;
0x0008848e str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00088492 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088496 ldr r2, [pc, 0x14c] |
0x00088498 ldr r3, [pc, 0x13c] | r3 = *(0x885d8);
0x0008849a add r2, pc | r2 = 0x110a84;
0x0008849c ldr r3, [r2, r3] | r3 = imp.atan;
0x0008849e ldr r2, [r3] | r2 = imp.atan;
0x000884a0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000884a2 eors r2, r3 | r2 ^= r3;
0x000884a4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000884a8 bne.w 0x885d0 | goto label_15;
| }
0x000884ac ldr r1, [pc, 0x138] |
0x000884ae mov r0, r6 | r0 = r6;
0x000884b0 add r1, pc | r1 = 0x110a9c;
0x000884b2 add sp, 0x14 |
0x000884b4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000884b8 b.w 0x4eeac | void (*0x4eeac)() ();
| }
| label_12:
0x000884bc ldr r2, [pc, 0x12c] |
0x000884be ldr r3, [pc, 0x118] | r3 = *(0x885da);
0x000884c0 add r2, pc | r2 = 0x110ab0;
0x000884c2 ldr r3, [r2, r3] | r3 = imp.atan;
0x000884c4 ldr r2, [r3] | r2 = imp.atan;
0x000884c6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000884c8 eors r2, r3 | r2 ^= r3;
0x000884ca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000884ce bne 0x885d0 | goto label_15;
| }
0x000884d0 add sp, 0x14 |
0x000884d2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x000884d6 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x000884d8 cmp r3, 0 |
| if (r3 == 0) {
0x000884da beq 0x8857c | goto label_16;
| }
| label_1:
0x000884dc mov r0, r4 | r0 = r4;
0x000884de bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x000884e2 ldr.w sl, [r8, 0xc] | sl = *((r8 + 0xc));
0x000884e6 mov r6, r0 | r6 = r0;
0x000884e8 add r1, sp, 8 | r1 += var_8h;
0x000884ea mov r0, sl | r0 = sl;
0x000884ec bl 0x23220 | r0 = fcn_00023220 (r0, r1);
0x000884f0 cmp r0, 0 |
0x000884f2 beq 0x88412 |
| } while (r0 == 0);
| label_14:
0x000884f4 ldr.w fp, [sp, 8] | fp = var_8h;
0x000884f8 mov.w sl, 0 | sl = 0;
0x000884fc movs r1, 0x47 | r1 = 0x47;
0x000884fe mov r3, r7 | r3 = r7;
0x00088500 mov r0, r6 | r0 = r6;
0x00088502 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00088506 mov r2, fp | r2 = fp;
0x00088508 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008850c ldr r1, [pc, 0xe0] |
0x0008850e mov r0, r6 | r0 = r6;
0x00088510 add r1, pc | r1 = 0x110b04;
0x00088512 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x00088516 cmp fp, sl |
| if (fp == sl) {
0x00088518 beq 0x8858a | goto label_17;
| }
| if (fp < sl) {
0x0008851a blt 0x8844e | goto label_0;
| }
0x0008851c cmp.w fp, 7 |
0x00088520 ldrsh.w r2, [r5, 2] | r2 = *((r5 + 2));
0x00088524 asr.w r0, fp, 0x1f | r0 = fp >> 0x1f;
| if (fp > 7) {
0x00088528 bgt 0x88594 | goto label_18;
| }
0x0008852a add.w r3, fp, -1 | r3 = fp + -1;
0x0008852e orrs r3, r0 | r3 |= r0;
| if (r3 != r0) {
0x00088530 beq 0x88568 |
0x00088532 adds.w r3, fp, fp | r3 = fp + fp;
0x00088536 adcs r0, r0 | __asm ("adcs r0, r0");
0x00088538 cmp r3, 8 |
0x0008853a sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
0x0008853e ite lo |
| if (r3 >= 8) {
0x00088540 movlo r1, 0x14 | r1 = 0x14;
| }
| if (r3 < 8) {
0x00088542 movhs r1, 0x1e | r1 = 0x1e;
| }
0x00088544 sub.w sl, r1, 0xa | sl = r1 - 0xa;
0x00088548 it lo |
| if (r3 >= 8) {
0x0008854a lsllo r3, fp, 2 | r3 = fp << 2;
| }
0x0008854e uxth.w sl, sl | sl = (int16_t) sl;
| label_2:
0x00088552 ldr r1, [pc, 0xa0] |
0x00088554 and r3, r3, 7 | r3 &= 7;
0x00088558 add r1, pc | r1 = 0x110b52;
0x0008855a add.w r3, r1, r3, lsl 1 | r3 = r1 + (r3 << 1);
0x0008855e ldrh.w r3, [r3, 0x408] | r3 = *((r3 + 0x408));
0x00088562 add sl, r3 | sl += r3;
0x00088564 sxth.w sl, sl | __asm ("sxth.w sl, sl");
0x00088566 invalid |
| }
0x00088568 cmp r2, sl |
| if (r2 <= sl) {
0x0008856a ble.w 0x8844e | goto label_0;
| }
0x0008856e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00088570 strh.w sl, [r5, 2] | *((r5 + 2)) = sl;
0x00088574 orr r3, r3, 0x4000 | r3 |= 0x4000;
0x00088578 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0008857a b 0x8844e | goto label_0;
| label_16:
0x0008857c ldr r3, [r0] | r3 = *(r0);
0x0008857e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00088580 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00088582 itt pl |
| if (r3 < r3) {
| label_4:
0x00088584 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x00088586 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x00088588 b 0x884dc | goto label_1;
| label_17:
0x0008858a mov r1, sb | r1 = sb;
0x0008858c mov r0, r6 | r0 = r6;
0x0008858e bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x00088592 b 0x8844e | goto label_0;
| label_18:
0x00088594 clz ip, r0 |
| if (r0 == 0) {
0x00088598 cbnz r0, 0x885a2 |
0x0008859a clz r1, fp | r1 &= fp;
0x0008859e add.w ip, r1, 0x20 |
| }
0x000885a2 rsb.w r1, ip, 0x3c | r1 = 0x3c - ip;
0x000885a6 lsr.w r3, fp, r1 | r3 = fp >> r1;
0x000885aa add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x000885ae lsl.w sl, r1, 1 | sl = r1 << 1;
0x000885b2 sub.w r1, ip, 0x1c | r1 = ip - 0x1c;
0x000885b6 lsl.w r1, r0, r1 | r1 = r0 << r1;
0x000885ba add.w sl, sl, 0x1e | sl += 0x1e;
| label_3:
0x000885bc lsrs r6, r3, 8 | r6 = r3 >> 8;
0x000885be orrs r3, r1 | r3 |= r1;
0x000885c0 rsb.w r1, ip, 0x1c | r1 = 0x1c - ip;
0x000885c4 lsr.w r1, r0, r1 | r1 = r0 >> r1;
0x000885c8 uxth.w sl, sl | sl = (int16_t) sl;
0x000885cc orrs r3, r1 | r3 |= r1;
0x000885ce b 0x88552 | goto label_2;
| label_15:
0x000885d0 blx 0x6430 | r0 = fcn_00006430 ();
0x000885d4 adds r4, r0, r7 | r4 = r0 + r7;
0x000885d6 movs r6, r0 | r6 = r0;
0x000885d8 lsls r4, r6, 8 | r4 = r6 << 8;
0x000885da movs r0, r0 |
| if (r0 != r0) {
0x000885dc bne 0x88628 | void (*0x88628)() ();
| }
0x000885de movs r4, r0 | r4 = r0;
| if (r4 == r0) {
0x000885e0 beq 0x885bc | goto label_3;
| }
0x000885e2 movs r4, r0 | r4 = r0;
0x000885e4 adds r6, r7, r3 | r6 = r7 + r3;
0x000885e6 movs r6, r0 | r6 = r0;
| if (r6 == r0) {
0x000885e8 beq 0x88584 | goto label_4;
| }
0x000885ea movs r4, r0 | r4 = r0;
0x000885ec adds r0, r3, r3 | r0 = r3 + r3;
0x000885ee movs r6, r0 | r6 = r0;
| if (r6 != r0) {
0x000885f0 beq 0x8868c |
0x000885f2 movs r4, r0 | r4 = r0;
0x000885f4 ldr r1, [pc, 0x2d0] | r1 = *(0x888c8);
0x000885f6 movs r5, r0 | r5 = r0;
| }
0x0008868c ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0008868e str r1, [sp, 0xc] | var_ch = r1;
0x00088690 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00088692 ldr r3, [r3] | r3 = *(r3);
0x00088694 str r3, [sp, 0x7c] | *(arg_7ch) = r3;
0x00088696 mov.w r3, 0 | r3 = 0;
0x0008869a cmp r5, 0 |
| if (r5 == 0) {
0x0008869c beq 0x8876e | goto label_19;
| }
| label_8:
0x0008869e ldr r7, [r4, 0x24] | r7 = *((r4 + 0x24));
| if (r7 == 0) {
0x000886a0 cbnz r7, 0x886c2 |
0x000886a2 ldr r2, [sp, 0xc] | r2 = var_ch;
| if (r2 == 0) {
0x000886a4 cbz r2, 0x886e8 | goto label_20;
| }
0x000886a6 add r3, sp, 0xc | r3 += var_ch;
0x000886a8 mov r1, r2 | r1 = r2;
0x000886aa mov r0, r4 | r0 = r4;
0x000886ac bl 0x43f60 | r0 = fcn_00043f60 (r0, r1, r2, r3);
0x000886b0 subs r3, r0, 1 | r3 = r0 - 1;
0x000886b2 mov r8, r0 | r8 = r0;
0x000886b4 it ne |
| if (r3 == r0) {
0x000886b6 movne r3, 1 | r3 = 1;
| }
0x000886b8 cmp r0, 0 |
0x000886ba it lt |
| if (r0 >= 0) {
0x000886bc movlt r3, 0 | r3 = 0;
| }
0x000886be cmp r3, 0 |
| if (r3 != 0) {
0x000886c0 bne 0x8878a | goto label_21;
| }
| }
| label_5:
0x000886c2 cbnz r6, 0x886de |
| while (1) {
| label_6:
0x000886c4 ldr r2, [pc, 0xe8] |
0x000886c6 ldr r3, [pc, 0xe4] | r3 = *(0x887ae);
0x000886c8 add r2, pc | r2 = 0x110e7c;
0x000886ca ldr r3, [r2, r3] | r3 = imp.atan;
0x000886cc ldr r2, [r3] | r2 = imp.atan;
0x000886ce ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x000886d0 eors r2, r3 | r2 ^= r3;
0x000886d2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000886d6 bne 0x887a2 | goto label_22;
| }
0x000886d8 add sp, 0x84 |
0x000886da pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_7:
0x000886de ldr r0, [r4] | r0 = *(r4);
0x000886e0 mov r1, r6 | r1 = r6;
0x000886e2 bl 0x30c30 | fcn_00030c30 (r0, r1);
0x000886e6 b 0x886c4 |
| }
| label_20:
0x000886e8 mov r8, r7 | r8 = r7;
0x000886ea mov.w sb, 1 | sb = 1;
| label_10:
0x000886ee cmp r6, 0 |
| if (r6 == 0) {
0x000886f0 beq 0x88784 | goto label_23;
| }
0x000886f2 add r3, sp, 0x30 | r3 += var_30h;
0x000886f4 movs r1, 0 | r1 = 0;
0x000886f6 mov r0, r3 | r0 = r3;
0x000886f8 movs r2, 0x48 | r2 = 0x48;
0x000886fa strd r1, r1, [sp, 0x18] | __asm ("strd r1, r1, [var_18h]");
0x000886fe strd r1, r1, [sp, 0x20] | __asm ("strd r1, r1, [var_20h]");
0x00088702 str r1, [sp, 0x2c] | var_2ch = r1;
0x00088704 blx 0x62ec | fcn_000062ec ();
0x00088708 mov.w r3, 0x10000 | r3 = 0x10000;
0x0008870c str r0, [sp, 0x14] | var_14h_2 = r0;
0x0008870e mov r1, r6 | r1 = r6;
0x00088710 add r0, sp, 0x10 | r0 += var_10h;
0x00088712 str r4, [sp, 0x10] | var_10h = r4;
0x00088714 str r3, [sp, 0x28] | var_28h = r3;
0x00088716 bl 0x48a9c | r0 = fcn_00048a9c (r0, r1);
| if (r0 == 0) {
0x0008871a cbnz r0, 0x88730 |
0x0008871c ldr r7, [r4, 0x2c] | r7 = *((r4 + 0x2c));
0x0008871e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00088720 adds r7, 1 | r7++;
0x00088722 str r7, [r4, 0x2c] | *((r4 + 0x2c)) = r7;
| if (r3 == 0) {
0x00088724 cbz r3, 0x88730 | goto label_24;
| }
0x00088726 mov r2, r7 | r2 = r7;
0x00088728 mov r1, r6 | r1 = r6;
0x0008872a mov r0, r4 | r0 = r4;
0x0008872c bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
| label_24:
0x00088730 mov r3, r7 | r3 = r7;
0x00088732 movs r2, 0 | r2 = 0;
0x00088734 str r2, [sp] | *(sp) = r2;
| label_9:
0x00088736 mov r2, r8 | r2 = r8;
0x00088738 movs r1, 5 | r1 = 5;
0x0008873a mov r0, r5 | r0 = r5;
0x0008873c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088740 ldr.w r3, [r5, 0x98] | r3 = *((r5 + 0x98));
0x00088744 orr.w r3, sb, r3 | r3 = sb | r3;
0x00088748 str.w r3, [r5, 0x98] | __asm ("str.w r3, [r5, 0x98]");
0x0008874c ldr r3, [r5] | r3 = *(r5);
0x0008874e ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00088750 add.w r3, r3, r8, lsl 4 | r3 += (r8 << 4);
0x00088754 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00088756 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x00088758 cmp r3, 0 |
| if (r3 == 0) {
0x0008875a beq 0x886c2 | goto label_5;
| }
0x0008875c ldr.w r3, [r5, 0x9c] | r3 = *((r5 + 0x9c));
0x00088760 orr.w r3, r3, sb | r3 |= sb;
0x00088764 str.w r3, [r5, 0x9c] | __asm ("str.w r3, [r5, 0x9c]");
0x00088768 cmp r6, 0 |
| if (r6 == 0) {
0x0008876a beq 0x886c4 | goto label_6;
| }
0x0008876c b 0x886de | goto label_7;
| label_19:
0x0008876e ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x00088770 cbz r3, 0x88794 | goto label_25;
| }
| label_11:
0x00088772 mov r0, r4 | r0 = r4;
0x00088774 bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x00088778 mov r5, r0 | r5 = r0;
0x0008877a cmp r0, 0 |
| if (r0 != 0) {
0x0008877c bne 0x8869e | goto label_8;
| }
0x0008877e cmp r6, 0 |
| if (r6 == 0) {
0x00088780 beq 0x886c4 | goto label_6;
| }
0x00088782 b 0x886de | goto label_7;
| label_23:
0x00088784 mov r3, r6 | r3 = r6;
0x00088786 str r6, [sp] | *(sp) = r6;
0x00088788 b 0x88736 | goto label_9;
| label_21:
0x0008878a mov.w sb, 1 | sb = 1;
0x0008878e lsl.w sb, sb, r0 | sb <<= r0;
0x00088792 b 0x886ee | goto label_10;
| label_25:
0x00088794 ldr r3, [r0] | r3 = *(r0);
0x00088796 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00088798 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0008879a itt pl |
| if (r3 < r3) {
0x0008879c movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0008879e strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x000887a0 b 0x88772 | goto label_11;
| label_22:
0x000887a2 blx 0x6430 | fcn_00006430 ();
0x000887a6 nop |
0x000887a8 asrs r6, r1, 0x1c | r6 = r1 >> 0x1c;
0x000887aa movs r6, r0 | r6 = r0;
0x000887ac lsls r4, r6, 8 | r4 = r6 << 8;
0x000887ae movs r0, r0 |
0x000887b0 asrs r0, r2, 0x1b | r0 = r2 >> 0x1b;
0x000887b2 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x885f8 */
| #include <stdint.h>
|
; (fcn) fcn.000885f8 () | void fcn_000885f8 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000885f8 invalid |
0x000885fc sub sp, 0xc |
0x000885fe mov r4, r2 | r4 = r2;
| if (r1 == 0) {
0x00088600 cbz r1, 0x88614 | goto label_1;
| }
0x00088602 ldrb r0, [r1] | r0 = *(r1);
0x00088604 mov r7, r3 | r7 = r3;
0x00088606 cmp r0, 0xb0 |
0x00088608 it eq |
| if (r0 != 0xb0) {
0x0008860a ldrbeq r0, [r1, 2] | r0 = *((r1 + 2));
| }
0x0008860c cmp r0, 0xb1 |
| if (r0 == 0xb1) {
0x0008860e beq 0x88658 | goto label_2;
| }
0x00088610 cmp r0, 0x8a |
0x00088612 beq 0x88626 |
| while (r3 <= 1) {
| label_1:
0x00088614 ldr r3, [r5, 8] | r3 = *((r5 + 8));
| if (r3 == 0) {
0x00088616 cbz r3, 0x88654 | goto label_3;
| }
0x00088618 mov r2, r4 | r2 = r4;
0x0008861a mov r0, r5 | r0 = r5;
0x0008861c add sp, 0xc |
0x0008861e pop.w {r4, r5, r6, r7, lr} |
0x00088622 b.w 0x871b8 | void (*0x871b8)() ();
0x00088626 ldr r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x00088628 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008862a ldr r3, [r3] | r3 = *(r3);
| label_0:
0x0008862c cmp r3, 1 |
0x0008862e ble 0x88614 |
| }
0x00088630 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00088632 lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 < r3) {
0x00088634 bmi 0x8865e | goto label_4;
| }
0x00088636 ldr r6, [r1, 0x14] | r6 = *((r1 + 0x14));
| if (r7 == 0) {
0x00088638 cbz r7, 0x88654 | goto label_3;
| }
0x0008863a add r7, r4 | r7 += r4;
| do {
0x0008863c ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0008863e mov r2, r4 | r2 = r4;
0x00088640 mov r0, r5 | r0 = r5;
0x00088642 adds r4, 1 | r4++;
| if (r1 != 0) {
0x00088644 cbz r1, 0x8864c |
0x00088646 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00088648 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
0x0008864c cmp r4, r7 |
0x0008864e add.w r6, r6, 0x10 | r6 += 0x10;
0x00088652 bne 0x8863c |
| } while (r4 != r7);
| label_3:
0x00088654 add sp, 0xc |
0x00088656 pop {r4, r5, r6, r7, pc} |
| label_2:
0x00088658 ldr r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x0008865a ldr r3, [r3] | r3 = *(r3);
0x0008865c b 0x8862c | goto label_0;
| label_4:
0x0008865e ldr r6, [r5, 8] | r6 = *((r5 + 8));
0x00088660 mov r0, r5 | r0 = r5;
0x00088662 subs r7, 1 | r7--;
0x00088664 bl 0x857e8 | fcn_000857e8 (r0, r1);
0x00088668 mov r3, r4 | r3 = r4;
0x0008866a mov r2, r0 | r2 = r0;
0x0008866c movs r1, 0x50 | r1 = 0x50;
0x0008866e mov r0, r6 | r0 = r6;
0x00088670 str r7, [sp] | *(sp) = r7;
0x00088672 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088676 add sp, 0xc |
0x00088678 pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x88b50 */
| #include <stdint.h>
|
; (fcn) fcn.00088b50 () | void fcn_00088b50 (int16_t arg_0h, int16_t arg_ch, int16_t arg_64h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h_2;
| arithmetic x;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00088b50 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00088b54 mov fp, r1 |
0x00088b56 ldr.w r4, [pc, 0x4d0] |
0x00088b5a sub sp, 0x3c |
0x00088b5c ldr.w r1, [pc, 0x4cc] | r1 = *(0x8902c);
0x00088b60 add r4, pc | r4 = 0x111b8e;
0x00088b62 ldr r1, [r4, r1] |
0x00088b64 ldr.w r4, [fp] | r4 = *(fp);
0x00088b68 ldr r1, [r1] | r1 = imp.atan;
0x00088b6a str r1, [sp, 0x34] | var_34h = r1;
0x00088b6c mov.w r1, 0 | r1 = 0;
0x00088b70 strd r2, r3, [sp, 0xc] | __asm ("strd r2, r3, [var_ch]");
0x00088b74 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00088b76 str r3, [sp, 0x14] | x = r3;
0x00088b78 ldrb r3, [r4] | r3 = *(r4);
0x00088b7a sub.w r2, r3, 0x2d | r2 = r3 - 0x2d;
0x00088b7e tst.w r2, 0xf7 |
| if ((r2 & 0xf7) == 0) {
0x00088b82 beq 0x88c26 | goto label_18;
| }
0x00088b84 cmp r3, 0x32 |
| if (r3 == 0x32) {
0x00088b86 beq.w 0x88e2c | goto label_19;
| }
0x00088b8a ldr r3, [sp, 0xc] | r3 = var_ch;
0x00088b8c mov sl, r0 | sl = r0;
0x00088b8e ldr r7, [r3, 0x50] | r7 = *((r3 + 0x50));
0x00088b90 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00088b92 lsls r6, r3, 0x15 | r6 = r3 << 0x15;
| if (r6 >= r3) {
0x00088b94 bpl 0x88c68 | goto label_20;
| }
| label_0:
0x00088b96 ldr r2, [sp, 0x10] | r2 = var_10h_2;
| if (r2 == 0) {
0x00088b98 cbz r2, 0x88bb0 | goto label_21;
| }
0x00088b9a ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00088b9c add.w r1, r3, r2, lsl 2 | r1 = r3 + (r2 << 2);
| do {
0x00088ba0 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
| if (r2 != 0) {
0x00088ba4 cbz r2, 0x88bac |
0x00088ba6 ldr r2, [r2] | r2 = *(r2);
0x00088ba8 cmp r2, r4 |
| if (r2 == r4) {
0x00088baa beq 0x88c42 | goto label_22;
| }
| }
0x00088bac cmp r1, r3 |
0x00088bae bne 0x88ba0 |
| } while (r1 != r3);
| label_21:
0x00088bb0 ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00088bb2 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00088bb4 cmp r2, r1 |
| if (r2 >= r1) {
0x00088bb6 bge.w 0x88f9e | goto label_23;
| }
0x00088bba ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00088bbc mov.w r8, 0 | r8 = 0;
0x00088bc0 add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x00088bc4 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
| do {
0x00088bc8 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x00088bcc ldr r2, [r2] | r2 = *(r2);
0x00088bce cmp r4, r2 |
0x00088bd0 it eq |
| if (r4 != r2) {
0x00088bd2 addeq r8, r8, 1 | r8++;
| }
0x00088bd6 cmp r1, r3 |
0x00088bd8 bne 0x88bc8 |
| } while (r1 != r3);
| label_13:
0x00088bda ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00088bdc movs r2, 0 | r2 = 0;
0x00088bde str r2, [sp, 0x30] | var_30h = r2;
0x00088be0 lsls r5, r3, 0x13 | r5 = r3 << 0x13;
| if (r5 >= r3) {
0x00088be2 bpl 0x88c84 | goto label_24;
| }
0x00088be4 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00088be6 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x00088be8 ldr r2, [r2] | r2 = *(r2);
0x00088bea cmp r2, 1 |
| if (r2 == 1) {
0x00088bec beq 0x88c84 | goto label_24;
| }
0x00088bee ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00088bf0 ldr.w r5, [sl] | r5 = *(sl);
| if (r2 != 0) {
0x00088bf4 cbz r2, 0x88bfc |
0x00088bf6 lsls r0, r3, 6 | r0 = r3 << 6;
| if (r0 < r3) {
0x00088bf8 bmi.w 0x88fa4 | goto label_25;
| }
| }
0x00088bfc movs r3, 0 | r3 = 0;
0x00088bfe mov r1, r4 | r1 = r4;
0x00088c00 mov r2, r3 | r2 = r3;
0x00088c02 mov r0, r5 | r0 = r5;
0x00088c04 bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
0x00088c08 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x00088c0c mov r6, r0 | r6 = r0;
0x00088c0e cmp r3, 0 |
| if (r3 == 0) {
0x00088c10 beq.w 0x88e5a | goto label_26;
| }
0x00088c14 cmp r0, 0 |
| if (r0 != 0) {
0x00088c16 bne.w 0x88ed2 | goto label_10;
| }
| label_8:
0x00088c1a movs r3, 0 | r3 = 0;
0x00088c1c movs r2, 5 | r2 = 5;
0x00088c1e str r3, [sp, 0x18] | var_18h_2 = r3;
0x00088c20 strd r3, r2, [sp, 0x1c] | __asm ("strd r3, r2, [var_1ch_2]");
0x00088c24 b 0x88cae | goto label_27;
| label_18:
0x00088c26 ldr r2, [sp, 0x64] | r2 = *(arg_64h);
0x00088c28 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00088c2a bl 0x85cf4 | fcn_00085cf4 (r0, r1, r2, r3, r4, r5, r6);
0x00088c2e str r0, [sp, 0x64] | *(arg_64h) = r0;
| label_2:
0x00088c30 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00088c32 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00088c34 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00088c36 lsls r2, r3, 0xa | r2 = r3 << 0xa;
| if (r2 < r3) {
0x00088c38 bpl 0x88c42 |
0x00088c3a ldrh.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x00088c3e lsls r3, r3, 0x14 | r3 <<= 0x14;
| if (r3 < r3) {
0x00088c40 bmi 0x88c4a | goto label_28;
| }
| }
| label_22:
0x00088c42 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00088c44 mov r1, fp | r1 = fp;
0x00088c46 bl 0x237f4 | fcn_000237f4 (r0, r1);
| label_28:
0x00088c4a ldr r2, [pc, 0x3e4] |
0x00088c4c ldr r3, [pc, 0x3dc] | r3 = *(0x8902c);
0x00088c4e add r2, pc | r2 = 0x111c84;
0x00088c50 ldr r3, [r2, r3] | r3 = imp.atan;
0x00088c52 ldr r2, [r3] | r2 = imp.atan;
0x00088c54 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00088c56 eors r2, r3 | r2 ^= r3;
0x00088c58 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00088c5c bne.w 0x89024 | goto label_29;
| }
0x00088c60 ldr r0, [sp, 0x64] | r0 = *(arg_64h);
0x00088c62 add sp, 0x3c |
0x00088c64 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x00088c68 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00088c6a cmp r3, 0 |
| if (r3 == 0) {
0x00088c6c beq 0x88b96 | goto label_0;
| }
0x00088c6e ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00088c70 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00088c72 ldrb r3, [r3, r2] | r3 = *((r3 + r2));
0x00088c74 cmp r3, 0 |
| if (r3 == 0) {
0x00088c76 beq 0x88b96 | goto label_0;
| }
0x00088c78 ldr r3, [sp, 0x60] | r3 = *(arg_0h);
0x00088c7a clz r3, r3 | r3 &= r3;
0x00088c7e lsrs r3, r3, 5 | r3 >>= 5;
0x00088c80 str r3, [sp, 0x60] | *(arg_0h) = r3;
0x00088c82 b 0x88b96 | goto label_0;
| label_24:
0x00088c84 movs r3, 0 | r3 = 0;
0x00088c86 add r2, sp, 0x30 | r2 += var_30h;
0x00088c88 str r3, [sp] | *(sp) = r3;
0x00088c8a str r2, [sp, 4] | var_4h = r2;
0x00088c8c str r3, [sp, 0x1c] | var_1ch_2 = r3;
| label_14:
0x00088c8e movs r2, 4 | r2 = 4;
0x00088c90 mov r1, r4 | r1 = r4;
0x00088c92 mov r0, sl | r0 = sl;
0x00088c94 bl 0x7cac8 | fcn_0007cac8 (r0, r1, r2, r3, r4, r5, r6);
0x00088c98 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00088c9a str r0, [sp, 0x20] | var_20h = r0;
0x00088c9c str r3, [sp, 0x18] | var_18h_2 = r3;
| label_11:
0x00088c9e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00088ca0 cmp r3, 4 |
0x00088ca2 itttt eq |
| if (r3 != 4) {
0x00088ca4 ldreq r3, [sp, 0x60] | r3 = *(arg_0h);
| }
| if (r3 == 4) {
0x00088ca6 clzeq r3, r3 | __asm ("clzeq r3, r3");
| }
| if (r3 != 4) {
0x00088caa lsreq r3, r3, 5 | r3 >>= 5;
| }
| if (r3 == 4) {
0x00088cac str r3, [sp, 0x60] | *(arg_0h) = r3;
| }
| label_27:
0x00088cae ldr r3, [sp, 0x60] | r3 = *(arg_0h);
0x00088cb0 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00088cb2 ldr r0, [sp, 0x14] | r0 = x;
0x00088cb4 cmp r3, 0 |
0x00088cb6 mov.w r3, 0 | r3 = 0;
0x00088cba ite ne |
| if (r3 == 0) {
0x00088cbc movne r1, 0x1f | r1 = 0x1f;
| }
| if (r3 != 0) {
0x00088cbe moveq r1, 0x23 | r1 = 0x23;
| }
0x00088cc0 str r3, [sp] | *(sp) = r3;
0x00088cc2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088cc6 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00088cc8 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00088cca ldr.w sb, [r1, 0x48] | sb = *((r1 + 0x48));
0x00088cce orr r2, r3, 0x800 | r2 = r3 | 0x800;
0x00088cd2 str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x00088cd4 cmp.w sb, 0 |
| if (sb == 0) {
0x00088cd8 bne 0x88ce6 |
0x00088cda ldr.w r2, [sl, 0x38] | r2 = *((sl + 0x38));
0x00088cde subs r2, 1 | r2--;
0x00088ce0 str.w r2, [sl, 0x38] | __asm ("str.w r2, [sl, 0x38]");
0x00088ce4 str r2, [r1, 0x10] | *((r1 + 0x10)) = r2;
| }
0x00088ce6 ldr r2, [sp, 0x10] | r2 = var_10h_2;
| if (r2 != 0) {
0x00088ce8 cbz r2, 0x88cf4 |
0x00088cea lsls r1, r3, 0xb | r1 = r3 << 0xb;
0x00088cec itt pl |
| if (r1 < r3) {
0x00088cee orrpl r3, r3, 0x40800 | r3 |= 0x40800;
| }
| if (r1 < r3) {
0x00088cf2 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
| goto label_30;
| }
| }
| label_30:
0x00088cf4 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00088cf6 add.w r3, sb, r8 | r3 = sb + r8;
0x00088cfa add.w r8, r3, r3, lsl 2 | r8 = r3 + (r3 << 2);
0x00088cfe movs r6, 0 | r6 = 0;
0x00088d00 str r3, [r5, 0x48] | *((r5 + 0x48)) = r3;
0x00088d02 lsl.w r8, r8, 2 | r8 <<= 2;
0x00088d06 ldr.w r3, [fp, 4] | r3 = *(arg_64h);
0x00088d0a adds.w r2, r8, 0x10 | r2 = r8 + 0x10;
0x00088d0e ldr r5, [r5, 0x4c] | r5 = *((r5 + 0x4c));
0x00088d10 ldr r1, [r3] | r1 = *(r3);
0x00088d12 adc r3, r6, 0 | __asm ("adc r3, r6, 0");
0x00088d16 ldr r0, [r1] | r0 = *(r1);
0x00088d18 str r1, [sp, 0x24] | var_24h = r1;
0x00088d1a ldr r0, [r0] | r0 = *(r0);
0x00088d1c bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00088d20 cmp r0, 0 |
| if (r0 == 0) {
0x00088d22 beq.w 0x88e52 | goto label_31;
| }
0x00088d26 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00088d28 ldr r3, [r1, 0x48] | r3 = *((r1 + 0x48));
0x00088d2a strd r8, r6, [r0, 8] | __asm ("strd r8, r6, [r0, 8]");
0x00088d2e str r3, [r0] | *(r0) = r3;
0x00088d30 add.w r3, r0, 0x10 | r3 = r0 + 0x10;
0x00088d34 str r0, [r1, 0x48] | *((r1 + 0x48)) = r0;
| if (r5 != 0) {
0x00088d36 cbz r5, 0x88d46 |
0x00088d38 mov r0, r3 | r0 = r3;
0x00088d3a ldr r2, [r5, -0x8] | r2 = *((r5 - 0x8));
0x00088d3e mov r1, r5 | r1 = r5;
0x00088d40 blx 0x65ac | r0 = EVP_CIPHER_CTX_free ();
0x00088d44 mov r3, r0 | r3 = r0;
| }
0x00088d46 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00088d48 add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x00088d4c ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00088d4e add.w sb, r3, sb, lsl 2 | sb = r3 + (sb << 2);
0x00088d52 str r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
0x00088d54 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00088d56 cmp r3, r1 |
| if (r3 >= r1) {
0x00088d58 bge 0x88dda | goto label_32;
| }
0x00088d5a ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00088d5c movs r2, 0 | r2 = 0;
0x00088d5e ldr r0, [sp, 0x64] | r0 = *(arg_64h);
0x00088d60 str.w sl, [sp, 0x24] | __asm ("str.w sl, [var_24h]");
0x00088d64 mov sl, r2 | sl = r2;
0x00088d66 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x00088d6a mov r8, r3 | r8 = r3;
0x00088d6c subs r5, r0, r3 | r5 = r0 - r3;
0x00088d6e mov fp, r3 |
0x00088d70 b 0x88d7a |
| while (r3 != r4) {
0x00088d72 add.w r8, r8, 1 | r8++;
0x00088d76 cmp r1, r8 |
| if (r1 <= r8) {
0x00088d78 ble 0x88dd6 | goto label_33;
| }
| label_1:
0x00088d7a ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00088d7c ldr.w r3, [r3, r8, lsl 2] | offset_0 = r8 << 2;
| r3 = *((r3 + offset_0));
0x00088d80 ldr r3, [r3] | r3 = *(r3);
0x00088d82 cmp r3, r4 |
0x00088d84 bne 0x88d72 |
| }
0x00088d86 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00088d88 add.w r6, r5, r8 | r6 = r5 + r8;
0x00088d8c cmp r3, 1 |
| if (r3 == 1) {
0x00088d8e beq 0x88e40 | goto label_34;
| }
0x00088d90 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00088d92 cmp r3, 0 |
| if (r3 == 0) {
0x00088d94 beq 0x88e3c | goto label_35;
| }
0x00088d96 ldr.w r3, [r3, sl, lsl 2] | offset_1 = sl << 2;
| r3 = *((r3 + offset_1));
0x00088d9a add.w sl, sl, 1 | sl++;
| label_4:
0x00088d9e ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00088da0 movs r1, 0x5e | r1 = 0x5e;
0x00088da2 ldr r0, [sp, 0x14] | r0 = x;
0x00088da4 str r6, [sp] | *(sp) = r6;
0x00088da6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_5:
0x00088daa movs r3, 0 | r3 = 0;
0x00088dac str.w r0, [sb, 4] | __asm ("str.w r0, [sb, 4]");
0x00088db0 mov r2, r6 | r2 = r6;
0x00088db2 str r3, [sp] | *(sp) = r3;
0x00088db4 ldr r0, [sp, 0x14] | r0 = x;
0x00088db6 movs r1, 0x32 | r1 = 0x32;
0x00088db8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088dbc cmp fp, r8 |
0x00088dbe itt ne |
| if (fp == r8) {
0x00088dc0 movne r3, 0xb8 | r3 = 0xb8;
| }
| if (fp == r8) {
0x00088dc2 strbne r3, [sb, 0x10] | *((sb + 0x10)) = r3;
| }
| if (fp == r8) {
0x00088dc6 beq 0x88e02 | goto label_36;
| }
| label_3:
0x00088dc8 ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00088dca add.w r8, r8, 1 | r8++;
0x00088dce add.w sb, sb, 0x14 | sb += 0x14;
0x00088dd2 cmp r1, r8 |
| if (r1 > r8) {
0x00088dd4 bgt 0x88d7a | goto label_1;
| }
| label_33:
0x00088dd6 ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
| label_32:
0x00088dda ldr r3, [sp, 0x10] | r3 = var_10h_2;
| if (r3 != 0) {
0x00088ddc cbz r3, 0x88dee |
0x00088dde ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x00088de0 mov.w r3, 0x400 |
0x00088de4 movt r3, 0x10 | r3 = 0x100400;
0x00088de8 ands r3, r2 | r3 &= r2;
| if (r3 == r2) {
0x00088dea beq.w 0x88f8c | goto label_37;
| }
| }
| label_6:
0x00088dee ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00088df0 cmp r3, 0 |
| if (r3 == 0) {
0x00088df2 beq.w 0x88c30 | goto label_2;
| }
0x00088df6 ldr.w r0, [sl] | r0 = *(sl);
0x00088dfa mov r1, r3 | r1 = r3;
0x00088dfc bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00088e00 b 0x88c30 | goto label_2;
| label_36:
0x00088e02 ldr r3, [sp, 0x60] | r3 = *(arg_0h);
0x00088e04 str.w fp, [sb, 0xc] | __asm ("str.w fp, [sb, 0xc]");
0x00088e08 cmp r3, 0 |
0x00088e0a ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00088e0c str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00088e10 ite eq |
| if (r3 != 0) {
0x00088e12 moveq r3, 0x26 | r3 = 0x26;
| }
| if (r3 == 0) {
0x00088e14 movne r3, 0x25 | r3 = 0x25;
| }
0x00088e16 strb.w r3, [sb, 0x10] | *((sb + 0x10)) = r3;
0x00088e1a cmp.w fp, 0 |
| if (fp == 0) {
0x00088e1e beq 0x88dc8 | goto label_3;
| }
0x00088e20 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x00088e22 sub.w r3, r3, fp | r3 -= fp;
0x00088e26 str.w r3, [sb, 8] | __asm ("str.w r3, [sb, 8]");
0x00088e2a b 0x88dc8 | goto label_3;
| label_19:
0x00088e2c movs r2, 0 | r2 = 0;
0x00088e2e ldr r0, [sp, 0x14] | r0 = x;
0x00088e30 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x00088e32 movs r1, 0x4b | r1 = 0x4b;
0x00088e34 str r2, [sp] | *(sp) = r2;
0x00088e36 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088e3a b 0x88c30 | goto label_2;
| label_35:
0x00088e3c ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00088e3e b 0x88d9e | goto label_4;
| label_34:
0x00088e40 movs r3, 0 | r3 = 0;
0x00088e42 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00088e44 str r3, [sp] | *(sp) = r3;
0x00088e46 movs r1, 0x87 | r1 = 0x87;
0x00088e48 ldr r0, [sp, 0x14] | r0 = x;
0x00088e4a mov r3, r6 | r3 = r6;
0x00088e4c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088e50 b 0x88daa | goto label_5;
| label_31:
0x00088e52 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00088e54 strd r0, r0, [r3, 0x48] | __asm ("strd r0, r0, [r3, 0x48]");
0x00088e58 b 0x88dee | goto label_6;
| label_26:
0x00088e5a ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x00088e5c ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00088e5e ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x00088e60 str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x00088e62 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00088e64 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00088e66 str r2, [sp, 0x20] | var_20h = r2;
0x00088e68 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00088e6a cmp r2, r1 |
| if (r2 >= r1) {
0x00088e6c bge 0x88edc | goto label_38;
| }
0x00088e6e mov sb, r2 | sb = r2;
0x00088e70 mov r6, r3 | r6 = r3;
0x00088e72 str r3, [sp, 0x18] | var_18h_2 = r3;
0x00088e74 str r0, [sp, 0x24] | var_24h = r0;
0x00088e76 strd r5, r8, [sp, 0x28] | __asm ("strd r5, r8, [var_28h]");
0x00088e7a b 0x88e84 |
| while (r4 != r2) {
| label_7:
0x00088e7c add.w sb, sb, 1 | sb++;
0x00088e80 cmp sb, r1 |
| if (sb >= r1) {
0x00088e82 bge 0x88f80 | goto label_39;
| }
0x00088e84 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00088e86 ldr.w r3, [r3, sb, lsl 2] | offset_2 = sb << 2;
| r3 = *((r3 + offset_2));
0x00088e8a ldr r2, [r3] | r2 = *(r3);
0x00088e8c cmp r4, r2 |
0x00088e8e bne 0x88e7c |
| }
0x00088e90 ldr r5, [r3, 0x1c] | r5 = *((r3 + 0x1c));
0x00088e92 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00088e94 subs r5, 1 | r5--;
0x00088e96 lsls r5, r5, 4 | r5 <<= 4;
0x00088e98 add.w r8, r3, r5 | r8 = r3 + r5;
0x00088e9c ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x00088ea0 cmp r2, 0 |
| if (r2 == 0) {
0x00088ea2 beq 0x88e7c | goto label_7;
| }
0x00088ea4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00088ea6 mov r0, sl | r0 = sl;
0x00088ea8 ldr r1, [sp, 0x18] | r1 = var_18h_2;
0x00088eaa add r5, r3 | r5 += r3;
0x00088eac bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x00088eb0 movs r3, 0 | r3 = 0;
0x00088eb2 mov r1, r6 | r1 = r6;
0x00088eb4 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x00088eb8 str r0, [sp, 0x18] | var_18h_2 = r0;
0x00088eba mov r0, sl | r0 = sl;
0x00088ebc ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00088ebe bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x00088ec2 movs r3, 0 | r3 = 0;
0x00088ec4 ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00088ec6 mov r6, r0 | r6 = r0;
0x00088ec8 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x00088eca b 0x88e7c | goto label_7;
| do {
| label_9:
0x00088ecc cmp.w ip, 0 |
| if (ip == 0) {
0x00088ed0 beq 0x88f34 | goto label_40;
| }
| label_10:
0x00088ed2 mov r1, r6 | r1 = r6;
0x00088ed4 mov r0, r5 | r0 = r5;
0x00088ed6 bl 0x30c30 | fcn_00030c30 (r0, r1);
0x00088eda b 0x88c1a | goto label_8;
| label_38:
0x00088edc str r3, [sp, 0x18] | var_18h_2 = r3;
| label_12:
0x00088ede ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
| if (r1 != 0) {
0x00088ee0 cbz r1, 0x88eec |
0x00088ee2 mov r0, r5 | r0 = r5;
0x00088ee4 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00088ee6 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x00088eea ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
| }
0x00088eec ldr r1, [sp, 0x20] | r1 = var_20h;
| if (r1 != 0) {
0x00088eee cbz r1, 0x88efa |
0x00088ef0 mov r0, r5 | r0 = r5;
0x00088ef2 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00088ef4 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x00088ef8 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
| }
0x00088efa ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x00088efc ldr r0, [sp, 0x18] | r0 = var_18h_2;
0x00088efe str r3, [r1, 0x14] | *((r1 + 0x14)) = r3;
0x00088f00 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00088f02 str r0, [r2, 0x1c] | *((r2 + 0x1c)) = r0;
| if (r3 != 0) {
0x00088f04 cbz r3, 0x88f0c |
0x00088f06 ldr r0, [r3] | r0 = *(r3);
0x00088f08 cmp r0, 1 |
| if (r0 == 1) {
0x00088f0a beq 0x89008 | goto label_41;
| }
| }
| label_16:
0x00088f0c ldr r3, [r2, 0x30] | r3 = *((r2 + 0x30));
0x00088f0e ldrb.w ip, [r5, 0x57] | ip = *((r5 + 0x57));
0x00088f12 cmp r3, 0 |
0x00088f14 beq 0x88ecc |
| } while (r3 == 0);
0x00088f16 ldr r1, [r3] | r1 = *(r3);
0x00088f18 cmp r1, 0 |
0x00088f1a itt gt |
| if (r1 <= 0) {
0x00088f1c movgt r2, 0 | r2 = 0;
| }
| if (r1 > 0) {
0x00088f1e movgt r0, r2 | r0 = r2;
| goto label_42;
| }
| if (r1 <= 0) {
| label_42:
0x00088f20 ble 0x88ecc | goto label_9;
| }
| do {
0x00088f22 adds r2, 1 | r2++;
0x00088f24 strh r0, [r3, 0x14] | *((r3 + 0x14)) = r0;
0x00088f26 cmp r1, r2 |
0x00088f28 add.w r3, r3, 0x10 | r3 += 0x10;
0x00088f2c bne 0x88f22 |
| } while (r1 != r2);
0x00088f2e cmp.w ip, 0 |
| if (ip != 0) {
0x00088f32 bne 0x88ed2 | goto label_10;
| }
| label_40:
0x00088f34 ldr.w r0, [sl] | r0 = *(sl);
0x00088f38 lsl.w sb, r8, 2 | sb = r8 << 2;
0x00088f3c cmp r0, 0 |
| if (r0 == 0) {
0x00088f3e beq 0x88ff0 | goto label_43;
| }
0x00088f40 mov r2, sb | r2 = sb;
0x00088f42 movs r3, 0 | r3 = 0;
0x00088f44 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x00088f48 str r0, [sp, 0x1c] | var_1ch_2 = r0;
| do {
0x00088f4a ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
| if (r3 != 0) {
0x00088f4c cbz r3, 0x88f58 |
0x00088f4e mov r2, sb | r2 = sb;
0x00088f50 movs r1, 0 | r1 = 0;
0x00088f52 mov r0, r3 | r0 = r3;
0x00088f54 blx 0x62ec | fcn_000062ec ();
| }
0x00088f58 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00088f5a mov r1, r6 | r1 = r6;
0x00088f5c movs r2, 4 | r2 = 4;
0x00088f5e mov r0, sl | r0 = sl;
0x00088f60 str r3, [sp] | *(sp) = r3;
0x00088f62 add r3, sp, 0x30 | r3 += var_30h;
0x00088f64 str r3, [sp, 4] | var_4h = r3;
0x00088f66 movs r3, 0 | r3 = 0;
0x00088f68 bl 0x7cac8 | r0 = fcn_0007cac8 (r0, r1, r2, r3, r4, r5, r6);
0x00088f6c mov r3, r0 | r3 = r0;
0x00088f6e mov r1, r6 | r1 = r6;
0x00088f70 str r3, [sp, 0x20] | var_20h = r3;
0x00088f72 mov r0, r5 | r0 = r5;
0x00088f74 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00088f76 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00088f78 str r3, [sp, 0x18] | var_18h_2 = r3;
0x00088f7a bl 0x30c30 | fcn_00030c30 (r0, r1);
0x00088f7e b 0x88c9e | goto label_11;
| label_39:
0x00088f80 mov r3, r6 | r3 = r6;
0x00088f82 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x00088f86 ldrd r6, r5, [sp, 0x24] | __asm ("ldrd r6, r5, [var_24h]");
0x00088f8a b 0x88ede | goto label_12;
| label_37:
0x00088f8c ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00088f8e movs r1, 0x7d | r1 = 0x7d;
0x00088f90 ldr r0, [sp, 0x14] | r0 = x;
0x00088f92 str r2, [sp] | *(sp) = r2;
0x00088f94 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00088f96 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00088f98 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00088f9c b 0x88dee | goto label_6;
| label_23:
0x00088f9e mov.w r8, 0 | r8 = 0;
0x00088fa2 b 0x88bda | goto label_13;
| label_25:
0x00088fa4 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00088fa6 ldrb r3, [r2] | r3 = *(r2);
0x00088fa8 cmp r3, 0xb0 |
0x00088faa it eq |
| if (r3 != 0xb0) {
0x00088fac ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x00088fae cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x00088fb0 beq 0x8901e | goto label_44;
| }
0x00088fb2 cmp r3, 0x8a |
0x00088fb4 itett eq |
| if (r3 != 0x8a) {
0x00088fb6 ldreq r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 == 0x8a) {
0x00088fb8 movne r3, 1 | r3 = 1;
| }
| if (r3 != 0x8a) {
0x00088fba ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r3 != 0x8a) {
0x00088fbc ldreq r3, [r3] | r3 = *(r3);
| }
| label_17:
0x00088fbe cmp r3, r8 |
0x00088fc0 it lt |
| if (r3 >= r8) {
0x00088fc2 movlt r3, r8 | r3 = r8;
| }
0x00088fc4 lsl.w sb, r3, 2 | sb = r3 << 2;
| if (r5 == 0) {
0x00088fc8 cbz r5, 0x88ffc | goto label_45;
| }
0x00088fca mov r0, r5 | r0 = r5;
0x00088fcc mov r2, sb | r2 = sb;
0x00088fce movs r3, 0 | r3 = 0;
0x00088fd0 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x00088fd4 str r0, [sp, 0x1c] | var_1ch_2 = r0;
| label_15:
0x00088fd6 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
| if (r3 != 0) {
0x00088fd8 cbz r3, 0x88fe4 |
0x00088fda mov r2, sb | r2 = sb;
0x00088fdc movs r1, 0 | r1 = 0;
0x00088fde mov r0, r3 | r0 = r3;
0x00088fe0 blx 0x62ec | fcn_000062ec ();
| }
0x00088fe4 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00088fe6 str r3, [sp] | *(sp) = r3;
0x00088fe8 add r3, sp, 0x30 | r3 += var_30h;
0x00088fea str r3, [sp, 4] | var_4h = r3;
0x00088fec movs r3, 0 | r3 = 0;
0x00088fee b 0x88c8e | goto label_14;
| label_43:
0x00088ff0 mov r1, r0 | r1 = r0;
0x00088ff2 mov r0, sb | r0 = sb;
0x00088ff4 bl 0x28c3c | fcn_00028c3c (r0);
0x00088ff8 str r0, [sp, 0x1c] | var_1ch_2 = r0;
0x00088ffa b 0x88f4a |
| } while (1);
| label_45:
0x00088ffc mov r1, r5 | r1 = r5;
0x00088ffe mov r0, sb | r0 = sb;
0x00089000 bl 0x28c3c | fcn_00028c3c (r0);
0x00089004 str r0, [sp, 0x1c] | var_1ch_2 = r0;
0x00089006 b 0x88fd6 | goto label_15;
| label_41:
0x00089008 ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x0008900c movs r2, 0 | r2 = 0;
0x0008900e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00089010 mov r0, r5 | r0 = r5;
0x00089012 bl 0x30c30 | fcn_00030c30 (r0, r1);
0x00089016 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00089018 str.w sb, [r6, 0xc] | __asm ("str.w sb, [r6, 0xc]");
0x0008901c b 0x88f0c | goto label_16;
| label_44:
0x0008901e ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00089020 ldr r3, [r3] | r3 = *(r3);
0x00089022 b 0x88fbe | goto label_17;
| label_29:
0x00089024 blx 0x6430 | fcn_00006430 ();
0x00089028 asrs r0, r7, 8 | r0 = r7 >> 8;
0x0008902a movs r6, r0 | r6 = r0;
0x0008902c lsls r4, r6, 8 | r4 = r6 << 8;
0x0008902e movs r0, r0 |
0x00089030 asrs r2, r1, 5 | r2 = r1 >> 5;
0x00089032 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x892fc */
| #include <stdint.h>
|
; (fcn) fcn.000892fc () | void fcn_000892fc (int16_t arg_30h, int16_t arg_40h, int16_t arg_44h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000892fc svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00089300 mov fp, r1 |
0x00089302 ldr r1, [pc, 0x14c] |
0x00089304 adds r5, r2, 1 | r5 = r2 + 1;
0x00089306 sub sp, 0x1c |
0x00089308 mov r8, r3 | r8 = r3;
0x0008930a ldr r2, [pc, 0x148] | r2 = *(0x89456);
0x0008930c add r1, pc | r1 = 0x112762;
0x0008930e ldrb.w r3, [fp, 0x30] | r3 = *(arg_30h);
0x00089312 ldr r2, [r1, r2] |
0x00089314 cmp r3, r5 |
0x00089316 ldr r2, [r2] | r2 = imp.atan;
0x00089318 str r2, [sp, 0x14] | var_14h = r2;
0x0008931a mov.w r2, 0 | r2 = 0;
0x0008931e ldr r2, [sp, 0x40] | r2 = *(arg_40h);
0x00089320 str r2, [sp, 8] | var_8h = r2;
0x00089322 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x00089324 str r2, [sp, 0xc] | var_ch = r2;
| if (r3 <= r5) {
0x00089326 ble 0x893c6 | goto label_2;
| }
0x00089328 add.w r4, r5, r5, lsl 1 | r4 = r5 + (r5 << 1);
0x0008932c mov r6, r0 | r6 = r0;
0x0008932e add.w r4, fp, r4, lsl 5 | r4 = fp + (r4 << 5);
0x00089332 add.w r4, r4, 0x300 | r4 += 0x300;
| do {
0x00089336 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00089338 cmp r2, 0 |
| if (r2 != 0) {
0x0008933a beq 0x893be |
0x0008933c ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x0008933e ldrh r1, [r2, 0x2e] | r1 = *((r2 + 0x2e));
0x00089340 cmp r1, 0 |
| if (r1 != 0) {
0x00089342 bne 0x893be | goto label_3;
| }
0x00089344 ldr r0, [sp, 8] | r0 = var_8h;
0x00089346 ldr r1, [r2] | r1 = *(r2);
0x00089348 ldr r7, [sp, 0xc] | r7 = var_ch;
0x0008934a ands r1, r0 | r1 &= r0;
0x0008934c ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0008934e ands r0, r7 | r0 &= r7;
0x00089350 orrs r1, r0 | r1 |= r0;
| if (r1 != r0) {
0x00089352 bne 0x893be | goto label_3;
| }
0x00089354 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x00089356 str.w r8, [r4, 0xc] | __asm ("str.w r8, [r4, 0xc]");
0x0008935a ands r3, r3, 0x100 | r3 &= 0x100;
| if (r3 == r3) {
0x0008935e beq 0x893e0 | goto label_4;
| }
0x00089360 ldr r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x00089362 ldr r1, [r3] | r1 = *(r3);
0x00089364 ldrb r3, [r6, 0x13] | r3 = *((r6 + 0x13));
0x00089366 cmp r3, 0 |
| if (r3 == 0) {
0x00089368 beq 0x89444 | goto label_5;
| }
0x0008936a subs r3, 1 | r3--;
0x0008936c uxtb r3, r3 | r3 = (int8_t) r3;
0x0008936e strb r3, [r6, 0x13] | *((r6 + 0x13)) = r3;
0x00089370 adds r3, 0x26 | r3 += 0x26;
0x00089372 ldr.w r3, [r6, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r6 + offset_0));
| label_1:
0x00089376 str r3, [sp, 4] | var_4h = r3;
0x00089378 movs r3, 0 | r3 = 0;
0x0008937a mov r2, r4 | r2 = r4;
0x0008937c str r3, [sp] | *(sp) = r3;
0x0008937e mov r0, r6 | r0 = r6;
0x00089380 bl 0x88b50 | fcn_00088b50 (r0, r1, r2, r3, r4, r5, r6);
0x00089384 ldr.w sb, [r6, 8] | sb = *((r6 + 8));
0x00089388 mov r3, r8 | r3 = r8;
0x0008938a ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0008938c movs r1, 0x3f | r1 = 0x3f;
0x0008938e str r0, [sp] | *(sp) = r0;
0x00089390 mov r0, sb | r0 = sb;
0x00089392 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00089396 ldr.w r3, [sb] | r3 = *(sb);
0x0008939a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0008939e cbnz r3, 0x893b4 |
0x000893a0 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x000893a4 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000893a8 movs r2, 0xfd | r2 = 0xfd;
0x000893aa add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
0x000893ae strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x000893b0 movs r2, 1 | r2 = 1;
0x000893b2 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| }
| label_0:
0x000893b4 movs r3, 0 | r3 = 0;
0x000893b6 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000893b8 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x000893ba ldrb.w r3, [fp, 0x30] | r3 = *(arg_30h);
| }
| label_3:
0x000893be adds r5, 1 | r5++;
0x000893c0 adds r4, 0x60 | r4 += 0x60;
0x000893c2 cmp r3, r5 |
0x000893c4 bgt 0x89336 |
| } while (r3 > r5);
| label_2:
0x000893c6 ldr r2, [pc, 0x90] |
0x000893c8 ldr r3, [pc, 0x88] | r3 = *(0x89454);
0x000893ca add r2, pc | r2 = 0x112828;
0x000893cc ldr r3, [r2, r3] | r3 = imp.atan;
0x000893ce ldr r2, [r3] | r2 = imp.atan;
0x000893d0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000893d2 eors r2, r3 | r2 ^= r3;
0x000893d4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000893d8 bne 0x8944c | goto label_6;
| }
0x000893da add sp, 0x1c |
0x000893dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x000893e0 ldrh r7, [r2, 0x18] | r7 = *((r2 + 0x18));
0x000893e2 add r2, sp, 0x10 | r2 += var_10h;
0x000893e4 mov r1, r4 | r1 = r4;
0x000893e6 str r2, [sp] | *(sp) = r2;
0x000893e8 mov r0, r6 | r0 = r6;
0x000893ea mov r2, r3 | r2 = r3;
0x000893ec bl 0x89034 | fcn_00089034 (r0, r1, r2, r3, r4, r5);
0x000893f0 ldr.w sl, [sp, 0x10] | sl = var_10h;
0x000893f4 mov sb, r0 | sb = r0;
0x000893f6 mov r2, r7 | r2 = r7;
0x000893f8 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x000893fa mov r1, sb | r1 = sb;
0x000893fc mov r3, sl | r3 = sl;
0x000893fe bl 0x42428 | fcn_00042428 (r0, r1, r2, r3);
0x00089402 cmp.w sl, 0 |
| if (sl != 0) {
0x00089406 beq 0x89410 |
0x00089408 ldr r0, [r6] | r0 = *(r6);
0x0008940a mov r1, sl | r1 = sl;
0x0008940c bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00089410 ldr.w sl, [r6, 8] | sl = *((r6 + 8));
0x00089414 mov r3, r8 | r3 = r8;
0x00089416 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00089418 movs r1, 0x3f | r1 = 0x3f;
0x0008941a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008941e mov r0, sl | r0 = sl;
0x00089420 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00089424 ldr.w r3, [sl] | r3 = *(sl);
0x00089428 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008942c cmp r3, 0 |
| if (r3 != 0) {
0x0008942e bne 0x893b4 | goto label_0;
| }
0x00089430 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x00089434 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00089438 movs r2, 0xfd | r2 = 0xfd;
0x0008943a add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
0x0008943e str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x00089440 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x00089442 b 0x893b4 | goto label_0;
| label_5:
0x00089444 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00089446 adds r3, 1 | r3++;
0x00089448 str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x0008944a b 0x89376 | goto label_1;
| label_6:
0x0008944c blx 0x6430 | fcn_00006430 ();
0x00089450 lsrs r4, r1, 0xa | r4 = r1 >> 0xa;
0x00089452 movs r6, r0 | r6 = r0;
0x00089454 lsls r4, r6, 8 | r4 = r6 << 8;
0x00089456 movs r0, r0 |
0x00089458 lsrs r6, r1, 7 | r6 = r1 >> 7;
0x0008945a movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8945c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008945c () | void fcn_0008945c (int16_t arg_8h, int16_t arg_9h, int16_t arg_ch, int16_t arg_14h, int16_t arg_18h, int16_t arg_40h, int16_t arg_44h, arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_14h_2;
| arithmetic var_18h;
| int16_t var_1ch;
| arithmetic x;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_78h;
| int16_t var_79h;
| int16_t var_7ah;
| int16_t var_7bh;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0008945c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00089460 mov fp, r1 |
0x00089462 vpush {d8} | __asm ("vpush {d8}");
0x00089466 sub sp, 0x84 |
0x00089468 str r2, [sp, 0x24] | var_24h = r2;
0x0008946a ldr r5, [r1] | r5 = *(r1);
0x0008946c mov r1, r2 | r1 = r2;
0x0008946e ldr.w r2, [pc, 0xbb0] |
0x00089472 ldr.w r3, [pc, 0xbb0] | r3 = *(0x8a026);
0x00089476 str r0, [sp, 0x20] | x = r0;
0x00089478 add r2, pc | r2 = 0x11349e;
0x0008947a ldr r3, [r2, r3] |
0x0008947c ldr r3, [r3] | r3 = imp.atan;
0x0008947e str r3, [sp, 0x7c] | var_7ch = r3;
0x00089480 mov.w r3, 0 | r3 = 0;
0x00089484 ldr r3, [r5] | r3 = *(r5);
0x00089486 str r3, [sp, 0x1c] | var_1ch = r3;
0x00089488 ldr r3, [r3] | r3 = *(r3);
0x0008948a str r3, [sp, 0x2c] | var_2ch = r3;
0x0008948c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00089490 cmp r3, 0 |
| if (r3 != 0) {
0x00089492 bne.w 0x8961e | goto label_1;
| }
0x00089496 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0008949a ldr.w r7, [fp, 0x18] | r7 = *(arg_18h);
0x0008949e add.w r0, r5, 0x1f8 | r0 = r5 + 0x1f8;
0x000894a2 lsls r2, r2, 4 | r2 <<= 4;
0x000894a4 str r0, [sp, 0x28] | var_28h = r0;
0x000894a6 ldr r1, [r7, r2] | r1 = *((r7 + r2));
0x000894a8 add r7, r2 | r7 += r2;
0x000894aa str r2, [sp, 0x18] | *(arg_18h) = r2;
0x000894ac str.w r3, [r5, 0x1f8] | __asm ("str.w r3, [r5, 0x1f8]");
0x000894b0 ldr r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x000894b2 str r1, [sp, 0x14] | *(arg_14h) = r1;
0x000894b4 cmp r6, 0 |
| if (r6 == 0) {
0x000894b6 beq.w 0x89642 | goto label_88;
| }
0x000894ba mov r1, r6 | r1 = r6;
0x000894bc bl 0x32768 | fcn_00032768 (r0, r1);
0x000894c0 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000894c2 strd r0, r1, [sp, 0x30] | __asm ("strd r0, r1, [sp, 0x30]");
0x000894c6 ldrb.w sl, [r3] | sl = *(r3);
0x000894ca cmp.w sl, 0x31 |
| if (sl == 0x31) {
0x000894ce beq.w 0x89654 | goto label_89;
| }
| label_0:
0x000894d2 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000894d4 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000894d6 cmp r1, 0 |
| if (r1 == 0) {
0x000894d8 beq.w 0x8972a | goto label_90;
| }
0x000894dc ldr r0, [sp, 0x28] | r0 = var_28h;
0x000894de bl 0x32768 | fcn_00032768 (r0, r1);
| label_4:
0x000894e2 strd r0, r1, [r7, 0x20] | __asm ("strd r0, r1, [r7, 0x20]");
| if (r6 != 0) {
0x000894e6 cbz r6, 0x894fe |
0x000894e8 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000894ea ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x000894ec tst.w r6, 0x41000 |
| if ((r6 & 0x41000) != 0) {
0x000894f0 bne 0x894fe | goto label_91;
| }
0x000894f2 ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x000894f6 cmp.w sb, 0 |
| if (sb == 0) {
0x000894fa beq.w 0x89c38 | goto label_92;
| }
| }
| label_91:
0x000894fe ldr r4, [sp, 0x14] | r4 = *(arg_14h);
0x00089500 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00089502 mov r1, r4 | r1 = r4;
0x00089504 bl 0x32768 | fcn_00032768 (r0, r1);
0x00089508 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x0008950a mov r8, r0 | r8 = r0;
0x0008950c mov sb, r1 | sb = r1;
| label_2:
0x0008950e ldr.w r3, [r5, 0x1f8] | r3 = *((r5 + 0x1f8));
| if (r3 != 0) {
0x00089512 cbz r3, 0x8951c |
0x00089514 ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x00089516 orr r3, r3, 0x1000 | r3 |= 0x1000;
0x0008951a strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
| }
0x0008951c lsls r3, r6, 0x1e | r3 = r6 << 0x1e;
| if (r3 != r6) {
0x0008951e bne.w 0x89690 | goto label_93;
| }
| label_9:
0x00089522 movs r3, 0 | r3 = 0;
0x00089524 strd r3, r3, [sp, 0x38] | __asm ("strd r3, r3, [sp, 0x38]");
| label_3:
0x00089528 sub.w r3, sl, 0x2d | r3 = sl - 0x2d;
0x0008952c vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x00089530 uxtb r3, r3 | r3 = (int8_t) r3;
0x00089532 movs r2, 0 | r2 = 0;
0x00089534 strd r8, sb, [r7, 0x28] | __asm ("strd r8, sb, [r7, 0x28]");
0x00089538 cmp r3, 0xc |
0x0008953a vstr d16, [r7, 0x10] | __asm ("vstr d16, [r7, 0x10]");
0x0008953e strh r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
| if (r3 > 0xc) {
0x00089540 bhi 0x895f2 | goto label_94;
| }
0x00089542 movw r2, 0x1f31 | r2 = 0x1f31;
0x00089546 lsr.w r3, r2, r3 | r3 = r2 >> r3;
0x0008954a lsls r4, r3, 0x1f | r4 = r3 << 0x1f;
| if (r4 >= r3) {
0x0008954c bpl 0x895f2 | goto label_94;
| }
0x0008954e ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089550 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
| if (r5 != 0) {
0x00089552 cbnz r5, 0x8955a | goto label_95;
| }
0x00089554 b 0x89560 | goto label_96;
| do {
0x00089556 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
| if (r5 == 0) {
0x00089558 cbz r5, 0x89560 | goto label_96;
| }
| label_95:
0x0008955a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0008955c lsls r0, r3, 0x12 | r0 = r3 << 0x12;
0x0008955e bmi 0x89556 |
| } while (r0 < r3);
| label_96:
0x00089560 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089562 ldr r6, [r3, 0x10] | r6 = *((r3 + 0x10));
| if (r6 != 0) {
0x00089564 cbnz r6, 0x8956c | goto label_97;
| }
0x00089566 b 0x89572 | goto label_98;
| do {
0x00089568 ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
| if (r6 == 0) {
0x0008956a cbz r6, 0x89572 | goto label_98;
| }
| label_97:
0x0008956c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0008956e lsls r1, r3, 0x12 | r1 = r3 << 0x12;
0x00089570 bmi 0x89568 |
| } while (r1 < r3);
| label_98:
0x00089572 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00089574 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00089576 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00089578 ldr r0, [sp, 0x20] | r0 = x;
0x0008957a ands r3, r2 | r3 &= r2;
0x0008957c ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x0008957e ands r2, r1 | r2 &= r1;
0x00089580 add r1, sp, 0x70 | r1 += var_70h;
0x00089582 orrs r3, r2 | r3 |= r2;
0x00089584 str r1, [sp, 0x40] | var_40h = r1;
0x00089586 ite eq |
| if (r3 == r2) {
0x00089588 movweq r3, 0x3fff | __asm ("movweq r3, 0x3fff");
| }
| if (r3 != r2) {
0x0008958c mov.w r3, 0x800 | r3 = 0x800;
| }
0x00089590 str r3, [sp, 0x44] | var_44h = r3;
0x00089592 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00089594 cmp r3, 0 |
0x00089596 ittt gt |
| if (r3 <= 0) {
0x00089598 ldrgt r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| }
| if (r3 <= 0) {
0x0008959a addgt r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
| }
| if (r3 > 0) {
0x0008959e ldr r5, [r3, -0x8] | r5 = *((r3 - 0x8));
| }
0x000895a2 str r1, [sp] | *(sp) = r1;
0x000895a4 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [var_30h]");
0x000895a8 strd r5, sl, [sp, 4] | __asm ("strd r5, sl, [sp, 4]");
0x000895ac bl 0x4b2fc | fcn_0004b2fc (r0, r1, r2, r3, r4, r5);
0x000895b0 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000895b2 cmp r0, 0 |
| if (r0 == 0) {
0x000895b4 beq.w 0x89a9c | goto label_99;
| }
0x000895b8 vldr d16, [sp, 0x70] | __asm ("vldr d16, [sp, 0x70]");
0x000895bc add.w r3, r7, 0x14 | r3 = r7 + 0x14;
0x000895c0 cmp.w sl, 0x31 |
0x000895c4 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| if (sl == 0x31) {
0x000895c8 beq.w 0x8a30c | goto label_100;
| }
0x000895cc cmp.w sl, 0x32 |
| if (sl == 0x32) {
0x000895d0 beq.w 0x89cc4 | goto label_101;
| }
0x000895d4 cmp.w sl, 0x2d |
| if (sl == 0x2d) {
0x000895d8 beq.w 0x89cac | goto label_102;
| }
0x000895dc sub.w r2, sl, 0x35 | r2 = sl - 0x35;
0x000895e0 movs r3, 2 | r3 = 2;
0x000895e2 lsls r3, r2 | r3 <<= r2;
0x000895e4 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000895e6 ands r3, r2 | r3 &= r2;
0x000895e8 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x000895ea cmp r6, 0 |
| if (r6 != 0) {
0x000895ec bne.w 0x89aa6 | goto label_10;
| }
0x000895f0 b 0x89ac6 | goto label_11;
| label_94:
0x000895f2 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000895f4 ldrb r5, [r3] | r5 = *(r3);
0x000895f6 cmp r5, 0x30 |
| if (r5 != 0x30) {
0x000895f8 bne.w 0x8972e | goto label_103;
| }
0x000895fc ldrb.w r3, [fp, 8] | r3 = *(arg_8h);
0x00089600 cmp r3, 0x2c |
| if (r3 == 0x2c) {
0x00089602 beq.w 0x8a326 | goto label_104;
| }
| label_5:
0x00089606 ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x0008960a ldr r2, [sp, 0x18] | r2 = *(arg_18h);
0x0008960c add r3, r2 | r3 += r2;
| label_31:
0x0008960e ldrd r1, r2, [r3, 0x20] | __asm ("ldrd r1, r2, [r3, 0x20]");
0x00089612 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00089614 orrs r1, r0 | r1 |= r0;
0x00089616 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00089618 orrs r2, r0 | r2 |= r0;
0x0008961a strd r1, r2, [r3, 0x20] | __asm ("strd r1, r2, [r3, 0x20]");
| label_1:
0x0008961e ldr.w r2, [pc, 0xa08] |
0x00089622 ldr.w r3, [pc, 0xa00] | r3 = *(0x8a026);
0x00089626 add r2, pc | r2 = 0x113654;
0x00089628 ldr r3, [r2, r3] | r3 = imp.atan;
0x0008962a ldr r2, [r3] | r2 = imp.atan;
0x0008962c ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0008962e eors r2, r3 | r2 ^= r3;
0x00089630 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00089634 bne.w 0x8ae4e | goto label_105;
| }
0x00089638 add sp, 0x84 |
0x0008963a vpop {d8} | __asm ("vpop {d8}");
0x0008963e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_88:
0x00089642 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089644 strd r6, r6, [sp, 0x30] | __asm ("strd r6, r6, [sp, 0x30]");
0x00089648 ldrb.w sl, [r3] | sl = *(r3);
0x0008964c cmp.w sl, 0x31 |
| if (sl != 0x31) {
0x00089650 bne.w 0x894d2 | goto label_0;
| }
| label_89:
0x00089654 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00089656 mov r1, r3 | r1 = r3;
0x00089658 mov r4, r3 | r4 = r3;
0x0008965a bl 0x4a0cc | r0 = fcn_0004a0cc (r0, r1);
0x0008965e cmp r0, 0 |
| if (r0 != 0) {
0x00089660 bne 0x8961e | goto label_1;
| }
0x00089662 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x00089664 ldr.w sb, [r4, 0x14] | sb = *((r4 + 0x14));
0x00089668 lsls r2, r6, 0x13 | r2 = r6 << 0x13;
| if (r2 < r6) {
0x0008966a bmi.w 0x8a3d8 | goto label_106;
| }
0x0008966e cmp.w sb, 0 |
| if (sb == 0) {
0x00089672 beq.w 0x8a16a | goto label_107;
| }
0x00089676 mov r1, sb | r1 = sb;
0x00089678 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008967a bl 0x325d4 | fcn_000325d4 (r0, r1);
0x0008967e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00089680 orr.w r8, r0, r3 | r8 = r0 | r3;
0x00089684 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00089686 orr.w sb, r1, r3 | sb = r1 | r3;
| label_22:
0x0008968a strd r0, r1, [r7, 0x20] | __asm ("strd r0, r1, [r7, 0x20]");
0x0008968e b 0x8950e | goto label_2;
| label_93:
0x00089690 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089692 and r1, r6, 1 | r1 = r6 & 1;
0x00089696 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00089698 ldr.w r3, [r5, 0x200] | r3 = *((r5 + 0x200));
0x0008969c cmp r2, r3 |
| if (r2 == r3) {
0x0008969e beq.w 0x89eae | goto label_108;
| }
0x000896a2 ldr.w r0, [r5, 0x1fc] | r0 = *((r5 + 0x1fc));
0x000896a6 cmp r0, 1 |
| if (r0 <= 1) {
0x000896a8 ble.w 0x89c62 | goto label_109;
| }
0x000896ac add.w r5, r5, 0x200 | r5 += 0x200;
0x000896b0 movs r3, 1 | r3 = 1;
0x000896b2 b 0x896bc |
| while (r2 != r4) {
0x000896b4 adds r3, 1 | r3++;
0x000896b6 cmp r3, r0 |
| if (r3 == r0) {
0x000896b8 beq.w 0x89c62 | goto label_109;
| }
0x000896bc ldr r4, [r5, 4]! | r4 = *((r5 += 4));
0x000896c0 cmp r2, r4 |
0x000896c2 bne 0x896b4 |
| }
0x000896c4 movs r5, 1 | r5 = 1;
0x000896c6 sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x000896ca rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x000896ce lsl.w r2, r5, r2 | r2 = r5 << r2;
0x000896d2 lsr.w r0, r5, r0 | r0 = r5 >> r0;
0x000896d6 lsl.w r3, r5, r3 | r3 = r5 << r3;
0x000896da orrs r2, r0 | r2 |= r0;
| label_17:
0x000896dc cmp r1, 0 |
| if (r1 == 0) {
0x000896de beq.w 0x89eb4 | goto label_110;
| }
0x000896e2 orr.w r8, r8, r3 | r8 |= r3;
0x000896e6 orr.w sb, sb, r2 | sb |= r2;
0x000896ea lsr.w r1, r8, 1 | r1 = r8 >> 1;
0x000896ee subs r4, r3, 1 | r4 = r3 - 1;
0x000896f0 lsr.w r0, sb, 1 | r0 = sb >> 1;
0x000896f4 str r4, [sp, 0x38] | var_38h = r4;
0x000896f6 orr.w r1, r1, sb, lsl 31 | r1 |= (sb << 31);
0x000896fa adc r4, r2, -1 | __asm ("adc r4, r2, -1");
0x000896fe str r4, [sp, 0x3c] | var_3ch = r4;
0x00089700 cmp r1, r3 |
0x00089702 sbcs r0, r2 | __asm ("sbcs r0, r2");
| if (r1 <= r3) {
0x00089704 blo.w 0x89528 | goto label_3;
| }
| label_8:
0x00089708 ldr.w r2, [pc, 0x920] |
0x0008970c ldr.w r3, [pc, 0x914] | r3 = *(0x8a024);
0x00089710 add r2, pc | r2 = 0x113740;
0x00089712 ldr r3, [r2, r3] | r3 = imp.atan;
0x00089714 ldr r2, [r3] | r2 = imp.atan;
0x00089716 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00089718 eors r2, r3 | r2 ^= r3;
0x0008971a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008971e bne.w 0x8ae4e | goto label_105;
| }
0x00089722 ldr.w r1, [pc, 0x90c] |
0x00089726 add r1, pc | r1 = 0x11375c;
0x00089728 b 0x89c92 | goto label_111;
| label_90:
0x0008972a mov r0, r1 | r0 = r1;
0x0008972c b 0x894e2 | goto label_4;
| label_103:
0x0008972e cmp r5, 0x2b |
| if (r5 == 0x2b) {
0x00089730 beq.w 0x89ed4 | goto label_112;
| }
0x00089734 cmp r5, 0x33 |
| if (r5 == 0x33) {
0x00089736 beq.w 0x89d1e | goto label_113;
| }
0x0008973a cmp r5, 0xac |
0x0008973c ldrb.w r0, [fp, 8] | r0 = *(arg_8h);
| if (r5 != 0xac) {
0x00089740 bne.w 0x89da0 | goto label_114;
| }
0x00089744 cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x00089746 bne.w 0x89606 | goto label_5;
| }
0x0008974a ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x0008974c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008974e ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x00089752 ldr r0, [r2] | r0 = *(r2);
0x00089754 str r0, [sp, 0x30] | var_30h = r0;
0x00089756 cmp.w sb, 0 |
| if (sb == 0) {
0x0008975a beq.w 0x89606 | goto label_5;
| }
0x0008975e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00089760 movs r5, 0 | r5 = 0;
0x00089762 ldr.w r6, [sb] | r6 = *(sb);
0x00089766 str r5, [sp] | *(sp) = r5;
0x00089768 mov r1, r3 | r1 = r3;
0x0008976a str r3, [sp, 0x34] | var_34h = r3;
0x0008976c mov r2, r6 | r2 = r6;
0x0008976e movs r3, 1 | r3 = 1;
0x00089770 bl 0x43a40 | r0 = fcn_00043a40 (r0, r1, r2, r3, r4, r5);
0x00089774 cmp r0, 0 |
| if (r0 == 0) {
0x00089776 beq.w 0x89d98 | goto label_28;
| }
0x0008977a ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0008977c lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 >= r3) {
0x0008977e bpl.w 0x89d98 | goto label_28;
| }
0x00089782 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x00089784 cmp r6, 2 |
0x00089786 ldrh r1, [r2] | r1 = *(r2);
0x00089788 ldrb r2, [r2, 2] | r2 = *((r2 + 2));
0x0008978a strh.w r1, [sp, 0x78] | var_78h = r1;
0x0008978e strb.w r2, [sp, 0x7a] | var_7ah = r2;
| if (r6 <= 2) {
0x00089792 ble.w 0x8ab4c | goto label_115;
| }
0x00089796 ldr r0, [sp, 0x14] | r0 = *(arg_14h);
0x00089798 ldr.w sb, [r0, 0x14] | sb = *((r0 + 0x14));
0x0008979c ldr.w r2, [sb, 0x28] | r2 = *((sb + 0x28));
0x000897a0 ldrb r1, [r2] | r1 = *(r2);
0x000897a2 cmp r1, 0x75 |
0x000897a4 itt ne |
| if (r1 == 0x75) {
0x000897a6 ldrbne r5, [r0] | r5 = *(r0);
| }
| if (r1 == 0x75) {
0x000897a8 ldrbne r0, [fp, 8] | r0 = *(arg_8h);
| }
| if (r1 != 0x75) {
0x000897ac bne.w 0x89da0 | goto label_114;
| }
0x000897b0 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000897b2 ldrb.w sl, [r2] | sl = *(r2);
0x000897b6 cmp.w sl, 0 |
| if (sl == 0) {
0x000897ba beq.w 0x89d98 | goto label_28;
| }
0x000897be ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x000897c0 cmp r2, 0 |
| if (r2 != 0) {
0x000897c2 bne.w 0x89d98 | goto label_28;
| }
0x000897c6 ldrb.w r2, [sp, 0x78] | r2 = var_78h;
0x000897ca cmp r2, sl |
| if (r2 == sl) {
0x000897cc beq.w 0x89d98 | goto label_28;
| }
0x000897d0 ldrb.w r2, [sp, 0x79] | r2 = var_79h;
0x000897d4 cmp r2, sl |
| if (r2 == sl) {
0x000897d6 beq.w 0x89d98 | goto label_28;
| }
| label_55:
0x000897da and r3, r3, 8 | r3 &= 8;
0x000897de ldr.w r5, [sb, 8] | r5 = *((sb + 8));
0x000897e2 str r3, [sp, 0x48] | var_48h = r3;
0x000897e4 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000897e8 strb.w sl, [sp, 0x7b] | var_7bh = sl;
0x000897ea adr r0, 0x1ec | r0 = 0x1ec;
0x000897ec str r3, [sp, 0x40] | var_40h = r3;
| if (r5 != 0) {
0x000897ee cbnz r5, 0x897fc | goto label_116;
| }
0x000897f0 b.w 0x8aff2 | goto label_117;
| do {
0x000897f4 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x000897f6 cmp r5, 0 |
| if (r5 == 0) {
0x000897f8 beq.w 0x8aff2 | goto label_117;
| }
| label_116:
0x000897fc ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000897fe ands r3, r3, 0x2000 | r3 &= 0x2000;
0x00089802 bne 0x897f4 |
| } while (r3 != r3);
0x00089804 mov r6, r3 | r6 = r3;
0x00089806 ldrb r3, [r5] | r3 = *(r5);
0x00089808 cmp r3, 0x9c |
0x0008980a str r3, [sp, 0x4c] | var_4ch = r3;
| if (r3 == 0x9c) {
0x0008980c beq.w 0x8aaa8 | goto label_118;
| }
0x00089810 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00089812 cmp r3, 0x75 |
| if (r3 != 0x75) {
0x00089814 bne.w 0x89d98 | goto label_28;
| }
0x00089818 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0008981a cmp r0, 0 |
| if (r0 == 0) {
0x0008981c beq.w 0x89d98 | goto label_28;
| }
0x0008981e strh r4, [r7, 0x14] | *((r7 + 0x14)) = r4;
0x00089820 ldrb.w sb, [r0] | sb = *(r0);
0x00089824 mov r4, r6 | r4 = r6;
0x00089826 cmp.w sb, 0 |
| if (sb == 0) {
0x0008982a beq.w 0x89d98 | goto label_28;
| }
| label_78:
0x0008982e ldrb.w r1, [sp, 0x78] | r1 = var_78h;
0x00089832 mov r3, sb | r3 = sb;
0x00089834 ldrb.w lr, [sp, 0x79] | lr = var_79h;
0x00089838 mov.w r8, 0 | r8 = 0;
0x0008983c ldrb.w ip, [sp, 0x7a] | ip = var_7ah;
0x00089840 b 0x8984e |
| while (sl != r3) {
| label_53:
0x00089842 ldrb.w r3, [r0, r8] | r3 = *((r0 + r8));
0x00089846 mov r6, r8 | r6 = r8;
0x00089848 cmp r3, 0 |
| if (r3 == 0) {
0x0008984a beq.w 0x8afd0 | goto label_119;
| }
0x0008984e cmp r1, r3 |
| if (r1 == r3) {
0x00089850 beq.w 0x8ab9e | goto label_120;
| }
0x00089854 cmp lr, r3 |
| if (lr == r3) {
0x00089856 beq.w 0x8ab9e | goto label_120;
| }
0x0008985a cmp ip, r3 |
| if (ip == r3) {
0x0008985c beq.w 0x8ab9e | goto label_120;
| }
0x00089860 cmp sl, r3 |
0x00089862 add.w r2, r8, 1 | r2 = r8 + 1;
0x00089866 it ne |
| if (sl == r3) {
0x00089868 movne r8, r2 | r8 = r2;
| }
0x0008986a bne 0x89842 |
| }
0x0008986c ldrb r3, [r0, r2] | r3 = *((r0 + r2));
0x0008986e mov r6, r2 | r6 = r2;
0x00089870 cmp r3, 0 |
| if (r3 != 0) {
0x00089872 bne.w 0x8aa86 | goto label_121;
| }
| label_85:
0x00089876 mov r8, r2 | r8 = r2;
0x00089878 movs r3, 0 | r3 = 0;
| label_58:
0x0008987a adds r2, r0, r6 | r2 = r0 + r6;
0x0008987c ldrb ip, [r2, -0x1] | ip = *((r2 - 0x1));
0x00089880 cmp.w ip, 0xff |
| if (ip == 0xff) {
0x00089884 beq.w 0x8aba6 | goto label_122;
| }
0x00089888 cmp.w r8, 1 |
| if (r8 == 1) {
0x0008988c beq.w 0x8ae2c | goto label_123;
| }
| label_70:
0x00089890 cmp r1, r3 |
0x00089892 ite eq |
| if (r1 != r3) {
0x00089894 ldrbeq r3, [r2, 1] | r3 = *((r2 + 1));
| }
| if (r1 == r3) {
0x00089896 movne r3, 0 | r3 = 0;
| }
0x00089898 str r0, [sp, 0x68] | var_68h = r0;
0x0008989a itt eq |
| if (r1 == r3) {
0x0008989c clzeq r3, r3 | __asm ("clzeq r3, r3");
| }
| if (r1 == r3) {
0x000898a0 lsrs r3, r3, 5 | r3 >>= 5;
| }
0x000898a2 str r3, [sp, 0x34] | var_34h = r3;
0x000898a4 blx 0x65dc | strcmp (r0, r1);
0x000898a8 add r3, sp, 0x68 | r3 += var_68h;
0x000898aa bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x000898ae mov r2, r3 | r2 = r3;
0x000898b0 str r0, [sp, 0x6c] | var_6ch = r0;
0x000898b2 str r3, [sp, 0x50] | var_50h = r3;
0x000898b4 movs r1, 0x75 | r1 = 0x75;
0x000898b6 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000898b8 movs r3, 0 | r3 = 0;
0x000898ba bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x000898be mov sb, r0 | sb = r0;
0x000898c0 cmp r0, 0 |
| if (r0 == 0) {
0x000898c2 beq 0x89946 | goto label_76;
| }
0x000898c4 ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x000898c6 movs r3, 0 | r3 = 0;
0x000898c8 strb r3, [r0, r6] | *((r0 + r6)) = r3;
0x000898ca mov r6, r0 | r6 = r0;
0x000898cc str r0, [sp, 0x44] | var_44h = r0;
0x000898ce b 0x898d2 |
| while (r8 > r3) {
0x000898d0 mov r6, r2 | r6 = r2;
0x000898d2 ldrb r1, [r0, r3] | r1 = *((r0 + r3));
0x000898d4 mov r2, r6 | r2 = r6;
0x000898d6 cmp r1, sl |
0x000898d8 itt eq |
| if (r1 != sl) {
0x000898da addeq r3, 1 | r3++;
| }
| if (r1 != sl) {
0x000898dc ldrbeq r1, [r0, r3] | r1 = *((r0 + r3));
| }
0x000898de adds r3, 1 | r3++;
0x000898e0 cmp r8, r3 |
0x000898e2 strb r1, [r2], 1 | *(r2) = r1;
| r2++;
0x000898e6 bgt 0x898d0 |
| }
0x000898e8 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000898ea mov r3, r6 | r3 = r6;
0x000898ec str r6, [sp, 0x54] | var_54h = r6;
0x000898ee rsb.w r6, r2, 1 | r6 = 1 - r2;
0x000898f2 add r6, r3 | r6 += r3;
0x000898f4 movs r3, 0 | r3 = 0;
0x000898f6 strb r3, [r2, r6] | *((r2 + r6)) = r3;
0x000898f8 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000898fa ldrb r3, [r3] | r3 = *(r3);
0x000898fc cmp r3, 0xa7 |
| if (r3 == 0xa7) {
0x000898fe beq.w 0x8aeb2 | goto label_124;
| }
| label_75:
0x00089902 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00089904 movs r3, 1 | r3 = 1;
0x00089906 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00089908 mov r2, r6 | r2 = r6;
0x0008990a bl 0x215fc | r0 = fcn_000215fc (r0, r1, r2, r3);
0x0008990e cmp r0, 0 |
| if (r0 > 0) {
0x00089910 bgt.w 0x8ae3c | goto label_125;
| }
0x00089914 cmp r6, 1 |
| if (r6 == 1) {
0x00089916 bne 0x89922 |
0x00089918 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008991a ldrb r3, [r3] | r3 = *(r3);
0x0008991c cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x0008991e beq.w 0x8ae3c | goto label_125;
| }
| }
0x00089922 mov r2, r6 | r2 = r6;
0x00089924 ldr r6, [sp, 0x54] | r6 = var_54h;
0x00089926 movs r3, 1 | r3 = 1;
0x00089928 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0008992a ldr r0, [sp, 0x44] | r0 = var_44h;
0x0008992c ldrb.w r8, [r6] | r8 = *(r6);
0x00089930 add.w ip, r8, r3 |
0x00089934 strb.w ip, [r6] | *(r6) = ip;
0x00089938 bl 0x215fc | r0 = fcn_000215fc (r0, r1, r2, r3);
0x0008993c cmp r0, 0 |
0x0008993e strb.w r8, [r6] | *(r6) = r8;
| if (r0 > 0) {
0x00089942 bgt.w 0x8ae3c | goto label_125;
| }
| label_76:
0x00089946 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00089948 cmp r3, 0x9c |
| if (r3 == 0x9c) {
0x0008994a beq.w 0x8af20 | goto label_126;
| }
| if (r4 != 0) {
| label_79:
0x0008994e cbz r4, 0x89956 |
0x00089950 mov r0, r4 | r0 = r4;
0x00089952 bl 0x32bd0 | fcn_00032bd0 (r0);
| }
0x00089956 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089958 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008995a ldr.w r8, [r3, 0x18] | r8 = *((r3 + 0x18));
0x0008995e cmp.w sb, 0 |
| if (sb == 0) {
0x00089962 beq.w 0x8ae92 | goto label_127;
| }
0x00089966 movs r3, 0 | r3 = 0;
0x00089968 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008996a mov r1, sb | r1 = sb;
0x0008996c mov r2, r3 | r2 = r3;
0x0008996e bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x00089972 mov r6, r0 | r6 = r0;
| label_73:
0x00089974 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00089976 cmp r3, 0 |
| if (r3 == 0) {
0x00089978 beq.w 0x8aa64 | goto label_128;
| }
0x0008997c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008997e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x00089982 cbnz r3, 0x899a0 |
0x00089984 ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x00089986 cmp r5, 0 |
| if (r5 == 0) {
0x00089988 beq.w 0x8ae82 | goto label_129;
| }
0x0008998c mov r0, r5 | r0 = r5;
0x0008998e blx 0x65dc | r0 = strcmp (r0, r1);
0x00089992 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00089996 subs r3, 1 | r3--;
0x00089998 ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x0008999a add r3, r5 | r3 += r5;
| label_72:
0x0008999c adds r2, 1 | r2++;
0x0008999e strb r2, [r3] | *(r3) = r2;
| }
0x000899a0 ldr.w r3, [pc, 0x690] |
0x000899a4 add r3, pc | r3 = 0x1139dc;
0x000899a6 add.w r7, r3, 0x780 | r7 = r3 + 0x780;
| label_52:
0x000899aa cmp.w r8, 0 |
| if (r8 == 0) {
0x000899ae beq.w 0x8ab58 | goto label_130;
| }
0x000899b2 movs r3, 0 | r3 = 0;
0x000899b4 mov r1, r8 | r1 = r8;
0x000899b6 mov r2, r3 | r2 = r3;
0x000899b8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000899ba bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
0x000899be ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000899c0 mov r1, r0 | r1 = r0;
0x000899c2 mov r2, r7 | r2 = r7;
0x000899c4 mov r0, r4 | r0 = r4;
0x000899c6 bl 0x386e4 | fcn_000386e4 (r0, r1, r2);
0x000899ca movs r1, 0x39 | r1 = 0x39;
0x000899cc mov r2, r0 | r2 = r0;
0x000899ce mov r3, sb | r3 = sb;
0x000899d0 mov r0, r4 | r0 = r4;
0x000899d2 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x000899d6 mov r1, r0 | r1 = r0;
0x000899d8 cmp r0, 0 |
| if (r0 == 0) {
0x000899da beq.w 0x8aa8e | goto label_131;
| }
0x000899de ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000899e0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000899e2 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x000899e6 beq.w 0x8aa8e | goto label_131;
| }
| label_56:
0x000899ea ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x000899ec mov r0, fp | r0 = fp;
0x000899ee orrs r2, r3 | r2 |= r3;
0x000899f0 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x000899f2 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x000899f4 movw r2, 0x103 | r2 = 0x103;
0x000899f8 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000899fa str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
0x000899fc bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x00089a00 mov r1, fp | r1 = fp;
0x00089a02 mov r5, r0 | r5 = r0;
0x00089a04 mov r2, r0 | r2 = r0;
0x00089a06 ldr r0, [sp, 0x20] | r0 = x;
0x00089a08 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x00089a0c cmp.w r8, 0 |
| if (r8 != 0) {
0x00089a10 beq 0x89a20 |
| label_54:
0x00089a12 movs r3, 0 | r3 = 0;
0x00089a14 mov r1, r8 | r1 = r8;
0x00089a16 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00089a18 mov r2, r3 | r2 = r3;
0x00089a1a bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x00089a1e mov r8, r0 | r8 = r0;
| }
| label_57:
0x00089a20 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00089a22 mov r1, r8 | r1 = r8;
0x00089a24 mov r2, r7 | r2 = r7;
0x00089a26 mov r0, r4 | r0 = r4;
0x00089a28 bl 0x386e4 | fcn_000386e4 (r0, r1, r2);
0x00089a2c movs r1, 0x38 | r1 = 0x38;
0x00089a2e mov r2, r0 | r2 = r0;
0x00089a30 mov r3, r6 | r3 = r6;
0x00089a32 mov r0, r4 | r0 = r4;
0x00089a34 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x00089a38 mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x00089a3a cbz r0, 0x89a50 |
0x00089a3c ldr r0, [sp, 0x14] | r0 = *(arg_14h);
0x00089a3e ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00089a40 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x00089a44 beq 0x89a50 | goto label_132;
| }
| }
| label_132:
0x00089a50 movw r2, 0x103 | r2 = 0x103;
0x00089a54 mov r0, fp | r0 = fp;
0x00089a56 bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x00089a5a mov r1, fp | r1 = fp;
0x00089a5c mov r2, r0 | r2 = r0;
0x00089a5e mov r6, r0 | r6 = r0;
0x00089a60 ldr r0, [sp, 0x20] | r0 = x;
0x00089a62 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x00089a66 ldr r2, [sp, 0x18] | r2 = *(arg_18h);
0x00089a68 ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x00089a6c adds r7, r3, r2 | r7 = r3 + r2;
0x00089a6e ldr r2, [sp, 0x34] | r2 = var_34h;
0x00089a70 cmp r2, 0 |
| if (r2 == 0) {
0x00089a72 beq.w 0x89d98 | goto label_28;
| }
| label_99:
0x00089a9c cmp.w sl, 0x2d |
| if (sl == 0x2d) {
0x00089aa0 beq.w 0x89cb4 | goto label_133;
| }
| if (r6 != 0) {
0x00089aa4 cbz r6, 0x89abe |
| label_10:
0x00089aa6 ldrd r2, r3, [r7, 0x20] | __asm ("ldrd r2, r3, [r7, 0x20]");
0x00089aaa ldr r0, [sp, 0x20] | r0 = x;
0x00089aac stm.w sp, {r1, r6, sl} | *(sp) = r1;
| *((sp + 4)) = r6;
| *((sp + 8)) = sl;
0x00089ab0 bl 0x4b2fc | r0 = fcn_0004b2fc (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x00089ab4 cbz r0, 0x89abe | goto label_134;
| }
0x00089ab6 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00089ab8 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 >= r3) {
0x00089aba bpl.w 0x8a108 | goto label_135;
| }
| }
| label_134:
0x00089abe cmp.w sl, 0x32 |
| if (sl == 0x32) {
0x00089ac2 beq.w 0x89ce6 | goto label_136;
| }
| label_11:
0x00089ac6 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
| label_12:
0x00089ac8 ldrb r5, [r3] | r5 = *(r3);
0x00089aca sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x00089ace and r3, r3, 0xf7 | r3 &= 0xf7;
| label_26:
0x00089ad2 ldrb.w r0, [fp, 8] | r0 = *(arg_8h);
| label_13:
0x00089ad6 cmp r3, 0 |
| if (r3 != 0) {
0x00089ad8 bne.w 0x89c46 | goto label_137;
| }
0x00089adc ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089ade ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00089ae0 ldrb r6, [r2] | r6 = *(r2);
0x00089ae2 mov r1, r2 | r1 = r2;
0x00089ae4 cmp r6, 0xb0 |
0x00089ae6 ite eq |
| if (r6 != 0xb0) {
0x00089ae8 ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
| if (r6 == 0xb0) {
0x00089aea movne r3, r6 | r3 = r6;
| }
0x00089aec cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x00089aee beq.w 0x89ecc | goto label_138;
| }
0x00089af2 cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x00089af4 beq.w 0x89daa | goto label_139;
| }
| label_14:
0x00089af8 cmp r5, 0x31 |
| if (r5 == 0x31) {
0x00089afa beq.w 0x89c4c | goto label_140;
| }
0x00089afe cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x00089b00 bne.w 0x89606 | goto label_5;
| }
| label_16:
0x00089b04 cmp r5, 0xab |
0x00089b06 it ne |
| if (r5 != 0xab) {
0x00089b08 cmpne r5, 0x34 | __asm ("cmpne r5, 0x34");
| }
0x00089b0a ite eq |
| if (r5 != 0xab) {
0x00089b0c moveq sl, 1 | sl = 1;
| }
| if (r5 == 0xab) {
0x00089b0e lsrne r1, r0, 8 | r1 = r0 >> 8;
| }
0x00089b10 mov.w sl, 0 | sl = 0;
0x00089b14 cmp r5, 0x33 |
0x00089b16 ite ne |
| if (r5 == 0x33) {
0x00089b18 movne r3, sl | r3 = sl;
| }
| if (r5 != 0x33) {
0x00089b1a orreq r3, sl, 1 | r3 = sl | 1;
| }
0x00089b1e cmp r3, 0 |
| if (r3 == 0) {
0x00089b20 beq.w 0x89606 | goto label_5;
| }
0x00089b24 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089b26 ldrd r6, sb, [r3, 0xc] | __asm ("ldrd r6, sb, [r3, 0xc]");
0x00089b2a ldrb r3, [r6] | r3 = *(r6);
0x00089b2c cmp r3, 0xa7 |
0x00089b2e it ne |
| if (r3 == 0xa7) {
0x00089b30 movne r8, 0 | r8 = 0;
| }
| if (r3 == 0xa7) {
0x00089b34 beq.w 0x8a206 | goto label_141;
| }
| label_24:
0x00089b38 cmp.w sb, 0 |
| if (sb != 0) {
0x00089b3c beq 0x89b48 |
0x00089b3e ldrb.w r3, [sb] | r3 = *(sb);
0x00089b42 cmp r3, 0xa7 |
| if (r3 == 0xa7) {
0x00089b44 beq.w 0x8a702 | goto label_142;
| }
| }
| label_39:
0x00089b48 cmp r5, 0x34 |
0x00089b4a itet ne |
| if (r5 != 0x34) {
0x00089b4c rsbne sl, sl, 0x46 | __asm ("rsbne sl, sl, 0x46");
| }
| if (r5 == 0x34) {
0x00089b50 movne sl, 0x44 | sl = 0x44;
| }
| if (r5 != 0x34) {
0x00089b54 uxtb.w sl, sl | sl = (int8_t) sl;
| }
0x00089b58 cmp.w r8, 1 |
| if (r8 != 1) {
0x00089b5c bne.w 0x89606 | goto label_5;
| }
| label_23:
0x00089b60 mov r4, sb | r4 = sb;
0x00089b62 str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x00089b66 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x00089b6a mov.w r8, 0 | r8 = 0;
0x00089b6e ldr.w sl, [sp, 0x14] | sl = *(arg_14h);
| if (r4 == 0) {
| label_40:
0x00089b72 cbz r4, 0x89bae | goto label_143;
| }
| label_6:
0x00089b74 mov r1, r4 | r1 = r4;
0x00089b76 mov r0, sb | r0 = sb;
0x00089b78 bl 0x32768 | fcn_00032768 (r0, r1);
0x00089b7a ldc2l p6, c4, [r6, 0x1c]! | __asm ("ldc2l p6, c4, [r6, 0x1c]!");
0x00089b7e mov r5, r1 | r5 = r1;
0x00089b80 cmp r6, 0 |
| if (r6 == 0) {
0x00089b82 beq.w 0x8a222 | goto label_144;
| }
0x00089b86 mov r1, r6 | r1 = r6;
0x00089b88 mov r0, sb | r0 = sb;
0x00089b8a bl 0x32768 | fcn_00032768 (r0, r1);
0x00089b8e ands r0, r7 | r0 &= r7;
0x00089b90 ands r1, r5 | r1 &= r5;
0x00089b92 orrs r0, r1 | r0 |= r1;
| if (r0 == r1) {
0x00089b94 beq.w 0x8a222 | goto label_144;
| }
| label_7:
0x00089b98 cmp.w r8, 1 |
0x00089b9c mov r3, r6 | r3 = r6;
0x00089b9e mov r6, r4 | r6 = r4;
| if (r8 != 1) {
0x00089ba0 bne.w 0x89606 | goto label_5;
| }
0x00089ba4 mov r4, r3 | r4 = r3;
0x00089ba6 mov.w r8, 0 | r8 = 0;
0x00089baa cmp r4, 0 |
| if (r4 != 0) {
0x00089bac bne 0x89b74 | goto label_6;
| }
| if (r6 != 0) {
| label_143:
0x00089bae cbz r6, 0x89bb8 |
0x00089bb0 mov r1, r6 | r1 = r6;
0x00089bb2 mov r0, sb | r0 = sb;
0x00089bb4 bl 0x32768 | fcn_00032768 (r0, r1);
| }
0x00089bb8 movs r3, 0 | r3 = 0;
0x00089bba mov r7, r3 | r7 = r3;
0x00089bbc mov r5, r3 | r5 = r3;
| label_25:
0x00089bbe movs r1, 0x2e | r1 = 0x2e;
0x00089bc0 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00089bc2 movs r2, 0 | r2 = 0;
0x00089bc4 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x00089bc8 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00089bcc mov r1, r0 | r1 = r0;
0x00089bce cmp r0, 0 |
0x00089bd0 ite eq |
| if (r0 != 0) {
0x00089bd2 moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x00089bd4 andne r3, r3, 1 | r3 &= 1;
| }
| if (r3 != 0) {
0x00089bd8 cbz r3, 0x89be8 |
0x00089bda ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00089bdc orr r3, r3, 1 | r3 |= 1;
0x00089be0 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x00089be2 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00089be6 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
| }
0x00089be8 movs r2, 3 | r2 = 3;
0x00089bea mov r0, fp | r0 = fp;
0x00089bec bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x00089bf0 ldr.w r2, [fp, 0x18] | r2 = *(arg_18h);
0x00089bf4 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00089bf8 ldr r1, [sp, 0x18] | r1 = *(arg_18h);
0x00089bfa add.w r3, r2, r0, lsl 4 | r3 = r2 + (r0 << 4);
0x00089bfe add r2, r1 | r2 += r1;
0x00089c00 ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x00089c02 strd r7, r5, [r3, 0x20] | __asm ("strd r7, r5, [r3, 0x20]");
0x00089c06 str r1, [r3, 0x14] | *((r3 + 0x14)) = r1;
0x00089c08 ldrsh.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x00089c0c str r1, [r3, 0x18] | *((r3 + 0x18)) = r1;
0x00089c0e ldr r1, [sp, 0x20] | r1 = x;
0x00089c10 strb r1, [r3, 0xf] | *((r3 + 0xf)) = r1;
0x00089c12 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00089c14 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x00089c16 ldrsh.w r1, [r2, 8] | r1 = *((r2 + 8));
0x00089c1a strh r1, [r3, 8] | *((r3 + 8)) = r1;
0x00089c1c movs r1, 0x40 | r1 = 0x40;
0x00089c1e strh r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x00089c20 ldrh r1, [r2, 0xa] | r1 = *((r2 + 0xa));
0x00089c22 orr r1, r1, 8 | r1 |= 8;
0x00089c26 strh r1, [r2, 0xa] | *((r2 + 0xa)) = r1;
0x00089c28 ldrb r1, [r2, 0xe] | r1 = *((r2 + 0xe));
0x00089c2a adds r1, 1 | r1++;
0x00089c2c strb r1, [r2, 0xe] | *((r2 + 0xe)) = r1;
0x00089c2e ldrd r0, r1, [r2, 0x28] | __asm ("ldrd r0, r1, [r2, 0x28]");
0x00089c32 strd r0, r1, [r3, 0x28] | __asm ("strd r0, r1, [r3, 0x28]");
0x00089c36 b 0x89b98 | goto label_7;
| label_92:
0x00089c38 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00089c3a orr.w r8, r0, r3 | r8 = r0 | r3;
0x00089c3e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00089c40 orr.w sb, r1, r3 | sb = r1 | r3;
0x00089c44 b 0x8950e | goto label_2;
| label_137:
0x00089c46 cmp r5, 0x31 |
| if (r5 != 0x31) {
0x00089c48 bne.w 0x8a176 | goto label_145;
| }
| label_140:
0x00089c4c ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00089c4e cmp r3, 0 |
| if (r3 != 0) {
0x00089c50 bne.w 0x89606 | goto label_5;
| }
0x00089c54 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089c56 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00089c58 ldrb r3, [r2] | r3 = *(r2);
0x00089c5a cmp r3, 0xb1 |
| if (r3 != 0xb1) {
0x00089c5c bne.w 0x89606 | goto label_5;
| }
0x00089c60 b 0x89e14 | goto label_146;
| label_109:
0x00089c62 cmp r1, 0 |
| if (r1 != 0) {
0x00089c64 bne.w 0x89708 | goto label_8;
| }
| label_18:
0x00089c68 ldr r2, [sp, 0x20] | r2 = x;
0x00089c6a ldr r3, [r2] | r3 = *(r2);
0x00089c6c cmp r3, 0 |
| if (r3 > 0) {
0x00089c6e ble 0x89ca2 |
0x00089c70 ldrb.w r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x00089c74 lsls r5, r3, 0x19 | r5 = r3 << 0x19;
| if (r5 >= r3) {
0x00089c76 bpl 0x89ca2 | goto label_147;
| }
0x00089c78 ldr r2, [pc, 0x3bc] |
0x00089c7a ldr r3, [pc, 0x3a8] | r3 = *(0x8a026);
0x00089c7c add r2, pc | r2 = 0x113cb8;
0x00089c7e ldr r3, [r2, r3] | r3 = imp.atan;
0x00089c80 ldr r2, [r3] | r2 = imp.atan;
0x00089c82 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00089c84 eors r2, r3 | r2 ^= r3;
0x00089c86 mov.w r3, 0 | r3 = 0;
0x00089c88 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x00089c8a bne.w 0x8ae4e | goto label_105;
| }
0x00089c8e ldr r1, [pc, 0x3ac] |
0x00089c90 add r1, pc | r1 = 0x113cd2;
| label_111:
0x00089c92 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00089c94 add sp, 0x84 |
0x00089c96 vpop {d8} | __asm ("vpop {d8}");
0x00089c9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00089c9e b.w 0x37f78 | void (*0x37f78)() ();
| }
| label_147:
0x00089ca2 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089ca4 bic r6, r6, 2 | r6 = BIT_MASK (r6, 2);
0x00089ca8 str r6, [r3, 4] | *((r3 + 4)) = r6;
0x00089caa b 0x89522 | goto label_9;
| label_102:
0x00089cac ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089cae and r3, r3, 0x80 | r3 &= 0x80;
0x00089cb2 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| label_133:
0x00089cb4 ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x00089cb6 orr r3, r3, 0x800 | r3 |= 0x800;
0x00089cba strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
0x00089cbc cmp r6, 0 |
| if (r6 != 0) {
0x00089cbe bne.w 0x89aa6 | goto label_10;
| }
0x00089cc2 b 0x89ac6 | goto label_11;
| label_101:
0x00089cc4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00089cc6 and r3, r3, 0x100 | r3 &= 0x100;
0x00089cca strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| if (r6 != 0) {
0x00089ccc cbz r6, 0x89ce6 |
0x00089cce ldrd r2, r3, [r7, 0x20] | __asm ("ldrd r2, r3, [r7, 0x20]");
0x00089cd2 ldr r0, [sp, 0x20] | r0 = x;
0x00089cd4 stm.w sp, {r1, r6, sl} | *(sp) = r1;
| *((sp + 4)) = r6;
| *((sp + 8)) = sl;
0x00089cd8 bl 0x4b2fc | r0 = fcn_0004b2fc (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x00089cdc cbz r0, 0x89ce6 | goto label_136;
| }
0x00089cde ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00089ce0 lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 >= r3) {
0x00089ce2 bpl.w 0x8a108 | goto label_135;
| }
| }
| label_136:
0x00089ce6 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089ce8 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x00089cea lsls r0, r6, 0x1f | r0 = r6 << 0x1f;
| if (r0 < r6) {
0x00089cec bmi.w 0x89ac8 | goto label_12;
| }
0x00089cf0 mov r0, r5 | r0 = r5;
0x00089cf2 bl 0x2329c | r0 = fcn_0002329c (r0);
0x00089cf6 cmp r0, 0 |
| if (r0 != 0) {
0x00089cf8 bne.w 0x89ac6 | goto label_11;
| }
0x00089cfc ldr r3, [pc, 0x340] |
0x00089cfe orr r6, r6, 0x20000000 | r6 |= 0x20000000;
0x00089d02 ldr r2, [sp, 0x14] | r2 = *(arg_14h);
0x00089d04 movs r5, 0xaa | r5 = 0xaa;
0x00089d06 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00089d0a add r3, pc | r3 = 0x113d4e;
0x00089d0c str r6, [r2, 4] | *((r2 + 4)) = r6;
0x00089d0e str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00089d10 strb r5, [r2] | *(r2) = r5;
0x00089d12 strh r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x00089d14 vstr d16, [r7, 0x28] | __asm ("vstr d16, [r7, 0x28]");
0x00089d18 ldrb.w r3, [fp, 8] | r3 = *(arg_8h);
0x00089d1c b 0x89ea6 | goto label_148;
| label_113:
0x00089d1e ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089d20 ldr r6, [r3, 0xc] | r6 = *((r3 + 0xc));
0x00089d22 ldrb r3, [r6] | r3 = *(r6);
0x00089d24 cmp r3, 0xa7 |
| if (r3 != 0xa7) {
0x00089d26 bne.w 0x89ea2 | goto label_149;
| }
0x00089d2a ldrsh.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x00089d2e cmp r3, 0 |
| if (r3 < 0) {
0x00089d30 blt.w 0x89ea2 | goto label_149;
| }
0x00089d34 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089d36 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00089d38 ands r8, r3, 1 | r8 = r3 & 1;
| if (r8 != r3) {
0x00089d3c bne.w 0x89ea2 | goto label_149;
| }
0x00089d40 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x00089d42 mov r3, r8 | r3 = r8;
0x00089d44 mov r2, r8 | r2 = r8;
0x00089d46 mov r1, r6 | r1 = r6;
0x00089d48 mov r0, r4 | r0 = r4;
0x00089d4a bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
0x00089d4e movs r2, 0x34 | r2 = 0x34;
0x00089d50 mov sb, r0 | sb = r0;
0x00089d52 movs r3, 0 | r3 = 0;
0x00089d54 mov r0, r4 | r0 = r4;
0x00089d56 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00089d5a mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00089d5c cbz r0, 0x89d7c |
0x00089d5e mov r2, r5 | r2 = r5;
0x00089d60 mov r1, r8 | r1 = r8;
0x00089d62 adds r0, 1 | r0++;
0x00089d64 blx 0x62ec | fcn_000062ec ();
0x00089d68 movs r3, 0x79 | r3 = 0x79;
0x00089d6a strb.w r3, [sl] | *(sl) = r3;
0x00089d6e movw r3, 0xffff | r3 = 0xffff;
0x00089d72 strh.w r3, [sl, 0x22] | *((sl + 0x22)) = r3;
0x00089d76 movs r3, 1 | r3 = 1;
0x00089d78 str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
| }
0x00089d7c mov r2, sb | r2 = sb;
0x00089d7e movs r1, 0x36 | r1 = 0x36;
0x00089d80 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00089d82 mov r3, sl | r3 = sl;
0x00089d84 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x00089d88 movs r2, 0x83 | r2 = 0x83;
0x00089d8a mov r1, r0 | r1 = r0;
0x00089d8c mov r0, fp | r0 = fp;
0x00089d8e bl 0x38bf0 | r0 = fcn_00038bf0 (r0, r1, r2, r3);
0x00089d92 cmp r0, 0 |
| if (r0 != 0) {
0x00089d94 bne.w 0x8ab02 | goto label_150;
| }
| label_28:
0x00089d98 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089d9a ldrb.w r0, [fp, 8] | r0 = *(arg_8h);
0x00089d9e ldrb r5, [r3] | r5 = *(r3);
| label_114:
0x00089da0 sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x00089da4 and r3, r3, 0xf7 | r3 &= 0xf7;
0x00089da8 b 0x89ad6 | goto label_13;
| label_139:
0x00089daa ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00089dac ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00089dae ldr.w r8, [r3] | r8 = *(r3);
| label_19:
0x00089db2 cmp.w r8, 1 |
| if (r8 <= 1) {
0x00089db6 ble.w 0x89af8 | goto label_14;
| }
0x00089dba ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089dbc ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00089dbe ldrb.w ip, [r3] | ip = *(r3);
0x00089dc2 cmp.w ip, 0xb0 |
0x00089dc6 it eq |
| if (ip != 0xb0) {
0x00089dc8 ldrbeq ip, [r3, 2] | ip = *((r3 + 2));
| }
0x00089dcc cmp.w ip, 0xb1 |
| if (ip == 0xb1) {
0x00089dd0 beq.w 0x8a31e | goto label_151;
| }
0x00089dd4 cmp.w ip, 0x8a |
| if (ip != 0x8a) {
0x00089dd8 bne.w 0x89af8 | goto label_14;
| }
0x00089ddc ldr r4, [r3, 0x14] | r4 = *((r3 + 0x14));
0x00089dde ldr.w ip, [r4, 0x1c] | ip = *((r4 + 0x1c));
0x00089de2 ldr.w ip, [ip] | ip = *(ip);
| label_27:
0x00089de6 cmp r8, ip |
| if (r8 != ip) {
0x00089de8 bne.w 0x89af8 | goto label_14;
| }
0x00089dec ldr r4, [r2, 4] | r4 = *((r2 + 4));
0x00089dee lsls r4, r4, 0x13 | r4 <<= 0x13;
| if (r4 >= r4) {
0x00089df0 bpl 0x89dfa | goto label_152;
| }
0x00089df2 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00089df4 lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 < r3) {
0x00089df6 bmi.w 0x89af8 | goto label_14;
| }
| label_152:
0x00089dfa cmp r0, 0x2c |
| if (r0 == 0x2c) {
0x00089dfc beq.w 0x8a4c2 | goto label_153;
| }
0x00089e00 cmp r5, 0x31 |
| if (r5 != 0x31) {
0x00089e02 bne.w 0x89606 | goto label_5;
| }
0x00089e06 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00089e08 cmp r3, 0 |
| if (r3 != 0) {
0x00089e0a bne.w 0x89606 | goto label_5;
| }
0x00089e0e cmp r6, 0xb1 |
| if (r6 != 0xb1) {
0x00089e10 bne.w 0x89606 | goto label_5;
| }
| label_146:
0x00089e14 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089e16 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00089e18 lsls r6, r3, 0x13 | r6 = r3 << 0x13;
| if (r6 >= r3) {
0x00089e1a bpl.w 0x89606 | goto label_5;
| }
0x00089e1e ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x00089e20 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00089e22 ldr r1, [r3, 0x34] | r1 = *((r3 + 0x34));
0x00089e24 cmp r1, 0 |
| if (r1 != 0) {
0x00089e26 bne.w 0x89606 | goto label_5;
| }
0x00089e2a ldr r5, [r3, 0x44] | r5 = *((r3 + 0x44));
0x00089e2c cmp r5, 0 |
| if (r5 != 0) {
0x00089e2e bne.w 0x89606 | goto label_5;
| }
0x00089e32 cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x00089e34 bne.w 0x89606 | goto label_5;
| }
| label_15:
0x00089e38 ldrb r3, [r2] | r3 = *(r2);
0x00089e3a cmp r3, 0xb0 |
0x00089e3c it eq |
| if (r3 != 0xb0) {
0x00089e3e ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x00089e40 cmp r3, 0xb1 |
0x00089e42 itt eq |
| if (r3 != 0xb1) {
0x00089e44 ldreq r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 != 0xb1) {
0x00089e46 ldreq r3, [r3] | r3 = *(r3);
| }
| if (r3 != 0xb1) {
0x00089e48 beq 0x89e56 |
0x00089e4a cmp r3, 0x8a |
0x00089e4c itett eq |
| if (r3 != 0x8a) {
0x00089e4e ldreq r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 == 0x8a) {
0x00089e50 movne r3, 1 | r3 = 1;
| }
| if (r3 != 0x8a) {
0x00089e52 ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r3 == 0x8a) {
0x00089e54 ldreq r3, [r3] | r3 = *(r3);
| goto label_154;
| }
| }
| label_154:
0x00089e56 cmp r5, r3 |
| if (r5 >= r3) {
0x00089e58 bge.w 0x89606 | goto label_5;
| }
0x00089e5c ldr r6, [sp, 0x14] | r6 = *(arg_14h);
0x00089e5e movw r2, 0x8002 | r2 = 0x8002;
0x00089e62 mov r0, fp | r0 = fp;
0x00089e64 adds r5, 1 | r5++;
0x00089e66 mov r1, r6 | r1 = r6;
0x00089e68 bl 0x38bf0 | r0 = fcn_00038bf0 (r0, r1, r2, r3);
0x00089e6c add.w r4, r0, r0, lsl 1 | r4 = r0 + (r0 << 1);
0x00089e70 ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x00089e74 mov r2, r0 | r2 = r0;
0x00089e76 ldr r0, [sp, 0x20] | r0 = x;
0x00089e78 lsls r4, r4, 4 | r4 <<= 4;
0x00089e7a mov r1, fp | r1 = fp;
0x00089e7c add r3, r4 | r3 += r4;
0x00089e7e str r5, [r3, 0x1c] | *((r3 + 0x1c)) = r5;
0x00089e80 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x00089e84 ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x00089e88 ldr r2, [sp, 0x18] | r2 = *(arg_18h);
0x00089e8a add r4, r3 | r4 += r3;
0x00089e8c add r3, r2 | r3 += r2;
0x00089e8e ldr r2, [sp, 0x24] | r2 = var_24h;
0x00089e90 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x00089e92 ldrsh.w r2, [r3, 8] | r2 = *((r3 + 8));
0x00089e96 strh r2, [r4, 8] | *((r4 + 8)) = r2;
0x00089e98 ldrb r2, [r3, 0xe] | r2 = *((r3 + 0xe));
0x00089e9a adds r2, 1 | r2++;
0x00089e9c strb r2, [r3, 0xe] | *((r3 + 0xe)) = r2;
0x00089e9e ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00089ea0 b 0x89e38 | goto label_15;
| label_149:
0x00089ea2 ldrb.w r3, [fp, 8] | r3 = *(arg_8h);
| label_148:
0x00089ea6 cmp r3, 0x2c |
| if (r3 != 0x2c) {
0x00089ea8 bne.w 0x89606 | goto label_5;
| }
0x00089eac b 0x89b04 | goto label_16;
| label_108:
0x00089eae movs r3, 1 | r3 = 1;
0x00089eb0 movs r2, 0 | r2 = 0;
0x00089eb2 b 0x896dc | goto label_17;
| label_110:
0x00089eb4 lsr.w r0, r8, 1 | r0 = r8 >> 1;
0x00089eb8 lsr.w r1, sb, 1 | r1 = sb >> 1;
0x00089ebc orr.w r0, r0, sb, lsl 31 | r0 |= (sb << 31);
0x00089ec0 cmp r0, r3 |
0x00089ec2 mov r3, r1 | r3 = r1;
0x00089ec4 sbcs r3, r2 | __asm ("sbcs r3, r2");
| if (r0 <= r3) {
0x00089ec6 blo.w 0x89522 | goto label_9;
| }
0x00089eca b 0x89c68 | goto label_18;
| label_138:
0x00089ecc ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00089ece ldr.w r8, [r3] | r8 = *(r3);
0x00089ed2 b 0x89db2 | goto label_19;
| label_112:
0x00089ed4 ldr.w r3, [fp] | r3 = *(fp);
0x00089ed8 ldr r1, [sp, 0x18] | r1 = *(arg_18h);
0x00089eda mov r2, r3 | r2 = r3;
0x00089edc str r3, [sp, 0x48] | var_48h = r3;
0x00089ede ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x00089ee2 ldr r2, [r2] | r2 = *(r2);
0x00089ee4 ldr r0, [r3, r1] | r0 = *((r3 + r1));
0x00089ee6 adds r4, r3, r1 | r4 = r3 + r1;
0x00089ee8 str r2, [sp, 0x50] | var_50h = r2;
0x00089eea str r0, [sp, 0x4c] | var_4ch = r0;
0x00089eec ldr r0, [r2] | r0 = *(r2);
0x00089eee str r0, [sp, 0x34] | var_34h = r0;
0x00089ef0 cmp r0, 0 |
| if (r0 == 0) {
0x00089ef2 beq.w 0x8a15c | goto label_155;
| }
0x00089ef6 mov.w r2, 0x1a8 | r2 = 0x1a8;
0x00089efa movs r3, 0 | r3 = 0;
0x00089efc bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00089f00 mov r8, r0 | r8 = r0;
| label_21:
0x00089f02 cmp.w r8, 0 |
| if (r8 == 0) {
0x00089f06 beq.w 0x8a3f0 | goto label_156;
| }
0x00089f0a mov.w r2, 0x1a8 | r2 = 0x1a8;
0x00089f0e movs r1, 0 | r1 = 0;
0x00089f10 mov r0, r8 | r0 = r8;
0x00089f12 blx 0x62ec | fcn_000062ec ();
0x00089f16 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x00089f18 mov.w r2, 0x180 | r2 = 0x180;
0x00089f1c movs r1, 0 | r1 = 0;
0x00089f1e str.w r8, [r4, 0x18] | __asm ("str.w r8, [r4, 0x18]");
0x00089f22 orr r3, r3, 0x10 | r3 |= 0x10;
0x00089f26 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x00089f28 add.w r3, r8, 0x20 | r3 = r8 + 0x20;
0x00089f2c mov r0, r3 | r0 = r3;
0x00089f2e blx 0x62ec | fcn_000062ec ();
0x00089f32 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00089f34 movs r1, 0 | r1 = 0;
0x00089f36 vldr d16, [pc, 0xe0] | __asm ("vldr d16, [0x0008a01c]");
0x00089f3a strb.w r1, [r8, 9] | *((r8 + 9)) = r1;
0x00089f3e str.w r2, [r8] | __asm ("str.w r2, [r8]");
0x00089f42 add.w r2, r8, 0xc | r2 = r8 + 0xc;
0x00089f46 str.w r1, [r8, 4] | __asm ("str.w r1, [r8, 4]");
0x00089f4a str.w r1, [r8, 0x14] | __asm ("str.w r1, [r8, 0x14]");
0x00089f4e vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00089f52 movs r2, 0x2b | r2 = 0x2b;
0x00089f54 str.w r0, [r8, 0x18] | __asm ("str.w r0, [r8, 0x18]");
0x00089f58 mov r0, r8 | r0 = r8;
0x00089f5a ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x00089f5c bl 0x38d78 | fcn_00038d78 (r0, r1, r2);
0x00089f60 ldr.w r5, [r8, 0xc] | r5 = *((r8 + 0xc));
0x00089f64 subs r5, 1 | r5--;
0x00089f66 it pl |
| if (r5 < 1) {
0x00089f68 ldrpl r6, [sp, 0x20] | r6 = x;
| }
| if (r5 < 1) {
0x00089f6a bmi.w 0x8aa26 | goto label_157;
| }
| do {
0x00089f6e mov r2, r5 | r2 = r5;
0x00089f70 mov r1, r8 | r1 = r8;
0x00089f72 subs r5, 1 | r5--;
0x00089f74 mov r0, r6 | r0 = r6;
0x00089f76 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x00089f7a adds r1, r5, 1 | r1 = r5 + 1;
0x00089f7c bne 0x89f6e |
| } while (r1 != r5);
0x00089f7e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00089f80 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00089f84 cmp r3, 0 |
| if (r3 != 0) {
0x00089f86 bne.w 0x8a2f4 | goto label_29;
| }
0x00089f8a ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00089f8e ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x00089f92 subs.w sb, r3, 1 | sb = r3 - 1;
| if (sb < r3) {
0x00089f96 bmi.w 0x8aa32 | goto label_158;
| }
0x00089f9a mov r3, r5 | r3 = r5;
0x00089f9c mov r6, r5 | r6 = r5;
0x00089f9e mov r7, r5 | r7 = r5;
0x00089fa0 str r5, [sp, 0x30] | var_30h = r5;
0x00089fa2 str.w fp, [sp, 0x40] | __asm ("str.w fp, [var_40h]");
0x00089fa6 add.w sl, r2, 0x30 | sl = r2 + 0x30;
0x00089faa ldr r5, [sp, 0x48] | r5 = var_48h;
0x00089fac mov fp, r3 |
0x00089fae vldr d8, [pc, 0x68] | __asm ("vldr d8, [0x0008a01c]");
0x00089fb2 strd r8, r4, [sp, 0x54] | __asm ("strd r8, r4, [sp, 0x54]");
0x00089fb6 b 0x89fce |
| while (r3 != r8) {
0x00089fb8 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x00089fbc and r4, r4, 1 | r4 &= 1;
0x00089fc0 it eq |
| if (r3 != r6) {
0x00089fc2 moveq r4, 0 | r4 = 0;
| }
| label_20:
0x00089fc4 add.w sl, sl, 0x30 | sl += 0x30;
0x00089fc8 cmp r4, 0 |
| if (r4 == 0) {
0x00089fca beq.w 0x8a7be | goto label_159;
| }
0x00089fce ldrh r0, [sl, -0x24] | r0 = *((sl - 0x24));
0x00089fd2 add.w sb, sb, -1 | sb += -1;
0x00089fd6 mvn.w r4, sb | r4 = ~sb;
0x00089fda lsrs r4, r4, 0x1f | r4 >>= 0x1f;
0x00089fdc ubfx r8, r0, 0, 9 | r8 = (r0 >> 0) & ((1 << 9) - 1);
0x00089fe0 cmp.w r8, 0 |
| if (r8 == 0) {
0x00089fe4 beq.w 0x8a232 | goto label_160;
| }
0x00089fe8 ldrh r8, [sl, -0x26] | r8 = *((sl - 0x26));
0x00089fec ands r3, r8, 8 | r3 = r8 & 8;
0x00089ff0 bne 0x89fb8 |
| }
0x00089ff2 ldr.w r2, [r5, 0x200] | r2 = *((r5 + 0x200));
0x00089ff6 ldr ip, [sl, -0x1c] | ip = *((sl - 0x1c));
0x00089ffa str r2, [sp, 0x44] | var_44h = r2;
0x00089ffc cmp ip, r2 |
| if (ip == r2) {
0x00089ffe beq.w 0x8a53c | goto label_161;
| }
0x0008a002 ldr.w lr, [r5, 0x1fc] |
0x0008a006 cmp.w lr, 1 |
| if (lr <= 1) {
0x0008a00a ble.w 0x8aa5c | goto label_162;
| }
0x0008a00e add.w r2, r5, 0x200 | r2 = r5 + 0x200;
0x0008a012 movs r3, 1 | r3 = 1;
0x0008a014 b 0x8a04c |
| while (ip != r1) {
0x0008a044 adds r3, 1 | r3++;
0x0008a046 cmp r3, lr |
| if (r3 == lr) {
0x0008a048 beq.w 0x8a3f6 | goto label_163;
| }
0x0008a04c ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0008a050 cmp ip, r1 |
0x0008a052 bne 0x8a044 |
| }
0x0008a054 mov.w ip, 1 |
0x0008a058 sub.w r1, r3, 0x20 | r1 = r3 - 0x20;
0x0008a05c rsb.w r2, r3, 0x20 | r2 = 0x20 - r3;
0x0008a060 lsl.w r1, ip, r1 | r1 = ip << r1;
0x0008a064 lsr.w r2, ip, r2 | r2 = ip >> r2;
0x0008a068 lsl.w ip, ip, r3 |
0x0008a06c orrs r1, r2 | r1 |= r2;
| label_30:
0x0008a06e tst.w r8, 2 |
| if ((r8 & 2) == 0) {
0x0008a072 beq 0x8a0dc | goto label_32;
| }
0x0008a074 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008a076 ldr r2, [sl, -0x20] | r2 = *((sl - 0x20));
0x0008a07a ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0008a07c add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0008a080 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x0008a084 ldr.w lr, [r3, 0x14] |
0x0008a088 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008a08a cmp r3, lr |
0x0008a08c it eq |
| if (r3 != lr) {
0x0008a08e orreq ip, ip, 1 |
| }
| if (r3 == lr) {
0x0008a092 beq 0x8a0dc | goto label_32;
| }
0x0008a094 ldr.w r8, [r5, 0x1fc] | r8 = *((r5 + 0x1fc));
0x0008a098 cmp.w r8, 1 |
| if (r8 <= 1) {
0x0008a09c ble 0x8a0dc | goto label_32;
| }
0x0008a09e add.w r2, r5, 0x200 | r2 = r5 + 0x200;
0x0008a0a2 movs r3, 1 | r3 = 1;
0x0008a0a4 str r5, [sp, 0x44] | var_44h = r5;
0x0008a0a6 b 0x8a0b0 |
| while (lr != r5) {
0x0008a0a8 adds r3, 1 | r3++;
0x0008a0aa cmp r8, r3 |
| if (r8 == r3) {
0x0008a0ac beq.w 0x8a544 | goto label_164;
| }
0x0008a0b0 ldr r5, [r2, 4]! | r5 = *((r2 += 4));
0x0008a0b4 cmp lr, r5 |
0x0008a0b6 bne 0x8a0a8 |
| }
0x0008a0b8 mov.w lr, 1 | lr = 1;
0x0008a0bc sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0008a0c0 rsb.w r8, r3, 0x20 | r8 = 0x20 - r3;
0x0008a0c4 lsl.w r2, lr, r2 | r2 = lr << r2;
0x0008a0c8 lsr.w r8, lr, r8 | r8 = lr >> r8;
0x0008a0cc ldr r5, [sp, 0x44] | r5 = var_44h;
0x0008a0ce lsl.w lr, lr, r3 | lr <<= r3;
0x0008a0d2 orr.w r2, r2, r8 | r2 |= r8;
0x0008a0d6 orr.w ip, lr, ip |
0x0008a0da orrs r1, r2 | r1 |= r2;
| label_32:
0x0008a0dc and.w r6, ip, r6 | r6 = ip & r6;
0x0008a0e0 ands r7, r1 | r7 &= r1;
0x0008a0e2 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0008a0e6 and r4, r4, 1 | r4 &= 1;
0x0008a0ea it eq |
| if (r3 != r6) {
0x0008a0ec moveq r4, 0 | r4 = 0;
| }
0x0008a0ee ands r0, r0, 2 | r0 &= 2;
0x0008a0f2 itete ne |
| if (r0 == r0) {
0x0008a0f4 ldrne r3, [sp, 0x30] | r3 = var_30h;
| }
| if (r0 != r0) {
0x0008a0f6 moveq fp, r0 |
| }
| if (r0 == r0) {
0x0008a0f8 andne fp, ip, fp |
| }
| if (r0 == r0) {
0x0008a0fc str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
| }
0x0008a100 itt ne |
| if (r0 == r0) {
0x0008a102 andne r3, r1 | r3 &= r1;
| }
| if (r0 == r0) {
0x0008a104 strne r3, [sp, 0x30] | var_30h = r3;
| }
0x0008a106 b 0x89fc4 | goto label_20;
| label_135:
0x0008a108 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0008a10a cmp r3, 0 |
| if (r3 < 0) {
0x0008a10c blt.w 0x8a3fe | goto label_165;
| }
0x0008a110 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0008a112 movs r3, 0 | r3 = 0;
0x0008a114 mov r2, r3 | r2 = r3;
0x0008a116 ldr r1, [sp, 0x14] | r1 = *(arg_14h);
0x0008a118 mov r0, r4 | r0 = r4;
0x0008a11a bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
0x0008a11e ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
0x0008a122 mov r6, r0 | r6 = r0;
0x0008a124 cmp r2, 0 |
| if (r2 == 0) {
0x0008a126 beq.w 0x8a548 | goto label_166;
| }
0x0008a12a cmp r0, 0 |
| if (r0 == 0) {
0x0008a12c beq.w 0x8961e | goto label_1;
| }
0x0008a130 ldr.w r1, [pc, 0xb00] |
0x0008a134 ldr.w r2, [pc, 0xb00] | r2 = *(0x8ac38);
0x0008a138 add r1, pc | r1 = 0x114d70;
0x0008a13a ldr r2, [r1, r2] | r2 = imp.atan;
0x0008a13c ldr r1, [r2] | r1 = imp.atan;
0x0008a13e ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0008a140 eors r1, r2 | r1 ^= r2;
0x0008a142 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0008a146 bne.w 0x8ae4e | goto label_105;
| }
0x0008a14a mov r1, r0 | r1 = r0;
0x0008a14c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008a14e add sp, 0x84 |
0x0008a150 vpop {d8} | __asm ("vpop {d8}");
0x0008a154 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008a158 b.w 0x30c30 | void (*0x30c30)() ();
| label_155:
0x0008a15c mov.w r0, 0x1a8 | r0 = 0x1a8;
0x0008a160 movs r1, 0 | r1 = 0;
0x0008a162 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x0008a166 mov r8, r0 | r8 = r0;
0x0008a168 b 0x89f02 | goto label_21;
| label_107:
0x0008a16a mov r0, sb | r0 = sb;
0x0008a16c ldrd r8, sb, [sp, 0x30] | __asm ("ldrd r8, sb, [var_30h]");
0x0008a170 mov r1, r0 | r1 = r0;
0x0008a172 b.w 0x8968a | goto label_22;
| label_145:
0x0008a176 cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x0008a178 bne.w 0x89606 | goto label_5;
| }
0x0008a17c cmp r5, 0xac |
| if (r5 != 0xac) {
0x0008a17e bne.w 0x89b04 | goto label_16;
| }
0x0008a182 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x0008a184 ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x0008a188 cmp.w sb, 0 |
| if (sb == 0) {
0x0008a18c beq.w 0x89606 | goto label_5;
| }
0x0008a190 ldr.w r3, [sb] | r3 = *(sb);
0x0008a194 cmp r3, 2 |
| if (r3 != 2) {
0x0008a196 bne.w 0x89606 | goto label_5;
| }
0x0008a19a ldr.w r6, [sb, 0x18] | r6 = *((sb + 0x18));
0x0008a19e ldrb r3, [r6] | r3 = *(r6);
0x0008a1a0 cmp r3, 0xa7 |
| if (r3 == 0xa7) {
0x0008a1a2 beq.w 0x8a73c | goto label_167;
| }
| label_41:
0x0008a1a6 ldr.w r6, [sb, 8] | r6 = *((sb + 8));
0x0008a1aa ldrb r3, [r6] | r3 = *(r6);
0x0008a1ac cmp r3, 0xa7 |
| if (r3 != 0xa7) {
0x0008a1ae bne.w 0x89606 | goto label_5;
| }
0x0008a1b2 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0008a1b4 cmp r3, 0 |
| if (r3 == 0) {
0x0008a1b6 beq.w 0x89606 | goto label_5;
| }
0x0008a1ba ldrb.w r2, [r3, 0x2b] | r2 = *((r3 + 0x2b));
0x0008a1be cmp r2, 1 |
| if (r2 != 1) {
0x0008a1c0 bne.w 0x89606 | goto label_5;
| }
0x0008a1c4 ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x0008a1c6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
| if (r3 != 0) {
0x0008a1c8 cbnz r3, 0x8a1d6 | goto label_168;
| }
0x0008a1ca b.w 0x8afec | goto label_169;
| do {
0x0008a1ce ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0008a1d0 cmp r3, 0 |
| if (r3 == 0) {
0x0008a1d2 beq.w 0x8afec | goto label_169;
| }
| label_168:
0x0008a1d6 ldr r2, [r3] | r2 = *(r3);
0x0008a1d8 cmp r1, r2 |
0x0008a1da bne 0x8a1ce |
| } while (r1 != r2);
0x0008a1dc ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0008a1de ldr r3, [r0] | r3 = *(r0);
0x0008a1e0 ldr r5, [r3, 0x48] | r5 = *((r3 + 0x48));
0x0008a1e2 cmp r5, 0 |
| if (r5 == 0) {
0x0008a1e4 beq.w 0x89606 | goto label_5;
| }
0x0008a1e8 ldr r2, [sp, 0x14] | r2 = *(arg_14h);
0x0008a1ea add r3, sp, 0x68 | r3 += var_68h;
0x0008a1ec str r3, [sp] | *(sp) = r3;
0x0008a1ee movs r1, 2 | r1 = 2;
0x0008a1f0 add r3, sp, 0x64 | r3 += var_64h;
0x0008a1f2 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0008a1f4 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0008a1f6 cmp r0, 0x95 |
| if (r0 <= 0x95) {
0x0008a1f8 ble.w 0x89606 | goto label_5;
| }
0x0008a1fc ldr.w sb, [sb, 0x18] | sb = *((sb + 0x18));
0x0008a200 uxtb.w sl, r0 | sl = (int8_t) r0;
0x0008a204 b 0x89b60 | goto label_23;
| label_141:
0x0008a206 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0008a208 mov r8, r3 | r8 = r3;
0x0008a20a cmp r3, 0 |
| if (r3 == 0) {
0x0008a20c beq.w 0x89b38 | goto label_24;
| }
0x0008a210 ldrb.w r8, [r3, 0x2b] | r8 = *((r3 + 0x2b));
0x0008a214 sub.w r8, r8, 1 | r8--;
0x0008a218 clz r8, r8 | r8 &= r8;
0x0008a21c lsr.w r8, r8, 5 | r8 >>= 5;
0x0008a220 b 0x89b38 | goto label_24;
| label_144:
0x0008a222 movs r3, 0 | r3 = 0;
0x0008a224 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008a226 mov r2, r3 | r2 = r3;
0x0008a228 mov r1, r4 | r1 = r4;
0x0008a22a bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0008a22e mov r3, r0 | r3 = r0;
0x0008a230 b 0x89bbe | goto label_25;
| label_160:
0x0008a232 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0008a234 mov.w r2, 0x1a0 | r2 = 0x1a0;
0x0008a238 movs r3, 0 | r3 = 0;
0x0008a23a bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x0008a23e mov fp, r0 |
0x0008a240 cmp r0, 0 |
| if (r0 == 0) {
0x0008a242 beq.w 0x8a3c8 | goto label_170;
| }
0x0008a246 ldrh r3, [sl, -0x26] | r3 = *((sl - 0x26));
0x0008a24a mov.w r2, 0x400 | r2 = 0x400;
0x0008a24e strh r2, [sl, -0x24] | *((sl - 0x24)) = r2;
0x0008a252 mov.w r2, -1 | r2 = -1;
0x0008a254 adds r2, 0xff | r2 += 0xff;
0x0008a256 mov r1, r8 | r1 = r8;
0x0008a258 str r0, [sl, -0x18] | *((sl - 0x18)) = r0;
0x0008a25c orr r3, r3, 0x20 | r3 |= 0x20;
0x0008a260 str r2, [sl, -0x1c] | *((sl - 0x1c)) = r2;
0x0008a264 strh r3, [sl, -0x26] | *((sl - 0x26)) = r3;
0x0008a268 add.w r3, r0, 0x20 | r3 = r0 + 0x20;
0x0008a26c mov r0, r3 | r0 = r3;
0x0008a26e mov.w r2, 0x180 | r2 = 0x180;
0x0008a272 blx 0x62ec | fcn_000062ec ();
0x0008a276 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008a278 ldr r2, [r2] | r2 = *(r2);
0x0008a27a strb.w r8, [fp, 9] | *(arg_9h) = r8;
0x0008a27e str.w r8, [fp, 4] | __asm ("str.w r8, [arg_44h]");
0x0008a282 str.w r2, [fp] | __asm ("str.w r2, [fp]");
0x0008a286 add.w r2, fp, 0xc | r2 += arg_ch;
0x0008a28a str.w r8, [fp, 0x14] | __asm ("str.w r8, [arg_14h]");
0x0008a28e ldr r1, [sl, -0x30] | r1 = *((sl - 0x30));
0x0008a292 vst1.32 {d8}, [r2] | __asm ("vst1.32 {d8}, [r2]");
0x0008a296 movs r2, 0x2c | r2 = 0x2c;
0x0008a298 str.w r0, [fp, 0x18] | __asm ("str.w r0, [arg_18h]");
0x0008a29c mov r0, fp | r0 = fp;
0x0008a29e bl 0x38d78 | fcn_00038d78 (r0, r1, r2);
0x0008a2a2 ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x0008a2a6 subs.w r8, r3, 1 | r8 = r3 - 1;
| if (r8 < r3) {
0x0008a2aa bmi 0x8a2c6 | goto label_171;
| }
0x0008a2ac str r4, [sp, 0x30] | var_30h = r4;
0x0008a2ae mov r4, r8 | r4 = r8;
0x0008a2b0 ldr.w r8, [sp, 0x20] | r8 = x;
| do {
0x0008a2b4 mov r2, r4 | r2 = r4;
0x0008a2b6 mov r1, fp | r1 = fp;
0x0008a2b8 subs r4, 1 | r4--;
0x0008a2ba mov r0, r8 | r0 = r8;
0x0008a2bc bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0008a2c0 adds r2, r4, 1 | r2 = r4 + 1;
0x0008a2c2 bne 0x8a2b4 |
| } while (r2 != r4);
0x0008a2c4 ldr r4, [sp, 0x30] | r4 = var_30h;
| label_171:
0x0008a2c6 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008a2c8 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_44h]");
0x0008a2cc ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008a2ce ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008a2d2 cmp r3, 0 |
| if (r3 == 0) {
0x0008a2d4 beq.w 0x8a63e | goto label_172;
| }
| label_35:
0x0008a2d8 ldrd r8, r4, [sp, 0x54] | __asm ("ldrd r8, r4, [var_54h]");
0x0008a2dc mov.w r3, 0x200 | r3 = 0x200;
0x0008a2e0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008a2e4 ldr.w fp, [sp, 0x40] | fp = var_40h;
0x0008a2e8 vstr d16, [r8, 0x1a0] | __asm ("vstr d16, [r8, 0x1a0]");
0x0008a2ec strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0008a2ee mov.w r3, -1 | r3 = -1;
0x0008a2f2 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| label_29:
0x0008a2f4 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x0008a2f6 ldr.w r7, [fp, 0x18] | r7 = *(arg_18h);
0x0008a2fa ldrb r5, [r3] | r5 = *(r3);
0x0008a2fc ldr r3, [sp, 0x18] | r3 = *(arg_18h);
0x0008a2fe add r7, r3 | r7 += r3;
0x0008a300 sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x0008a304 and r3, r3, 0xf7 | r3 &= 0xf7;
0x0008a308 b.w 0x89ad2 | goto label_26;
| label_100:
0x0008a30c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008a30e and r3, r3, 1 | r3 &= 1;
0x0008a310 lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x0008a312 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0008a314 cmp r6, 0 |
| if (r6 != 0) {
0x0008a316 bne.w 0x89aa6 | goto label_10;
| }
0x0008a31a b.w 0x89ac6 | goto label_11;
| label_151:
0x0008a31e ldr r4, [r3, 0x14] | r4 = *((r3 + 0x14));
0x0008a320 ldr.w ip, [r4] | ip = *(r4);
0x0008a324 b 0x89de6 | goto label_27;
| label_104:
0x0008a326 ldr r5, [sp, 0x14] | r5 = *(arg_14h);
0x0008a328 ldr.w r6, [pc, 0x910] |
0x0008a32c ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0008a330 ldr.w sb, [r5, 0x14] | sb = *((r5 + 0x14));
0x0008a334 add r6, pc | r6 = 0x114f74;
0x0008a336 addw r8, r6, 0xda8 | __asm ("addw r8, r6, 0xda8");
0x0008a33a addw r6, r6, 0xdaa | __asm ("addw r6, r6, 0xdaa");
| do {
0x0008a33e ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
0x0008a340 ldrb r7, [r8], 1 | r7 = *(r8);
| r8++;
| if (r4 != 0) {
0x0008a344 cbz r4, 0x8a354 |
0x0008a346 movs r3, 0 | r3 = 0;
0x0008a348 mov r1, r4 | r1 = r4;
0x0008a34a mov r2, r3 | r2 = r3;
0x0008a34c mov r0, sl | r0 = sl;
0x0008a34e bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0008a352 mov r4, r0 | r4 = r0;
| }
0x0008a354 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
| if (r3 != 0) {
0x0008a358 cbz r3, 0x8a368 |
0x0008a35a mov r1, r3 | r1 = r3;
0x0008a35c movs r3, 0 | r3 = 0;
0x0008a35e mov r2, r3 | r2 = r3;
0x0008a360 mov r0, sl | r0 = sl;
0x0008a362 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0008a366 mov r3, r0 | r3 = r0;
| }
0x0008a368 mov r1, r7 | r1 = r7;
0x0008a36a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008a36c mov r2, r4 | r2 = r4;
0x0008a36e bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008a372 mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0008a374 cbz r0, 0x8a388 |
0x0008a376 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0008a378 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x0008a37c beq 0x8a388 | goto label_173;
| }
0x0008a37e ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0008a380 orrs r2, r3 | r2 |= r3;
0x0008a382 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x0008a384 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0008a386 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
| }
| label_173:
0x0008a388 movs r2, 3 | r2 = 3;
0x0008a38a mov r0, fp | r0 = fp;
0x0008a38c bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0008a390 mov r1, fp | r1 = fp;
0x0008a392 mov r4, r0 | r4 = r0;
0x0008a394 mov r2, r0 | r2 = r0;
0x0008a396 ldr r0, [sp, 0x20] | r0 = x;
0x0008a398 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0008a39c ldr.w r7, [fp, 0x18] | r7 = *(arg_18h);
0x0008a3a0 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0008a3a4 ldr r3, [sp, 0x18] | r3 = *(arg_18h);
0x0008a3a6 cmp r6, r8 |
0x0008a3a8 add.w sb, sb, 0x10 | sb += 0x10;
0x0008a3ac add.w r4, r7, r4, lsl 4 | r4 = r7 + (r4 << 4);
0x0008a3b0 add r7, r3 | r7 += r3;
0x0008a3b2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008a3b4 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0008a3b6 ldrsh.w r3, [r7, 8] | r3 = *((r7 + 8));
0x0008a3ba strh r3, [r4, 8] | *((r4 + 8)) = r3;
0x0008a3bc ldrb r3, [r7, 0xe] | r3 = *((r7 + 0xe));
0x0008a3be add.w r3, r3, 1 | r3++;
0x0008a3c2 strb r3, [r7, 0xe] | *((r7 + 0xe)) = r3;
0x0008a3c4 bne 0x8a33e |
| } while (r6 != r8);
0x0008a3c6 b 0x89d98 | goto label_28;
| label_170:
0x0008a3c8 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0008a3cc and r4, r4, 1 | r4 &= 1;
0x0008a3d0 str r0, [sp, 0x30] | var_30h = r0;
0x0008a3d2 it eq |
| if (r3 != r6) {
0x0008a3d4 moveq r4, 0 | r4 = 0;
| }
0x0008a3d6 b 0x89fc4 | goto label_20;
| label_106:
0x0008a3d8 mov r1, sb | r1 = sb;
0x0008a3da ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008a3dc bl 0x327d0 | fcn_000327d0 (r0, r1, r2);
0x0008a3e0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008a3e2 orr.w r8, r0, r3 | r8 = r0 | r3;
0x0008a3e6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008a3e8 orr.w sb, r1, r3 | sb = r1 | r3;
0x0008a3ec b.w 0x8968a | goto label_22;
| label_156:
0x0008a3f0 str.w r8, [r4, 0x18] | __asm ("str.w r8, [r4, 0x18]");
0x0008a3f4 b 0x8a2f4 | goto label_29;
| label_163:
0x0008a3f6 mov.w ip, 0 |
0x0008a3fa mov r1, ip | r1 = ip;
0x0008a3fc b 0x8a06e | goto label_30;
| label_165:
0x0008a3fe ldr r6, [sp, 0x14] | r6 = *(arg_14h);
0x0008a400 mov r5, r7 | r5 = r7;
| label_33:
0x0008a402 mov.w sl, 0 | sl = 0;
| label_34:
0x0008a406 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0008a408 add.w r3, r6, 0xc | r3 = r6 + 0xc;
0x0008a40c vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
0x0008a410 ldrb r2, [r1] | r2 = *(r1);
0x0008a412 cmp r2, 0xb1 |
| if (r2 != 0xb1) {
0x0008a414 beq 0x8a43e |
0x0008a416 vmov.32 r2, d16[1] | __asm ("vmov.32 r2, d16[1]");
0x0008a41a ldrb r0, [r2] | r0 = *(r2);
0x0008a41c cmp r0, 0xb1 |
| if (r0 == 0xb1) {
0x0008a41e beq 0x8a43e | goto label_174;
| }
0x0008a420 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008a422 str r3, [sp, 0x40] | var_40h = r3;
0x0008a424 bl 0x46074 | fcn_00046074 (r0, r1, r2);
0x0008a428 ldrd r2, r1, [r6, 0xc] | __asm ("ldrd r2, r1, [r6, 0xc]");
0x0008a42c mov r4, r0 | r4 = r0;
0x0008a42e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008a430 bl 0x46074 | fcn_00046074 (r0, r1, r2);
0x0008a434 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008a436 cmp r4, r0 |
0x0008a438 vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
| if (r4 == r0) {
0x0008a43c beq 0x8a446 | goto label_175;
| }
| }
| label_174:
0x0008a43e ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0008a440 eor r2, r2, 0x400 | r2 ^= 0x400;
0x0008a444 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_175:
0x0008a446 vrev64.32 d16, d16 | __asm ("vrev64.32 d16, d16");
0x0008a44a vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0008a44e ldrb r2, [r6] | r2 = *(r6);
0x0008a450 cmp r2, 0x35 |
| if (r2 >= 0x35) {
0x0008a452 bls 0x8a460 |
0x0008a454 subs r2, 0x36 | r2 -= 0x36;
0x0008a456 eor r2, r2, 2 | r2 ^= 2;
0x0008a45a adds r2, 0x36 | r2 += 0x36;
0x0008a45c uxtb r2, r2 | r2 = (int8_t) r2;
0x0008a45e strb r2, [r6] | *(r6) = r2;
| }
0x0008a460 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008a462 cmp r2, 0x31 |
0x0008a464 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008a466 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0008a468 vldr d16, [sp, 0x70] | __asm ("vldr d16, [sp, 0x70]");
0x0008a46c orr.w r1, r1, r3 | r1 |= r3;
0x0008a470 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008a472 orr.w r3, r3, r0 | r3 |= r0;
0x0008a476 add.w r0, r5, 0x14 | r0 = r5 + 0x14;
0x0008a47a vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0008a47e strd r1, r3, [r5, 0x20] | __asm ("strd r1, r3, [r5, 0x20]");
0x0008a482 it eq |
| if (r2 != 0x31) {
0x0008a484 moveq r3, 1 | r3 = 1;
| }
0x0008a486 strd r8, sb, [r5, 0x28] | __asm ("strd r8, sb, [r5, 0x28]");
| if (r2 != 0x31) {
0x0008a48a beq 0x8a4aa |
0x0008a48c cmp r2, 0x32 |
0x0008a48e it eq |
| if (r2 != 0x32) {
0x0008a490 moveq r3, 0x100 | r3 = 0x100;
| }
| if (r2 == 0x32) {
0x0008a494 beq 0x8a4aa | goto label_176;
| }
0x0008a496 cmp r2, 0x2d |
0x0008a498 ittte ne |
| if (r2 == 0x2d) {
0x0008a49a subne r3, r2, 0x35 | r3 = r2 - 0x35;
| }
| if (r2 == 0x2d) {
0x0008a49e movne r2, 2 | r2 = 2;
| }
| if (r2 != 0x2d) {
0x0008a4a0 lsleq r3, r2, r3 | r3 = r2 << r3;
| }
| if (r2 == 0x2d) {
0x0008a4a4 movs r3, 0x80 | r3 = 0x80;
| }
0x0008a4a6 it ne |
| if (r3 == 0x80) {
0x0008a4a8 uxthne r3, r3 | __asm ("uxthne r3, r3");
| goto label_176;
| }
| }
| label_176:
0x0008a4aa ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008a4ac add r3, sl | r3 += sl;
0x0008a4ae ands r2, r3 | r2 &= r3;
0x0008a4b0 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x0008a4b2 strh r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x0008a4b4 ldrb r5, [r3] | r5 = *(r3);
0x0008a4b6 sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x0008a4ba and r3, r3, 0xf7 | r3 &= 0xf7;
0x0008a4be b.w 0x89ad2 | goto label_26;
| label_153:
0x0008a4c2 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0008a4c4 movs r5, 0 | r5 = 0;
0x0008a4c6 ldr r4, [sp, 0x14] | r4 = *(arg_14h);
0x0008a4c8 ldr r7, [sp, 0x20] | r7 = x;
| do {
0x0008a4ca mov r3, r8 | r3 = r8;
0x0008a4cc mov r2, r5 | r2 = r5;
0x0008a4ce mov r0, r6 | r0 = r6;
0x0008a4d0 bl 0x48d28 | fcn_00048d28 (r0, r1, r2, r3);
0x0008a4d4 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0008a4d6 mov sb, r0 | sb = r0;
0x0008a4d8 mov r3, r8 | r3 = r8;
0x0008a4da mov r2, r5 | r2 = r5;
0x0008a4dc mov r0, r6 | r0 = r6;
0x0008a4de bl 0x48d28 | fcn_00048d28 (r0, r1, r2, r3);
0x0008a4e2 ldrb r1, [r4] | r1 = *(r4);
0x0008a4e4 mov r3, r0 | r3 = r0;
0x0008a4e6 mov r2, sb | r2 = sb;
0x0008a4e8 mov r0, r6 | r0 = r6;
0x0008a4ea bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008a4ee mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0008a4f0 cbz r0, 0x8a504 |
0x0008a4f2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008a4f4 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x0008a4f8 beq 0x8a504 | goto label_177;
| }
0x0008a4fa ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0008a4fc orrs r2, r3 | r2 |= r3;
0x0008a4fe ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0008a500 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0008a502 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
| }
| label_177:
0x0008a504 movw r2, 0x8001 | r2 = 0x8001;
0x0008a508 mov r0, fp | r0 = fp;
0x0008a50a bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0008a50e adds r5, 1 | r5++;
0x0008a510 mov r2, r0 | r2 = r0;
0x0008a512 mov r1, fp | r1 = fp;
0x0008a514 mov r0, r7 | r0 = r7;
0x0008a516 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0008a51a cmp r5, r8 |
| if (r5 == r8) {
0x0008a51c beq 0x8a522 | goto label_178;
| }
0x0008a51e ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0008a520 b 0x8a4ca |
| } while (1);
| label_178:
0x0008a522 ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x0008a526 mov.w r1, 0x2000 | r1 = 0x2000;
0x0008a52a ldr r2, [sp, 0x18] | r2 = *(arg_18h);
0x0008a52c add r3, r2 | r3 += r2;
0x0008a52e ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0008a530 strh r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x0008a532 orr r2, r2, 6 | r2 |= 6;
0x0008a536 strh r2, [r3, 0xa] | *((r3 + 0xa)) = r2;
0x0008a538 b.w 0x8960e | goto label_31;
| label_161:
0x0008a53c mov r1, r3 | r1 = r3;
0x0008a53e mov.w ip, 1 |
0x0008a542 b 0x8a06e | goto label_30;
| label_164:
0x0008a544 ldr r5, [sp, 0x44] | r5 = var_44h;
0x0008a546 b 0x8a0dc | goto label_32;
| label_166:
0x0008a548 mov r1, r0 | r1 = r0;
0x0008a54a movs r2, 3 | r2 = 3;
0x0008a54c mov r0, fp | r0 = fp;
0x0008a54e bl 0x38bf0 | r0 = fcn_00038bf0 (r0, r1, r2, r3);
0x0008a552 cmp r0, 0 |
| if (r0 == 0) {
0x0008a554 beq.w 0x8961e | goto label_1;
| }
0x0008a558 ldr.w r7, [fp, 0x18] | r7 = *(arg_18h);
0x0008a55c add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0008a560 ldr r3, [sp, 0x18] | r3 = *(arg_18h);
0x0008a562 cmp.w sl, 0x2d |
0x0008a566 add.w r5, r7, r0, lsl 4 | r5 = r7 + (r0 << 4);
0x0008a56a add r7, r3 | r7 += r3;
0x0008a56c ldrsh.w r2, [r7, 8] | r2 = *((r7 + 8));
0x0008a570 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008a572 strh r2, [r5, 8] | *((r5 + 8)) = r2;
0x0008a574 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0008a576 ldrb r2, [r7, 0xe] | r2 = *((r7 + 0xe));
0x0008a578 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008a57a add.w r2, r2, 1 | r2++;
0x0008a57e strb r2, [r7, 0xe] | *((r7 + 0xe)) = r2;
0x0008a580 ittt eq |
| if (sl == 0x2d) {
0x0008a582 ldrheq r2, [r5, 0xa] | __asm ("ldrheq r2, [r5, 0xa]");
| }
| if (sl != 0x2d) {
0x0008a584 orreq r2, r2, 0x800 | r2 |= 0x800;
| }
| if (sl == 0x2d) {
0x0008a588 strh r2, [r5, 0xa] | *((r5 + 0xa)) = r2;
| }
0x0008a58a ldr r2, [r3] | r2 = *(r3);
0x0008a58c ldr r1, [r2, 0x50] | r1 = *((r2 + 0x50));
0x0008a58e ldrh r2, [r7, 0xa] | r2 = *((r7 + 0xa));
0x0008a590 lsls r3, r1, 0x18 | r3 = r1 << 0x18;
0x0008a592 orr r2, r2, 8 | r2 |= 8;
0x0008a596 strh r2, [r7, 0xa] | *((r7 + 0xa)) = r2;
| if (r3 < r1) {
0x0008a598 bmi.w 0x8a402 | goto label_33;
| }
0x0008a59c ldrb r2, [r6] | r2 = *(r6);
0x0008a59e subs r2, 0x2d | r2 -= 0x2d;
0x0008a5a0 tst.w r2, 0xf7 |
| if ((r2 & 0xf7) != 0) {
0x0008a5a4 bne.w 0x8a402 | goto label_33;
| }
0x0008a5a8 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0008a5aa tst.w r1, 1 |
0x0008a5ae str r1, [sp, 0x48] | var_48h = r1;
| if ((r1 & 1) != 0) {
0x0008a5b0 bne.w 0x8a402 | goto label_33;
| }
0x0008a5b4 ldr.w sl, [r6, 0xc] | sl = *((r6 + 0xc));
0x0008a5b8 mov r0, sl | r0 = sl;
0x0008a5ba bl 0x25460 | fcn_00025460 (r0);
0x0008a5be ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0008a5c0 mov r4, r0 | r4 = r0;
0x0008a5c2 mov r0, r3 | r0 = r3;
0x0008a5c4 str r3, [sp, 0x40] | var_40h = r3;
0x0008a5c6 bl 0x25460 | r0 = fcn_00025460 (r0);
0x0008a5ca cmp r4, r0 |
0x0008a5cc ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008a5ce ldr r1, [sp, 0x48] | r1 = var_48h;
0x0008a5d0 mov r2, r0 | r2 = r0;
| if (r4 == r0) {
0x0008a5d2 beq 0x8a5e0 | goto label_179;
| }
0x0008a5d4 cmp r4, 0x42 |
| if (r4 < 0x42) {
0x0008a5d6 bls.w 0x8a402 | goto label_33;
| }
0x0008a5da cmp r0, 0x42 |
| if (r0 < 0x42) {
0x0008a5dc bls.w 0x8a402 | goto label_33;
| }
| label_179:
0x0008a5e0 lsls r4, r1, 0x15 | r4 = r1 << 0x15;
0x0008a5e2 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008a5e4 itete mi |
| if (r4 >= r1) {
0x0008a5e6 movmi r1, r3 | r1 = r3;
| }
| if (r4 < r1) {
0x0008a5e8 movpl r1, sl | r1 = sl;
| }
| if (r4 >= r1) {
0x0008a5ea movmi r2, sl | r2 = sl;
| }
| if (r4 < r1) {
0x0008a5ec movpl r2, r3 | r2 = r3;
| }
0x0008a5ee bl 0x46074 | fcn_00046074 (r0, r1, r2);
0x0008a5f2 ldrd r1, r4, [r6, 0xc] | __asm ("ldrd r1, r4, [r6, 0xc]");
| if (r0 == 0) {
0x0008a5f6 cbz r0, 0x8a630 | goto label_180;
| }
0x0008a5f8 ldr.w r2, [pc, 0x644] | r2 = *(0x0008ac40);
0x0008a5fc ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0008a5fe add r2, pc | r2 += pc;
0x0008a600 cmp r0, r2 |
| if (r0 == r2) {
0x0008a602 beq 0x8a630 | goto label_180;
| }
0x0008a604 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008a606 bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x0008a60a mov sl, r0 | sl = r0;
0x0008a60c cmp r0, 0 |
| if (r0 == 0) {
0x0008a60e beq.w 0x8afe0 | goto label_181;
| }
| label_87:
0x0008a612 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008a614 mov r1, r4 | r1 = r4;
0x0008a616 bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x0008a61a cmp r0, 0 |
| if (r0 == 0) {
0x0008a61c beq.w 0x8afd6 | goto label_182;
| }
| label_86:
0x0008a620 ldr r1, [r0] | r1 = *(r0);
0x0008a622 ldr.w r0, [sl] | r0 = *(sl);
0x0008a626 bl 0x215c4 | r0 = fcn_000215c4 (r0);
0x0008a62a cmp r0, 0 |
| if (r0 != 0) {
0x0008a62c bne.w 0x8a402 | goto label_33;
| }
| label_180:
0x0008a630 ldrh r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0008a632 mov.w sl, 0x800 | sl = 0x800;
0x0008a636 orr r2, r2, 0x800 | r2 |= 0x800;
0x0008a63a strh r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x0008a63c b 0x8a406 | goto label_34;
| label_172:
0x0008a63e ldr.w r8, [fp, 0xc] | r8 = *(arg_ch);
0x0008a642 ldr.w r2, [fp, 0x18] | r2 = *(arg_18h);
0x0008a646 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0008a64a ble.w 0x8a2d8 | goto label_35;
| }
0x0008a64e str r4, [sp, 0x44] | var_44h = r4;
0x0008a650 mov lr, r3 | lr = r3;
0x0008a652 add.w ip, r2, 0x30 |
0x0008a656 mov r1, r3 | r1 = r3;
0x0008a658 mov r4, r3 | r4 = r3;
0x0008a65a str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
| label_36:
0x0008a65e ldr r3, [ip, -0x30] | r3 = *((ip - 0x30));
0x0008a662 ldrb r3, [r3] | r3 = *(r3);
0x0008a664 subs r3, 0x2d | r3 -= 0x2d;
0x0008a666 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008a668 cmp r3, 0xc |
| if (r3 > 0xc) {
0x0008a66a bhi 0x8a6f8 | goto label_183;
| }
0x0008a66c movw r2, 0x1f31 | r2 = 0x1f31;
0x0008a670 lsr.w r3, r2, r3 | r3 = r2 >> r3;
0x0008a674 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x0008a676 bpl 0x8a6f8 | goto label_183;
| }
| label_38:
0x0008a678 ldr sl, [ip, -0x1c] | sl = *((ip - 0x1c));
0x0008a67c ldr.w r3, [r5, 0x200] | r3 = *((r5 + 0x200));
0x0008a680 cmp sl, r3 |
0x0008a682 it eq |
| if (sl != r3) {
0x0008a684 orreq r1, r1, 1 | r1 |= 1;
| }
| if (sl == r3) {
0x0008a688 beq 0x8a6c8 | goto label_37;
| }
0x0008a68a ldr.w fp, [r5, 0x1fc] | fp = *((r5 + 0x1fc));
0x0008a68e cmp.w fp, 1 |
| if (fp <= 1) {
0x0008a692 ble 0x8a6c8 | goto label_37;
| }
0x0008a694 add.w r2, r5, 0x200 | r2 = r5 + 0x200;
0x0008a698 movs r3, 1 | r3 = 1;
0x0008a69a b 0x8a6a2 |
| while (sl != r0) {
0x0008a69c adds r3, 1 | r3++;
0x0008a69e cmp r3, fp |
| if (r3 == fp) {
0x0008a6a0 beq 0x8a6c8 | goto label_37;
| }
0x0008a6a2 ldr r0, [r2, 4]! | r0 = *((r2 += 4));
0x0008a6a6 cmp sl, r0 |
0x0008a6a8 bne 0x8a69c |
| }
0x0008a6aa mov.w sl, 1 | sl = 1;
0x0008a6ae sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0008a6b2 rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x0008a6b6 lsl.w r2, sl, r2 | r2 = sl << r2;
0x0008a6ba lsr.w r0, sl, r0 | r0 = sl >> r0;
0x0008a6be lsl.w r3, sl, r3 | r3 = sl << r3;
0x0008a6c2 orrs r2, r0 | r2 |= r0;
0x0008a6c4 orrs r1, r3 | r1 |= r3;
0x0008a6c6 orrs r4, r2 | r4 |= r2;
| label_37:
0x0008a6c8 add.w lr, lr, 1 | lr++;
0x0008a6cc add.w ip, ip, 0x30 |
0x0008a6d0 cmp lr, r8 |
| if (lr != r8) {
0x0008a6d2 bne 0x8a65e | goto label_36;
| }
0x0008a6d4 mov r3, r4 | r3 = r4;
0x0008a6d6 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0008a6d8 ands r3, r7 | r3 &= r7;
0x0008a6da ands r6, r1 | r6 &= r1;
0x0008a6dc mov r7, r3 | r7 = r3;
0x0008a6de mov.w fp, 0 |
0x0008a6e2 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0008a6e6 ldr.w sl, [sp, 0x30] | sl = var_30h;
0x0008a6ea and r4, r4, 1 | r4 &= 1;
0x0008a6ee str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x0008a6f2 it eq |
| if (r3 != r6) {
0x0008a6f4 moveq r4, 0 | r4 = 0;
| }
0x0008a6f6 b 0x89fc4 | goto label_20;
| label_183:
0x0008a6f8 ldrh r3, [ip, -0x24] | r3 = *((ip - 0x24));
0x0008a6fc cmp r3, 0x40 |
| if (r3 != 0x40) {
0x0008a6fe bne 0x8a6c8 | goto label_37;
| }
0x0008a700 b 0x8a678 | goto label_38;
| label_142:
0x0008a702 ldr.w r3, [sb, 0x2c] | r3 = *((sb + 0x2c));
0x0008a706 cmp r3, 0 |
| if (r3 == 0) {
0x0008a708 beq.w 0x89b48 | goto label_39;
| }
0x0008a70c ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0008a710 cmp r3, 1 |
| if (r3 != 1) {
0x0008a712 bne.w 0x89b48 | goto label_39;
| }
0x0008a716 cmp r5, 0x34 |
0x0008a718 mov r3, sb | r3 = sb;
| if (r5 == 0x34) {
0x0008a71a beq.w 0x8ae04 | goto label_184;
| }
0x0008a71e rsb.w sl, sl, 0x46 | sl = 0x46 - sl;
0x0008a722 mov sb, r6 | sb = r6;
0x0008a724 uxtb.w sl, sl | sl = (int8_t) sl;
0x0008a728 mov r4, sb | r4 = sb;
0x0008a72a mov r6, r3 | r6 = r3;
0x0008a72c ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0008a730 str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0008a734 ldr.w sl, [sp, 0x14] | sl = *(arg_14h);
0x0008a738 b.w 0x89b72 | goto label_40;
| label_167:
0x0008a73c ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0008a73e cmp r3, 0 |
| if (r3 == 0) {
0x0008a740 beq.w 0x8a1a6 | goto label_41;
| }
0x0008a744 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0008a748 cmp r3, 1 |
| if (r3 != 1) {
0x0008a74a bne.w 0x8a1a6 | goto label_41;
| }
0x0008a74e ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x0008a750 movs r5, 0 | r5 = 0;
0x0008a752 ldr.w r0, [pc, 0x4f0] |
0x0008a756 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008a758 add r0, pc | r0 = 0x1153a2;
0x0008a75a add.w ip, r3, -1 |
0x0008a75e ldr.w r3, [pc, 0x4e8] |
0x0008a762 add r3, pc | r3 = 0x1153b0;
0x0008a764 add.w r7, r3, 0x1ac | r7 = r3 + 0x1ac;
| label_42:
0x0008a768 ldr.w r1, [r7, r5, lsl 3] | offset_0 = r5 << 3;
| r1 = *((r7 + offset_0));
0x0008a76c mov r4, ip | r4 = ip;
0x0008a76e subs r1, 1 | r1--;
| do {
| label_43:
0x0008a770 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0008a774 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0008a778 cmp r3, r2 |
| if (r3 == r2) {
0x0008a77a beq 0x8a794 | goto label_185;
| }
0x0008a77c add r3, r0 | r3 += r0;
0x0008a77e add r2, r0 | r2 += r0;
0x0008a780 ldrb.w lr, [r3, 0x140] |
0x0008a784 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0008a788 cmp lr, r3 |
0x0008a78a beq 0x8a770 |
| } while (lr == r3);
0x0008a78c adds r5, 1 | r5++;
0x0008a78e cmp r5, 4 |
| if (r5 != 4) {
0x0008a790 bne 0x8a768 | goto label_42;
| }
0x0008a792 b 0x8a1a6 | goto label_41;
| label_185:
0x0008a794 cmp r3, 0 |
| if (r3 != 0) {
0x0008a796 bne 0x8a770 | goto label_43;
| }
0x0008a798 mov r8, r3 | r8 = r3;
0x0008a79a ldr.w r3, [pc, 0x4b0] |
0x0008a79e ldr.w sb, [sb, 8] | sb = *((sb + 8));
0x0008a7a2 add r3, pc | r3 = 0x1153f4;
0x0008a7a4 add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
0x0008a7a8 mov r4, sb | r4 = sb;
0x0008a7aa ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0008a7ae ldrb.w sl, [r3, 0x1b0] | sl = *((r3 + 0x1b0));
0x0008a7b2 str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0008a7b6 ldr.w sl, [sp, 0x14] | sl = *(arg_14h);
0x0008a7ba b.w 0x89b72 | goto label_40;
| label_159:
0x0008a7be ldrd r8, r4, [sp, 0x54] | __asm ("ldrd r8, r4, [var_54h]");
0x0008a7c2 mov.w r3, 0x200 | r3 = 0x200;
0x0008a7c6 str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x0008a7ca ldr.w fp, [sp, 0x40] | fp = var_40h;
0x0008a7ce strd r6, r7, [r8, 0x1a0] | __asm ("strd r6, r7, [r8, 0x1a0]");
0x0008a7d2 strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0008a7d4 mov.w r3, -1 | r3 = -1;
0x0008a7d8 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0008a7da orrs.w r3, r6, r7 | r3 = r6 | r7;
| if (r3 != r6) {
0x0008a7de beq 0x8a7f0 |
0x0008a7e0 movs r3, 1 | r3 = 1;
0x0008a7e2 strb.w r3, [fp, 9] | *(arg_9h) = r3;
0x0008a7e6 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0008a7ea cmp r3, 2 |
| if (r3 == 2) {
0x0008a7ec beq.w 0x8ac6c | goto label_186;
| }
| }
| label_61:
0x0008a7f0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008a7f2 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008a7f4 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0008a7f6 beq.w 0x8a2f4 | goto label_29;
| }
0x0008a7fa ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
| label_51:
0x0008a7fe ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008a800 mov.w r5, -1 | r5 = -1;
0x0008a804 ldr r7, [sp, 0x48] | r7 = var_48h;
0x0008a806 movs r6, 2 | r6 = 2;
0x0008a808 mov.w sl, 1 | sl = 1;
0x0008a80c mov r4, r5 | r4 = r5;
0x0008a80e and r2, r2, 1 | r2 &= 1;
0x0008a812 str.w fp, [sp, 0x5c] | __asm ("str.w fp, [var_5ch]");
0x0008a816 str r2, [sp, 0x58] | var_58h = r2;
| label_44:
0x0008a818 subs.w sb, r3, 1 | sb = r3 - 1;
0x0008a81c ldr.w r5, [r8, 0x18] | r5 = *((r8 + 0x18));
| if (sb < r3) {
0x0008a820 bmi.w 0x8a97e | goto label_187;
| }
| label_46:
0x0008a824 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x0008a826 ldrh r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x0008a828 cmp r0, r4 |
0x0008a82a bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x0008a82e strh r3, [r5, 0xa] | *((r5 + 0xa)) = r3;
| if (r0 == r4) {
0x0008a830 beq.w 0x8a970 | goto label_188;
| }
0x0008a834 ldr.w r3, [r7, 0x200] | r3 = *((r7 + 0x200));
0x0008a838 cmp r0, r3 |
| if (r0 == r3) {
0x0008a83a beq.w 0x8a9a6 | goto label_189;
| }
0x0008a83e ldr.w ip, [r7, 0x1fc] | ip = *((r7 + 0x1fc));
0x0008a842 cmp.w ip, 1 |
| if (ip <= 1) {
0x0008a846 ble.w 0x8a970 | goto label_188;
| }
0x0008a84a add.w r2, r7, 0x200 | r2 = r7 + 0x200;
0x0008a84e movs r3, 1 | r3 = 1;
0x0008a850 b 0x8a85a |
| while (r0 != r1) {
0x0008a852 adds r3, 1 | r3++;
0x0008a854 cmp r3, ip |
| if (r3 == ip) {
0x0008a856 beq.w 0x8a970 | goto label_188;
| }
0x0008a85a ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0008a85e cmp r0, r1 |
0x0008a860 bne 0x8a852 |
| }
0x0008a862 sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0008a866 rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x0008a86a lsr.w r1, sl, r1 | r1 = sl >> r1;
0x0008a86e lsl.w r2, sl, r2 | r2 = sl << r2;
0x0008a872 lsl.w r3, sl, r3 | r3 = sl << r3;
0x0008a876 orrs r2, r1 | r2 |= r1;
0x0008a878 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008a87a ands r2, r1 | r2 &= r1;
0x0008a87c ldr r1, [sp, 0x54] | r1 = var_54h;
0x0008a87e ands r3, r1 | r3 &= r1;
| label_49:
0x0008a880 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0008a882 beq 0x8a970 | goto label_188;
| }
0x0008a884 mov r4, r5 | r4 = r5;
0x0008a886 ldr r5, [r5, 0x18] | r5 = *((r5 + 0x18));
0x0008a888 ldr r3, [r4], 0x30 | r3 = *(r4);
| r4 += 0x30;
0x0008a88c mov fp, r0 |
0x0008a88e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0008a890 str r3, [sp, 0x44] | var_44h = r3;
| do {
0x0008a892 ldr r3, [r4, -0x1c] | r3 = *((r4 - 0x1c));
0x0008a896 cmp fp, r3 |
| if (fp == r3) {
0x0008a898 beq 0x8a92a | goto label_190;
| }
0x0008a89a ldrh r3, [r4, -0x26] | r3 = *((r4 - 0x26));
0x0008a89e bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x0008a8a2 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0008a8a4 lsrs r3, r3, 0x10 | r3 >>= 0x10;
| label_45:
0x0008a8a6 add.w sb, sb, -1 | sb += -1;
0x0008a8aa strh r3, [r4, -0x26] | *((r4 - 0x26)) = r3;
0x0008a8ae cmp.w sb, -1 |
0x0008a8b2 add.w r4, r4, 0x30 | r4 += 0x30;
0x0008a8b6 bne 0x8a892 |
| } while (sb != -1);
0x0008a8b8 ldr.w r6, [r8, 0xc] | r6 = *((r8 + 0xc));
0x0008a8bc ldr.w fp, [sp, 0x5c] | fp = var_5ch;
0x0008a8c0 ldr.w r5, [r8, 0x18] | r5 = *((r8 + 0x18));
0x0008a8c4 subs r6, 1 | r6--;
| if (r6 >= 1) {
0x0008a8c6 bpl 0x8a9b2 | goto label_191;
| }
0x0008a8c8 movs r3, 0 | r3 = 0;
0x0008a8ca movs r1, 0x31 | r1 = 0x31;
0x0008a8cc ldr r0, [sp, 0x50] | r0 = var_50h;
0x0008a8ce mov r2, r3 | r2 = r3;
0x0008a8d0 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008a8d4 mov r1, r0 | r1 = r0;
0x0008a8d6 cmp r0, 0 |
| if (r0 == 0) {
0x0008a8d8 beq.w 0x8a2f4 | goto label_29;
| }
0x0008a8dc movs r7, 0 | r7 = 0;
| label_50:
0x0008a8de ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0008a8e0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008a8e2 ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x0008a8e6 beq 0x8a8f2 |
0x0008a8e8 ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x0008a8ea str r2, [r1, 0x24] | *((r1 + 0x24)) = r2;
0x0008a8ec ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0008a8ee orrs r2, r3 | r2 |= r3;
0x0008a8f0 str r2, [r1, 4] | *((r1 + 4)) = r2;
| }
0x0008a8f2 movs r2, 3 | r2 = 3;
0x0008a8f4 str r7, [r1, 0x14] | *((r1 + 0x14)) = r7;
0x0008a8f6 mov r0, fp | r0 = fp;
0x0008a8f8 bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0008a8fc mov r1, fp | r1 = fp;
0x0008a8fe mov r2, r0 | r2 = r0;
0x0008a900 mov r5, r0 | r5 = r0;
0x0008a902 ldr r0, [sp, 0x20] | r0 = x;
0x0008a904 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0008a908 ldr.w r2, [fp, 0x18] | r2 = *(arg_18h);
0x0008a90c add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0008a910 ldr r1, [sp, 0x18] | r1 = *(arg_18h);
0x0008a912 add.w r3, r2, r5, lsl 4 | r3 = r2 + (r5 << 4);
0x0008a916 add r2, r1 | r2 += r1;
0x0008a918 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0008a91a str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x0008a91c ldrsh.w r1, [r2, 8] | r1 = *((r2 + 8));
0x0008a920 strh r1, [r3, 8] | *((r3 + 8)) = r1;
0x0008a922 ldrb r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x0008a924 adds r3, 1 | r3++;
0x0008a926 strb r3, [r2, 0xe] | *((r2 + 0xe)) = r3;
0x0008a928 b 0x8a2f4 | goto label_29;
| label_190:
0x0008a92a ldr r3, [r4, -0x18] | r3 = *((r4 - 0x18));
0x0008a92e cmp r3, r5 |
0x0008a930 beq 0x8a940 |
| while (r3 != 0) {
| label_47:
0x0008a932 cmp r6, 1 |
| if (r6 == 1) {
0x0008a934 beq 0x8a97e | goto label_187;
| }
0x0008a936 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0008a93a mov r4, fp | r4 = fp;
0x0008a93c movs r6, 1 | r6 = 1;
0x0008a93e b 0x8a818 | goto label_44;
0x0008a940 adds r1, r5, 2 | r1 = r5 + 2;
0x0008a942 ldr r2, [r4, -0x30] | r2 = *((r4 - 0x30));
| if (r1 == r5) {
0x0008a946 beq 0x8a984 | goto label_192;
| }
| label_48:
0x0008a948 ldr r0, [r2, 0x10] | r0 = *((r2 + 0x10));
0x0008a94a str r2, [sp, 0x40] | var_40h = r2;
0x0008a94c bl 0x25460 | fcn_00025460 (r0);
0x0008a950 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008a952 mov r3, r0 | r3 = r0;
0x0008a954 str r3, [sp, 0x40] | var_40h = r3;
0x0008a956 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0008a958 bl 0x25460 | fcn_00025460 (r0);
0x0008a95c ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008a95e cmp r3, 0 |
0x0008a960 it ne |
| if (r3 != 0) {
0x0008a962 cmpne r0, r3 | __asm ("cmpne r0, r3");
| }
0x0008a964 bne 0x8a932 |
| }
0x0008a966 ldrh r3, [r4, -0x26] | r3 = *((r4 - 0x26));
0x0008a96a orr r3, r3, 0x40 | r3 |= 0x40;
0x0008a96e b 0x8a8a6 | goto label_45;
| label_188:
0x0008a970 add.w sb, sb, -1 | sb += -1;
0x0008a974 adds r5, 0x30 | r5 += 0x30;
0x0008a976 cmp.w sb, -1 |
| if (sb != -1) {
0x0008a97a bne.w 0x8a824 | goto label_46;
| }
| label_187:
0x0008a97e ldr.w fp, [sp, 0x5c] | fp = var_5ch;
0x0008a982 b 0x8a2f4 | goto label_29;
| label_192:
0x0008a984 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0008a986 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008a988 cmp r3, 0 |
0x0008a98a it ne |
| if (r3 != 0) {
0x0008a98c cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
| if (r3 == 0) {
0x0008a98e beq 0x8a9ac | goto label_193;
| }
0x0008a990 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008a992 mov.w r3, -1 | r3 = -1;
0x0008a996 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0008a998 bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
0x0008a99c cmp r0, 0 |
| if (r0 != 0) {
0x0008a99e bne 0x8a932 | goto label_47;
| }
0x0008a9a0 ldr r2, [r4, -0x30] | r2 = *((r4 - 0x30));
0x0008a9a4 b 0x8a948 | goto label_48;
| label_189:
0x0008a9a6 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008a9a8 movs r2, 0 | r2 = 0;
0x0008a9aa b 0x8a880 | goto label_49;
| label_193:
0x0008a9ac cmp r1, r3 |
| if (r1 != r3) {
0x0008a9ae bne 0x8a932 | goto label_47;
| }
0x0008a9b0 b 0x8a948 | goto label_48;
| label_191:
0x0008a9b2 ldr r4, [sp, 0x48] | r4 = var_48h;
0x0008a9b4 movs r2, 0 | r2 = 0;
0x0008a9b6 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x0008a9ba adds r5, 0x30 | r5 += 0x30;
0x0008a9bc mov r7, r2 | r7 = r2;
| do {
0x0008a9be ldrh r3, [r5, -0x26] | r3 = *((r5 - 0x26));
0x0008a9c2 lsls r3, r3, 0x19 | r3 <<= 0x19;
| if (r3 < r3) {
0x0008a9c4 bpl 0x8a9ec |
0x0008a9c6 ldr r3, [r5, -0x30] | r3 = *((r5 - 0x30));
0x0008a9ca ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
| if (r2 != 0) {
0x0008a9cc cbz r2, 0x8a9dc |
0x0008a9ce movs r3, 0 | r3 = 0;
0x0008a9d0 mov r1, r2 | r1 = r2;
0x0008a9d2 mov r0, r8 | r0 = r8;
0x0008a9d4 mov r2, r3 | r2 = r3;
0x0008a9d6 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0008a9da mov r2, r0 | r2 = r0;
| }
0x0008a9dc mov r1, r7 | r1 = r7;
0x0008a9de ldr r0, [r4] | r0 = *(r4);
0x0008a9e0 bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x0008a9e4 ldr r3, [r5, -0x30] | r3 = *((r5 - 0x30));
0x0008a9e8 mov r7, r0 | r7 = r0;
0x0008a9ea ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| }
0x0008a9ec subs r6, 1 | r6--;
0x0008a9ee adds r5, 0x30 | r5 += 0x30;
0x0008a9f0 adds r0, r6, 1 | r0 = r6 + 1;
0x0008a9f2 bne 0x8a9be |
| } while (r0 != r6);
| if (r2 != 0) {
0x0008a9f4 cbz r2, 0x8aa04 |
0x0008a9f6 movs r3, 0 | r3 = 0;
0x0008a9f8 mov r1, r2 | r1 = r2;
0x0008a9fa ldr r0, [sp, 0x34] | r0 = var_34h;
0x0008a9fc mov r2, r3 | r2 = r3;
0x0008a9fe bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0008aa02 mov r2, r0 | r2 = r0;
| }
0x0008aa04 movs r1, 0x31 | r1 = 0x31;
0x0008aa06 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0008aa08 movs r3, 0 | r3 = 0;
0x0008aa0a bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008aa0e mov r1, r0 | r1 = r0;
0x0008aa10 cmp r0, 0 |
| if (r0 != 0) {
0x0008aa12 bne.w 0x8a8de | goto label_50;
| }
0x0008aa16 cmp r7, 0 |
| if (r7 == 0) {
0x0008aa18 beq.w 0x8a2f4 | goto label_29;
| }
0x0008aa1c ldr r0, [sp, 0x34] | r0 = var_34h;
0x0008aa1e mov r1, r7 | r1 = r7;
0x0008aa20 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x0008aa24 b 0x8a2f4 | goto label_29;
| label_157:
0x0008aa26 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008aa28 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008aa2c cmp r3, 0 |
| if (r3 != 0) {
0x0008aa2e bne.w 0x8a2f4 | goto label_29;
| }
| label_158:
0x0008aa32 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x0008aa36 mov.w r3, 0x200 | r3 = 0x200;
0x0008aa3a mov.w r2, -1 | r2 = -1;
0x0008aa3e vstr d16, [r8, 0x1a0] | __asm ("vstr d16, [r8, 0x1a0]");
0x0008aa42 strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0008aa44 movs r3, 1 | r3 = 1;
0x0008aa46 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0008aa48 strb.w r3, [fp, 9] | *(arg_9h) = r3;
0x0008aa4a adds r0, 9 | r0 += 9;
0x0008aa4c ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0008aa50 cmp r3, 2 |
| if (r3 == 2) {
0x0008aa52 beq.w 0x8ac68 | goto label_194;
| }
0x0008aa56 str r2, [sp, 0x54] | var_54h = r2;
0x0008aa58 str r2, [sp, 0x30] | var_30h = r2;
0x0008aa5a b 0x8a7fe | goto label_51;
| label_162:
0x0008aa5c mov ip, r3 |
0x0008aa5e mov r1, r3 | r1 = r3;
0x0008aa60 b.w 0x8a06e | goto label_30;
| label_128:
0x0008aa64 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008aa66 ldr r3, [r3] | r3 = *(r3);
0x0008aa68 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008aa6c cmp r3, 0 |
| if (r3 == 0) {
0x0008aa6e beq.w 0x8abe6 | goto label_195;
| }
0x0008aa72 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008aa74 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008aa78 cmp r3, 0 |
| if (r3 == 0) {
0x0008aa7a beq.w 0x8abae | goto label_60;
| }
0x0008aa7e ldr r7, [pc, 0x1d0] |
0x0008aa80 add r7, pc | r7 = 0x1156d6;
0x0008aa82 b.w 0x899aa | goto label_52;
| label_121:
0x0008aa86 add.w r8, r8, 2 | r8 += 2;
0x0008aa8a b.w 0x89842 | goto label_53;
| label_131:
0x0008aa8e movw r2, 0x103 | r2 = 0x103;
0x0008aa92 mov r0, fp | r0 = fp;
0x0008aa94 bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0008aa98 mov r1, fp | r1 = fp;
0x0008aa9a mov r5, r0 | r5 = r0;
0x0008aa9c mov r2, r0 | r2 = r0;
0x0008aa9e ldr r0, [sp, 0x20] | r0 = x;
0x0008aaa0 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0008aaa4 b.w 0x89a12 | goto label_54;
| label_118:
0x0008aaa8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008aaaa ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008aaac lsls r2, r3, 8 | r2 = r3 << 8;
| if (r2 < r3) {
0x0008aaae bmi.w 0x89d98 | goto label_28;
| }
0x0008aab2 ldrsh.w r8, [r5, 0x20] | r8 = *((r5 + 0x20));
0x0008aab6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008aab8 mov r1, r8 | r1 = r8;
0x0008aaba ldr.w r0, [r3, 0xe4] | r0 = *((r3 + 0xe4));
0x0008aabe bl 0x3cc90 | r0 = fcn_0003cc90 (r0, r1);
0x0008aac2 mov r4, r0 | r4 = r0;
0x0008aac4 cmp r0, 0 |
| if (r0 == 0) {
0x0008aac6 beq.w 0x8ae64 | goto label_196;
| }
0x0008aaca ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x0008aacc ldr r3, [pc, 0x184] |
0x0008aace and r1, r2, 0x3f | r1 = r2 & 0x3f;
0x0008aad2 add r3, pc | r3 = 0x11572a;
0x0008aad4 add r3, r1 | r3 += r1;
0x0008aad6 ldrb.w r3, [r3, 0x258] | r3 = *((r3 + 0x258));
0x0008aada cmp r3, 3 |
| if (r3 == 3) {
0x0008aadc beq.w 0x8aee0 | goto label_197;
| }
| label_77:
0x0008aae0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008aae2 cmp.w r8, 0x1f |
0x0008aae6 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008aae8 ldr.w r2, [r1, 0xd8] | r2 = *((r1 + 0xd8));
| if (r8 <= 0x1f) {
0x0008aaec ble.w 0x8ae52 | goto label_198;
| }
0x0008aaf0 orr r2, r2, 0x80000000 | r2 |= 0x80000000;
0x0008aaf4 str.w r2, [r1, 0xd8] | __asm ("str.w r2, [r1, 0xd8]");
| label_59:
0x0008aaf8 mov r0, r4 | r0 = r4;
0x0008aafa bl 0x32bd0 | fcn_00032bd0 (r0);
0x0008aafe b.w 0x89d98 | goto label_28;
| label_150:
0x0008ab02 ldr.w r7, [fp, 0x18] | r7 = *(arg_18h);
0x0008ab06 add.w r3, r0, r0, lsl 1 | r3 = r0 + (r0 << 1);
0x0008ab0a ldr r2, [sp, 0x18] | r2 = *(arg_18h);
0x0008ab0c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008ab10 add.w r3, r7, r3, lsl 4 | r3 = r7 + (r3 << 4);
0x0008ab14 add r7, r2 | r7 += r2;
0x0008ab16 ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0008ab18 vstr d16, [r3, 0x20] | __asm ("vstr d16, [r3, 0x20]");
0x0008ab1c ldrd r0, r1, [r7, 0x28] | __asm ("ldrd r0, r1, [r7, 0x28]");
0x0008ab20 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0008ab22 ldrsh.w r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x0008ab26 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x0008ab28 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008ab2a str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0008ab2c ldrsh.w r2, [r7, 8] | r2 = *((r7 + 8));
0x0008ab30 strh r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008ab32 movs r2, 4 | r2 = 4;
0x0008ab34 strh r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0008ab36 ldrh r2, [r7, 0xa] | r2 = *((r7 + 0xa));
0x0008ab38 orr r2, r2, 8 | r2 |= 8;
0x0008ab3c strh r2, [r7, 0xa] | *((r7 + 0xa)) = r2;
0x0008ab3e ldrb r2, [r7, 0xe] | r2 = *((r7 + 0xe));
0x0008ab40 adds r2, 1 | r2++;
0x0008ab42 strb r2, [r7, 0xe] | *((r7 + 0xe)) = r2;
0x0008ab44 strd r0, r1, [r3, 0x28] | __asm ("strd r0, r1, [r3, 0x28]");
0x0008ab48 b.w 0x89d98 | goto label_28;
| label_115:
0x0008ab4c ldr r2, [sp, 0x14] | r2 = *(arg_14h);
0x0008ab4e mov sl, r5 | sl = r5;
0x0008ab50 ldr.w sb, [r2, 0x14] | sb = *((r2 + 0x14));
0x0008ab54 b.w 0x897da | goto label_55;
| label_130:
0x0008ab58 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x0008ab5a mov r1, r8 | r1 = r8;
0x0008ab5c mov r2, r7 | r2 = r7;
0x0008ab5e mov r0, r4 | r0 = r4;
0x0008ab60 bl 0x386e4 | fcn_000386e4 (r0, r1, r2);
0x0008ab64 movs r1, 0x39 | r1 = 0x39;
0x0008ab66 mov r2, r0 | r2 = r0;
0x0008ab68 mov r3, sb | r3 = sb;
0x0008ab6a mov r0, r4 | r0 = r4;
0x0008ab6c bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008ab70 mov r1, r0 | r1 = r0;
0x0008ab72 cmp r0, 0 |
| if (r0 == 0) {
0x0008ab74 beq.w 0x8ae7e | goto label_199;
| }
0x0008ab78 ldr r3, [sp, 0x14] | r3 = *(arg_14h);
0x0008ab7a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008ab7c ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x0008ab80 bne.w 0x899ea | goto label_56;
| }
| label_71:
0x0008ab84 movw r2, 0x103 | r2 = 0x103;
0x0008ab88 mov r0, fp | r0 = fp;
0x0008ab8a bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0008ab8e mov r1, fp | r1 = fp;
0x0008ab90 mov r5, r0 | r5 = r0;
0x0008ab92 mov r2, r0 | r2 = r0;
0x0008ab94 ldr r0, [sp, 0x20] | r0 = x;
0x0008ab96 bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
0x0008ab9a b.w 0x89a20 | goto label_57;
| label_120:
0x0008ab9e cmp.w r8, 0 |
| if (r8 != 0) {
0x0008aba2 bne.w 0x8987a | goto label_58;
| }
| label_122:
0x0008aba6 cmp r4, 0 |
| if (r4 != 0) {
0x0008aba8 bne 0x8aaf8 | goto label_59;
| }
0x0008abaa b.w 0x89d98 | goto label_28;
| label_60:
0x0008abae ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x0008abb0 cmp r5, 0 |
| if (r5 == 0) {
0x0008abb2 beq.w 0x8ae1e | goto label_200;
| }
0x0008abb6 mov r0, r5 | r0 = r5;
0x0008abb8 blx 0x65dc | r0 = strcmp (r0, r1);
0x0008abbc bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0008abc0 subs r3, 1 | r3--;
0x0008abc2 ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x0008abc4 add r3, r5 | r3 += r5;
| label_69:
0x0008abc6 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0008abc8 cmp r2, 0x40 |
0x0008abca it eq |
| if (r2 != 0x40) {
0x0008abcc moveq r1, 0 | r1 = 0;
| }
0x0008abce ldr r7, [pc, 0x88] |
0x0008abd0 str r1, [sp, 0x34] | var_34h = r1;
0x0008abd2 ldr r1, [pc, 0x88] |
0x0008abd4 add r7, pc | r7 = 0x115832;
0x0008abd6 add r1, pc | r1 = 0x115838;
0x0008abd8 add r2, r1 | r2 += r1;
0x0008abda ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x0008abde adds r2, 1 | r2++;
0x0008abe0 strb r2, [r3] | *(r3) = r2;
0x0008abe2 b.w 0x899aa | goto label_52;
| label_195:
0x0008abe6 ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x0008abe8 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0008abec orr r3, r3, 0x400 | r3 |= 0x400;
0x0008abf0 strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
0x0008abf2 ldrb r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x0008abf4 cbz r3, 0x8ac22 | goto label_201;
| }
0x0008abf6 ldr r5, [pc, 0x68] |
0x0008abf8 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0008abfa add r5, pc | r5 = 0x115860;
| do {
0x0008abfc adds r4, r5, r3 | r4 = r5 + r3;
0x0008abfe ldrb.w r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0008ac02 ldrb.w r4, [r4, 0x140] | r4 = *((r4 + 0x140));
0x0008ac06 and r0, r0, 0x20 | r0 &= 0x20;
0x0008ac0a bic.w r3, r3, r0 | r3 = BIT_MASK (r3, r0);
0x0008ac0e strb r3, [r2] | *(r2) = r3;
0x0008ac10 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0008ac12 strb r4, [r3, r1] | *((r3 + r1)) = r4;
0x0008ac14 adds r1, 1 | r1++;
0x0008ac16 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0008ac1a ldrb r3, [r2, r1] | r3 = *((r2 + r1));
0x0008ac1c add r2, r1 | r2 += r1;
0x0008ac1e cmp r3, 0 |
0x0008ac20 bne 0x8abfc |
| } while (r3 != 0);
| label_201:
0x0008ac22 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ac24 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008ac28 cmp r3, 0 |
| if (r3 == 0) {
0x0008ac2a beq 0x8abae | goto label_60;
| }
0x0008ac2c ldr r7, [pc, 0x34] |
0x0008ac2e add r7, pc | r7 = 0x115896;
0x0008ac30 b.w 0x899aa | goto label_52;
| label_194:
0x0008ac68 str r2, [sp, 0x54] | var_54h = r2;
0x0008ac6a str r2, [sp, 0x30] | var_30h = r2;
| label_186:
0x0008ac6c ldr.w ip, [r8, 0x18] | ip = *((r8 + 0x18));
0x0008ac70 ldrh.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x0008ac74 cmp.w r3, 0x400 |
| if (r3 != 0x400) {
0x0008ac78 bne.w 0x8ae98 | goto label_202;
| }
0x0008ac7c movs r3, 1 | r3 = 1;
0x0008ac7e movs r4, 0 | r4 = 0;
| label_62:
0x0008ac80 ldr.w r2, [ip, 0x18] | r2 = *((ip + 0x18));
0x0008ac84 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0008ac86 cmp r1, r4 |
| if (r1 <= r4) {
0x0008ac88 ble.w 0x8a7f0 | goto label_61;
| }
0x0008ac8c ldr r6, [r2, 0x18] | r6 = *((r2 + 0x18));
0x0008ac8e add.w r2, r4, r4, lsl 1 | r2 = r4 + (r4 << 1);
0x0008ac92 adds.w r6, r6, r2, lsl 4 | r6 += (r2 << 4);
| if (r6 == r6) {
0x0008ac96 beq.w 0x8a7f0 | goto label_61;
| }
0x0008ac9a mov r4, r3 | r4 = r3;
| label_74:
0x0008ac9c ldrh.w r1, [ip, 0x3c] | r1 = *((ip + 0x3c));
0x0008aca0 cmp.w r1, 0x400 |
0x0008aca4 itt eq |
| if (r1 != 0x400) {
0x0008aca6 moveq sl, 1 | sl = 1;
| }
| if (r1 == 0x400) {
0x0008acaa movs r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x0008acac beq.w 0x8adb2 | goto label_203;
| }
0x0008acb0 ldrh.w r2, [ip, 0x3a] | r2 = *((ip + 0x3a));
0x0008acb4 ldrh r3, [r6, 0xa] | r3 = *((r6 + 0xa));
0x0008acb6 orrs r3, r2 | r3 |= r2;
0x0008acb8 ldrh r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0008acba lsls r5, r3, 0x18 | r5 = r3 << 0x18;
| if (r5 < r3) {
0x0008acbc bmi 0x8ada0 | goto label_63;
| }
0x0008acbe add.w r5, ip, 0x30 | r5 = ip + 0x30;
0x0008acc2 orr.w r7, r1, r2 | r7 = r1 | r2;
0x0008acc6 mov.w sb, 2 | sb = 2;
0x0008acca mov.w sl, 1 | sl = 1;
| label_65:
0x0008acce tst.w r2, 0x3e |
| if ((r2 & 0x3e) == 0) {
0x0008acd2 beq 0x8ad92 | goto label_64;
| }
0x0008acd4 tst.w r1, 0x3e |
| if ((r1 & 0x3e) == 0) {
0x0008acd8 beq 0x8ad92 | goto label_64;
| }
0x0008acda movw r3, 0xffe5 | r3 = 0xffe5;
0x0008acde ands r3, r7 | r3 &= r7;
| if (r3 != 0) {
0x0008ace0 cbz r3, 0x8acec |
0x0008ace2 movw r3, 0xffd9 | r3 = 0xffd9;
0x0008ace6 ands r3, r7 | r3 &= r7;
0x0008ace8 cmp r3, 0 |
| if (r3 != 0) {
0x0008acea bne 0x8ad92 | goto label_64;
| }
| }
0x0008acec ldr r3, [r6] | r3 = *(r6);
0x0008acee ldr.w lr, [r5] |
0x0008acf2 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0008acf4 ldr.w r2, [lr, 0xc] | r2 = *((lr + 0xc));
0x0008acf8 cmp r2, 0 |
0x0008acfa it ne |
| if (r2 != 0) {
0x0008acfc cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x0008acfe ite eq |
| if (r2 != 0) {
0x0008ad00 moveq r0, 1 | r0 = 1;
| }
| if (r2 == 0) {
0x0008ad02 movne r0, 0 | r0 = 0;
| }
| if (r2 == 0) {
0x0008ad04 beq 0x8ade0 | goto label_204;
| }
0x0008ad06 mov.w r3, -1 | r3 = -1;
0x0008ad0a bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
0x0008ad0e cmp r0, 0 |
| if (r0 != 0) {
0x0008ad10 bne 0x8ad8e | goto label_67;
| }
0x0008ad12 ldr.w lr, [r5] |
0x0008ad16 ldr r3, [r6] | r3 = *(r6);
| label_66:
0x0008ad18 ldr.w r2, [lr, 0x10] | r2 = *((lr + 0x10));
0x0008ad1c ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x0008ad1e cmp r2, 0 |
0x0008ad20 it ne |
| if (r2 != 0) {
0x0008ad22 cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x0008ad24 ite eq |
| if (r2 != 0) {
0x0008ad26 moveq r0, 1 | r0 = 1;
| }
| if (r2 == 0) {
0x0008ad28 movne r0, 0 | r0 = 0;
| }
| if (r2 == 0) {
0x0008ad2a beq 0x8ade6 | goto label_205;
| }
0x0008ad2c mov.w r3, -1 | r3 = -1;
0x0008ad30 bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
| if (r0 != 0) {
0x0008ad34 cbnz r0, 0x8ad8e | goto label_67;
| }
0x0008ad36 subs r2, r7, 1 | r2 = r7 - 1;
0x0008ad38 ldr r3, [r6] | r3 = *(r6);
0x0008ad3a tst r2, r7 |
| if ((r2 & r7) != 0) {
0x0008ad3c beq 0x8ad48 |
0x0008ad3e tst.w r7, 0x18 |
0x0008ad42 ite ne |
| if ((r7 & 0x18) == 0) {
0x0008ad44 movne r7, 8 | r7 = 8;
| }
| if ((r7 & 0x18) == 0) {
0x0008ad46 moveq r7, 0x20 | r7 = 0x20;
| goto label_206;
| }
| }
| label_206:
0x0008ad48 ldr.w r2, [fp] | r2 = *(fp);
0x0008ad4c ldr r2, [r2] | r2 = *(r2);
0x0008ad4e ldr r0, [r2] | r0 = *(r2);
| if (r3 == 0) {
0x0008ad50 cbz r3, 0x8ad8e | goto label_67;
| }
| label_68:
0x0008ad52 mov r1, r3 | r1 = r3;
0x0008ad54 movs r3, 0 | r3 = 0;
0x0008ad56 mov r2, r3 | r2 = r3;
0x0008ad58 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0008ad5c mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0008ad5e cbz r0, 0x8ad8e | goto label_67;
| }
0x0008ad60 cmp r7, 2 |
0x0008ad62 mov.w r2, 0x35 | r2 = 0x35;
| if (r7 == 2) {
0x0008ad66 beq 0x8ad7a | goto label_207;
| }
0x0008ad68 movs r5, 2 | r5 = 2;
| do {
0x0008ad6a sub.w r3, r2, 0x34 | r3 = r2 - 0x34;
0x0008ad6e adds r2, 1 | r2++;
0x0008ad70 lsl.w r3, r5, r3 | r3 = r5 << r3;
0x0008ad72 ssat r2, 0x20, r3, lsl 0x12 | __asm ("ssat r2, 0x20, r3, lsl 0x12");
0x0008ad76 bne 0x8ad6a |
| } while (r2 != 1);
0x0008ad78 uxtb r2, r2 | r2 = (int8_t) r2;
| label_207:
0x0008ad7a strb r2, [r1] | *(r1) = r2;
0x0008ad7c mov r0, fp | r0 = fp;
0x0008ad7e movs r2, 3 | r2 = 3;
0x0008ad80 bl 0x38bf0 | fcn_00038bf0 (r0, r1, r2, r3);
0x0008ad84 mov r1, fp | r1 = fp;
0x0008ad86 mov r2, r0 | r2 = r0;
0x0008ad88 ldr r0, [sp, 0x20] | r0 = x;
0x0008ad8a bl 0x8945c | fcn_0008945c (r0, r1, r2, r3, r4, r5, r6);
| label_67:
0x0008ad8e ldr.w ip, [r8, 0x18] | ip = *((r8 + 0x18));
| label_64:
0x0008ad92 ldrh.w r2, [ip, 0x3c] | r2 = *((ip + 0x3c));
0x0008ad96 mov r3, sl | r3 = sl;
0x0008ad98 mov sl, sb | sl = sb;
0x0008ad9a cmp.w r2, 0x400 |
| if (r2 == 0x400) {
0x0008ad9e beq 0x8adb2 | goto label_203;
| }
| label_63:
0x0008ada0 ldrh.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x0008ada4 cmp.w r3, 0x400 |
0x0008ada8 it eq |
| if (r3 == 0x400) {
0x0008adaa addeq r3, r4, 1 | r3 = r4 + 1;
| goto label_208;
| }
| if (r3 == 0x400) {
| label_208:
0x0008adac beq.w 0x8ac80 | goto label_62;
| }
0x0008adb0 b 0x8a7f0 | goto label_61;
| label_203:
0x0008adb2 ldr.w r2, [ip, 0x48] | r2 = *((ip + 0x48));
0x0008adb6 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0008adb8 cmp r1, r3 |
| if (r1 <= r3) {
0x0008adba ble 0x8ada0 | goto label_63;
| }
0x0008adbc ldr r5, [r2, 0x18] | r5 = *((r2 + 0x18));
0x0008adbe add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008adc2 adds.w r5, r5, r3, lsl 4 | r5 += (r3 << 4);
| if (r5 == r5) {
0x0008adc6 beq 0x8ada0 | goto label_63;
| }
0x0008adc8 ldrh r2, [r5, 0xa] | r2 = *((r5 + 0xa));
0x0008adca add.w sb, sl, 1 | sb = sl + 1;
0x0008adce ldrh r3, [r6, 0xa] | r3 = *((r6 + 0xa));
0x0008add0 ldrh r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x0008add2 orrs r3, r2 | r3 |= r2;
0x0008add4 ldrh r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0008add6 lsls r7, r3, 0x18 | r7 = r3 << 0x18;
| if (r7 < r3) {
0x0008add8 bmi 0x8ad92 | goto label_64;
| }
0x0008adda orr.w r7, r2, r1 | r7 = r2 | r1;
0x0008adde b 0x8acce | goto label_65;
| label_204:
0x0008ade0 cmp r1, r2 |
| if (r1 != r2) {
0x0008ade2 bne 0x8ad92 | goto label_64;
| }
0x0008ade4 b 0x8ad18 | goto label_66;
| label_205:
0x0008ade6 cmp r1, r2 |
| if (r1 != r2) {
0x0008ade8 bne 0x8ad8e | goto label_67;
| }
0x0008adea ldr.w r2, [fp] | r2 = *(fp);
0x0008adee ldr r2, [r2] | r2 = *(r2);
0x0008adf0 ldr r0, [r2] | r0 = *(r2);
0x0008adf2 subs r2, r7, 1 | r2 = r7 - 1;
0x0008adf4 tst r2, r7 |
| if ((r2 & r7) == 0) {
0x0008adf6 beq 0x8ad52 | goto label_68;
| }
0x0008adf8 tst.w r7, 0x18 |
0x0008adfc ite ne |
| if ((r7 & 0x18) == 0) {
0x0008adfe movne r7, 8 | r7 = 8;
| }
| if ((r7 & 0x18) != 0) {
0x0008ae00 moveq r7, 0x20 | r7 = 0x20;
| }
0x0008ae02 b 0x8ad52 | goto label_68;
| label_184:
0x0008ae04 mov sb, r6 | sb = r6;
0x0008ae06 mov.w sl, 0x44 | sl = 0x44;
0x0008ae0a mov r4, sb | r4 = sb;
0x0008ae0c str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0008ae10 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0008ae14 mov r6, r3 | r6 = r3;
0x0008ae16 ldr.w sl, [sp, 0x14] | sl = *(arg_14h);
0x0008ae1a b.w 0x89b72 | goto label_40;
| label_200:
0x0008ae1e mvn r3, 0xff | r3 = ~0xff;
0x0008ae22 ldrb.w r2, [r3, 0xff] | r2 = *((r3 + 0xff));
0x0008ae26 mov.w r3, -1 | r3 = -1;
0x0008ae2a b 0x8abc6 | goto label_69;
| label_123:
0x0008ae2c cmp sb, sl |
| if (sb != sl) {
0x0008ae2e bne.w 0x89890 | goto label_70;
| }
0x0008ae32 cmp r4, 0 |
| if (r4 != 0) {
0x0008ae34 bne.w 0x8aaf8 | goto label_59;
| }
0x0008ae38 b.w 0x89d98 | goto label_28;
| label_125:
0x0008ae3c ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008ae3e mov r1, sb | r1 = sb;
0x0008ae40 bl 0x30c30 | fcn_00030c30 (r0, r1);
0x0008ae44 cmp r4, 0 |
| if (r4 != 0) {
0x0008ae46 bne.w 0x8aaf8 | goto label_59;
| }
0x0008ae4a b.w 0x89d98 | goto label_28;
| label_105:
0x0008ae4e blx 0x6430 | fcn_00006430 ();
| label_198:
0x0008ae52 add.w r8, r8, -1 | r8 += -1;
0x0008ae56 movs r3, 1 | r3 = 1;
0x0008ae58 lsl.w r3, r3, r8 | r3 <<= r8;
0x0008ae5c orrs r3, r2 | r3 |= r2;
0x0008ae5e str.w r3, [r1, 0xd8] | __asm ("str.w r3, [r1, 0xd8]");
0x0008ae62 b 0x8aaf8 | goto label_59;
| label_196:
0x0008ae64 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008ae66 cmp.w r8, 0x1f |
0x0008ae6a ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008ae6c ldr.w r2, [r1, 0xd8] | r2 = *((r1 + 0xd8));
| if (r8 > 0x1f) {
0x0008ae70 ble 0x8ae9e |
0x0008ae72 orr r2, r2, 0x80000000 | r2 |= 0x80000000;
0x0008ae76 str.w r2, [r1, 0xd8] | __asm ("str.w r2, [r1, 0xd8]");
0x0008ae7a b.w 0x89d98 | goto label_28;
| label_199:
0x0008ae7e mov r1, r8 | r1 = r8;
0x0008ae80 b 0x8ab84 | goto label_71;
| label_129:
0x0008ae82 mvn r3, 0xff | r3 = ~0xff;
0x0008ae86 ldrb.w r2, [r3, 0xff] | r2 = *((r3 + 0xff));
0x0008ae8a mov.w r3, -1 | r3 = -1;
0x0008ae8e b.w 0x8999c | goto label_72;
| label_127:
0x0008ae92 mov r6, sb | r6 = sb;
0x0008ae94 b.w 0x89974 | goto label_73;
| label_202:
0x0008ae98 mov r6, ip | r6 = ip;
0x0008ae9a movs r4, 1 | r4 = 1;
0x0008ae9c b 0x8ac9c | goto label_74;
| }
0x0008ae9e add.w r8, r8, -1 | r8 += -1;
0x0008aea2 movs r3, 1 | r3 = 1;
0x0008aea4 lsl.w r3, r3, r8 | r3 <<= r8;
0x0008aea8 orrs r3, r2 | r3 |= r2;
0x0008aeaa str.w r3, [r1, 0xd8] | __asm ("str.w r3, [r1, 0xd8]");
0x0008aeae b.w 0x89d98 | goto label_28;
| label_124:
0x0008aeb2 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008aeb4 bl 0x25460 | r0 = fcn_00025460 (r0);
0x0008aeb8 cmp r0, 0x42 |
| if (r0 != 0x42) {
0x0008aeba bne.w 0x89902 | goto label_75;
| }
0x0008aebe ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008aec0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008aec2 tst.w r3, 0x3000000 |
| if ((r3 & 0x3000000) != 0) {
0x0008aec6 bne.w 0x89946 | goto label_76;
| }
0x0008aeca ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0008aecc cmp r3, 0 |
| if (r3 == 0) {
0x0008aece beq.w 0x89946 | goto label_76;
| }
0x0008aed2 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0008aed6 cmp r3, 1 |
| if (r3 != 1) {
0x0008aed8 bne.w 0x89946 | goto label_76;
| }
0x0008aedc b.w 0x89902 | goto label_75;
| label_197:
0x0008aee0 movw r3, 0x202 | r3 = 0x202;
0x0008aee4 bics r3, r2 | __asm ("bics r3, r2");
| if (r3 == 1) {
0x0008aee6 beq 0x8afb0 | goto label_209;
| }
| label_81:
0x0008aee8 lsls r3, r2, 0x1f | r3 = r2 << 0x1f;
| if (r3 < r2) {
0x0008aeea bmi.w 0x8aae0 | goto label_77;
| }
0x0008aeee movs r1, 1 | r1 = 1;
0x0008aef0 mov r0, r4 | r0 = r4;
0x0008aef2 bl 0x3da00 | fcn_0003da00 (r0, r1);
| label_82:
0x0008aef6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008aef8 cmp.w r8, 0x1f |
0x0008aefc ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0008aefe ldr.w r3, [r2, 0xd8] | r3 = *((r2 + 0xd8));
| if (r8 <= 0x1f) {
0x0008af02 ble 0x8afa2 | goto label_210;
| }
0x0008af04 orr r3, r3, 0x80000000 | r3 |= 0x80000000;
| label_80:
0x0008af08 str.w r3, [r2, 0xd8] | __asm ("str.w r3, [r2, 0xd8]");
0x0008af0c cmp r0, 0 |
| if (r0 == 0) {
0x0008af0e beq.w 0x8aaf8 | goto label_59;
| }
0x0008af12 ldrb.w sb, [r0] | sb = *(r0);
0x0008af16 cmp.w sb, 0 |
| if (sb != 0) {
0x0008af1a bne.w 0x8982e | goto label_78;
| }
0x0008af1e b 0x8aaf8 | goto label_59;
| label_126:
0x0008af20 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008af22 ldrsh.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x0008af26 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0008af28 cmp r2, 0x1f |
0x0008af2a itt le |
| if (r2 > 0x1f) {
0x0008af2c addle r2, r2, -1 | r2 += -1;
| }
| if (r2 <= 0x1f) {
0x0008af30 movs r1, 1 | r1 = 1;
| }
0x0008af32 ldr.w r3, [r6, 0xd8] | r3 = *((r6 + 0xd8));
0x0008af36 itet le |
| if (r1 > 1) {
0x0008af38 lslle r2, r1, r2 | r2 = r1 << r2;
| }
| if (r1 > 1) {
0x0008af3c orrle r3, r3, 0x80000000 | r3 |= 0x80000000;
| }
| if (r1 <= 1) {
0x0008af40 orrs r3, r2 | r3 |= r2;
| }
0x0008af42 str.w r3, [r6, 0xd8] | __asm ("str.w r3, [r6, 0xd8]");
0x0008af44 adds r0, 0xd8 | r0 += 0xd8;
0x0008af46 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008af48 cmp r3, 0 |
| if (r3 == 0) {
0x0008af4a beq.w 0x8994e | goto label_79;
| }
0x0008af4e ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0008af50 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0008af52 cmp r3, 0 |
| if (r3 == 0) {
0x0008af54 beq.w 0x8994e | goto label_79;
| }
0x0008af58 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008af5a ldrb r3, [r3, 0x13] | r3 = *((r3 + 0x13));
| if (r3 == 0) {
0x0008af5c cbz r3, 0x8afc2 | goto label_211;
| }
0x0008af5e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008af60 subs r3, 1 | r3--;
0x0008af62 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008af64 strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0008af66 adds r3, 0x26 | r3 += 0x26;
0x0008af68 ldr.w r8, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| r8 = *((r2 + offset_1));
| label_84:
0x0008af6c mov r2, r8 | r2 = r8;
0x0008af6e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008af70 mov r1, r5 | r1 = r5;
0x0008af72 bl 0x85cf4 | fcn_00085cf4 (r0, r1, r2, r3, r4, r5, r6);
0x0008af76 ldr r3, [r6] | r3 = *(r6);
0x0008af78 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0008af7a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0008af7e cbnz r3, 0x8afba | goto label_212;
| }
0x0008af80 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0008af82 subs r2, 1 | r2--;
0x0008af84 movs r1, 0x18 | r1 = 0x18;
0x0008af86 mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
| label_83:
0x0008af8a movs r2, 0 | r2 = 0;
0x0008af8c str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0008af8e cmp.w r8, 0 |
| if (r8 == 0) {
0x0008af92 beq.w 0x8994e | goto label_79;
| }
0x0008af96 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008af98 mov r1, r8 | r1 = r8;
0x0008af9a bl 0x27730 | fcn_00027730 (r0, r1);
0x0008af9c invalid |
0x0008afa0 pop {r1, r2, r4, r6, r7} |
| label_210:
0x0008afa2 add.w r8, r8, -1 | r8 += -1;
0x0008afa6 movs r1, 1 | r1 = 1;
0x0008afa8 lsl.w r1, r1, r8 | r1 <<= r8;
0x0008afac orrs r3, r1 | r3 |= r1;
0x0008afae b 0x8af08 | goto label_80;
| label_209:
0x0008afb0 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x0008afb2 cmp r3, 1 |
| if (r3 != 1) {
0x0008afb4 bne 0x8aee8 | goto label_81;
| }
0x0008afb6 ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x0008afb8 b 0x8aef6 | goto label_82;
| label_212:
0x0008afba ldr r3, [pc, 0x3c] |
0x0008afbc add r3, pc | r3 = 0x115fba;
0x0008afbe adds r3, 4 | r3 += 4;
0x0008afc0 b 0x8af8a | goto label_83;
| label_211:
0x0008afc2 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008afc4 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0008afc6 add.w r8, r3, 1 | r8 = r3 + 1;
0x0008afca str.w r8, [r2, 0x2c] | __asm ("str.w r8, [r2, 0x2c]");
0x0008afce b 0x8af6c | goto label_84;
| label_119:
0x0008afd0 mov r2, r8 | r2 = r8;
0x0008afd2 b.w 0x89876 | goto label_85;
| label_182:
0x0008afd6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008afd8 ldr r2, [r3] | r2 = *(r3);
0x0008afda ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x0008afdc b.w 0x8a620 | goto label_86;
| label_181:
0x0008afe0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008afe2 ldr r2, [r3] | r2 = *(r3);
0x0008afe4 ldr.w sl, [r2, 8] | sl = *((r2 + 8));
0x0008afe8 b.w 0x8a612 | goto label_87;
| label_169:
0x0008afec movs r3, 0 | r3 = 0;
0x0008afee ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008aff0 udf 0xff | __asm ("udf 0xff");
| label_117:
0x0008aff2 movs r3, 0 | r3 = 0;
0x0008aff4 ldrb r3, [r3] | r3 = *(r3);
0x0008aff6 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8affc */
| #include <stdint.h>
|
; (fcn) fcn.0008affc () | void fcn_0008affc (int16_t arg_68h, int16_t arg_14ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008affc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008b000 mov sb, r2 | sb = r2;
0x0008b002 ldr r2, [pc, 0x168] |
0x0008b004 mov ip, r3 |
0x0008b006 sub sp, 0x44 |
0x0008b008 mov r8, r0 | r8 = r0;
0x0008b00a ldr r3, [pc, 0x164] | r3 = *(0x8b172);
0x0008b00c add r2, pc | r2 = 0x11617e;
0x0008b00e ldrb.w lr, [sp, 0x68] |
0x0008b012 ldr.w sl, [r0, 8] | sl = *((r0 + 8));
0x0008b016 ldr r3, [r2, r3] |
0x0008b018 and fp, lr, 1 |
0x0008b01c ldr r7, [r1] | r7 = *(r1);
0x0008b01e rsb.w fp, fp, 0x51 |
0x0008b022 ldr r3, [r3] | r3 = imp.atan;
0x0008b024 str r3, [sp, 0x3c] | var_3ch = r3;
0x0008b026 mov.w r3, 0 | r3 = 0;
0x0008b02a ldrb r3, [r0, 0x17] | r3 = *((r0 + 0x17));
0x0008b02c uxtb.w fp, fp | fp = (int8_t) fp;
| if (r3 == 0) {
0x0008b030 cbnz r3, 0x8b036 |
0x0008b032 and lr, lr, 0xfd | lr &= 0xfd;
| }
0x0008b036 cmp r7, 0 |
| if (r7 <= 0) {
0x0008b038 ble 0x8b0f8 | goto label_4;
| }
0x0008b03a ldr r3, [pc, 0x138] |
0x0008b03c add.w r4, r1, 0x18 | r4 = r1 + 0x18;
0x0008b040 and r6, lr, 4 | r6 = lr & 4;
0x0008b044 movs r5, 0 | r5 = 0;
0x0008b046 strd lr, ip, [sp, 0x18] | __asm ("strd lr, ip, [var_18h]");
0x0008b04a add r3, pc | r3 = 0x1161c4;
0x0008b04c str r3, [sp, 0x14] | var_14h = r3;
0x0008b04e and r3, lr, 2 | r3 = lr & 2;
0x0008b052 strd r3, r8, [sp, 8] | __asm ("strd r3, r8, [var_8h]");
0x0008b056 b 0x8b074 |
| while (r6 != 0) {
0x0008b058 ldrh r2, [r4, -0x4] | r2 = *((r4 - 0x4));
| if (r2 == 0) {
0x0008b05c cbz r2, 0x8b07c | goto label_5;
| }
0x0008b05e ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008b060 ands r3, r3, 8 | r3 &= 8;
0x0008b064 it ne |
| if (r3 == r3) {
0x0008b066 addne r7, r7, -1 | r7 += -1;
| }
| if (r3 == r3) {
0x0008b06a beq 0x8b14e | goto label_6;
| }
| label_1:
0x0008b06c cmp r7, r5 |
0x0008b06e add.w r4, r4, 0x10 | r4 += 0x10;
| if (r7 <= r5) {
0x0008b072 ble 0x8b0f8 | goto label_4;
| }
| label_0:
0x0008b074 ldr r1, [r4, -0x10] | r1 = *((r4 - 0x10));
0x0008b078 cmp r6, 0 |
0x0008b07a bne 0x8b058 |
| }
| label_5:
0x0008b07c ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x0008b07e cbz r3, 0x8b0a8 |
0x0008b080 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008b082 str r3, [sp, 0x24] | var_24h = r3;
0x0008b084 ldr r3, [pc, 0xf0] |
0x0008b086 add r3, pc | r3 = 0x116202;
0x0008b088 str r3, [sp, 0x28] | var_28h = r3;
0x0008b08a movs r3, 2 | r3 = 2;
0x0008b08c strh.w r3, [sp, 0x34] | var_34h = r3;
0x0008b090 movs r3, 0 | r3 = 0;
0x0008b092 str r3, [sp, 0x38] | var_38h = r3;
0x0008b094 cmp r1, 0 |
| if (r1 == 0) {
0x0008b096 beq 0x8b112 | goto label_7;
| }
0x0008b098 add r0, sp, 0x20 | r0 += var_20h;
0x0008b09a str r1, [sp, 0x10] | var_10h = r1;
0x0008b09c bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0008b0a0 ldrh.w r3, [sp, 0x34] | r3 = var_34h;
0x0008b0a4 ldr r1, [sp, 0x10] | r1 = var_10h;
| if (r3 != 0) {
0x0008b0a6 cbnz r3, 0x8b112 | goto label_7;
| }
| }
0x0008b0a8 add.w r8, sb, r5 | r8 = sb + r5;
0x0008b0ac ldr r0, [sp, 0xc] | r0 = var_ch;
0x0008b0ae mov r2, r8 | r2 = r8;
0x0008b0b0 bl 0x85cf4 | r0 = fcn_00085cf4 (r0, r1, r2, r3, r4, r5, r6);
0x0008b0b4 cmp r8, r0 |
0x0008b0b6 mov r2, r0 | r2 = r0;
| if (r8 != r0) {
0x0008b0b8 beq 0x8b0f0 |
0x0008b0ba cmp.w fp, 0x50 |
| if (fp == 0x50) {
0x0008b0be bne 0x8b0e2 |
0x0008b0c0 ldr.w r1, [sl] | r1 = *(sl);
0x0008b0c4 ldrb.w r0, [r1, 0x57] | r0 = *((r1 + 0x57));
0x0008b0c8 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
| if (r0 != 0) {
0x0008b0cc cbnz r0, 0x8b120 | goto label_8;
| }
0x0008b0ce ldr.w r0, [sl, 0x68] | r0 = *((sl + 0x68));
0x0008b0d2 subs r1, 1 | r1--;
0x0008b0d4 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x0008b0d8 add.w r1, r0, r1, lsl 3 | r1 = r0 + (r1 << 3);
0x0008b0dc ldrb r0, [r1] | r0 = *(r1);
0x0008b0de cmp r0, 0x50 |
| if (r0 == 0x50) {
0x0008b0e0 beq 0x8b12c | goto label_9;
| }
| }
| label_2:
0x0008b0e2 movs r1, 0 | r1 = 0;
0x0008b0e4 mov r3, r8 | r3 = r8;
0x0008b0e6 str r1, [sp] | *(sp) = r1;
0x0008b0e8 mov r0, sl | r0 = sl;
0x0008b0ea mov r1, fp | r1 = fp;
0x0008b0ec bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
| label_3:
0x0008b0f0 adds r5, 1 | r5++;
0x0008b0f2 adds r4, 0x10 | r4 += 0x10;
0x0008b0f4 cmp r7, r5 |
| if (r7 > r5) {
0x0008b0f6 bgt 0x8b074 | goto label_0;
| }
| label_4:
0x0008b0f8 ldr r2, [pc, 0x80] |
0x0008b0fa ldr r3, [pc, 0x74] | r3 = *(0x8b172);
0x0008b0fc add r2, pc | r2 = 0x11627c;
0x0008b0fe ldr r3, [r2, r3] | r3 = imp.atan;
0x0008b100 ldr r2, [r3] | r2 = imp.atan;
0x0008b102 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008b104 eors r2, r3 | r2 ^= r3;
0x0008b106 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008b10a bne 0x8b166 | goto label_10;
| }
0x0008b10c add sp, 0x44 |
0x0008b10e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0008b112 add.w r2, sb, r5 | r2 = sb + r5;
0x0008b116 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0008b118 adds r5, 1 | r5++;
0x0008b11a bl 0x881c4 | fcn_000881c4 (r0, r1, r2);
0x0008b11e b 0x8b06c | goto label_1;
| label_8:
0x0008b120 ldr r1, [pc, 0x5c] |
0x0008b122 add r1, pc | r1 = 0x1162a6;
0x0008b124 ldrb r0, [r1, 4] | r0 = *((r1 + 4));
0x0008b126 adds r1, 4 | r1 += 4;
0x0008b128 cmp r0, 0x50 |
| if (r0 != 0x50) {
0x0008b12a bne 0x8b0e2 | goto label_2;
| }
| label_9:
0x0008b12c ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x0008b12e ldr r0, [r1, 4] | r0 = *((r1 + 4));
0x0008b130 add r0, r3 | r0 += r3;
0x0008b132 adds r0, 1 | r0++;
0x0008b134 cmp r2, r0 |
| if (r2 != r0) {
0x0008b136 bne 0x8b0e2 | goto label_2;
| }
0x0008b138 ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x0008b13a add r0, r3 | r0 += r3;
0x0008b13c adds r0, 1 | r0++;
0x0008b13e cmp r8, r0 |
| if (r8 != r0) {
0x0008b140 bne 0x8b0e2 | goto label_2;
| }
0x0008b142 ldrh r0, [r1, 2] | r0 = *((r1 + 2));
0x0008b144 cmp r0, 0 |
| if (r0 != 0) {
0x0008b146 bne 0x8b0e2 | goto label_2;
| }
0x0008b148 adds r3, 1 | r3++;
0x0008b14a str r3, [r1, 0xc] | *((r1 + 0xc)) = r3;
0x0008b14c b 0x8b0f0 | goto label_3;
| label_6:
0x0008b14e str r3, [sp] | *(sp) = r3;
0x0008b150 mov r1, fp | r1 = fp;
0x0008b152 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008b154 mov r0, sl | r0 = sl;
0x0008b156 add r2, r3 | r2 += r3;
0x0008b158 add.w r3, sb, r5 | r3 = sb + r5;
0x0008b15c subs r2, 1 | r2--;
0x0008b15e adds r5, 1 | r5++;
0x0008b160 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b164 b 0x8b06c | goto label_1;
| label_10:
0x0008b166 blx 0x6430 | fcn_00006430 ();
0x0008b16a nop |
0x0008b16c stc p0, c0, [ip, 0x14] | __asm ("stc p0, c0, [ip, 0x14]");
0x0008b170 lsls r4, r6, 8 | r4 = r6 << 8;
0x0008b172 movs r0, r0 |
0x0008b174 ldr r6, [sp, 0x14c] | r6 = *(arg_14ch);
0x0008b176 vsra.u32 d24, d11, 6 | __asm ("vsra.u32 d24, d11, 6");
0x0008b17a invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8b184 */
| #include <stdint.h>
|
; (fcn) fcn.0008b184 () | void fcn_0008b184 (int16_t arg_1h, int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic x;
| int16_t var_20h;
| int32_t var_20h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008b184 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0008b188 sub sp, 0x2c |
0x0008b18a ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x0008b18c mov sl, r2 | sl = r2;
0x0008b18e ldr.w fp, [sp, 0x50] | fp = *(arg_50h);
0x0008b192 str r0, [sp, 0x14] | var_14h = r0;
0x0008b194 str r1, [sp, 0x10] | var_10h = r1;
0x0008b196 str r3, [sp, 0x18] | var_18h = r3;
0x0008b198 cmp r4, 0 |
| if (r4 == 0) {
0x0008b19a beq.w 0x8b530 | goto label_16;
| }
| label_11:
0x0008b19e ldr r5, [sp, 0x10] | r5 = var_10h;
0x0008b1a0 cmp r5, 0 |
| if (r5 == 0) {
0x0008b1a2 beq.w 0x8b2b2 | goto label_17;
| }
0x0008b1a6 ldr r3, [pc, 0x3ec] |
0x0008b1a8 add r3, pc | r3 = 0x116742;
0x0008b1aa addw r3, r3, 0xd58 | __asm ("addw r3, r3, 0xd58");
0x0008b1ae str r3, [sp, 0xc] | var_ch = r3;
| label_2:
0x0008b1b0 ldrb.w r6, [r5, 0x60] | r6 = *((r5 + 0x60));
0x0008b1b4 movs r7, 0 | r7 = 0;
0x0008b1b6 ldr.w sb, [r5, 0x2c] | sb = *((r5 + 0x2c));
0x0008b1ba cmp r6, 0 |
| if (r6 != 0) {
0x0008b1bc bne 0x8b238 | goto label_18;
| }
0x0008b1be ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0008b1c0 ldr r7, [r3, 0x14] | r7 = *((r3 + 0x14));
0x0008b1c2 cmp r7, 0 |
| if (r7 == 0) {
0x0008b1c4 beq 0x8b238 | goto label_18;
| }
0x0008b1c6 ldr r7, [r7] | r7 = *(r7);
0x0008b1c8 cmp r7, 0 |
| if (r7 <= 0) {
0x0008b1ca ble 0x8b238 | goto label_18;
| }
0x0008b1cc mov.w r8, 0x5e | r8 = 0x5e;
0x0008b1d0 b 0x8b202 |
| while (r6 != 1) {
| label_0:
0x0008b1d2 ldrd r1, r2, [r4, 0x6c] | __asm ("ldrd r1, r2, [r4, 0x6c]");
0x0008b1d6 cmp r1, r2 |
0x0008b1d8 add.w r0, r1, 1 | r0 = r1 + 1;
0x0008b1dc add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
| if (r1 >= r2) {
0x0008b1e0 bge 0x8b2b8 | goto label_19;
| }
0x0008b1e2 str r0, [r4, 0x6c] | *((r4 + 0x6c)) = r0;
0x0008b1e4 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x0008b1e6 add.w r2, r0, r1, lsl 3 | r2 = r0 + (r1 << 3);
0x0008b1ea strd sl, r3, [r2, 4] | __asm ("strd sl, r3, [r2, 4]");
0x0008b1ee adds r2, 0x10 | r2 += 0x10;
0x0008b1f0 str ip, [r2, -0x4] | *((r2 - 0x4)) = ip;
0x0008b1f4 str.w r8, [r0, r1, lsl 3] | __asm ("str.w r8, [r0, r1, lsl 3]");
0x0008b1f8 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
| label_3:
0x0008b1fc adds r6, 1 | r6++;
0x0008b1fe cmp r7, r6 |
| if (r7 == r6) {
0x0008b200 beq 0x8b238 | goto label_18;
| }
| label_1:
0x0008b202 ldr r1, [r5, 0x50] | r1 = *((r5 + 0x50));
0x0008b204 cmp r6, 1 |
0x0008b206 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008b20a add.w ip, r6, fp |
0x0008b20e add.w r3, r1, r6 | r3 = r1 + r6;
0x0008b212 bne 0x8b1d2 |
| }
0x0008b214 ldr.w r2, [sb, 0x20] | r2 = *((sb + 0x20));
0x0008b218 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0008b21a cmp r2, r0 |
| if (r2 != r0) {
0x0008b21c bne 0x8b1d2 | goto label_0;
| }
0x0008b21e ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008b220 add.w r0, fp, 1 | r0 += arg_1h;
0x0008b224 adds r6, 1 | r6++;
0x0008b226 ldr r2, [r3, 0x30] | r2 = *((r3 + 0x30));
0x0008b228 adds r3, r1, 1 | r3 = r1 + 1;
0x0008b22a str r0, [sp] | *(sp) = r0;
0x0008b22c movs r1, 0x5e | r1 = 0x5e;
0x0008b22e mov r0, r4 | r0 = r4;
0x0008b230 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b234 cmp r7, r6 |
| if (r7 != r6) {
0x0008b236 bne 0x8b202 | goto label_1;
| }
| label_18:
0x0008b238 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008b23a ldr r3, [r3, 0x58] | r3 = *((r3 + 0x58));
0x0008b23c cmp r3, 0 |
| if (r3 != 0) {
0x0008b23e bne 0x8b2c8 | goto label_20;
| }
0x0008b240 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x0008b244 lsls r1, r2, 0x13 | r1 = r2 << 0x13;
| if (r1 >= r2) {
0x0008b246 bpl 0x8b2c8 | goto label_20;
| }
0x0008b248 ldrb r2, [r5, 0x11] | r2 = *((r5 + 0x11));
0x0008b24a cmp r2, 0x5a |
| if (r2 == 0x5a) {
0x0008b24c beq 0x8b2c8 | goto label_20;
| }
0x0008b24e str r3, [sp] | *(sp) = r3;
0x0008b250 mov r2, fp | r2 = fp;
0x0008b252 movs r1, 0x32 | r1 = 0x32;
0x0008b254 mov r0, r4 | r0 = r4;
0x0008b256 str r3, [sp, 0x1c] | x = r3;
0x0008b258 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b25c ldr r7, [sp, 0x18] | r7 = var_18h;
0x0008b25e mov r6, r0 | r6 = r0;
0x0008b260 ldr r3, [sp, 0x1c] | r3 = x;
0x0008b262 cmp r7, 0 |
| if (r7 == 0) {
0x0008b264 beq.w 0x8b4c6 | goto label_21;
| }
0x0008b268 movs r1, 1 | r1 = 1;
0x0008b26a ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0008b26c mov r0, r4 | r0 = r4;
0x0008b26e str r1, [sp, 4] | var_4h = r1;
0x0008b270 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008b274 movs r1, 0x16 | r1 = 0x16;
0x0008b276 str r3, [sp, 0x1c] | x = r3;
0x0008b278 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008b27c ldr r3, [sp, 0x1c] | r3 = x;
0x0008b27e movs r1, 0x82 | r1 = 0x82;
0x0008b280 ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0008b282 mov r0, r4 | r0 = r4;
0x0008b284 str r3, [sp] | *(sp) = r3;
0x0008b286 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b28a ldr r1, [r4] | r1 = *(r4);
0x0008b28c ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0008b28e ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0008b292 subs r3, r2, 2 | r3 = r2 - 2;
0x0008b294 it mi |
| if (r3 >= r2) {
0x0008b296 addmi r3, r2, -1 | r3 = r2 + -1;
| }
0x0008b29a cmp r1, 0 |
| if (r1 == 0) {
0x0008b29c beq.w 0x8b550 | goto label_22;
| }
0x0008b2a0 ldr r3, [pc, 0x2f4] |
0x0008b2a2 add r3, pc | r3 = 0x11683e;
0x0008b2a4 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0008b2a6 adds r3, 4 | r3 += 4;
| label_10:
0x0008b2a8 ldr r5, [r5, 0x24] | r5 = *((r5 + 0x24));
0x0008b2aa str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008b2ac cmp r5, 0 |
| if (r5 != 0) {
0x0008b2ae bne.w 0x8b1b0 | goto label_2;
| }
| label_17:
0x0008b2b2 add sp, 0x2c |
0x0008b2b4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x0008b2b8 mov r2, sl | r2 = sl;
0x0008b2ba movs r1, 0x5e | r1 = 0x5e;
0x0008b2bc mov r0, r4 | r0 = r4;
0x0008b2be str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0008b2c2 bl 0x41a4c | fcn_00041a4c (r0, r1, r2, r3, r4);
0x0008b2c6 b 0x8b1fc | goto label_3;
| label_20:
0x0008b2c8 ldr r6, [r5, 0x40] | r6 = *((r5 + 0x40));
0x0008b2ca cmp r6, 0 |
| if (r6 != 0) {
0x0008b2cc bne 0x8b3a4 | goto label_23;
| }
0x0008b2ce ldr r3, [pc, 0x2cc] |
0x0008b2d0 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x0008b2d4 add r3, pc | r3 = 0x116876;
0x0008b2d6 cmp r2, r3 |
| if (r2 != r3) {
0x0008b2d8 beq 0x8b396 |
0x0008b2da ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
| if (r3 != 0) {
0x0008b2dc cbz r3, 0x8b332 |
0x0008b2de ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008b2e0 ldrb r3, [r3, 0x13] | r3 = *((r3 + 0x13));
0x0008b2e2 cmp r3, 0 |
| if (r3 == 0) {
0x0008b2e4 beq.w 0x8b430 | goto label_24;
| }
0x0008b2e8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008b2ea subs r3, 1 | r3--;
0x0008b2ec uxtb r3, r3 | r3 = (int8_t) r3;
0x0008b2ee strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0008b2f0 adds r3, 0x26 | r3 += 0x26;
0x0008b2f2 ldr.w r8, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r8 = *((r2 + offset_0));
| label_8:
0x0008b2f6 ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x0008b2f8 mov r2, sl | r2 = sl;
0x0008b2fa movs r1, 0x5e | r1 = 0x5e;
0x0008b2fc mov r0, r4 | r0 = r4;
0x0008b2fe str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008b302 add r3, r7 | r3 += r7;
0x0008b304 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b308 movs r3, 1 | r3 = 1;
0x0008b30a mov r2, r8 | r2 = r8;
0x0008b30c str r3, [sp] | *(sp) = r3;
0x0008b30e movs r1, 0x10 | r1 = 0x10;
0x0008b310 movs r3, 0 | r3 = 0;
0x0008b312 mov r0, r4 | r0 = r4;
0x0008b314 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b318 mov r6, r0 | r6 = r0;
0x0008b31a cmp.w r8, 0 |
| if (r8 == 0) {
0x0008b31e beq 0x8b332 | goto label_25;
| }
0x0008b320 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008b322 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0008b324 cmp r3, 7 |
0x0008b326 itttt ls |
| if (r3 > 7) {
0x0008b328 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008b32a addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008b32c strbls r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0008b32e strls r8, [r1, r3, lsl 2] | offset_1 = r3 << 2;
| *((r1 + offset_1)) = r8;
| goto label_25;
| }
| }
| label_25:
0x0008b332 ldrb.w r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x0008b336 cmp r3, 0 |
| if (r3 != 0) {
0x0008b338 bne.w 0x8b446 | goto label_26;
| }
0x0008b33c str.w fp, [sp, 0x1c] | __asm ("str.w fp, [x]");
| label_9:
0x0008b340 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0008b344 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x0008b346 bmi 0x8b3fe | goto label_27;
| }
| label_7:
0x0008b348 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0008b34a mov r0, r4 | r0 = r4;
0x0008b34c str r3, [sp] | *(sp) = r3;
0x0008b34e ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
0x0008b352 rsb.w r1, r2, 0xa2 | r1 = 0xa2 - r2;
0x0008b356 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b35a ldr r0, [r4] | r0 = *(r4);
0x0008b35c ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
| if (r3 != 0) {
0x0008b360 cbnz r3, 0x8b3ba | goto label_28;
| }
0x0008b362 ldrd r1, r3, [r4, 0x68] | __asm ("ldrd r1, r3, [r4, 0x68]");
0x0008b366 movs r0, 0xf9 | r0 = 0xf9;
0x0008b368 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0008b36c lsls r2, r2, 3 | r2 <<= 3;
0x0008b36e subs r2, 0x18 | r2 -= 0x18;
0x0008b370 add r1, r2 | r1 += r2;
0x0008b372 strb r0, [r1, 1] | *((r1 + 1)) = r0;
0x0008b374 str.w sb, [r1, 0x10] | __asm ("str.w sb, [r1, 0x10]");
| label_5:
0x0008b378 cmp r3, 0 |
| if (r3 > 0) {
0x0008b37a ble 0x8b38c |
0x0008b37c ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0008b37e add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0008b380 lsls r3, r0, 5 | r3 = r0 << 5;
0x0008b382 add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0008b386 uxtb r1, r7 | r1 = (int8_t) r7;
0x0008b388 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0008b38c ldrb.w r2, [r5, 0x60] | r2 = *((r5 + 0x60));
| if (r2 != 0) {
0x0008b390 cbnz r2, 0x8b3e6 | goto label_29;
| }
| label_6:
0x0008b392 cmp r6, 0 |
| if (r6 != 0) {
0x0008b394 bne 0x8b3c8 | goto label_30;
| }
| }
| label_4:
0x0008b396 ldr r5, [r5, 0x24] | r5 = *((r5 + 0x24));
0x0008b398 cmp r5, 0 |
| if (r5 != 0) {
0x0008b39a bne.w 0x8b1b0 | goto label_2;
| }
0x0008b39e add sp, 0x2c |
0x0008b3a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x0008b3a4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0008b3a6 adds r2, r6, 1 | r2 = r6 + 1;
0x0008b3a8 movs r3, 0 | r3 = 0;
0x0008b3aa mov r0, r4 | r0 = r4;
0x0008b3ac str r3, [sp] | *(sp) = r3;
0x0008b3ae movs r3, 1 | r3 = 1;
0x0008b3b0 subs r2, r2, r1 | r2 -= r1;
0x0008b3b2 movs r1, 0x56 | r1 = 0x56;
0x0008b3b4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b3b8 b 0x8b396 | goto label_4;
| label_28:
0x0008b3ba ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0008b3be lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0008b3c0 bmi.w 0x8b53e | goto label_31;
| }
| label_12:
0x0008b3c4 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0008b3c6 b 0x8b378 | goto label_5;
| label_30:
0x0008b3c8 ldr r2, [r4] | r2 = *(r4);
0x0008b3ca it lt |
| if (r3 >= r3) {
0x0008b3cc addlt r6, r3, -1 | r6 = r3 + -1;
| }
0x0008b3d0 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008b3d4 cmp r2, 0 |
| if (r2 != 0) {
0x0008b3d6 bne 0x8b43e | goto label_32;
| }
0x0008b3d8 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0008b3da add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008b3de add.w r2, r2, r6, lsl 3 | r2 += (r6 << 3);
| do {
0x0008b3e2 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0008b3e4 b 0x8b396 | goto label_4;
| label_29:
0x0008b3e6 cmp r7, 1 |
| if (r7 == 1) {
0x0008b3e8 beq.w 0x8b566 | goto label_33;
| }
0x0008b3ec ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008b3ee ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x0008b3f0 cmp r7, r2 |
0x0008b3f2 itttt gt |
| if (r7 <= r2) {
0x0008b3f4 movgt r2, r1 | r2 = r1;
| }
| if (r7 <= r2) {
0x0008b3f6 ldrgt r1, [sp, 0x1c] | r1 = x;
| }
| if (r7 <= r2) {
0x0008b3f8 strgt r7, [r2, 0x1c] | *((r2 + 0x1c)) = r7;
| }
| if (r7 <= r2) {
0x0008b3fa strgt r1, [r2, 0x20] | *((r2 + 0x20)) = r1;
| }
0x0008b3fc b 0x8b392 | goto label_6;
| label_27:
0x0008b3fe ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0008b400 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008b402 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008b404 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008b406 bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x0008b40a mov r8, r0 | r8 = r0;
0x0008b40c cmp r0, 0 |
| if (r0 == 0) {
0x0008b40e beq.w 0x8b546 | goto label_34;
| }
| label_13:
0x0008b412 movs r3, 0 | r3 = 0;
0x0008b414 movs r1, 0x55 | r1 = 0x55;
0x0008b416 mov r2, r3 | r2 = r3;
0x0008b418 str r3, [sp] | *(sp) = r3;
0x0008b41a mov r0, r4 | r0 = r4;
0x0008b41c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b420 mov r2, r8 | r2 = r8;
0x0008b422 mov r1, r0 | r1 = r0;
0x0008b424 mvn r3, 1 | r3 = ~1;
0x0008b428 mov r0, r4 | r0 = r4;
0x0008b42a bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0008b42e b 0x8b348 | goto label_7;
| label_24:
0x0008b430 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008b432 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0008b434 add.w r8, r3, 1 | r8 = r3 + 1;
0x0008b438 str.w r8, [r2, 0x2c] | __asm ("str.w r8, [r2, 0x2c]");
0x0008b43c b 0x8b2f6 | goto label_8;
| label_32:
0x0008b43e ldr r2, [pc, 0x160] |
0x0008b440 add r2, pc | r2 = 0x1169e6;
0x0008b442 adds r2, 4 | r2 += 4;
0x0008b444 b 0x8b3e2 |
| } while (1);
| label_26:
0x0008b446 ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0008b448 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008b44a ldr.w r8, [r4, 0x6c] | r8 = *((r4 + 0x6c));
0x0008b44e ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008b450 ldr r7, [r3] | r7 = *(r3);
0x0008b452 str r3, [sp, 0x20] | var_20h = r3;
0x0008b454 mov r1, r7 | r1 = r7;
0x0008b456 bl 0x27744 | fcn_00027744 (r0, r1);
0x0008b45a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008b45c mov r2, r0 | r2 = r0;
0x0008b45e str r0, [sp, 0x1c] | x = r0;
0x0008b460 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008b462 mov r1, r3 | r1 = r3;
0x0008b464 movs r3, 0 | r3 = 0;
0x0008b466 str r3, [sp] | *(sp) = r3;
0x0008b468 bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
0x0008b46c ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0008b46e cmp r8, r2 |
| if (r8 >= r2) {
0x0008b470 bge.w 0x8b340 | goto label_9;
| }
0x0008b474 ldr r3, [r4] | r3 = *(r4);
0x0008b476 add.w lr, r2, -1 | lr = r2 + -1;
0x0008b47a ldr.w ip, [pc, 0x128] |
0x0008b47e strd r6, r5, [sp, 0x20] | __asm ("strd r6, r5, [var_20h]");
0x0008b482 ldrb.w r0, [r3, 0x57] | r0 = *((r3 + 0x57));
0x0008b486 ldr r5, [sp, 0x10] | r5 = var_10h;
0x0008b488 add ip, pc | ip = 0x116a32;
0x0008b48a add.w ip, ip, 4 |
| do {
0x0008b48e cmp.w r8, 0 |
0x0008b492 mov r3, ip | r3 = ip;
0x0008b494 ite ge |
| if (r8 < 0) {
0x0008b496 movge r1, r8 | r1 = r8;
| }
| if (r8 >= 0) {
0x0008b498 movlt r1, lr | r1 = lr;
| }
| if (r0 == 0) {
0x0008b49a cbnz r0, 0x8b4a6 |
0x0008b49c ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0008b49e add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x0008b4a2 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
| }
0x0008b4a6 ldrb r1, [r3] | r1 = *(r3);
0x0008b4a8 add.w r8, r8, 1 | r8++;
0x0008b4ac cmp r1, 0x5e |
| if (r1 == 0x5e) {
0x0008b4ae bne 0x8b4bc |
0x0008b4b0 ldr r1, [r5, 0x30] | r1 = *((r5 + 0x30));
0x0008b4b2 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0008b4b4 cmp r6, r1 |
0x0008b4b6 it eq |
| if (r6 == r1) {
0x0008b4b8 streq sl, [r3, 4] | *((r3 + 4)) = sl;
| goto label_35;
| }
| }
| label_35:
0x0008b4bc cmp r2, r8 |
0x0008b4be bne 0x8b48e |
| } while (r2 != r8);
0x0008b4c0 ldrd r6, r5, [sp, 0x20] | __asm ("ldrd r6, r5, [var_20h]");
0x0008b4c4 b 0x8b340 | goto label_9;
| label_21:
0x0008b4c6 ldr r2, [r5, 0x40] | r2 = *((r5 + 0x40));
0x0008b4c8 movs r3, 1 | r3 = 1;
0x0008b4ca movs r1, 0x56 | r1 = 0x56;
0x0008b4cc str r7, [sp] | *(sp) = r7;
0x0008b4ce mov r0, r4 | r0 = r4;
0x0008b4d0 adds r2, 1 | r2++;
0x0008b4d2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b4d6 ldr r3, [r5, 0x40] | r3 = *((r5 + 0x40));
0x0008b4d8 mov r2, fp | r2 = fp;
0x0008b4da movs r1, 0x51 | r1 = 0x51;
0x0008b4dc str r7, [sp] | *(sp) = r7;
0x0008b4de mov r0, r4 | r0 = r4;
0x0008b4e0 str r7, [sp, 0x18] | var_18h = r7;
0x0008b4e2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b4e6 ldr r2, [r5, 0x40] | r2 = *((r5 + 0x40));
0x0008b4e8 movs r3, 2 | r3 = 2;
0x0008b4ea movs r1, 0x61 | r1 = 0x61;
0x0008b4ec mov r0, r4 | r0 = r4;
0x0008b4ee adds r7, r2, r3 | r7 = r2 + r3;
0x0008b4f0 str r7, [sp] | *(sp) = r7;
0x0008b4f2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b4f6 ldr r3, [r5, 0x40] | r3 = *((r5 + 0x40));
0x0008b4f8 movs r1, 0x8a | r1 = 0x8a;
0x0008b4fa ldr r7, [sp, 0x18] | r7 = var_18h;
0x0008b4fc mov r0, r4 | r0 = r4;
0x0008b4fe ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0008b500 adds r3, 2 | r3 += 2;
0x0008b502 str r7, [sp] | *(sp) = r7;
0x0008b504 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b508 ldr r3, [r4] | r3 = *(r4);
0x0008b50a cmp r6, 0 |
0x0008b50c ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0008b50e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r6 < 0) {
0x0008b512 blt 0x8b522 | goto label_36;
| }
| if (r3 != 0) {
0x0008b514 cbnz r3, 0x8b528 | goto label_37;
| }
| do {
0x0008b516 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
| label_14:
0x0008b518 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008b51c add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
0x0008b520 b 0x8b2a8 | goto label_10;
| label_36:
0x0008b522 subs r6, r2, 1 | r6 = r2 - 1;
0x0008b524 cmp r3, 0 |
0x0008b526 beq 0x8b516 |
| } while (r3 == 0);
| label_37:
0x0008b528 ldr r3, [pc, 0x7c] |
0x0008b52a add r3, pc | r3 = 0x116ad6;
0x0008b52c adds r3, 4 | r3 += 4;
0x0008b52e b 0x8b2a8 | goto label_10;
| label_16:
0x0008b530 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x0008b532 cbz r3, 0x8b584 | goto label_38;
| }
| label_15:
0x0008b534 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008b536 bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x0008b53a mov r4, r0 | r4 = r0;
0x0008b53c b 0x8b19e | goto label_11;
| label_31:
0x0008b53e mov r1, sb | r1 = sb;
0x0008b540 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0008b544 b 0x8b3c4 | goto label_12;
| label_34:
0x0008b546 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008b548 ldr r3, [r3] | r3 = *(r3);
0x0008b54a ldr.w r8, [r3, 8] | r8 = *((r3 + 8));
0x0008b54e b 0x8b412 | goto label_13;
| label_22:
0x0008b550 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0008b554 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0008b556 cmp r6, 0 |
0x0008b558 it lt |
| if (r6 >= 0) {
0x0008b55a addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x0008b55e add.w r1, r3, r1, lsl 3 | r1 = r3 + (r1 << 3);
0x0008b562 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x0008b564 b 0x8b518 | goto label_14;
| label_33:
0x0008b566 ldr r0, [sp, 0x1c] | r0 = x;
0x0008b568 cmp r0, 0 |
| if (r0 == 0) {
0x0008b56a beq.w 0x8b392 | goto label_6;
| }
0x0008b56e ldr r7, [sp, 0x14] | r7 = var_14h;
0x0008b570 ldrb r2, [r7, 0x13] | r2 = *((r7 + 0x13));
0x0008b572 cmp r2, 7 |
| if (r2 > 7) {
0x0008b574 bhi.w 0x8b392 | goto label_6;
| }
0x0008b578 adds r1, r2, 1 | r1 = r2 + 1;
0x0008b57a adds r2, 0x26 | r2 += 0x26;
0x0008b57c strb r1, [r7, 0x13] | *((r7 + 0x13)) = r1;
0x0008b57e str.w r0, [r7, r2, lsl 2] | __asm ("str.w r0, [r7, r2, lsl 2]");
0x0008b582 b 0x8b392 | goto label_6;
| label_38:
0x0008b584 ldr r3, [r0] | r3 = *(r0);
0x0008b586 mov r2, r0 | r2 = r0;
0x0008b588 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0008b58a lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
0x0008b58c itt pl |
| if (r0 < r3) {
0x0008b58e movpl r3, 1 | r3 = 1;
| }
| if (r0 < r3) {
0x0008b590 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x0008b592 b 0x8b534 | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8b5ac */
| #include <stdint.h>
|
; (fcn) fcn.0008b5ac () | void fcn_0008b5ac (int16_t arg_0h, int16_t arg_ch, int16_t arg_68h, int16_t arg_6ch, int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
0x0008b5ac ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0008b5ae push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008b5b2 mov r7, r0 | r7 = r0;
0x0008b5b4 vpush {d8} | __asm ("vpush {d8}");
0x0008b5b8 sub sp, 0x34 |
0x0008b5ba str r3, [sp, 0x14] | var_14h = r3;
0x0008b5bc ldr r3, [r3, 0x58] | r3 = *((r3 + 0x58));
0x0008b5be ldr.w fp, [r0, 8] | fp = *((r0 + 8));
0x0008b5c2 ldr.w r8, [r0] | r8 = *(r0);
0x0008b5c6 cmp r3, 0 |
| if (r3 != 0) {
0x0008b5c8 bne.w 0x8b894 | goto label_20;
| }
0x0008b5cc ldr.w r3, [pc, 0x640] |
0x0008b5d0 ldr.w r1, [pc, 0x640] |
0x0008b5d4 ldr.w sl, [sp, 0x14] | sl = var_14h;
0x0008b5d8 add r3, pc | r3 = 0x1171ec;
0x0008b5da str r0, [sp, 0x2c] | var_2ch = r0;
0x0008b5dc addw r3, r3, 0xd58 | __asm ("addw r3, r3, 0xd58");
0x0008b5e0 add r1, pc | r1 = 0x1171f8;
0x0008b5e2 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008b5e4 mov r4, sl | r4 = sl;
0x0008b5e6 ldr.w r3, [pc, 0x630] |
0x0008b5ea str r1, [sp, 0x20] | var_20h = r1;
0x0008b5ec add r3, pc | r3 = 0x11720a;
0x0008b5ee str r3, [sp, 0x28] | var_28h = r3;
0x0008b5f0 addw r3, r1, 0xd58 | __asm ("addw r3, r1, 0xd58");
0x0008b5f4 str r3, [sp, 0xc] | var_ch = r3;
0x0008b5f6 addw r3, r1, 0xd4c | __asm ("addw r3, r1, 0xd4c");
0x0008b5fa str r3, [sp, 0x10] | var_10h = r3;
| do {
0x0008b5fc ldr r5, [r4, 0x2c] | r5 = *((r4 + 0x2c));
0x0008b5fe ldrd r2, r1, [sp, 0xc] | __asm ("ldrd r2, r1, [var_10h]");
0x0008b602 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0008b604 cmp r3, r1 |
0x0008b606 it ne |
| if (r3 != r1) {
0x0008b608 cmpne r3, r2 | __asm ("cmpne r3, r2");
| }
| if (r3 != r1) {
0x0008b60a bne 0x8b6ec | goto label_21;
| }
0x0008b60c ldr.w r7, [r8, 0x38] | r7 = *((r8 + 0x38));
0x0008b610 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008b614 ldr.w sb, [r4, 0x3c] | sb = *((r4 + 0x3c));
0x0008b618 add.w sl, r7, -1 | sl = r7 + -1;
0x0008b61c str.w sl, [r8, 0x38] | __asm ("str.w sl, [r8, 0x38]");
0x0008b620 cmp r3, 0 |
| if (r3 == 0) {
0x0008b622 beq.w 0x8b848 | goto label_22;
| }
0x0008b626 subs r3, 1 | r3--;
0x0008b628 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008b62a strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008b62e adds r3, 0x26 | r3 += 0x26;
0x0008b630 ldr.w r6, [r8, r3, lsl 2] | offset_0 = r3 << 2;
| r6 = *((r8 + offset_0));
| label_3:
0x0008b634 movs r2, 0 | r2 = 0;
0x0008b636 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0008b638 movs r1, 0x4b | r1 = 0x4b;
0x0008b63a str r2, [sp] | *(sp) = r2;
0x0008b63c mov r0, fp | r0 = fp;
0x0008b63e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b642 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008b644 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0008b646 cmp r3, r2 |
0x0008b648 mov.w r2, 0 | r2 = 0;
| if (r3 == r2) {
0x0008b64c beq.w 0x8b854 | goto label_23;
| }
0x0008b650 str r2, [sp] | *(sp) = r2;
0x0008b652 mov r3, r6 | r3 = r6;
0x0008b654 movs r2, 1 | r2 = 1;
0x0008b656 movs r1, 0x47 | r1 = 0x47;
0x0008b658 mov r0, fp | r0 = fp;
0x0008b65a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_4:
0x0008b65e ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0008b660 mov r2, r6 | r2 = r6;
0x0008b662 movs r1, 0x6a | r1 = 0x6a;
0x0008b664 mov r0, fp | r0 = fp;
0x0008b666 str r6, [sp] | *(sp) = r6;
0x0008b668 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b66c ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x0008b66e mov r3, sl | r3 = sl;
0x0008b670 movs r1, 0x36 | r1 = 0x36;
0x0008b672 mov r0, fp | r0 = fp;
0x0008b674 str r6, [sp] | *(sp) = r6;
0x0008b676 adds r2, 1 | r2++;
0x0008b678 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b67c movs r3, 0 | r3 = 0;
0x0008b67e mov r2, sb | r2 = sb;
0x0008b680 movs r1, 0x1d | r1 = 0x1d;
0x0008b682 mov r0, fp | r0 = fp;
0x0008b684 str r6, [sp] | *(sp) = r6;
0x0008b686 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b68a ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0008b68c mov r2, sb | r2 = sb;
0x0008b68e ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0008b690 mov r0, fp | r0 = fp;
0x0008b692 str r1, [sp] | *(sp) = r1;
0x0008b694 movs r1, 0x5e | r1 = 0x5e;
0x0008b696 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b69a ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x0008b69e ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008b6a2 cmn r2, r3 |
| if (r2 < r3) {
0x0008b6a4 bmi.w 0x8b872 | goto label_24;
| }
0x0008b6a8 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008b6aa lsls r7, r7, 2 | r7 <<= 2;
0x0008b6ac ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0008b6b0 rsbs r7, r7, 0 | r7 -= ;
0x0008b6b2 str r2, [r3, r7] | *((r3 + r7)) = r2;
| if (r6 != 0) {
| label_1:
0x0008b6b4 cbz r6, 0x8b6ca |
0x0008b6b6 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008b6ba cmp r3, 7 |
0x0008b6bc itttt ls |
| if (r3 > 7) {
0x0008b6be addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008b6c0 addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008b6c2 strbls r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
| }
| if (r3 > 7) {
0x0008b6c6 str.w r6, [r8, r3, lsl 2] | __asm ("str.w r6, [r8, r3, lsl 2]");
| goto label_0;
| }
| }
| label_0:
0x0008b6ca ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x0008b6cc cmp r4, 0 |
0x0008b6ce bne 0x8b5fc |
| } while (r4 != 0);
0x0008b6d0 ldr r7, [sp, 0x2c] | r7 = var_2ch;
| label_7:
0x0008b6d2 movs r1, 0 | r1 = 0;
0x0008b6d4 ldrd r3, r2, [r7, 0xc] | __asm ("ldrd r3, r2, [r7, 0xc]");
0x0008b6d8 mov r0, fp | r0 = fp;
0x0008b6da str r1, [sp] | *(sp) = r1;
0x0008b6dc movs r1, 9 | r1 = 9;
0x0008b6de bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b6e2 add sp, 0x34 |
0x0008b6e4 vpop {d8} | __asm ("vpop {d8}");
0x0008b6e8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0008b6ec ldr r1, [sp, 0x20] | r1 = var_20h;
0x0008b6ee addw r2, r1, 0xd6c | __asm ("addw r2, r1, 0xd6c");
0x0008b6f2 addw r1, r1, 0xd64 | __asm ("addw r1, r1, 0xd64");
0x0008b6f6 cmp r3, r1 |
0x0008b6f8 it ne |
| if (r3 == r1) {
0x0008b6fa cmpne r3, r2 | __asm ("cmpne r3, r2");
| goto label_25;
| }
| if (r3 != r1) {
| label_25:
0x0008b6fc bne 0x8b6ca | goto label_0;
| }
0x0008b6fe ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0008b700 ldr.w sl, [r8, 0x38] | sl = *((r8 + 0x38));
0x0008b704 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x0008b706 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008b708 add.w r7, sl, -1 | r7 = sl + -1;
0x0008b70c str r2, [sp, 0x24] | var_24h = r2;
0x0008b70e ldr.w sb, [r3] | sb = *(r3);
0x0008b712 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008b716 str.w r7, [r8, 0x38] | __asm ("str.w r7, [r8, 0x38]");
0x0008b71a cmp r3, 0 |
| if (r3 == 0) {
0x0008b71c beq.w 0x8b87c | goto label_26;
| }
0x0008b720 subs r3, 1 | r3--;
0x0008b722 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008b724 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008b728 adds r3, 0x26 | r3 += 0x26;
0x0008b72a ldr.w r6, [r8, r3, lsl 2] | offset_1 = r3 << 2;
| r6 = *((r8 + offset_1));
| label_5:
0x0008b72e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008b730 cmp.w sb, 2 |
0x0008b734 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0008b736 str r3, [sp, 0x18] | var_18h = r3;
0x0008b738 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
| if (sb > 2) {
0x0008b73a bgt 0x8b7c0 | goto label_27;
| }
0x0008b73c movs r1, 0 | r1 = 0;
0x0008b73e mov r0, fp | r0 = fp;
0x0008b740 mov r2, r1 | r2 = r1;
0x0008b742 str r1, [sp] | *(sp) = r1;
0x0008b744 movs r1, 0x4b | r1 = 0x4b;
0x0008b746 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b74a movs r1, 0 | r1 = 0;
0x0008b74c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008b74e str r1, [sp] | *(sp) = r1;
0x0008b750 mov r3, r6 | r3 = r6;
0x0008b752 movs r1, 0x87 | r1 = 0x87;
0x0008b754 mov r0, fp | r0 = fp;
0x0008b756 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b75a cmp.w sb, 2 |
| if (sb == 2) {
0x0008b75e beq 0x8b7e4 | goto label_28;
| }
0x0008b760 movs r3, 0 | r3 = 0;
0x0008b762 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x0008b764 str r3, [sp] | *(sp) = r3;
0x0008b766 movs r1, 0x56 | r1 = 0x56;
0x0008b768 ldr.w r3, [pc, 0x4b0] |
0x0008b76c mov r0, fp | r0 = fp;
0x0008b76e add r3, pc | r3 = 0x11738e;
0x0008b770 addw r3, r3, 0xd64 | __asm ("addw r3, r3, 0xd64");
0x0008b774 cmp r2, r3 |
0x0008b776 ite ne |
| if (r2 == r3) {
0x0008b778 movne r3, -1 | r3 = -1;
| }
| if (r2 == r3) {
0x0008b77c movs r3, 1 | r3 = 1;
| }
0x0008b77e mov r2, r6 | r2 = r6;
0x0008b780 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| do {
| label_2:
0x0008b784 ldr r5, [sp, 0x24] | r5 = var_24h;
0x0008b786 mov r3, r7 | r3 = r7;
0x0008b788 movs r1, 0x1d | r1 = 0x1d;
0x0008b78a mov r0, fp | r0 = fp;
0x0008b78c str r6, [sp] | *(sp) = r6;
0x0008b78e mov r2, r5 | r2 = r5;
0x0008b790 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b794 ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0008b796 mov r2, r5 | r2 = r5;
0x0008b798 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0008b79a mov r0, fp | r0 = fp;
0x0008b79c str r1, [sp] | *(sp) = r1;
0x0008b79e movs r1, 0x5e | r1 = 0x5e;
0x0008b7a0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b7a4 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x0008b7a8 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008b7ac cmn r2, r3 |
| if (r2 < r3) {
0x0008b7ae bmi 0x8b888 | goto label_29;
| }
0x0008b7b0 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008b7b2 lsl.w r3, sl, 2 | r3 = sl << 2;
0x0008b7b6 ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x0008b7ba rsbs r3, r3, 0 | r3 -= ;
0x0008b7bc str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0008b7be b 0x8b6b4 | goto label_1;
| label_27:
0x0008b7c0 ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x0008b7c2 movs r1, 0x5e | r1 = 0x5e;
0x0008b7c4 ldr.w sb, [sp, 0x18] | sb = var_18h;
0x0008b7c8 mov r0, fp | r0 = fp;
0x0008b7ca str r3, [sp] | *(sp) = r3;
0x0008b7cc adds r3, r2, 2 | r3 = r2 + 2;
0x0008b7ce mov r2, sb | r2 = sb;
0x0008b7d0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b7d4 movs r3, 0 | r3 = 0;
0x0008b7d6 mov r2, sb | r2 = sb;
0x0008b7d8 str r3, [sp] | *(sp) = r3;
0x0008b7da movs r1, 0x87 | r1 = 0x87;
0x0008b7dc mov r3, r6 | r3 = r6;
0x0008b7de mov r0, fp | r0 = fp;
0x0008b7e0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_28:
0x0008b7e4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008b7e6 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008b7ea ldr r1, [r5, 0x20] | r1 = *((r5 + 0x20));
0x0008b7ec addw r2, r2, 0xd64 | __asm ("addw r2, r2, 0xd64");
0x0008b7f0 cmp r1, r2 |
0x0008b7f2 ite ne |
| if (r1 == r2) {
0x0008b7f4 movne sb, 0x6b | sb = 0x6b;
| }
| if (r1 == r2) {
0x0008b7f8 mov.w sb, 0x6a | sb = 0x6a;
| }
0x0008b7fc cmp r3, 0 |
| if (r3 == 0) {
0x0008b7fe beq.w 0x8bafa | goto label_30;
| }
0x0008b802 subs r3, 1 | r3--;
0x0008b804 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008b806 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008b80a adds r3, 0x26 | r3 += 0x26;
0x0008b80c ldr.w r5, [r8, r3, lsl 2] | offset_2 = r3 << 2;
| r5 = *((r8 + offset_2));
| label_8:
0x0008b810 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0008b812 movs r1, 0x5e | r1 = 0x5e;
0x0008b814 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008b816 mov r0, fp | r0 = fp;
0x0008b818 str r5, [sp] | *(sp) = r5;
0x0008b81a adds r3, 1 | r3++;
0x0008b81c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b820 mov r1, sb | r1 = sb;
0x0008b822 mov r3, r6 | r3 = r6;
0x0008b824 mov r2, r5 | r2 = r5;
0x0008b826 mov r0, fp | r0 = fp;
0x0008b828 str r6, [sp] | *(sp) = r6;
0x0008b82a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b82e cmp r5, 0 |
0x0008b830 beq 0x8b784 |
| } while (r5 == 0);
0x0008b832 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008b836 cmp r3, 7 |
0x0008b838 itttt ls |
| if (r3 > 7) {
0x0008b83a addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008b83c addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008b83e strbls r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0008b842 str.w r5, [r8, r3, lsl 2] | __asm ("str.w r5, [r8, r3, lsl 2]");
| }
0x0008b846 b 0x8b784 | goto label_2;
| label_22:
0x0008b848 ldr.w r6, [r8, 0x2c] | r6 = *((r8 + 0x2c));
0x0008b84c adds r6, 1 | r6++;
0x0008b84e str.w r6, [r8, 0x2c] | __asm ("str.w r6, [r8, 0x2c]");
0x0008b852 b 0x8b634 | goto label_3;
| label_23:
0x0008b854 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0008b856 movs r1, 0x5e | r1 = 0x5e;
0x0008b858 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008b85a mov r0, fp | r0 = fp;
0x0008b85c adds r3, 1 | r3++;
0x0008b85e ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0008b860 str r6, [sp] | *(sp) = r6;
0x0008b862 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b866 movs r2, 2 | r2 = 2;
0x0008b868 mov r1, r6 | r1 = r6;
0x0008b86a mov r0, r8 | r0 = r8;
0x0008b86c bl 0x42488 | fcn_00042488 (r0, r1, r2);
0x0008b870 b 0x8b65e | goto label_4;
| label_24:
0x0008b872 rsbs r2, r7, 0 | r2 = r7 - ;
0x0008b874 mov r1, fp | r1 = fp;
0x0008b876 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008b87a b 0x8b6b4 | goto label_1;
| label_26:
0x0008b87c ldr.w r6, [r8, 0x2c] | r6 = *((r8 + 0x2c));
0x0008b880 adds r6, 1 | r6++;
0x0008b882 str.w r6, [r8, 0x2c] | __asm ("str.w r6, [r8, 0x2c]");
0x0008b886 b 0x8b72e | goto label_5;
| label_29:
0x0008b888 rsb.w r2, sl, 0 | r2 = sl - ;
0x0008b88c mov r1, fp | r1 = fp;
0x0008b88e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008b892 b 0x8b6b4 | goto label_1;
| label_20:
0x0008b894 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008b896 ldr.w sl, [r3, 0x3c] | sl = *((r3 + 0x3c));
0x0008b89a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0008b89c mov sb, r3 | sb = r3;
| if (r3 != 0) {
0x0008b89e cbz r3, 0x8b8a4 |
0x0008b8a0 ldr.w sb, [r3] | sb = *(r3);
| }
0x0008b8a4 ldr.w r2, [r8, 0x38] | r2 = *((r8 + 0x38));
0x0008b8a8 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008b8ac subs r1, r2, 2 | r1 = r2 - 2;
0x0008b8ae str r2, [sp, 0x24] | var_24h = r2;
0x0008b8b0 subs r2, 1 | r2--;
0x0008b8b2 str r1, [sp, 0x18] | var_18h = r1;
0x0008b8b4 str.w r1, [r8, 0x38] | __asm ("str.w r1, [r8, 0x38]");
0x0008b8b8 str r2, [sp, 0x2c] | var_2ch = r2;
0x0008b8ba cmp r3, 0 |
| if (r3 == 0) {
0x0008b8bc beq.w 0x8bb10 | goto label_31;
| }
0x0008b8c0 subs r2, r3, 1 | r2 = r3 - 1;
0x0008b8c2 uxtb r2, r2 | r2 = (int8_t) r2;
0x0008b8c4 add.w r1, r2, 0x26 | r1 = r2 + 0x26;
0x0008b8c8 strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008b8cc ldr.w r1, [r8, r1, lsl 2] | offset_3 = r1 << 2;
| r1 = *((r8 + offset_3));
0x0008b8d0 str r1, [sp, 0x10] | var_10h = r1;
0x0008b8d2 cmp r2, 0 |
| if (r2 == 0) {
0x0008b8d4 beq.w 0x8bc0a | goto label_32;
| }
0x0008b8d8 subs r3, 2 | r3 -= 2;
0x0008b8da uxtb r3, r3 | r3 = (int8_t) r3;
0x0008b8dc strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008b8e0 adds r3, 0x26 | r3 += 0x26;
0x0008b8e2 ldr.w r3, [r8, r3, lsl 2] | offset_4 = r3 << 2;
| r3 = *((r8 + offset_4));
0x0008b8e6 str r3, [sp, 0xc] | var_ch = r3;
0x0008b8e8 cmp.w sb, 0 |
| if (sb != 0) {
0x0008b8ec bne.w 0x8bb28 | goto label_33;
| }
| label_9:
0x0008b8f0 str.w sb, [sp, 0x28] | __asm ("str.w sb, [var_28h]");
0x0008b8f4 str.w sb, [sp, 0x1c] | __asm ("str.w sb, [var_1ch]");
| label_10:
0x0008b8f8 ldr r4, [sp, 0x14] | r4 = var_14h;
0x0008b8fa movs r5, 0 | r5 = 0;
0x0008b8fc movs r1, 0x87 | r1 = 0x87;
0x0008b8fe mov r0, fp | r0 = fp;
0x0008b900 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x0008b904 movs r6, 0x4b | r6 = 0x4b;
0x0008b906 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x0008b908 str r5, [sp] | *(sp) = r5;
0x0008b90a mov r2, r3 | r2 = r3;
0x0008b90c str r3, [sp, 0x20] | var_20h = r3;
0x0008b90e ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008b910 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b914 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008b916 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0008b918 ldrd r0, r1, [r7] | __asm ("ldrd r0, r1, [r7]");
0x0008b91c bl 0x426c0 | fcn_000426c0 (r0, r1, r2, r3);
0x0008b920 b 0x8b944 |
| while (r2 < r1) {
0x0008b922 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x0008b926 str.w r1, [fp, 0x6c] | __asm ("str.w r1, [arg_6ch]");
0x0008b92a add.w r1, r0, r2, lsl 3 | r1 = r0 + (r2 << 3);
0x0008b92e add.w ip, r1, 0x10 |
0x0008b932 strd r3, r5, [r1, 8] | __asm ("strd r3, r5, [r1, 8]");
0x0008b936 str.w r6, [r0, r2, lsl 3] | __asm ("str.w r6, [r0, r2, lsl 3]");
0x0008b93a str r5, [r1, 4] | *((r1 + 4)) = r5;
0x0008b93c vst1.32 {d8}, [ip] | __asm ("vst1.32 {d8}, [ip]");
0x0008b940 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
| if (r4 == 0) {
0x0008b942 cbz r4, 0x8b968 | goto label_34;
| }
| label_6:
0x0008b944 ldrd r2, r1, [fp, 0x6c] | __asm ("ldrd r2, r1, [arg_6ch]");
0x0008b948 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008b94a cmp r2, r1 |
0x0008b94c add.w r1, r2, 1 | r1 = r2 + 1;
0x0008b950 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0008b954 blt 0x8b922 |
| }
0x0008b956 movs r2, 0 | r2 = 0;
0x0008b958 movs r1, 0x4b | r1 = 0x4b;
0x0008b95a mov r0, fp | r0 = fp;
0x0008b95c str r5, [sp] | *(sp) = r5;
0x0008b95e bl 0x41a4c | fcn_00041a4c (r0, r1, r2, r3, r4);
0x0008b962 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x0008b964 cmp r4, 0 |
| if (r4 != 0) {
0x0008b966 bne 0x8b944 | goto label_6;
| }
| label_34:
0x0008b968 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008b96a mov r2, sl | r2 = sl;
0x0008b96c movs r1, 0x16 | r1 = 0x16;
0x0008b96e mov r0, fp | r0 = fp;
0x0008b970 ldr r3, [r5, 0x58] | r3 = *((r5 + 0x58));
0x0008b972 str r3, [sp] | *(sp) = r3;
0x0008b974 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008b976 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b97a ldr.w r6, [fp, 0x6c] | r6 = *(arg_6ch);
0x0008b97e mov r2, sl | r2 = sl;
0x0008b980 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008b982 movs r1, 0x87 | r1 = 0x87;
0x0008b984 mov r0, fp | r0 = fp;
0x0008b986 str r4, [sp] | *(sp) = r4;
0x0008b988 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b98c ldr r1, [sp, 0xc] | r1 = var_ch;
0x0008b98e mov r0, fp | r0 = fp;
0x0008b990 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008b992 ldr r2, [r5, 0x5c] | r2 = *((r5 + 0x5c));
0x0008b994 str r1, [sp] | *(sp) = r1;
0x0008b996 movs r1, 0x36 | r1 = 0x36;
0x0008b998 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b99c ldrb r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0008b99e cmp r3, 0x55 |
| if (r3 == 0x55) {
0x0008b9a0 beq.w 0x8bb78 | goto label_35;
| }
0x0008b9a4 cmp r3, 0x42 |
| if (r3 != 0x42) {
0x0008b9a6 beq 0x8ba46 |
0x0008b9a8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008b9aa ldr r5, [r2, 0xc] | r5 = *((r2 + 0xc));
0x0008b9ac cmp r5, 0 |
| if (r5 == 0) {
0x0008b9ae beq.w 0x8bb64 | goto label_36;
| }
0x0008b9b2 mov r1, r5 | r1 = r5;
0x0008b9b4 mov r3, r4 | r3 = r4;
0x0008b9b6 mov r2, r4 | r2 = r4;
0x0008b9b8 mov r0, r8 | r0 = r8;
0x0008b9ba bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x0008b9be ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008b9c0 mov r5, r0 | r5 = r0;
0x0008b9c2 ldrb r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008b9c4 cmp r3, 0x5e |
| if (r3 == 0x5e) {
0x0008b9c6 beq.w 0x8bb92 | goto label_37;
| }
| label_15:
0x0008b9ca cmp r5, 0 |
| if (r5 == 0) {
0x0008b9cc beq.w 0x8bbfa | goto label_38;
| }
0x0008b9d0 ldrd r0, r1, [r7] | __asm ("ldrd r0, r1, [r7]");
0x0008b9d4 mov r2, sl | r2 = sl;
0x0008b9d6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008b9d8 bl 0x426c0 | fcn_000426c0 (r0, r1, r2, r3);
0x0008b9dc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008b9de movs r1, 0x5a | r1 = 0x5a;
0x0008b9e0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008b9e2 mov r0, fp | r0 = fp;
0x0008b9e4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008b9e8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008b9ec ldr.w r3, [fp] | r3 = *(fp);
0x0008b9f0 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x0008b9f4 cmp r2, 0 |
| if (r2 != 0) {
0x0008b9f6 bne.w 0x8bba6 | goto label_39;
| }
0x0008b9fa ldrd r1, r2, [fp, 0x68] | __asm ("ldrd r1, r2, [arg_68h]");
0x0008b9fe movs r0, 0xf8 | r0 = 0xf8;
0x0008ba00 add.w r3, r2, r2, lsl 1 | r3 = r2 + (r2 << 1);
0x0008ba04 lsls r3, r3, 3 | r3 <<= 3;
0x0008ba06 subs r3, 0x18 | r3 -= 0x18;
0x0008ba08 add r1, r3 | r1 += r3;
0x0008ba0a strb r0, [r1, 1] | *((r1 + 1)) = r0;
0x0008ba0c str r5, [r1, 0x10] | *((r1 + 0x10)) = r5;
| label_16:
0x0008ba0e adds r2, 1 | r2++;
0x0008ba10 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ba12 movs r1, 0xd | r1 = 0xd;
0x0008ba14 mov r0, fp | r0 = fp;
0x0008ba16 str r2, [sp] | *(sp) = r2;
0x0008ba18 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_18:
0x0008ba1c cmp r4, 0 |
| if (r4 == 0) {
0x0008ba1e beq 0x8ba46 | goto label_13;
| }
0x0008ba20 ldr.w r3, [fp] | r3 = *(fp);
0x0008ba24 ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0008ba28 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008ba2c it lt |
| if (r4 >= 0) {
0x0008ba2e addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0008ba32 cmp r3, 0 |
| if (r3 != 0) {
0x0008ba34 bne.w 0x8bb8a | goto label_40;
| }
0x0008ba38 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0008ba3c add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0008ba40 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
| label_14:
0x0008ba44 str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
| label_13:
0x0008ba46 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0008ba48 mov r2, sl | r2 = sl;
0x0008ba4a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008ba4c str r3, [sp] | *(sp) = r3;
0x0008ba4e movs r3, 0 | r3 = 0;
0x0008ba50 ldr r0, [r7] | r0 = *(r7);
0x0008ba52 bl 0x8b184 | fcn_0008b184 (r0, r1, r2, r3, r4, r5);
0x0008ba56 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x0008ba5a ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008ba5e cmn r2, r3 |
| if (r2 < r3) {
0x0008ba60 bmi 0x8bb58 | goto label_41;
| }
0x0008ba62 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008ba64 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008ba66 ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x0008ba6a lsls r3, r3, 2 | r3 <<= 2;
0x0008ba6c rsbs r3, r3, 0 | r3 -= ;
0x0008ba6e str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_12:
0x0008ba70 movs r3, 0 | r3 = 0;
0x0008ba72 mov r2, sl | r2 = sl;
0x0008ba74 movs r1, 0x26 | r1 = 0x26;
0x0008ba76 str r3, [sp] | *(sp) = r3;
0x0008ba78 mov r0, fp | r0 = fp;
0x0008ba7a mov r3, r6 | r3 = r6;
0x0008ba7c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ba80 ldr.w r1, [fp] | r1 = *(fp);
0x0008ba84 subs r3, r6, 1 | r3 = r6 - 1;
0x0008ba86 ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0008ba8a ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0008ba8e it mi |
| if (r3 >= r6) {
0x0008ba90 addmi r3, r2, -1 | r3 = r2 + -1;
| }
0x0008ba94 cmp r1, 0 |
| if (r1 != 0) {
0x0008ba96 bne 0x8bb06 | goto label_42;
| }
0x0008ba98 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0008ba9c adds r6, 1 | r6++;
0x0008ba9e ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0008baa2 it mi |
| if (r6 >= 1) {
0x0008baa4 addmi r6, r2, -1 | r6 = r2 + -1;
| }
0x0008baa8 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008baac add.w r1, r3, r1, lsl 3 | r1 = r3 + (r1 << 3);
0x0008bab0 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
0x0008bab4 str r2, [r1, 8] | *((r1 + 8)) = r2;
| do {
0x0008bab6 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0008bab8 str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r1 != 0) {
0x0008baba cbz r1, 0x8bad0 |
0x0008babc ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008bac0 cmp r3, 7 |
| if (r3 > 7) {
0x0008bac2 bhi 0x8bae8 | goto label_43;
| }
0x0008bac4 adds r2, r3, 1 | r2 = r3 + 1;
0x0008bac6 adds r3, 0x26 | r3 += 0x26;
0x0008bac8 strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008bacc str.w r1, [r8, r3, lsl 2] | __asm ("str.w r1, [r8, r3, lsl 2]");
| }
0x0008bad0 ldr r1, [sp, 0x10] | r1 = var_10h;
| if (r1 != 0) {
0x0008bad2 cbz r1, 0x8bae8 |
0x0008bad4 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008bad8 cmp r3, 7 |
0x0008bada itttt ls |
| if (r3 > 7) {
0x0008badc addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008bade addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008bae0 strbls r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
| }
| if (r3 > 7) {
0x0008bae4 str.w r1, [r8, r3, lsl 2] | __asm ("str.w r1, [r8, r3, lsl 2]");
| goto label_43;
| }
| }
| label_43:
0x0008bae8 cmp.w sb, 0 |
| if (sb != 0) {
0x0008baec bne 0x8bb3e | goto label_44;
| }
| label_11:
0x0008baee ldrd r0, r1, [r7] | __asm ("ldrd r0, r1, [r7]");
0x0008baf2 movs r2, 1 | r2 = 1;
0x0008baf4 bl 0x41b94 | fcn_00041b94 (r0, r1, r2);
0x0008baf8 b 0x8b6d2 | goto label_7;
| label_30:
0x0008bafa ldr.w r5, [r8, 0x2c] | r5 = *((r8 + 0x2c));
0x0008bafe adds r5, 1 | r5++;
0x0008bb00 str.w r5, [r8, 0x2c] | __asm ("str.w r5, [r8, 0x2c]");
0x0008bb04 b 0x8b810 | goto label_8;
| label_42:
0x0008bb06 ldr r3, [pc, 0x118] |
0x0008bb08 add r3, pc | r3 = 0x11772e;
0x0008bb0a str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0008bb0c adds r3, 4 | r3 += 4;
0x0008bb0e b 0x8bab6 |
| } while (1);
| label_31:
0x0008bb10 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008bb14 adds r3, 1 | r3++;
0x0008bb16 str r3, [sp, 0x10] | var_10h = r3;
| label_19:
0x0008bb18 adds r3, 1 | r3++;
0x0008bb1a str r3, [sp, 0xc] | var_ch = r3;
0x0008bb1c str.w r3, [r8, 0x2c] | __asm ("str.w r3, [r8, 0x2c]");
0x0008bb20 cmp.w sb, 0 |
| if (sb == 0) {
0x0008bb24 beq.w 0x8b8f0 | goto label_9;
| }
| label_33:
0x0008bb28 mov r1, sb | r1 = sb;
0x0008bb2a mov r0, r8 | r0 = r8;
0x0008bb2c bl 0x27744 | fcn_00027744 (r0, r1);
0x0008bb30 mov r1, sb | r1 = sb;
0x0008bb32 str r0, [sp, 0x1c] | var_1ch = r0;
0x0008bb34 mov r0, r8 | r0 = r8;
0x0008bb36 bl 0x27744 | fcn_00027744 (r0, r1);
0x0008bb3a str r0, [sp, 0x28] | var_28h = r0;
0x0008bb3c b 0x8b8f8 | goto label_10;
| label_44:
0x0008bb3e cmp.w sb, 1 |
| if (sb == 1) {
0x0008bb42 beq 0x8bbb2 | goto label_45;
| }
0x0008bb44 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x0008bb48 cmp sb, r3 |
| if (sb <= r3) {
0x0008bb4a ble 0x8baee | goto label_11;
| }
0x0008bb4c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008bb4e str.w sb, [r8, 0x1c] | __asm ("str.w sb, [r8, 0x1c]");
0x0008bb52 str.w r3, [r8, 0x20] | __asm ("str.w r3, [r8, 0x20]");
0x0008bb56 b 0x8baee | goto label_11;
| label_41:
0x0008bb58 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008bb5a mov r1, fp | r1 = fp;
0x0008bb5c rsbs r2, r3, 0 | r2 = r3 - ;
0x0008bb5e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008bb62 b 0x8ba70 | goto label_12;
| label_36:
0x0008bb64 cmp r3, 0x5e |
| if (r3 != 0x5e) {
0x0008bb66 beq 0x8bb92 |
0x0008bb68 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008bb6a mov r2, r4 | r2 = r4;
0x0008bb6c movs r1, 8 | r1 = 8;
0x0008bb6e mov r0, fp | r0 = fp;
0x0008bb70 str r4, [sp] | *(sp) = r4;
0x0008bb72 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bb76 b 0x8ba46 | goto label_13;
| label_35:
0x0008bb78 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0008bb7a movs r1, 0x35 | r1 = 0x35;
0x0008bb7c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008bb7e mov r0, fp | r0 = fp;
0x0008bb80 str r2, [sp] | *(sp) = r2;
0x0008bb82 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0008bb84 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bb88 b 0x8ba46 | goto label_13;
| label_40:
0x0008bb8a ldr r3, [pc, 0x98] |
0x0008bb8c add r3, pc | r3 = 0x1177b6;
0x0008bb8e adds r3, 4 | r3 += 4;
0x0008bb90 b 0x8ba44 | goto label_14;
| }
| label_37:
0x0008bb92 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008bb94 movs r1, 0x35 | r1 = 0x35;
0x0008bb96 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0008bb98 mov r0, fp | r0 = fp;
0x0008bb9a str r3, [sp] | *(sp) = r3;
0x0008bb9c movs r3, 0 | r3 = 0;
0x0008bb9e bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bba2 mov r4, r0 | r4 = r0;
0x0008bba4 b 0x8b9ca | goto label_15;
| label_39:
0x0008bba6 ldr.w r3, [r3, 0x210] | r3 = *((r3 + 0x210));
| if (r3 == 0) {
0x0008bbaa cbz r3, 0x8bbe6 | goto label_46;
| }
| label_17:
0x0008bbac ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0008bbb0 b 0x8ba0e | goto label_16;
| label_45:
0x0008bbb2 ldr r1, [sp, 0x28] | r1 = var_28h;
| if (r1 == 0) {
0x0008bbb4 cbz r1, 0x8bbca | goto label_47;
| }
0x0008bbb6 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008bbba cmp r3, 7 |
| if (r3 > 7) {
0x0008bbbc bhi 0x8baee | goto label_11;
| }
0x0008bbbe adds r2, r3, 1 | r2 = r3 + 1;
0x0008bbc0 adds r3, 0x26 | r3 += 0x26;
0x0008bbc2 strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008bbc6 str.w r1, [r8, r3, lsl 2] | __asm ("str.w r1, [r8, r3, lsl 2]");
| label_47:
0x0008bbca ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008bbcc cmp r1, 0 |
| if (r1 == 0) {
0x0008bbce beq 0x8baee | goto label_11;
| }
0x0008bbd0 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008bbd4 cmp r3, 7 |
0x0008bbd6 itttt ls |
| if (r3 > 7) {
0x0008bbd8 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008bbda addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008bbdc strbls r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0008bbe0 str.w r1, [r8, r3, lsl 2] | __asm ("str.w r1, [r8, r3, lsl 2]");
| }
0x0008bbe4 b 0x8baee | goto label_11;
| label_46:
0x0008bbe6 ldr r3, [r5] | r3 = *(r5);
0x0008bbe8 subs r3, 1 | r3--;
0x0008bbea str r3, [r5] | *(r5) = r3;
0x0008bbec cmp r3, 0 |
| if (r3 != 0) {
0x0008bbee bne 0x8bbac | goto label_17;
| }
0x0008bbf0 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0008bbf2 mov r1, r5 | r1 = r5;
0x0008bbf4 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0008bbf8 b 0x8bbac | goto label_17;
| label_38:
0x0008bbfa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008bbfc mov r2, r5 | r2 = r5;
0x0008bbfe movs r1, 8 | r1 = 8;
0x0008bc00 mov r0, fp | r0 = fp;
0x0008bc02 str r5, [sp] | *(sp) = r5;
0x0008bc04 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bc08 b 0x8ba1c | goto label_18;
| label_32:
0x0008bc0a ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008bc0e b 0x8bb18 | goto label_19;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8bc28 */
| #include <stdint.h>
|
; (fcn) fcn.0008bc28 () | void fcn_0008bc28 (int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008bc28 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008bc2c mov sb, r3 | sb = r3;
0x0008bc2e ldrd sl, r7, [r0] | __asm ("ldrd sl, r7, [r0]");
0x0008bc32 cmp r1, 2 |
0x0008bc34 sub sp, 0x24 |
0x0008bc36 mov r5, r2 | r5 = r2;
0x0008bc38 ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x0008bc3a mov r4, r0 | r4 = r0;
0x0008bc3c ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0008bc40 mov r8, r1 | r8 = r1;
0x0008bc42 ldrb.w fp, [r7, 0x10] | fp = *((r7 + 0x10));
0x0008bc46 add.w r2, r3, -1 | r2 = r3 + -1;
0x0008bc4a str r3, [sp, 0x10] | var_10h = r3;
0x0008bc4c str r2, [sp, 0x14] | var_14h = r2;
0x0008bc4e str.w r2, [sl, 0x38] | __asm ("str.w r2, [sl, 0x38]");
| if (r1 == 2) {
0x0008bc52 beq.w 0x8be38 | goto label_21;
| }
0x0008bc56 cmp r5, 0 |
| if (r5 <= 0) {
0x0008bc58 ble 0x8bd4e | goto label_22;
| }
0x0008bc5a cmp.w fp, 0x59 |
| if (fp != 0x59) {
0x0008bc5e bne 0x8bd3e | goto label_6;
| }
0x0008bc60 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0008bc62 ldr r3, [r0, 0x28] | r3 = *((r0 + 0x28));
0x0008bc64 str r1, [sp, 0xc] | var_ch = r1;
0x0008bc66 movs r1, 0x36 | r1 = 0x36;
0x0008bc68 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x0008bc6c mov r3, r5 | r3 = r5;
0x0008bc6e ldr r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x0008bc70 bl 0x46950 | fcn_00046950 (r0, r1, r2, r3, r4, r5, r6);
0x0008bc74 subs r5, 0 |
0x0008bc76 it ne |
| if (r5 == 0) {
0x0008bc78 movne r5, 1 | r5 = 1;
| }
0x0008bc7a cmp.w r8, 1 |
| if (r8 == 1) {
0x0008bc7e beq 0x8bd60 | goto label_23;
| }
| do {
0x0008bc80 ldrb r3, [r7, 0x12] | r3 = *((r7 + 0x12));
0x0008bc82 ldrb r2, [r7, 0x11] | r2 = *((r7 + 0x11));
0x0008bc84 cmp r2, r3 |
0x0008bc86 ite ne |
| if (r2 == r3) {
0x0008bc88 movne r5, 0 | r5 = 0;
| }
| if (r2 != r3) {
0x0008bc8a andeq r5, r5, 1 | r5 &= 1;
| }
0x0008bc8e ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008bc90 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008bc92 cmp r5, 0 |
| if (r5 != 0) {
0x0008bc94 bne.w 0x8bf1a | goto label_24;
| }
| label_12:
0x0008bc98 cmp.w r8, 2 |
| if (r8 == 2) {
0x0008bc9c beq.w 0x8be8e | goto label_15;
| }
| label_19:
0x0008bca0 ldr r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x0008bca2 ldrd r5, r2, [r4, 0x30] | __asm ("ldrd r5, r2, [r4, 0x30]");
0x0008bca6 str r2, [sp, 0x18] | var_18h = r2;
0x0008bca8 cmp r3, 0 |
| if (r3 == 0) {
0x0008bcaa beq.w 0x8beae | goto label_25;
| }
0x0008bcae ldr r2, [r7, 0x5c] | r2 = *((r7 + 0x5c));
| label_7:
0x0008bcb0 movs r3, 0 | r3 = 0;
0x0008bcb2 movs r1, 0x56 | r1 = 0x56;
0x0008bcb4 str r3, [sp] | *(sp) = r3;
0x0008bcb6 mov r0, r6 | r0 = r6;
0x0008bcb8 movs r3, 1 | r3 = 1;
0x0008bcba bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bcbe ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0008bcc0 cmp r3, r8 |
| if (r3 != r8) {
0x0008bcc2 bne 0x8bd92 | goto label_26;
| }
| label_0:
0x0008bcc4 movs r3, 0 | r3 = 0;
0x0008bcc6 mov r2, r5 | r2 = r5;
0x0008bcc8 str r3, [sp] | *(sp) = r3;
0x0008bcca movs r1, 0x82 | r1 = 0x82;
0x0008bccc mov r0, r6 | r0 = r6;
0x0008bcce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bcd2 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008bcd4 cmp r3, 0 |
| if (r3 > 0) {
0x0008bcd6 ble 0x8bce8 |
0x0008bcd8 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0008bcda add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0008bcde add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0008bce2 movs r1, 2 | r1 = 2;
0x0008bce4 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0008bce8 cmp.w sb, 0 |
| if (sb == 0) {
0x0008bcec beq 0x8bd9a | goto label_27;
| }
| label_1:
0x0008bcee mov.w r8, 0 | r8 = 0;
0x0008bcf2 adds r3, 2 | r3 += 2;
0x0008bcf4 mov r2, r5 | r2 = r5;
0x0008bcf6 movs r1, 0x26 | r1 = 0x26;
0x0008bcf8 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008bcfc mov r0, r6 | r0 = r6;
0x0008bcfe bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bd00 cdp2 p6, 0xb, c4, c13, c3, 2 | __asm ("cdp2 p6, 0xb, c4, c13, c3, 2");
0x0008bd04 mov r2, r8 | r2 = r8;
0x0008bd06 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008bd0a movs r1, 8 | r1 = 8;
0x0008bd0c mov r0, r6 | r0 = r6;
0x0008bd0e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bd12 cmp.w fp, 0x4c |
0x0008bd16 mov r8, r0 | r8 = r0;
| if (fp != 0x4c) {
0x0008bd18 bne 0x8bdce | goto label_28;
| }
| label_2:
0x0008bd1a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008bd1c cmp r3, 0 |
| if (r3 != 0) {
0x0008bd1e bne 0x8be10 | goto label_29;
| }
| label_3:
0x0008bd20 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0008bd22 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008bd26 cmn r2, r3 |
| if (r2 < r3) {
0x0008bd28 bmi 0x8be26 | goto label_30;
| }
| label_4:
0x0008bd2a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008bd2c ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0008bd2e ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008bd30 lsls r3, r3, 2 | r3 <<= 2;
0x0008bd32 rsbs r3, r3, 0 | r3 -= ;
0x0008bd34 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_5:
0x0008bd36 mov r0, r8 | r0 = r8;
0x0008bd38 add sp, 0x24 |
0x0008bd3a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x0008bd3e movs r3, 1 | r3 = 1;
0x0008bd40 mov r2, r5 | r2 = r5;
0x0008bd42 str r3, [sp] | *(sp) = r3;
0x0008bd44 movs r1, 0x31 | r1 = 0x31;
0x0008bd46 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008bd48 mov r0, r6 | r0 = r6;
0x0008bd4a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_22:
0x0008bd4e subs r5, 0 |
0x0008bd50 mov.w r3, 0 | r3 = 0;
0x0008bd54 it ne |
| if (r5 == 0) {
0x0008bd56 movne r5, 1 | r5 = 1;
| }
0x0008bd58 cmp.w r8, 1 |
0x0008bd5c str r3, [sp, 0xc] | var_ch = r3;
0x0008bd5e bne 0x8bc80 |
| } while (r8 != 1);
| label_23:
0x0008bd60 ldr r2, [r7, 0x58] | r2 = *((r7 + 0x58));
0x0008bd62 cmp r2, 0 |
| if (r2 == 0) {
0x0008bd64 beq.w 0x8bf10 | goto label_31;
| }
| label_11:
0x0008bd68 ldrb r3, [r7, 0x12] | r3 = *((r7 + 0x12));
0x0008bd6a ldrb r2, [r7, 0x11] | r2 = *((r7 + 0x11));
0x0008bd6c cmp r2, r3 |
0x0008bd6e ite ne |
| if (r2 == r3) {
0x0008bd70 movne r5, 0 | r5 = 0;
| }
| if (r2 != r3) {
0x0008bd72 andeq r5, r5, 1 | r5 &= 1;
| }
0x0008bd76 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008bd78 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008bd7a cmp r5, 0 |
| if (r5 != 0) {
0x0008bd7c bne.w 0x8bf94 | goto label_32;
| }
| label_13:
0x0008bd80 ldrd r5, r3, [r4, 0x28] | __asm ("ldrd r5, r3, [r4, 0x28]");
0x0008bd84 mov r0, r4 | r0 = r4;
0x0008bd86 str r3, [sp, 0x18] | var_18h = r3;
0x0008bd88 bl 0x8b5ac | fcn_0008b5ac (r0, r1, r2, r3, r4);
| label_8:
0x0008bd8c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0008bd8e cmp r3, r8 |
| if (r3 == r8) {
0x0008bd90 beq 0x8bcc4 | goto label_0;
| }
| label_26:
0x0008bd92 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008bd94 cmp.w sb, 0 |
| if (sb != 0) {
0x0008bd98 bne 0x8bcee | goto label_1;
| }
| label_27:
0x0008bd9a adds r3, 1 | r3++;
0x0008bd9c mov r2, r5 | r2 = r5;
0x0008bd9e cmp.w fp, 0x4c |
0x0008bda2 it ne |
| if (fp == 0x4c) {
0x0008bda4 addne r3, 1 | r3++;
| }
0x0008bda6 movs r1, 0x26 | r1 = 0x26;
0x0008bda8 mov r0, r6 | r0 = r6;
0x0008bdaa str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008bdae bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bdb2 cmp.w fp, 0x4c |
0x0008bdb6 it eq |
| if (fp == 0x4c) {
0x0008bdb8 moveq r8, sb | r8 = sb;
| goto label_33;
| }
| if (fp == 0x4c) {
| label_33:
0x0008bdba beq 0x8bd1a | goto label_2;
| }
0x0008bdbc ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008bdbe mov r2, sb | r2 = sb;
0x0008bdc0 movs r1, 8 | r1 = 8;
0x0008bdc2 mov r0, r6 | r0 = r6;
0x0008bdc4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008bdc8 mov r8, sb | r8 = sb;
0x0008bdca bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_28:
0x0008bdce ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
| if (r3 != 0) {
0x0008bdd0 cbz r3, 0x8bddc |
0x0008bdd2 ldr.w sb, [r3] | sb = *(r3);
0x0008bdd6 cmp.w sb, 0 |
| if (sb != 0) {
0x0008bdda bne 0x8bec4 | goto label_34;
| }
| }
0x0008bddc ldrd r0, r1, [r4] | __asm ("ldrd r0, r1, [r4]");
0x0008bde0 mov r2, r5 | r2 = r5;
0x0008bde2 movs r3, 0 | r3 = 0;
0x0008bde4 mov.w sb, 0 | sb = 0;
0x0008bde8 bl 0x426c0 | fcn_000426c0 (r0, r1, r2, r3);
0x0008bdec ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008bdee mov fp, sb |
0x0008bdf0 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0008bdf2 movs r2, 0 | r2 = 0;
0x0008bdf4 mov r0, sl | r0 = sl;
0x0008bdf6 str r3, [sp] | *(sp) = r3;
0x0008bdf8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008bdfa bl 0x46874 | fcn_00046874 (r0, r1, r2, r3, r4);
| label_10:
0x0008bdfe ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008be02 cmp r3, sb |
0x0008be04 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008be06 it lt |
| if (r3 < sb) {
0x0008be08 strdlt sb, fp, [sl, 0x1c] | __asm ("strdlt sb, fp, [sl, 0x1c]");
| }
0x0008be0c cmp r3, 0 |
| if (r3 == 0) {
0x0008be0e beq 0x8bd20 | goto label_3;
| }
| label_29:
0x0008be10 movs r2, 0 | r2 = 0;
0x0008be12 movs r1, 8 | r1 = 8;
0x0008be14 str r2, [sp] | *(sp) = r2;
0x0008be16 mov r0, r6 | r0 = r6;
0x0008be18 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008be1c ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0008be1e ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008be22 cmn r2, r3 |
| if (r2 >= r3) {
0x0008be24 bpl 0x8bd2a | goto label_4;
| }
| label_30:
0x0008be26 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008be28 mov r1, r6 | r1 = r6;
0x0008be2a rsbs r2, r3, 0 | r2 = r3 - ;
0x0008be2c bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008be30 mov r0, r8 | r0 = r8;
0x0008be32 add sp, 0x24 |
0x0008be34 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0008be38 ldrb r3, [r7, 0x11] | r3 = *((r7 + 0x11));
0x0008be3a cmp r3, 0x5a |
0x0008be3c it eq |
| if (r3 == 0x5a) {
0x0008be3e moveq r8, 0 | r8 = 0;
| goto label_35;
| }
| if (r3 == 0x5a) {
| label_35:
0x0008be42 beq.w 0x8bd36 | goto label_5;
| }
0x0008be46 cmp r5, 0 |
| if (r5 <= 0) {
0x0008be48 ble 0x8bebe | goto label_36;
| }
0x0008be4a cmp.w fp, 0x59 |
| if (fp != 0x59) {
0x0008be4e bne.w 0x8bd3e | goto label_6;
| }
0x0008be52 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0008be54 cmp r3, 0x56 |
0x0008be56 ldr r1, [r0, 0x28] | r1 = *((r0 + 0x28));
0x0008be58 str r2, [sp, 0xc] | var_ch = r2;
0x0008be5a ldr r2, [r0, 0x20] | r2 = *((r0 + 0x20));
| if (r3 == 0x56) {
0x0008be5c beq.w 0x8bfd8 | goto label_37;
| }
0x0008be60 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008be62 str r1, [sp] | *(sp) = r1;
0x0008be64 movs r1, 0x39 | r1 = 0x39;
0x0008be66 str r3, [sp, 4] | var_4h = r3;
0x0008be68 mov r3, r5 | r3 = r5;
0x0008be6a bl 0x46950 | fcn_00046950 (r0, r1, r2, r3, r4, r5, r6);
0x0008be6e ldrb r3, [r7, 0x11] | r3 = *((r7 + 0x11));
| label_9:
0x0008be70 ldrb r2, [r7, 0x12] | r2 = *((r7 + 0x12));
0x0008be72 cmp r5, 0 |
0x0008be74 sub.w r3, r2, r3 | r3 = r2 - r3;
0x0008be78 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0008be7a clz r3, r3 | r3 &= r3;
0x0008be7e lsr.w r3, r3, 5 | r3 >>= 5;
0x0008be82 it eq |
| if (r5 != 0) {
0x0008be84 moveq r3, 0 | r3 = 0;
| }
0x0008be86 str r2, [sp, 0x1c] | var_1ch = r2;
0x0008be88 cmp r3, 0 |
| if (r3 != 0) {
0x0008be8a bne.w 0x8bf9c | goto label_38;
| }
| label_15:
0x0008be8e ldr r2, [r7, 0x58] | r2 = *((r7 + 0x58));
0x0008be90 ldrd r5, r3, [r4, 0x20] | __asm ("ldrd r5, r3, [r4, 0x20]");
0x0008be94 str r3, [sp, 0x18] | var_18h = r3;
0x0008be96 cmp r2, 0 |
| if (r2 != 0) {
0x0008be98 bne.w 0x8bcb0 | goto label_7;
| }
0x0008be9c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0008be9e mov r2, r5 | r2 = r5;
0x0008bea0 mov r1, r7 | r1 = r7;
0x0008bea2 str r3, [sp] | *(sp) = r3;
0x0008bea4 movs r3, 1 | r3 = 1;
0x0008bea6 ldr r0, [r4] | r0 = *(r4);
0x0008bea8 bl 0x8b184 | fcn_0008b184 (r0, r1, r2, r3, r4, r5);
0x0008beac b 0x8bd8c | goto label_8;
| label_25:
0x0008beae ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0008beb0 mov r1, r7 | r1 = r7;
0x0008beb2 str r2, [sp] | *(sp) = r2;
0x0008beb4 mov r2, r5 | r2 = r5;
0x0008beb6 ldr r0, [r4] | r0 = *(r4);
0x0008beb8 bl 0x8b184 | fcn_0008b184 (r0, r1, r2, r3, r4, r5);
0x0008bebc b 0x8bd8c | goto label_8;
| label_36:
0x0008bebe movs r2, 0 | r2 = 0;
0x0008bec0 str r2, [sp, 0xc] | var_ch = r2;
0x0008bec2 b 0x8be70 | goto label_9;
| label_34:
0x0008bec4 mov r1, sb | r1 = sb;
0x0008bec6 mov r0, sl | r0 = sl;
0x0008bec8 bl 0x27744 | r0 = fcn_00027744 (r0, r1);
0x0008becc mov fp, r0 |
0x0008bece mov r2, r5 | r2 = r5;
0x0008bed0 ldrd r0, r1, [r4] | __asm ("ldrd r0, r1, [r4]");
0x0008bed4 mov r3, fp | r3 = fp;
0x0008bed6 bl 0x426c0 | fcn_000426c0 (r0, r1, r2, r3);
0x0008beda ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008bedc mov r2, fp | r2 = fp;
0x0008bede ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0008bee0 mov r0, sl | r0 = sl;
0x0008bee2 str r3, [sp] | *(sp) = r3;
0x0008bee4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008bee6 bl 0x46874 | fcn_00046874 (r0, r1, r2, r3, r4);
0x0008beea cmp.w sb, 1 |
| if (sb != 1) {
0x0008beee bne 0x8bdfe | goto label_10;
| }
0x0008bef0 cmp.w fp, 0 |
| if (fp == 0) {
0x0008bef4 beq.w 0x8bd1a | goto label_2;
| }
0x0008bef8 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0008befc cmp r3, 7 |
| if (r3 > 7) {
0x0008befe bhi.w 0x8bd1a | goto label_2;
| }
0x0008bf02 adds r2, r3, 1 | r2 = r3 + 1;
0x0008bf04 adds r3, 0x26 | r3 += 0x26;
0x0008bf06 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008bf0a str.w fp, [sl, r3, lsl 2] | __asm ("str.w fp, [sl, r3, lsl 2]");
0x0008bf0e b 0x8bd1a | goto label_2;
| label_31:
0x0008bf10 ldrd r0, r1, [r4] | __asm ("ldrd r0, r1, [r4]");
0x0008bf14 bl 0x41b94 | fcn_00041b94 (r0, r1, r2);
0x0008bf18 b 0x8bd68 | goto label_11;
| label_24:
0x0008bf1a ldrb r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0008bf1c cmp r3, 0x59 |
| if (r3 != 0x59) {
0x0008bf1e bne.w 0x8bc98 | goto label_12;
| }
| label_14:
0x0008bf22 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0008bf26 cmp r3, 0 |
| if (r3 == 0) {
0x0008bf28 beq 0x8bfa6 | goto label_39;
| }
0x0008bf2a subs r2, r3, 1 | r2 = r3 - 1;
0x0008bf2c uxtb r2, r2 | r2 = (int8_t) r2;
0x0008bf2e add.w r1, r2, 0x26 | r1 = r2 + 0x26;
0x0008bf32 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008bf36 ldr.w r5, [sl, r1, lsl 2] | offset_0 = r1 << 2;
| r5 = *((sl + offset_0));
0x0008bf3a cmp r2, 0 |
| if (r2 == 0) {
0x0008bf3c beq.w 0x8c064 | goto label_40;
| }
0x0008bf40 subs r3, 2 | r3 -= 2;
0x0008bf42 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008bf44 strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x0008bf48 adds r3, 0x26 | r3 += 0x26;
0x0008bf4a ldr.w r3, [sl, r3, lsl 2] | offset_1 = r3 << 2;
| r3 = *((sl + offset_1));
0x0008bf4e str r3, [sp, 0x18] | var_18h = r3;
| label_16:
0x0008bf50 cmp.w r8, 2 |
| if (r8 == 2) {
0x0008bf54 beq 0x8bfec | goto label_41;
| }
0x0008bf56 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
| if (r3 != 0) {
0x0008bf58 cbnz r3, 0x8bfb8 | goto label_42;
| }
| if (r5 != 0) {
| label_17:
0x0008bf5a cbz r5, 0x8bf70 |
0x0008bf5c ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0008bf60 cmp r3, 7 |
| if (r3 > 7) {
0x0008bf62 bhi 0x8c03a | goto label_43;
| }
0x0008bf64 adds r2, r3, 1 | r2 = r3 + 1;
0x0008bf66 adds r3, 0x26 | r3 += 0x26;
0x0008bf68 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008bf6c str.w r5, [sl, r3, lsl 2] | __asm ("str.w r5, [sl, r3, lsl 2]");
| }
0x0008bf70 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x0008bf72 cbz r3, 0x8bf8a |
| label_18:
0x0008bf74 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0008bf78 cmp r3, 7 |
| if (r3 > 7) {
0x0008bf7a bhi 0x8bf8a | goto label_44;
| }
0x0008bf7c adds r2, r3, 1 | r2 = r3 + 1;
0x0008bf7e adds r3, 0x26 | r3 += 0x26;
0x0008bf80 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008bf84 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008bf86 str.w r2, [sl, r3, lsl 2] | __asm ("str.w r2, [sl, r3, lsl 2]");
| }
| label_44:
0x0008bf8a cmp.w r8, 1 |
| if (r8 != 1) {
0x0008bf8e bne.w 0x8bc98 | goto label_12;
| }
0x0008bf92 b 0x8bd80 | goto label_13;
| label_32:
0x0008bf94 ldrb r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0008bf96 cmp r3, 0x59 |
| if (r3 == 0x59) {
0x0008bf98 beq 0x8bf22 | goto label_14;
| }
0x0008bf9a b 0x8bd80 | goto label_13;
| label_38:
0x0008bf9c ldrb r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0008bf9e cmp r3, 0x59 |
| if (r3 != 0x59) {
0x0008bfa0 bne.w 0x8be8e | goto label_15;
| }
0x0008bfa4 b 0x8bf22 | goto label_14;
| label_39:
0x0008bfa6 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0008bfaa adds r5, r3, 1 | r5 = r3 + 1;
0x0008bfac mov r3, r5 | r3 = r5;
| label_20:
0x0008bfae adds r3, 1 | r3++;
0x0008bfb0 str r3, [sp, 0x18] | var_18h = r3;
0x0008bfb2 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x0008bfb6 b 0x8bf50 | goto label_16;
| label_42:
0x0008bfb8 movs r3, 0 | r3 = 0;
0x0008bfba movs r1, 0x87 | r1 = 0x87;
0x0008bfbc str r3, [sp] | *(sp) = r3;
0x0008bfbe mov r0, r6 | r0 = r6;
0x0008bfc0 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0008bfc2 mov r3, r5 | r3 = r5;
0x0008bfc4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bfc8 str r5, [sp] | *(sp) = r5;
0x0008bfca movs r1, 0x39 | r1 = 0x39;
0x0008bfcc ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0008bfce mov r0, r6 | r0 = r6;
0x0008bfd0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008bfd2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bfd6 b 0x8bf5a | goto label_17;
| label_37:
0x0008bfd8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008bfda str r2, [sp] | *(sp) = r2;
0x0008bfdc mov r2, r1 | r2 = r1;
0x0008bfde movs r1, 0x37 | r1 = 0x37;
0x0008bfe0 str r3, [sp, 4] | var_4h = r3;
0x0008bfe2 mov r3, r5 | r3 = r5;
0x0008bfe4 bl 0x46950 | fcn_00046950 (r0, r1, r2, r3, r4, r5, r6);
0x0008bfe8 ldrb r3, [r7, 0x11] | r3 = *((r7 + 0x11));
0x0008bfea b 0x8be70 | goto label_9;
| label_41:
0x0008bfec movs r3, 0 | r3 = 0;
0x0008bfee movs r1, 0x87 | r1 = 0x87;
0x0008bff0 str r3, [sp] | *(sp) = r3;
0x0008bff2 mov r0, r6 | r0 = r6;
0x0008bff4 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x0008bff6 mov r3, r5 | r3 = r5;
0x0008bff8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008bffc movs r3, 0 | r3 = 0;
0x0008bffe movs r1, 0x87 | r1 = 0x87;
0x0008c000 str r3, [sp] | *(sp) = r3;
0x0008c002 mov r0, r6 | r0 = r6;
0x0008c004 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0008c006 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c008 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c00c ldrd r3, r2, [sp, 0x14] | __asm ("ldrd r3, r2, [var_14h]");
0x0008c010 movs r1, 0x39 | r1 = 0x39;
0x0008c012 mov r0, r6 | r0 = r6;
0x0008c014 str r5, [sp] | *(sp) = r5;
0x0008c016 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| if (r5 == 0) {
0x0008c01a cbz r5, 0x8c044 | goto label_45;
| }
0x0008c01c ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0008c020 cmp r3, 7 |
| if (r3 > 7) {
0x0008c022 bhi.w 0x8be8e | goto label_15;
| }
0x0008c026 adds r2, r3, 1 | r2 = r3 + 1;
0x0008c028 adds r3, 0x26 | r3 += 0x26;
0x0008c02a strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008c02e str.w r5, [sl, r3, lsl 2] | __asm ("str.w r5, [sl, r3, lsl 2]");
0x0008c032 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c034 cmp r3, 0 |
| if (r3 != 0) {
0x0008c036 bne 0x8bf74 | goto label_18;
| }
0x0008c038 b 0x8be8e | goto label_15;
| label_43:
0x0008c03a cmp.w r8, 1 |
| if (r8 != 1) {
0x0008c03e bne.w 0x8bca0 | goto label_19;
| }
0x0008c042 b 0x8bd80 | goto label_13;
| label_45:
0x0008c044 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0008c046 cmp r1, 0 |
| if (r1 == 0) {
0x0008c048 beq.w 0x8be8e | goto label_15;
| }
0x0008c04c ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x0008c050 cmp r3, 7 |
| if (r3 > 7) {
0x0008c052 bhi.w 0x8be8e | goto label_15;
| }
0x0008c056 adds r2, r3, 1 | r2 = r3 + 1;
0x0008c058 adds r3, 0x26 | r3 += 0x26;
0x0008c05a strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x0008c05e str.w r1, [sl, r3, lsl 2] | __asm ("str.w r1, [sl, r3, lsl 2]");
0x0008c062 b 0x8be8e | goto label_15;
| label_40:
0x0008c064 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0008c068 b 0x8bfae | goto label_20;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8c06c */
| #include <stdint.h>
|
; (fcn) fcn.0008c06c () | void fcn_0008c06c (int16_t arg_0h, int16_t arg_1ch, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| arithmetic x;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008c06c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008c070 sub sp, 0x24 |
0x0008c072 str r3, [sp, 0x18] | var_18h = r3;
0x0008c074 mov fp, r2 |
0x0008c076 mov r6, r0 | r6 = r0;
0x0008c078 mov lr, r1 | lr = r1;
0x0008c07a ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0008c07c movs r2, 1 | r2 = 1;
0x0008c07e ldr.w sb, [r0, 8] | sb = *((r0 + 8));
0x0008c082 ldr.w r7, [fp, 0x28] | r7 = *(arg_28h);
0x0008c086 cmp r3, 0 |
0x0008c088 strb.w r2, [fp] | *(fp) = r2;
| if (r3 <= 0) {
0x0008c08c ble.w 0x8c1bc | goto label_8;
| }
0x0008c090 adds r7, 0x14 | r7 += 0x14;
0x0008c092 mov.w ip, 0 |
0x0008c096 str.w ip, [sp, 0xc] | __asm ("str.w ip, [var_ch]");
0x0008c09a str.w ip, [sp, 0x14] | __asm ("str.w ip, [var_14h]");
0x0008c09e str r1, [sp, 0x1c] | var_1ch = r1;
| do {
0x0008c0a0 ldr r3, [r7, -0x14] | r3 = *((r7 - 0x14));
0x0008c0a4 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x0008c0a6 ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x0008c0a8 ands r4, r4, 0x1000000 | r4 &= 0x1000000;
| if (r4 != r4) {
0x0008c0ac beq 0x8c0e0 |
0x0008c0ae ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x0008c0b2 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0008c0b4 ldr r4, [r3, 0x28] | r4 = *((r3 + 0x28));
| if (r2 != 0) {
0x0008c0b6 cbz r2, 0x8c0ce |
0x0008c0b8 ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x0008c0bc ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0008c0be ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008c0c0 subs r3, 0 |
0x0008c0c2 it ne |
| if (r3 == 0) {
0x0008c0c4 movne r3, 1 | r3 = 1;
| }
0x0008c0c6 ands.w r3, r3, r2, lsr 5 | r3 &= (r2 >> 5);
| if (r3 != r3) {
0x0008c0ca bne.w 0x8c2f0 | goto label_9;
| }
| }
| label_7:
0x0008c0ce ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x0008c0d0 mov r1, r4 | r1 = r4;
0x0008c0d2 mov r0, r6 | r0 = r6;
0x0008c0d4 subs r4, r3, 1 | r4 = r3 - 1;
0x0008c0d6 movs r3, 0x10 | r3 = 0x10;
0x0008c0d8 mov r2, r4 | r2 = r4;
0x0008c0da str r4, [r6, 0x38] | *((r6 + 0x38)) = r4;
0x0008c0dc bl 0x7dcb8 | fcn_0007dcb8 (r0, r1, r2, r3);
| }
0x0008c0e0 cmp r5, 0 |
| if (r5 == 0) {
0x0008c0e2 beq 0x8c1e0 | goto label_10;
| }
0x0008c0e4 ldr.w r8, [r5] | r8 = *(r5);
0x0008c0e8 mov r0, r6 | r0 = r6;
0x0008c0ea mov r1, r8 | r1 = r8;
0x0008c0ec bl 0x27744 | fcn_00027744 (r0, r1);
0x0008c0f0 movs r3, 1 | r3 = 1;
0x0008c0f2 mov r2, r0 | r2 = r0;
0x0008c0f4 str r0, [sp, 8] | x = r0;
0x0008c0f6 mov r1, r5 | r1 = r5;
0x0008c0f8 str r3, [sp] | *(sp) = r3;
0x0008c0fa mov r0, r6 | r0 = r6;
0x0008c0fc movs r3, 0 | r3 = 0;
0x0008c0fe bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
0x0008c102 ldr r2, [r7, -0x8] | r2 = *((r7 - 0x8));
0x0008c106 cmp r2, 0 |
| if (r2 >= 0) {
0x0008c108 blt 0x8c126 |
| if (r4 == 0) {
0x0008c10a cbnz r4, 0x8c112 |
0x0008c10c ldr r4, [r6, 0x38] | r4 = *((r6 + 0x38));
0x0008c10e subs r4, 1 | r4--;
0x0008c110 str r4, [r6, 0x38] | *((r6 + 0x38)) = r4;
| }
0x0008c112 ldr r3, [sp, 8] | r3 = x;
0x0008c114 mov r0, r6 | r0 = r6;
0x0008c116 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0008c118 strd r5, r3, [sp] | __asm ("strd r5, r3, [sp]");
0x0008c11c mov r3, r4 | r3 = r4;
0x0008c11e bl 0x466d4 | fcn_000466d4 (r0, r1, r2, r3, r4, r5);
0x0008c122 str r0, [r7, -0x8] | *((r7 - 0x8)) = r0;
| }
0x0008c126 ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x0008c12a uxtb.w r2, r8 | r2 = (int8_t) r8;
0x0008c12e str r2, [sp, 0x10] | var_10h = r2;
0x0008c130 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008c132 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x0008c134 bmi.w 0x8c24c | goto label_11;
| }
| label_0:
0x0008c138 ldr r3, [r7, -0xc] | r3 = *((r7 - 0xc));
0x0008c13c movs r1, 0xa2 | r1 = 0xa2;
0x0008c13e movs r2, 0 | r2 = 0;
0x0008c140 mov r0, sb | r0 = sb;
0x0008c142 str r3, [sp] | *(sp) = r3;
0x0008c144 ldr r3, [sp, 8] | r3 = x;
0x0008c146 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c14a ldr.w r0, [sb] | r0 = *(sb);
0x0008c14e ldr r1, [r7, -0x10] | r1 = *((r7 - 0x10));
0x0008c152 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008c156 cmp r3, 0 |
| if (r3 != 0) {
0x0008c158 bne 0x8c22a | goto label_12;
| }
0x0008c15a ldrd r0, r3, [sb, 0x68] | __asm ("ldrd r0, r3, [sb, 0x68]");
0x0008c15e movs r5, 0xf9 | r5 = 0xf9;
0x0008c160 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0008c164 lsls r2, r2, 3 | r2 <<= 3;
0x0008c166 subs r2, 0x18 | r2 -= 0x18;
0x0008c168 add r0, r2 | r0 += r2;
0x0008c16a strb r5, [r0, 1] | *((r0 + 1)) = r5;
0x0008c16c str r1, [r0, 0x10] | *((r0 + 0x10)) = r1;
| label_1:
0x0008c16e cmp r3, 0 |
| if (r3 > 0) {
0x0008c170 ble 0x8c184 |
0x0008c172 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008c176 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0008c17a add.w r2, r2, r1, lsl 3 | r2 += (r1 << 3);
0x0008c17e ldr r1, [sp, 0x10] | r1 = var_10h;
0x0008c180 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0008c184 cmp.w r8, 1 |
| if (r8 == 1) {
0x0008c188 beq 0x8c280 | goto label_13;
| }
0x0008c18a ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0008c18c cmp r2, r8 |
0x0008c18e ittt lt |
| if (r2 >= r8) {
0x0008c190 ldrlt r2, [sp, 8] | r2 = x;
| }
| if (r2 >= r8) {
0x0008c192 strlt r8, [r6, 0x1c] | *((r6 + 0x1c)) = r8;
| }
| if (r2 < r8) {
0x0008c196 str r2, [r6, 0x20] | *((r6 + 0x20)) = r2;
| }
| label_5:
0x0008c198 cmp r4, 0 |
| if (r4 != 0) {
0x0008c19a bne 0x8c236 | goto label_14;
| }
| label_2:
0x0008c19c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0008c19e adds r7, 0x14 | r7 += 0x14;
0x0008c1a0 ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x0008c1a4 adds r2, 1 | r2++;
0x0008c1a6 cmp r3, r2 |
0x0008c1a8 str r2, [sp, 0xc] | var_ch = r2;
0x0008c1aa bgt.w 0x8c0a0 |
| } while (r3 > r2);
0x0008c1ae ldr.w ip, [sp, 0x14] | ip = var_14h;
0x0008c1b2 ldr.w lr, [sp, 0x1c] | lr = var_1ch;
0x0008c1b6 cmp.w ip, 0 |
| if (ip != 0) {
0x0008c1ba bne 0x8c2a8 | goto label_15;
| }
| label_8:
0x0008c1bc ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0008c1c0 cmp r3, 0 |
0x0008c1c2 it ne |
| if (r3 != 0) {
0x0008c1c4 cmpne lr, 0 | __asm ("cmpne lr, 0");
| }
0x0008c1c8 ite ne |
| if (r3 == 0) {
0x0008c1ca movne r7, 1 | r7 = 1;
| }
| if (r3 != 0) {
0x0008c1cc moveq r7, 0 | r7 = 0;
| }
| if (r3 != 0) {
0x0008c1ce bne 0x8c2a6 | goto label_16;
| }
0x0008c1d0 cmp r3, 0 |
0x0008c1d2 ldr.w r4, [fp, 0x1c] | r4 = *(arg_1ch);
0x0008c1d6 it le |
| if (r3 > 0) {
0x0008c1d8 strble r7, [fp] | *(fp) = r7;
| }
| if (r3 > 0) {
0x0008c1dc bgt 0x8c2c4 | goto label_17;
| }
0x0008c1de b 0x8c2ea | goto label_18;
| label_10:
0x0008c1e0 ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x0008c1e4 mov r8, r5 | r8 = r5;
0x0008c1e6 str r5, [sp, 0x10] | var_10h = r5;
0x0008c1e8 str r5, [sp, 8] | x = r5;
0x0008c1ea ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008c1ec tst.w r3, 0x20 |
| if ((r3 & 0x20) == 0) {
0x0008c1f0 beq 0x8c138 | goto label_0;
| }
| do {
| label_4:
0x0008c1f2 ldr r3, [r6] | r3 = *(r6);
0x0008c1f4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008c1f6 mov r5, r3 | r5 = r3;
| label_3:
0x0008c1f8 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x0008c1fa cbnz r3, 0x8c20c |
0x0008c1fc ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0008c200 str r3, [sp, 0x14] | var_14h = r3;
| if (r3 == 0) {
0x0008c202 cbz r3, 0x8c20c | goto label_19;
| }
0x0008c204 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0008c206 adds r3, 1 | r3++;
0x0008c208 str r3, [sp, 0x14] | var_14h = r3;
0x0008c20a str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
| }
| label_19:
0x0008c20c movs r3, 0 | r3 = 0;
0x0008c20e ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008c210 str r3, [sp] | *(sp) = r3;
0x0008c212 movs r1, 0x55 | r1 = 0x55;
0x0008c214 mov r0, sb | r0 = sb;
0x0008c216 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c21a mov r2, r5 | r2 = r5;
0x0008c21c mov r1, r0 | r1 = r0;
0x0008c21e mvn r3, 1 | r3 = ~1;
0x0008c222 mov r0, sb | r0 = sb;
0x0008c224 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0008c228 b 0x8c138 | goto label_0;
| label_12:
0x0008c22a ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0008c22c lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0008c22e bmi 0x8c298 | goto label_20;
| }
| label_6:
0x0008c230 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008c234 b 0x8c16e | goto label_1;
| label_14:
0x0008c236 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008c23a mvns r2, r4 | r2 = ~r4;
0x0008c23c ldrd r1, r5, [r0, 0x38] | __asm ("ldrd r1, r5, [r0, 0x38]");
0x0008c240 cmn r5, r1 |
| if (r5 < r1) {
0x0008c242 bmi 0x8c29e | goto label_21;
| }
0x0008c244 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x0008c246 str.w r3, [r1, r2, lsl 2] | __asm ("str.w r3, [r1, r2, lsl 2]");
0x0008c24a b 0x8c19c | goto label_2;
| label_11:
0x0008c24c cmp.w r8, 0 |
0x0008c250 ble 0x8c1f2 |
| } while (r8 <= 0);
0x0008c252 add.w sl, r5, 0x18 | sl = r5 + 0x18;
0x0008c256 movs r5, 0 | r5 = 0;
| do {
0x0008c258 ldr r1, [sl, -0x10] | r1 = *((sl - 0x10));
0x0008c25c mov r0, r6 | r0 = r6;
0x0008c25e bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0008c262 adds r5, 1 | r5++;
0x0008c264 clz r3, r0 | r3 &= r0;
0x0008c268 lsrs r3, r3, 5 | r3 >>= 5;
0x0008c26a cmp r8, r5 |
0x0008c26c it le |
| if (r8 > r5) {
0x0008c26e movle r3, 0 | r3 = 0;
| }
0x0008c270 add.w sl, sl, 0x10 | sl += 0x10;
0x0008c274 cmp r3, 0 |
0x0008c276 bne 0x8c258 |
| } while (r3 != 0);
0x0008c278 mov r5, r0 | r5 = r0;
0x0008c27a cmp r0, 0 |
| if (r0 != 0) {
0x0008c27c bne 0x8c1f8 | goto label_3;
| }
0x0008c27e b 0x8c1f2 | goto label_4;
| label_13:
0x0008c280 ldr r0, [sp, 8] | r0 = x;
0x0008c282 cmp r0, 0 |
| if (r0 == 0) {
0x0008c284 beq 0x8c198 | goto label_5;
| }
0x0008c286 ldrb r2, [r6, 0x13] | r2 = *((r6 + 0x13));
0x0008c288 cmp r2, 7 |
| if (r2 > 7) {
0x0008c28a bhi 0x8c198 | goto label_5;
| }
0x0008c28c adds r1, r2, 1 | r1 = r2 + 1;
0x0008c28e adds r2, 0x26 | r2 += 0x26;
0x0008c290 strb r1, [r6, 0x13] | *((r6 + 0x13)) = r1;
0x0008c292 str.w r0, [r6, r2, lsl 2] | __asm ("str.w r0, [r6, r2, lsl 2]");
0x0008c296 b 0x8c198 | goto label_5;
| label_20:
0x0008c298 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0008c29c b 0x8c230 | goto label_6;
| label_21:
0x0008c29e mov r1, sb | r1 = sb;
0x0008c2a0 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008c2a4 b 0x8c19c | goto label_2;
| label_16:
0x0008c2a6 mov ip, lr |
| label_15:
0x0008c2a8 movs r3, 0 | r3 = 0;
0x0008c2aa mov r2, ip | r2 = ip;
0x0008c2ac str r3, [sp] | *(sp) = r3;
0x0008c2ae movs r1, 0xf | r1 = 0xf;
0x0008c2b0 mov r0, sb | r0 = sb;
0x0008c2b2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c2b6 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0008c2ba mov r7, r0 | r7 = r0;
0x0008c2bc ldr.w r4, [fp, 0x1c] | r4 = *(arg_1ch);
0x0008c2c0 cmp r3, 0 |
| if (r3 <= 0) {
0x0008c2c2 ble 0x8c2e2 | goto label_22;
| }
| label_17:
0x0008c2c4 movs r5, 0 | r5 = 0;
| do {
0x0008c2c6 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0008c2c8 mov r0, r6 | r0 = r6;
0x0008c2ca adds r5, 1 | r5++;
| if (r2 != 0) {
0x0008c2cc cbz r2, 0x8c2da |
0x0008c2ce ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0008c2d0 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0008c2d2 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x0008c2d6 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
| }
0x0008c2da cmp r3, r5 |
0x0008c2dc add.w r4, r4, 0x14 | r4 += 0x14;
0x0008c2e0 bgt 0x8c2c6 |
| } while (r3 > r5);
| label_22:
0x0008c2e2 movs r3, 0 | r3 = 0;
0x0008c2e4 strb.w r3, [fp] | *(fp) = r3;
0x0008c2e8 cbnz r7, 0x8c30e |
| while (r7 == r2) {
| label_18:
0x0008c2ea add sp, 0x24 |
0x0008c2ec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0008c2f0 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x0008c2f2 cbnz r3, 0x8c2fc |
0x0008c2f4 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0008c2f6 adds r3, 1 | r3++;
0x0008c2f8 str r3, [sp, 0x14] | var_14h = r3;
0x0008c2fa str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
| }
0x0008c2fc movs r3, 0 | r3 = 0;
0x0008c2fe ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008c300 str r3, [sp] | *(sp) = r3;
0x0008c302 movs r1, 0x50 | r1 = 0x50;
0x0008c304 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008c306 mov r0, sb | r0 = sb;
0x0008c308 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c30c b 0x8c0ce | goto label_7;
0x0008c30e ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008c312 subs r2, r3, 1 | r2 = r3 - 1;
0x0008c314 cmp r7, r2 |
0x0008c316 it eq |
| if (r7 != r2) {
0x0008c318 streq r7, [sb, 0x6c] | *((sb + 0x6c)) = r7;
| }
0x0008c31c beq 0x8c2ea |
| }
0x0008c31e ldr.w r1, [sb] | r1 = *(sb);
0x0008c322 bics.w r7, r7, r7, asr 32 | __asm ("bics.w r7, r7, r7, asr 32");
0x0008c326 it hs |
| if (r7 < r2) {
0x0008c328 movhs r7, r2 | r7 = r2;
| }
0x0008c32a ldrb.w r2, [r1, 0x57] | r2 = *((r1 + 0x57));
| if (r2 != 0) {
0x0008c32e cbnz r2, 0x8c344 | goto label_23;
| }
0x0008c330 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008c334 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x0008c338 add.w r2, r2, r7, lsl 3 | r2 += (r7 << 3);
| do {
0x0008c33c str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0008c33e add sp, 0x24 |
0x0008c340 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x0008c344 ldr r2, [pc, 4] |
0x0008c346 add r2, pc | r2 = 0x118696;
0x0008c348 adds r2, 4 | r2 += 4;
0x0008c34a b 0x8c33c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8c350 */
| #include <stdint.h>
|
; (fcn) fcn.0008c350 () | void fcn_0008c350 (int16_t arg_6h, int16_t arg_10h, int16_t arg_50h, arithmetic x, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008c350 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008c354 mov r4, r1 | r4 = r1;
0x0008c356 ldr r1, [r1] | r1 = *(r1);
0x0008c358 sub sp, 0x2c |
0x0008c35a mov r5, r0 | r5 = r0;
0x0008c35c mov fp, r3 |
0x0008c35e ldrb.w r8, [r4, 0x20] | r8 = *((r4 + 0x20));
0x0008c362 str r2, [sp, 0x10] | var_10h = r2;
0x0008c364 ldr r2, [r1] | r2 = *(r1);
0x0008c366 and r8, r8, 1 | r8 &= 1;
0x0008c36a ldr.w sl, [sp, 0x58] | sl = *(arg_58h);
0x0008c36e eor r0, r8, 1 | r0 = r8 ^ 1;
0x0008c372 ldr r3, [sp, 0x50] | r3 = *(arg_50h);
0x0008c374 str r2, [sp, 0x18] | var_18h = r2;
0x0008c376 adds r2, r0, r2 | r2 = r0 + r2;
0x0008c378 str r0, [sp, 0x1c] | var_1ch = r0;
0x0008c37a sub.w sb, fp, sl | sb = fp - sl;
0x0008c37e ldr r0, [sp, 0x54] | r0 = *(x);
0x0008c380 ldr r7, [r5, 8] | r7 = *((r5 + 8));
0x0008c382 add r2, r0 | r2 += r0;
0x0008c384 str r2, [sp, 0xc] | var_ch = r2;
0x0008c386 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0008c388 str r2, [sp, 8] | var_8h = r2;
0x0008c38a cmp.w sl, 0 |
| if (sl == 0) {
0x0008c38e bne 0x8c39c |
0x0008c390 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0008c392 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0008c394 add.w sb, r2, 1 | sb = r2 + 1;
0x0008c398 add r2, r0 | r2 += r0;
0x0008c39a str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
| }
0x0008c39c ldr r2, [sp, 0x10] | r2 = var_10h;
0x0008c39e ldr r6, [r2, 0xc] | r6 = *((r2 + 0xc));
0x0008c3a0 cmp r6, 0 |
| if (r6 == 0) {
0x0008c3a2 beq 0x8c480 | goto label_11;
| }
0x0008c3a4 adds r6, 1 | r6++;
| do {
0x0008c3a6 ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x0008c3a8 cmp r3, 0 |
0x0008c3aa mov r0, r5 | r0 = r5;
0x0008c3ac add.w r2, r2, -1 | r2 += -1;
0x0008c3b0 str r2, [r5, 0x38] | *((r5 + 0x38)) = r2;
0x0008c3b2 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0008c3b4 ite ne |
| if (r3 == 0) {
0x0008c3b6 movne r2, 5 | r2 = 5;
| }
| if (r3 != 0) {
0x0008c3b8 moveq r2, 1 | r2 = 1;
| }
0x0008c3ba str r2, [sp] | *(sp) = r2;
0x0008c3bc mov r2, sb | r2 = sb;
0x0008c3be bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
0x0008c3c2 cmp.w r8, 0 |
| if (r8 == 0) {
0x0008c3c6 beq.w 0x8c63c | goto label_12;
| }
| label_1:
0x0008c3ca ldr r2, [sp, 0x54] | r2 = *(x);
0x0008c3cc clz r3, sl | r3 &= sl;
0x0008c3d0 lsrs r3, r3, 5 | r3 >>= 5;
0x0008c3d2 cmp r2, 0 |
0x0008c3d4 it le |
| if (r2 > 0) {
0x0008c3d6 movle r3, 0 | r3 = 0;
| }
0x0008c3d8 cmp r3, 0 |
| if (r3 != 0) {
0x0008c3da bne.w 0x8c624 | goto label_13;
| }
0x0008c3de ldr r3, [sp, 8] | r3 = var_8h;
0x0008c3e0 cmp r3, 0 |
| if (r3 > 0) {
0x0008c3e2 bgt 0x8c486 | goto label_14;
| }
0x0008c3e4 add.w r8, sb, r3 | r8 = sb + r3;
0x0008c3e8 cmp r6, 0 |
| if (r6 != 0) {
0x0008c3ea bne.w 0x8c67a | goto label_15;
| }
| label_7:
0x0008c3ee ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008c3f0 ldr.w sl, [r4, 4] | sl = *((r4 + 4));
0x0008c3f4 ldr.w fp, [r5, 8] | fp = *((r5 + 8));
0x0008c3f6 add sp, 0x20 |
0x0008c3f8 adds r3, 1 | r3++;
0x0008c3fa mov r2, r3 | r2 = r3;
0x0008c3fc str r3, [sp, 0x14] | var_14h = r3;
0x0008c3fe ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0008c400 str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
| if (r3 != 0) {
0x0008c402 cbz r3, 0x8c416 |
0x0008c404 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0008c406 mov r0, r5 | r0 = r5;
0x0008c408 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x0008c40a ldr r2, [r3] | r2 = *(r3);
0x0008c40c ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0008c40e str r3, [sp] | *(sp) = r3;
0x0008c410 movs r3, 0 | r3 = 0;
0x0008c412 bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
| }
0x0008c416 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008c418 add.w r2, sb, sl | r2 = sb + sl;
0x0008c41c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008c41e mov r0, fp | r0 = fp;
0x0008c420 str r1, [sp] | *(sp) = r1;
0x0008c422 movs r1, 0x61 | r1 = 0x61;
0x0008c424 sub.w r3, r3, sl | r3 -= sl;
0x0008c428 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_6:
0x0008c42c ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_ch]");
0x0008c430 mov r0, r7 | r0 = r7;
0x0008c432 subs r3, r3, r2 | r3 -= r2;
0x0008c434 strd r8, r3, [sp] | __asm ("strd r8, r3, [sp]");
0x0008c438 ldrb.w r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x0008c43c ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008c43e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008c440 and r1, r1, 1 | r1 &= 1;
0x0008c444 subs r1, 0x76 | r1 -= 0x76;
0x0008c446 uxtb r1, r1 | r1 = (int8_t) r1;
0x0008c448 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
| if (r6 != 0) {
0x0008c44c cbz r6, 0x8c47a |
0x0008c44e ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0008c450 cmp r2, 0 |
| if (r2 == 0) {
0x0008c452 beq.w 0x8c676 | goto label_16;
| }
| label_5:
0x0008c456 ldr r3, [r7] | r3 = *(r7);
0x0008c458 cmp r6, 0 |
0x0008c45a it lt |
| if (r6 >= 0) {
0x0008c45c ldrlt r6, [r7, 0x6c] | r6 = *((r7 + 0x6c));
| }
0x0008c45e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008c462 it lt |
| if (r6 >= 0) {
0x0008c464 addlt r6, r6, -1 | r6 += -1;
| }
0x0008c468 cmp r3, 0 |
| if (r3 != 0) {
0x0008c46a bne.w 0x8c66e | goto label_17;
| }
0x0008c46e ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x0008c470 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008c474 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| label_4:
0x0008c478 str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
| label_0:
0x0008c47a add sp, 0x2c |
0x0008c47c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0008c480 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0008c482 ldr r6, [r2, 8] | r6 = *((r2 + 8));
0x0008c484 b 0x8c3a6 |
| } while (1);
| label_14:
0x0008c486 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008c488 ldr.w sl, [r4, 4] | sl = *((r4 + 4));
0x0008c48c ldr.w fp, [r5, 8] | fp = *((r5 + 8));
0x0008c490 adds r3, 1 | r3++;
0x0008c492 mov r2, r3 | r2 = r3;
0x0008c494 str r3, [sp, 0x14] | var_14h = r3;
0x0008c496 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0008c498 str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
| if (r3 != 0) {
0x0008c49a cbz r3, 0x8c4ae |
0x0008c49c ldr r2, [r3] | r2 = *(r3);
0x0008c49e mov r0, r5 | r0 = r5;
0x0008c4a0 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0008c4a2 str r3, [sp] | *(sp) = r3;
0x0008c4a4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008c4a6 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0008c4a8 movs r3, 0 | r3 = 0;
0x0008c4aa bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
| }
0x0008c4ae ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008c4b0 mov r0, fp | r0 = fp;
0x0008c4b2 add.w r2, sb, sl | r2 = sb + sl;
0x0008c4b6 movs r1, 0x61 | r1 = 0x61;
0x0008c4b8 str r3, [sp] | *(sp) = r3;
0x0008c4ba ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008c4bc sub.w r3, r3, sl | r3 -= sl;
0x0008c4c0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c4c4 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008c4c6 ldr.w fp, [r4, 4] | fp = *((r4 + 4));
0x0008c4ca adds r2, r3, 1 | r2 = r3 + 1;
0x0008c4cc add r3, fp | r3 += fp;
0x0008c4ce str r2, [sp, 0x20] | var_20h = r2;
0x0008c4d0 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0008c4d2 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008c4d6 bne.w 0x8c65c | goto label_18;
| }
0x0008c4da ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008c4dc mov r3, r8 | r3 = r8;
0x0008c4de movs r1, 0x10 | r1 = 0x10;
0x0008c4e0 mov r0, r7 | r0 = r7;
0x0008c4e2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008c4e6 add r2, sb | r2 += sb;
0x0008c4e8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c4ec str r0, [sp, 0x24] | var_24h = r0;
| label_3:
0x0008c4ee ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008c4f0 movs r1, 0x5a | r1 = 0x5a;
0x0008c4f2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008c4f4 mov r0, r7 | r0 = r7;
0x0008c4f6 str r3, [sp] | *(sp) = r3;
0x0008c4f8 mov r3, sb | r3 = sb;
0x0008c4fa bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c4fe ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0008c500 ldr r2, [r7] | r2 = *(r7);
0x0008c502 cmp r3, 0 |
0x0008c504 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008c508 itt lt |
| if (r3 >= 0) {
0x0008c50a ldrlt r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
| }
| if (r3 >= 0) {
0x0008c50c addlt r3, r3, -1 | r3 += -1;
| }
0x0008c510 cmp r2, 0 |
| if (r2 != 0) {
0x0008c512 bne.w 0x8c650 | goto label_19;
| }
0x0008c516 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x0008c518 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008c51c add.w sl, r2, r3, lsl 3 | sl = r2 + (r3 << 3);
| label_2:
0x0008c520 ldr r3, [r5] | r3 = *(r5);
0x0008c522 ldrb.w r8, [r3, 0x57] | r8 = *((r3 + 0x57));
0x0008c526 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008c52a bne 0x8c47a | goto label_0;
| }
0x0008c52c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c52e mov r1, r8 | r1 = r8;
0x0008c530 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008c532 sub.w r3, r3, fp | r3 -= fp;
0x0008c536 ldr.w fp, [sl, 0x10] | fp = *((sl + 0x10));
0x0008c53a add r3, r2 | r3 += r2;
0x0008c53c ldr r2, [sp, 0x54] | r2 = *(x);
0x0008c53e ldr.w r0, [fp, 0x10] | r0 = *(arg_10h);
0x0008c542 add r3, r2 | r3 += r2;
0x0008c544 ldrh.w r2, [fp, 6] | r2 = *(arg_6h);
0x0008c548 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
0x0008c54c blx 0x62ec | fcn_000062ec ();
0x0008c550 mvn r3, 7 | r3 = ~7;
0x0008c554 mov r2, fp | r2 = fp;
0x0008c556 mov.w r1, -1 | r1 = -1;
0x0008c55a mov r0, r7 | r0 = r7;
0x0008c55c bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0008c560 ldrh.w r2, [fp, 6] | r2 = *(arg_6h);
0x0008c564 mov r0, r5 | r0 = r5;
0x0008c566 ldrh.w r3, [fp, 8] | r3 = *(arg_58h);
0x0008c56a ldr r1, [r4] | r1 = *(r4);
0x0008c56c subs r3, r3, r2 | r3 -= r2;
0x0008c56e ldr r2, [sp, 8] | r2 = var_8h;
0x0008c570 subs r3, 1 | r3--;
0x0008c572 bl 0x46810 | fcn_00046810 (r0, r1, r2, r3);
0x0008c576 str.w r0, [sl, 0x10] | __asm ("str.w r0, [sl, 0x10]");
0x0008c57a mov r3, r8 | r3 = r8;
0x0008c57c ldr.w sl, [r7, 0x6c] | sl = *((r7 + 0x6c));
0x0008c580 movs r1, 0xd | r1 = 0xd;
0x0008c582 mov r0, r7 | r0 = r7;
0x0008c584 add.w r2, sl, 1 | r2 = sl + 1;
0x0008c588 str r2, [sp] | *(sp) = r2;
0x0008c58a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c58e str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008c592 movs r1, 9 | r1 = 9;
0x0008c594 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0008c596 mov r0, r7 | r0 = r7;
0x0008c598 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0008c59a subs r3, 1 | r3--;
0x0008c59c adds r2, 1 | r2++;
0x0008c59e str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x0008c5a0 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0008c5a2 str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
0x0008c5a4 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0008c5a6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c5aa str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008c5ae mov r3, r8 | r3 = r8;
0x0008c5b0 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008c5b2 movs r1, 0x92 | r1 = 0x92;
0x0008c5b4 mov r0, r7 | r0 = r7;
0x0008c5b6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c5ba cmp r6, 0 |
| if (r6 != 0) {
0x0008c5bc bne.w 0x8c6e0 | goto label_20;
| }
| label_9:
0x0008c5c0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008c5c2 ldr r1, [r7, 0x6c] | r1 = *((r7 + 0x6c));
0x0008c5c4 cmp r3, 0 |
0x0008c5c6 itt lt |
| if (r3 >= 0) {
0x0008c5c8 addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r3 < 0) {
0x0008c5cc str r3, [sp, 0x24] | var_24h = r3;
| }
0x0008c5ce ldr r3, [r7] | r3 = *(r7);
0x0008c5d0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008c5d4 cmp r3, 0 |
| if (r3 != 0) {
0x0008c5d6 bne 0x8c6d8 | goto label_21;
| }
0x0008c5d8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008c5da ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x0008c5dc add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008c5e0 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_8:
0x0008c5e4 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0008c5e6 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0008c5e8 movs r1, 0x4f | r1 = 0x4f;
0x0008c5ea ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008c5ec str r2, [sp] | *(sp) = r2;
0x0008c5ee mov r2, sb | r2 = sb;
0x0008c5f0 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0008c5f2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c5f6 ldr r2, [r7] | r2 = *(r7);
0x0008c5f8 cmp.w sl, 0 |
0x0008c5fc ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x0008c5fe ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008c602 it lt |
| if (sl >= 0) {
0x0008c604 addlt sl, r3, -1 | sl = r3 + -1;
| }
0x0008c608 cmp r2, 0 |
| if (r2 != 0) {
0x0008c60a bne 0x8c6f2 | goto label_22;
| }
0x0008c60c ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x0008c60e add.w sl, sl, sl, lsl 1 | sl += (sl << 1);
0x0008c612 add.w r2, r2, sl, lsl 3 | r2 += (sl << 3);
| label_10:
0x0008c616 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0008c618 cmp r6, 0 |
| if (r6 == 0) {
0x0008c61a bne 0x8c680 |
0x0008c61c ldr r3, [sp, 8] | r3 = var_8h;
0x0008c61e add.w r8, sb, r3 | r8 = sb + r3;
0x0008c622 b 0x8c6ce | goto label_23;
| label_13:
0x0008c624 ldr r3, [sp, 0x54] | r3 = *(x);
0x0008c626 mov r2, fp | r2 = fp;
0x0008c628 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008c62a str r3, [sp] | *(sp) = r3;
0x0008c62c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c62e ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0008c630 add r3, sb | r3 += sb;
0x0008c632 add r3, r1 | r3 += r1;
0x0008c634 movs r1, 0x4f | r1 = 0x4f;
0x0008c636 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c638 invalid |
| label_12:
0x0008c63c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c63e movs r1, 0x7e | r1 = 0x7e;
0x0008c640 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008c644 mov r0, r7 | r0 = r7;
0x0008c646 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008c648 add r3, sb | r3 += sb;
0x0008c64a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c64e b 0x8c3ca | goto label_1;
| label_19:
0x0008c650 ldr.w sl, [pc, 0xa8] |
0x0008c654 add sl, pc | sl = 0x118d54;
0x0008c656 add.w sl, sl, 4 | sl += 4;
0x0008c65a b 0x8c520 | goto label_2;
| label_18:
0x0008c65c movs r3, 0 | r3 = 0;
0x0008c65e movs r1, 0x78 | r1 = 0x78;
0x0008c660 str r3, [sp] | *(sp) = r3;
0x0008c662 mov r0, r7 | r0 = r7;
0x0008c664 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008c666 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c66a str r0, [sp, 0x24] | var_24h = r0;
0x0008c66c b 0x8c4ee | goto label_3;
| label_17:
0x0008c66e ldr r3, [pc, 0x90] |
0x0008c670 add r3, pc | r3 = 0x118d76;
0x0008c672 adds r3, 4 | r3 += 4;
0x0008c674 b 0x8c478 | goto label_4;
| label_16:
0x0008c676 ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x0008c678 b 0x8c456 | goto label_5;
| label_15:
0x0008c67a ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x0008c67c movs r2, 0 | r2 = 0;
0x0008c67e str r2, [sp, 0x14] | var_14h = r2;
| }
0x0008c680 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x0008c684 mov r2, r6 | r2 = r6;
0x0008c686 movs r6, 0 | r6 = 0;
0x0008c688 adds r3, 4 | r3 += 4;
0x0008c68a movs r1, 0x3b | r1 = 0x3b;
0x0008c68c str r6, [sp] | *(sp) = r6;
0x0008c68e mov r0, r7 | r0 = r7;
0x0008c690 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c694 mov r3, r6 | r3 = r6;
0x0008c696 mov r2, sl | r2 = sl;
0x0008c698 movs r1, 0x1f | r1 = 0x1f;
0x0008c69a str r6, [sp] | *(sp) = r6;
0x0008c69c mov r0, r7 | r0 = r7;
0x0008c69e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c6a2 ldr r2, [sp, 8] | r2 = var_8h;
0x0008c6a4 movs r1, 0x27 | r1 = 0x27;
0x0008c6a6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c6a8 mov r0, r7 | r0 = r7;
0x0008c6aa add.w r8, sb, r2 | r8 = sb + r2;
0x0008c6ae subs r3, r3, r2 | r3 -= r2;
0x0008c6b0 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008c6b4 mov r2, sl | r2 = sl;
0x0008c6b6 str r3, [sp, 4] | var_4h = r3;
0x0008c6b8 mov r3, r6 | r3 = r6;
0x0008c6ba bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008c6be mov r3, r6 | r3 = r6;
0x0008c6c0 str r6, [sp] | *(sp) = r6;
0x0008c6c2 mov r2, sl | r2 = sl;
0x0008c6c4 mov r6, r0 | r6 = r0;
0x0008c6c6 movs r1, 0x82 | r1 = 0x82;
0x0008c6c8 mov r0, r7 | r0 = r7;
0x0008c6ca bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c6cc invalid |
| label_23:
0x0008c6ce ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008c6d0 cmp r3, 0 |
| if (r3 != 0) {
0x0008c6d2 bne.w 0x8c42c | goto label_6;
| }
0x0008c6d6 b 0x8c3ee | goto label_7;
| label_21:
0x0008c6d8 ldr r3, [pc, 0x28] |
0x0008c6da add r3, pc | r3 = 0x118de2;
0x0008c6dc adds r3, 4 | r3 += 4;
0x0008c6de b 0x8c5e4 | goto label_8;
| label_20:
0x0008c6e0 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008c6e4 mov r2, r6 | r2 = r6;
0x0008c6e6 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0008c6e8 movs r1, 0x10 | r1 = 0x10;
0x0008c6ea mov r0, r7 | r0 = r7;
0x0008c6ec bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c6f0 b 0x8c5c0 | goto label_9;
| label_22:
0x0008c6f2 ldr r2, [pc, 0x14] |
0x0008c6f4 add r2, pc | r2 = 0x118e02;
0x0008c6f6 adds r2, 4 | r2 += 4;
0x0008c6f8 b 0x8c616 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8c70c */
| #include <stdint.h>
|
; (fcn) fcn.0008c70c () | void fcn_0008c70c (int16_t arg_1h, int16_t arg_70h, int16_t arg_74h, int16_t arg_78h, int16_t arg_7ch, int16_t arg_80h, int16_t arg_84h, int16_t arg_88h, int16_t arg_8ch, int16_t arg_90h, int16_t arg_94h, int16_t arg_98h, int16_t arg_a0h, int16_t arg_a4h, int16_t arg_a8h, int16_t arg_ach, int16_t arg_b4h, int16_t arg_b8h, int16_t arg_bch, int16_t arg_c0h, int16_t arg_c4h, int16_t arg_c8h, int16_t arg_cch, int16_t arg_d0h, int16_t arg_d4h, arithmetic arg_dch, int16_t arg_e0h, int16_t arg_fch, int16_t arg_104h, int16_t arg_108h, int16_t arg_130h, int16_t arg_14ch, int16_t arg_150h, int16_t arg_164h, int16_t arg_174h, int16_t arg_2e0h, arithmetic arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_8h;
| int16_t var_54h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h;
| arithmetic x;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h_2;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| arithmetic var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008c70c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008c710 mov sb, r2 | sb = r2;
0x0008c712 sub sp, 0x4c |
0x0008c714 ldr.w r2, [pc, 0x9c4] |
0x0008c718 mov r8, r0 | r8 = r0;
0x0008c71a mov r5, r1 | r5 = r1;
0x0008c71c str r3, [sp, 0x14] | x = r3;
0x0008c71e ldr r6, [sp, 0x70] | r6 = *(arg_70h);
0x0008c720 add r2, pc | r2 = 0x119800;
0x0008c722 ldr.w r3, [pc, 0x9bc] | r3 = *(0x8d0e2);
0x0008c726 ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x0008c728 str r6, [sp, 0x20] | var_20h = r6;
0x0008c72a ldr r3, [r2, r3] |
0x0008c72c ldr r3, [r3] | r3 = imp.atan;
0x0008c72e str r3, [sp, 0x44] | var_44h = r3;
0x0008c730 mov.w r3, 0 | r3 = 0;
0x0008c734 ldrd sl, r3, [sp, 0x74] | __asm ("ldrd sl, r3, [arg_74h]");
0x0008c738 str r3, [sp, 0x28] | var_28h = r3;
0x0008c73a ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x0008c73c str r3, [sp, 0x30] | var_30h = r3;
0x0008c73e ldrb.w r3, [sl] | r3 = *(sl);
0x0008c742 str r3, [sp, 0x24] | var_24h = r3;
0x0008c744 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0008c748 str r3, [sp, 0x2c] | var_2ch = r3;
0x0008c74a cmp r6, 0 |
| if (r6 == 0) {
0x0008c74c beq.w 0x8ca22 | goto label_87;
| }
0x0008c750 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008c752 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0008c754 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008c756 ldr r3, [sp, 0x14] | r3 = x;
0x0008c758 cmp r3, 0 |
| if (r3 == 0) {
0x0008c75a beq 0x8c81e | goto label_88;
| }
0x0008c75c ldr r3, [sp, 0x14] | r3 = x;
0x0008c75e ldr r3, [r3] | r3 = *(r3);
0x0008c760 cmp r3, 0 |
| if (r3 == 0) {
0x0008c762 beq 0x8c81e | goto label_88;
| }
0x0008c764 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008c766 clz r2, r2 | r2 &= r2;
0x0008c76a lsrs r2, r2, 5 | r2 >>= 5;
| label_4:
0x0008c76c ldr.w r1, [sl, 0xc] | r1 = *((sl + 0xc));
0x0008c770 ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0008c774 str r1, [sp, 0x18] | var_18h = r1;
0x0008c776 ldr.w r6, [fp] | r6 = *(fp);
0x0008c77a cmp r1, 0 |
| if (r1 == 0) {
0x0008c77c beq.w 0x8c9dc | goto label_89;
| }
0x0008c780 ldr.w r1, [r8, 0x2c] | r1 = *((r8 + 0x2c));
| label_6:
0x0008c784 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c786 ldr r7, [sp, 0x18] | r7 = var_18h;
0x0008c788 add r3, r6 | r3 += r6;
0x0008c78a cmp r3, r1 |
0x0008c78c mov.w r3, 0 | r3 = 0;
0x0008c790 it gt |
| if (r3 <= r1) {
0x0008c792 addgt r1, r1, r6 | r1 += r6;
| }
0x0008c794 str r3, [sp, 0x18] | var_18h = r3;
0x0008c796 it gt |
| if (r3 <= r1) {
0x0008c798 strgt r1, [r8, 0x2c] | *((r8 + 0x2c)) = r1;
| }
| label_2:
0x0008c79c cmp.w sb, 0 |
0x0008c7a0 str.w r6, [sl, 0x10] | __asm ("str.w r6, [sl, 0x10]");
| if (sb < 0) {
0x0008c7a4 blt 0x8c88a | goto label_90;
| }
0x0008c7a6 cmp r6, 0 |
| if (r6 <= 0) {
0x0008c7a8 ble 0x8c7ea | goto label_91;
| }
0x0008c7aa ldr.w r3, [pc, 0x938] |
0x0008c7ae mov.w fp, 0 |
0x0008c7b2 str.w r8, [sp, 0x34] | __asm ("str.w r8, [var_34h]");
0x0008c7b6 mov r8, fp | r8 = fp;
0x0008c7b8 add r3, pc | r3 = 0x1198a2;
0x0008c7ba mov fp, r3 |
| do {
0x0008c7bc add.w r2, r7, r8 | r2 = r7 + r8;
0x0008c7c0 mov r3, r8 | r3 = r8;
0x0008c7c2 movs r1, 0x5e | r1 = 0x5e;
0x0008c7c4 str r2, [sp] | *(sp) = r2;
0x0008c7c6 mov r0, r4 | r0 = r4;
0x0008c7c8 mov r2, sb | r2 = sb;
0x0008c7ca bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008c7ce ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x0008c7d0 mov r1, fp | r1 = fp;
0x0008c7d2 mov r0, r4 | r0 = r4;
0x0008c7d4 add.w r2, r2, r8, lsl 4 | r2 += (r8 << 4);
0x0008c7d8 add.w r8, r8, 1 | r8++;
0x0008c7dc ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x0008c7de bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008c7e2 cmp r8, r6 |
0x0008c7e4 bne 0x8c7bc |
| } while (r8 != r6);
0x0008c7e6 ldr.w r8, [sp, 0x34] | r8 = var_34h;
| label_91:
0x0008c7ea ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008c7ec mov sb, r7 | sb = r7;
0x0008c7ee cmp r3, 0 |
| if (r3 != 0) {
0x0008c7f0 bne.w 0x8c95e | goto label_92;
| }
| label_0:
0x0008c7f4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008c7f6 subs r3, 1 | r3--;
0x0008c7f8 cmp r3, 0xe |
| if (r3 <= 0xe) {
0x0008c7fa bhi 0x8c862 |
| /* switch table (16 cases) at 0x8c800 */
0x0008c7fc tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_88:
0x0008c81e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008c820 cmp r3, 0 |
| if (r3 != 0) {
0x0008c822 bne.w 0x8cd94 | goto label_93;
| }
0x0008c824 strh r7, [r6, 0x14] | *((r6 + 0x14)) = r7;
| label_3:
0x0008c826 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0008c828 cmp r2, 0 |
| if (r2 > 0) {
0x0008c82a bgt.w 0x8ca3c | goto label_94;
| }
0x0008c82e ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0008c832 ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0008c836 ldr.w r1, [r8, 0x2c] | r1 = *((r8 + 0x2c));
0x0008c83a mov r2, r3 | r2 = r3;
0x0008c83c str r3, [sp, 0x18] | var_18h = r3;
0x0008c83e ldr.w r6, [fp] | r6 = *(fp);
0x0008c842 mov r3, r1 | r3 = r1;
0x0008c844 cmp r2, 0 |
| if (r2 != 0) {
0x0008c846 bne.w 0x8cad4 | goto label_95;
| }
0x0008c84a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008c84c str r2, [sp, 0x1c] | var_1ch = r2;
0x0008c84e str r2, [sp, 0x14] | x = r2;
0x0008c850 movs r2, 1 | r2 = 1;
0x0008c852 b 0x8c9f6 | goto label_5;
0x0008c854 invalid |
0x0008c856 mov r3, r7 | r3 = r7;
0x0008c858 movs r1, 0x8c | r1 = 0x8c;
0x0008c85a mov r0, r4 | r0 = r4;
0x0008c85c str r6, [sp] | *(sp) = r6;
0x0008c85e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
| label_7:
0x0008c862 ldr r3, [sp, 0x14] | r3 = x;
0x0008c864 cmp r3, 0 |
| if (r3 == 0) {
0x0008c866 beq.w 0x8ca0a | goto label_8;
| }
0x0008c868 strh r0, [r2, 6] | *((r2 + 6)) = r0;
| label_1:
0x0008c86a invalid |
0x0008c86c cmp r0, 0x7c |
0x0008c86e ldr.w r3, [pc, 0x870] | r3 = *(0x8d0e2);
0x0008c872 add r2, pc | r2 += pc;
0x0008c874 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0008c876 ldr r2, [r3] | r2 = *(0x8d0e2);
0x0008c878 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008c87a eors r2, r3 | r2 ^= r3;
0x0008c87c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008c880 bne.w 0x8d0d8 | goto label_96;
| }
0x0008c884 add sp, 0x4c |
0x0008c886 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_90:
0x0008c88a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008c88c cmp r3, 3 |
| if (r3 == 3) {
0x0008c88e beq.w 0x8cd7e | goto label_97;
| }
0x0008c892 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0008c894 ldr r0, [sp, 0x14] | r0 = x;
0x0008c896 sub.w r3, r1, 9 | r3 = r1 - 9;
0x0008c89a cmp r0, 0 |
0x0008c89c ite eq |
| if (r0 != 0) {
0x0008c89e moveq r2, 0 | r2 = 0;
| }
| if (r0 == 0) {
0x0008c8a0 andne r2, r2, 1 | r2 &= 1;
| }
0x0008c8a4 cmp r1, 0xd |
0x0008c8a6 it ne |
| if (r1 != 0xd) {
0x0008c8a8 cmpne r3, 1 | __asm ("cmpne r3, 1");
| }
0x0008c8aa ite ls |
| if (r1 > 0xd) {
0x0008c8ac movls ip, 1 |
| }
| if (r1 > 0xd) {
0x0008c8b0 mov.w ip, 0 |
| }
0x0008c8b2 lsrs r0, r0, 0x10 | r0 >>= 0x10;
0x0008c8b4 cmp r2, 0 |
| if (r2 == 0) {
0x0008c8b6 beq 0x8c93e | goto label_98;
| }
0x0008c8b8 and r3, r1, 0xfd | r3 = r1 & 0xfd;
0x0008c8bc cmp r3, 0xc |
| if (r3 == 0xc) {
0x0008c8be beq 0x8c93e | goto label_98;
| }
0x0008c8c0 ldrd r1, r3, [r0] | __asm ("ldrd r1, r3, [r0]");
0x0008c8c4 orr ip, ip, 0xc |
0x0008c8c8 ldr r0, [r1] | r0 = *(r1);
0x0008c8ca cmp r3, r0 |
0x0008c8cc itt lt |
| if (r3 >= r0) {
0x0008c8ce addlt r1, r1, r3, lsl 4 | r1 += (r3 << 4);
| }
| if (r3 < r0) {
0x0008c8d2 rsb.w lr, r3, 1 | lr = 1 - r3;
| }
| if (r3 >= r0) {
0x0008c8d6 bge 0x8c8f0 | goto label_99;
| }
| do {
0x0008c8d8 ldrh r2, [r1, 0x14] | r2 = *((r1 + 0x14));
| if (r2 != 0) {
0x0008c8da cbz r2, 0x8c8e8 |
0x0008c8dc add.w r2, fp, r2, lsl 4 | r2 = fp + (r2 << 4);
0x0008c8e0 add.w sb, lr, r3 | sb = lr + r3;
0x0008c8e4 strh.w sb, [r2, 4] | *((r2 + 4)) = sb;
| }
0x0008c8e8 adds r3, 1 | r3++;
0x0008c8ea adds r1, 0x10 | r1 += 0x10;
0x0008c8ec cmp r3, r0 |
0x0008c8ee bne 0x8c8d8 |
| } while (r3 != r0);
| label_99:
0x0008c8f0 cmp r6, 0 |
0x0008c8f2 itt le |
| if (r6 > 0) {
0x0008c8f4 movle r1, r6 | r1 = r6;
| }
| if (r6 > 0) {
0x0008c8f6 movle sb, r7 | sb = r7;
| }
| if (r6 <= 0) {
0x0008c8f8 ble 0x8c914 | goto label_100;
| }
0x0008c8fa mov r2, fp | r2 = fp;
0x0008c8fc mov sb, r7 | sb = r7;
0x0008c8fe mov r1, r6 | r1 = r6;
0x0008c900 movs r3, 0 | r3 = 0;
| do {
0x0008c902 ldrh r0, [r2, 0x14] | r0 = *((r2 + 0x14));
| if (r0 != 0) {
0x0008c904 cbz r0, 0x8c90c |
0x0008c906 subs r1, 1 | r1--;
0x0008c908 mov.w sb, 0 | sb = 0;
| }
0x0008c90c adds r3, 1 | r3++;
0x0008c90e adds r2, 0x10 | r2 += 0x10;
0x0008c910 cmp r3, r6 |
0x0008c912 bne 0x8c902 |
| } while (r3 != r6);
| label_100:
0x0008c914 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0008c916 str r7, [sp, 0x3c] | var_3ch = r7;
0x0008c918 strb.w ip, [sp, 0x40] | var_40h = ip;
0x0008c91c cmp r3, 0 |
| if (r3 == 0) {
0x0008c91e beq.w 0x8d048 | goto label_101;
| }
0x0008c922 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008c924 cmp r3, 0 |
| if (r3 <= 0) {
0x0008c926 ble.w 0x8d048 | goto label_101;
| }
0x0008c92a ldr r2, [sp, 0x14] | r2 = x;
0x0008c92c add r3, sp, 0x3c | r3 += var_3ch;
0x0008c92e str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
0x0008c930 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008c932 cmp r3, 0 |
| if (r3 != 0) {
0x0008c934 bne.w 0x8ce08 | goto label_102;
| }
0x0008c938 mov sb, r3 | sb = r3;
0x0008c93a mov r6, r1 | r6 = r1;
0x0008c93c b 0x8c7f4 | goto label_0;
| label_98:
0x0008c93e mov sb, r7 | sb = r7;
0x0008c940 str r7, [sp, 0x3c] | var_3ch = r7;
0x0008c942 strb.w ip, [sp, 0x40] | var_40h = ip;
| label_22:
0x0008c946 movs r3, 0 | r3 = 0;
0x0008c948 mov r1, fp | r1 = fp;
0x0008c94a mov r2, r7 | r2 = r7;
0x0008c94c mov r0, r8 | r0 = r8;
0x0008c94e str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0008c952 bl 0x8affc | fcn_0008affc (r0, r1, r2, r3, r4, r5);
0x0008c956 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008c958 cmp r3, 0 |
| if (r3 == 0) {
0x0008c95a beq.w 0x8c7f4 | goto label_0;
| }
| label_92:
0x0008c95e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008c960 mov r0, r8 | r0 = r8;
0x0008c962 str r7, [sp, 4] | var_4h = r7;
0x0008c964 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0008c966 ldrb.w fp, [r2, 1] | fp = *((r2 + 1));
0x0008c96a str r3, [sp] | *(sp) = r3;
0x0008c96c mov r1, fp | r1 = fp;
0x0008c96e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008c970 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008c972 bl 0x466d4 | fcn_000466d4 (r0, r1, r2, r3, r4, r5);
0x0008c976 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008c978 mov r2, r0 | r2 = r0;
0x0008c97a mov r1, fp | r1 = fp;
0x0008c97c mov r0, r8 | r0 = r8;
0x0008c97e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008c980 bl 0x35584 | fcn_00035584 (r0, r1, r2, r3, r4);
0x0008c984 ldr r3, [sp, 0x14] | r3 = x;
0x0008c986 cmp r3, 0 |
| if (r3 == 0) {
0x0008c988 beq.w 0x8cc04 | goto label_103;
| }
| label_11:
0x0008c98c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008c98e subs r3, 1 | r3--;
0x0008c990 cmp r3, 0xe |
| if (r3 > 0xe) {
0x0008c992 bhi.w 0x8c86a | goto label_1;
| }
0x0008c996 adr r2, 8 | r2 = 8;
0x0008c998 ldr.w r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0008c99c add r2, r3 | r2 += r3;
| /* switch table (15 cases) at 0x8c9a0 */
0x0008c99e bx r2 | return uint32_t (*r2)() ();
| label_89:
0x0008c9dc ldr r1, [r3] | r1 = *(r3);
0x0008c9de ldr r3, [sp, 0x14] | r3 = x;
0x0008c9e0 str r1, [sp, 0x18] | var_18h = r1;
0x0008c9e2 ldrb.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008c9e6 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x0008c9e8 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008c9ec itt pl |
| if (r3 < r3) {
0x0008c9ee addpl r1, 1 | r1++;
| }
| if (r3 < r3) {
0x0008c9f0 strpl r1, [sp, 0x18] | var_18h = r1;
| }
0x0008c9f2 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0008c9f4 add r3, r1 | r3 += r1;
| label_5:
0x0008c9f6 adds r7, r3, 1 | r7 = r3 + 1;
0x0008c9f8 add r3, r6 | r3 += r6;
0x0008c9fa str.w r7, [sl, 0xc] | __asm ("str.w r7, [sl, 0xc]");
0x0008c9fe str.w r3, [r8, 0x2c] | __asm ("str.w r3, [r8, 0x2c]");
0x0008ca02 b 0x8c79c | goto label_2;
0x0008ca04 ldr r1, [sp, 0x14] | r1 = x;
0x0008ca06 cmp r1, 0 |
| if (r1 != 0) {
0x0008ca08 bne 0x8caf2 | goto label_9;
| }
| label_8:
0x0008ca0a invalid |
0x0008ca0c cmp r2, 0 |
| if (r2 == 0) {
0x0008ca0e beq.w 0x8c86a | goto label_1;
| }
0x0008ca12 movs r5, 0 | r5 = 0;
0x0008ca14 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008ca16 movs r1, 0x3c | r1 = 0x3c;
0x0008ca18 mov r0, r4 | r0 = r4;
0x0008ca1a str r5, [sp] | *(sp) = r5;
0x0008ca1c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ca20 b 0x8c86a | goto label_1;
| label_87:
0x0008ca22 ldr r3, [sp, 0x14] | r3 = x;
0x0008ca24 cmp r3, 0 |
| if (r3 == 0) {
0x0008ca26 beq.w 0x8c826 | goto label_3;
| }
0x0008ca2a ldr r3, [sp, 0x14] | r3 = x;
0x0008ca2c ldr r3, [r3] | r3 = *(r3);
0x0008ca2e cmp r3, 0 |
| if (r3 == 0) {
0x0008ca30 beq.w 0x8c826 | goto label_3;
| }
0x0008ca34 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0008ca36 movs r2, 1 | r2 = 1;
0x0008ca38 str r1, [sp, 0x1c] | var_1ch = r1;
0x0008ca3a b 0x8c76c | goto label_4;
| label_94:
0x0008ca3c movs r7, 1 | r7 = 1;
0x0008ca3e ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008ca40 movs r1, 0x31 | r1 = 0x31;
0x0008ca42 mov r0, r4 | r0 = r4;
0x0008ca44 str r7, [sp] | *(sp) = r7;
0x0008ca46 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ca4a ldr.w r1, [pc, 0x6a0] |
0x0008ca4e mov r0, r4 | r0 = r4;
0x0008ca50 add r1, pc | r1 = 0x119b42;
0x0008ca52 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008ca56 ldr.w r1, [sl, 0xc] | r1 = *((sl + 0xc));
0x0008ca5a mov r2, r7 | r2 = r7;
0x0008ca5c ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0008ca60 str r1, [sp, 0x18] | var_18h = r1;
0x0008ca62 ldr.w r6, [fp] | r6 = *(fp);
0x0008ca66 cmp r1, 0 |
| if (r1 == 0) {
0x0008ca68 bne 0x8cade |
0x0008ca6a ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008ca6e str r1, [sp, 0x1c] | var_1ch = r1;
0x0008ca70 str r1, [sp, 0x14] | x = r1;
0x0008ca72 b 0x8c9f6 | goto label_5;
0x0008ca74 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008ca76 mov r0, r8 | r0 = r8;
0x0008ca78 add.w fp, r3, 1 |
0x0008ca7c mov r1, fp | r1 = fp;
0x0008ca7e bl 0x27744 | fcn_00027744 (r0, r1);
0x0008ca82 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008ca84 mov r3, r6 | r3 = r6;
0x0008ca86 mov sl, r0 | sl = r0;
0x0008ca88 movs r1, 0x61 | r1 = 0x61;
0x0008ca8a add r2, r0 | r2 += r0;
0x0008ca8c mov r0, r4 | r0 = r4;
0x0008ca8e str r2, [sp, 0x1c] | var_1ch = r2;
0x0008ca90 str r2, [sp] | *(sp) = r2;
0x0008ca92 mov r2, r7 | r2 = r7;
0x0008ca94 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ca98 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008ca9a cmp r3, 5 |
| if (r3 == 5) {
0x0008ca9c beq.w 0x8cf48 | goto label_104;
| }
| label_15:
0x0008caa0 ldr r1, [sp, 0x14] | r1 = x;
0x0008caa2 cmp r1, 0 |
| if (r1 == 0) {
0x0008caa4 beq.w 0x8ce70 | goto label_105;
| }
0x0008caa8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008caaa movs r0, 1 | r0 = 1;
0x0008caac str r0, [sp, 4] | var_4h = r0;
0x0008caae mov r2, r5 | r2 = r5;
0x0008cab0 mov r0, r8 | r0 = r8;
0x0008cab2 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cab6 str r3, [sp, 8] | var_8h_2 = r3;
0x0008cab8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008caba bl 0x8c350 | fcn_0008c350 (r0, r1, r2, r3, r4, r5, r6);
0x0008cabe cmp.w fp, 1 |
| if (fp == 1) {
0x0008cac2 beq.w 0x8ce50 | goto label_106;
| }
0x0008cac6 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x0008caca cmp fp, r3 |
0x0008cacc it gt |
| if (fp > r3) {
0x0008cace strdgt fp, sl, [r8, 0x1c] | __asm ("strdgt fp, sl, [r8, 0x1c]");
| }
0x0008cad2 b 0x8c86a | goto label_1;
| label_95:
0x0008cad4 movs r3, 0 | r3 = 0;
0x0008cad6 movs r2, 1 | r2 = 1;
0x0008cad8 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008cada str r3, [sp, 0x14] | x = r3;
0x0008cadc b 0x8c784 | goto label_6;
| }
0x0008cade movs r3, 0 | r3 = 0;
0x0008cae0 ldr.w r1, [r8, 0x2c] | r1 = *((r8 + 0x2c));
0x0008cae4 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008cae6 str r3, [sp, 0x14] | x = r3;
0x0008cae8 b 0x8c784 | goto label_6;
0x0008caea ldr r1, [sp, 0x14] | r1 = x;
0x0008caec cmp r1, 0 |
| if (r1 == 0) {
0x0008caee beq.w 0x8ce36 | goto label_107;
| }
| label_9:
0x0008caf2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008caf4 mov r2, r5 | r2 = r5;
0x0008caf6 mov r0, r8 | r0 = r8;
0x0008caf8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cafc strd r6, r3, [sp, 4] | __asm ("strd r6, r3, [sp, 4]");
0x0008cb00 mov r3, r7 | r3 = r7;
0x0008cb02 bl 0x8c350 | fcn_0008c350 (r0, r1, r2, r3, r4, r5, r6);
0x0008cb06 b 0x8c86a | goto label_1;
0x0008cb08 ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x0008cb0c mov r2, r3 | r2 = r3;
0x0008cb0e str r3, [sp, 0x34] | var_34h = r3;
0x0008cb10 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cb14 ldr.w sl, [r2] | sl = *(r2);
0x0008cb18 cmp r3, 0 |
| if (r3 == 0) {
0x0008cb1a beq.w 0x8cee4 | goto label_108;
| }
0x0008cb1e subs r3, 1 | r3--;
0x0008cb20 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008cb22 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008cb26 adds r3, 0x26 | r3 += 0x26;
0x0008cb28 ldr.w r3, [r8, r3, lsl 2] | offset_1 = r3 << 2;
| r3 = *((r8 + offset_1));
0x0008cb2c str r3, [sp, 0x1c] | var_1ch = r3;
| label_13:
0x0008cb2e add.w r3, sl, 2 | r3 = sl + 2;
0x0008cb32 mov r0, r8 | r0 = r8;
0x0008cb34 mov r1, r3 | r1 = r3;
0x0008cb36 str r3, [sp, 0x18] | var_18h = r3;
0x0008cb38 bl 0x27744 | r0 = fcn_00027744 (r0, r1);
0x0008cb3c add.w r3, sl, r0 | r3 = sl + r0;
0x0008cb40 mov fp, r0 |
0x0008cb42 add.w sb, r3, 1 | sb = r3 + 1;
0x0008cb46 str r3, [sp, 0x28] | var_28h = r3;
0x0008cb48 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008cb4a cmp r3, 6 |
| if (r3 == 6) {
0x0008cb4c beq.w 0x8cf74 | goto label_109;
| }
0x0008cb50 mov r3, r6 | r3 = r6;
0x0008cb52 mov r2, r7 | r2 = r7;
0x0008cb54 movs r1, 0x61 | r1 = 0x61;
0x0008cb56 mov r0, r4 | r0 = r4;
0x0008cb58 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cb5c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cb60 cmp.w sl, 0 |
0x0008cb64 itt gt |
| if (sl <= 0) {
0x0008cb66 movgt r3, 0 | r3 = 0;
| }
| if (sl <= 0) {
0x0008cb68 strgt r3, [sp, 0x20] | var_20h = r3;
| }
| if (sl <= 0) {
0x0008cb6a ble.w 0x8d080 | goto label_110;
| }
| label_16:
0x0008cb6e ldr.w sb, [sp, 0x34] | sb = var_34h;
0x0008cb72 movs r6, 0 | r6 = 0;
| do {
0x0008cb74 ldrh.w r2, [sb, 0x14] | r2 = *((sb + 0x14));
0x0008cb78 movs r3, 0 | r3 = 0;
0x0008cb7a str r3, [sp] | *(sp) = r3;
0x0008cb7c movs r1, 0x51 | r1 = 0x51;
0x0008cb7e add.w r3, fp, r6 | r3 = fp + r6;
0x0008cb82 mov r0, r4 | r0 = r4;
0x0008cb84 add r2, r7 | r2 += r7;
0x0008cb86 adds r6, 1 | r6++;
0x0008cb88 subs r2, 1 | r2--;
0x0008cb8a add.w sb, sb, 0x10 | sb += 0x10;
0x0008cb8e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cb92 cmp sl, r6 |
0x0008cb94 bgt 0x8cb74 |
| } while (sl > r6);
| label_17:
0x0008cb96 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x0008cb9a movs r2, 0 | r2 = 0;
0x0008cb9c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008cb9e movs r1, 0x7e | r1 = 0x7e;
0x0008cba0 str r2, [sp] | *(sp) = r2;
0x0008cba2 mov r0, r4 | r0 = r4;
0x0008cba4 mov r2, sb | r2 = sb;
0x0008cba6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cbaa ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0008cbac mov r2, fp | r2 = fp;
0x0008cbae ldr r7, [sp, 0x18] | r7 = var_18h;
0x0008cbb0 movs r1, 0x61 | r1 = 0x61;
0x0008cbb2 mov r0, r4 | r0 = r4;
0x0008cbb4 str r6, [sp] | *(sp) = r6;
0x0008cbb6 mov r3, r7 | r3 = r7;
0x0008cbb8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cbbc mov r3, r6 | r3 = r6;
0x0008cbbe mov r2, sb | r2 = sb;
0x0008cbc0 movs r1, 0x8a | r1 = 0x8a;
0x0008cbc2 mov r0, r4 | r0 = r4;
0x0008cbc4 strd fp, r7, [sp] | __asm ("strd fp, r7, [sp]");
0x0008cbc8 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008cbcc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008cbce cmp r3, 0 |
| if (r3 != 0) {
0x0008cbd0 bne.w 0x8cef2 | goto label_111;
| }
| label_14:
0x0008cbd4 ldr r1, [sp, 0x1c] | r1 = var_1ch;
| if (r1 != 0) {
0x0008cbd6 cbz r1, 0x8cbec |
0x0008cbd8 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cbdc cmp r3, 7 |
0x0008cbde itttt ls |
| if (r3 > 7) {
0x0008cbe0 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008cbe2 addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008cbe4 strbls r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
| }
| if (r3 > 7) {
0x0008cbe8 str.w r1, [r8, r3, lsl 2] | __asm ("str.w r1, [r8, r3, lsl 2]");
| goto label_112;
| }
| }
| label_112:
0x0008cbec ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008cbee cmp r3, 1 |
| if (r3 == 1) {
0x0008cbf0 beq.w 0x8cf28 | goto label_113;
| }
0x0008cbf4 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x0008cbf8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008cbfa cmp r2, r3 |
0x0008cbfc it gt |
| if (r2 > r3) {
0x0008cbfe strdgt r2, fp, [r8, 0x1c] | __asm ("strdgt r2, fp, [r8, 0x1c]");
| }
0x0008cc02 b 0x8c862 | goto label_7;
| label_103:
0x0008cc04 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0008cc06 cmp r2, 0 |
| if (r2 > 0) {
0x0008cc08 bgt.w 0x8cdee | goto label_114;
| }
| label_10:
0x0008cc0c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008cc0e subs r3, 1 | r3--;
0x0008cc10 cmp r3, 0xe |
| if (r3 > 0xe) {
0x0008cc12 bhi.w 0x8ca0a | goto label_8;
| }
0x0008cc16 adr r2, 8 | r2 = 8;
0x0008cc18 ldr.w r3, [r2, r3, lsl 2] | offset_2 = r3 << 2;
| r3 = *((r2 + offset_2));
0x0008cc1c add r2, r3 | r2 += r3;
| /* switch table (15 cases) at 0x8cc20 */
0x0008cc1e bx r2 | return uint32_t (*r2)() ();
0x0008cc5c ldr r1, [sp, 0x14] | r1 = x;
0x0008cc5e cmp r1, 0 |
| if (r1 != 0) {
0x0008cc60 bne.w 0x8caf2 | goto label_9;
| }
0x0008cc64 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cc68 cmp r3, 0 |
| if (r3 == 0) {
0x0008cc6a beq.w 0x8d01a | goto label_115;
| }
0x0008cc6e subs r3, 1 | r3--;
0x0008cc70 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008cc72 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008cc76 adds r3, 0x26 | r3 += 0x26;
0x0008cc78 ldr.w sb, [r8, r3, lsl 2] | offset_3 = r3 << 2;
| sb = *((r8 + offset_3));
0x0008cc7a str r0, [sp, 0x8c] | *((sp + 0x8c)) = r0;
| label_20:
0x0008cc7c ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x0008cc80 mov r2, r7 | r2 = r7;
0x0008cc82 movs r1, 0x61 | r1 = 0x61;
0x0008cc84 mov r0, r4 | r0 = r4;
0x0008cc86 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cc8a strd r3, r6, [sp, 4] | __asm ("strd r3, r6, [sp, 4]");
0x0008cc8e mov r3, r6 | r3 = r6;
0x0008cc90 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0008cc94 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cc96 mov r3, sb | r3 = sb;
0x0008cc98 movs r1, 0x8a | r1 = 0x8a;
0x0008cc9a mov r0, r4 | r0 = r4;
0x0008cc9c strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x0008cca0 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008cca4 cmp.w sb, 0 |
| if (sb == 0) {
0x0008cca8 beq.w 0x8ca0a | goto label_8;
| }
0x0008ccac ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008ccb0 cmp r3, 7 |
| if (r3 > 7) {
0x0008ccb2 bhi.w 0x8ca0a | goto label_8;
| }
0x0008ccb6 adds r2, r3, 1 | r2 = r3 + 1;
0x0008ccb8 adds r3, 0x26 | r3 += 0x26;
0x0008ccba strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008ccbe str.w sb, [r8, r3, lsl 2] | __asm ("str.w sb, [r8, r3, lsl 2]");
0x0008ccc2 b 0x8ca0a | goto label_8;
0x0008ccc4 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008ccc8 cmp r3, 0 |
| if (r3 == 0) {
0x0008ccca beq.w 0x8ced6 | goto label_116;
| }
0x0008ccce subs r3, 1 | r3--;
0x0008ccd0 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008ccd2 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008ccd6 adds r3, 0x26 | r3 += 0x26;
0x0008ccd8 ldr.w sb, [r8, r3, lsl 2] | offset_4 = r3 << 2;
| sb = *((r8 + offset_4));
| label_12:
0x0008ccdc mov r3, r6 | r3 = r6;
0x0008ccde mov r2, r7 | r2 = r7;
0x0008cce0 movs r1, 0x61 | r1 = 0x61;
0x0008cce2 mov r0, r4 | r0 = r4;
0x0008cce4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cce8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ccec ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008ccee mov r3, sb | r3 = sb;
0x0008ccf0 movs r1, 0x8a | r1 = 0x8a;
0x0008ccf2 mov r0, r4 | r0 = r4;
0x0008ccf4 strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x0008ccf8 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008ccfc cmp.w sb, 0 |
| if (sb == 0) {
0x0008cd00 beq.w 0x8c862 | goto label_7;
| }
0x0008cd04 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cd08 cmp r3, 7 |
| if (r3 > 7) {
0x0008cd0a bhi.w 0x8c862 | goto label_7;
| }
0x0008cd0e adds r2, r3, 1 | r2 = r3 + 1;
0x0008cd10 adds r3, 0x26 | r3 += 0x26;
0x0008cd12 strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008cd16 str.w sb, [r8, r3, lsl 2] | __asm ("str.w sb, [r8, r3, lsl 2]");
0x0008cd1a b 0x8c862 | goto label_7;
0x0008cd1c ldr r1, [sp, 0x14] | r1 = x;
0x0008cd1e cmp r1, 0 |
| if (r1 != 0) {
0x0008cd20 bne.w 0x8caf2 | goto label_9;
| }
0x0008cd24 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cd28 ldr.w sl, [sl, 8] | sl = *((sl + 8));
0x0008cd2c cmp r3, 0 |
| if (r3 == 0) {
0x0008cd2e beq.w 0x8cfe2 | goto label_117;
| }
0x0008cd32 subs r3, 1 | r3--;
0x0008cd34 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008cd36 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008cd3a adds r3, 0x26 | r3 += 0x26;
0x0008cd3c ldr.w sb, [r8, r3, lsl 2] | offset_5 = r3 << 2;
| sb = *((r8 + offset_5));
| label_19:
0x0008cd40 movs r3, 0 | r3 = 0;
0x0008cd42 mov r2, r7 | r2 = r7;
0x0008cd44 movs r1, 0x32 | r1 = 0x32;
0x0008cd46 str r3, [sp] | *(sp) = r3;
0x0008cd48 mov r0, r4 | r0 = r4;
0x0008cd4a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008cd4c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cd50 lsr.w r2, sl, 0x1f | r2 = sl >> 0x1f;
0x0008cd54 movs r1, 0x61 | r1 = 0x61;
0x0008cd56 mov r0, r4 | r0 = r4;
0x0008cd58 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cd5c subs r3, r6, r2 | r3 = r6 - r2;
0x0008cd5e add r2, r7 | r2 += r7;
0x0008cd60 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cd64 cmp.w sl, 0 |
| if (sl < 0) {
0x0008cd68 blt.w 0x8cfca | goto label_118;
| }
0x0008cd6c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cd6e mov r3, sb | r3 = sb;
0x0008cd70 movs r1, 0x8a | r1 = 0x8a;
0x0008cd72 mov r0, r4 | r0 = r4;
0x0008cd74 strd r7, sl, [sp] | __asm ("strd r7, sl, [sp]");
0x0008cd78 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008cd7c b 0x8ca0a | goto label_8;
| label_97:
0x0008cd7e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008cd80 cbnz r3, 0x8cdba |
| while (r2 <= 0) {
0x0008cd82 movs r2, 0 | r2 = 0;
0x0008cd84 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008cd86 str r2, [sp] | *(sp) = r2;
0x0008cd88 movs r1, 0x47 | r1 = 0x47;
0x0008cd8a movs r2, 1 | r2 = 1;
0x0008cd8c mov r0, r4 | r0 = r4;
0x0008cd8e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cd92 b 0x8c862 | goto label_7;
| label_93:
0x0008cd94 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0008cd98 ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0008cd9c ldr.w r1, [r8, 0x2c] | r1 = *((r8 + 0x2c));
0x0008cda0 mov r2, r3 | r2 = r3;
0x0008cda2 str r3, [sp, 0x18] | var_18h = r3;
0x0008cda4 ldr.w r6, [fp] | r6 = *(fp);
0x0008cda8 mov r3, r1 | r3 = r1;
| if (r2 != 0) {
0x0008cdaa cbz r2, 0x8cdb4 |
0x0008cdac movs r3, 0 | r3 = 0;
0x0008cdae mov r2, r3 | r2 = r3;
0x0008cdb0 str r3, [sp, 0x14] | x = r3;
0x0008cdb2 b 0x8c784 | goto label_6;
| }
0x0008cdb4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008cdb6 str r2, [sp, 0x14] | x = r2;
0x0008cdb8 b 0x8c9f6 | goto label_5;
0x0008cdba ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008cdbc mov r0, r8 | r0 = r8;
0x0008cdbe strd fp, r7, [sp] | __asm ("strd fp, r7, [sp]");
0x0008cdc2 ldrb.w sb, [r3, 1] | sb = *((r3 + 1));
0x0008cdc6 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0008cdc8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008cdca mov r1, sb | r1 = sb;
0x0008cdcc bl 0x466d4 | fcn_000466d4 (r0, r1, r2, r3, r4, r5);
0x0008cdd0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008cdd2 mov r2, r0 | r2 = r0;
0x0008cdd4 mov r1, sb | r1 = sb;
0x0008cdd6 mov r0, r8 | r0 = r8;
0x0008cdd8 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008cdda bl 0x35584 | fcn_00035584 (r0, r1, r2, r3, r4);
0x0008cdde ldr r3, [sp, 0x14] | r3 = x;
0x0008cde0 cmp r3, 0 |
| if (r3 != 0) {
0x0008cde2 bne.w 0x8cff0 | goto label_119;
| }
0x0008cde6 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0008cde8 cmp r2, 0 |
0x0008cdea ble 0x8cd82 |
| }
0x0008cdec mov sb, r7 | sb = r7;
| label_114:
0x0008cdee movs r1, 1 | r1 = 1;
0x0008cdf0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008cdf2 str r1, [sp] | *(sp) = r1;
0x0008cdf4 mov r0, r4 | r0 = r4;
0x0008cdf6 movs r1, 0x31 | r1 = 0x31;
0x0008cdf8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cdfc ldr r1, [pc, 0x2f0] |
0x0008cdfe mov r0, r4 | r0 = r4;
0x0008ce00 add r1, pc | r1 = 0x119ef4;
0x0008ce02 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008ce06 b 0x8cc0c | goto label_10;
| label_102:
0x0008ce08 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008ce0a mov r6, r1 | r6 = r1;
0x0008ce0c str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008ce10 mov r0, r8 | r0 = r8;
0x0008ce12 str r7, [sp, 4] | var_4h = r7;
0x0008ce14 mov.w sb, 0 | sb = 0;
0x0008ce18 ldrb.w fp, [r2, 1] | fp = *((r2 + 1));
0x0008ce1c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008ce1e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008ce20 mov r1, fp | r1 = fp;
0x0008ce22 bl 0x466d4 | fcn_000466d4 (r0, r1, r2, r3, r4, r5);
0x0008ce26 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008ce28 mov r2, r0 | r2 = r0;
0x0008ce2a mov r1, fp | r1 = fp;
0x0008ce2c mov r0, r8 | r0 = r8;
0x0008ce2e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0008ce30 bl 0x35584 | fcn_00035584 (r0, r1, r2, r3, r4);
0x0008ce34 b 0x8c98c | goto label_11;
| label_107:
0x0008ce36 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008ce38 cmp r3, 0xd |
| if (r3 == 0xd) {
0x0008ce3a beq.w 0x8d034 | goto label_120;
| }
0x0008ce3e ldr r3, [sp, 0x14] | r3 = x;
0x0008ce40 mov r2, r7 | r2 = r7;
0x0008ce42 movs r1, 0x54 | r1 = 0x54;
0x0008ce44 mov r0, r4 | r0 = r4;
0x0008ce46 str r3, [sp] | *(sp) = r3;
0x0008ce48 mov r3, r6 | r3 = r6;
0x0008ce4a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ce4e b 0x8ca0a | goto label_8;
| label_106:
0x0008ce50 cmp.w sl, 0 |
| if (sl == 0) {
0x0008ce54 beq.w 0x8c86a | goto label_1;
| }
0x0008ce58 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008ce5c cmp r3, 7 |
| if (r3 > 7) {
0x0008ce5e bhi.w 0x8c86a | goto label_1;
| }
0x0008ce62 adds r2, r3, 1 | r2 = r3 + 1;
0x0008ce64 adds r3, 0x26 | r3 += 0x26;
0x0008ce66 strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008ce6a str.w sl, [r8, r3, lsl 2] | __asm ("str.w sl, [r8, r3, lsl 2]");
0x0008ce6e b 0x8c86a | goto label_1;
| label_105:
0x0008ce70 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008ce74 cmp r3, 0 |
| if (r3 == 0) {
0x0008ce76 beq.w 0x8d028 | goto label_121;
| }
0x0008ce7a subs r3, 1 | r3--;
0x0008ce7c uxtb r3, r3 | r3 = (int8_t) r3;
0x0008ce7e strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008ce82 adds r3, 0x26 | r3 += 0x26;
0x0008ce84 ldr.w r6, [r8, r3, lsl 2] | offset_6 = r3 << 2;
| r6 = *((r8 + offset_6));
| label_21:
0x0008ce88 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x0008ce8a movs r3, 0 | r3 = 0;
0x0008ce8c movs r1, 0x7f | r1 = 0x7f;
0x0008ce8e str r3, [sp] | *(sp) = r3;
0x0008ce90 mov r0, r4 | r0 = r4;
0x0008ce92 mov r3, r6 | r3 = r6;
0x0008ce94 mov r2, r7 | r2 = r7;
0x0008ce96 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ce9a mov r3, sl | r3 = sl;
0x0008ce9c mov r2, r7 | r2 = r7;
0x0008ce9e movs r1, 0x80 | r1 = 0x80;
0x0008cea0 mov r0, r4 | r0 = r4;
0x0008cea2 str r6, [sp] | *(sp) = r6;
0x0008cea4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cea8 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0008ceaa cmp r3, 0 |
| if (r3 > 0) {
0x0008ceac ble 0x8cebe |
0x0008ceae ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0008ceb0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008ceb4 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0008ceb8 movs r3, 8 | r3 = 8;
0x0008ceba strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
| if (r6 != 0) {
0x0008cebe cbnz r6, 0x8cf16 | goto label_122;
| }
0x0008cec0 cmp.w fp, 1 |
| if (fp == 1) {
0x0008cec4 beq.w 0x8d0b8 | goto label_123;
| }
| do {
| label_23:
0x0008cec8 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x0008cecc cmp fp, r3 |
0x0008cece it gt |
| if (fp > r3) {
0x0008ced0 strdgt fp, sl, [r8, 0x1c] | __asm ("strdgt fp, sl, [r8, 0x1c]");
| }
0x0008ced4 b 0x8ca0a | goto label_8;
| label_116:
0x0008ced6 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008ceda add.w sb, r3, 1 | sb = r3 + 1;
0x0008cede str.w sb, [r8, 0x2c] | __asm ("str.w sb, [r8, 0x2c]");
0x0008cee2 b 0x8ccdc | goto label_12;
| label_108:
0x0008cee4 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008cee8 adds r3, 1 | r3++;
0x0008ceea str r3, [sp, 0x1c] | var_1ch = r3;
0x0008ceec str.w r3, [r8, 0x2c] | __asm ("str.w r3, [r8, 0x2c]");
0x0008cef0 b 0x8cb2e | goto label_13;
| label_111:
0x0008cef2 ldr r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x0008cef4 itt lt |
| if (r3 >= 1) {
0x0008cef6 addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r3 < 1) {
0x0008cefa str r3, [sp, 0x20] | var_20h = r3;
| }
0x0008cefc ldr r3, [r4] | r3 = *(r4);
0x0008cefe ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008cf02 cmp r3, 0 |
| if (r3 != 0) {
0x0008cf04 bne 0x8cfda | goto label_124;
| }
0x0008cf06 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008cf08 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0008cf0a add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008cf0e add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_18:
0x0008cf12 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0008cf14 b 0x8cbd4 | goto label_14;
| label_122:
0x0008cf16 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cf1a cmp r3, 7 |
| if (r3 < 7) {
0x0008cf1c bls.w 0x8d04c | goto label_125;
| }
0x0008cf20 cmp.w fp, 1 |
0x0008cf24 bne 0x8cec8 |
| } while (fp != 1);
0x0008cf26 b 0x8ca0a | goto label_8;
| label_113:
0x0008cf28 cmp.w fp, 0 |
| if (fp == 0) {
0x0008cf2c beq.w 0x8c862 | goto label_7;
| }
0x0008cf30 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008cf34 cmp r3, 7 |
| if (r3 > 7) {
0x0008cf36 bhi.w 0x8c862 | goto label_7;
| }
0x0008cf3a adds r2, r3, 1 | r2 = r3 + 1;
0x0008cf3c adds r3, 0x26 | r3 += 0x26;
0x0008cf3e strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008cf42 str.w fp, [r8, r3, lsl 2] | __asm ("str.w fp, [r8, r3, lsl 2]");
0x0008cf46 b 0x8c862 | goto label_7;
| label_104:
0x0008cf48 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0008cf4a movs r1, 0 | r1 = 0;
0x0008cf4c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cf4e mov r0, r4 | r0 = r4;
0x0008cf50 str r1, [sp, 4] | var_4h = r1;
0x0008cf52 movs r1, 0x1c | r1 = 0x1c;
0x0008cf54 adds r3, 4 | r3 += 4;
0x0008cf56 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0008cf5a adds r2, 1 | r2++;
0x0008cf5c str r2, [sp, 0x20] | var_20h = r2;
0x0008cf5e bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008cf60 invalid |
0x0008cf64 mov r3, sl | r3 = sl;
0x0008cf66 movs r1, 0x8a | r1 = 0x8a;
0x0008cf68 mov r0, r4 | r0 = r4;
0x0008cf6a strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x0008cf6e bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008cf72 b 0x8caa0 | goto label_15;
| label_109:
0x0008cf74 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008cf76 movs r1, 0x1c | r1 = 0x1c;
0x0008cf78 mov r0, r4 | r0 = r4;
0x0008cf7a strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x0008cf7e adds r2, r3, 1 | r2 = r3 + 1;
0x0008cf80 movs r3, 0 | r3 = 0;
0x0008cf82 str r2, [sp, 0x24] | var_24h = r2;
0x0008cf84 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008cf88 mov r3, r6 | r3 = r6;
0x0008cf8a mov r2, r7 | r2 = r7;
0x0008cf8c movs r1, 0x61 | r1 = 0x61;
0x0008cf8e str r0, [sp, 0x20] | var_20h = r0;
0x0008cf90 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008cf94 mov r0, r4 | r0 = r4;
0x0008cf96 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cf9a movs r1, 0 | r1 = 0;
0x0008cf9c mov r3, sb | r3 = sb;
0x0008cf9e str r1, [sp] | *(sp) = r1;
0x0008cfa0 mov r0, r4 | r0 = r4;
0x0008cfa2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008cfa4 movs r1, 0x8a | r1 = 0x8a;
0x0008cfa6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cfaa ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0008cfac cmp r3, 0 |
| if (r3 > 0) {
0x0008cfae ble 0x8cfc0 |
0x0008cfb0 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0008cfb2 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008cfb6 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0008cfba movs r3, 0x10 | r3 = 0x10;
0x0008cfbc strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0008cfc0 cmp.w sl, 0 |
| if (sl > 0) {
0x0008cfc4 bgt.w 0x8cb6e | goto label_16;
| }
0x0008cfc8 b 0x8cb96 | goto label_17;
| label_118:
0x0008cfca ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cfcc mov r3, sb | r3 = sb;
0x0008cfce movs r1, 0x80 | r1 = 0x80;
0x0008cfd0 mov r0, r4 | r0 = r4;
0x0008cfd2 str r7, [sp] | *(sp) = r7;
0x0008cfd4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008cfd8 b 0x8ca0a | goto label_8;
| label_124:
0x0008cfda ldr r3, [pc, 0x118] |
0x0008cfdc add r3, pc | r3 = 0x11a0d6;
0x0008cfde adds r3, 4 | r3 += 4;
0x0008cfe0 b 0x8cf12 | goto label_18;
| label_117:
0x0008cfe2 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008cfe6 add.w sb, r3, 1 | sb = r3 + 1;
0x0008cfea str.w sb, [r8, 0x2c] | __asm ("str.w sb, [r8, 0x2c]");
0x0008cfee b 0x8cd40 | goto label_19;
| label_119:
0x0008cff0 ldr r2, [pc, 0x104] |
0x0008cff2 ldr r3, [pc, 0xec] | r3 = *(0x8d0e2);
0x0008cff4 add r2, pc | r2 = 0x11a0f0;
0x0008cff6 ldr r3, [r2, r3] | r3 = imp.atan;
0x0008cff8 ldr r2, [r3] | r2 = imp.atan;
0x0008cffa ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008cffc eors r2, r3 | r2 ^= r3;
0x0008cffe mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008d002 bne 0x8d0d8 | goto label_96;
| }
0x0008d004 movs r5, 0 | r5 = 0;
0x0008d006 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008d008 movs r2, 1 | r2 = 1;
0x0008d00a movs r1, 0x47 | r1 = 0x47;
0x0008d00c mov r0, r4 | r0 = r4;
0x0008d00e str r5, [sp, 0x70] | *(arg_70h) = r5;
0x0008d010 add sp, 0x4c |
0x0008d012 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008d016 b.w 0x41a7c | void (*0x41a7c)() ();
| label_115:
0x0008d01a ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008d01e add.w sb, r3, 1 | sb = r3 + 1;
0x0008d022 str.w sb, [r8, 0x2c] | __asm ("str.w sb, [r8, 0x2c]");
0x0008d026 b 0x8cc7c | goto label_20;
| label_121:
0x0008d028 ldr.w r6, [r8, 0x2c] | r6 = *((r8 + 0x2c));
0x0008d02c adds r6, 1 | r6++;
0x0008d02e str.w r6, [r8, 0x2c] | __asm ("str.w r6, [r8, 0x2c]");
0x0008d032 b 0x8ce88 | goto label_21;
| label_120:
0x0008d034 ldr r3, [sp, 0x14] | r3 = x;
0x0008d036 movs r1, 0xb | r1 = 0xb;
0x0008d038 ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0008d03c mov r0, r4 | r0 = r4;
0x0008d03e str r3, [sp] | *(sp) = r3;
0x0008d040 movs r3, 0 | r3 = 0;
0x0008d042 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d046 b 0x8ca0a | goto label_8;
| label_101:
0x0008d048 mov r6, r1 | r6 = r1;
0x0008d04a b 0x8c946 | goto label_22;
| label_125:
0x0008d04c adds r2, r3, 1 | r2 = r3 + 1;
0x0008d04e cmp.w fp, 1 |
0x0008d052 uxtb r2, r2 | r2 = (int8_t) r2;
0x0008d054 add.w r1, r3, 0x26 | r1 = r3 + 0x26;
0x0008d058 strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008d05c str.w r6, [r8, r1, lsl 2] | __asm ("str.w r6, [r8, r1, lsl 2]");
| if (fp != 1) {
0x0008d060 bne.w 0x8cec8 | goto label_23;
| }
0x0008d064 cmp.w sl, 0 |
| if (sl == 0) {
0x0008d068 beq.w 0x8ca0a | goto label_8;
| }
0x0008d06c cmp r2, 8 |
| if (r2 == 8) {
0x0008d06e beq.w 0x8ca0a | goto label_8;
| }
0x0008d072 adds r3, 2 | r3 += 2;
0x0008d074 adds r2, 0x26 | r2 += 0x26;
0x0008d076 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0008d07a str.w sl, [r8, r2, lsl 2] | __asm ("str.w sl, [r8, r2, lsl 2]");
0x0008d07e b 0x8ca0a | goto label_8;
| label_110:
0x0008d080 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x0008d084 movs r2, 0 | r2 = 0;
0x0008d086 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008d088 movs r1, 0x7e | r1 = 0x7e;
0x0008d08a str r2, [sp] | *(sp) = r2;
0x0008d08c mov r0, r4 | r0 = r4;
0x0008d08e mov r2, sb | r2 = sb;
0x0008d090 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d094 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0008d096 mov r2, fp | r2 = fp;
0x0008d098 ldr r7, [sp, 0x18] | r7 = var_18h;
0x0008d09a movs r1, 0x61 | r1 = 0x61;
0x0008d09c mov r0, r4 | r0 = r4;
0x0008d09e str r6, [sp] | *(sp) = r6;
0x0008d0a0 mov r3, r7 | r3 = r7;
0x0008d0a2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d0a6 mov r2, sb | r2 = sb;
0x0008d0a8 mov r3, r6 | r3 = r6;
0x0008d0aa movs r1, 0x8a | r1 = 0x8a;
0x0008d0ac mov r0, r4 | r0 = r4;
0x0008d0ae strd fp, r7, [sp] | __asm ("strd fp, r7, [sp]");
0x0008d0b2 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008d0b6 b 0x8cbd4 | goto label_14;
| label_123:
0x0008d0b8 cmp.w sl, 0 |
| if (sl == 0) {
0x0008d0bc beq.w 0x8ca0a | goto label_8;
| }
0x0008d0c0 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0008d0c4 cmp r3, 7 |
| if (r3 > 7) {
0x0008d0c6 bhi.w 0x8ca0a | goto label_8;
| }
0x0008d0ca adds r2, r3, 1 | r2 = r3 + 1;
0x0008d0cc adds r3, 0x26 | r3 += 0x26;
0x0008d0ce strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0008d0d2 str.w sl, [r8, r3, lsl 2] | __asm ("str.w sl, [r8, r3, lsl 2]");
0x0008d0d6 b 0x8ca0a | goto label_8;
| label_96:
0x0008d0d8 blx 0x6430 | fcn_00006430 ();
0x0008d0dc bvs 0x8d1d0 | __asm ("bvs 0x8d1d0");
0x0008d0de movs r5, r0 | r5 = r0;
0x0008d0e0 lsls r4, r6, 8 | r4 = r6 << 8;
0x0008d0e2 movs r0, r0 |
0x0008d0e4 add r1, sp, 0x2e0 | r1 += arg_2e0h;
0x0008d0e6 movs r3, r0 | r3 = r0;
| if (r3 >= r0) {
0x0008d0e8 bpl 0x8d138 | void (*0x8d138)() ();
| }
0x0008d0ea movs r5, r0 | r5 = r0;
0x0008d0ec mov r8, pc | r8 = pc;
0x0008d0ee movs r4, r0 | r4 = r0;
0x0008d0f0 muls r0, r1, r0 | r0 = r1 * r0;
0x0008d0f2 movs r4, r0 | r4 = r0;
0x0008d0f4 bics r0, r0, 0x850000 | __asm ("bics r0, r0, 0x850000");
0x0008d0f8 ldm r5, {r2, r5, r7} | r2 = *(r5);
| r5 = *((r5 + 4));
| r7 = *((r5 + 8));
0x0008d0fa movs r5, r0 | r5 = r0;
| label_62:
0x0009e51c ldr r3, [r2] | r3 = *(r2);
0x0009e51e movs r1, 0x12 | r1 = 0x12;
0x0009e520 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009e522 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009e524 ldr r2, [r4] | r2 = *(r4);
0x0009e526 str r3, [sp] | *(sp) = r3;
0x0009e528 movs r3, 0 | r3 = 0;
0x0009e52a bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0009e52e cmp r0, 0 |
0x0009e530 beq 0x9e5a2 |
| while (r0 != 0) {
| label_24:
0x0009e532 movs r3, 0 | r3 = 0;
0x0009e534 str r3, [sp, 0x30] | var_30h = r3;
| label_41:
0x0009e536 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x0009e538 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009e53a mov r0, r4 | r0 = r4;
0x0009e53c bl 0x30a7c | fcn_00030a7c (r0, r1);
0x0009e540 ldr r3, [sp, 0x54] | r3 = var_54h_2;
| if (r3 != 0) {
0x0009e542 cbz r3, 0x9e54c |
0x0009e544 mov r1, r3 | r1 = r3;
0x0009e546 mov r0, r4 | r0 = r4;
0x0009e548 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x0009e54c ldr r3, [sp, 0x4c] | r3 = var_4ch;
| if (r3 != 0) {
0x0009e54e cbz r3, 0x9e558 |
| label_44:
0x0009e550 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0009e552 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009e554 bl 0x30f4c | fcn_00030f4c (r0, r1);
| }
0x0009e558 ldr r3, [sp, 0x40] | r3 = var_40h;
| if (r3 != 0) {
0x0009e55a cbz r3, 0x9e566 |
0x0009e55c ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009e55e movs r2, 1 | r2 = 1;
0x0009e560 mov r1, r3 | r1 = r3;
0x0009e562 bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
| }
0x0009e566 ldr r3, [sp, 0x48] | r3 = var_48h;
| if (r3 != 0) {
0x0009e568 cbz r3, 0x9e572 |
0x0009e56a ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009e56c mov r1, r3 | r1 = r3;
0x0009e56e bl 0x2f0c8 | fcn_0002f0c8 (r0, r1);
| }
0x0009e572 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009e574 cmp r3, 0 |
| if (r3 == 0) {
0x0009e576 beq.w 0x9eaba | goto label_61;
| }
0x0009e57a ldr.w r2, [pc, 0xa0c] |
0x0009e57e ldr.w r3, [pc, 0xa04] | r3 = *(0x9ef86);
0x0009e582 add r2, pc | r2 = 0x13d510;
0x0009e584 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009e586 ldr r2, [r3] | r2 = imp.atan;
0x0009e588 ldr r3, [sp, 0x174] | r3 = *(arg_174h);
0x0009e58a eors r2, r3 | r2 ^= r3;
0x0009e58c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009e590 bne.w 0x9f442 | goto label_126;
| }
0x0009e594 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009e596 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009e598 add sp, 0x17c |
0x0009e59a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009e59e b.w 0x2d144 | void (*0x2d144)() ();
0x0009e5a2 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0009e5a4 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0009e5a6 str r2, [sp, 0x70] | *(arg_70h) = r2;
0x0009e5a8 cmp r3, 0 |
| if (r3 == 0) {
0x0009e5aa beq.w 0x9eaa0 | goto label_127;
| }
| label_27:
0x0009e5ae ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009e5b0 ldrb.w r3, [r3, 0x97] | r3 = *((r3 + 0x97));
0x0009e5b4 cmp r3, 0 |
| if (r3 != 0) {
0x0009e5b6 bne.w 0x9eab2 | goto label_128;
| }
0x0009e5ba add r2, sp, 0xbc | r2 += arg_bch;
0x0009e5bc ldrd r0, r1, [sp, 0x2c] | __asm ("ldrd r0, r1, [var_2ch]");
0x0009e5c0 str r2, [sp] | *(sp) = r2;
0x0009e5c2 movs r2, 0x7f | r2 = 0x7f;
0x0009e5c4 bl 0x45008 | fcn_00045008 (r0, r1, r2, r3, r4);
0x0009e5c8 str r0, [sp, 0x84] | *(arg_84h) = r0;
| label_28:
0x0009e5ca ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009e5cc ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0009e5ce ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0009e5d2 mov r1, r4 | r1 = r4;
0x0009e5d4 mov r0, r5 | r0 = r5;
0x0009e5d6 str r3, [sp, 0x94] | *(arg_94h) = r3;
0x0009e5d8 bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x0009e5dc cmp r0, 0 |
0x0009e5de bne 0x9e532 |
| }
0x0009e5e0 ldr r3, [sp, 0xbc] | r3 = *(arg_bch);
0x0009e5e2 mov r1, r4 | r1 = r4;
0x0009e5e4 mov r0, r5 | r0 = r5;
0x0009e5e6 mov r2, r3 | r2 = r3;
0x0009e5e8 str r3, [sp, 0xa4] | *(arg_a4h) = r3;
0x0009e5ea bl 0x45110 | r0 = fcn_00045110 (r0, r1, r2);
0x0009e5ee cmp r0, 0 |
| if (r0 != 0) {
0x0009e5f0 bne 0x9e532 | goto label_24;
| }
0x0009e5f2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009e5f4 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0009e5f6 str r2, [sp, 0x38] | var_38h = r2;
0x0009e5f8 cmp r2, 0 |
| if (r2 == 0) {
0x0009e5fa beq.w 0x9eb16 | goto label_129;
| }
| label_31:
0x0009e5fe ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009e600 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
0x0009e602 cmp r3, 0 |
| if (r3 == 0) {
0x0009e604 beq.w 0x9eb06 | goto label_130;
| }
| label_30:
0x0009e608 ldr r5, [sp, 0x84] | r5 = *(arg_84h);
0x0009e60a mov r2, fp | r2 = fp;
0x0009e60c ldr r4, [sp, 0x40] | r4 = var_40h;
0x0009e60e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009e610 orrs.w r3, r5, r4 | r3 = r5 | r4;
0x0009e614 ite ne |
| if (r3 == r5) {
0x0009e616 movne r1, 1 | r1 = 1;
| }
| if (r3 != r5) {
0x0009e618 moveq r1, 0 | r1 = 0;
| }
0x0009e61a bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x0009e61e ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009e620 orr.w r2, r3, r5 | r2 = r3 | r5;
0x0009e624 subs r3, r4, 0 | r3 = r4 - 0;
0x0009e626 it ne |
| if (r3 == r4) {
0x0009e628 movne r3, 1 | r3 = 1;
| }
0x0009e62a cmp r2, 0 |
0x0009e62c it ne |
| if (r2 == 0) {
0x0009e62e movne r3, 0 | r3 = 0;
| }
0x0009e630 cmp r3, 0 |
| if (r3 != 0) {
0x0009e632 bne.w 0x9eba8 | goto label_131;
| }
| label_37:
0x0009e636 ldr r5, [sp, 0x30] | r5 = var_30h;
0x0009e638 mov r1, fp | r1 = fp;
0x0009e63a ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0009e63c mov r2, r5 | r2 = r5;
0x0009e63e mov r0, r4 | r0 = r4;
0x0009e640 bl 0x3b088 | fcn_0003b088 (r0, r1, r2);
0x0009e644 ldrsh.w r6, [r5, 0x22] | r6 = *((r5 + 0x22));
0x0009e648 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0009e64a str r0, [sp, 0x8c] | *(arg_8ch) = r0;
0x0009e64c adds r3, r6, 1 | r3 = r6 + 1;
0x0009e64e add r3, r2 | r3 += r2;
0x0009e650 adds r0, r2, 1 | r0 = r2 + 1;
0x0009e652 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0009e654 ldrb.w r1, [r5, 0x2b] | r1 = *((r5 + 0x2b));
0x0009e656 asrs r3, r5, 0x20 | r3 = r5 >> 0x20;
0x0009e658 str r0, [sp, 0x78] | *(arg_78h) = r0;
0x0009e65a cmp r1, 1 |
0x0009e65c ittet eq |
| if (r1 != 1) {
0x0009e65e ldreq r1, [sp, 0x2c] | r1 = var_2ch;
| }
| if (r1 != 1) {
0x0009e660 addeq r3, 1 | r3++;
| }
| if (r1 == 1) {
0x0009e662 ldrne r3, [sp, 0x78] | r3 = *(arg_78h);
| }
| if (r1 != 1) {
0x0009e664 streq r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
| }
0x0009e666 it eq |
| if (r1 != 1) {
0x0009e668 addeq r3, r2, 2 | r3 = r2 + 2;
| }
0x0009e66a str r3, [sp, 0x58] | var_58h = r3;
0x0009e66c ldr r3, [sp, 0x70] | r3 = *(arg_70h);
0x0009e66e ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009e670 and r3, r3, 0x80 | r3 &= 0x80;
0x0009e674 str r3, [sp, 0x90] | *(arg_90h) = r3;
0x0009e676 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009e678 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009e67a tst.w r3, 0x440 |
0x0009e67e ite eq |
| if ((r3 & 0x440) != 0) {
0x0009e680 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x440) == 0) {
0x0009e682 movne r3, 0 | r3 = 0;
| }
0x0009e684 str r3, [sp, 0x64] | var_64h = r3;
0x0009e686 cmp r2, 0 |
| if (r2 == 0) {
0x0009e688 beq.w 0x9eb90 | goto label_132;
| }
0x0009e68c ldr r0, [r2] | r0 = *(r2);
0x0009e68e movs r3, 1 | r3 = 1;
0x0009e690 strb r3, [r2, 4] | *((r2 + 4)) = r3;
0x0009e692 cmp r0, 0 |
0x0009e694 mov ip, r0 |
| if (r0 <= 0) {
0x0009e696 ble.w 0x9eb90 | goto label_132;
| }
0x0009e69a add.w r1, r2, 0xc | r1 = r2 + 0xc;
0x0009e69e movs r3, 0 | r3 = 0;
0x0009e6a0 mov.w r2, -1 | r2 = -1;
| do {
0x0009e6a4 str.w r2, [r1, r3, lsl 3] | __asm ("str.w r2, [r1, r3, lsl 3]");
0x0009e6a8 adds r3, 1 | r3++;
0x0009e6aa cmp r0, r3 |
0x0009e6ac bne 0x9e6a4 |
| } while (r0 != r3);
0x0009e6ae ldr.w r4, [pc, 0x8dc] |
0x0009e6b2 mov r5, fp | r5 = fp;
0x0009e6b4 ldr.w r8, [sp, 0x48] | r8 = var_48h;
0x0009e6b8 movs r7, 0 | r7 = 0;
0x0009e6ba ldr.w sb, [sp, 0x30] | sb = var_30h;
0x0009e6be mov fp, ip |
0x0009e6c0 add r4, pc | r4 = 0x13d652;
0x0009e6c2 mov.w r3, -1 | r3 = -1;
0x0009e6c6 str r3, [sp, 0x50] | var_50h = r3;
| label_26:
0x0009e6c8 ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x0009e6cc cmp r6, 0 |
0x0009e6ce str r3, [sp, 0x5c] | var_5ch = r3;
| if (r6 <= 0) {
0x0009e6d0 ble 0x9e716 | goto label_34;
| }
0x0009e6d2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009e6d4 movs r1, 0 | r1 = 0;
0x0009e6d6 ldr.w lr, [sb, 4] |
0x0009e6da mov r2, fp | r2 = fp;
0x0009e6dc add.w sl, r3, -1 | sl = r3 + -1;
| label_25:
0x0009e6e0 ldr.w r3, [lr] | r3 = *(lr);
0x0009e6e4 mov fp, sl |
0x0009e6e6 add.w ip, r3, -1 |
0x0009e6ea str r3, [sp, 0x34] | var_34h = r3;
| do {
| label_32:
0x0009e6ec ldrb r3, [fp, 1]! | r3 = *(arg_1h);
0x0009e6f0 ldrb r0, [ip, 1]! | r0 = *((ip += 1));
0x0009e6f4 cmp r3, r0 |
| if (r3 == r0) {
0x0009e6f6 beq.w 0x9eb56 | goto label_133;
| }
0x0009e6fa add r3, r4 | r3 += r4;
0x0009e6fc add r0, r4 | r0 += r4;
0x0009e6fe ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0009e702 ldrb.w r0, [r0, 0x140] | r0 = *((r0 + 0x140));
0x0009e706 cmp r3, r0 |
0x0009e708 beq 0x9e6ec |
| } while (r3 == r0);
0x0009e70a adds r1, 1 | r1++;
0x0009e70c add.w lr, lr, 0xc | lr += 0xc;
0x0009e710 cmp r6, r1 |
| if (r6 != r1) {
0x0009e712 bne 0x9e6e0 | goto label_25;
| }
0x0009e714 mov fp, r2 |
| label_34:
0x0009e716 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0009e718 bl 0x34f9c | fcn_00034f9c (r0);
0x0009e71c ldr r3, [sp, 0x90] | r3 = *(arg_90h);
0x0009e71e subs r0, 0 |
0x0009e720 it ne |
| if (r0 == 0) {
0x0009e722 movne r0, 1 | r0 = 1;
| }
0x0009e724 cmp r3, 0 |
0x0009e726 it ne |
| if (r3 == 0) {
0x0009e728 movne r0, 0 | r0 = 0;
| }
0x0009e72a cmp r0, 0 |
| if (r0 == 0) {
0x0009e72c beq.w 0x9f0f8 | goto label_134;
| }
0x0009e730 movs r3, 0 | r3 = 0;
0x0009e732 str r7, [sp, 0x50] | var_50h = r7;
0x0009e734 str r3, [sp, 0x64] | var_64h = r3;
| label_33:
0x0009e736 adds r7, 1 | r7++;
0x0009e738 add.w r8, r8, 8 | r8 += 8;
0x0009e73c cmp fp, r7 |
| if (fp != r7) {
0x0009e73e bne 0x9e6c8 | goto label_26;
| }
0x0009e740 mov fp, r5 |
| label_35:
0x0009e742 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009e744 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009e746 adds r3, 1 | r3++;
0x0009e748 str r3, [sp, 0x7c] | *(arg_7ch) = r3;
0x0009e74a cmp r2, 0 |
| if (r2 == 0) {
0x0009e74c beq.w 0x9f0bc | goto label_135;
| }
0x0009e750 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0009e752 movs r1, 0xa | r1 = 0xa;
0x0009e754 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009e756 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0009e758 ldr r4, [r0, 0x6c] | r4 = *((r0 + 0x6c));
0x0009e75a adds r6, r3, 1 | r6 = r3 + 1;
0x0009e75c movs r3, 0 | r3 = 0;
0x0009e75e adds r7, r4, 1 | r7 = r4 + 1;
0x0009e760 mov r2, r6 | r2 = r6;
0x0009e762 str r6, [r5, 0x2c] | *((r5 + 0x2c)) = r6;
0x0009e764 str r7, [sp] | *(sp) = r7;
0x0009e766 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e76a ldr r0, [sp, 0x64] | r0 = var_64h;
0x0009e76c add r2, sp, 0xc0 | r2 += arg_c0h;
0x0009e76e ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009e770 str r6, [sp, 0xc4] | *(arg_c4h) = r6;
0x0009e772 cmp r0, 0 |
0x0009e774 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009e776 ldrsh.w r3, [r0, 0x22] | r3 = *((r0 + 0x22));
0x0009e77a mov r0, r5 | r0 = r5;
0x0009e77c str r3, [sp, 0xd0] | *(arg_d0h) = r3;
0x0009e77e mov.w r3, 0 | r3 = 0;
0x0009e782 str r3, [sp, 0xc8] | *(arg_c8h) = r3;
0x0009e784 str r3, [sp, 0xd4] | *(arg_d4h) = r3;
0x0009e786 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x0009e788 it eq |
| if (r0 != 0) {
0x0009e78a moveq r3, 0 | r3 = 0;
| }
0x0009e78c str r3, [sp, 0xcc] | *(arg_cch) = r3;
0x0009e78e movs r3, 0xd | r3 = 0xd;
0x0009e790 strb.w r3, [sp, 0xc0] | *(arg_c0h) = r3;
0x0009e794 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0009e798 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x0009e79a str r3, [sp, 0x80] | *(arg_80h) = r3;
0x0009e79c cmp r0, 0 |
| if (r0 != 0) {
0x0009e79e bne.w 0x9e532 | goto label_24;
| }
0x0009e7a2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009e7a4 ldr.w sl, [r3, 0x24] | sl = *((r3 + 0x24));
0x0009e7a8 cmp.w sl, 0 |
| if (sl != 0) {
0x0009e7ac bne.w 0x9e532 | goto label_24;
| }
0x0009e7b0 ldr r5, [sp, 0x38] | r5 = var_38h;
0x0009e7b2 mov r1, r6 | r1 = r6;
0x0009e7b4 mov r0, r5 | r0 = r5;
0x0009e7b6 bl 0x42e6c | fcn_00042e6c (r0, r1, r2);
0x0009e7ba ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009e7bc cmp r4, 0 |
0x0009e7be ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x0009e7c0 ldr r3, [r1] | r3 = *(r1);
0x0009e7c2 it lt |
| if (r4 >= 0) {
0x0009e7c4 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0009e7c8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009e7cc cmp r3, 0 |
| if (r3 != 0) {
0x0009e7ce bne.w 0x9f3f4 | goto label_136;
| }
0x0009e7d2 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0009e7d4 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0009e7d8 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
| label_59:
0x0009e7dc str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009e7de ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009e7e0 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009e7e2 ldr.w sb, [r3] | sb = *(r3);
0x0009e7e6 ldr r3, [sp, 0x84] | r3 = *(arg_84h);
0x0009e7e8 cmp r3, 0 |
| if (r3 == 0) {
0x0009e7ea beq.w 0x9f348 | goto label_137;
| }
| label_53:
0x0009e7ee ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009e7f0 ldr.w sl, [r1, 0x28] | sl = *((r1 + 0x28));
0x0009e7f4 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0009e7f6 add.w r2, sl, 1 | r2 = sl + 1;
0x0009e7fa str r2, [r1, 0x28] | *((r1 + 0x28)) = r2;
0x0009e7fc cmp r3, 0 |
| if (r3 == 0) {
0x0009e7fe beq.w 0x9ff72 | goto label_138;
| }
0x0009e802 subs r2, r3, 1 | r2 = r3 - 1;
0x0009e804 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009e806 uxtb r2, r2 | r2 = (int8_t) r2;
0x0009e808 add.w r1, r2, 0x26 | r1 = r2 + 0x26;
0x0009e80c strb r2, [r0, 0x13] | *((r0 + 0x13)) = r2;
0x0009e80e ldr.w r7, [r0, r1, lsl 2] | offset_7 = r1 << 2;
| r7 = *((r0 + offset_7));
0x0009e812 cmp r2, 0 |
| if (r2 == 0) {
0x0009e814 beq.w 0x9ff66 | goto label_139;
| }
0x0009e818 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009e81a subs r3, 2 | r3 -= 2;
0x0009e81c uxtb r3, r3 | r3 = (int8_t) r3;
0x0009e81e strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0009e820 adds r3, 0x26 | r3 += 0x26;
0x0009e822 ldr.w r5, [r2, r3, lsl 2] | offset_8 = r3 << 2;
| r5 = *((r2 + offset_8));
| label_84:
0x0009e826 ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x0009e82a movs r6, 0 | r6 = 0;
0x0009e82c mov r3, sb | r3 = sb;
0x0009e82e mov r2, sl | r2 = sl;
0x0009e830 movs r1, 0x76 | r1 = 0x76;
0x0009e832 str r6, [sp] | *(sp) = r6;
0x0009e834 mov r0, r8 | r0 = r8;
0x0009e836 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e83a ldr r2, [sp, 0xc4] | r2 = *(arg_c4h);
0x0009e83c mov r3, r6 | r3 = r6;
0x0009e83e movs r1, 0xb | r1 = 0xb;
0x0009e840 mov r0, r8 | r0 = r8;
0x0009e842 str r6, [sp] | *(sp) = r6;
0x0009e844 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e848 ldr r2, [sp, 0x80] | r2 = *(arg_80h);
0x0009e84a mov r4, r0 | r4 = r0;
0x0009e84c mov r3, sb | r3 = sb;
0x0009e84e movs r1, 0x61 | r1 = 0x61;
0x0009e850 mov r0, r8 | r0 = r8;
0x0009e852 str r7, [sp] | *(sp) = r7;
0x0009e854 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e858 mov r3, r5 | r3 = r5;
0x0009e85a mov r2, sl | r2 = sl;
0x0009e85c movs r1, 0x7f | r1 = 0x7f;
0x0009e85e mov r0, r8 | r0 = r8;
0x0009e860 str r6, [sp] | *(sp) = r6;
0x0009e862 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e866 mov r3, r7 | r3 = r7;
0x0009e868 mov r2, sl | r2 = sl;
0x0009e86a movs r1, 0x80 | r1 = 0x80;
0x0009e86c mov r0, r8 | r0 = r8;
0x0009e86e str r5, [sp] | *(sp) = r5;
0x0009e870 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e874 mov r1, r4 | r1 = r4;
0x0009e876 mov r0, r8 | r0 = r8;
0x0009e878 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0009e87c ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009e87e cmp r4, 0 |
0x0009e880 ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x0009e884 ldr r3, [r1] | r3 = *(r1);
0x0009e886 it lt |
| if (r4 >= 0) {
0x0009e888 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0009e88c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009e890 cmp r3, 0 |
| if (r3 != 0) {
0x0009e892 bne.w 0x9ff7c | goto label_140;
| }
0x0009e896 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0009e898 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0009e89c add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
| label_85:
0x0009e8a0 str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r7 == 0) {
0x0009e8a2 cbz r7, 0x9e8b8 | goto label_141;
| }
0x0009e8a4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009e8a6 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0009e8a8 cmp r3, 7 |
| if (r3 > 7) {
0x0009e8aa bhi.w 0x9f4ca | void (*0x9f4ca)() ();
| }
| label_141:
0x0009e8b8 cmp r5, 0 |
| if (r5 == 0) {
0x0009e8ba beq.w 0x9f4ca | void (*0x9f4ca)() ();
| }
| label_43:
0x0009e8d8 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009e8da cmp.w sb, 0 |
0x0009e8de clz r3, r3 | r3 &= r3;
0x0009e8e2 lsr.w r3, r3, 5 | r3 >>= 5;
0x0009e8e6 it le |
| if (sb > 0) {
0x0009e8e8 movle r3, 0 | r3 = 0;
| }
0x0009e8ea cmp r3, 0 |
| if (r3 == 0) {
0x0009e8ec beq.w 0x9ed8c | goto label_142;
| }
0x0009e8f0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009e8f2 ldrsh.w r4, [r3, 0x20] | r4 = *((r3 + 0x20));
0x0009e8f6 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0009e8f8 cmp r4, 0 |
0x0009e8fa str r4, [sp, 0x50] | var_50h = r4;
| if (r4 < 0) {
0x0009e8fc blt 0x9e924 | goto label_143;
| }
0x0009e8fe tst.w r1, 0x60 |
| if ((r1 & 0x60) == 0) {
0x0009e902 beq 0x9e924 | goto label_143;
| }
| if (r4 == 0) {
0x0009e904 cbz r4, 0x9e924 | goto label_143;
| }
0x0009e906 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0009e908 add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x0009e90c add.w r3, r0, r3, lsl 2 | r3 = r0 + (r3 << 2);
| do {
0x0009e910 ldrh r2, [r3, -0x2] | r2 = *((r3 - 0x2));
0x0009e914 and r2, r2, 0x60 | r2 &= 0x60;
| if (r2 != 0) {
0x0009e918 cbz r2, 0x9e91c |
0x0009e91a subs r4, 1 | r4--;
| }
0x0009e91c subs r3, 0xc | r3 -= 0xc;
0x0009e91e cmp r3, r0 |
0x0009e920 bne 0x9e910 |
| } while (r3 != r0);
0x0009e922 str r4, [sp, 0x50] | var_50h = r4;
| label_143:
0x0009e924 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009e926 tst.w r1, 0x62 |
0x0009e92a ldrsh.w r3, [r2, 0x22] | r3 = *((r2 + 0x22));
| if ((r1 & 0x62) == 0) {
0x0009e92e beq 0x9e952 | goto label_144;
| }
0x0009e930 cmp r3, 0 |
| if (r3 <= 0) {
0x0009e932 ble.w 0x9fa54 | goto label_145;
| }
0x0009e936 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0009e938 movs r0, 0xc | r0 = 0xc;
0x0009e93a movs r1, 0 | r1 = 0;
0x0009e93c smlabb r0, r3, r0, r2 | __asm ("smlabb r0, r3, r0, r2");
| do {
0x0009e940 ldrh r4, [r2, 0xa] | r4 = *((r2 + 0xa));
0x0009e942 and r4, r4, 0x62 | r4 &= 0x62;
| if (r4 != 0) {
0x0009e946 cbz r4, 0x9e94a |
0x0009e948 adds r1, 1 | r1++;
| }
0x0009e94a adds r2, 0xc | r2 += 0xc;
0x0009e94c cmp r2, r0 |
0x0009e94e bne 0x9e940 |
| } while (r2 != r0);
0x0009e950 subs r3, r3, r1 | r3 -= r1;
| label_144:
0x0009e952 cmp sb, r3 |
| if (sb != r3) {
0x0009e954 bne.w 0x9fa54 | goto label_145;
| }
| label_38:
0x0009e958 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009e95a ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0009e95c ands r3, r3, 1 | r3 &= 1;
| if (r3 == r3) {
0x0009e960 beq.w 0x9edac | goto label_67;
| }
0x0009e964 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009e966 ldrb r2, [r3, 0x12] | r2 = *((r3 + 0x12));
0x0009e968 cmp r2, 0 |
| if (r2 != 0) {
0x0009e96a bne.w 0x9fa94 | goto label_146;
| }
0x0009e96e ldr r3, [r3, 0x78] | r3 = *((r3 + 0x78));
0x0009e970 cmp r3, 0 |
| if (r3 == 0) {
0x0009e972 beq.w 0x9fa70 | goto label_147;
| }
0x0009e976 str r2, [sp, 0x70] | *(arg_70h) = r2;
| label_39:
0x0009e978 ldr r3, [sp, 0x94] | r3 = *(arg_94h);
0x0009e97a cmp r3, 2 |
0x0009e97c itt eq |
| if (r3 != 2) {
0x0009e97e moveq r3, 0 | r3 = 0;
| }
| if (r3 != 2) {
0x0009e980 streq r3, [sp, 0x74] | *(arg_74h) = r3;
| }
| if (r3 == 2) {
0x0009e982 beq 0x9e9f2 | goto label_148;
| }
0x0009e984 ldr.w fp, [sp, 0x30] | fp = var_30h;
0x0009e988 add r3, sp, 0xb8 | r3 += arg_b8h;
0x0009e98a ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x0009e98e movs r4, 0 | r4 = 0;
0x0009e990 str r3, [sp, 0xc] | var_ch = r3;
0x0009e992 add r3, sp, 0xb4 | r3 += arg_b4h;
0x0009e994 str r3, [sp, 8] | var_8h_2 = r3;
0x0009e996 mov.w r3, -1 | r3 = -1;
0x0009e99a movs r2, 0x71 | r2 = 0x71;
0x0009e99c mov r1, fp | r1 = fp;
0x0009e99e str r3, [sp] | *(sp) = r3;
0x0009e9a0 mov r0, r8 | r0 = r8;
0x0009e9a2 mov r3, r4 | r3 = r4;
0x0009e9a4 str r4, [sp, 4] | var_4h = r4;
0x0009e9a6 bl 0x4f62c | r0 = fcn_0004f62c (r0, r1, r2, r3, r4, r5, r6);
0x0009e9aa adds r7, r0, 2 | r7 = r0 + 2;
0x0009e9ac mov r6, r0 | r6 = r0;
0x0009e9ae lsls r7, r7, 2 | r7 <<= 2;
0x0009e9b0 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009e9b2 mov r3, r4 | r3 = r4;
0x0009e9b4 mov r2, r7 | r2 = r7;
0x0009e9b6 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0009e9ba str r0, [sp, 0x74] | *(arg_74h) = r0;
0x0009e9bc cmp r0, 0 |
| if (r0 == 0) {
0x0009e9be beq.w 0x9e532 | goto label_24;
| }
0x0009e9c2 cmp r6, r4 |
0x0009e9c4 ldr.w r1, [fp, 8] | r1 = *(arg_78h);
0x0009e9c8 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
| if (r6 <= r4) {
0x0009e9cc ble.w 0x9fa6a | goto label_149;
| }
0x0009e9d0 sub.w r2, r7, 8 | r2 = r7 - 8;
0x0009e9d4 add r2, r0 | r2 += r0;
| do {
0x0009e9d6 ldrh r4, [r1, 0x34] | r4 = *((r1 + 0x34));
0x0009e9d8 adds r3, 1 | r3++;
0x0009e9da str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x0009e9de cmp r0, r2 |
0x0009e9e0 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0009e9e2 add r3, r4 | r3 += r4;
0x0009e9e4 bne 0x9e9d6 |
| } while (r0 != r2);
| label_66:
0x0009e9e6 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009e9e8 adds r3, 1 | r3++;
0x0009e9ea str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x0009e9ec ldr r2, [sp, 0x74] | r2 = *(arg_74h);
0x0009e9ee str.w r3, [r2, r6, lsl 2] | __asm ("str.w r3, [r2, r6, lsl 2]");
| label_148:
0x0009e9f2 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009e9f4 cmp r3, 0 |
| if (r3 == 0) {
0x0009e9f6 beq.w 0x9edb4 | goto label_150;
| }
0x0009e9fa ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009e9fc ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0009ea00 cmp r3, 1 |
| if (r3 == 1) {
0x0009ea02 beq.w 0x9f116 | goto label_151;
| }
0x0009ea06 cmp r3, 2 |
| if (r3 == 2) {
0x0009ea08 beq.w 0x9f33a | goto label_152;
| }
0x0009ea0c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009ea0e ldr r1, [r3] | r1 = *(r3);
0x0009ea10 cmp r1, 0 |
| if (r1 == 0) {
0x0009ea12 beq.w 0x9f142 | goto label_153;
| }
0x0009ea16 ldr r0, [r1] | r0 = *(r1);
0x0009ea18 cmp r0, 0 |
| if (r0 <= 0) {
0x0009ea1a ble.w 0x9f142 | goto label_153;
| }
0x0009ea1c strh r2, [r2, 0x1c] | *((r2 + 0x1c)) = r2;
0x0009ea1e movs r3, 0 | r3 = 0;
0x0009ea20 b 0x9ea28 |
| while (r4 >= r4) {
0x0009ea22 cmp r3, r0 |
| if (r3 == r0) {
0x0009ea24 beq.w 0x9f142 | goto label_153;
| }
0x0009ea28 adds r3, 1 | r3++;
0x0009ea2a lsls r2, r3, 4 | r2 = r3 << 4;
0x0009ea2c adds r4, r1, r2 | r4 = r1 + r2;
0x0009ea2e ldrb r4, [r4, 1] | r4 = *((r4 + 1));
0x0009ea30 lsls r4, r4, 0x1a | r4 <<= 0x1a;
0x0009ea32 bpl 0x9ea22 |
| }
0x0009ea34 ldrb r3, [r1, r2] | r3 = *((r1 + r2));
0x0009ea36 cmp r3, 3 |
0x0009ea38 it ne |
| if (r3 != 3) {
0x0009ea3a cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != 3) {
0x0009ea3c bne.w 0x9ff86 | goto label_154;
| }
0x0009ea40 ldr.w r2, [pc, 0x54c] |
0x0009ea44 add r2, pc | r2 = 0x13d9d8;
| label_86:
0x0009ea46 ldr.w r1, [pc, 0x54c] |
0x0009ea4a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009ea4c add r1, pc | r1 = 0x13d9e6;
0x0009ea4e bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009ea52 b 0x9f126 | goto label_52;
| label_29:
0x0009ea92 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009ea94 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009ea96 add sp, 0x17c |
0x0009ea98 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009ea9c b.w 0x2f0c8 | void (*0x2f0c8)() ();
| label_127:
0x0009eaa0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009eaa2 ldr r3, [r3] | r3 = *(r3);
0x0009eaa4 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0009eaa6 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| if (r3 == 0) {
0x0009eaa8 cbz r3, 0x9eab2 | goto label_128;
| }
0x0009eaaa ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0009eaac cmp r3, 0 |
| if (r3 != 0) {
0x0009eaae bne.w 0x9e5ae | goto label_27;
| }
| label_128:
0x0009eab2 movs r3, 0 | r3 = 0;
0x0009eab4 str r3, [sp, 0xbc] | *(arg_bch) = r3;
0x0009eab6 str r3, [sp, 0x84] | *(arg_84h) = r3;
0x0009eab8 b 0x9e5ca | goto label_28;
| do {
| label_61:
0x0009eaba ldr.w r2, [pc, 0x4e0] |
0x0009eabe ldr.w r3, [pc, 0x4c4] | r3 = *(0x9ef86);
0x0009eac2 add r2, pc | r2 = 0x13da64;
0x0009eac4 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009eac6 ldr r2, [r3] | r2 = imp.atan;
0x0009eac8 ldr r3, [sp, 0x174] | r3 = *(arg_174h);
0x0009eaca eors r2, r3 | r2 ^= r3;
0x0009eacc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009ead0 bne.w 0x9f442 | goto label_126;
| }
0x0009ead4 add sp, 0x17c |
0x0009ead6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_60:
0x0009eae4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009eae6 cmp r3, 0 |
0x0009eae8 beq 0x9eaba |
| } while (r3 == 0);
0x0009eaea ldr.w r2, [pc, 0x4b4] |
0x0009eaee ldr.w r3, [pc, 0x494] | r3 = *(0x9ef86);
0x0009eaf2 add r2, pc | r2 = 0x13da98;
0x0009eaf4 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009eaf6 ldr r2, [r3] | r2 = imp.atan;
0x0009eaf8 ldr r3, [sp, 0x174] | r3 = *(arg_174h);
0x0009eafa eors r2, r3 | r2 ^= r3;
0x0009eafc mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0009eb00 beq 0x9ea92 | goto label_29;
| }
0x0009eb02 b.w 0x9f442 | goto label_126;
| label_130:
0x0009eb06 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009eb08 ldrb.w r3, [r2, 0x96] | r3 = *((r2 + 0x96));
0x0009eb0a adds r0, 0x96 | r0 += 0x96;
0x0009eb0c orr r3, r3, 0x10 | r3 |= 0x10;
0x0009eb10 strb.w r3, [r2, 0x96] | *((r2 + 0x96)) = r3;
0x0009eb12 adds r0, 0x96 | r0 += 0x96;
0x0009eb14 b 0x9e608 | goto label_30;
| label_129:
0x0009eb16 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0009eb18 cmp r3, 0 |
| if (r3 == 0) {
0x0009eb1a beq 0x9eb98 | goto label_155;
| }
| label_36:
0x0009eb1c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009eb1e bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x0009eb22 str r0, [sp, 0x38] | var_38h = r0;
0x0009eb24 cmp r0, 0 |
| if (r0 != 0) {
0x0009eb26 bne.w 0x9e5fe | goto label_31;
| }
0x0009eb2a b 0x9e532 | goto label_24;
| label_133:
0x0009eb56 cmp r3, 0 |
| if (r3 != 0) {
0x0009eb58 bne.w 0x9e6ec | goto label_32;
| }
0x0009eb5c ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009eb5e mov fp, r2 |
0x0009eb60 ldrh.w r0, [lr, 0xa] | r0 = *((lr + 0xa));
0x0009eb64 ldrsh.w lr, [sb, 0x20] |
0x0009eb68 cmp r1, r7 |
0x0009eb6a it ne |
| if (r1 == r7) {
0x0009eb6c movne r3, 0 | r3 = 0;
| }
0x0009eb6e str.w r1, [r8, 0xc] | __asm ("str.w r1, [r8, 0xc]");
0x0009eb72 str r3, [sp, 0x64] | var_64h = r3;
0x0009eb74 and r0, r0, 0x60 | r0 &= 0x60;
0x0009eb78 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009eb7a cmp lr, r1 |
0x0009eb7c it eq |
| if (lr != r1) {
0x0009eb7e moveq r3, r7 | r3 = r7;
| }
0x0009eb80 str r3, [sp, 0x50] | var_50h = r3;
0x0009eb82 cmp r0, 0 |
| if (r0 != 0) {
0x0009eb84 bne.w 0x9ed6e | goto label_156;
| }
0x0009eb88 cmp r6, r1 |
| if (r6 > r1) {
0x0009eb8a bgt.w 0x9e736 | goto label_33;
| }
0x0009eb8e b 0x9e716 | goto label_34;
| label_132:
0x0009eb90 mov.w r3, -1 | r3 = -1;
0x0009eb94 str r3, [sp, 0x50] | var_50h = r3;
0x0009eb96 b 0x9e742 | goto label_35;
| label_155:
0x0009eb98 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009eb9a ldr r3, [r2] | r3 = *(r2);
0x0009eb9c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0009eb9e lsls r4, r3, 0x1c | r4 = r3 << 0x1c;
0x0009eba0 itt pl |
| if (r4 < r3) {
0x0009eba2 movpl r3, 1 | r3 = 1;
| }
| if (r4 < r3) {
0x0009eba4 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x0009eba6 b 0x9eb1c | goto label_36;
| label_131:
0x0009eba8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009ebaa ldr.w r3, [r2, 0x108] | r3 = *((r2 + 0x108));
0x0009ebae ldr.w r8, [r2] | r8 = *(r2);
0x0009ebb2 cmp r3, 0 |
| if (r3 != 0) {
0x0009ebb4 bne.w 0x9e636 | goto label_37;
| }
0x0009ebb8 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009ebba ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0009ebbc cmp r3, 0 |
| if (r3 != 0) {
0x0009ebbe bne.w 0x9e636 | goto label_37;
| }
0x0009ebc2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009ebc4 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0009ebc8 cmp r3, 1 |
| if (r3 == 1) {
0x0009ebca beq.w 0x9e636 | goto label_37;
| }
0x0009ebce ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009ebd0 cmp r3, 0xb |
0x0009ebd2 itt ne |
| if (r3 == 0xb) {
0x0009ebd4 ldrne r3, [sp, 0x60] | r3 = var_60h;
| }
| if (r3 == 0xb) {
0x0009ebd6 strne r3, [sp, 0x64] | var_64h = r3;
| }
| if (r3 == 0xb) {
0x0009ebd8 beq.w 0x9f4b0 | goto label_157;
| }
| label_65:
0x0009ebdc ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009ebde ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x0009ebe0 ldr r3, [r2] | r3 = *(r2);
0x0009ebe2 cmp r3, 1 |
| if (r3 != 1) {
0x0009ebe4 bne.w 0x9e636 | goto label_37;
| }
0x0009ebe6 add r5, sp, 0x9c | r5 = sp + 0x9c;
0x0009ebe8 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x0009ebea cmp r3, 0 |
| if (r3 != 0) {
0x0009ebec bne.w 0x9e636 | goto label_37;
| }
0x0009ebf0 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x0009ebf2 cmp r3, 0 |
| if (r3 != 0) {
0x0009ebf4 bne.w 0x9e636 | goto label_37;
| }
0x0009ebf8 ldr r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x0009ebfa cmp r3, 0 |
| if (r3 != 0) {
0x0009ebfc bne.w 0x9e636 | goto label_37;
| }
0x0009ec00 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x0009ec02 cmp r3, 0 |
| if (r3 != 0) {
0x0009ec04 bne.w 0x9e636 | goto label_37;
| }
0x0009ec08 ldr r3, [r1, 0x3c] | r3 = *((r1 + 0x3c));
0x0009ec0a cmp r3, 0 |
| if (r3 != 0) {
0x0009ec0c bne.w 0x9e636 | goto label_37;
| }
0x0009ec10 ldr r3, [r1, 0x34] | r3 = *((r1 + 0x34));
0x0009ec12 cmp r3, 0 |
| if (r3 != 0) {
0x0009ec14 bne.w 0x9e636 | goto label_37;
| }
0x0009ec18 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0009ec1a lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x0009ec1c bmi.w 0x9e636 | goto label_37;
| }
0x0009ec20 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x0009ec22 ldr r1, [r3] | r1 = *(r3);
0x0009ec24 cmp r1, 1 |
| if (r1 != 1) {
0x0009ec26 bne.w 0x9e636 | goto label_37;
| }
0x0009ec2a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0009ec2c ldrb r3, [r3] | r3 = *(r3);
0x0009ec2e cmp r3, 0xb4 |
| if (r3 != 0xb4) {
0x0009ec30 bne.w 0x9e636 | goto label_37;
| }
0x0009ec34 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009ec36 adds r2, 8 | r2 += 8;
0x0009ec38 movs r1, 0 | r1 = 0;
0x0009ec3a bl 0x98544 | r0 = fcn_00098544 (r0, r1, r2);
0x0009ec3e mov sl, r0 | sl = r0;
0x0009ec40 cmp r0, 0 |
| if (r0 == 0) {
0x0009ec42 beq.w 0x9e636 | goto label_37;
| }
0x0009ec46 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009ec48 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0009ec4a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009ec4c cmp r2, r3 |
| if (r2 == r3) {
0x0009ec4e beq.w 0x9f4a0 | goto label_158;
| }
| label_64:
0x0009ec52 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009ec54 ldr.w r0, [sl, 0x1c] | r0 = *((sl + 0x1c));
0x0009ec58 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0009ec5a eor r2, r0, 0x80 | r2 = r0 ^ 0x80;
0x0009ec5e ubfx r2, r2, 7, 1 | r2 = (r2 >> 7) & ((1 << 1) - 1);
0x0009ec62 eor r1, r3, 0x80 | r1 = r3 ^ 0x80;
0x0009ec66 ubfx r1, r1, 7, 1 | r1 = (r1 >> 7) & ((1 << 1) - 1);
0x0009ec6a cmp r1, r2 |
| if (r1 != r2) {
0x0009ec6c bne.w 0x9e636 | goto label_37;
| }
0x0009ec70 ldrb.w r7, [sl, 0x2b] | r7 = *((sl + 0x2b));
0x0009ec74 cmp r7, 0 |
| if (r7 != 0) {
0x0009ec76 bne.w 0x9e636 | goto label_37;
| }
0x0009ec7a ldrsh.w r1, [r4, 0x22] | r1 = *((r4 + 0x22));
0x0009ec7e mov r2, r4 | r2 = r4;
0x0009ec80 ldrsh.w r4, [sl, 0x22] | r4 = *((sl + 0x22));
0x0009ec84 cmp r1, r4 |
| if (r1 != r4) {
0x0009ec86 bne.w 0x9e636 | goto label_37;
| }
0x0009ec8a ldrsh.w r6, [r2, 0x20] | r6 = *((r2 + 0x20));
0x0009ec8e ldrsh.w r4, [sl, 0x20] | r4 = *((sl + 0x20));
0x0009ec92 cmp r6, r4 |
| if (r6 != r4) {
0x0009ec94 bne.w 0x9e636 | goto label_37;
| }
0x0009ec98 ands r3, r3, 0x10000 | r3 &= 0x10000;
| if (r3 != r3) {
0x0009ec9c bne.w 0x9f498 | goto label_159;
| }
0x0009eca0 mov r7, r3 | r7 = r3;
| label_63:
0x0009eca2 str.w r8, [sp, 0x34] | __asm ("str.w r8, [var_34h]");
0x0009eca6 b 0x9ecfc |
0x0009ecfc cmp r7, r1 |
| if (r7 >= r1) {
0x0009ecfe bge.w 0x9f456 | void (*0x9f456)() ();
| }
| label_156:
0x0009ed6e ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009ed70 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009ed72 mov r2, r1 | r2 = r1;
0x0009ed74 ldr r1, [pc, 0x22c] |
0x0009ed76 add r1, pc | r1 = 0x13dd1e;
0x0009ed78 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009ed7c b.w 0x9e532 | goto label_24;
| label_42:
0x0009ed80 ldr r3, [sp, 0x54] | r3 = var_54h_2;
0x0009ed82 mov.w sl, -1 | sl = -1;
0x0009ed86 mov sb, r3 | sb = r3;
0x0009ed88 str r3, [sp, 0x80] | *(arg_80h) = r3;
0x0009ed8a str r3, [sp, 0x5c] | var_5ch = r3;
| label_142:
0x0009ed8c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009ed8e cmp r3, 0 |
| if (r3 == 0) {
0x0009ed90 beq.w 0x9e958 | goto label_38;
| }
0x0009ed94 ldr r3, [r3] | r3 = *(r3);
0x0009ed96 cmp r3, sb |
| if (r3 == sb) {
0x0009ed98 beq.w 0x9e958 | goto label_38;
| }
0x0009ed9c ldr r1, [pc, 0x208] |
0x0009ed9e mov r2, sb | r2 = sb;
0x0009eda0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009eda2 add r1, pc | r1 = 0x13dd4e;
0x0009eda4 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009eda8 b.w 0x9e532 | goto label_24;
| label_67:
0x0009edac str r3, [sp, 0x70] | *(arg_70h) = r3;
0x0009edae b 0x9e978 | goto label_39;
| label_48:
0x0009edb0 ldrd sl, sb, [sp, 0xa8] | __asm ("ldrd sl, sb, [arg_a8h]");
| label_150:
0x0009edb4 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009edb6 cmp r3, 0 |
| if (r3 != 0) {
0x0009edb8 bne.w 0x9ff4c | goto label_160;
| }
0x0009edbc ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009edbe cmp r3, 0 |
| if (r3 == 0) {
0x0009edc0 beq.w 0x9ff46 | goto label_161;
| }
0x0009edc4 ldr r5, [sp, 0x5c] | r5 = var_5ch;
0x0009edc6 movs r1, 0xb | r1 = 0xb;
0x0009edc8 ldr r4, [sp, 0x38] | r4 = var_38h;
0x0009edca ldr r2, [sp, 0xc4] | r2 = *(arg_c4h);
0x0009edcc mov r3, r5 | r3 = r5;
0x0009edce str r5, [sp] | *(sp) = r5;
0x0009edd0 mov r0, r4 | r0 = r4;
0x0009edd2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009edd6 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009edd8 mov r6, r0 | r6 = r0;
0x0009edda cmp r2, 0 |
| if (r2 >= 0) {
0x0009eddc bge.w 0x9ff32 | goto label_162;
| }
| label_82:
0x0009ede0 mov r8, r6 | r8 = r6;
| label_83:
0x0009ede2 ldr r5, [sp, 0x30] | r5 = var_30h;
0x0009ede4 ldr r3, [sp, 0xa4] | r3 = *(arg_a4h);
0x0009ede6 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009edea and r3, r3, 1 | r3 &= 1;
0x0009edee str r3, [sp, 0x64] | var_64h = r3;
0x0009edf0 cmp r1, 0 |
| if (r1 <= 0) {
0x0009edf2 ble 0x9eea6 | goto label_163;
| }
0x0009edf4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009edf6 mov.w fp, 0 |
0x0009edfa strd r6, r8, [sp, 0x68] | __asm ("strd r6, r8, [sp, 0x68]");
0x0009edfe mov r7, fp | r7 = fp;
0x0009ee00 ldr r4, [sp, 0x7c] | r4 = *(arg_7ch);
0x0009ee02 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0009ee04 mov r8, r3 | r8 = r3;
0x0009ee06 add.w r2, r3, 0xc | r2 = r3 + 0xc;
0x0009ee0a str r2, [sp, 0x34] | var_34h = r2;
| label_40:
0x0009ee0c ldrsh.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0009ee10 cmp r3, r7 |
| if (r3 == r7) {
0x0009ee12 beq.w 0x9fd22 | goto label_164;
| }
0x0009ee16 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0009ee18 add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x0009ee1c add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0009ee20 ldrh r0, [r2, 0xa] | r0 = *((r2 + 0xa));
0x0009ee22 tst.w r0, 0x62 |
| if ((r0 & 0x62) == 0) {
0x0009ee26 beq.w 0x9fad8 | goto label_165;
| }
0x0009ee2a ands r3, r0, 0x20 | r3 = r0 & 0x20;
0x0009ee2e add.w fp, fp, 1 |
| if (r3 != r0) {
0x0009ee32 bne 0x9ee9c | goto label_70;
| }
0x0009ee34 lsls r0, r0, 0x19 | r0 <<= 0x19;
| if (r0 < r0) {
0x0009ee36 bmi.w 0x9fe68 | goto label_166;
| }
0x0009ee3a cmp.w r8, 0 |
| if (r8 == 0) {
0x0009ee3e beq.w 0x9fe38 | goto label_167;
| }
| label_68:
0x0009ee42 ldr.w r0, [r8] | r0 = *(r8);
0x0009ee46 cmp r0, 0 |
| if (r0 <= 0) {
0x0009ee48 ble.w 0x9fb32 | goto label_168;
| }
0x0009ee4c ldr.w ip, [sp, 0x34] | ip = var_34h;
0x0009ee50 movs r3, 0 | r3 = 0;
0x0009ee52 mov lr, r1 | lr = r1;
0x0009ee54 b 0x9ee5e |
| while (r1 != r7) {
0x0009ee56 adds r3, 1 | r3++;
0x0009ee58 cmp r3, r0 |
| if (r3 == r0) {
0x0009ee5a beq.w 0x9fb32 | goto label_168;
| }
0x0009ee5e ldr.w r1, [ip, r3, lsl 3] | offset_9 = r3 << 3;
| r1 = *((ip + offset_9));
0x0009ee62 cmp r1, r7 |
0x0009ee64 bne 0x9ee56 |
| }
0x0009ee66 cmp r0, r3 |
0x0009ee68 mov r1, lr | r1 = lr;
| if (r0 <= r3) {
0x0009ee6a ble.w 0x9fb32 | goto label_168;
| }
| label_69:
0x0009ee6e ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009ee70 cmp r2, 0 |
| if (r2 != 0) {
0x0009ee72 bne.w 0x9fb1e | goto label_169;
| }
0x0009ee76 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009ee78 cmp r2, 0 |
| if (r2 == 0) {
0x0009ee7a beq.w 0x9fe84 | goto label_170;
| }
0x0009ee7e ldrd r0, r2, [sp, 0x7c] | __asm ("ldrd r0, r2, [arg_7ch]");
0x0009ee82 cmp r0, r2 |
| if (r0 != r2) {
0x0009ee84 beq 0x9ee9a |
0x0009ee86 adds r2, r3, r2 | r2 = r3 + r2;
0x0009ee88 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009ee8a movs r1, 0x51 | r1 = 0x51;
0x0009ee8c ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009ee8e str r3, [sp] | *(sp) = r3;
0x0009ee90 mov r3, r4 | r3 = r4;
0x0009ee92 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009ee96 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
| }
| label_71:
0x0009ee9a adds r4, 1 | r4++;
| label_70:
0x0009ee9c adds r7, 1 | r7++;
0x0009ee9e cmp r1, r7 |
| if (r1 > r7) {
0x0009eea0 bgt 0x9ee0c | goto label_40;
| }
0x0009eea2 ldrd r6, r8, [sp, 0x68] | __asm ("ldrd r6, r8, [var_68h]");
| label_163:
0x0009eea6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009eea8 ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x0009eeaa add.w sb, r2, -1 | sb = r2 + -1;
0x0009eeae str r2, [sp, 0x34] | var_34h = r2;
0x0009eeb0 str.w sb, [r3, 0x38] | __asm ("str.w sb, [r3, 0x38]");
0x0009eeb4 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009eeb6 cmp r3, 0 |
| if (r3 != 0) {
0x0009eeb8 bne.w 0x9fbdc | goto label_171;
| }
| label_76:
0x0009eebc ldr r3, [sp, 0x94] | r3 = *(arg_94h);
0x0009eebe cmp r3, 2 |
| if (r3 == 2) {
0x0009eec0 beq.w 0x9f00c | goto label_172;
| }
0x0009eec4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009eec6 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0009eeca cmp r3, 1 |
| if (r3 == 1) {
0x0009eecc beq.w 0x9fb78 | goto label_173;
| }
| label_75:
0x0009eed0 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009eed2 cmp r3, 0 |
| if (r3 < 0) {
0x0009eed4 blt.w 0x9fd9a | goto label_174;
| }
0x0009eed8 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009eeda cmp r3, 0 |
| if (r3 != 0) {
0x0009eedc bne.w 0x9fd86 | void (*0x9fd86)() ();
| }
| label_172:
0x0009f00c ldr r3, [sp, 0x70] | r3 = *(arg_70h);
0x0009f00e cmp r3, 0 |
| if (r3 != 0) {
0x0009f010 bne.w 0x9fb64 | goto label_175;
| }
| label_74:
0x0009f014 ldr r1, [sp, 0x84] | r1 = *(arg_84h);
| if (r1 != 0) {
0x0009f016 cbz r1, 0x9f03e |
0x0009f018 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009f01a ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009f01c str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x0009f020 str r3, [sp, 0xc] | var_ch = r3;
0x0009f022 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009f024 ldrsh.w r2, [r0, 0x22] | r2 = *((r0 + 0x22));
0x0009f028 str r0, [sp, 4] | var_4h = r0;
0x0009f02a subs r3, 1 | r3--;
0x0009f02c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009f02e subs r3, r3, r2 | r3 -= r2;
0x0009f030 movs r2, 0x7f | r2 = 0x7f;
0x0009f032 str r3, [sp, 8] | var_8h_2 = r3;
0x0009f034 movs r3, 2 | r3 = 2;
0x0009f036 str r3, [sp] | *(sp) = r3;
0x0009f038 movs r3, 0 | r3 = 0;
0x0009f03a bl 0x9c854 | fcn_0009c854 (r0, r1, r2, r3, r4, r5, r6);
| }
0x0009f03e ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009f040 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0009f042 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009f046 cmn r2, r3 |
| if (r2 < r3) {
0x0009f048 bmi.w 0x9fb4c | void (*0x9fb4c)() ();
| }
| label_80:
0x0009f094 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009f096 ldrb r3, [r2, 0x12] | r3 = *((r2 + 0x12));
| if (r3 == 0) {
0x0009f098 cbnz r3, 0x9f0a2 |
0x0009f09a ldr r3, [r2, 0x78] | r3 = *((r2 + 0x78));
0x0009f09c cmp r3, 0 |
| if (r3 == 0) {
0x0009f09e beq.w 0x9fe1e | goto label_176;
| }
| }
| label_81:
0x0009f0a2 ldr r3, [sp, 0x70] | r3 = *(arg_70h);
| if (r3 != 0) {
0x0009f0a4 cbz r3, 0x9f0b4 |
0x0009f0a6 ldr.w r2, [pc, 0xaf0] |
0x0009f0aa mov r1, r3 | r1 = r3;
0x0009f0ac ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009f0ae add r2, pc | r2 = 0x13ec4c;
0x0009f0b0 bl 0x41cf8 | fcn_00041cf8 (r0, r1, r2);
| }
| label_45:
0x0009f0b4 ldr r3, [sp, 0x74] | r3 = *(arg_74h);
0x0009f0b6 str r3, [sp, 0x30] | var_30h = r3;
0x0009f0b8 b.w 0x9e536 | goto label_41;
| label_135:
0x0009f0bc ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009f0be add r0, sp, 0xdc | r0 += arg_dch;
0x0009f0c0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009f0c2 str r3, [sp, 0xe0] | *(arg_e0h) = r3;
0x0009f0c4 strd r3, r3, [sp, 0xe4] | __asm ("strd r3, r3, [sp, 0xe4]");
0x0009f0c8 strd r3, r3, [sp, 0xec] | __asm ("strd r3, r3, [sp, 0xec]");
0x0009f0cc strd r3, r3, [sp, 0xf4] | __asm ("strd r3, r3, [sp, 0xf4]");
0x0009f0d0 ldr r3, [sp, 0x54] | r3 = var_54h_2;
0x0009f0d2 str r2, [sp, 0xdc] | *(arg_dch) = r2;
0x0009f0d4 cmp r3, 0 |
| if (r3 == 0) {
0x0009f0d6 beq.w 0x9ed80 | goto label_42;
| }
0x0009f0da mov r1, r3 | r1 = r3;
0x0009f0dc ldr.w sb, [r3] | sb = *(r3);
0x0009f0e0 bl 0x48718 | fcn_00048718 (r0, r1);
0x0009f0e4 str r0, [sp, 0x80] | *(arg_80h) = r0;
0x0009f0e6 cmp r0, 0 |
| if (r0 != 0) {
0x0009f0e8 bne.w 0x9f400 | goto label_177;
| }
0x0009f0ec ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009f0ee mov.w sl, -1 | sl = -1;
0x0009f0f2 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009f0f4 b.w 0x9e8d8 | goto label_43;
| label_134:
0x0009f0f8 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0009f0fa ldr r5, [sp, 0x5c] | r5 = var_5ch;
0x0009f0fc ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009f0fe ldr.w r1, [pc, 0xa9c] |
0x0009f102 mov r0, r4 | r0 = r4;
0x0009f104 mov r3, r5 | r3 = r5;
0x0009f106 adds r2, 8 | r2 += 8;
0x0009f108 add r1, pc | r1 = 0x13ecaa;
0x0009f10a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009f10e movs r3, 1 | r3 = 1;
0x0009f110 strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x0009f112 b.w 0x9e532 | goto label_24;
| label_151:
0x0009f116 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009f118 ldr.w r1, [pc, 0xa84] |
0x0009f11c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009f11e ldr r2, [r3] | r2 = *(r3);
0x0009f120 add r1, pc | r1 = 0x13ecc4;
0x0009f122 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_52:
0x0009f126 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009f128 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009f12a bl 0x30a7c | fcn_00030a7c (r0, r1);
0x0009f12e ldr r3, [sp, 0x54] | r3 = var_54h_2;
| if (r3 != 0) {
0x0009f130 cbz r3, 0x9f13a |
0x0009f132 ldr r1, [sp, 0x54] | r1 = var_54h_2;
0x0009f134 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009f136 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x0009f13a ldr r3, [sp, 0x74] | r3 = *(arg_74h);
0x0009f13c str r3, [sp, 0x30] | var_30h = r3;
0x0009f13e b.w 0x9e550 | goto label_44;
| label_153:
0x0009f142 ldrd r4, r2, [sp, 0xb4] | __asm ("ldrd r4, r2, [arg_b4h]");
0x0009f146 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009f148 ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x0009f14a ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x0009f14e str.w sl, [sp, 0xa8] | __asm ("str.w sl, [arg_a8h]");
0x0009f152 mov sl, r4 | sl = r4;
0x0009f154 str.w sb, [sp, 0xac] | __asm ("str.w sb, [arg_ach]");
0x0009f158 mov sb, r2 | sb = r2;
0x0009f15a str r4, [r3, 0x30] | *((r3 + 0x30)) = r4;
0x0009f15c add r3, sp, 0xfc | r3 += arg_fch;
0x0009f15e str r3, [sp, 0x64] | var_64h = r3;
| label_49:
0x0009f160 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009f162 ldr r2, [sp, 0x7c] | r2 = *(arg_7ch);
0x0009f164 str.w sb, [r7, 0x2c] | __asm ("str.w sb, [r7, 0x2c]");
0x0009f168 str r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x0009f16a strd r2, sl, [r7, 0x24] | __asm ("strd r2, sl, [r7, 0x24]");
0x0009f16e cmp r1, 0 |
| if (r1 == 0) {
0x0009f170 beq.w 0x9f2ba | goto label_178;
| }
0x0009f174 movs r4, 0 | r4 = 0;
0x0009f176 mov r6, r7 | r6 = r7;
0x0009f178 mov fp, r4 |
0x0009f17a strd r8, r3, [sp, 0xdc] | __asm ("strd r8, r3, [sp, 0xdc]");
0x0009f17e strd r4, r4, [sp, 0xe4] | __asm ("strd r4, r4, [sp, 0xe4]");
0x0009f182 strd r4, r4, [sp, 0xec] | __asm ("strd r4, r4, [sp, 0xec]");
0x0009f186 strd r4, r4, [sp, 0xf4] | __asm ("strd r4, r4, [sp, 0xf4]");
0x0009f18a strd sl, r7, [sp, 0x98] | __asm ("strd sl, r7, [sp, 0x98]");
0x0009f18e str.w sb, [sp, 0xa0] | __asm ("str.w sb, [arg_a0h]");
| label_47:
0x0009f192 ldr r1, [r6] | r1 = *(r6);
0x0009f194 cmp r1, 0 |
| if (r1 == 0) {
0x0009f196 beq.w 0x9f2b2 | goto label_179;
| }
0x0009f19a add r4, sp, 0xdc | r4 += arg_dch;
0x0009f19c mov r0, r4 | r0 = r4;
0x0009f19e bl 0x48718 | r0 = fcn_00048718 (r0, r1);
0x0009f1a2 cmp r0, 0 |
| if (r0 != 0) {
0x0009f1a4 bne 0x9f0b4 | goto label_45;
| }
0x0009f1a6 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0009f1a8 mov r0, r4 | r0 = r4;
0x0009f1aa bl 0x48a9c | r0 = fcn_00048a9c (r0, r1);
0x0009f1ae cmp r0, 0 |
| if (r0 != 0) {
0x0009f1b0 bne 0x9f0b4 | goto label_45;
| }
0x0009f1b2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009f1b4 ldr r2, [r6] | r2 = *(r6);
0x0009f1b6 ldr r4, [r3, 0x18] | r4 = *((r3 + 0x18));
0x0009f1b8 ldr r5, [r3, 0x30] | r5 = *((r3 + 0x30));
0x0009f1ba mov sb, r2 | sb = r2;
0x0009f1bc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0009f1be lsls r7, r3, 0x18 | r7 = r3 << 0x18;
| if (r7 >= r3) {
0x0009f1c0 bmi 0x9f1d8 |
0x0009f1c2 ldr r3, [r2] | r3 = *(r2);
0x0009f1c4 cmp r3, 1 |
| if (r3 != 1) {
0x0009f1c6 bne 0x9f1d8 | goto label_180;
| }
0x0009f1c8 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x0009f1ca ldrb r2, [r3] | r2 = *(r3);
0x0009f1cc cmp r2, 0xa7 |
| if (r2 != 0xa7) {
0x0009f1ce bne 0x9f1d8 | goto label_180;
| }
0x0009f1d0 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009f1d4 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0009f1d6 beq 0x9f2a6 | goto label_51;
| }
| }
| label_180:
0x0009f1d8 ldr r0, [sp, 0x64] | r0 = var_64h;
0x0009f1da movs r2, 0x68 | r2 = 0x68;
0x0009f1dc movs r1, 0 | r1 = 0;
0x0009f1de blx 0x62ec | fcn_000062ec ();
0x0009f1e2 movs r3, 0xa7 | r3 = 0xa7;
0x0009f1e4 str r5, [sp, 0x14c] | *(arg_14ch) = r5;
0x0009f1e6 strb.w r3, [sp, 0x130] | *(arg_130h) = r3;
0x0009f1ea movs r3, 0x71 | r3 = 0x71;
0x0009f1ec ldr r7, [r4, 8] | r7 = *((r4 + 8));
0x0009f1ee strb.w r3, [sp, 0xfc] | *(arg_fch) = r3;
0x0009f1f2 add r3, sp, 0x130 | r3 += arg_130h;
0x0009f1f4 str r3, [sp, 0x68] | var_68h = r3;
0x0009f1f6 str r3, [sp, 0x108] | *(arg_108h) = r3;
0x0009f1f8 cmp r7, 0 |
| if (r7 == 0) {
0x0009f1fa beq 0x9f2fc | goto label_181;
| }
0x0009f1fc mov sl, sb | sl = sb;
0x0009f1fe str r6, [sp, 0x6c] | var_6ch = r6;
0x0009f200 str.w fp, [sp, 0x88] | __asm ("str.w fp, [arg_88h]");
0x0009f204 b 0x9f20c |
| while (r3 == 0) {
| label_46:
0x0009f206 ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x0009f208 cmp r7, 0 |
| if (r7 == 0) {
0x0009f20a beq 0x9f2f6 | goto label_182;
| }
0x0009f20c ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
0x0009f210 cmp r3, 0 |
0x0009f212 beq 0x9f206 |
| }
0x0009f214 ldrh.w fp, [r7, 0x32] | fp = *((r7 + 0x32));
0x0009f218 ldr.w r2, [sl] | r2 = *(sl);
0x0009f21c cmp r2, fp |
| if (r2 != fp) {
0x0009f21e bne 0x9f206 | goto label_46;
| }
0x0009f220 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
| if (r2 == 0) {
0x0009f222 cbz r2, 0x9f23c | goto label_183;
| }
0x0009f224 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009f226 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0009f228 cmp r1, 0 |
| if (r1 == 0) {
0x0009f22a beq 0x9f206 | goto label_46;
| }
0x0009f22c mov r3, r5 | r3 = r5;
0x0009f22e mov r0, r8 | r0 = r8;
0x0009f230 bl 0x4af40 | r0 = fcn_0004af40 (r0, r1, r2, r3);
0x0009f234 cmp r0, 0 |
| if (r0 != 0) {
0x0009f236 bne 0x9f206 | goto label_46;
| }
0x0009f238 ldrh.w fp, [r7, 0x32] | fp = *((r7 + 0x32));
| label_183:
0x0009f23c cmp.w fp, 0 |
| if (fp == 0) {
0x0009f240 beq 0x9f29e | goto label_184;
| }
0x0009f242 movs r2, 0 | r2 = 0;
0x0009f244 mov sb, r7 | sb = r7;
0x0009f246 str.w sl, [sp, 0x34] | __asm ("str.w sl, [var_34h]");
0x0009f24a mov r6, fp | r6 = fp;
0x0009f24c mov sl, r5 | sl = r5;
0x0009f24e mov r7, r2 | r7 = r2;
0x0009f250 ldr.w r2, [sb, 0x20] | r2 = *((sb + 0x20));
0x0009f254 ldr.w r2, [r2, r7, lsl 2] | offset_10 = r7 << 2;
| r2 = *((r2 + offset_10));
0x0009f258 str r2, [sp, 0x104] | *(arg_104h) = r2;
0x0009f25a ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x0009f25e ldrsh.w r2, [r2, r7, lsl 1] | offset_11 = r7 << 1;
| r2 = *((r2 + offset_11));
0x0009f262 adds r4, r2, 2 | r4 = r2 + 2;
| if (r4 == r2) {
0x0009f264 beq 0x9f2da | goto label_185;
| }
0x0009f266 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009f268 strh.w r2, [sp, 0x150] | *(arg_150h) = r2;
0x0009f26c str r3, [sp, 0x108] | *(arg_108h) = r3;
| label_50:
0x0009f26e ldr.w fp, [sp, 0x64] | fp = var_64h;
0x0009f272 ldr r5, [sp, 0x34] | r5 = var_34h;
0x0009f274 movs r4, 0 | r4 = 0;
0x0009f276 ldr r1, [r5, 8] | r1 = *((r5 + 8));
| if (r1 == 0) {
0x0009f278 cbz r1, 0x9f288 | void (*0x9f288)() ();
| }
| label_184:
0x0009f29e ldr r6, [sp, 0x6c] | r6 = var_6ch;
0x0009f2a0 ldr.w fp, [sp, 0x88] | fp = *(arg_88h);
0x0009f2a4 str r7, [r6, 0x1c] | *((r6 + 0x1c)) = r7;
| label_51:
0x0009f2a6 ldr r6, [r6, 0x10] | r6 = *((r6 + 0x10));
0x0009f2a8 add.w fp, fp, 1 |
0x0009f2ac cmp r6, 0 |
| if (r6 != 0) {
0x0009f2ae bne.w 0x9f192 | goto label_47;
| }
| label_179:
0x0009f2b2 ldrd sl, r7, [sp, 0x98] | __asm ("ldrd sl, r7, [arg_98h]");
0x0009f2b6 ldr.w sb, [sp, 0xa0] | sb = *(arg_a0h);
| label_178:
0x0009f2ba ldr r7, [r7, 0x10] | r7 = *((r7 + 0x10));
0x0009f2bc cmp r7, 0 |
| if (r7 == 0) {
0x0009f2be beq.w 0x9edb0 | goto label_48;
| }
0x0009f2c2 ldr r1, [r7] | r1 = *(r7);
0x0009f2c4 b 0x9f160 | goto label_49;
| label_185:
0x0009f2da ldr.w r2, [sb, 0x28] | r2 = *((sb + 0x28));
0x0009f2de add.w r2, r2, r7, lsl 4 | r2 += (r7 << 4);
0x0009f2e2 ldr.w fp, [r2, 8] | fp = *((r2 + 8));
0x0009f2e6 ldrb.w r1, [fp] | r1 = *(fp);
0x0009f2ea cmp r1, 0x71 |
0x0009f2ec it ne |
| if (r1 != 0x71) {
0x0009f2ee strne fp, [sp, 0x108] | *(arg_108h) = fp;
| goto label_186;
| }
| if (r1 != 0x71) {
| label_186:
0x0009f2f2 bne 0x9f26e | goto label_50;
| }
| label_182:
0x0009f2f6 ldr r6, [sp, 0x6c] | r6 = var_6ch;
0x0009f2f8 ldr.w fp, [sp, 0x88] | fp = *(arg_88h);
| label_181:
0x0009f2fc ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0009f2fe cmp r3, 0 |
| if (r3 != 0) {
0x0009f300 bne 0x9f2a6 | goto label_51;
| }
0x0009f302 mov ip, fp |
0x0009f304 cmp.w fp, 0 |
| if (fp == 0) {
0x0009f308 bne 0x9f30e |
0x0009f30a ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
| if (r3 == 0) {
0x0009f30c cbz r3, 0x9f332 | goto label_187;
| }
| }
0x0009f30e ldr.w r2, [pc, 0x894] |
0x0009f312 add r4, sp, 0x164 | r4 += arg_164h;
0x0009f314 add.w r3, ip, 1 | r3 = ip + 1;
0x0009f318 mov r1, r4 | r1 = r4;
0x0009f31a movs r0, 0x10 | r0 = 0x10;
0x0009f31c add r2, pc | r2 = 0x13eec6;
0x0009f31e bl 0x56488 | fcn_00056488 (r0, r1);
| do {
0x0009f322 ldr.w r1, [pc, 0x884] |
0x0009f326 mov r2, r4 | r2 = r4;
0x0009f328 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009f32a add r1, pc | r1 = 0x13eed8;
0x0009f32c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009f330 b 0x9f126 | goto label_52;
| label_187:
0x0009f332 add r4, sp, 0x164 | r4 += arg_164h;
0x0009f334 strb.w fp, [sp, 0x164] | *(arg_164h) = fp;
0x0009f338 b 0x9f322 |
| } while (1);
| label_152:
0x0009f33a ldr.w r1, [pc, 0x870] |
0x0009f33e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009f340 add r1, pc | r1 = 0x13eef2;
0x0009f342 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009f346 b 0x9f126 | goto label_52;
| label_137:
0x0009f348 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009f34a ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 == 0) {
0x0009f34c cbnz r3, 0x9f354 |
0x0009f34e bl 0x41b18 | r0 = fcn_00041b18 (r0, r1);
0x0009f352 mov r3, r0 | r3 = r0;
| }
0x0009f354 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009f356 ldr.w ip, [r3, 0x6c] | ip = *((r3 + 0x6c));
0x0009f35a ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
0x0009f35e cmp r2, 1 |
0x0009f360 it ne |
| if (r2 == 1) {
0x0009f362 movne r2, 0 | r2 = 0;
| }
| if (r2 == 1) {
0x0009f364 beq 0x9f3da | goto label_188;
| }
| label_57:
0x0009f366 cmp.w ip, 1 |
| if (ip <= 1) {
0x0009f36a ble 0x9f3d2 | goto label_189;
| }
0x0009f36c ldr r1, [r3] | r1 = *(r3);
0x0009f36e movs r0, 0x18 | r0 = 0x18;
0x0009f370 ldr r6, [sp, 0x30] | r6 = var_30h;
0x0009f372 movs r7, 1 | r7 = 1;
0x0009f374 ldrb.w lr, [r1, 0x57] |
0x0009f378 ldr.w r1, [pc, 0x834] |
0x0009f37c add r1, pc | r1 = 0x13ef30;
0x0009f37e adds r5, r1, 4 | r5 = r1 + 4;
0x0009f380 b 0x9f396 | goto label_190;
| label_54:
0x0009f382 cmp r4, 0xad |
| if (r4 != 0xad) {
0x0009f384 bne 0x9f38e | goto label_55;
| }
0x0009f386 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0009f388 cmp r1, r2 |
| if (r1 == r2) {
0x0009f38a beq.w 0x9e7ee | goto label_53;
| }
| label_55:
0x0009f38e adds r7, 1 | r7++;
0x0009f390 adds r0, 0x18 | r0 += 0x18;
0x0009f392 cmp ip, r7 |
| if (ip == r7) {
0x0009f394 beq 0x9f3d2 | goto label_189;
| }
| label_190:
0x0009f396 mov r1, r5 | r1 = r5;
0x0009f398 cmp.w lr, 0 |
| if (lr == 0) {
0x0009f39c bne 0x9f3a2 |
0x0009f39e ldr r1, [r3, 0x68] | r1 = *((r3 + 0x68));
0x0009f3a0 add r1, r0 | r1 += r0;
| }
0x0009f3a2 ldrb r4, [r1] | r4 = *(r1);
0x0009f3a4 cmp r4, 0x70 |
| if (r4 != 0x70) {
0x0009f3a6 bne 0x9f382 | goto label_54;
| }
0x0009f3a8 ldr r4, [r1, 0xc] | r4 = *((r1 + 0xc));
0x0009f3aa cmp fp, r4 |
| if (fp != r4) {
0x0009f3ac bne 0x9f38e | goto label_55;
| }
0x0009f3ae ldr r4, [r1, 8] | r4 = *((r1 + 8));
0x0009f3b0 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x0009f3b2 cmp r4, r1 |
| if (r4 == r1) {
0x0009f3b4 beq.w 0x9e7ee | goto label_53;
| }
0x0009f3b8 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0009f3ba cmp r1, 0 |
| if (r1 == 0) {
0x0009f3bc beq 0x9f38e | goto label_55;
| }
0x0009f3be mov r8, r3 | r8 = r3;
| label_56:
0x0009f3c0 ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x0009f3c2 cmp r4, r3 |
| if (r4 == r3) {
0x0009f3c4 beq.w 0x9e7ee | goto label_53;
| }
0x0009f3c8 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0009f3ca cmp r1, 0 |
| if (r1 != 0) {
0x0009f3cc bne 0x9f3c0 | goto label_56;
| }
0x0009f3ce mov r3, r8 | r3 = r8;
0x0009f3d0 b 0x9f38e | goto label_55;
| label_189:
0x0009f3d2 movs r3, 0 | r3 = 0;
0x0009f3d4 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009f3d6 b.w 0x9e8d8 | goto label_43;
| label_188:
0x0009f3da ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009f3dc ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009f3de ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x0009f3e0 ldr r0, [r1] | r0 = *(r1);
| if (r2 != 0) {
0x0009f3e2 cbnz r2, 0x9f3ec | goto label_191;
| }
0x0009f3e4 b 0x9f366 | goto label_57;
| label_58:
0x0009f3e6 ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x0009f3e8 cmp r2, 0 |
| if (r2 == 0) {
0x0009f3ea beq 0x9f366 | goto label_57;
| }
| label_191:
0x0009f3ec ldr r1, [r2] | r1 = *(r2);
0x0009f3ee cmp r0, r1 |
| if (r0 != r1) {
0x0009f3f0 bne 0x9f3e6 | goto label_58;
| }
0x0009f3f2 b 0x9f366 | goto label_57;
| label_136:
0x0009f3f4 ldr.w r3, [pc, 0x7bc] |
0x0009f3f8 add r3, pc | r3 = 0x13efb0;
0x0009f3fa adds r3, 4 | r3 += 4;
0x0009f3fc b.w 0x9e7dc | goto label_59;
| label_177:
0x0009f400 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x0009f402 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009f404 mov r0, r4 | r0 = r4;
0x0009f406 bl 0x30a7c | fcn_00030a7c (r0, r1);
0x0009f40a ldr r1, [sp, 0x54] | r1 = var_54h_2;
0x0009f40c mov r0, r4 | r0 = r4;
0x0009f40e bl 0x30cbc | fcn_00030cbc (r0, r1);
0x0009f412 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0009f414 cmp r1, 0 |
| if (r1 == 0) {
0x0009f416 beq.w 0x9eae4 | goto label_60;
| }
0x0009f41a mov r0, r4 | r0 = r4;
0x0009f41c bl 0x30f4c | fcn_00030f4c (r0, r1);
0x0009f420 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009f422 cmp r3, 0 |
| if (r3 == 0) {
0x0009f424 beq.w 0x9eaba | goto label_61;
| }
0x0009f428 ldr.w r2, [pc, 0x78c] |
0x0009f42c ldr.w r3, [pc, 0x78c] | r3 = *(0x9fbbc);
0x0009f430 add r2, pc | r2 = 0x13efec;
0x0009f432 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009f434 ldr r2, [r3] | r2 = imp.atan;
0x0009f436 ldr r3, [sp, 0x174] | r3 = *(arg_174h);
0x0009f438 eors r2, r3 | r2 ^= r3;
0x0009f43a mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0009f43e beq.w 0x9ea92 | goto label_29;
| }
| label_126:
0x0009f442 blx 0x6430 | fcn_00006430 ();
0x0009f446 mov.w fp, 0x8000 |
0x0009f44a sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x0009f44e movt fp, 0xffff |
0x0009f452 b.w 0x9e51c | goto label_62;
| label_159:
0x0009f498 lsls r2, r0, 0xf | r2 = r0 << 0xf;
| if (r2 >= r0) {
0x0009f49a bpl.w 0x9e636 | goto label_37;
| }
0x0009f49e b 0x9eca2 | goto label_63;
| label_158:
0x0009f4a0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009f4a2 ldr r2, [r0, 0x3c] | r2 = *((r0 + 0x3c));
0x0009f4a4 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x0009f4a6 cmp r2, r3 |
| if (r2 != r3) {
0x0009f4a8 bne.w 0x9ec52 | goto label_64;
| }
0x0009f4ac b.w 0x9e636 | goto label_37;
| label_157:
0x0009f4b0 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009f4b2 ldrsh.w r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x0009f4b6 cmp r3, 0 |
| if (r3 >= 0) {
0x0009f4b8 blt 0x9f4d2 |
0x0009f4ba ldrb.w r3, [r2, 0x2a] | r3 = *((r2 + 0x2a));
0x0009f4be cmp r3, 0xb |
0x0009f4c0 it eq |
| if (r3 != 0xb) {
0x0009f4c2 moveq r3, 2 | r3 = 2;
| }
0x0009f4c4 str r3, [sp, 0x64] | var_64h = r3;
0x0009f4c6 b.w 0x9ebdc | goto label_65;
| }
0x0009f4d2 movs r3, 2 | r3 = 2;
0x0009f4d4 str r3, [sp, 0x64] | var_64h = r3;
0x0009f4d6 b.w 0x9ebdc | goto label_65;
| label_145:
0x0009fa54 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009fa56 ldr r1, [pc, 0x178] |
0x0009fa58 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009fa5a adds r2, 8 | r2 += 8;
0x0009fa5c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0009fa60 add r1, pc | r1 = 0x13f636;
0x0009fa62 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009fa66 b.w 0x9e532 | goto label_24;
| label_149:
0x0009fa6a mov r6, r4 | r6 = r4;
0x0009fa6c b.w 0x9e9e6 | goto label_66;
| label_147:
0x0009fa70 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009fa72 ldrb.w r2, [r2, 0x95] | r2 = *((r2 + 0x95));
0x0009fa76 cmp r2, 0 |
| if (r2 != 0) {
0x0009fa78 bne.w 0x9edac | goto label_67;
| }
0x0009fa7c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009fa7e str r2, [sp] | *(sp) = r2;
0x0009fa80 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fa82 ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x0009fa84 adds r3, 1 | r3++;
0x0009fa86 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x0009fa88 movs r1, 0x47 | r1 = 0x47;
0x0009fa8a str r3, [sp, 0x70] | *(arg_70h) = r3;
0x0009fa8c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fa90 b.w 0x9e978 | goto label_39;
| label_146:
0x0009fa94 movs r3, 0 | r3 = 0;
0x0009fa96 str r3, [sp, 0x70] | *(arg_70h) = r3;
0x0009fa98 b.w 0x9e978 | goto label_39;
| label_165:
0x0009fad8 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009fadc bne.w 0x9ee42 | goto label_68;
| }
0x0009fae0 sub.w r3, r7, fp | r3 = r7 - fp;
0x0009fae4 cmp.w sb, 0 |
| if (sb != 0) {
0x0009fae8 bne.w 0x9ee6e | goto label_69;
| }
0x0009faec ldrh r3, [r2, 8] | r3 = *((r2 + 8));
0x0009faee cmp r3, 0 |
| if (r3 == 0) {
0x0009faf0 beq 0x9fb8a | goto label_192;
| }
0x0009faf2 ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
0x0009faf6 cmp r2, 0 |
| if (r2 != 0) {
0x0009faf8 bne 0x9fb8a | goto label_192;
| }
0x0009fafa ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
| if (r1 == 0) {
0x0009fafc cbz r1, 0x9fb0c | goto label_73;
| }
0x0009fafe ldr r2, [r1] | r2 = *(r1);
0x0009fb00 cmp r2, r3 |
| if (r2 < r3) {
0x0009fb02 blt 0x9fb8a | goto label_192;
| }
| label_72:
0x0009fb04 add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0009fb08 ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| do {
| label_73:
0x0009fb0c mov r2, r4 | r2 = r4;
0x0009fb0e mov r0, r6 | r0 = r6;
0x0009fb10 bl 0x88324 | fcn_00088324 (r0, r1, r2);
0x0009fb14 adds r4, 1 | r4++;
0x0009fb16 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009fb1a b.w 0x9ee9c | goto label_70;
| label_169:
0x0009fb1e movs r1, 0x5e | r1 = 0x5e;
0x0009fb20 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fb22 mov r2, sl | r2 = sl;
0x0009fb24 str r4, [sp] | *(sp) = r4;
0x0009fb26 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fb2a ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009fb2e b.w 0x9ee9a | goto label_71;
| label_168:
0x0009fb32 ldrh r3, [r2, 8] | r3 = *((r2 + 8));
| if (r3 == 0) {
0x0009fb34 cbz r3, 0x9fb48 | goto label_193;
| }
0x0009fb36 ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
| if (r2 != 0) {
0x0009fb3a cbnz r2, 0x9fb48 | goto label_193;
| }
0x0009fb3c ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x0009fb3e cmp r1, 0 |
0x0009fb40 beq 0x9fb0c |
| } while (r1 == 0);
0x0009fb42 ldr r0, [r1] | r0 = *(r1);
0x0009fb44 cmp r0, r3 |
| if (r0 >= r3) {
0x0009fb46 bge 0x9fb04 | goto label_72;
| }
| label_193:
0x0009fb48 movs r1, 0 | r1 = 0;
0x0009fb4a b 0x9fb0c | goto label_73;
| label_175:
0x0009fb64 movs r3, 0 | r3 = 0;
0x0009fb66 ldr r2, [sp, 0x70] | r2 = *(arg_70h);
0x0009fb68 str r3, [sp] | *(sp) = r3;
0x0009fb6a movs r1, 0x56 | r1 = 0x56;
0x0009fb6c ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fb6e movs r3, 1 | r3 = 1;
0x0009fb70 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fb74 b.w 0x9f014 | goto label_74;
| label_173:
0x0009fb78 movs r2, 0 | r2 = 0;
0x0009fb7a ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x0009fb7c ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fb7e movs r1, 0x4b | r1 = 0x4b;
0x0009fb80 str r2, [sp] | *(sp) = r2;
0x0009fb82 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fb86 b.w 0x9eed0 | goto label_75;
| label_192:
0x0009fb8a mov r1, sb | r1 = sb;
0x0009fb8c b 0x9fb0c | goto label_73;
| label_171:
0x0009fbdc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009fbde adds r1, 1 | r1++;
0x0009fbe0 bl 0x27744 | fcn_00027744 (r0, r1);
0x0009fbe4 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009fbe6 mov r7, r0 | r7 = r0;
0x0009fbe8 cmp r3, 0 |
| if (r3 < 0) {
0x0009fbea blt.w 0x9fd0e | goto label_194;
| }
0x0009fbee ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009fbf0 cmp r3, 0 |
| if (r3 != 0) {
0x0009fbf2 bne.w 0x9fcfe | goto label_195;
| }
0x0009fbf6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009fbf8 ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x0009fbfa cbz r3, 0x9fc0c |
0x0009fbfc ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_50h]");
0x0009fc00 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x0009fc04 mov r2, r7 | r2 = r7;
0x0009fc06 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0009fc08 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
| label_78:
0x0009fc0c ldr r5, [sp, 0x38] | r5 = var_38h;
0x0009fc0e movs r4, 0 | r4 = 0;
0x0009fc10 mov r3, r4 | r3 = r4;
0x0009fc12 mov r2, r7 | r2 = r7;
0x0009fc14 movs r1, 0x33 | r1 = 0x33;
0x0009fc16 str r4, [sp] | *(sp) = r4;
0x0009fc18 mov r0, r5 | r0 = r5;
0x0009fc1a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fc1e mov r3, r7 | r3 = r7;
0x0009fc20 mov.w r2, -1 | r2 = -1;
0x0009fc24 movs r1, 0x47 | r1 = 0x47;
0x0009fc26 str r4, [sp] | *(sp) = r4;
0x0009fc28 mov r4, r0 | r4 = r0;
0x0009fc2a mov r0, r5 | r0 = r5;
0x0009fc2c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fc30 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009fc32 cmp r4, 0 |
0x0009fc34 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x0009fc36 ldr r3, [r1] | r3 = *(r1);
0x0009fc38 it lt |
| if (r4 >= 0) {
0x0009fc3a addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0009fc3e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009fc42 cmp r3, 0 |
| if (r3 != 0) {
0x0009fc44 bne 0x9fcf6 | goto label_196;
| }
0x0009fc46 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0009fc48 movs r1, 0x18 | r1 = 0x18;
0x0009fc4a mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_77:
0x0009fc4e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009fc50 movs r3, 0 | r3 = 0;
0x0009fc52 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fc54 mov r2, r7 | r2 = r7;
0x0009fc56 movs r1, 0xc | r1 = 0xc;
0x0009fc58 str r3, [sp] | *(sp) = r3;
0x0009fc5a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_79:
0x0009fc5e ldr r5, [sp, 0x30] | r5 = var_30h;
0x0009fc60 adds r4, r7, 1 | r4 = r7 + 1;
0x0009fc62 ldr r2, [sp, 0x7c] | r2 = *(arg_7ch);
0x0009fc64 movs r1, 0x50 | r1 = 0x50;
0x0009fc66 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fc68 ldrsh.w r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x0009fc6c subs r3, 1 | r3--;
0x0009fc6e str r3, [sp] | *(sp) = r3;
0x0009fc70 mov r3, r4 | r3 = r4;
0x0009fc72 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fc76 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0009fc78 tst.w r3, 0x60 |
0x0009fc7c bne 0x9fccc |
| while (1) {
0x0009fc7e ldr r3, [sp, 0x94] | r3 = *(arg_94h);
0x0009fc80 cmp r3, 2 |
| if (r3 != 2) {
0x0009fc82 beq 0x9fc8e |
0x0009fc84 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009fc86 mov r2, r4 | r2 = r4;
0x0009fc88 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fc8a bl 0x438fc | fcn_000438fc (r0, r1, r2);
| }
0x0009fc8e ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009fc90 movs r2, 0x7f | r2 = 0x7f;
0x0009fc92 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009fc94 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x0009fc98 ldr r1, [sp, 0x84] | r1 = *(arg_84h);
0x0009fc9a str r3, [sp, 0xc] | var_ch = r3;
0x0009fc9c ldrsh.w r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x0009fca0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009fca2 str r4, [sp, 4] | var_4h = r4;
0x0009fca4 subs r3, r7, r3 | r3 = r7 - r3;
0x0009fca6 subs r3, 1 | r3--;
0x0009fca8 str r3, [sp, 8] | var_8h_2 = r3;
0x0009fcaa movs r3, 1 | r3 = 1;
0x0009fcac str r3, [sp] | *(sp) = r3;
0x0009fcae movs r3, 0 | r3 = 0;
0x0009fcb0 bl 0x9c854 | fcn_0009c854 (r0, r1, r2, r3, r4, r5, r6);
0x0009fcb4 ldrsh.w r2, [r4, 0x22] | r2 = *((r4 + 0x22));
0x0009fcb8 adds r3, r2, 1 | r3 = r2 + 1;
| if (r2 == 0) {
0x0009fcba cbz r2, 0x9fcd8 | goto label_197;
| }
0x0009fcbc ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009fcbe ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x0009fcc0 cmp r3, r2 |
0x0009fcc2 it gt |
| if (r3 > r2) {
0x0009fcc4 strdgt r3, r7, [r1, 0x1c] | __asm ("strdgt r3, r7, [r1, 0x1c]");
| }
0x0009fcc8 b.w 0x9eebc | goto label_76;
0x0009fccc ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009fcce mov r1, r4 | r1 = r4;
0x0009fcd0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009fcd2 bl 0x87fec | fcn_00087fec (r0, r1, r2, r3);
0x0009fcd6 b 0x9fc7e |
| }
| label_197:
0x0009fcd8 cmp r7, 0 |
| if (r7 == 0) {
0x0009fcda beq.w 0x9eebc | goto label_76;
| }
0x0009fcde ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009fce0 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0009fce2 cmp r3, 7 |
| if (r3 > 7) {
0x0009fce4 bhi.w 0x9eebc | goto label_76;
| }
0x0009fce8 adds r2, r3, 1 | r2 = r3 + 1;
0x0009fcea adds r3, 0x26 | r3 += 0x26;
0x0009fcec strb r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
0x0009fcee str.w r7, [r1, r3, lsl 2] | __asm ("str.w r7, [r1, r3, lsl 2]");
0x0009fcf2 b.w 0x9eebc | goto label_76;
| label_196:
0x0009fcf6 ldr r3, [pc, 0x29c] |
0x0009fcf8 add r3, pc | r3 = 0x13fc92;
0x0009fcfa adds r3, 4 | r3 += 4;
0x0009fcfc b 0x9fc4e | goto label_77;
| label_195:
0x0009fcfe str r0, [sp] | *(sp) = r0;
0x0009fd00 mov r2, sl | r2 = sl;
0x0009fd02 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009fd04 movs r1, 0x5e | r1 = 0x5e;
0x0009fd06 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fd08 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fd0c b 0x9fc0c | goto label_78;
| label_194:
0x0009fd0e movs r3, 0 | r3 = 0;
0x0009fd10 mov.w r2, -1 | r2 = -1;
0x0009fd14 str r3, [sp] | *(sp) = r3;
0x0009fd16 movs r1, 0x47 | r1 = 0x47;
0x0009fd18 mov r3, r0 | r3 = r0;
0x0009fd1a ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fd1c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fd20 b 0x9fc5e | goto label_79;
| label_164:
0x0009fd22 movs r3, 0 | r3 = 0;
0x0009fd24 mov r2, r4 | r2 = r4;
0x0009fd26 movs r1, 0x4c | r1 = 0x4c;
0x0009fd28 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fd2a str r3, [sp] | *(sp) = r3;
0x0009fd2c adds r4, 1 | r4++;
0x0009fd2e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fd32 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009fd36 b.w 0x9ee9c | goto label_70;
| label_174:
0x0009fd9a ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009fd9c ldr r3, [sp, 0x90] | r3 = *(arg_90h);
0x0009fd9e ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
0x0009fda2 subs r3, 0 |
0x0009fda4 it ne |
| if (r3 == 0) {
0x0009fda6 movne r3, 1 | r3 = 1;
| }
0x0009fda8 cmp r2, 1 |
0x0009fdaa it eq |
| if (r2 == 1) {
0x0009fdac orreq r3, r3, 1 | r3 |= 1;
| goto label_198;
| }
| if (r3 == 0) {
| label_198:
0x0009fdb0 cbz r3, 0x9fdc4 | void (*0x9fdc4)() ();
| }
0x0009fe0e ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fe10 mov r2, sl | r2 = sl;
0x0009fe12 movs r1, 0x7a | r1 = 0x7a;
0x0009fe14 str r3, [sp] | *(sp) = r3;
0x0009fe16 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fe1a b.w 0x9f094 | goto label_80;
| label_176:
0x0009fe1e ldr r3, [r2, 0x70] | r3 = *((r2 + 0x70));
0x0009fe20 mov r0, r2 | r0 = r2;
0x0009fe22 cmp r3, 0 |
| if (r3 == 0) {
0x0009fe24 beq.w 0x9f0a2 | goto label_81;
| }
0x0009fe28 bl 0x4f4d8 | fcn_0004f4d8 (r0, r1);
0x0009fe2c b.w 0x9f0a2 | goto label_81;
| label_167:
0x0009fe38 ldrh r3, [r2, 8] | r3 = *((r2 + 8));
| if (r3 == 0) {
0x0009fe3a cbz r3, 0x9fe64 | goto label_199;
| }
0x0009fe3c ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
| if (r2 != 0) {
0x0009fe40 cbnz r2, 0x9fe64 | goto label_199;
| }
0x0009fe42 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
| if (r1 == 0) {
0x0009fe44 cbz r1, 0x9fe54 | goto label_200;
| }
0x0009fe46 ldr r2, [r1] | r2 = *(r1);
0x0009fe48 cmp r2, r3 |
| if (r2 < r3) {
0x0009fe4a blt 0x9fe64 | goto label_199;
| }
0x0009fe4c add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0009fe50 ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| do {
| label_200:
0x0009fe54 mov r2, r4 | r2 = r4;
0x0009fe56 mov r0, r6 | r0 = r6;
0x0009fe58 bl 0x88324 | fcn_00088324 (r0, r1, r2);
0x0009fe5c ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009fe60 b.w 0x9ee9a | goto label_71;
| label_199:
0x0009fe64 mov r1, r8 | r1 = r8;
0x0009fe66 b 0x9fe54 |
| } while (1);
| label_166:
0x0009fe68 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009fe6a cmp r2, 0 |
| if (r2 == 0) {
0x0009fe6c beq.w 0x9ee9a | goto label_71;
| }
0x0009fe70 movs r1, 0x4c | r1 = 0x4c;
0x0009fe72 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009fe74 mov r2, r4 | r2 = r4;
0x0009fe76 str r3, [sp] | *(sp) = r3;
0x0009fe78 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009fe7c ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009fe80 b.w 0x9ee9a | goto label_71;
| label_170:
0x0009fe84 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0009fe86 cmp r2, 0 |
| if (r2 == 0) {
0x0009fe88 beq.w 0x9ee9a | goto label_71;
| }
0x0009fe8c ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009fe8e mov r0, r6 | r0 = r6;
0x0009fe90 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0009fe94 mov r2, r4 | r2 = r4;
0x0009fe96 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0009fe98 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x0009fe9c ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009fea0 b.w 0x9ee9a | goto label_71;
| label_162:
0x0009ff32 ldr r1, [sp, 0x80] | r1 = *(arg_80h);
0x0009ff34 mov r0, r4 | r0 = r4;
0x0009ff36 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009ff38 str r5, [sp] | *(sp) = r5;
0x0009ff3a add r2, r1 | r2 += r1;
0x0009ff3c movs r1, 0x50 | r1 = 0x50;
0x0009ff3e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009ff42 b.w 0x9ede0 | goto label_82;
| label_161:
0x0009ff46 ldr r6, [sp, 0x40] | r6 = var_40h;
0x0009ff48 b.w 0x9ede0 | goto label_82;
0x0009ff4a itet mi |
| if (r1 >= 0x50) {
| label_160:
0x0009ff4c ldrmi r4, [sp, 0x38] | r4 = var_38h;
| }
| if (r1 < 0x50) {
0x0009ff4e movpl r3, 0 | r3 = 0;
| }
| if (r1 >= 0x50) {
0x0009ff50 movmi r2, sl | r2 = sl;
| }
0x0009ff52 movs r1, 0x23 | r1 = 0x23;
0x0009ff54 str r3, [sp] | *(sp) = r3;
0x0009ff56 mov r0, r4 | r0 = r4;
0x0009ff58 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009ff5c ldr.w r8, [r4, 0x6c] | r8 = *((r4 + 0x6c));
0x0009ff60 mov r6, r0 | r6 = r0;
0x0009ff62 b.w 0x9ede2 | goto label_83;
| label_139:
0x0009ff66 ldr r3, [r0, 0x2c] | r3 = *((r0 + 0x2c));
| do {
0x0009ff68 adds r5, r3, 1 | r5 = r3 + 1;
0x0009ff6a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009ff6c str r5, [r3, 0x2c] | *((r3 + 0x2c)) = r5;
0x0009ff6e b.w 0x9e826 | goto label_84;
| label_138:
0x0009ff72 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009ff74 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0009ff76 adds r7, r3, 1 | r7 = r3 + 1;
0x0009ff78 mov r3, r7 | r3 = r7;
0x0009ff7a b 0x9ff68 |
| } while (1);
| label_140:
0x0009ff7c ldr r3, [pc, 0x1c] |
0x0009ff7e add r3, pc | r3 = 0x13ff1e;
0x0009ff80 adds r3, 4 | r3 += 4;
0x0009ff82 b.w 0x9e8a0 | goto label_85;
| label_154:
0x0009ff86 ldr r2, [pc, 0x18] |
0x0009ff88 add r2, pc | r2 = 0x13ff2e;
0x0009ff8a b.w 0x9ea46 | goto label_86;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8d0fc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008d0fc () | void fcn_0008d0fc (int16_t arg_4h, int16_t arg_ch, int16_t arg_14h, int16_t arg_1ch, int16_t arg_2ch, int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_37h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int32_t var_40h_2;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0008d0fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008d100 mov r5, r0 | r5 = r0;
0x0008d102 ldr.w r0, [pc, 0x53c] |
0x0008d106 mov fp, r1 |
0x0008d108 sub sp, 0x5c |
0x0008d10a ldr.w r3, [pc, 0x538] | r3 = *(0x8d646);
0x0008d10e ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x0008d110 add r0, pc | r0 = 0x11a756;
0x0008d112 ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x0008d114 ldr r3, [r0, r3] |
0x0008d116 ands r6, r1, 0x40 | r6 = r1 & 0x40;
0x0008d11a ldr r3, [r3] | r3 = imp.atan;
0x0008d11c str r3, [sp, 0x54] | var_54h = r3;
0x0008d11e mov.w r3, 0 | r3 = 0;
0x0008d122 str r2, [sp, 8] | var_8h = r2;
| if (r6 != r1) {
0x0008d124 bne.w 0x8d3ec | goto label_18;
| }
0x0008d128 ldr r7, [r5, 0x34] | r7 = *((r5 + 0x34));
0x0008d12a cmp r7, 0 |
| if (r7 == 0) {
0x0008d12c beq 0x8d20c | goto label_19;
| }
| label_0:
0x0008d12e ldr.w r7, [fp, 0xc] | r7 = *(arg_ch);
0x0008d132 ldrb r3, [r7] | r3 = *(r7);
0x0008d134 cmp r3, 0xb0 |
0x0008d136 it eq |
| if (r3 != 0xb0) {
0x0008d138 ldrbeq r3, [r7, 2] | r3 = *((r7 + 2));
| }
0x0008d13a cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0008d13c beq.w 0x8d494 | goto label_20;
| }
0x0008d140 cmp r3, 0x8a |
0x0008d142 itett eq |
| if (r3 != 0x8a) {
0x0008d144 ldreq r3, [r7, 0x14] | r3 = *((r7 + 0x14));
| }
| if (r3 == 0x8a) {
0x0008d146 movne r8, 1 | r8 = 1;
| }
| if (r3 != 0x8a) {
0x0008d14a ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r3 == 0x8a) {
0x0008d14c ldr.w r8, [r3] | r8 = *(r3);
| }
| label_9:
0x0008d150 ldr r2, [sp, 8] | r2 = var_8h;
0x0008d152 movs r3, 0 | r3 = 0;
0x0008d154 movs r1, 0x76 | r1 = 0x76;
0x0008d156 mov r0, r4 | r0 = r4;
0x0008d158 str.w r2, [fp, 0x1c] | __asm ("str.w r2, [arg_1ch]");
0x0008d15c str r3, [sp] | *(sp) = r3;
0x0008d15e mov r3, r8 | r3 = r8;
0x0008d160 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d164 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0008d168 str r0, [sp, 0x10] | var_10h = r0;
0x0008d16a lsls r2, r3, 0x13 | r2 = r3 << 0x13;
| if (r2 < r3) {
0x0008d16c bmi 0x8d1f8 | goto label_21;
| }
0x0008d16e ldr.w r1, [pc, 0x4d8] |
0x0008d172 mov r0, r4 | r0 = r4;
0x0008d174 add r1, pc | r1 = 0x11a7c2;
0x0008d176 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
| do {
0x0008d17a ldr r0, [r5] | r0 = *(r5);
0x0008d17c movs r2, 1 | r2 = 1;
0x0008d17e mov r1, r8 | r1 = r8;
0x0008d180 bl 0x38b20 | fcn_00038b20 (r0, r1, r2);
0x0008d184 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0008d188 str r0, [sp, 0xc] | var_ch = r0;
0x0008d18a lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 >= r3) {
0x0008d18c bpl 0x8d24a | goto label_22;
| }
0x0008d18e ldr.w sl, [fp, 0x14] | sl = *(arg_14h);
0x0008d192 ldr.w sb, [sl, 0x1c] | sb = *((sl + 0x1c));
0x0008d196 cmp r6, 0 |
| if (r6 != 0) {
0x0008d198 bne.w 0x8d424 | goto label_23;
| }
0x0008d19c ldr.w r3, [pc, 0x4ac] |
0x0008d1a0 add r3, pc | r3 = 0x11a7f0;
| label_5:
0x0008d1a2 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x0008d1a6 movs r1, 1 | r1 = 1;
0x0008d1a8 mov r0, r5 | r0 = r5;
0x0008d1aa str r2, [sp] | *(sp) = r2;
0x0008d1ac ldr.w r2, [pc, 0x4a0] |
0x0008d1b0 add r2, pc | r2 = 0x11a804;
0x0008d1b2 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008d1b6 ldr.w r3, [sb] | r3 = *(sb);
0x0008d1ba cmp r3, r8 |
| if (r3 == r8) {
0x0008d1bc beq.w 0x8d4f8 | goto label_24;
| }
| label_1:
0x0008d1c0 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x0008d1c2 cbz r3, 0x8d1d2 |
0x0008d1c4 mov r2, r3 | r2 = r3;
0x0008d1c6 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0008d1c8 mvn r3, 7 | r3 = ~7;
0x0008d1cc mov r0, r4 | r0 = r4;
0x0008d1ce invalid |
0x0008d1d0 invalid |
| }
0x0008d1d2 cmp r6, 0 |
| if (r6 != 0) {
0x0008d1d4 bne.w 0x8d3f0 | goto label_25;
| }
| label_4:
0x0008d1d8 ldr.w r2, [pc, 0x478] |
0x0008d1dc ldr.w r3, [pc, 0x464] | r3 = *(0x8d644);
0x0008d1e0 add r2, pc | r2 = 0x11a838;
0x0008d1e2 ldr r3, [r2, r3] | r3 = imp.atan;
0x0008d1e4 ldr r2, [r3] | r2 = imp.atan;
0x0008d1e6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008d1e8 eors r2, r3 | r2 ^= r3;
0x0008d1ea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008d1ee bne.w 0x8d636 | goto label_26;
| }
0x0008d1f2 add sp, 0x5c |
0x0008d1f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0008d1f8 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0008d1fc mov r0, r4 | r0 = r4;
0x0008d1fe ldr.w r1, [pc, 0x458] |
0x0008d202 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0008d204 add r1, pc | r1 = 0x11a862;
0x0008d206 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008d20a b 0x8d17a |
| } while (1);
| label_19:
0x0008d20c ands r6, r1, 0x2000000 | r6 = r1 & 0x2000000;
| if (r6 != r1) {
0x0008d210 bne.w 0x8d49c | goto label_27;
| }
0x0008d214 orr r1, r1, 0x2000000 | r1 |= 0x2000000;
0x0008d218 mov r2, r6 | r2 = r6;
0x0008d21a str.w r1, [fp, 4] | __asm ("str.w r1, [arg_4h]");
0x0008d21e mov r0, r4 | r0 = r4;
0x0008d220 str r6, [sp] | *(sp) = r6;
0x0008d222 movs r1, 0x4a | r1 = 0x4a;
0x0008d224 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008d226 adds r3, 1 | r3++;
0x0008d228 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0008d22a str.w r3, [fp, 0x30] | __asm ("str.w r3, [arg_30h]");
0x0008d22e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d232 adds r0, 1 | r0++;
0x0008d234 mov r3, r6 | r3 = r6;
0x0008d236 str.w r0, [fp, 0x2c] | __asm ("str.w r0, [arg_2ch]");
0x0008d23a mov r2, r6 | r2 = r6;
0x0008d23c str r6, [sp] | *(sp) = r6;
0x0008d23e movs r1, 0xe | r1 = 0xe;
0x0008d240 mov r0, r4 | r0 = r4;
0x0008d242 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d246 mov r6, r0 | r6 = r0;
0x0008d248 b 0x8d12e | goto label_0;
| label_22:
0x0008d24a ldr.w r8, [fp, 0x14] | r8 = *(arg_14h);
0x0008d24e cmp.w r8, 0 |
| if (r8 == 0) {
0x0008d252 beq 0x8d1c0 | goto label_1;
| }
0x0008d254 mov r0, r7 | r0 = r7;
0x0008d256 bl 0x25460 | r0 = fcn_00025460 (r0);
0x0008d25a cmp r0, 0x40 |
0x0008d25c it ls |
| if (r0 > 0x40) {
0x0008d25e movls r0, 0x41 | r0 = 0x41;
| }
| if (r0 > 0x40) {
0x0008d260 bhi.w 0x8d432 | goto label_28;
| }
0x0008d264 ldr r7, [sp, 0xc] | r7 = var_ch;
0x0008d266 strb.w r0, [sp, 0x37] | var_37h = r0;
| if (r7 != 0) {
0x0008d26a cbz r7, 0x8d278 |
| label_6:
0x0008d26c ldr.w r1, [fp, 0xc] | r1 = *(arg_ch);
0x0008d270 mov r0, r5 | r0 = r5;
0x0008d272 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0008d276 str r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
| }
| label_7:
0x0008d278 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0008d27a cmp r3, 0 |
| if (r3 == 0) {
0x0008d27c beq.w 0x8d446 | goto label_29;
| }
0x0008d280 subs r1, r3, 1 | r1 = r3 - 1;
0x0008d282 uxtb r1, r1 | r1 = (int8_t) r1;
0x0008d284 add.w r2, r1, 0x26 | r2 = r1 + 0x26;
0x0008d288 strb r1, [r5, 0x13] | *((r5 + 0x13)) = r1;
0x0008d28a ldr.w sb, [r5, r2, lsl 2] | offset_0 = r2 << 2;
| sb = *((r5 + offset_0));
0x0008d28e cmp r1, 0 |
| if (r1 == 0) {
0x0008d290 beq.w 0x8d63a | goto label_30;
| }
0x0008d294 subs r3, 2 | r3 -= 2;
0x0008d296 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008d298 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0008d29a adds r3, 0x26 | r3 += 0x26;
0x0008d29c ldr.w ip, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| ip = *((r5 + offset_1));
| label_8:
0x0008d2a0 ldr.w sl, [r8] | sl = *(r8);
0x0008d2a4 cmp.w sl, 0 |
| if (sl <= 0) {
0x0008d2a8 ble.w 0x8d462 | goto label_31;
| }
0x0008d2ac ldr r3, [pc, 0x3ac] |
0x0008d2ae mov r7, sb | r7 = sb;
0x0008d2b0 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x0008d2b4 add.w r8, r8, 0x18 | r8 += 0x18;
0x0008d2b8 mov sb, r5 | sb = r5;
0x0008d2ba mov fp, ip |
0x0008d2bc add r3, pc | r3 = 0x11a91c;
0x0008d2be str r3, [sp, 0x14] | var_14h = r3;
0x0008d2c0 ldr r3, [pc, 0x39c] |
0x0008d2c2 add r3, pc | r3 = 0x11a926;
0x0008d2c4 str r3, [sp, 0x18] | var_18h = r3;
0x0008d2c6 b 0x8d34a |
| while (r6 == 0) {
| label_3:
0x0008d2c8 movs r6, 0 | r6 = 0;
| label_2:
0x0008d2ca ldr.w r3, [sb, 8] | r3 = *((sb + 8));
| if (r3 != 0) {
0x0008d2ce cbz r3, 0x8d2da |
0x0008d2d0 mov r1, r5 | r1 = r5;
0x0008d2d2 mov r2, r7 | r2 = r7;
0x0008d2d4 mov r0, sb | r0 = sb;
0x0008d2d6 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
0x0008d2da movs r3, 1 | r3 = 1;
0x0008d2dc mov r2, r7 | r2 = r7;
0x0008d2de movs r1, 0x61 | r1 = 0x61;
0x0008d2e0 mov r0, r4 | r0 = r4;
0x0008d2e2 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008d2e6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d2ea ldr r3, [r4] | r3 = *(r4);
0x0008d2ec ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0008d2f0 cbnz r3, 0x8d316 |
0x0008d2f2 cmp r0, 0 |
0x0008d2f4 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x0008d2f6 it lt |
| if (r0 >= 0) {
0x0008d2f8 ldrlt r0, [r4, 0x6c] | r0 = *((r4 + 0x6c));
| }
0x0008d2fa mov.w r3, 1 | r3 = 1;
0x0008d2fe add.w r2, sp, 0x37 | r2 += var_37h;
0x0008d302 it lt |
| if (r0 >= 0) {
0x0008d304 addlt r0, r0, -1 | r0 += -1;
| }
0x0008d308 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0008d30c add.w r1, r1, r0, lsl 3 | r1 += (r0 << 3);
0x0008d310 mov r0, r4 | r0 = r4;
0x0008d312 bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
| }
0x0008d316 mov r3, fp | r3 = fp;
0x0008d318 ldr r2, [sp, 8] | r2 = var_8h;
0x0008d31a movs r1, 0x8a | r1 = 0x8a;
0x0008d31c mov r0, r4 | r0 = r4;
0x0008d31e str r7, [sp] | *(sp) = r7;
0x0008d320 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d324 ldr r3, [r4] | r3 = *(r4);
0x0008d326 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0008d32a cbnz r3, 0x8d33e |
0x0008d32c ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0008d32e add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0008d332 movs r2, 1 | r2 = 1;
0x0008d334 add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
0x0008d338 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0008d33a movs r2, 0xfd | r2 = 0xfd;
0x0008d33c strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x0008d33e subs.w sl, sl, 1 | sl--;
0x0008d342 add.w r8, r8, 0x10 | r8 += 0x10;
| if (sl == sl) {
0x0008d346 beq.w 0x8d458 | goto label_32;
| }
0x0008d34a ldr r5, [r8, -0x10] | r5 = *((r8 - 0x10));
0x0008d34e cmp r6, 0 |
0x0008d350 beq 0x8d2c8 |
| }
0x0008d352 mov.w r3, 1 | r3 = 1;
0x0008d356 strh.w r3, [sp, 0x4c] | var_4ch = r3;
0x0008d35a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008d35c str r3, [sp, 0x3c] | var_3ch = r3;
0x0008d35e ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008d360 str r3, [sp, 0x40] | var_40h = r3;
0x0008d362 movs r3, 0 | r3 = 0;
0x0008d364 str r3, [sp, 0x50] | var_50h = r3;
0x0008d366 cmp r5, 0 |
| if (r5 == 0) {
0x0008d368 beq 0x8d2ca | goto label_2;
| }
0x0008d36a mov r1, r5 | r1 = r5;
0x0008d36c add r0, sp, 0x38 | r0 += var_38h;
0x0008d36e bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0008d372 ldrh.w r3, [sp, 0x4c] | r3 = var_4ch;
0x0008d376 cmp r3, 0 |
| if (r3 != 0) {
0x0008d378 bne 0x8d2ca | goto label_2;
| }
0x0008d37a ldr r0, [r4] | r0 = *(r4);
0x0008d37c ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008d380 str r3, [sp, 0x20] | var_20h = r3;
| if (r3 == 0) {
0x0008d382 cbnz r3, 0x8d3e0 |
0x0008d384 subs r6, 1 | r6--;
0x0008d386 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0008d388 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008d38c lsls r3, r6, 3 | r3 = r6 << 3;
0x0008d38e strd r3, r2, [sp, 0x28] | __asm ("strd r3, r2, [var_2ch]");
0x0008d392 add r2, r3 | r2 += r3;
0x0008d394 mov r1, r2 | r1 = r2;
0x0008d396 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0008d398 str r1, [sp, 0x24] | var_24h = r1;
0x0008d39a ldrsb.w r1, [r1, 1] | r1 = *((r1 + 1));
0x0008d39e bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x0008d3a2 ldrd r3, r2, [sp, 0x20] | __asm ("ldrd r3, r2, [var_20h]");
0x0008d3a6 mov.w r1, 0xb8 | r1 = 0xb8;
0x0008d3aa str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0008d3ac ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008d3ae strh.w r1, [r2, r6, lsl 3] | offset_2 = r6 << 3;
| *((r2 + offset_2)) = r1;
0x0008d3b2 ldr r0, [r4] | r0 = *(r4);
0x0008d3b4 ldrb.w r2, [r0, 0x57] | r2 = *((r0 + 0x57));
0x0008d3b8 str r2, [sp, 0x20] | var_20h = r2;
| if (r2 != 0) {
0x0008d3ba cbnz r2, 0x8d3e0 | goto label_33;
| }
0x0008d3bc ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008d3be ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x0008d3c0 adds r3, 0x18 | r3 += 0x18;
0x0008d3c2 adds r6, r1, r3 | r6 = r1 + r3;
0x0008d3c4 str r1, [sp, 0x24] | var_24h = r1;
0x0008d3c6 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0008d3c8 ldrsb.w r1, [r6, 1] | r1 = *((r6 + 1));
0x0008d3cc str r3, [sp, 0x28] | var_28h = r3;
0x0008d3ce bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x0008d3d2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008d3d4 mov.w r1, 0xb8 | r1 = 0xb8;
0x0008d3d8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008d3da str r2, [r6, 0x10] | *((r6 + 0x10)) = r2;
0x0008d3dc ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008d3de strh r1, [r2, r3] | *((r2 + r3)) = r1;
| }
| label_33:
0x0008d3e0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008d3e2 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008d3e4 bic r3, r3, 0x2000000 | r3 = BIT_MASK (r3, 0x2000000);
0x0008d3e8 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0008d3ea b 0x8d2c8 | goto label_3;
| label_18:
0x0008d3ec movs r6, 0 | r6 = 0;
0x0008d3ee b 0x8d12e | goto label_0;
| label_25:
0x0008d3f0 ldr r3, [r4] | r3 = *(r4);
0x0008d3f2 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0008d3f4 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008d3f8 it lt |
| if (r6 >= 0) {
0x0008d3fa addlt r6, r2, -1 | r6 = r2 + -1;
| }
| if (r3 != 0) {
0x0008d3fe cbnz r3, 0x8d42a | goto label_34;
| }
0x0008d400 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0008d402 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008d406 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| do {
0x0008d40a movs r1, 1 | r1 = 1;
0x0008d40c str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008d40e mov r0, r4 | r0 = r4;
0x0008d410 ldrd r3, r2, [fp, 0x2c] | __asm ("ldrd r3, r2, [arg_2ch]");
0x0008d414 str r1, [sp] | *(sp) = r1;
0x0008d416 movs r1, 0x43 | r1 = 0x43;
0x0008d418 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d41c movs r3, 0 | r3 = 0;
0x0008d41e strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0008d420 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x0008d422 b 0x8d1d8 | goto label_4;
| label_23:
0x0008d424 ldr r3, [pc, 0x23c] |
0x0008d426 add r3, pc | r3 = 0x11aa8e;
0x0008d428 b 0x8d1a2 | goto label_5;
| label_34:
0x0008d42a ldr r3, [pc, 0x23c] |
0x0008d42c add r3, pc | r3 = 0x11aa9a;
0x0008d42e adds r3, 4 | r3 += 4;
0x0008d430 b 0x8d40a |
| } while (1);
| label_28:
0x0008d432 ldr r7, [sp, 0xc] | r7 = var_ch;
0x0008d434 cmp r0, 0x45 |
0x0008d436 it eq |
| if (r0 != 0x45) {
0x0008d438 moveq r0, 0x43 | r0 = 0x43;
| }
0x0008d43a strb.w r0, [sp, 0x37] | var_37h = r0;
0x0008d43e cmp r7, 0 |
| if (r7 != 0) {
0x0008d440 bne.w 0x8d26c | goto label_6;
| }
0x0008d444 b 0x8d278 | goto label_7;
| label_29:
0x0008d446 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x0008d448 add.w sb, r2, 1 | sb = r2 + 1;
0x0008d44c mov r3, sb | r3 = sb;
| label_17:
0x0008d44e add.w ip, r3, 1 |
0x0008d452 str.w ip, [r5, 0x2c] | __asm ("str.w ip, [r5, 0x2c]");
0x0008d456 b 0x8d2a0 | goto label_8;
| label_32:
0x0008d458 mov ip, fp |
0x0008d45a ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x0008d45e mov r5, sb | r5 = sb;
0x0008d460 mov sb, r7 | sb = r7;
| label_31:
0x0008d462 cmp.w sb, 0 |
| if (sb == 0) {
0x0008d466 beq 0x8d47a | goto label_35;
| }
0x0008d468 ldrb r1, [r5, 0x13] | r1 = *((r5 + 0x13));
0x0008d46a cmp r1, 7 |
| if (r1 > 7) {
0x0008d46c bhi.w 0x8d1c0 | goto label_1;
| }
0x0008d470 adds r0, r1, 1 | r0 = r1 + 1;
0x0008d472 adds r1, 0x26 | r1 += 0x26;
0x0008d474 strb r0, [r5, 0x13] | *((r5 + 0x13)) = r0;
0x0008d476 str.w sb, [r5, r1, lsl 2] | __asm ("str.w sb, [r5, r1, lsl 2]");
| label_35:
0x0008d47a cmp.w ip, 0 |
| if (ip == 0) {
0x0008d47e beq.w 0x8d1c0 | goto label_1;
| }
0x0008d482 ldrb r2, [r5, 0x13] | r2 = *((r5 + 0x13));
0x0008d484 cmp r2, 7 |
0x0008d486 itttt ls |
| if (r2 > 7) {
0x0008d488 addls r1, r2, 1 | r1 = r2 + 1;
| }
| if (r2 > 7) {
0x0008d48a addls r2, 0x26 | r2 += 0x26;
| }
| if (r2 > 7) {
0x0008d48c strbls r1, [r5, 0x13] | *((r5 + 0x13)) = r1;
| }
| if (r2 > 7) {
0x0008d48e strls ip, [r5, r2, lsl 2] | offset_3 = r2 << 2;
| *((r5 + offset_3)) = ip;
| }
0x0008d492 b 0x8d1c0 | goto label_1;
| label_20:
0x0008d494 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0008d496 ldr.w r8, [r3] | r8 = *(r3);
0x0008d49a b 0x8d150 | goto label_9;
| label_27:
0x0008d49c mov r3, r7 | r3 = r7;
0x0008d49e movs r1, 0xe | r1 = 0xe;
0x0008d4a0 mov r2, r7 | r2 = r7;
0x0008d4a2 mov r0, r4 | r0 = r4;
0x0008d4a4 str r7, [sp] | *(sp) = r7;
0x0008d4a6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d4aa ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0008d4ae mov r6, r0 | r6 = r0;
0x0008d4b0 lsls r1, r3, 0x13 | r1 = r3 << 0x13;
| if (r1 < r3) {
0x0008d4b2 bmi.w 0x8d608 | goto label_36;
| }
| label_14:
0x0008d4b6 movs r5, 0 | r5 = 0;
0x0008d4b8 movs r1, 9 | r1 = 9;
0x0008d4ba str r5, [sp] | *(sp) = r5;
0x0008d4bc mov r0, r4 | r0 = r4;
0x0008d4be ldrd r3, r2, [fp, 0x2c] | __asm ("ldrd r3, r2, [arg_2ch]");
0x0008d4c2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d4c6 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x0008d4ca movs r1, 0x73 | r1 = 0x73;
0x0008d4cc ldr r2, [sp, 8] | r2 = var_8h;
0x0008d4ce mov r0, r4 | r0 = r4;
0x0008d4d0 str r5, [sp] | *(sp) = r5;
0x0008d4d2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d4d6 ldr r3, [r4] | r3 = *(r4);
0x0008d4d8 cmp r6, r5 |
0x0008d4da ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0008d4dc ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008d4e0 it lt |
| if (r6 >= r5) {
0x0008d4e2 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x0008d4e6 cmp r3, 0 |
| if (r3 != 0) {
0x0008d4e8 bne 0x8d592 | goto label_37;
| }
0x0008d4ea ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0008d4ec add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008d4f0 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| label_10:
0x0008d4f4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008d4f6 b 0x8d1d8 | goto label_4;
| label_24:
0x0008d4f8 ldr r3, [sp, 8] | r3 = var_8h;
0x0008d4fa movs r2, 0 | r2 = 0;
0x0008d4fc mov r1, fp | r1 = fp;
0x0008d4fe ldr r0, [r5] | r0 = *(r5);
0x0008d500 strd r2, r2, [sp, 0x40] | __asm ("strd r2, r2, [var_40h]");
0x0008d504 str r3, [sp, 0x3c] | var_3ch = r3;
0x0008d506 movs r3, 0xb | r3 = 0xb;
0x0008d508 strb.w r3, [sp, 0x38] | var_38h = r3;
0x0008d50c str r2, [sp, 0x48] | var_48h = r2;
0x0008d50e bl 0x39628 | fcn_00039628 (r0, r1);
0x0008d512 movs r2, 0 | r2 = 0;
0x0008d514 str r0, [sp, 0x4c] | var_4ch = r0;
0x0008d516 mov r1, sl | r1 = sl;
0x0008d518 str r0, [sp, 8] | var_8h = r0;
0x0008d51a str.w r2, [sl, 8] | __asm ("str.w r2, [sl, 8]");
0x0008d51e ldr r0, [r5] | r0 = *(r5);
0x0008d520 bl 0x39f48 | r0 = fcn_00039f48 (r0, r1, r2, r3);
0x0008d524 mov r1, r0 | r1 = r0;
0x0008d526 ldr r0, [r5] | r0 = *(r5);
0x0008d528 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008d52c cmp r3, 0 |
| if (r3 == 0) {
0x0008d52e beq 0x8d61c | goto label_38;
| }
0x0008d530 mov.w sl, 1 | sl = 1;
0x0008d534 cmp r1, 0 |
| if (r1 == 0) {
0x0008d536 beq 0x8d5c2 | goto label_39;
| }
| label_15:
0x0008d538 movs r2, 1 | r2 = 1;
0x0008d53a bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
0x0008d53e ldr r0, [r5] | r0 = *(r5);
| label_16:
0x0008d540 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x0008d542 cbz r3, 0x8d54a |
0x0008d544 mov r1, r3 | r1 = r3;
0x0008d546 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x0008d54a cmp.w sl, 0 |
| if (sl != 0) {
0x0008d54e bne 0x8d5ca | goto label_40;
| }
0x0008d550 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0008d554 ble.w 0x8d1c0 | goto label_1;
| }
0x0008d558 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008d55a str r4, [sp, 8] | var_8h = r4;
0x0008d55c mov r4, sb | r4 = sb;
0x0008d55e mov sb, r8 | sb = r8;
0x0008d560 adds r3, 0x10 | r3 += 0x10;
0x0008d562 mov r8, r3 | r8 = r3;
| do {
0x0008d564 ldrb r2, [r7] | r2 = *(r7);
0x0008d566 cmp r2, 0xb0 |
0x0008d568 ite eq |
| if (r2 != 0xb0) {
0x0008d56a ldrbeq r1, [r7, 2] | r1 = *((r7 + 2));
| }
| if (r2 == 0xb0) {
0x0008d56c movne r1, r2 | r1 = r2;
| }
0x0008d56e cmp r1, 0xb1 |
| if (r1 == 0xb1) {
0x0008d570 beq 0x8d602 | goto label_41;
| }
0x0008d572 cmp r1, 0x8a |
| if (r1 == 0x8a) {
0x0008d574 beq 0x8d59a | goto label_42;
| }
| label_11:
0x0008d576 mov r1, r7 | r1 = r7;
| label_12:
0x0008d578 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008d57a add.w sl, sl, 1 | sl++;
0x0008d57e mov r0, r5 | r0 = r5;
0x0008d580 adds r4, 0x10 | r4 += 0x10;
0x0008d582 bl 0x46074 | fcn_00046074 (r0, r1, r2);
0x0008d586 cmp sl, sb |
0x0008d588 str r0, [r8, 4]! | *((r8 += 4)) = r0;
0x0008d58c bne 0x8d564 |
| } while (sl != sb);
0x0008d58e ldr r4, [sp, 8] | r4 = var_8h;
0x0008d590 b 0x8d1c0 | goto label_1;
| label_37:
0x0008d592 ldr r3, [pc, 0xd8] |
0x0008d594 add r3, pc | r3 = 0x11ac06;
0x0008d596 adds r3, 4 | r3 += 4;
0x0008d598 b 0x8d4f4 | goto label_10;
| label_42:
0x0008d59a ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0008d59c ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
0x0008d59e ldr r1, [r1] | r1 = *(r1);
| label_13:
0x0008d5a0 cmp r1, 1 |
| if (r1 <= 1) {
0x0008d5a2 ble 0x8d576 | goto label_11;
| }
0x0008d5a4 ldrb r0, [r7, 2] | r0 = *((r7 + 2));
0x0008d5a6 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0008d5a8 cmp r2, 0x8a |
0x0008d5aa it ne |
| if (r2 != 0x8a) {
0x0008d5ac cmpne r0, 0x8a | __asm ("cmpne r0, 0x8a");
| }
0x0008d5ae iteet eq |
| if (r2 != 0x8a) {
0x0008d5b0 ldreq r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
| }
| if (r2 == 0x8a) {
0x0008d5b2 addne r1, r1, sl, lsl 4 | r1 += (sl << 4);
| }
| if (r2 != 0x8a) {
0x0008d5b6 ldreq r1, [r1, 8] | r1 = *((r1 + 8));
| }
| if (r2 == 0x8a) {
0x0008d5b8 add.w r2, r2, sl, lsl 4 | r2 += (sl << 4);
| }
0x0008d5bc it eq |
| if (r2 != 0x8a) {
0x0008d5be ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
0x0008d5c0 b 0x8d578 | goto label_12;
| label_39:
0x0008d5c2 ldr r1, [sp, 8] | r1 = var_8h;
| if (r1 != 0) {
0x0008d5c4 cbz r1, 0x8d5ca |
0x0008d5c6 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
| label_40:
0x0008d5ca ldr r2, [sp, 0xc] | r2 = var_ch;
0x0008d5cc cmp r2, 0 |
| if (r2 == 0) {
0x0008d5ce beq.w 0x8d1d8 | goto label_4;
| }
0x0008d5d2 ldr r3, [r2] | r3 = *(r2);
0x0008d5d4 subs r3, 1 | r3--;
0x0008d5d6 str r3, [r2] | *(r2) = r3;
0x0008d5d8 cmp r3, 0 |
| if (r3 != 0) {
0x0008d5da bne.w 0x8d1d8 | goto label_4;
| }
0x0008d5de ldr r2, [pc, 0x90] |
0x0008d5e0 ldr r3, [pc, 0x60] | r3 = *(0x8d644);
0x0008d5e2 add r2, pc | r2 = 0x11ac58;
0x0008d5e4 ldr r3, [r2, r3] | r3 = imp.atan;
0x0008d5e6 ldr r2, [r3] | r2 = imp.atan;
0x0008d5e8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008d5ea eors r2, r3 | r2 ^= r3;
0x0008d5ec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008d5f0 bne 0x8d636 | goto label_26;
| }
0x0008d5f2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0008d5f4 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0008d5f6 mov r1, r3 | r1 = r3;
0x0008d5f8 add sp, 0x5c |
0x0008d5fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008d5fe b.w 0x2d144 | void (*0x2d144)() ();
| label_41:
0x0008d602 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0008d604 ldr r1, [r1] | r1 = *(r1);
0x0008d606 b 0x8d5a0 | goto label_13;
| label_36:
0x0008d608 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0008d60c mov r1, r7 | r1 = r7;
0x0008d60e ldr r2, [pc, 0x64] |
0x0008d610 mov r0, r5 | r0 = r5;
0x0008d612 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0008d614 add r2, pc | r2 = 0x11ac8e;
0x0008d616 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008d61a b 0x8d4b6 | goto label_14;
| label_38:
0x0008d61c add r2, sp, 0x38 | r2 += var_38h;
0x0008d61e mov r0, r5 | r0 = r5;
0x0008d620 str r1, [sp, 8] | var_8h = r1;
0x0008d622 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008d626 ldr r1, [sp, 8] | r1 = var_8h;
0x0008d628 mov sl, r0 | sl = r0;
0x0008d62a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008d62c ldr r0, [r5] | r0 = *(r5);
0x0008d62e str r3, [sp, 8] | var_8h = r3;
0x0008d630 cmp r1, 0 |
| if (r1 != 0) {
0x0008d632 bne 0x8d538 | goto label_15;
| }
0x0008d634 b 0x8d540 | goto label_16;
| label_26:
0x0008d636 blx 0x6430 | fcn_00006430 ();
| label_30:
0x0008d63a ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008d63c b 0x8d44e | goto label_17;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8d678 */
| #include <stdint.h>
|
; (fcn) fcn.0008d678 () | void fcn_0008d678 (arithmetic arg1, int16_t arg2, arithmetic x) {
| int16_t var_1h;
| int16_t var_2h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| arithmetic var_14h;
| arithmetic var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int32_t var_88h_2;
| int16_t var_90h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int32_t var_a4h_2;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| r0 = arg1;
| r1 = arg2;
| r2 = x;
0x0008d678 ldr r3, [r0] | r3 = *(r0);
0x0008d67a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008d67e mov r7, r2 | r7 = r2;
0x0008d680 vpush {d8} | __asm ("vpush {d8}");
0x0008d684 sub sp, 0xbc |
0x0008d686 mov r4, r1 | r4 = r1;
0x0008d688 add.w sl, sp, 0x60 | sl += var_60h;
0x0008d68c str r2, [sp, 0x18] | var_18h = r2;
0x0008d68e mov r6, sl | r6 = sl;
0x0008d690 ldr.w r2, [pc, 0xba0] |
0x0008d694 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008d696 ldr.w r3, [pc, 0xba0] | r3 = *(0x8e23a);
0x0008d69a add r2, pc | r2 = 0x11b8d2;
0x0008d69c ldr.w r8, [r1, 0x34] | r8 = *((r1 + 0x34));
0x0008d6a0 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0008d6a2 ldr r3, [r2, r3] |
0x0008d6a4 ldr r3, [r3] | r3 = imp.atan;
0x0008d6a6 str r3, [sp, 0xb4] | var_b4h = r3;
0x0008d6a8 mov.w r3, 0 | r3 = 0;
0x0008d6ac str r0, [sp, 0x14] | var_14h = r0;
0x0008d6ae ldm r7!, {r0, r1, r2, r3} | r0 = *(r7!);
| r1 = *((r7! + 4));
| r2 = *((r7! + 8));
| r3 = *((r7! + 12));
0x0008d6b0 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x0008d6b2 ldm.w r7, {r0, r1, r2} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
0x0008d6b6 stm.w r6, {r0, r1, r2} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
0x0008d6ba cmp r5, 0 |
| if (r5 == 0) {
0x0008d6bc beq.w 0x8de62 | goto label_63;
| }
0x0008d6c0 ldrb.w r3, [sp, 0x60] | r3 = var_60h;
0x0008d6c4 cmp r3, 0xc |
| if (r3 == 0xc) {
0x0008d6c6 beq.w 0x8de7e | goto label_64;
| }
| label_4:
0x0008d6ca ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008d6cc lsls r6, r3, 0x15 | r6 = r3 << 0x15;
| if (r6 < r3) {
0x0008d6ce bmi.w 0x8de9e | goto label_65;
| }
| label_5:
0x0008d6d2 ands r3, r3, 0x2000 | r3 &= 0x2000;
| if (r3 == r3) {
0x0008d6d6 beq 0x8d78a | goto label_66;
| }
0x0008d6d8 mov r2, r4 | r2 = r4;
| if (r3 == 0) {
0x0008d6da cbz r3, 0x8d6ec | goto label_67;
| }
| do {
0x0008d6dc ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x0008d6de cmp r2, 0 |
| if (r2 == 0) {
0x0008d6e0 beq 0x8d78a | goto label_66;
| }
0x0008d6e2 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008d6e4 and r3, r3, 0x2000 | r3 &= 0x2000;
0x0008d6e8 cmp r3, 0 |
0x0008d6ea bne 0x8d6dc |
| } while (r3 != 0);
| label_67:
0x0008d6ec ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0008d6ee ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x0008d6f0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008d6f2 ldr r6, [r4, 0x20] | r6 = *((r4 + 0x20));
0x0008d6f4 ldr r7, [r1] | r7 = *(r1);
0x0008d6f6 ldr.w sb, [r0, 8] | sb = *((r0 + 8));
0x0008d6fa cmp r2, 0 |
| if (r2 == 0) {
0x0008d6fc beq.w 0x8df20 | goto label_68;
| }
0x0008d6fe strh r0, [r2, 0x20] | *((r2 + 0x20)) = r0;
0x0008d700 ldr.w r1, [pc, 0xb38] |
0x0008d704 add r1, pc | r1 = 0x11b944;
0x0008d706 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_7:
0x0008d70a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008d70c add r6, sp, 0x6c | r6 += var_6ch;
0x0008d70e vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
0x0008d712 ldr r7, [r3, 0x24] | r7 = *((r3 + 0x24));
0x0008d714 cmp r7, 0 |
| if (r7 != 0) {
0x0008d716 bne.w 0x8df14 | goto label_69;
| }
0x0008d71a str r7, [sp, 0x20] | var_20h = r7;
| label_1:
0x0008d71c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008d71e lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 < r3) {
0x0008d720 bmi.w 0x8e4fc | goto label_70;
| }
| label_0:
0x0008d724 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008d726 vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
0x0008d72a adds r3, 0xc | r3 += 0xc;
0x0008d72c vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0008d730 ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x0008d732 cbz r3, 0x8d764 |
0x0008d734 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008d736 ldr r0, [r3] | r0 = *(r3);
0x0008d738 cmp r0, 0 |
| if (r0 == 0) {
0x0008d73a beq.w 0x8e0a4 | goto label_71;
| }
0x0008d73e movs r2, 0xc | r2 = 0xc;
0x0008d740 movs r3, 0 | r3 = 0;
0x0008d742 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| label_9:
0x0008d746 cmp r0, 0 |
| if (r0 == 0) {
0x0008d748 beq.w 0x8e728 | goto label_72;
| }
0x0008d74c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008d74e ldr.w r3, [r2, 0x80] | r3 = *((r2 + 0x80));
0x0008d752 str r3, [r0] | *(r0) = r3;
0x0008d754 ldr.w r3, [pc, 0xae8] | r3 = *(0x0008e240);
0x0008d758 str.w r0, [r2, 0x80] | __asm ("str.w r0, [r2, 0x80]");
0x0008d75c ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008d75e add r3, pc | r3 += pc;
0x0008d760 strd r2, r3, [r0, 4] | __asm ("strd r2, r3, [r0, 4]");
| }
| label_3:
0x0008d764 ldr.w r2, [pc, 0xadc] |
0x0008d768 ldr.w r3, [pc, 0xacc] | r3 = *(0x8e238);
0x0008d76c add r2, pc | r2 = 0x11b9b4;
0x0008d76e ldr r3, [r2, r3] | r3 = imp.atan;
0x0008d770 ldr r2, [r3] | r2 = imp.atan;
0x0008d772 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x0008d774 eors r2, r3 | r2 ^= r3;
0x0008d776 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008d77a bne.w 0x8ec28 | goto label_73;
| }
0x0008d77e mov r0, r7 | r0 = r7;
0x0008d780 add sp, 0xbc |
0x0008d782 vpop {d8} | __asm ("vpop {d8}");
0x0008d786 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_66:
0x0008d78a ldr r7, [r4, 0x30] | r7 = *((r4 + 0x30));
0x0008d78c cmp r7, 0 |
| if (r7 != 0) {
0x0008d78e bne.w 0x8d996 | goto label_74;
| }
0x0008d792 ldr.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x0008d796 cmp r3, 0 |
| if (r3 == 0) {
0x0008d798 beq.w 0x8e6dc | goto label_75;
| }
| label_28:
0x0008d79c ldrb r3, [r4] | r3 = *(r4);
0x0008d79e cmp r3, 0x87 |
| if (r3 == 0x87) {
0x0008d7a0 beq.w 0x8e294 | goto label_76;
| }
0x0008d7a4 adds r3, 0x7a | r3 += 0x7a;
0x0008d7a6 ands r3, r3, 0xfd | r3 &= 0xfd;
| if (r3 == r3) {
0x0008d7aa beq.w 0x8e0d2 | goto label_77;
| }
0x0008d7ae ldr r7, [sp, 0x14] | r7 = var_14h;
0x0008d7b0 movs r3, 0 | r3 = 0;
0x0008d7b2 movs r1, 0x76 | r1 = 0x76;
0x0008d7b4 mov r0, r5 | r0 = r5;
0x0008d7b6 ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x0008d7b8 str r3, [sp] | *(sp) = r3;
0x0008d7ba adds r2, r6, 2 | r2 = r6 + 2;
0x0008d7bc str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x0008d7be mov r2, r6 | r2 = r6;
0x0008d7c0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d7c4 mov r3, r4 | r3 = r4;
0x0008d7c6 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
| do {
0x0008d7c8 mov r2, r3 | r2 = r3;
0x0008d7ca ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0008d7cc cmp r3, 0 |
0x0008d7ce bne 0x8d7c8 |
| } while (r3 != 0);
0x0008d7d0 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0008d7d2 str r3, [sp, 0x20] | var_20h = r3;
0x0008d7d4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008d7d6 orr r1, r1, 0x20 | r1 |= 0x20;
0x0008d7da str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0008d7dc movs r2, 1 | r2 = 1;
0x0008d7de strd r6, r3, [sp, 0x9c] | __asm ("strd r6, r3, [var_a0h]");
0x0008d7e2 mov r1, r8 | r1 = r8;
0x0008d7e4 str r3, [sp, 0xac] | var_ach = r3;
0x0008d7e6 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x0008d7ea add r3, sp, 0x98 | r3 += var_98h;
0x0008d7ec strb.w r2, [sp, 0x98] | var_98h = r2;
0x0008d7f0 mov r2, r3 | r2 = r3;
0x0008d7f2 str r3, [sp, 0x30] | var_30h = r3;
0x0008d7f4 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008d7f8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008d7fa mov r7, r0 | r7 = r0;
0x0008d7fc cmp r0, 0 |
| if (r0 != 0) {
0x0008d7fe bne.w 0x8e0b0 | goto label_12;
| }
0x0008d802 add.w sb, r6, 1 | sb = r6 + 1;
0x0008d806 str r3, [sp] | *(sp) = r3;
0x0008d808 mov r2, sb | r2 = sb;
0x0008d80a movs r1, 0x76 | r1 = 0x76;
0x0008d80c mov r0, r5 | r0 = r5;
0x0008d80e str r3, [sp, 0x20] | var_20h = r3;
0x0008d810 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d814 ldrb r2, [r4] | r2 = *(r4);
0x0008d816 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008d818 ldr.w fp, [r4, 0x3c] | fp = *((r4 + 0x3c));
0x0008d81c cmp r2, 0x88 |
0x0008d81e str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x0008d820 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x0008d822 str.w sb, [sp, 0x9c] | __asm ("str.w sb, [var_9ch]");
0x0008d826 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
| if (r2 == 0x88) {
0x0008d828 beq.w 0x8e822 | goto label_78;
| }
0x0008d82c cmp r2, 0x89 |
| if (r2 == 0x89) {
0x0008d82e beq.w 0x8e810 | goto label_79;
| }
0x0008d830 strh r7, [r5, 0x3e] | *((r5 + 0x3e)) = r7;
0x0008d832 cmp r2, 0x87 |
| if (r2 == 0x87) {
0x0008d834 beq.w 0x8e806 | goto label_80;
| }
0x0008d838 ldr.w r3, [pc, 0xa0c] |
0x0008d83c add r3, pc | r3 = 0x11ba88;
| label_39:
0x0008d83e ldr r7, [sp, 0x14] | r7 = var_14h;
0x0008d840 movs r1, 1 | r1 = 1;
0x0008d842 ldr.w r2, [pc, 0xa08] |
0x0008d844 cmp r2, 8 |
0x0008d846 mov r0, r7 | r0 = r7;
0x0008d848 add r2, pc | r2 = 0x11ba9a;
0x0008d84a bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008d84e ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008d850 mov r1, r4 | r1 = r4;
0x0008d852 mov r0, r7 | r0 = r7;
0x0008d854 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008d858 ldr r1, [r4, 0x34] | r1 = *((r4 + 0x34));
0x0008d85a mov r7, r0 | r7 = r0;
0x0008d85c ldrsh.w r3, [r8, 2] | r3 = *((r8 + 2));
0x0008d860 ldrsh.w r2, [r4, 2] | r2 = *((r4 + 2));
0x0008d864 str r1, [sp, 0x20] | var_20h = r1;
0x0008d866 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x0008d868 cmp r2, r3 |
0x0008d86a str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x0008d86e it gt |
| if (r2 > r3) {
0x0008d870 strhgt r3, [r4, 2] | __asm ("strhgt r3, [r4, 2]");
| }
| if (r1 != 0) {
0x0008d872 cbz r1, 0x8d87a |
0x0008d874 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008d876 bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x0008d87a str.w fp, [r4, 0x3c] | __asm ("str.w fp, [r4, 0x3c]");
0x0008d87e cmp r7, 0 |
| if (r7 == 0) {
0x0008d880 bne 0x8d980 |
0x0008d882 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008d884 mov r1, r4 | r1 = r4;
0x0008d886 ldr r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x0008d888 subs r2, r3, 1 | r2 = r3 - 1;
0x0008d88a str r3, [sp, 0x28] | var_28h = r3;
0x0008d88c str r2, [sp, 0x2c] | var_2ch = r2;
0x0008d88e subs r3, 2 | r3 -= 2;
0x0008d890 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x0008d894 str r3, [r0, 0x38] | *((r0 + 0x38)) = r3;
0x0008d896 str r3, [sp, 0x24] | var_24h = r3;
0x0008d898 mov r2, r8 | r2 = r8;
0x0008d89a bl 0x883c8 | fcn_000883c8 (r0, r1, r2, r3, r4);
0x0008d89e mov r3, r8 | r3 = r8;
0x0008d8a0 mov r2, r6 | r2 = r6;
0x0008d8a2 movs r1, 0x23 | r1 = 0x23;
0x0008d8a4 mov r0, r5 | r0 = r5;
0x0008d8a6 str r7, [sp] | *(sp) = r7;
0x0008d8a8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d8ac ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008d8ae ldrb r3, [r2, 0x13] | r3 = *((r2 + 0x13));
0x0008d8b0 cmp r3, 0 |
| if (r3 == 0) {
0x0008d8b2 beq.w 0x8eb26 | goto label_81;
| }
0x0008d8b6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008d8b8 subs r3, 1 | r3--;
0x0008d8ba uxtb r3, r3 | r3 = (int8_t) r3;
0x0008d8bc strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0008d8be adds r3, 0x26 | r3 += 0x26;
0x0008d8c0 ldr.w r8, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r8 = *((r2 + offset_0));
| label_52:
0x0008d8c4 mov.w fp, 0 |
0x0008d8c8 mov r3, r8 | r3 = r8;
0x0008d8ca mov r2, r6 | r2 = r6;
0x0008d8cc movs r1, 0x86 | r1 = 0x86;
0x0008d8ce str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008d8d2 mov r0, r5 | r0 = r5;
0x0008d8d4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d8d8 strd r8, fp, [sp] | __asm ("strd r8, fp, [sp]");
0x0008d8dc mov r2, sb | r2 = sb;
0x0008d8de mov fp, r0 |
0x0008d8e0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008d8e2 movs r1, 0x1b | r1 = 0x1b;
0x0008d8e4 mov r0, r5 | r0 = r5;
0x0008d8e6 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0008d8ea cmp.w r8, 0 |
| if (r8 != 0) {
0x0008d8ee beq 0x8d902 |
0x0008d8f0 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008d8f2 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0008d8f4 cmp r3, 7 |
0x0008d8f6 itttt ls |
| if (r3 > 7) {
0x0008d8f8 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0008d8fa addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0008d8fc strbls r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0008d8fe strls r8, [r1, r3, lsl 2] | offset_1 = r3 << 2;
| *((r1 + offset_1)) = r8;
| goto label_82;
| }
| }
| label_82:
0x0008d902 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008d904 mov r2, r6 | r2 = r6;
0x0008d906 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008d908 mov r1, r4 | r1 = r4;
0x0008d90a str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x0008d90e str r3, [sp, 0xc] | var_ch = r3;
0x0008d910 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008d912 str r3, [sp, 8] | var_8h = r3;
0x0008d914 movs r3, 0 | r3 = 0;
0x0008d916 str r3, [sp] | *(sp) = r3;
0x0008d918 bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x0008d91c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008d91e ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0008d920 mvns r2, r3 | r2 = ~r3;
0x0008d922 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0008d926 cmn r1, r3 |
| if (r1 < r3) {
0x0008d928 bmi.w 0x8eb74 | goto label_83;
| }
0x0008d92c ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008d92e ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0008d930 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_54:
0x0008d934 movs r2, 0 | r2 = 0;
0x0008d936 mov r3, fp | r3 = fp;
0x0008d938 str r2, [sp] | *(sp) = r2;
0x0008d93a movs r1, 0x26 | r1 = 0x26;
0x0008d93c mov r2, r6 | r2 = r6;
0x0008d93e mov r0, r5 | r0 = r5;
0x0008d940 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d944 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0008d946 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008d94a cmn r2, r3 |
| if (r2 < r3) {
0x0008d94c bmi.w 0x8eb66 | goto label_84;
| }
0x0008d950 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008d952 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008d954 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0008d956 lsls r3, r3, 2 | r3 <<= 2;
0x0008d958 rsbs r3, r3, 0 | r3 -= ;
0x0008d95a str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_53:
0x0008d95c mov.w r8, 0 | r8 = 0;
0x0008d960 mov r2, sb | r2 = sb;
0x0008d962 mov r3, r8 | r3 = r8;
0x0008d964 movs r1, 0x7a | r1 = 0x7a;
0x0008d966 mov r0, r5 | r0 = r5;
0x0008d968 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008d96c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008d970 mov r2, r6 | r2 = r6;
0x0008d972 mov r3, r8 | r3 = r8;
0x0008d974 movs r1, 0x7a | r1 = 0x7a;
0x0008d976 mov r0, r5 | r0 = r5;
0x0008d978 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008d97c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
| label_11:
0x0008d980 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0008d982 cmp r3, 0 |
| if (r3 == 0) {
0x0008d984 beq.w 0x8e6a4 | goto label_85;
| }
0x0008d986 strh r6, [r1, 0x34] | *((r1 + 0x34)) = r6;
| label_27:
0x0008d988 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008d98a add r6, sp, 0x6c | r6 += var_6ch;
0x0008d98c ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0008d98e cmp r3, 0 |
| if (r3 != 0) {
0x0008d990 bne.w 0x8d724 | goto label_0;
| }
0x0008d994 b 0x8d71c | goto label_1;
| label_74:
0x0008d996 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008d998 ldr r5, [r7] | r5 = *(r7);
0x0008d99a ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x0008d99c ldr r0, [r3] | r0 = *(r3);
0x0008d99e ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0008d9a0 subs r1, r2, 2 | r1 = r2 - 2;
0x0008d9a2 str r2, [sp, 0x54] | var_54h = r2;
0x0008d9a4 str r1, [r3, 0x38] | *((r3 + 0x38)) = r1;
0x0008d9a6 subs r2, 1 | r2--;
0x0008d9a8 ldrb r3, [r4] | r3 = *(r4);
0x0008d9aa str r0, [sp, 0x24] | var_24h = r0;
0x0008d9ac str r1, [sp, 0x34] | var_34h = r1;
0x0008d9ae cmp r3, 0x87 |
0x0008d9b0 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008d9b2 str r2, [sp, 0x28] | var_28h = r2;
| if (r3 == 0x87) {
0x0008d9b4 beq.w 0x8e7a2 | goto label_86;
| }
0x0008d9b8 ldrb.w r0, [r0, 0x57] | r0 = *((r0 + 0x57));
0x0008d9bc cmp r0, 0 |
| if (r0 != 0) {
0x0008d9be bne.w 0x8eb7e | goto label_87;
| }
0x0008d9c0 strh r6, [r3, 6] | *((r3 + 6)) = r6;
0x0008d9c2 ldr.w sl, [sp, 0x24] | sl = var_24h;
0x0008d9c6 add r3, sp, 0x98 | r3 += var_98h;
0x0008d9c8 mov.w r8, 1 | r8 = 1;
0x0008d9cc mov sb, r0 | sb = r0;
0x0008d9ce mov fp, r3 |
0x0008d9d0 str r3, [sp, 0x30] | var_30h = r3;
| label_2:
0x0008d9d2 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0008d9d4 ldr r3, [r3] | r3 = *(r3);
0x0008d9d6 cmp r3, r8 |
| if (r3 < r8) {
0x0008d9d8 blt 0x8da06 | goto label_88;
| }
0x0008d9da cmp r5, 0 |
0x0008d9dc add.w r2, r7, 8 | r2 = r7 + 8;
0x0008d9e0 mov.w r3, 0 | r3 = 0;
| if (r5 > 0) {
0x0008d9e4 bgt 0x8d9f2 | goto label_89;
| }
0x0008d9e6 b 0x8d9f8 | goto label_90;
| do {
0x0008d9e8 adds r3, 1 | r3++;
0x0008d9ea adds r2, 0x10 | r2 += 0x10;
0x0008d9ec cmp r3, r5 |
| if (r3 == r5) {
0x0008d9ee beq.w 0x8e062 | goto label_91;
| }
| label_89:
0x0008d9f2 ldrh r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0008d9f4 cmp r1, r8 |
0x0008d9f6 bne 0x8d9e8 |
| } while (r1 != r8);
| label_90:
0x0008d9f8 cmp r3, r5 |
| if (r3 == r5) {
0x0008d9fa beq.w 0x8e062 | goto label_91;
| }
0x0008d9fc strh r2, [r6, 0x18] | *((r6 + 0x18)) = r2;
| label_8:
0x0008d9fe add.w r8, r8, 1 | r8++;
0x0008da02 cmp r0, 0 |
| if (r0 == 0) {
0x0008da04 beq 0x8d9d2 | goto label_2;
| }
| label_88:
0x0008da06 adds r2, r5, 1 | r2 = r5 + 1;
0x0008da08 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008da0a lsls r2, r2, 2 | r2 <<= 2;
0x0008da0c movs r3, 0 | r3 = 0;
0x0008da0e bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0008da10 smmls r0, fp, pc, sb | __asm ("smmls r0, fp, pc, sb");
0x0008da14 cmp r0, 0 |
| if (r0 == 0) {
0x0008da16 beq.w 0x8e364 | goto label_92;
| }
| label_36:
0x0008da1a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008da1c cmp r5, 0 |
0x0008da1e add.w r2, r7, 8 | r2 = r7 + 8;
0x0008da22 str r5, [r3] | *(r3) = r5;
| if (r5 <= 0) {
0x0008da24 ble 0x8da3a | goto label_93;
| }
0x0008da26 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008da28 add.w r0, r1, r5, lsl 2 | r0 = r1 + (r5 << 2);
| do {
0x0008da2c ldrh r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0008da2e adds r2, 0x10 | r2 += 0x10;
0x0008da30 subs r3, 1 | r3--;
0x0008da32 str r3, [r1, 4]! | *((r1 += 4)) = r3;
0x0008da36 cmp r0, r1 |
0x0008da38 bne 0x8da2c |
| } while (r0 != r1);
| label_93:
0x0008da3a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008da3c mov r1, r4 | r1 = r4;
0x0008da3e bl 0x46e2c | fcn_00046e2c (r0, r1, r2);
0x0008da42 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008da44 str r0, [sp, 0x50] | var_50h = r0;
0x0008da46 cmp r3, 0x87 |
| if (r3 != 0x87) {
0x0008da48 bne.w 0x8e368 | goto label_56;
| }
0x0008da4c ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008da4e mov.w sl, 0 | sl = 0;
0x0008da52 movs r2, 1 | r2 = 1;
0x0008da54 str.w sl, [sp, 0x4c] | __asm ("str.w sl, [var_4ch]");
0x0008da58 str r2, [sp, 0x44] | var_44h = r2;
| label_18:
0x0008da5a mov r8, r3 | r8 = r3;
0x0008da5c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008da5e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0008da60 lsls r2, r3, 0xa | r2 = r3 << 0xa;
| if (r2 >= r3) {
0x0008da62 bpl.w 0x8e7be | goto label_94;
| }
| label_17:
0x0008da66 str r4, [sp, 0x38] | var_38h = r4;
| label_37:
0x0008da68 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008da6a movs r2, 0 | r2 = 0;
0x0008da6c mov r1, r7 | r1 = r7;
0x0008da6e ldr.w r7, [pc, 0x7e0] |
0x0008da72 str r2, [r3, 0x34] | *((r3 + 0x34)) = r2;
0x0008da74 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008da76 add r7, pc | r7 = 0x11bccc;
0x0008da78 str.w r2, [r8, 0x38] | __asm ("str.w r2, [r8, 0x38]");
0x0008da7c ldr r0, [r3] | r0 = *(r3);
0x0008da7e bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x0008da82 ldr.w sb, [sp, 0x14] | sb = var_14h;
0x0008da84 str r0, [sp, 0x50] | *((sp + 0x50)) = r0;
0x0008da86 mov r1, r4 | r1 = r4;
0x0008da88 str.w r0, [r8, 0x30] | __asm ("str.w r0, [r8, 0x30]");
0x0008da8c mov r3, r7 | r3 = r7;
0x0008da8e ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0008da90 mov r0, sb | r0 = sb;
0x0008da92 bl 0x440a4 | fcn_000440a4 (r0, r1, r2, r3);
0x0008da96 mov r3, r7 | r3 = r7;
0x0008da98 ldr.w r2, [r8, 0x30] | r2 = *((r8 + 0x30));
0x0008da9c mov r1, r8 | r1 = r8;
0x0008da9e mov r0, sb | r0 = sb;
0x0008daa0 bl 0x440a4 | fcn_000440a4 (r0, r1, r2, r3);
0x0008daa4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008daa6 mov r1, r4 | r1 = r4;
0x0008daa8 mov r0, sb | r0 = sb;
0x0008daaa bl 0x883c8 | fcn_000883c8 (r0, r1, r2, r3, r4);
0x0008daae ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008dab0 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008dab2 subs r3, r2, 0 | r3 = r2 - 0;
0x0008dab4 it ne |
| if (r3 == r2) {
0x0008dab6 movne r3, 1 | r3 = 1;
| }
0x0008dab8 cmp r1, 0x87 |
0x0008daba it ne |
| if (r1 == 0x87) {
0x0008dabc movne r3, 0 | r3 = 0;
| }
0x0008dabe cmp r3, 0 |
| if (r3 != 0) {
0x0008dac0 bne.w 0x8e834 | goto label_95;
| }
0x0008dac4 mov sb, r3 | sb = r3;
0x0008dac6 str r3, [sp, 0x58] | var_58h = r3;
| label_40:
0x0008dac8 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
| if (r1 != 0) {
0x0008daca cbz r1, 0x8dad2 |
0x0008dacc ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008dace bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x0008dad2 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008dad4 movs r3, 0 | r3 = 0;
0x0008dad6 str r3, [sp, 0x84] | var_84h = r3;
0x0008dad8 str r3, [sp, 0x90] | var_90h = r3;
0x0008dada ldr r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x0008dadc strd r3, r3, [sp, 0x88] | __asm ("strd r3, r3, [var_88h]");
0x0008dae0 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0008dae2 str r3, [sp, 0xa0] | var_a0h = r3;
0x0008dae4 str r3, [sp, 0xac] | var_ach = r3;
0x0008dae6 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x0008daea adds r3, r2, 4 | r3 = r2 + 4;
0x0008daec str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x0008daee movs r1, 0xd | r1 = 0xd;
0x0008daf0 str r3, [sp, 0x5c] | var_5ch = r3;
0x0008daf2 ldrb r3, [r4] | r3 = *(r4);
0x0008daf4 strb.w r1, [sp, 0x7c] | var_7ch = r1;
0x0008daf6 asrs r4, r7, 1 | r4 = r7 >> 1;
0x0008daf8 strb.w r1, [sp, 0x98] | var_98h = r1;
0x0008dafc adds r1, r2, 1 | r1 = r2 + 1;
0x0008dafe cmp r3, 0x88 |
0x0008db00 str r1, [sp, 0x2c] | var_2ch = r1;
0x0008db02 str r1, [sp, 0x80] | var_80h = r1;
0x0008db04 add.w r1, r2, 2 | r1 = r2 + 2;
0x0008db08 add.w r2, r2, 3 | r2 += 3;
0x0008db0c str r1, [sp, 0x20] | var_20h = r1;
0x0008db0e str r1, [sp, 0x9c] | var_9ch = r1;
0x0008db10 str r2, [sp, 0x40] | var_40h = r2;
| if (r3 == 0x88) {
0x0008db12 beq.w 0x8e78a | goto label_96;
| }
0x0008db16 cmp r3, 0x89 |
| if (r3 == 0x89) {
0x0008db18 beq.w 0x8e690 | goto label_97;
| }
0x0008db1c cmp r3, 0x87 |
| if (r3 == 0x87) {
0x0008db1e beq.w 0x8e69a | goto label_98;
| }
0x0008db22 ldr.w r3, [pc, 0x730] |
0x0008db26 add r3, pc | r3 = 0x11bd80;
| label_26:
0x0008db28 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x0008db2c movs r1, 1 | r1 = 1;
0x0008db2e ldr.w r2, [pc, 0x728] |
0x0008db32 mov r0, fp | r0 = fp;
0x0008db34 add r2, pc | r2 = 0x11bd92;
0x0008db36 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008db3a ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008db3c movs r1, 0xa | r1 = 0xa;
0x0008db3e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008db40 mov r0, r6 | r0 = r6;
0x0008db42 adds r3, 1 | r3++;
0x0008db44 str r3, [sp] | *(sp) = r3;
0x0008db46 movs r3, 0 | r3 = 0;
0x0008db48 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008db4a invalid |
0x0008db4e asrs r4, r1, 0x1c | r4 = r1 >> 0x1c;
0x0008db50 mov r7, r0 | r7 = r0;
0x0008db52 mov r0, r6 | r0 = r6;
0x0008db54 add r1, pc | r1 += pc;
0x0008db56 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008db5a ldr.w r2, [pc, 0x704] |
0x0008db5e mov r0, fp | r0 = fp;
0x0008db60 movs r1, 1 | r1 = 1;
0x0008db62 str.w sb, [r8, 8] | __asm ("str.w sb, [r8, 8]");
0x0008db66 str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
0x0008db6a add.w fp, sp, 0x7c |
0x0008db6e add r2, pc | r2 = 0x11bdd4;
0x0008db70 mov.w sb, 0 | sb = 0;
0x0008db74 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008db76 invalid |
0x0008db7a mov r1, r8 | r1 = r8;
0x0008db7c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008db7e bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008db82 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008db84 mov r3, sb | r3 = sb;
0x0008db86 movs r1, 0x44 | r1 = 0x44;
0x0008db88 mov r0, r6 | r0 = r6;
0x0008db8a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008db8e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008db92 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0008db94 cmp r7, sb |
0x0008db96 strb.w sb, [r3, 0x13] | *((r3 + 0x13)) = sb;
0x0008db9a ldr r2, [r6] | r2 = *(r6);
0x0008db9c str.w sb, [r3, 0x1c] | __asm ("str.w sb, [r3, 0x1c]");
0x0008dba0 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008dba2 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008dba6 it lt |
| if (r7 >= sb) {
0x0008dba8 addlt r7, r3, -1 | r7 = r3 + -1;
| }
0x0008dbac cmp r2, 0 |
| if (r2 != 0) {
0x0008dbae bne.w 0x8e350 | goto label_99;
| }
0x0008dbb2 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0008dbb4 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x0008dbb8 add.w r2, r2, r7, lsl 3 | r2 += (r7 << 3);
| label_13:
0x0008dbbc str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0008dbbe adds r3, 1 | r3++;
0x0008dbc0 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008dbc2 movs r1, 0xa | r1 = 0xa;
0x0008dbc4 str r3, [sp] | *(sp) = r3;
0x0008dbc6 mov r0, r6 | r0 = r6;
0x0008dbc8 movs r3, 0 | r3 = 0;
0x0008dbca add.w sb, r4, 8 | sb = r4 + 8;
0x0008dbce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dbd2 ldr.w r1, [pc, 0x690] |
0x0008dbd6 movs r7, 0 | r7 = 0;
0x0008dbd8 str r0, [sp, 0x48] | var_48h = r0;
0x0008dbda mov r0, r6 | r0 = r6;
0x0008dbdc add r1, pc | r1 = 0x11be46;
0x0008dbde bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008dbe2 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008dbe4 movs r1, 1 | r1 = 1;
0x0008dbe6 ldr.w r2, [pc, 0x680] |
0x0008dbea vld1.32 {d8}, [sb] | __asm ("vld1.32 {d8}, [sb]");
0x0008dbee ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008dbf0 strd r3, r7, [r4, 8] | __asm ("strd r3, r7, [r4, 8]");
0x0008dbf4 add r2, pc | r2 = 0x11be62;
0x0008dbf6 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008dbfa ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008dbfc mov r1, r4 | r1 = r4;
0x0008dbfe ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008dc00 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008dc04 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008dc06 mov r3, r7 | r3 = r7;
0x0008dc08 movs r1, 0x44 | r1 = 0x44;
0x0008dc0a vst1.32 {d8}, [sb] | __asm ("vst1.32 {d8}, [sb]");
0x0008dc0e mov r0, r6 | r0 = r6;
0x0008dc10 str r7, [sp] | *(sp) = r7;
0x0008dc12 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dc16 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0008dc18 mov r0, r6 | r0 = r6;
0x0008dc1a ldr.w r1, [pc, 0x650] |
0x0008dc1e strb r7, [r3, 0x13] | *((r3 + 0x13)) = r7;
0x0008dc20 add r1, pc | r1 = 0x11be92;
0x0008dc22 str r7, [r3, 0x1c] | *((r3 + 0x1c)) = r7;
0x0008dc24 bl 0x4a160 | fcn_0004a160 (r0);
0x0008dc28 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008dc2a mov r2, fp | r2 = fp;
0x0008dc2c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008dc2e mov r1, r4 | r1 = r4;
0x0008dc30 strd sl, r3, [sp, 8] | __asm ("strd sl, r3, [var_8h]");
0x0008dc34 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008dc36 str r3, [sp, 4] | var_4h = r3;
0x0008dc38 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008dc3a str r3, [sp] | *(sp) = r3;
0x0008dc3c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008dc3e bl 0x4ffc4 | fcn_0004ffc4 (r0, r1, r2, r3, r4, r5, r6);
0x0008dc42 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008dc44 mov fp, r0 |
0x0008dc46 cmp r3, 1 |
| if (r3 < 1) {
0x0008dc48 bls.w 0x8e57a | goto label_100;
| }
0x0008dc4c cmp.w sl, 0 |
| if (sl == 0) {
0x0008dc50 beq.w 0x8e82c | goto label_101;
| }
0x0008dc54 str r7, [sp, 0x30] | var_30h = r7;
| label_21:
0x0008dc56 ldr.w r3, [sl] | r3 = *(sl);
0x0008dc5a subs r3, 1 | r3--;
0x0008dc5c str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x0008dc60 cmp r3, 0 |
| if (r3 == 0) {
0x0008dc62 beq.w 0x8e794 | goto label_102;
| }
| label_35:
0x0008dc66 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008dc68 subs r3, 0x88 | r3 -= 0x88;
0x0008dc6a cmp r3, 1 |
| if (r3 > 1) {
0x0008dc6c bhi.w 0x8e5aa | goto label_103;
| }
0x0008dc70 ldr r7, [sp, 0x28] | r7 = var_28h;
0x0008dc72 str r7, [sp, 0x18] | var_18h = r7;
| label_22:
0x0008dc74 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008dc76 cmp r3, 0x89 |
| if (r3 != 0x89) {
0x0008dc78 bne.w 0x8e44a | goto label_104;
| }
0x0008dc7c ldrsh.w r2, [r4, 2] | r2 = *((r4 + 2));
0x0008dc80 mov.w sb, 0 | sb = 0;
0x0008dc84 ldrsh.w r3, [r8, 2] | r3 = *((r8 + 2));
0x0008dc88 mov r0, r6 | r0 = r6;
0x0008dc8a ldr.w r1, [pc, 0x5e4] |
0x0008dc8e cmp r2, r3 |
0x0008dc90 it gt |
| if (r2 > r3) {
0x0008dc92 strhgt r3, [r4, 2] | __asm ("strhgt r3, [r4, 2]");
| }
0x0008dc94 add r1, pc | r1 = 0x11bf0a;
0x0008dc96 bl 0x4a160 | fcn_0004a160 (r0);
0x0008dc9a mov r3, fp | r3 = fp;
0x0008dc9c ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008dc9e movs r1, 9 | r1 = 9;
0x0008dca0 mov r0, r6 | r0 = r6;
0x0008dca2 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008dca6 mov r4, r7 | r4 = r7;
0x0008dca8 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dcac mov sl, r0 | sl = r0;
0x0008dcae ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008dcb0 mov r3, r7 | r3 = r7;
0x0008dcb2 movs r1, 0xb | r1 = 0xb;
0x0008dcb4 mov r0, r6 | r0 = r6;
0x0008dcb6 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008dcba add.w fp, sl, 1 |
0x0008dcbe bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dcc2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008dcc4 mov r2, sb | r2 = sb;
0x0008dcc6 movs r1, 8 | r1 = 8;
0x0008dcc8 mov r0, r6 | r0 = r6;
0x0008dcca str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008dcce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_19:
0x0008dcd2 ldr.w r1, [pc, 0x5a0] |
0x0008dcd6 mov r0, r6 | r0 = r6;
0x0008dcd8 add r1, pc | r1 = 0x11bf52;
0x0008dcda bl 0x4a160 | fcn_0004a160 (r0);
0x0008dcde ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008dce0 ldr.w sb, [r6, 0x6c] | sb = *((r6 + 0x6c));
0x0008dce4 cmp r3, 1 |
| if (r3 < 1) {
0x0008dce6 bls.w 0x8e738 | goto label_105;
| }
| label_30:
0x0008dcea movs r7, 0 | r7 = 0;
0x0008dcec ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008dcee mov r3, r4 | r3 = r4;
0x0008dcf0 movs r1, 0xb | r1 = 0xb;
0x0008dcf2 mov r0, r6 | r0 = r6;
0x0008dcf4 str r7, [sp] | *(sp) = r7;
0x0008dcf6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dcfa ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008dcfc mov r2, r7 | r2 = r7;
0x0008dcfe movs r1, 8 | r1 = 8;
0x0008dd00 mov r0, r6 | r0 = r6;
0x0008dd02 str r7, [sp] | *(sp) = r7;
0x0008dd04 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dd08 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008dd0a ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0008dd0c cmp r3, r7 |
0x0008dd0e itt lt |
| if (r3 >= r7) {
0x0008dd10 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r3 < r7) {
0x0008dd14 str r3, [sp, 0x48] | var_48h = r3;
| }
0x0008dd16 ldr r3, [r6] | r3 = *(r6);
0x0008dd18 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008dd1c cmp r3, 0 |
| if (r3 != 0) {
0x0008dd1e bne.w 0x8e35a | goto label_106;
| }
0x0008dd22 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008dd24 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0008dd28 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0008dd2a add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
| label_14:
0x0008dd2e movs r7, 0 | r7 = 0;
0x0008dd30 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008dd32 movs r1, 0xb | r1 = 0xb;
0x0008dd34 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008dd36 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008dd38 mov r0, r6 | r0 = r6;
0x0008dd3a str r7, [sp] | *(sp) = r7;
0x0008dd3c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dd40 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008dd42 mov r3, r4 | r3 = r4;
0x0008dd44 movs r1, 0xb | r1 = 0xb;
0x0008dd46 mov r0, r6 | r0 = r6;
0x0008dd48 str r7, [sp] | *(sp) = r7;
0x0008dd4a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008dd4e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008dd50 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0008dd52 mvns r2, r3 | r2 = ~r3;
0x0008dd54 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0008dd58 cmn r1, r3 |
| if (r1 < r3) {
0x0008dd5a bmi.w 0x8e75a | goto label_107;
| }
0x0008dd5e ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008dd60 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0008dd62 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_32:
0x0008dd66 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008dd68 mvn r2, 0xd | r2 = ~0xd;
0x0008dd6c movs r1, 0x59 | r1 = 0x59;
0x0008dd6e str r2, [sp, 8] | var_8h = r2;
0x0008dd70 mov r0, r6 | r0 = r6;
0x0008dd72 str r3, [sp, 4] | var_4h = r3;
0x0008dd74 movs r3, 0 | r3 = 0;
0x0008dd76 mov r2, r3 | r2 = r3;
0x0008dd78 str r3, [sp] | *(sp) = r3;
0x0008dd7a bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0008dd7e ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008dd80 movs r1, 0x5a | r1 = 0x5a;
0x0008dd82 ldr r2, [sp, 0x88] | r2 = var_88h;
0x0008dd84 mov r0, r6 | r0 = r6;
0x0008dd86 strd r5, r3, [sp] | __asm ("strd r5, r3, [sp]");
0x0008dd8a mvn r3, 7 | r3 = ~7;
0x0008dd8e str r3, [sp, 8] | var_8h = r3;
0x0008dd90 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x0008dd92 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0008dd96 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008dd98 cmp r3, 0 |
| if (r3 > 0) {
0x0008dd9a ble 0x8ddac |
0x0008dd9c ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0008dd9e add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008dda2 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0008dda6 movs r3, 1 | r3 = 1;
0x0008dda8 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0008ddac mov r3, sl | r3 = sl;
0x0008ddae mov r2, fp | r2 = fp;
0x0008ddb0 movs r1, 0xd | r1 = 0xd;
0x0008ddb2 mov r0, r6 | r0 = r6;
0x0008ddb4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008ddb8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ddbc ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x0008ddbe ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008ddc2 cmn r2, r3 |
| if (r2 < r3) {
0x0008ddc4 bmi.w 0x8e74c | goto label_108;
| }
0x0008ddc8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008ddca ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0008ddcc ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008ddce lsls r3, r3, 2 | r3 <<= 2;
0x0008ddd0 rsbs r3, r3, 0 | r3 -= ;
0x0008ddd2 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_31:
0x0008ddd4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008ddd6 ldr r4, [r3, 0x34] | r4 = *((r3 + 0x34));
| if (r4 != 0) {
0x0008ddd8 cbz r4, 0x8de08 |
0x0008ddda ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008dddc ldr r0, [r3] | r0 = *(r3);
0x0008ddde cmp r0, 0 |
| if (r0 == 0) {
0x0008dde0 beq.w 0x8e77e | goto label_109;
| }
0x0008dde4 movs r2, 0xc | r2 = 0xc;
0x0008dde6 movs r3, 0 | r3 = 0;
0x0008dde8 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| label_34:
0x0008ddec cmp r0, 0 |
| if (r0 == 0) {
0x0008ddee beq.w 0x8ea28 | goto label_110;
| }
0x0008ddf2 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008ddf4 ldr.w r3, [r2, 0x80] | r3 = *((r2 + 0x80));
0x0008ddf8 str r3, [r0] | *(r0) = r3;
0x0008ddfa ldr.w r3, [pc, 0x47c] | r3 = *(0x0008e278);
0x0008ddfe str.w r0, [r2, 0x80] | __asm ("str.w r0, [r2, 0x80]");
0x0008de02 str r4, [r0, 4] | *((r0 + 4)) = r4;
0x0008de04 add r3, pc | r3 += pc;
0x0008de06 str r3, [r0, 8] | *((r0 + 8)) = r3;
| }
| label_47:
0x0008de08 ldr.w r1, [r8, 0x30] | r1 = *((r8 + 0x30));
0x0008de0c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008de0e str.w r8, [r3, 0x34] | __asm ("str.w r8, [r3, 0x34]");
0x0008de12 str.w r3, [r8, 0x38] | __asm ("str.w r3, [r8, 0x38]");
| if (r1 != 0) {
0x0008de16 cbz r1, 0x8de1e |
0x0008de18 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008de1a bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x0008de1e ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008de20 movs r2, 0 | r2 = 0;
0x0008de22 ldr.w r3, [r1, 0xdc] | r3 = *((r1 + 0xdc));
0x0008de26 str.w r2, [r8, 0x30] | __asm ("str.w r2, [r8, 0x30]");
0x0008de2a ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x0008de2c cmp r3, 0 |
| if (r3 != 0) {
0x0008de2e beq 0x8de52 |
0x0008de30 ldr r1, [r2] | r1 = *(r2);
0x0008de32 it lt |
| if (r3 >= 0) {
0x0008de34 ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x0008de36 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0008de3a it lt |
| if (r3 >= 0) {
0x0008de3c addlt r3, r3, -1 | r3 += -1;
| }
0x0008de40 cmp r1, 0 |
| if (r1 != 0) {
0x0008de42 bne.w 0x8e684 | goto label_111;
| }
0x0008de46 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0008de48 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008de4c add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_25:
0x0008de50 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| }
0x0008de52 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008de54 ldr r7, [r2, 0x24] | r7 = *((r2 + 0x24));
0x0008de56 str.w r3, [r2, 0xdc] | __asm ("str.w r3, [r2, 0xdc]");
0x0008de5a subs r7, 0 |
0x0008de5c it ne |
| if (r7 == 0) {
0x0008de5e movne r7, 1 | r7 = 1;
| }
0x0008de60 b 0x8d764 | goto label_3;
| label_63:
0x0008de62 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008de64 ldr r3, [r1, 0x74] | r3 = *((r1 + 0x74));
0x0008de66 cmp r3, 0 |
| if (r3 == 0) {
0x0008de68 beq.w 0x8e0c2 | goto label_112;
| }
| label_10:
0x0008de6c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008de6e bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x0008de72 ldrb.w r3, [sp, 0x60] | r3 = var_60h;
0x0008de76 mov r5, r0 | r5 = r0;
0x0008de78 cmp r3, 0xc |
| if (r3 != 0xc) {
0x0008de7a bne.w 0x8d6ca | goto label_4;
| }
| label_64:
0x0008de7e ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0008de80 movs r2, 0 | r2 = 0;
0x0008de82 movs r1, 0x76 | r1 = 0x76;
0x0008de84 mov r0, r5 | r0 = r5;
0x0008de86 ldr r3, [r3] | r3 = *(r3);
0x0008de88 str r2, [sp] | *(sp) = r2;
0x0008de8a ldr r2, [sp, 0x64] | r2 = var_64h;
0x0008de8c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008de90 movs r3, 0xe | r3 = 0xe;
0x0008de92 strb.w r3, [sp, 0x60] | var_60h = r3;
0x0008de96 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008de98 lsls r6, r3, 0x15 | r6 = r3 << 0x15;
| if (r6 >= r3) {
0x0008de9a bpl.w 0x8d6d2 | goto label_5;
| }
| label_65:
0x0008de9e ldr r7, [r4, 0x3c] | r7 = *((r4 + 0x3c));
0x0008dea0 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0008dea2 clz r0, r7 | r0 &= r7;
0x0008dea6 lsrs r0, r0, 5 | r0 >>= 5;
0x0008dea8 cmp r2, 0 |
| if (r2 != 0) {
0x0008deaa bne.w 0x8d6d2 | goto label_5;
| }
0x0008deae mov r1, r4 | r1 = r4;
0x0008deb0 mov.w sb, 1 | sb = 1;
0x0008deb4 b 0x8dec0 | goto label_113;
| label_6:
0x0008deb6 ldr r2, [r1, 0x44] | r2 = *((r1 + 0x44));
0x0008deb8 add sb, r0 | sb += r0;
0x0008deba cmp r2, 0 |
| if (r2 != 0) {
0x0008debc bne.w 0x8d6d2 | goto label_5;
| }
| label_113:
0x0008dec0 mov r6, r1 | r6 = r1;
0x0008dec2 ldr r1, [r1, 0x34] | r1 = *((r1 + 0x34));
0x0008dec4 cmp r1, 0 |
| if (r1 != 0) {
0x0008dec6 bne 0x8deb6 | goto label_6;
| }
0x0008dec8 cmp.w sb, 1 |
| if (sb == 1) {
0x0008decc beq.w 0x8e764 | goto label_114;
| }
0x0008ded0 ldr r3, [pc, 0x3a8] |
0x0008ded2 ldr r2, [pc, 0x3ac] |
0x0008ded4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008ded6 add r3, pc | r3 = 0x11c156;
0x0008ded8 str r3, [sp] | *(sp) = r3;
0x0008deda add r2, pc | r2 = 0x11c160;
0x0008dedc mov r3, sb | r3 = sb;
0x0008dede bl 0x4ed48 | fcn_0004ed48 (r0, r1);
| label_33:
0x0008dee2 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x0008dee6 movs r4, 1 | r4 = 1;
0x0008dee8 movs r5, 0 | r5 = 0;
0x0008deea b 0x8def4 |
| while (r7 == 0) {
0x0008deec strh.w sb, [r6, 2] | *((r6 + 2)) = sb;
0x0008def0 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
| if (r6 == 0) {
0x0008def2 cbz r6, 0x8df0e | goto label_115;
| }
0x0008def4 movs r3, 0 | r3 = 0;
0x0008def6 mov.w r2, -1 | r2 = -1;
0x0008defa mov r1, r6 | r1 = r6;
0x0008defc mov r0, r8 | r0 = r8;
0x0008defe strd r4, r4, [sp, 8] | __asm ("strd r4, r4, [var_8h]");
0x0008df02 strd r5, sl, [sp] | __asm ("strd r5, sl, [sp]");
0x0008df06 bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x0008df0a cmp r7, 0 |
0x0008df0c beq 0x8deec |
| }
| label_115:
0x0008df0e add r3, sp, 0x6c | r3 += var_6ch;
0x0008df10 vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
| label_69:
0x0008df14 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008df16 movs r7, 0 | r7 = 0;
0x0008df18 adds r3, 0xc | r3 += 0xc;
0x0008df1a vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0008df1e b 0x8d764 | goto label_3;
| label_68:
0x0008df20 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x0008df24 mov r2, r3 | r2 = r3;
0x0008df26 movs r1, 0x21 | r1 = 0x21;
0x0008df28 str r3, [sp] | *(sp) = r3;
0x0008df2a str r3, [sp, 0x20] | var_20h = r3;
0x0008df2c mov r0, fp | r0 = fp;
0x0008df2e bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0008df32 mov r8, r0 | r8 = r0;
0x0008df34 cmp r0, 0 |
| if (r0 != 0) {
0x0008df36 bne.w 0x8d70a | goto label_7;
| }
0x0008df3a ldr.w r2, [fp, 0x38] | r2 = var_b4h;
0x0008df3e mov.w ip, 0x140 |
0x0008df42 mov r0, fp | r0 = fp;
0x0008df44 mov r1, r4 | r1 = r4;
0x0008df46 subs r3, r2, 1 | r3 = r2 - 1;
0x0008df48 str r2, [sp, 0x34] | var_34h = r2;
0x0008df4a str.w r3, [fp, 0x38] | __asm ("str.w r3, [var_b4h]");
0x0008df4e mov r2, r3 | r2 = r3;
0x0008df50 strh.w ip, [r4, 2] | *((r4 + 2)) = ip;
0x0008df54 str r3, [sp, 0x2c] | var_2ch = r3;
0x0008df56 bl 0x883c8 | fcn_000883c8 (r0, r1, r2, r3, r4);
0x0008df5a ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0008df5c add.w r2, r4, 8 | r2 = r4 + 8;
0x0008df60 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0008df62 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008df66 str r3, [sp, 0x38] | var_38h = r3;
0x0008df68 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008df6a str r1, [sp, 0x3c] | var_3ch = r1;
0x0008df6c ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0008df6e str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0008df70 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0008df74 ldr r0, [r6] | r0 = *(r6);
0x0008df76 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0008df78 str r1, [sp, 0x40] | var_40h = r1;
0x0008df7a cmp r0, 0 |
0x0008df7c str r2, [sp, 0x20] | var_20h = r2;
| if (r0 > 0) {
0x0008df7e bgt 0x8df8c | goto label_116;
| }
0x0008df80 str r3, [sp, 0x24] | var_24h = r3;
0x0008df82 b 0x8dfa0 | goto label_44;
| do {
0x0008df84 adds r3, 1 | r3++;
0x0008df86 cmp r3, r0 |
| if (r3 == r0) {
0x0008df88 beq.w 0x8e9f8 | goto label_117;
| }
| label_116:
0x0008df8c add.w r1, r6, r3, lsl 6 | r1 = r6 + (r3 << 6);
0x0008df90 ldrb.w r2, [r1, 0x2d] | r2 = *((r1 + 0x2d));
0x0008df94 ubfx r2, r2, 6, 1 | r2 = (r2 >> 6) & ((1 << 1) - 1);
0x0008df98 cmp r2, 0 |
0x0008df9a beq 0x8df84 |
| } while (r2 == 0);
0x0008df9c ldr r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x0008df9e str r3, [sp, 0x24] | var_24h = r3;
| label_44:
0x0008dfa0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008dfa2 ldrd fp, r3, [r2, 0x28] | __asm ("ldrd fp, r3, [r2, 0x28]");
0x0008dfa6 adds r3, 1 | r3++;
0x0008dfa8 str r3, [sp, 0x28] | var_28h = r3;
0x0008dfaa add.w r3, fp, 1 | r3 += var_1h;
0x0008dfae str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x0008dfb0 ldrb r2, [r4] | r2 = *(r4);
0x0008dfb2 cmp r2, 0x86 |
| if (r2 == 0x86) {
0x0008dfb4 beq.w 0x8ea3e | goto label_118;
| }
0x0008dfb8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008dfba cmp r3, 0 |
| if (r3 == 0) {
0x0008dfbc beq.w 0x8eaea | goto label_119;
| }
0x0008dfc0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008dfc2 movs r1, 0x79 | r1 = 0x79;
0x0008dfc4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008dfc6 mov r0, sb | r0 = sb;
0x0008dfc8 str r7, [sp] | *(sp) = r7;
0x0008dfca str.w fp, [sp, 0x9c] | __asm ("str.w fp, [var_9ch]");
0x0008dfce str r2, [r3, 0x2c] | *((r3 + 0x2c)) = r2;
0x0008dfd0 movs r3, 0 | r3 = 0;
0x0008dfd2 str r3, [sp, 0xa0] | var_a0h = r3;
0x0008dfd4 str r3, [sp, 0xac] | var_ach = r3;
0x0008dfd6 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x0008dfda movs r3, 7 | r3 = 7;
0x0008dfdc strb.w r3, [sp, 0x98] | var_98h = r3;
0x0008dfe0 mov r3, r2 | r3 = r2;
0x0008dfe2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008dfe4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_48:
0x0008dfe8 mov r1, r4 | r1 = r4;
0x0008dfea ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008dfec bl 0x46e2c | fcn_00046e2c (r0, r1, r2);
0x0008dff0 ldr r6, [sp, 0x20] | r6 = var_20h;
0x0008dff2 mvn r2, 7 | r2 = ~7;
0x0008dff6 movs r1, 0x76 | r1 = 0x76;
0x0008dff8 ldr r3, [r6] | r3 = *(r6);
0x0008dffa str r2, [sp, 8] | var_8h = r2;
0x0008dffc movs r2, 0 | r2 = 0;
0x0008dffe str r0, [sp, 4] | var_4h = r0;
0x0008e000 mov r0, sb | r0 = sb;
0x0008e002 str r2, [sp] | *(sp) = r2;
0x0008e004 adds r3, 2 | r3 += 2;
0x0008e006 mov r2, fp | r2 = fp;
0x0008e008 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0008e00c str r6, [sp, 0xb0] | var_b0h = r6;
| label_51:
0x0008e00e ldr r1, [pc, 0x274] |
0x0008e010 mov r0, sb | r0 = sb;
0x0008e012 add r1, pc | r1 = 0x11c29c;
0x0008e014 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008e018 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008e01c bne.w 0x8ea0c | goto label_120;
| }
0x0008e020 ldr r3, [r4, 4] | r3 = *((r4 + 4));
| label_46:
0x0008e022 movs r2, 0 | r2 = 0;
0x0008e024 mov r6, r4 | r6 = r4;
0x0008e026 str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x0008e028 movs r2, 0x87 | r2 = 0x87;
0x0008e02a b 0x8e03c |
| while (r1 >= r3) {
0x0008e02c ldr r7, [r6, 0x34] | r7 = *((r6 + 0x34));
0x0008e02e strb r2, [r6] | *(r6) = r2;
0x0008e030 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0008e032 ands r1, r3, 0x2000 | r1 = r3 & 0x2000;
| if (r1 == r3) {
0x0008e036 beq.w 0x8e8d0 | goto label_121;
| }
0x0008e03a mov r6, r7 | r6 = r7;
0x0008e03c lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x0008e03e bpl 0x8e02c |
| }
0x0008e040 ldr r1, [pc, 0x244] |
0x0008e042 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e044 add r1, pc | r1 = 0x11c2d0;
0x0008e046 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_43:
0x0008e04a ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
| if (r1 != 0) {
0x0008e04c cbz r1, 0x8e056 |
0x0008e04e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008e050 ldr r0, [r3] | r0 = *(r3);
0x0008e052 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x0008e056 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008e058 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x0008e05a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008e05c str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x0008e05e b.w 0x8d70a | goto label_7;
| label_91:
0x0008e062 mov r2, fp | r2 = fp;
0x0008e064 movs r3, 0 | r3 = 0;
0x0008e066 movs r1, 0x9b | r1 = 0x9b;
0x0008e068 mov r0, sl | r0 = sl;
0x0008e06a strd sb, sb, [sp, 0x98] | __asm ("strd sb, sb, [var_98h]");
0x0008e06e bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x0008e072 mov r2, r0 | r2 = r0;
0x0008e074 cmp r0, 0 |
| if (r0 == 0) {
0x0008e076 beq.w 0x8ea38 | goto label_122;
| }
0x0008e07a ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0008e07c mov r1, r7 | r1 = r7;
0x0008e07e str.w r8, [r0, 8] | __asm ("str.w r8, [r0, 8]");
0x0008e082 orr r3, r3, 0x800 | r3 |= 0x800;
0x0008e086 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x0008e088 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e08a bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
0x0008e08e mov r7, r0 | r7 = r0;
0x0008e090 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
| if (r0 != 0) {
0x0008e092 cbz r0, 0x8e09e |
0x0008e094 adds r5, 1 | r5++;
0x0008e096 add.w r3, r0, r5, lsl 4 | r3 = r0 + (r5 << 4);
0x0008e09a strh.w r8, [r3, 4] | *((r3 + 4)) = r8;
| }
0x0008e09e ldrb.w r0, [sl, 0x57] | r0 = *((sl + 0x57));
0x0008e0a2 b 0x8d9fe | goto label_8;
| label_71:
0x0008e0a4 movs r1, 0 | r1 = 0;
0x0008e0a6 movs r0, 0xc | r0 = 0xc;
0x0008e0a8 bl 0x28c3c | fcn_00028c3c (r0);
0x0008e0ac b.w 0x8d746 | goto label_9;
| do {
| label_12:
0x0008e0b0 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008e0b2 add r3, sp, 0x6c | r3 += var_6ch;
0x0008e0b4 vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
0x0008e0b8 adds r2, 0xc | r2 += 0xc;
0x0008e0ba vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0008e0be b.w 0x8d764 | goto label_3;
| label_112:
0x0008e0c2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008e0c4 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0008e0c6 lsls r7, r3, 0x1c | r7 = r3 << 0x1c;
0x0008e0c8 ittt pl |
| if (r7 < r3) {
0x0008e0ca movpl r3, 1 | r3 = 1;
| }
| if (r7 < r3) {
0x0008e0cc movpl r2, r1 | r2 = r1;
| }
| if (r7 < r3) {
0x0008e0ce strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x0008e0d0 b 0x8de6c | goto label_10;
| label_77:
0x0008e0d2 ldrb.w sb, [sp, 0x60] | sb = var_60h;
0x0008e0d6 cmp.w sb, 1 |
| if (sb != 1) {
0x0008e0da bne.w 0x8e6fe | goto label_123;
| }
0x0008e0de ldr r6, [sp, 0x64] | r6 = var_64h;
| label_29:
0x0008e0e0 movs r3, 0 | r3 = 0;
0x0008e0e2 add r2, sp, 0x98 | r2 += var_98h;
0x0008e0e4 str r3, [sp, 0xa0] | var_a0h = r3;
0x0008e0e6 mov r1, r8 | r1 = r8;
0x0008e0e8 str r3, [sp, 0xac] | var_ach = r3;
0x0008e0ea strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x0008e0ee mov.w r3, 1 | r3 = 1;
0x0008e0f2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e0f4 str r6, [sp, 0x9c] | var_9ch = r6;
0x0008e0f6 str r2, [sp, 0x30] | var_30h = r2;
0x0008e0f8 strb.w r3, [sp, 0x98] | var_98h = r3;
0x0008e0fc bl 0x82d20 | r0 = fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e100 mov r7, r0 | r7 = r0;
0x0008e102 cmp r0, 0 |
0x0008e104 bne 0x8e0b0 |
| } while (r0 != 0);
0x0008e106 ldrb r3, [r4] | r3 = *(r4);
0x0008e108 ldr.w fp, [r4, 0x3c] | fp = *((r4 + 0x3c));
0x0008e10c str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x0008e10e cmp r3, 0x88 |
| if (r3 == 0x88) {
0x0008e110 beq.w 0x8e8c8 | goto label_124;
| }
0x0008e114 cmp r3, 0x87 |
0x0008e116 mov.w r2, 1 | r2 = 1;
| if (r3 == 0x87) {
0x0008e11a beq.w 0x8e81a | goto label_125;
| }
0x0008e11e cmp r3, 0x89 |
| if (r3 != 0x89) {
0x0008e120 bne.w 0x8e7fe | goto label_126;
| }
0x0008e124 ldr r3, [pc, 0x164] |
0x0008e126 add r3, pc | r3 = 0x11c3b6;
| label_38:
0x0008e128 strb.w r2, [sp, 0x98] | var_98h = r2;
0x0008e12c movs r7, 0 | r7 = 0;
0x0008e12e ldr r2, [pc, 0x160] |
0x0008e130 movs r1, 1 | r1 = 1;
0x0008e132 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e134 str r7, [r4, 0x3c] | *((r4 + 0x3c)) = r7;
0x0008e136 add r2, pc | r2 = 0x11c3cc;
0x0008e138 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e13c ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008e13e mov r1, r4 | r1 = r4;
0x0008e140 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e142 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e146 ldrb r3, [r4] | r3 = *(r4);
0x0008e148 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0008e14a str r7, [r4, 0x30] | *((r4 + 0x30)) = r7;
0x0008e14c mov r7, r0 | r7 = r0;
0x0008e14e cmp r3, 0x86 |
0x0008e150 str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x0008e154 str r2, [sp, 0x20] | var_20h = r2;
| if (r3 == 0x86) {
0x0008e156 bne 0x8e166 |
0x0008e158 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x0008e15c ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x0008e160 bl 0x2743c | fcn_0002743c (r0, r1);
0x0008e164 strh r0, [r4, 2] | *((r4 + 2)) = r0;
| }
0x0008e166 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
| if (r1 != 0) {
0x0008e168 cbz r1, 0x8e170 |
0x0008e16a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008e16c bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x0008e170 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008e174 add.w r3, r4, 8 | r3 = r4 + 8;
0x0008e178 cmp.w sb, 1 |
0x0008e17c str.w fp, [r4, 0x3c] | __asm ("str.w fp, [r4, 0x3c]");
0x0008e180 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| if (sb == 1) {
0x0008e184 beq.w 0x8d980 | goto label_11;
| }
0x0008e188 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008e18a ldrb.w r8, [r3, 0x57] | r8 = *((r3 + 0x57));
0x0008e18e cmp.w r8, 0 |
| if (r8 != 0) {
0x0008e192 bne.w 0x8d980 | goto label_11;
| }
0x0008e196 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e198 mov r1, r4 | r1 = r4;
0x0008e19a ldr.w sb, [r0, 0x38] | sb = *((r0 + 0x38));
0x0008e19e sub.w r3, sb, 2 | r3 = sb - 2;
0x0008e1a2 add.w fp, sb, -1 |
0x0008e1a6 str r3, [r0, 0x38] | *((r0 + 0x38)) = r3;
0x0008e1a8 mov r2, fp | r2 = fp;
0x0008e1aa str r3, [sp, 0x24] | var_24h = r3;
0x0008e1ac bl 0x883c8 | fcn_000883c8 (r0, r1, r2, r3, r4);
0x0008e1b0 mov r3, fp | r3 = fp;
0x0008e1b2 mov r2, r6 | r2 = r6;
0x0008e1b4 movs r1, 0x23 | r1 = 0x23;
0x0008e1b6 mov r0, r5 | r0 = r5;
0x0008e1b8 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008e1bc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e1c0 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x0008e1c2 mov r1, r4 | r1 = r4;
0x0008e1c4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008e1c6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e1c8 str r2, [sp, 0x28] | var_28h = r2;
0x0008e1ca mov r2, r6 | r2 = r6;
0x0008e1cc str r3, [sp, 8] | var_8h = r3;
0x0008e1ce mov r3, r8 | r3 = r8;
0x0008e1d0 str.w fp, [sp, 0xc] | __asm ("str.w fp, [var_ch]");
0x0008e1d4 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x0008e1d8 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008e1dc bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x0008e1e0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008e1e2 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0008e1e4 mvns r2, r3 | r2 = ~r3;
0x0008e1e6 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0008e1ea cmn r1, r3 |
| if (r1 < r3) {
0x0008e1ec bmi.w 0x8ebe0 | goto label_127;
| }
0x0008e1f0 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008e1f2 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0008e1f4 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_59:
0x0008e1f8 movs r2, 0 | r2 = 0;
0x0008e1fa ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e1fc str r2, [sp] | *(sp) = r2;
0x0008e1fe movs r1, 0x26 | r1 = 0x26;
0x0008e200 mov r2, r6 | r2 = r6;
0x0008e202 mov r0, r5 | r0 = r5;
0x0008e204 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e208 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0008e20a ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008e20e cmn r2, r3 |
| if (r2 < r3) {
0x0008e210 bmi.w 0x8ebd2 | goto label_128;
| }
0x0008e214 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008e216 lsl.w r3, sb, 2 | r3 = sb << 2;
0x0008e21a ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0008e21c rsbs r3, r3, 0 | r3 -= ;
0x0008e21e str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_58:
0x0008e220 movs r3, 0 | r3 = 0;
0x0008e222 mov r2, r6 | r2 = r6;
0x0008e224 movs r1, 0x7a | r1 = 0x7a;
0x0008e226 mov r0, r5 | r0 = r5;
0x0008e228 str r3, [sp] | *(sp) = r3;
0x0008e22a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e22e b.w 0x8d980 | goto label_11;
| label_76:
0x0008e294 add.w r6, r4, 8 | r6 = r4 + 8;
0x0008e298 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0008e29a add.w sb, r8, 8 | sb = r8 + 8;
0x0008e29e movs r7, 0 | r7 = 0;
0x0008e2a0 vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
0x0008e2a4 mov r2, sl | r2 = sl;
0x0008e2a6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e2a8 mov r1, r8 | r1 = r8;
0x0008e2aa vst1.32 {d16}, [sb] | __asm ("vst1.32 {d16}, [sb]");
0x0008e2ae str.w r3, [r8, 0x3c] | __asm ("str.w r3, [r8, 0x3c]");
0x0008e2b2 str r7, [sp, 0x98] | var_98h = r7;
0x0008e2b4 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e2b8 str.w r7, [r8, 0x3c] | __asm ("str.w r7, [r8, 0x3c]");
0x0008e2bc mov r7, r0 | r7 = r0;
0x0008e2be cmp r0, 0 |
| if (r0 != 0) {
0x0008e2c0 bne.w 0x8e0b0 | goto label_12;
| }
0x0008e2c4 vld1.32 {d7}, [sb] | __asm ("vld1.32 {d7}, [sb]");
0x0008e2c8 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x0008e2ca vst1.32 {d7}, [r6] | __asm ("vst1.32 {d7}, [r6]");
0x0008e2ce vmov r6, s14 | __asm ("vmov r6, s14");
0x0008e2d2 cmp r6, 0 |
| if (r6 != 0) {
0x0008e2d4 bne.w 0x8e868 | goto label_129;
| }
0x0008e2d8 ldr r7, [sp, 0x14] | r7 = var_14h;
0x0008e2da movs r1, 1 | r1 = 1;
0x0008e2dc ldr.w r2, [pc, 0x950] |
0x0008e2e0 mov r0, r7 | r0 = r7;
0x0008e2e2 add r2, pc | r2 = 0x11cf16;
0x0008e2e4 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e2e8 mov r2, sl | r2 = sl;
0x0008e2ea mov r1, r4 | r1 = r4;
0x0008e2ec mov r0, r7 | r0 = r7;
0x0008e2ee bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e2f2 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008e2f4 mov r7, r0 | r7 = r0;
0x0008e2f6 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x0008e2fa ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x0008e2fe str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x0008e302 str r3, [sp, 0x20] | var_20h = r3;
0x0008e304 bl 0x2743c | fcn_0002743c (r0, r1);
0x0008e308 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0008e30a mov r8, r0 | r8 = r0;
0x0008e30c strh r0, [r4, 2] | *((r4 + 2)) = r0;
0x0008e30e cmp r3, 0 |
| if (r3 == 0) {
0x0008e310 beq.w 0x8d980 | goto label_11;
| }
| label_41:
0x0008e314 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0008e316 add r1, sp, 0x98 | r1 += var_98h;
0x0008e318 bl 0x23220 | r0 = fcn_00023220 (r0, r1);
| if (r0 != 0) {
0x0008e31c cbz r0, 0x8e326 |
0x0008e31e ldr r2, [sp, 0x98] | r2 = var_98h;
0x0008e320 cmp r2, 0 |
| if (r2 > 0) {
0x0008e322 bgt.w 0x8ea96 | goto label_130;
| }
| }
| label_42:
0x0008e326 cmp r6, 0 |
| if (r6 == 0) {
0x0008e328 beq.w 0x8d980 | goto label_11;
| }
0x0008e32c ldr r3, [r5] | r3 = *(r5);
0x0008e32e ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x0008e330 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008e334 it lt |
| if (r6 >= 0) {
0x0008e336 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x0008e33a cmp r3, 0 |
| if (r3 != 0) {
0x0008e33c bne.w 0x8ea8e | goto label_131;
| }
0x0008e340 ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x0008e342 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0008e346 add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| label_49:
0x0008e34a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008e34c b.w 0x8d980 | goto label_11;
| label_99:
0x0008e350 ldr.w r2, [pc, 0x8e0] |
0x0008e354 add r2, pc | r2 = 0x11cf8c;
0x0008e356 adds r2, 4 | r2 += 4;
0x0008e358 b 0x8dbbc | goto label_13;
| label_106:
0x0008e35a ldr.w r3, [pc, 0x8dc] |
0x0008e35e add r3, pc | r3 = 0x11cf9c;
0x0008e360 adds r3, 4 | r3 += 4;
0x0008e362 b 0x8dd2e | goto label_14;
| label_92:
0x0008e364 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e366 str r3, [sp, 0x50] | var_50h = r3;
| label_56:
0x0008e368 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0008e36a mov.w r8, 0 | r8 = 0;
0x0008e36e ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e370 mov r2, r8 | r2 = r8;
0x0008e372 ldr.w sb, [r3] | sb = *(r3);
0x0008e376 ldr r1, [r0, 0x2c] | r1 = *((r0 + 0x2c));
0x0008e378 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008e37c add.w r3, sb, 1 | r3 = sb + 1;
0x0008e380 add r3, r1 | r3 += r1;
0x0008e382 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
0x0008e384 adds r3, r1, 1 | r3 = r1 + 1;
0x0008e386 mov r0, r6 | r0 = r6;
0x0008e388 movs r1, 0x47 | r1 = 0x47;
0x0008e38a str r3, [sp, 0x4c] | var_4ch = r3;
0x0008e38c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e390 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008e392 movs r2, 1 | r2 = 1;
0x0008e394 mov r1, sb | r1 = sb;
0x0008e396 bl 0x38b20 | r0 = fcn_00038b20 (r0, r1, r2);
0x0008e39a mov sl, r0 | sl = r0;
0x0008e39c cmp r0, 0 |
| if (r0 == 0) {
0x0008e39e beq 0x8e432 | goto label_132;
| }
0x0008e3a0 cmp sb, r8 |
| if (sb <= r8) {
0x0008e3a2 ble 0x8e432 | goto label_132;
| }
0x0008e3a4 mov r2, r8 | r2 = r8;
0x0008e3a6 str r7, [sp, 0x38] | var_38h = r7;
0x0008e3a8 add.w r8, r0, 0x10 | r8 = r0 + 0x10;
0x0008e3ac mov fp, r2 |
0x0008e3ae mov r7, r2 | r7 = r2;
0x0008e3b0 str r5, [sp, 0x20] | var_20h = r5;
0x0008e3b2 str r6, [sp, 0x2c] | var_2ch = r6;
0x0008e3b4 b 0x8e3da |
| while (r5 != 0) {
0x0008e3b6 ldr r6, [r5, 0x34] | r6 = *((r5 + 0x34));
| if (r6 == 0) {
0x0008e3b8 cbz r6, 0x8e412 | goto label_133;
| }
0x0008e3ba ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
| if (r1 == 0) {
0x0008e3bc cbz r1, 0x8e3fa | goto label_134;
| }
0x0008e3be ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e3c0 mov r2, r7 | r2 = r7;
0x0008e3c2 bl 0x46d8c | r0 = fcn_00046d8c (r0, r1, r2);
| if (r0 == 0) {
0x0008e3c6 cbz r0, 0x8e3fa | goto label_134;
| }
| label_15:
0x0008e3c8 ldr.w r1, [sl, 0x10] | r1 = *((sl + 0x10));
0x0008e3cc str r0, [r8, 4]! | *((r8 += 4)) = r0;
0x0008e3d0 strb.w fp, [r1, r7] | *((r1 + r7)) = fp;
0x0008e3d4 adds r7, 1 | r7++;
0x0008e3d6 cmp sb, r7 |
| if (sb == r7) {
0x0008e3d8 beq 0x8e42c | goto label_135;
| }
0x0008e3da ldr r5, [r4, 0x34] | r5 = *((r4 + 0x34));
0x0008e3dc cmp r5, 0 |
0x0008e3de bne 0x8e3b6 |
| }
| label_16:
0x0008e3e0 ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x0008e3e2 ldr r0, [r1] | r0 = *(r1);
0x0008e3e4 cmp r0, r7 |
0x0008e3e6 it le |
| if (r0 <= r7) {
0x0008e3e8 movle r0, 0 | r0 = 0;
| goto label_136;
| }
| if (r0 <= r7) {
| label_136:
0x0008e3ea ble 0x8e3c8 | goto label_15;
| }
0x0008e3ec add.w r1, r1, r7, lsl 4 | r1 += (r7 << 4);
0x0008e3f0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e3f2 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0008e3f4 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0008e3f6 stc2l p7, c14, [r0, 0x398] | __asm ("stc2l p7, c14, [r0, 0x398]");
| label_134:
0x0008e3fa ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x0008e3fc ldr r0, [r1] | r0 = *(r1);
0x0008e3fe cmp r0, r7 |
| if (r0 <= r7) {
0x0008e400 ble 0x8e412 | goto label_133;
| }
0x0008e402 add.w r1, r1, r7, lsl 4 | r1 += (r7 << 4);
0x0008e406 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e408 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0008e40a bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x0008e40e cmp r0, 0 |
| if (r0 != 0) {
0x0008e410 bne 0x8e3c8 | goto label_15;
| }
| label_133:
0x0008e412 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x0008e414 ldr r0, [r1] | r0 = *(r1);
0x0008e416 cmp r0, r7 |
| if (r0 <= r7) {
0x0008e418 ble 0x8e3e0 | goto label_16;
| }
0x0008e41a add.w r1, r1, r7, lsl 4 | r1 += (r7 << 4);
0x0008e41e ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e420 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0008e422 bl 0x45f78 | r0 = fcn_00045f78 (r0, r1);
0x0008e426 cmp r0, 0 |
| if (r0 != 0) {
0x0008e428 bne 0x8e3c8 | goto label_15;
| }
0x0008e42a b 0x8e3e0 | goto label_16;
| label_135:
0x0008e42c ldr r5, [sp, 0x20] | r5 = var_20h;
0x0008e42e ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0008e430 ldr r7, [sp, 0x38] | r7 = var_38h;
| label_132:
0x0008e432 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008e434 ldr.w r8, [r4, 0x34] | r8 = *((r4 + 0x34));
0x0008e438 subs r3, 0x86 | r3 -= 0x86;
0x0008e43a mov r2, r3 | r2 = r3;
0x0008e43c str r3, [sp, 0x44] | var_44h = r3;
0x0008e43e cmp r2, 1 |
0x0008e440 mov r3, r8 | r3 = r8;
| if (r2 > 1) {
0x0008e442 bhi.w 0x8da66 | goto label_17;
| }
0x0008e446 b.w 0x8da5a | goto label_18;
| label_104:
0x0008e44a ldr.w r1, [pc, 0x7f0] |
0x0008e44e mov.w sb, 0 | sb = 0;
0x0008e452 mov r0, r6 | r0 = r6;
0x0008e454 add r1, pc | r1 = 0x11d096;
0x0008e456 bl 0x4a160 | fcn_0004a160 (r0);
0x0008e45a mov r3, fp | r3 = fp;
0x0008e45c ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008e45e movs r1, 9 | r1 = 9;
0x0008e460 mov r0, r6 | r0 = r6;
0x0008e462 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008e466 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e46a ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0008e46e mov r4, r0 | r4 = r0;
0x0008e470 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e472 movs r1, 0xb | r1 = 0xb;
0x0008e474 mov r0, r6 | r0 = r6;
0x0008e476 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008e47a mov r2, sl | r2 = sl;
0x0008e47c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e480 mov r1, r4 | r1 = r4;
0x0008e482 mov r0, r6 | r0 = r6;
0x0008e484 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0008e488 ldr.w r1, [pc, 0x7b4] |
0x0008e48c mov r0, r6 | r0 = r6;
0x0008e48e add r1, pc | r1 = 0x11d0d2;
0x0008e490 bl 0x4a160 | fcn_0004a160 (r0);
0x0008e494 mov r3, fp | r3 = fp;
0x0008e496 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008e498 movs r1, 9 | r1 = 9;
0x0008e49a mov r0, r6 | r0 = r6;
0x0008e49c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008e4a0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e4a4 mov r2, sl | r2 = sl;
0x0008e4a6 mov fp, r0 |
0x0008e4a8 mov r3, r7 | r3 = r7;
0x0008e4aa movs r1, 0xb | r1 = 0xb;
0x0008e4ac mov r0, r6 | r0 = r6;
0x0008e4ae str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008e4b2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e4b6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008e4b8 mov r2, sb | r2 = sb;
0x0008e4ba movs r1, 8 | r1 = 8;
0x0008e4bc mov r0, r6 | r0 = r6;
0x0008e4be str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008e4c2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e4c6 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008e4c8 cmp r0, 0x87 |
0x0008e4ca it eq |
| if (r0 == 0x87) {
0x0008e4cc moveq sl, fp | sl = fp;
| goto label_137;
| }
| if (r0 == 0x87) {
| label_137:
0x0008e4ce beq.w 0x8dcd2 | goto label_19;
| }
0x0008e4d2 ldr.w r1, [pc, 0x770] |
0x0008e4d6 mov r0, r6 | r0 = r6;
0x0008e4d8 add r1, pc | r1 = 0x11d122;
0x0008e4da bl 0x4a160 | fcn_0004a160 (r0);
0x0008e4de mov r2, sl | r2 = sl;
0x0008e4e0 mov r3, r7 | r3 = r7;
0x0008e4e2 movs r1, 0xb | r1 = 0xb;
0x0008e4e4 mov r0, r6 | r0 = r6;
0x0008e4e6 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0008e4ea bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e4ee ldr r1, [sp, 0x34] | r1 = var_34h;
0x0008e4f0 mov sl, r0 | sl = r0;
0x0008e4f2 mov r0, r6 | r0 = r6;
0x0008e4f4 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0008e4f8 b.w 0x8dcd2 | goto label_19;
| label_70:
0x0008e4fc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0008e4fe movs r2, 1 | r2 = 1;
0x0008e500 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008e502 ldr.w r8, [r3] | r8 = *(r3);
0x0008e506 mov r1, r8 | r1 = r8;
0x0008e508 bl 0x38b20 | r0 = fcn_00038b20 (r0, r1, r2);
0x0008e50c mov sb, r0 | sb = r0;
0x0008e50e cmp r0, 0 |
| if (r0 == 0) {
0x0008e510 beq.w 0x8ea06 | goto label_138;
| }
0x0008e514 cmp.w r8, 0 |
0x0008e518 add.w sl, r0, 0x14 | sl = r0 + 0x14;
| if (r8 <= 0) {
0x0008e51c ble 0x8e5fa | goto label_139;
| }
0x0008e51e movs r2, 0 | r2 = 0;
0x0008e520 str r5, [sp, 0x24] | var_24h = r5;
0x0008e522 str r6, [sp, 0x28] | var_28h = r6;
0x0008e524 mov fp, r2 |
0x0008e526 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0008e528 mov r6, r2 | r6 = r2;
0x0008e52a str r7, [sp, 0x1c] | var_1ch = r7;
0x0008e52c mov r7, r4 | r7 = r4;
0x0008e52e ldr r4, [sp, 0x14] | r4 = var_14h;
0x0008e530 b 0x8e54a |
| while (r1 != 0) {
0x0008e532 mov r2, r6 | r2 = r6;
0x0008e534 mov r0, r4 | r0 = r4;
0x0008e536 bl 0x46d8c | r0 = fcn_00046d8c (r0, r1, r2);
| if (r0 == 0) {
0x0008e53a cbz r0, 0x8e550 | goto label_140;
| }
0x0008e53c str.w r0, [sl] | __asm ("str.w r0, [sl]");
| label_20:
0x0008e540 adds r6, 1 | r6++;
0x0008e542 add.w sl, sl, 4 | sl += 4;
0x0008e546 cmp r8, r6 |
| if (r8 == r6) {
0x0008e548 beq 0x8e5f2 | goto label_141;
| }
0x0008e54a ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x0008e54c cmp r1, 0 |
0x0008e54e bne 0x8e532 |
| }
| label_140:
0x0008e550 ldr r1, [r7, 0x1c] | r1 = *((r7 + 0x1c));
0x0008e552 ldr r0, [r1] | r0 = *(r1);
0x0008e554 cmp r0, r6 |
0x0008e556 it le |
| if (r0 > r6) {
0x0008e558 strle fp, [sl] | *(sl) = fp;
| }
| if (r0 <= r6) {
0x0008e55c ble 0x8e572 | goto label_142;
| }
0x0008e55e add.w r1, r1, r6, lsl 4 | r1 += (r6 << 4);
0x0008e562 mov r0, r4 | r0 = r4;
0x0008e564 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0008e566 bl 0x45f78 | fcn_00045f78 (r0, r1);
0x0008e56a str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x0008e56e cmp r0, 0 |
| if (r0 != 0) {
0x0008e570 bne 0x8e540 | goto label_20;
| }
| label_142:
0x0008e572 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0008e574 str.w r1, [sl] | __asm ("str.w r1, [sl]");
0x0008e578 b 0x8e540 | goto label_20;
| label_100:
0x0008e57a ldr.w r1, [pc, 0x6cc] |
0x0008e57e mov r0, r6 | r0 = r6;
0x0008e580 add r1, pc | r1 = 0x11d1ce;
0x0008e582 bl 0x4a160 | fcn_0004a160 (r0);
0x0008e586 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0008e588 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008e58a ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008e58c strd sl, r1, [sp, 8] | __asm ("strd sl, r1, [var_8h]");
0x0008e590 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0008e592 str r3, [sp, 4] | var_4h = r3;
0x0008e594 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e596 str r1, [sp] | *(sp) = r1;
0x0008e598 mov r1, r4 | r1 = r4;
0x0008e59a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008e59c bl 0x4ffc4 | fcn_0004ffc4 (r0, r1, r2, r3, r4, r5, r6);
0x0008e5a0 str r0, [sp, 0x30] | var_30h = r0;
0x0008e5a2 cmp.w sl, 0 |
| if (sl != 0) {
0x0008e5a6 bne.w 0x8dc56 | goto label_21;
| }
| label_103:
0x0008e5aa ldr.w r1, [pc, 0x6a0] |
0x0008e5ae movs r7, 0 | r7 = 0;
0x0008e5b0 mov r0, r6 | r0 = r6;
0x0008e5b2 add r1, pc | r1 = 0x11d204;
0x0008e5b4 bl 0x4a160 | fcn_0004a160 (r0);
0x0008e5b8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008e5ba movs r1, 9 | r1 = 9;
0x0008e5bc ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008e5be mov r0, r6 | r0 = r6;
0x0008e5c0 str r7, [sp] | *(sp) = r7;
0x0008e5c2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e5c6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e5c8 movs r1, 0xb | r1 = 0xb;
0x0008e5ca ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008e5cc str r7, [sp] | *(sp) = r7;
0x0008e5ce mov r7, r0 | r7 = r0;
0x0008e5d0 mov r0, r6 | r0 = r6;
0x0008e5d2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e5d6 mov r1, r7 | r1 = r7;
0x0008e5d8 str r0, [sp, 0x18] | var_18h = r0;
0x0008e5da mov r0, r6 | r0 = r6;
0x0008e5dc bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0008e5e0 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x0008e5e4 ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x0008e5e8 bl 0x2743c | fcn_0002743c (r0, r1);
0x0008e5ec strh r0, [r4, 2] | *((r4 + 2)) = r0;
0x0008e5ee b.w 0x8dc74 | goto label_22;
| label_141:
0x0008e5f2 mov r4, r7 | r4 = r7;
0x0008e5f4 ldr r5, [sp, 0x24] | r5 = var_24h;
0x0008e5f6 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0008e5f8 ldr r6, [sp, 0x28] | r6 = var_28h;
| label_139:
0x0008e5fa ldr.w sl, [pc, 0x654] |
0x0008e5fe str r7, [sp, 0x1c] | var_1ch = r7;
0x0008e600 mov r7, r5 | r7 = r5;
0x0008e602 str r6, [sp, 0x24] | var_24h = r6;
0x0008e604 mov r6, r8 | r6 = r8;
0x0008e606 add sl, pc | sl = 0x11d25c;
0x0008e608 mov r8, r4 | r8 = r4;
0x0008e60a add.w sl, sl, 4 | sl += 4;
| label_23:
0x0008e60e add.w fp, r8, 0x10 |
0x0008e612 add.w r5, r8, 0x18 | r5 = r8 + 0x18;
0x0008e616 mov.w r4, -1 | r4 = -1;
| do {
0x0008e61a ldr r1, [fp, 4]! | r1 = var_80h;
0x0008e61e cmp r1, 0 |
| if (r1 < 0) {
0x0008e620 blt 0x8e654 | goto label_143;
| }
0x0008e622 ldr r3, [r7] | r3 = *(r7);
0x0008e624 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0008e628 cbnz r3, 0x8e680 | goto label_144;
| }
0x0008e62a ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x0008e62c add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0008e630 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
| label_24:
0x0008e634 str r6, [r3, 8] | *((r3 + 8)) = r6;
0x0008e636 mov r2, sb | r2 = sb;
0x0008e638 ldr.w r3, [sb] | r3 = *(sb);
0x0008e63c mov r0, r7 | r0 = r7;
0x0008e63e adds r3, 1 | r3++;
0x0008e640 str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x0008e644 mvn r3, 7 | r3 = ~7;
0x0008e648 bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0008e64c cmp r5, fp |
0x0008e64e str.w r4, [fp] | __asm ("str.w r4, [fp]");
0x0008e652 bne 0x8e61a |
| } while (r5 != fp);
| label_143:
0x0008e654 ldr.w r8, [r8, 0x34] | r8 = *((r8 + 0x34));
0x0008e658 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008e65c bne 0x8e60e | goto label_23;
| }
0x0008e65e ldr.w r3, [sb] | r3 = *(sb);
0x0008e662 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0008e664 ldr r6, [sp, 0x24] | r6 = var_24h;
0x0008e666 subs r3, 1 | r3--;
0x0008e668 str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x0008e66c cmp r3, 0 |
| if (r3 != 0) {
0x0008e66e bne.w 0x8d724 | goto label_0;
| }
0x0008e672 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008e676 mov r1, sb | r1 = sb;
0x0008e678 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0008e67c b.w 0x8d724 | goto label_0;
| label_144:
0x0008e680 mov r3, sl | r3 = sl;
0x0008e682 b 0x8e634 | goto label_24;
| label_111:
0x0008e684 ldr.w r3, [pc, 0x5cc] |
0x0008e688 add r3, pc | r3 = 0x11d2e0;
0x0008e68a adds r3, 4 | r3 += 4;
0x0008e68c b.w 0x8de50 | goto label_25;
| label_97:
0x0008e690 ldr.w r3, [pc, 0x5c4] |
0x0008e694 add r3, pc | r3 = 0x11d2f0;
0x0008e696 b.w 0x8db28 | goto label_26;
| label_98:
0x0008e69a ldr.w r3, [pc, 0x5c0] |
0x0008e69e add r3, pc | r3 = 0x11d300;
0x0008e6a0 b.w 0x8db28 | goto label_26;
| label_85:
0x0008e6a4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008e6a6 ldr.w r3, [r2, 0xdc] | r3 = *((r2 + 0xdc));
0x0008e6aa ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0008e6ac cmp r3, 0 |
| if (r3 != 0) {
0x0008e6ae beq 0x8e6d2 |
0x0008e6b0 ldr r1, [r2] | r1 = *(r2);
0x0008e6b2 it lt |
| if (r3 >= 0) {
0x0008e6b4 ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x0008e6b6 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0008e6ba it lt |
| if (r3 >= 0) {
0x0008e6bc addlt r3, r3, -1 | r3 += -1;
| }
0x0008e6c0 cmp r1, 0 |
| if (r1 != 0) {
0x0008e6c2 bne.w 0x8e9fe | goto label_145;
| }
0x0008e6c6 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0008e6c8 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008e6cc add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_45:
0x0008e6d0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| }
0x0008e6d2 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008e6d4 str.w r3, [r2, 0xdc] | __asm ("str.w r3, [r2, 0xdc]");
0x0008e6d8 b.w 0x8d988 | goto label_27;
| label_75:
0x0008e6dc ldr r6, [sp, 0x14] | r6 = var_14h;
0x0008e6de movs r1, 1 | r1 = 1;
0x0008e6e0 ldr.w r2, [pc, 0x57c] |
0x0008e6e4 mov r0, r6 | r0 = r6;
0x0008e6e6 add r2, pc | r2 = 0x11d34a;
0x0008e6e8 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e6ec ldr.w r2, [pc, 0x574] |
0x0008e6f0 movs r1, 1 | r1 = 1;
0x0008e6f2 mov r0, r6 | r0 = r6;
0x0008e6f4 add r2, pc | r2 = 0x11d35c;
0x0008e6f6 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e6fa b.w 0x8d79c | goto label_28;
| label_123:
0x0008e6fe ldr r7, [sp, 0x14] | r7 = var_14h;
0x0008e700 movs r1, 0x76 | r1 = 0x76;
0x0008e702 str r3, [sp] | *(sp) = r3;
0x0008e704 mov r0, r5 | r0 = r5;
0x0008e706 ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x0008e708 adds r2, r6, 1 | r2 = r6 + 1;
0x0008e70a str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x0008e70c mov r2, r6 | r2 = r6;
0x0008e70e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e712 mov r3, r4 | r3 = r4;
0x0008e714 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
| do {
0x0008e716 mov r2, r3 | r2 = r3;
0x0008e718 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0008e71a cmp r3, 0 |
0x0008e71c bne 0x8e716 |
| } while (r3 != 0);
0x0008e71e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008e720 orr r3, r3, 0x20 | r3 |= 0x20;
0x0008e724 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0008e726 b 0x8e0e0 | goto label_29;
| label_72:
0x0008e728 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008e72a movs r2, 1 | r2 = 1;
0x0008e72c ldr r1, [sp, 0x20] | r1 = var_20h;
0x0008e72e ldr r0, [r3] | r0 = *(r3);
0x0008e730 bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
0x0008e734 b.w 0x8d764 | goto label_3;
| label_105:
0x0008e738 movs r1, 0 | r1 = 0;
0x0008e73a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008e73c str r1, [sp] | *(sp) = r1;
0x0008e73e mov r0, r6 | r0 = r6;
0x0008e740 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008e742 movs r1, 9 | r1 = 9;
0x0008e744 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e748 b.w 0x8dcea | goto label_30;
| label_108:
0x0008e74c ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008e74e mov r1, r6 | r1 = r6;
0x0008e750 rsbs r2, r3, 0 | r2 = r3 - ;
0x0008e752 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008e756 b.w 0x8ddd4 | goto label_31;
| label_107:
0x0008e75a mov r1, r6 | r1 = r6;
0x0008e75c bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008e760 b.w 0x8dd66 | goto label_32;
| label_114:
0x0008e764 ldr.w r3, [pc, 0x500] |
0x0008e768 ldr.w r2, [pc, 0x500] |
0x0008e76c ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e76e add r3, pc | r3 = 0x11d3da;
0x0008e770 str r3, [sp] | *(sp) = r3;
0x0008e772 add r2, pc | r2 = 0x11d3e2;
0x0008e774 mov r3, sb | r3 = sb;
0x0008e776 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e77a b.w 0x8dee2 | goto label_33;
| label_109:
0x0008e77e movs r1, 0 | r1 = 0;
0x0008e780 movs r0, 0xc | r0 = 0xc;
0x0008e782 bl 0x28c3c | fcn_00028c3c (r0);
0x0008e786 b.w 0x8ddec | goto label_34;
| if (r1 != 0) {
0x0008e788 cbnz r1, 0x8e7d8 | goto label_146;
| }
| label_96:
0x0008e78a ldr.w r3, [pc, 0x4e4] |
0x0008e78e add r3, pc | r3 = 0x11d404;
0x0008e790 b.w 0x8db28 | goto label_26;
| label_102:
0x0008e794 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x0008e798 mov r1, sl | r1 = sl;
0x0008e79a bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0008e79e b.w 0x8dc66 | goto label_35;
| label_86:
0x0008e7a2 adds r2, r5, 1 | r2 = r5 + 1;
0x0008e7a4 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008e7a6 lsls r2, r2, 2 | r2 <<= 2;
0x0008e7a8 movs r3, 0 | r3 = 0;
0x0008e7aa bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0008e7ae str r0, [sp, 0x3c] | var_3ch = r0;
0x0008e7b0 cmp r0, 0 |
| if (r0 == 0) {
0x0008e7b2 beq.w 0x8ea78 | goto label_147;
| }
| label_55:
0x0008e7b6 add r3, sp, 0x98 | r3 += var_98h;
0x0008e7b8 str r3, [sp, 0x30] | var_30h = r3;
0x0008e7ba b.w 0x8da1a | goto label_36;
| label_94:
0x0008e7be cmp.w r8, 0 |
| if (r8 == 0) {
0x0008e7c2 beq.w 0x8da66 | goto label_17;
| }
0x0008e7c6 ldr.w ip, [sp, 0x1c] | ip = var_1ch;
0x0008e7ca mov r3, r8 | r3 = r8;
0x0008e7cc mov r0, r4 | r0 = r4;
0x0008e7ce movs r1, 1 | r1 = 1;
0x0008e7d0 b 0x8e7dc |
| while (r2 == ip) {
0x0008e7d2 ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x0008e7d4 adds r1, 1 | r1++;
0x0008e7d6 mov r0, r3 | r0 = r3;
| if (r2 == 0) {
| label_146:
0x0008e7d8 cbz r2, 0x8e7e2 | goto label_148;
| }
0x0008e7da mov r3, r2 | r3 = r2;
0x0008e7dc ldrb r2, [r0] | r2 = *(r0);
0x0008e7de cmp r2, ip |
0x0008e7e0 beq 0x8e7d2 |
| }
| label_148:
0x0008e7e2 cmp r1, 3 |
| if (r1 <= 3) {
0x0008e7e4 ble.w 0x8da66 | goto label_17;
| }
0x0008e7e8 movs r3, 2 | r3 = 2;
0x0008e7ea mov r2, r8 | r2 = r8;
| do {
0x0008e7ec adds r3, 2 | r3 += 2;
0x0008e7ee mov r0, r2 | r0 = r2;
0x0008e7f0 cmp r3, r1 |
0x0008e7f2 ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x0008e7f4 blt 0x8e7ec |
| } while (r3 < r1);
0x0008e7f6 mov r8, r2 | r8 = r2;
0x0008e7f8 str r0, [sp, 0x38] | var_38h = r0;
0x0008e7fa b.w 0x8da68 | goto label_37;
| label_126:
0x0008e7fe ldr.w r3, [pc, 0x474] |
0x0008e802 add r3, pc | r3 = 0x11d47c;
0x0008e804 b 0x8e128 | goto label_38;
| label_80:
0x0008e806 ldr.w r3, [pc, 0x470] |
0x0008e80a add r3, pc | r3 = 0x11d488;
0x0008e80c b.w 0x8d83e | goto label_39;
| label_79:
0x0008e810 ldr.w r3, [pc, 0x468] |
0x0008e814 add r3, pc | r3 = 0x11d494;
0x0008e816 b.w 0x8d83e | goto label_39;
| label_125:
0x0008e81a ldr.w r3, [pc, 0x464] |
0x0008e81e add r3, pc | r3 = 0x11d4a4;
0x0008e820 b 0x8e128 | goto label_38;
| label_78:
0x0008e822 ldr.w r3, [pc, 0x460] |
0x0008e826 add r3, pc | r3 = 0x11d4b0;
0x0008e828 b.w 0x8d83e | goto label_39;
| label_101:
0x0008e82c str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
0x0008e830 b.w 0x8dc66 | goto label_35;
| label_95:
0x0008e834 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e836 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0008e838 ldr r1, [r0, 0x2c] | r1 = *((r0 + 0x2c));
0x0008e83a adds r7, r1, 2 | r7 = r1 + 2;
0x0008e83c add.w sb, r1, 1 | sb = r1 + 1;
0x0008e840 str r7, [sp, 0x58] | var_58h = r7;
0x0008e842 str r7, [r0, 0x2c] | *((r0 + 0x2c)) = r7;
| if (r3 != 0) {
0x0008e844 cbz r3, 0x8e848 |
0x0008e846 adds r2, r3, 1 | r2 = r3 + 1;
| }
0x0008e848 movs r7, 0 | r7 = 0;
0x0008e84a mov r3, sb | r3 = sb;
0x0008e84c movs r1, 0x50 | r1 = 0x50;
0x0008e84e mov r0, r6 | r0 = r6;
0x0008e850 str r7, [sp] | *(sp) = r7;
0x0008e852 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e856 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008e858 mov r2, sb | r2 = sb;
0x0008e85a movs r1, 0x50 | r1 = 0x50;
0x0008e85c mov r0, r6 | r0 = r6;
0x0008e85e str r7, [sp] | *(sp) = r7;
0x0008e860 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e864 b.w 0x8dac8 | goto label_40;
| label_129:
0x0008e868 mov r3, r0 | r3 = r0;
0x0008e86a mov r2, r6 | r2 = r6;
0x0008e86c movs r1, 0x10 | r1 = 0x10;
0x0008e86e str r0, [sp] | *(sp) = r0;
0x0008e870 mov r0, r5 | r0 = r5;
0x0008e872 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e876 ldr.w r1, [pc, 0x410] |
0x0008e87a mov r6, r0 | r6 = r0;
0x0008e87c mov r0, r5 | r0 = r5;
0x0008e87e add r1, pc | r1 = 0x11d50c;
0x0008e880 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0008e884 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0008e886 cmp r3, 0 |
| if (r3 != 0) {
0x0008e888 bne.w 0x8eada | goto label_149;
| }
| label_50:
0x0008e88c ldr r7, [sp, 0x14] | r7 = var_14h;
0x0008e88e movs r1, 1 | r1 = 1;
0x0008e890 ldr r2, [pc, 0x3f8] |
0x0008e892 mov r0, r7 | r0 = r7;
0x0008e894 add r2, pc | r2 = 0x11d524;
0x0008e896 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e89a mov r2, sl | r2 = sl;
0x0008e89c mov r1, r4 | r1 = r4;
0x0008e89e mov r0, r7 | r0 = r7;
0x0008e8a0 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e8a4 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008e8a6 mov r7, r0 | r7 = r0;
0x0008e8a8 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x0008e8ac ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x0008e8b0 str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x0008e8b4 str r3, [sp, 0x20] | var_20h = r3;
0x0008e8b6 bl 0x2743c | fcn_0002743c (r0, r1);
0x0008e8ba ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0008e8bc mov r8, r0 | r8 = r0;
0x0008e8be strh r0, [r4, 2] | *((r4 + 2)) = r0;
0x0008e8c0 cmp r3, 0 |
| if (r3 != 0) {
0x0008e8c2 bne.w 0x8e314 | goto label_41;
| }
0x0008e8c6 b 0x8e326 | goto label_42;
| label_124:
0x0008e8c8 ldr r3, [pc, 0x3c4] |
0x0008e8ca movs r2, 2 | r2 = 2;
0x0008e8cc add r3, pc | r3 = 0x11d560;
0x0008e8ce b 0x8e128 | goto label_38;
| label_121:
0x0008e8d0 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x0008e8d4 ldr r2, [pc, 0x3bc] |
0x0008e8d6 str r1, [r7, 0x38] | *((r7 + 0x38)) = r1;
0x0008e8d8 movs r1, 1 | r1 = 1;
0x0008e8da mov r0, r8 | r0 = r8;
0x0008e8dc add r2, pc | r2 = 0x11d574;
0x0008e8de bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e8e2 add r3, sp, 0x98 | r3 += var_98h;
0x0008e8e4 mov r0, r8 | r0 = r8;
0x0008e8e6 mov r2, r3 | r2 = r3;
0x0008e8e8 mov r1, r7 | r1 = r7;
0x0008e8ea str r3, [sp, 0x30] | var_30h = r3;
0x0008e8ec bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e8f0 str r4, [r7, 0x38] | *((r7 + 0x38)) = r4;
0x0008e8f2 mov r8, r0 | r8 = r0;
0x0008e8f4 cmp r0, 0 |
| if (r0 != 0) {
0x0008e8f6 bne.w 0x8e04a | goto label_43;
| }
0x0008e8fa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e8fc mov r2, fp | r2 = fp;
0x0008e8fe movs r1, 0x23 | r1 = 0x23;
0x0008e900 str r0, [sp] | *(sp) = r0;
0x0008e902 mov r0, sb | r0 = sb;
0x0008e904 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e908 mov r3, r8 | r3 = r8;
0x0008e90a str r0, [sp, 0x44] | var_44h = r0;
0x0008e90c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008e90e movs r1, 0x88 | r1 = 0x88;
0x0008e910 mov r0, sb | r0 = sb;
0x0008e912 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008e916 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e91a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008e91c cmp r3, 0 |
| if (r3 == 0) {
0x0008e91e beq.w 0x8ebea | goto label_150;
| }
0x0008e922 ldr r3, [r3] | r3 = *(r3);
0x0008e924 movs r1, 0x5e | r1 = 0x5e;
0x0008e926 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008e928 mov r0, sb | r0 = sb;
0x0008e92a adds r3, 1 | r3++;
0x0008e92c str r2, [sp] | *(sp) = r2;
0x0008e92e mov r2, fp | r2 = fp;
0x0008e930 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_60:
0x0008e934 movs r3, 0 | r3 = 0;
0x0008e936 mov r2, fp | r2 = fp;
0x0008e938 str r3, [sp] | *(sp) = r3;
0x0008e93a movs r1, 0x82 | r1 = 0x82;
0x0008e93c mov r0, sb | r0 = sb;
0x0008e93e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e942 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008e944 ldr.w r8, [r3, 0x38] | r8 = *((r3 + 0x38));
0x0008e948 add.w fp, r8, -1 |
0x0008e94c str.w fp, [r3, 0x38] | __asm ("str.w fp, [r3, 0x38]");
0x0008e950 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008e952 cmp r3, 0 |
| if (r3 > 0) {
0x0008e954 ble 0x8e970 |
0x0008e956 mov r2, r3 | r2 = r3;
0x0008e958 movs r3, 1 | r3 = 1;
0x0008e95a movs r1, 0x31 | r1 = 0x31;
0x0008e95c str r3, [sp] | *(sp) = r3;
0x0008e95e mov r0, sb | r0 = sb;
0x0008e960 mov r3, fp | r3 = fp;
0x0008e962 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008e966 ldr r1, [pc, 0x330] |
0x0008e968 mov r0, sb | r0 = sb;
0x0008e96a add r1, pc | r1 = 0x11d608;
0x0008e96c bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
| }
0x0008e970 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e972 mov r1, r4 | r1 = r4;
0x0008e974 strd sl, fp, [sp, 4] | __asm ("strd sl, fp, [var_4h]");
0x0008e978 mov.w sl, 0 | sl = 0;
0x0008e97c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008e97e str r3, [sp, 0xc] | var_ch = r3;
0x0008e980 mov r3, sl | r3 = sl;
0x0008e982 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008e984 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0008e988 bl 0x8c70c | fcn_0008c70c (r0, r1, r2, r3, r4, r5, r6);
0x0008e98c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e98e cmp r3, 0 |
| if (r3 != 0) {
0x0008e990 bne.w 0x8ec16 | goto label_151;
| }
| label_62:
0x0008e994 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008e998 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008e99c cmn r2, r3 |
| if (r2 < r3) {
0x0008e99e bmi.w 0x8ec0a | goto label_152;
| }
0x0008e9a2 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008e9a4 lsl.w r3, r8, 2 | r3 = r8 << 2;
0x0008e9a6 lsls r0, r1, 0xe | r0 = r1 << 0xe;
0x0008e9a8 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008e9ac rsbs r3, r3, 0 | r3 -= ;
0x0008e9ae str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_61:
0x0008e9b0 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x0008e9b4 movs r3, 0 | r3 = 0;
0x0008e9b6 ldr r2, [pc, 0x2e4] |
0x0008e9b8 movs r1, 1 | r1 = 1;
0x0008e9ba str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x0008e9bc mov r0, r8 | r0 = r8;
0x0008e9be add r2, pc | r2 = 0x11d660;
0x0008e9c0 bl 0x4ed48 | fcn_0004ed48 (r0, r1);
0x0008e9c4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008e9c6 mov r1, r4 | r1 = r4;
0x0008e9c8 mov r0, r8 | r0 = r8;
0x0008e9ca bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x0008e9ce mov r0, sb | r0 = sb;
0x0008e9d0 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0008e9d2 str r7, [r6, 0x34] | *((r6 + 0x34)) = r7;
0x0008e9d4 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0008e9d8 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008e9dc ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008e9e0 cmn r2, r3 |
| if (r2 < r3) {
0x0008e9e2 bmi.w 0x8ebfc | goto label_153;
| }
0x0008e9e6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008e9e8 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008e9ec ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008e9ee lsls r3, r3, 2 | r3 <<= 2;
0x0008e9f0 rsbs r3, r3, 0 | r3 -= ;
0x0008e9f2 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0008e9f4 b.w 0x8e04a | goto label_43;
| label_117:
0x0008e9f8 str r2, [sp, 0x24] | var_24h = r2;
0x0008e9fa b.w 0x8dfa0 | goto label_44;
| label_145:
0x0008e9fe ldr r3, [pc, 0x2a0] |
0x0008ea00 add r3, pc | r3 = 0x11d6a6;
0x0008ea02 adds r3, 4 | r3 += 4;
0x0008ea04 b 0x8e6d0 | goto label_45;
| label_138:
0x0008ea06 movs r7, 7 | r7 = 7;
0x0008ea08 b.w 0x8d724 | goto label_0;
| label_120:
0x0008ea0c movs r3, 0 | r3 = 0;
0x0008ea0e mov r2, r8 | r2 = r8;
0x0008ea10 str r3, [sp] | *(sp) = r3;
0x0008ea12 movs r1, 0x76 | r1 = 0x76;
0x0008ea14 mov r0, sb | r0 = sb;
0x0008ea16 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ea1a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008ea1c str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x0008ea1e orr r3, r3, 0x20 | r3 |= 0x20;
0x0008ea20 lsls r0, r4, 0xc | r0 = r4 << 0xc;
0x0008ea22 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0008ea24 b.w 0x8e022 | goto label_46;
| label_110:
0x0008ea28 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008ea2a mov r1, r4 | r1 = r4;
0x0008ea2c movs r2, 1 | r2 = 1;
0x0008ea2e ldr r0, [r3] | r0 = *(r3);
0x0008ea30 bl 0x30b6c | fcn_00030b6c (r0, r1, r2);
0x0008ea34 b.w 0x8de08 | goto label_47;
| label_122:
0x0008ea38 movs r7, 7 | r7 = 7;
0x0008ea3a b.w 0x8d764 | goto label_3;
| label_118:
0x0008ea3e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008ea40 cmp r2, 0 |
| if (r2 == 0) {
0x0008ea42 beq 0x8eb34 | goto label_154;
| }
0x0008ea44 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008ea46 mov r8, r3 | r8 = r3;
0x0008ea48 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0008ea4a add.w r3, fp, 2 | r3 += var_2h;
0x0008ea4e str r7, [sp] | *(sp) = r7;
0x0008ea50 mov r0, sb | r0 = sb;
0x0008ea52 str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x0008ea54 movs r3, 0 | r3 = 0;
0x0008ea56 str r3, [sp, 0xa0] | var_a0h = r3;
0x0008ea58 str r3, [sp, 0xac] | var_ach = r3;
0x0008ea5a strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x0008ea5e movs r3, 6 | r3 = 6;
0x0008ea60 str r1, [r2, 0x2c] | *((r2 + 0x2c)) = r1;
0x0008ea62 strb.w r3, [sp, 0x98] | var_98h = r3;
0x0008ea66 mov r3, r1 | r3 = r1;
0x0008ea68 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008ea6a movs r1, 0x79 | r1 = 0x79;
0x0008ea6c str.w fp, [sp, 0x9c] | __asm ("str.w fp, [var_9ch]");
0x0008ea70 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ea74 b.w 0x8dfe8 | goto label_48;
| label_147:
0x0008ea78 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008ea7a ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008ea7c mov sl, r2 | sl = r2;
0x0008ea7e str r2, [sp, 0x50] | var_50h = r2;
0x0008ea80 str r2, [sp, 0x4c] | var_4ch = r2;
0x0008ea82 movs r2, 1 | r2 = 1;
0x0008ea84 str r2, [sp, 0x44] | var_44h = r2;
0x0008ea86 add r2, sp, 0x98 | r2 += var_98h;
0x0008ea88 str r2, [sp, 0x30] | var_30h = r2;
0x0008ea8a b.w 0x8da5a | goto label_18;
| label_131:
0x0008ea8e ldr r3, [pc, 0x214] |
0x0008ea90 add r3, pc | r3 = 0x11d73a;
0x0008ea92 adds r3, 4 | r3 += 4;
0x0008ea94 b 0x8e34a | goto label_49;
| label_130:
0x0008ea96 cmp r2, 7 |
0x0008ea98 asr.w r0, r2, 0x1f | r0 = r2 >> 0x1f;
| if (r2 > 7) {
0x0008ea9c bgt 0x8eb9e | goto label_155;
| }
0x0008ea9e subs r3, r2, 1 | r3 = r2 - 1;
0x0008eaa0 orrs r3, r0 | r3 |= r0;
0x0008eaa2 it eq |
| if (r3 != r0) {
0x0008eaa4 moveq r3, 0 | r3 = 0;
| }
| if (r3 != r0) {
0x0008eaa6 beq 0x8ead2 |
0x0008eaa8 adds r1, r2, r2 | r1 = r2 + r2;
0x0008eaaa adcs r0, r0 | __asm ("adcs r0, r0");
0x0008eaac cmp r1, 8 |
0x0008eaae sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
| if (r1 >= 8) {
0x0008eab2 bhs.w 0x8ec2c | goto label_156;
| }
0x0008eab6 lsls r1, r2, 2 | r1 = r2 << 2;
0x0008eab8 movs r2, 0x14 | r2 = 0x14;
| label_57:
0x0008eaba sub.w r3, r2, 0xa | r3 = r2 - 0xa;
0x0008eabe ldr r2, [pc, 0x1e8] |
0x0008eac0 and r1, r1, 7 | r1 &= 7;
0x0008eac4 add r2, pc | r2 = 0x11d772;
0x0008eac6 add.w r2, r2, r1, lsl 1 | r2 += (r1 << 1);
0x0008eaca ldrh.w r2, [r2, 0x408] | r2 = *((r2 + 0x408));
0x0008eace add r3, r2 | r3 += r2;
0x0008ead0 sxth r3, r3 | __asm ("sxth r3, r3");
| }
0x0008ead2 cmp r8, r3 |
0x0008ead4 it gt |
| if (r8 > r3) {
0x0008ead6 strhgt r3, [r4, 2] | __asm ("strhgt r3, [r4, 2]");
| }
0x0008ead8 b 0x8e326 | goto label_42;
| label_149:
0x0008eada ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008eadc movs r1, 0xa0 | r1 = 0xa0;
0x0008eade str r3, [sp] | *(sp) = r3;
0x0008eae0 mov r0, r5 | r0 = r5;
0x0008eae2 adds r3, 1 | r3++;
0x0008eae4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008eae8 b 0x8e88c | goto label_50;
| label_119:
0x0008eaea ldr r1, [sp, 0x28] | r1 = var_28h;
0x0008eaec mov r0, sb | r0 = sb;
0x0008eaee ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008eaf0 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008eaf2 str.w fp, [sp, 0x9c] | __asm ("str.w fp, [var_9ch]");
0x0008eaf6 str r1, [r3, 0x2c] | *((r3 + 0x2c)) = r1;
0x0008eaf8 movs r3, 8 | r3 = 8;
0x0008eafa str r2, [sp, 0xa0] | var_a0h = r2;
0x0008eafc str r2, [sp, 0xac] | var_ach = r2;
0x0008eafe strd r2, r2, [sp, 0xa4] | __asm ("strd r2, r2, [var_a4h]");
0x0008eb02 strb.w r3, [sp, 0x98] | var_98h = r3;
0x0008eb04 adds r0, 0x98 | r0 += 0x98;
0x0008eb06 mov r3, r1 | r3 = r1;
0x0008eb08 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008eb0a movs r1, 0x79 | r1 = 0x79;
0x0008eb0c str r7, [sp] | *(sp) = r7;
0x0008eb0e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| do {
0x0008eb12 movs r2, 0 | r2 = 0;
0x0008eb14 mov r3, r7 | r3 = r7;
0x0008eb16 str r2, [sp] | *(sp) = r2;
0x0008eb18 movs r1, 0x76 | r1 = 0x76;
0x0008eb1a mov r2, fp | r2 = fp;
0x0008eb1c mov r0, sb | r0 = sb;
0x0008eb1e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008eb22 b.w 0x8e00e | goto label_51;
| label_81:
0x0008eb26 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0008eb28 add.w r8, r3, 1 | r8 = r3 + 1;
0x0008eb2c str.w r8, [r2, 0x2c] | __asm ("str.w r8, [r2, 0x2c]");
0x0008eb30 b.w 0x8d8c4 | goto label_52;
0x0008eb32 bkpt 0xc8 | __asm ("bkpt 0xc8");
| label_154:
0x0008eb34 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0008eb36 mov r8, r3 | r8 = r3;
0x0008eb38 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008eb3a add.w r3, fp, 2 | r3 += var_2h;
0x0008eb3e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008eb40 str.w fp, [sp, 0x9c] | __asm ("str.w fp, [var_9ch]");
0x0008eb44 str r0, [r1, 0x2c] | *((r1 + 0x2c)) = r0;
0x0008eb46 str r7, [sp] | *(sp) = r7;
0x0008eb48 str r3, [r1, 0x28] | *((r1 + 0x28)) = r3;
0x0008eb4a movs r3, 5 | r3 = 5;
0x0008eb4c str r2, [sp, 0xa0] | var_a0h = r2;
0x0008eb4e movs r1, 0x79 | r1 = 0x79;
0x0008eb50 str r2, [sp, 0xac] | var_ach = r2;
0x0008eb52 strd r2, r2, [sp, 0xa4] | __asm ("strd r2, r2, [var_a4h]");
0x0008eb56 strb.w r3, [sp, 0x98] | var_98h = r3;
0x0008eb58 adds r0, 0x98 | r0 += 0x98;
0x0008eb5a mov r3, r0 | r3 = r0;
0x0008eb5c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008eb5e mov r0, sb | r0 = sb;
0x0008eb60 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008eb64 b 0x8eb12 |
| } while (1);
| label_84:
0x0008eb66 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008eb68 mov r1, r5 | r1 = r5;
0x0008eb6a rsbs r2, r3, 0 | r2 = r3 - ;
0x0008eb6c bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008eb70 b.w 0x8d95c | goto label_53;
| label_83:
0x0008eb74 mov r1, r5 | r1 = r5;
0x0008eb76 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008eb7a b.w 0x8d934 | goto label_54;
| label_87:
0x0008eb7e adds r2, r5, 1 | r2 = r5 + 1;
0x0008eb80 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008eb82 lsls r2, r2, 2 | r2 <<= 2;
0x0008eb84 movs r3, 0 | r3 = 0;
0x0008eb86 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0008eb8a str r0, [sp, 0x3c] | var_3ch = r0;
0x0008eb8c cmp r0, 0 |
| if (r0 != 0) {
0x0008eb8e bne.w 0x8e7b6 | goto label_55;
| }
0x0008eb92 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008eb94 str r3, [sp, 0x50] | var_50h = r3;
0x0008eb96 add r3, sp, 0x98 | r3 += var_98h;
0x0008eb98 str r3, [sp, 0x30] | var_30h = r3;
0x0008eb9a b.w 0x8e368 | goto label_56;
| label_155:
0x0008eb9e clz r3, r0 | r3 &= r0;
| if (r0 == 0) {
0x0008eba2 cbnz r0, 0x8ebaa |
0x0008eba4 clz r3, r2 | r3 &= r2;
0x0008eba8 adds r3, 0x20 | r3 += 0x20;
| }
0x0008ebaa rsb.w r3, r3, 0x3c | r3 = 0x3c - r3;
0x0008ebae lsr.w r1, r2, r3 | r1 = r2 >> r3;
0x0008ebb2 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x0008ebb6 rsb.w ip, r3, 0x20 |
0x0008ebba lsls r2, r2, 1 | r2 <<= 1;
0x0008ebbc lsl.w ip, r0, ip |
0x0008ebc0 subs r3, 0x20 | r3 -= 0x20;
0x0008ebc2 lsr.w r3, r0, r3 | r3 = r0 >> r3;
0x0008ebc6 adds r2, 0x28 | r2 += 0x28;
0x0008ebc8 orr.w r1, r1, ip | r1 |= ip;
0x0008ebcc uxth r2, r2 | r2 = (int16_t) r2;
0x0008ebce orrs r1, r3 | r1 |= r3;
0x0008ebd0 b 0x8eaba | goto label_57;
| label_128:
0x0008ebd2 rsb.w r2, sb, 0 | r2 = sb - ;
0x0008ebd6 mov r1, r5 | r1 = r5;
0x0008ebd8 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008ebdc b.w 0x8e220 | goto label_58;
| label_127:
0x0008ebe0 mov r1, r5 | r1 = r5;
0x0008ebe2 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008ebe6 b.w 0x8e1f8 | goto label_59;
| label_150:
0x0008ebea ldr r2, [sp, 0x20] | r2 = var_20h;
0x0008ebec movs r1, 0x86 | r1 = 0x86;
0x0008ebee ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008ebf0 mov r0, sb | r0 = sb;
0x0008ebf2 str r2, [sp] | *(sp) = r2;
0x0008ebf4 mov r2, fp | r2 = fp;
0x0008ebf6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ebfa b 0x8e934 | goto label_60;
| label_153:
0x0008ebfc ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008ebfe mov r1, sb | r1 = sb;
0x0008ec00 rsbs r2, r3, 0 | r2 = r3 - ;
0x0008ec02 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008ec06 b.w 0x8e04a | goto label_43;
| label_152:
0x0008ec0a rsb.w r2, r8, 0 | r2 = r8 - ;
0x0008ec0e mov r1, sb | r1 = sb;
0x0008ec10 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0008ec14 b 0x8e9b0 | goto label_61;
| label_151:
0x0008ec16 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ec18 movs r1, 0x3c | r1 = 0x3c;
0x0008ec1a ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008ec1c mov r0, sb | r0 = sb;
0x0008ec1e str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0008ec22 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008ec26 b 0x8e994 | goto label_62;
| label_73:
0x0008ec28 blx 0x6430 | fcn_00006430 ();
| label_156:
0x0008ec2c movs r2, 0x1e | r2 = 0x1e;
0x0008ec2e b 0x8eaba | goto label_57;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x8f00c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008f00c () | void fcn_0008f00c (int16_t arg_1ch, int16_t arg_80h, int16_t arg_84h, int16_t arg_88h, int16_t arg_8ch, int16_t arg_1e0h, int16_t arg_1f0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_34h_2;
| int16_t var_3ch;
| int16_t var_0h;
| int32_t var_0h_2;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| arithmetic x;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_3ch_2;
| int32_t var_3ch_3;
| int32_t var_44h;
| int32_t var_44h_2;
| int32_t var_4ch;
| int32_t var_4ch_2;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008f00c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008f010 mov fp, r2 |
0x0008f012 ldr r2, [pc, 0x2cc] |
0x0008f014 mov sb, r3 | sb = r3;
0x0008f016 sub sp, 0x5c |
0x0008f018 mov r6, r0 | r6 = r0;
0x0008f01a ldr r3, [pc, 0x2c8] | r3 = *(0x8f2e6);
0x0008f01c add r2, pc | r2 = 0x11e302;
0x0008f01e str r1, [sp, 0x24] | var_24h = r1;
0x0008f020 ldr.w r8, [sp, 0x80] | r8 = *(arg_80h);
0x0008f024 ldr r3, [r2, r3] |
0x0008f026 ldr r2, [r0] | r2 = *(r0);
0x0008f028 ldr.w sl, [sp, 0x84] | sl = *(arg_84h);
0x0008f02c ldr r3, [r3] | r3 = imp.atan;
0x0008f02e str r3, [sp, 0x54] | var_54h = r3;
0x0008f030 mov.w r3, 0 | r3 = 0;
0x0008f034 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0008f036 str r2, [sp, 0x18] | var_18h = r2;
0x0008f038 str r3, [sp, 0x1c] | var_1ch = r3;
0x0008f03a cmp r3, 0 |
| if (r3 == 0) {
0x0008f03c beq.w 0x8f16a | goto label_9;
| }
0x0008f03e strh r5, [r2, 4] | *((r2 + 4)) = r5;
0x0008f040 ldr r3, [sp, 0x8c] | r3 = *(arg_8ch);
0x0008f042 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0008f044 beq.w 0x8f182 | goto label_10;
| }
| label_2:
0x0008f048 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0008f04c cmp r3, 0 |
| if (r3 <= 0) {
0x0008f04e ble 0x8f0d6 | goto label_11;
| }
0x0008f050 movs r3, 0 | r3 = 0;
0x0008f052 str r3, [sp, 0x20] | x = r3;
| label_3:
0x0008f054 movs r4, 0 | r4 = 0;
0x0008f056 add r3, sp, 0x34 | r3 += var_34h;
0x0008f058 mov r5, r4 | r5 = r4;
0x0008f05a str r3, [sp, 0x14] | var_14h = r3;
0x0008f05c b 0x8f0ac |
| while (sl != 0) {
0x0008f05e ldrsh.w r3, [sl, r5, lsl 2] | offset_0 = r5 << 2;
| r3 = *((sl + offset_0));
| label_0:
0x0008f062 ldr.w r2, [r8] | r2 = *(r8);
0x0008f066 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0008f06a ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008f06c ldr.w r0, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| r0 = *((r2 + offset_1));
0x0008f070 str r0, [sp, 0x34] | var_34h = r0;
| if (r0 != 0) {
0x0008f072 cbz r0, 0x8f07c |
0x0008f074 blx 0x65dc | r0 = strcmp (r0, r1);
0x0008f078 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x0008f07c movs r1, 0x3b | r1 = 0x3b;
0x0008f07e movs r3, 0 | r3 = 0;
0x0008f080 str r0, [sp, 0x38] | var_38h = r0;
0x0008f082 adds r5, 1 | r5++;
0x0008f084 ldrd r2, r0, [sp, 0x14] | __asm ("ldrd r2, r0, [var_18h]");
0x0008f088 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x0008f08c mov r2, r7 | r2 = r7;
0x0008f08e mov r3, r0 | r3 = r0;
0x0008f090 movs r1, 0x35 | r1 = 0x35;
0x0008f092 mov r0, r6 | r0 = r6;
0x0008f094 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x0008f098 mov r1, r4 | r1 = r4;
0x0008f09a mov r2, r0 | r2 = r0;
0x0008f09c mov r0, r6 | r0 = r6;
0x0008f09e bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x0008f0a2 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0008f0a6 mov r4, r0 | r4 = r0;
0x0008f0a8 cmp r3, r5 |
| if (r3 <= r5) {
0x0008f0aa ble 0x8f0de | goto label_12;
| }
0x0008f0ac mov.w r3, -1 | r3 = -1;
0x0008f0b0 cmp.w sb, 0 |
| if (sb != 0) {
0x0008f0b4 beq 0x8f0be |
0x0008f0b6 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0008f0ba ldrsh.w r3, [r3, r5, lsl 1] | offset_2 = r5 << 1;
| r3 = *((r3 + offset_2));
| }
0x0008f0be ldr r2, [sp, 0x88] | r2 = *(arg_88h);
0x0008f0c0 mov r1, fp | r1 = fp;
0x0008f0c2 mov r0, r6 | r0 = r6;
0x0008f0c4 bl 0x38754 | r0 = fcn_00038754 (r0, r1, r2, r3, r4, r5);
0x0008f0c8 mov r7, r0 | r7 = r0;
0x0008f0ca cmp.w sl, 0 |
0x0008f0ce bne 0x8f05e |
| }
0x0008f0d0 ldrsh.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x0008f0d4 b 0x8f062 | goto label_0;
| label_11:
0x0008f0d6 movs r4, 0 | r4 = 0;
0x0008f0d8 add r3, sp, 0x34 | r3 += var_34h;
0x0008f0da str r4, [sp, 0x20] | x = r4;
0x0008f0dc str r3, [sp, 0x14] | var_14h = r3;
| label_12:
0x0008f0de ldr.w r3, [r8] | r3 = *(r8);
0x0008f0e2 ldr r2, [sp, 0x8c] | r2 = *(arg_8ch);
0x0008f0e4 cmp r3, fp |
0x0008f0e6 it eq |
| if (r3 == fp) {
0x0008f0e8 cmpeq r2, 1 | __asm ("cmpeq r2, 1");
| }
| if (r3 == fp) {
0x0008f0ea beq 0x8f1de | goto label_13;
| }
| label_4:
0x0008f0ec ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008f0ee mov r1, r4 | r1 = r4;
0x0008f0f0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0008f0f2 strd r6, r3, [sp, 0x34] | __asm ("strd r6, r3, [var_34h]");
0x0008f0f6 movs r3, 0 | r3 = 0;
0x0008f0f8 strd r3, r3, [sp, 0x3c] | __asm ("strd r3, r3, [var_3ch_2]");
0x0008f0fc strd r3, r3, [sp, 0x44] | __asm ("strd r3, r3, [var_44h]");
0x0008f100 strd r3, r3, [sp, 0x4c] | __asm ("strd r3, r3, [var_4ch]");
0x0008f102 adds r3, 0x13 | r3 += 0x13;
0x0008f104 bl 0x48a9c | fcn_00048a9c (r0, r1);
0x0008f106 stc2l p10, c6, [sl], {0x75} | __asm ("stc2l p10, c6, [sl], {0x75}");
0x0008f10a cbz r5, 0x8f138 |
| if (r4 != 0) {
| while (r5 == 0) {
| label_1:
0x0008f10c cbz r4, 0x8f116 |
0x0008f10e ldr r0, [sp, 0x18] | r0 = var_18h;
0x0008f110 mov r1, r4 | r1 = r4;
0x0008f112 bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x0008f116 ldr r3, [sp, 0x20] | r3 = x;
0x0008f118 cmp r3, 0 |
| if (r3 != 0) {
0x0008f11a bne 0x8f1a8 | goto label_14;
| }
| label_5:
0x0008f11c ldr r2, [pc, 0x1c8] |
0x0008f11e ldr r3, [pc, 0x1c4] | r3 = *(0x8f2e6);
0x0008f120 add r2, pc | r2 = 0x11e40c;
0x0008f122 ldr r3, [r2, r3] | r3 = imp.atan;
0x0008f124 ldr r2, [r3] | r2 = imp.atan;
0x0008f126 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008f128 eors r2, r3 | r2 ^= r3;
0x0008f12a mov.w r3, 0 | r3 = 0;
0x0008f12c lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x0008f12e bne.w 0x8f2da | goto label_15;
| }
0x0008f132 add sp, 0x5c |
0x0008f134 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0008f138 mov r3, r5 | r3 = r5;
0x0008f13a ldr r1, [sp, 0x24] | r1 = var_24h;
0x0008f13c mov r2, r4 | r2 = r4;
0x0008f13e strd r5, r5, [sp, 8] | __asm ("strd r5, r5, [var_8h]");
0x0008f142 strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x0008f146 mov r0, r6 | r0 = r6;
0x0008f148 bl 0x7ee90 | fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x0008f14c str r5, [sp] | *(sp) = r5;
0x0008f14e mov r5, r0 | r5 = r0;
0x0008f150 ldrb.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x0008f154 movs r1, 0x9e | r1 = 0x9e;
0x0008f156 ldr r3, [sp, 0x8c] | r3 = *(arg_8ch);
0x0008f158 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008f15a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008f15e cmp r5, 0 |
0x0008f160 beq 0x8f10c |
| }
0x0008f162 mov r0, r5 | r0 = r5;
0x0008f164 bl 0x8248c | fcn_0008248c (r0, r1);
0x0008f168 b 0x8f10c | goto label_1;
| label_9:
0x0008f16a ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0008f16c cmp r3, 0 |
| if (r3 == 0) {
0x0008f16e beq.w 0x8f27a | goto label_16;
| }
| label_6:
0x0008f172 mov r0, r6 | r0 = r6;
0x0008f174 bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x0008f178 ldr r3, [sp, 0x8c] | r3 = *(arg_8ch);
0x0008f17a str r0, [sp, 0x1c] | var_1ch = r0;
0x0008f17c adds r3, 1 | r3++;
| if (r3 != 1) {
0x0008f17e bne.w 0x8f048 | goto label_2;
| }
| label_10:
0x0008f182 movs r4, 0 | r4 = 0;
0x0008f184 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0008f186 mov r3, r4 | r3 = r4;
0x0008f188 str r4, [sp] | *(sp) = r4;
0x0008f18a movs r1, 0x30 | r1 = 0x30;
0x0008f18c ldrb.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x0008f190 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0008f194 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0008f198 str r0, [sp, 0x20] | x = r0;
0x0008f19a cmp r3, r4 |
0x0008f19c itt le |
| if (r3 > r4) {
0x0008f19e addle r3, sp, 0x34 | r3 += var_34h;
| }
| if (r3 <= r4) {
0x0008f1a0 strle r3, [sp, 0x14] | var_14h = r3;
| goto label_17;
| }
| if (r3 > r4) {
| label_17:
0x0008f1a2 bgt.w 0x8f054 | goto label_3;
| }
0x0008f1a6 b 0x8f0ec | goto label_4;
| label_14:
0x0008f1a8 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008f1aa ldr r0, [sp, 0x20] | r0 = x;
0x0008f1ac ldr r2, [r1, 0x6c] | r2 = *((r1 + 0x6c));
0x0008f1ae subs r3, r2, 1 | r3 = r2 - 1;
0x0008f1b0 cmp r0, r3 |
0x0008f1b2 it eq |
| if (r0 == r3) {
0x0008f1b4 streq r0, [r1, 0x6c] | *((r1 + 0x6c)) = r0;
| goto label_18;
| }
| if (r0 == r3) {
| label_18:
0x0008f1b6 beq 0x8f11c | goto label_5;
| }
0x0008f1b8 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0008f1ba ldr r4, [sp, 0x20] | r4 = x;
0x0008f1bc ldr r1, [r5] | r1 = *(r5);
0x0008f1be mov r0, r4 | r0 = r4;
0x0008f1c0 bics.w r0, r0, r4, asr 32 | __asm ("bics.w r0, r0, r4, asr 32");
0x0008f1c4 it hs |
| if (r0 < r3) {
0x0008f1c6 movhs r0, r3 | r0 = r3;
| }
0x0008f1c8 ldrb.w r3, [r1, 0x57] | r3 = *((r1 + 0x57));
0x0008f1cc cmp r3, 0 |
| if (r3 != 0) {
0x0008f1ce bne 0x8f286 | goto label_19;
| }
0x0008f1d0 ldr r1, [r5, 0x68] | r1 = *((r5 + 0x68));
0x0008f1d2 add.w r3, r0, r0, lsl 1 | r3 = r0 + (r0 << 1);
0x0008f1d6 add.w r3, r1, r3, lsl 3 | r3 = r1 + (r3 << 3);
| label_7:
0x0008f1da str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008f1dc b 0x8f11c | goto label_5;
| label_13:
0x0008f1de ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x0008f1e2 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0008f1e6 beq 0x8f28e | goto label_20;
| }
0x0008f1e8 ldrh.w r5, [sb, 0x32] | r5 = *((sb + 0x32));
| if (r5 == 0) {
0x0008f1ec cbz r5, 0x8f260 | goto label_21;
| }
0x0008f1ee strd r4, r8, [sp, 0x28] | __asm ("strd r4, r8, [var_28h]");
0x0008f1f2 movs r5, 0 | r5 = 0;
0x0008f1f4 ldr.w r8, [sp, 0x18] | r8 = var_18h;
| label_8:
0x0008f1f8 mov r7, r5 | r7 = r5;
0x0008f1fa ldr.w sl, [sp, 0x88] | sl = *(arg_88h);
0x0008f1fc adr r0, 0x220 | r0 = 0x220;
| do {
0x0008f1fe ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0008f202 mov r2, sl | r2 = sl;
0x0008f204 mov r1, fp | r1 = fp;
0x0008f206 mov r0, r6 | r0 = r6;
0x0008f208 ldrsh.w r4, [r3, r7, lsl 1] | offset_3 = r7 << 1;
| r4 = *((r3 + offset_3));
0x0008f20c mov r3, r4 | r3 = r4;
0x0008f20e bl 0x38754 | fcn_00038754 (r0, r1, r2, r3, r4, r5);
0x0008f212 ldr.w r2, [fp, 4] | r2 = *(arg_84h);
0x0008f214 movs r0, 4 | r0 = 4;
0x0008f216 add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x0008f21a mov r4, r0 | r4 = r0;
0x0008f21c ldr.w r0, [r2, r3, lsl 2] | offset_4 = r3 << 2;
| r0 = *((r2 + offset_4));
0x0008f21e movs r3, r4 | r3 = r4;
0x0008f220 str r0, [sp, 0x34] | var_34h = r0;
| if (r0 != 0) {
0x0008f222 cbz r0, 0x8f22c |
0x0008f224 blx 0x65dc | r0 = strcmp (r0, r1);
0x0008f228 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x0008f22c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008f22e movs r1, 0x3b | r1 = 0x3b;
0x0008f230 movs r3, 0 | r3 = 0;
0x0008f232 str r0, [sp, 0x38] | var_38h = r0;
0x0008f234 mov r0, r8 | r0 = r8;
0x0008f236 adds r7, 1 | r7++;
0x0008f238 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x0008f23c mov r2, r4 | r2 = r4;
0x0008f23e mov r3, r0 | r3 = r0;
0x0008f240 movs r1, 0x2d | r1 = 0x2d;
0x0008f242 mov r0, r6 | r0 = r6;
0x0008f244 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x0008f248 mov r1, r5 | r1 = r5;
0x0008f24a mov r2, r0 | r2 = r0;
0x0008f24c mov r0, r6 | r0 = r6;
0x0008f24e bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x0008f252 ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x0008f256 mov r5, r0 | r5 = r0;
0x0008f258 cmp r3, r7 |
0x0008f25a bgt 0x8f1fe |
| } while (r3 > r7);
0x0008f25c ldrd r4, r8, [sp, 0x28] | __asm ("ldrd r4, r8, [var_28h]");
| label_21:
0x0008f260 mov r2, r5 | r2 = r5;
0x0008f262 movs r3, 0 | r3 = 0;
0x0008f264 movs r1, 0x13 | r1 = 0x13;
0x0008f266 mov r0, r6 | r0 = r6;
0x0008f268 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008f26c mov r2, r0 | r2 = r0;
| do {
0x0008f26e mov r1, r4 | r1 = r4;
0x0008f270 mov r0, r6 | r0 = r6;
0x0008f272 bl 0x48d98 | r0 = fcn_00048d98 (r0, r1, r2);
0x0008f276 mov r4, r0 | r4 = r0;
0x0008f278 b 0x8f0ec | goto label_4;
| label_16:
0x0008f27a ldr r3, [r2, 0x50] | r3 = *((r2 + 0x50));
0x0008f27c lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0008f27e itt pl |
| if (r3 < r3) {
0x0008f280 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0008f282 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0008f284 b 0x8f172 | goto label_6;
| label_19:
0x0008f286 ldr r3, [pc, 0x64] |
0x0008f288 add r3, pc | r3 = 0x11e57a;
0x0008f28a adds r3, 4 | r3 += 4;
0x0008f28c b 0x8f1da | goto label_7;
| label_20:
0x0008f28e ldr r0, [r6] | r0 = *(r6);
0x0008f290 movs r1, 0xb0 | r1 = 0xb0;
0x0008f292 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008f294 strd r3, r3, [sp, 0x34] | __asm ("strd r3, r3, [var_34h]");
0x0008f298 bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x0008f29c mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0008f29e cbz r0, 0x8f2a8 |
0x0008f2a0 ldr r3, [sp, 0x88] | r3 = *(arg_88h);
0x0008f2a2 str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x0008f2a4 movs r3, 0x44 | r3 = 0x44;
0x0008f2a6 strb r3, [r0, 1] | *((r0 + 1)) = r3;
| }
0x0008f2a8 ldr r7, [sp, 0x24] | r7 = var_24h;
0x0008f2aa movs r3, 0 | r3 = 0;
0x0008f2ac ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008f2ae movs r1, 0xa7 | r1 = 0xa7;
0x0008f2b0 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0008f2b2 strd r3, r3, [sp, 0x34] | __asm ("strd r3, r3, [var_34h]");
0x0008f2b6 ldr r7, [r7, 0x30] | r7 = *((r7 + 0x30));
0x0008f2b8 bl 0x38538 | r0 = fcn_00038538 (r0, r1, r2, r3);
0x0008f2bc mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x0008f2be cbz r0, 0x8f2cc |
0x0008f2c0 movw r2, 0xffff | r2 = 0xffff;
0x0008f2c4 str.w fp, [r0, 0x2c] | __asm ("str.w fp, [r0, 0x2c]");
0x0008f2c8 str r7, [r0, 0x1c] | *((r0 + 0x1c)) = r7;
0x0008f2ca strh r2, [r0, 0x20] | *((r0 + 0x20)) = r2;
| }
0x0008f2cc mov r2, r5 | r2 = r5;
0x0008f2ce movs r1, 0x34 | r1 = 0x34;
0x0008f2d0 mov r0, r6 | r0 = r6;
0x0008f2d2 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0008f2d6 mov r2, r0 | r2 = r0;
0x0008f2d8 b 0x8f26e |
| } while (1);
| label_15:
0x0008f2da blx 0x6430 | fcn_00006430 ();
0x0008f2de nop |
0x0008f2e0 add r5, sp, 0x1f0 | r5 += arg_1f0h;
0x0008f2e2 movs r5, r0 | r5 = r0;
0x0008f2e4 lsls r4, r6, 8 | r4 = r6 << 8;
0x0008f2e6 movs r0, r0 |
0x0008f2e8 add r4, sp, 0x1e0 | r4 += arg_1e0h;
0x0008f2ea movs r5, r0 | r5 = r0;
| if (r5 != r0) {
0x0008f2ec bne 0x8f1f8 | goto label_8;
| }
0x0008f2ee movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x97290 */
| #include <stdint.h>
|
; (fcn) fcn.00097290 () | void fcn_00097290 (int16_t arg_ch, int16_t arg_20h, int16_t arg_40h, int16_t arg_44h, int16_t arg_57h, int16_t arg_58h, int16_t arg_120h, int16_t arg_70h, int16_t arg_98h, int16_t arg_a8h, arithmetic arg1, int16_t arg2, arithmetic arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| arithmetic x;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00097290 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00097294 sub sp, 0x4c |
0x00097296 str r2, [sp, 0x14] | var_14h = r2;
0x00097298 mov fp, r0 |
0x0009729a mov r4, r1 | r4 = r1;
0x0009729c ldr r2, [pc, 0x3f4] |
0x0009729e str r3, [sp, 0x20] | x = r3;
0x000972a0 ldr r3, [pc, 0x3f4] | r3 = *(0x97698);
0x000972a2 add r2, pc | r2 = 0x12e93a;
0x000972a4 ldr r7, [sp, 0x70] | r7 = *(arg_70h);
0x000972a6 ldr r3, [r2, r3] |
0x000972a8 ldr r3, [r3] | r3 = imp.atan;
0x000972aa str r3, [sp, 0x44] | var_44h = r3;
0x000972ac mov.w r3, 0 | r3 = 0;
0x000972b0 movs r3, 0 | r3 = 0;
0x000972b2 str r3, [sp, 0x40] | var_40h = r3;
0x000972b4 bl 0x54438 | r0 = fcn_00054438 (r0);
0x000972b8 cmp r0, 0 |
| if (r0 == 0) {
0x000972ba beq.w 0x97616 | goto label_21;
| }
0x000972be cmp r4, 0 |
| if (r4 == 0) {
0x000972c0 beq.w 0x975ea | goto label_22;
| }
| label_10:
0x000972c4 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
| if (r0 != 0) {
0x000972c8 cbz r0, 0x972d2 |
0x000972ca ldr r3, [pc, 0x3d0] |
0x000972cc add r3, pc |
0x000972ce ldr r3, [r3, 0x50] | r3 = imp.atan;
0x000972d0 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000972d2 ldr.w r3, [fp, 0x120] | r3 = *(arg_120h);
0x000972d6 movs r1, 0 | r1 = 0;
0x000972d8 str.w r1, [fp, 0x40] | __asm ("str.w r1, [arg_40h]");
0x000972dc cmp r3, 0 |
| if (r3 == 0) {
0x000972de beq.w 0x975e0 | goto label_23;
| }
0x000972e2 mov r0, fp | r0 = fp;
0x000972e4 bl 0x2e6d4 | fcn_0002e6d4 (r0, r1);
| label_9:
0x000972e8 add r3, sp, 0x3c | r3 += var_3ch;
0x000972ea mov sb, r7 | sb = r7;
0x000972ec str r3, [sp, 0x2c] | var_2ch = r3;
0x000972ee add r3, sp, 0x40 | r3 += var_40h;
0x000972f0 str r3, [sp, 0x30] | var_30h = r3;
| do {
| label_0:
0x000972f2 ldrb r6, [r4] | r6 = *(r4);
0x000972f4 cmp r6, 0 |
| if (r6 == 0) {
0x000972f6 beq.w 0x97666 | goto label_24;
| }
0x000972fa ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000972fc movs r3, 0x80 | r3 = 0x80;
0x000972fe mov r1, r4 | r1 = r4;
0x00097300 mov r0, fp | r0 = fp;
0x00097302 str r2, [sp, 8] | var_8h = r2;
0x00097304 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00097306 str r2, [sp, 4] | var_4h = r2;
0x00097308 movs r2, 0 | r2 = 0;
0x0009730a str r2, [sp] | *(sp) = r2;
0x0009730c mov.w r2, -1 | r2 = -1;
0x00097310 bl 0xa4188 | fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x00097314 str r0, [sp, 0x24] | var_24h = r0;
0x00097316 cmp r0, 0 |
| if (r0 != 0) {
0x00097318 bne.w 0x97570 | goto label_25;
| }
0x0009731c ldr r5, [sp, 0x40] | r5 = var_40h;
0x0009731e ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x00097320 cmp r5, 0 |
0x00097322 beq 0x972f2 |
| } while (r5 == 0);
0x00097324 ldr r3, [pc, 0x378] |
0x00097326 movw sl, 0x202 | sl = 0x202;
0x0009732a add r3, pc | r3 = 0x12e9ce;
0x0009732c str r3, [sp, 0x28] | var_28h = r3;
0x0009732e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00097330 mov r7, r3 | r7 = r3;
0x00097332 mov r6, r3 | r6 = r3;
0x00097334 strd r3, r3, [sp, 0x18] | __asm ("strd r3, r3, [var_18h]");
| label_1:
0x00097338 mov r0, r5 | r0 = r5;
0x0009733a bl 0x96a64 | fcn_00096a64 (r0);
0x0009733e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00097340 mov r4, r0 | r4 = r0;
0x00097342 cmp r3, 0 |
| if (r3 == 0) {
0x00097344 beq 0x973f0 | goto label_26;
| }
0x00097346 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x00097348 beq 0x973f6 | goto label_27;
| }
0x0009734a eor r6, r6, 1 | r6 ^= 1;
0x0009734e cmp r0, 0x65 |
0x00097350 ite ne |
| if (r0 == 0x65) {
0x00097352 movne r6, 0 | r6 = 0;
| }
| if (r0 != 0x65) {
0x00097354 andeq r6, r6, 1 | r6 &= 1;
| }
0x00097358 cmp r6, 0 |
| if (r6 != 0) {
0x0009735a bne.w 0x974ac | goto label_28;
| }
| label_2:
0x0009735e ldrb.w r3, [r5, 0x95] | r3 = *((r5 + 0x95));
0x00097362 cmp r3, 0 |
| if (r3 != 0) {
0x00097364 bne.w 0x975f0 | goto label_29;
| }
| label_11:
0x00097368 mov r0, r5 | r0 = r5;
0x0009736a bl 0x32d2c | fcn_00032d2c (r0);
0x0009736e ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x00097370 movs r3, 0 | r3 = 0;
0x00097372 ldr r2, [pc, 0x330] |
0x00097374 str r3, [sp, 0x40] | var_40h = r3;
0x00097376 ldrb r3, [r4] | r3 = *(r4);
0x00097378 add r2, pc | r2 = 0x12ea22;
0x0009737a add r3, r2 | r3 += r2;
0x0009737c ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00097380 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x00097382 bpl 0x97392 | goto label_30;
| }
| do {
0x00097384 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x00097388 add r3, r2 | r3 += r2;
0x0009738a ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0009738e lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x00097390 bmi 0x97384 |
| } while (r3 < r3);
| label_30:
0x00097392 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00097394 cbz r3, 0x9739e |
0x00097396 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00097398 mov r0, fp | r0 = fp;
0x0009739a bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0009739c invalid |
| }
0x0009739e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000973a0 cmp r3, 0 |
| if (r3 == 0) {
0x000973a2 beq 0x972f2 | goto label_0;
| }
0x000973a4 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x000973a8 mov r7, sb | r7 = sb;
| label_6:
0x000973aa mov r1, r8 | r1 = r8;
0x000973ac mov r0, fp | r0 = fp;
0x000973ae bl 0x2e764 | r0 = fcn_0002e764 (r0, r1);
0x000973b2 cmp r0, 0 |
0x000973b4 it ne |
| if (r0 != 0) {
0x000973b6 cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
0x000973b8 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000973ba beq.w 0x975b0 | goto label_31;
| }
0x000973be mov r0, fp | r0 = fp;
0x000973c0 bl 0x54630 | r0 = fcn_00054630 (r0);
0x000973c4 mov r5, r0 | r5 = r0;
0x000973c6 cmp r0, 0 |
| if (r0 == 0) {
0x000973c8 beq.w 0x975fa | goto label_32;
| }
0x000973cc blx 0x65dc | r0 = strcmp (r0, r1);
0x000973d0 add.w r8, r0, 1 | r8 = r0 + 1;
0x000973d4 movs r1, 0 | r1 = 0;
0x000973d6 mov r0, r8 | r0 = r8;
0x000973d8 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000973dc mov r6, r0 | r6 = r0;
0x000973de cmp r0, 0 |
| if (r0 == 0) {
0x000973e0 beq.w 0x975fa | goto label_32;
| }
0x000973e4 mov r2, r8 | r2 = r8;
0x000973e6 mov r1, r5 | r1 = r5;
0x000973e8 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000973ec str r6, [r7] | *(r7) = r6;
0x000973ee b 0x975b6 | goto label_33;
| label_26:
0x000973f0 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000973f2 beq 0x97338 | goto label_1;
| }
0x000973f4 b 0x9735e | goto label_2;
| label_27:
0x000973f6 cmp r6, 0 |
| if (r6 == 0) {
0x000973f8 beq 0x974b6 | goto label_34;
| }
0x000973fa ldr r3, [sp, 0x18] | r3 = var_18h;
0x000973fc add.w r3, r3, r7, lsl 2 | r3 += (r7 << 2);
0x00097400 str r3, [sp, 0x1c] | var_1ch = r3;
0x00097402 cmp r7, 0 |
| if (r7 == 0) {
0x00097404 beq.w 0x97662 | goto label_35;
| }
| label_19:
0x00097408 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0009740a movs r4, 0 | r4 = 0;
0x0009740c b 0x97436 |
| while (r0 != 0) {
0x0009740e lsls r0, r2, 0x1f | r0 = r2 << 0x1f;
| if (r0 < r2) {
0x00097410 bmi 0x9745e | goto label_36;
| }
| label_4:
0x00097412 mov r0, r3 | r0 = r3;
0x00097414 movs r1, 1 | r1 = 1;
0x00097416 bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x0009741a mov r8, r0 | r8 = r0;
| label_3:
0x0009741c mov r0, r5 | r0 = r5;
0x0009741e bl 0x2e7ac | fcn_0002e7ac (r0);
0x00097422 str.w r8, [r6] | __asm ("str.w r8, [r6]");
0x00097426 cmp.w r8, 0 |
| if (r8 == 0) {
0x0009742a beq 0x97468 | goto label_8;
| }
| label_5:
0x0009742c adds r4, 1 | r4++;
0x0009742e adds r6, 4 | r6 += 4;
0x00097430 cmp r4, r7 |
| if (r4 == r7) {
0x00097432 beq.w 0x97548 | goto label_37;
| }
0x00097436 mov r1, r4 | r1 = r4;
0x00097438 mov r0, r5 | r0 = r5;
0x0009743a bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x0009743e mov r3, r0 | r3 = r0;
0x00097440 cmp r0, 0 |
| if (r0 == 0) {
0x00097442 beq.w 0x97562 | goto label_38;
| }
0x00097446 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x00097448 bics.w r1, sl, r2 | __asm ("bics.w r1, sl, r2");
0x0009744c bne 0x9740e |
| }
0x0009744e ldrb r1, [r0, 0x12] | r1 = *((r0 + 0x12));
0x00097450 cmp r1, 1 |
0x00097452 it eq |
| if (r1 == 1) {
0x00097454 ldreq r8, [r0, 8] | r8 = *((r0 + 8));
| goto label_39;
| }
| if (r1 == 1) {
| label_39:
0x00097458 beq 0x9741c | goto label_3;
| }
0x0009745a lsls r0, r2, 0x1f | r0 = r2 << 0x1f;
| if (r0 >= r2) {
0x0009745c bpl 0x97412 | goto label_4;
| }
| label_36:
0x0009745e mov r0, r5 | r0 = r5;
0x00097460 bl 0x2e7ac | fcn_0002e7ac (r0);
0x00097464 movs r3, 0 | r3 = 0;
0x00097466 str r3, [r6] | *(r6) = r3;
| label_8:
0x00097468 mov r1, r4 | r1 = r4;
0x0009746a mov r0, r5 | r0 = r5;
0x0009746c bl 0x2e71c | fcn_0002e71c (r0, r1);
0x00097470 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00097472 mov r0, r5 | r0 = r5;
0x00097474 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00097476 and r3, r3, 0x3f | r3 &= 0x3f;
0x0009747a add r3, r2 | r3 += r2;
0x0009747c ldrb.w r8, [r3, 0x258] | r8 = *((r3 + 0x258));
0x00097480 bl 0x2e7ac | fcn_0002e7ac (r0);
0x00097484 cmp.w r8, 5 |
| if (r8 == 5) {
0x00097488 beq 0x9742c | goto label_5;
| }
0x0009748a ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x0009748e mov r7, sb | r7 = sb;
0x00097490 ldr r5, [sp, 0x40] | r5 = var_40h;
| if (r3 == 0) {
0x00097492 cbnz r3, 0x974a0 |
0x00097494 ldrb.w r3, [fp, 0x58] | r3 = *(arg_58h);
| if (r3 != 0) {
0x00097498 cbnz r3, 0x974a0 | goto label_40;
| }
0x0009749a mov r0, fp | r0 = fp;
0x0009749c bl 0x38024 | fcn_00038024 (r0);
| }
| label_40:
0x000974a0 movs r6, 1 | r6 = 1;
0x000974a2 mov.w r8, 0x64 | r8 = 0x64;
0x000974a6 cmp r5, 0 |
| if (r5 != 0) {
0x000974a8 bne 0x97582 | goto label_18;
| }
0x000974aa b 0x97590 | goto label_41;
| label_28:
0x000974ac ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x000974b0 lsls r6, r3, 0x17 | r6 = r3 << 0x17;
| if (r6 >= r3) {
0x000974b2 bpl.w 0x9735e | goto label_2;
| }
| label_34:
0x000974b6 ldrh.w r1, [r5, 0x90] | r1 = *((r5 + 0x90));
0x000974ba movs r3, 0 | r3 = 0;
0x000974bc mov r0, fp | r0 = fp;
0x000974be mov r7, r1 | r7 = r1;
0x000974c0 str r1, [sp, 0x34] | var_34h = r1;
0x000974c2 lsls r2, r1, 3 | r2 = r1 << 3;
0x000974c4 adds r2, 4 | r2 += 4;
0x000974c6 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x000974ca ldr r1, [sp, 0x34] | r1 = var_34h;
0x000974cc str r0, [sp, 0x18] | var_18h = r0;
0x000974ce cmp r0, 0 |
| if (r0 == 0) {
0x000974d0 beq.w 0x9767c | goto label_42;
| }
0x000974d4 cmp r1, 0 |
| if (r1 == 0) {
0x000974d6 beq.w 0x97638 | goto label_43;
| }
0x000974da ldr r3, [sp, 0x18] | r3 = var_18h;
0x000974dc movs r6, 0 | r6 = 0;
0x000974de str r7, [sp, 0x34] | var_34h = r7;
0x000974e0 mov r7, r1 | r7 = r1;
0x000974e2 sub.w r8, r3, 4 | r8 = r3 - 4;
| do {
0x000974e6 movs r3, 0 | r3 = 0;
0x000974e8 mov r1, r6 | r1 = r6;
0x000974ea mov r2, r3 | r2 = r3;
0x000974ec adds r6, 1 | r6++;
0x000974ee mov r0, r5 | r0 = r5;
0x000974f0 bl 0x3e494 | fcn_0003e494 (r0, r1, r2);
0x000974f4 cmp r6, r7 |
0x000974f6 str r0, [r8, 4]! | *((r8 += 4)) = r0;
0x000974fa bne 0x974e6 |
| } while (r6 != r7);
0x000974fc cmp r4, 0x64 |
0x000974fe mov r1, r7 | r1 = r7;
0x00097500 ldr r7, [sp, 0x34] | r7 = var_34h;
| if (r4 == 0x64) {
0x00097502 beq.w 0x97672 | goto label_44;
| }
| label_14:
0x00097506 ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_18h]");
0x0009750a ldr r0, [sp, 0x20] | r0 = x;
0x0009750c ldr r4, [sp, 0x14] | r4 = var_14h;
0x0009750e blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t) (r0, r3);
0x00097510 cmp r0, 0 |
| if (r0 == 0) {
0x00097512 beq.w 0x9735e | goto label_2;
| }
| label_7:
0x00097516 ldrb.w r3, [r5, 0x95] | r3 = *((r5 + 0x95));
0x0009751a mov r7, sb | r7 = sb;
0x0009751c cmp r3, 0 |
| if (r3 != 0) {
0x0009751e bne.w 0x9765a | goto label_45;
| }
0x00097520 strh r4, [r3, 4] | *((r3 + 4)) = r4;
| label_16:
0x00097522 movs r4, 4 | r4 = 4;
0x00097524 mov r0, r5 | r0 = r5;
0x00097526 bl 0x32d2c | fcn_00032d2c (r0);
0x0009752a movs r3, 0 | r3 = 0;
0x0009752c mov r1, r4 | r1 = r4;
0x0009752e mov r0, fp | r0 = fp;
0x00097530 str.w r4, [fp, 0x40] | __asm ("str.w r4, [arg_40h]");
0x00097534 str r3, [sp, 0x40] | var_40h = r3;
0x00097536 mov r8, r4 | r8 = r4;
0x00097538 bl 0x2e6d4 | fcn_0002e6d4 (r0, r1);
0x0009753c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0009753e cmp r3, 0 |
| if (r3 == 0) {
0x00097540 beq.w 0x973aa | goto label_6;
| }
0x00097544 movs r6, 1 | r6 = 1;
0x00097546 b 0x97594 | goto label_46;
| label_37:
0x00097548 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0009754a movs r1, 0 | r1 = 0;
0x0009754c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0009754e ldr r0, [sp, 0x20] | r0 = x;
0x00097550 str.w r1, [r2, r7, lsl 2] | __asm ("str.w r1, [r2, r7, lsl 2]");
0x00097554 mov r1, r7 | r1 = r7;
0x00097556 ldr r4, [sp, 0x14] | r4 = var_14h;
0x00097558 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0009755a cmp r0, 0 |
| if (r0 != 0) {
0x0009755c bne 0x97516 | goto label_7;
| }
| label_15:
0x0009755e movs r6, 1 | r6 = 1;
0x00097560 b 0x97338 | goto label_1;
| label_38:
0x00097562 str r0, [sp, 0x34] | var_34h = r0;
0x00097564 mov r0, r5 | r0 = r5;
0x00097566 bl 0x2e7ac | fcn_0002e7ac (r0);
0x0009756a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009756c str r3, [r6] | *(r6) = r3;
0x0009756e b 0x97468 | goto label_8;
| label_25:
0x00097570 ldr r5, [sp, 0x40] | r5 = var_40h;
0x00097572 mov r8, r0 | r8 = r0;
0x00097574 mov r7, sb | r7 = sb;
0x00097576 cmp r5, 0 |
| if (r5 == 0) {
0x00097578 beq.w 0x973aa | goto label_6;
| }
0x0009757c movs r6, 1 | r6 = 1;
0x0009757e movs r3, 0 | r3 = 0;
0x00097580 str r3, [sp, 0x18] | var_18h = r3;
| label_18:
0x00097582 ldrb.w r3, [r5, 0x95] | r3 = *((r5 + 0x95));
0x00097586 cmp r3, 0 |
| if (r3 != 0) {
0x00097588 bne 0x9760e | goto label_47;
| }
| label_12:
0x0009758a mov r0, r5 | r0 = r5;
0x0009758c bl 0x32d2c | fcn_00032d2c (r0);
| label_41:
0x00097590 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x00097592 cbz r3, 0x9759c |
| label_46:
0x00097594 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00097596 mov r0, fp | r0 = fp;
0x00097598 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
| label_20:
0x0009759c ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000975a0 cmp r3, 0 |
0x000975a2 it ne |
| if (r3 == 0) {
0x000975a4 orrne r6, r6, 1 | r6 |= 1;
| }
0x000975a8 mov r4, r6 | r4 = r6;
0x000975aa cmp r6, 0 |
| if (r6 != 0) {
0x000975ac bne.w 0x973aa | goto label_6;
| }
| if (r7 == 0) {
| label_31:
0x000975b0 cbz r7, 0x975b6 | goto label_33;
| }
0x000975b2 movs r3, 0 | r3 = 0;
0x000975b4 str r3, [r7] | *(r7) = r3;
| do {
| label_33:
0x000975b6 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
| if (r0 != 0) {
0x000975ba cbz r0, 0x975c4 |
0x000975bc ldr r3, [pc, 0xe8] |
0x000975be add r3, pc |
0x000975c0 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000975c2 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_13:
0x000975c4 ldr r2, [pc, 0xe4] |
0x000975c6 ldr r3, [pc, 0xd0] | r3 = *(0x9769a);
0x000975c8 add r2, pc | r2 = 0x12ec78;
0x000975ca ldr r3, [r2, r3] | r3 = imp.atan;
0x000975cc ldr r2, [r3] | r2 = imp.atan;
0x000975ce ldr r3, [sp, 0x44] | r3 = var_44h;
0x000975d0 eors r2, r3 | r2 ^= r3;
0x000975d2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000975d6 bne 0x9768e | goto label_48;
| }
0x000975d8 mov r0, r4 | r0 = r4;
0x000975da add sp, 0x4c |
0x000975dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x000975e0 mov.w r3, -1 | r3 = -1;
0x000975e4 str.w r3, [fp, 0x44] | __asm ("str.w r3, [arg_44h]");
0x000975e8 b 0x972e8 | goto label_9;
| label_22:
0x000975ea ldr r4, [pc, 0xc4] |
0x000975ec add r4, pc | r4 = 0x12eca2;
0x000975ee b 0x972c4 | goto label_10;
| label_29:
0x000975f0 mov r0, r5 | r0 = r5;
0x000975f2 bl 0x799b0 | fcn_000799b0 (r0);
0x000975f6 str r0, [sp, 0x24] | var_24h = r0;
0x000975f8 b 0x97368 | goto label_11;
| label_32:
0x000975fa movs r1, 7 | r1 = 7;
0x000975fc movs r3, 0 | r3 = 0;
0x000975fe str r3, [r7] | *(r7) = r3;
0x00097600 mov r0, fp | r0 = fp;
0x00097602 str.w r1, [fp, 0x40] | __asm ("str.w r1, [arg_40h]");
0x00097606 mov r4, r1 | r4 = r1;
0x00097608 bl 0x2e6d4 | fcn_0002e6d4 (r0, r1);
0x0009760c b 0x975b6 |
| } while (1);
| label_47:
0x0009760e mov r0, r5 | r0 = r5;
0x00097610 bl 0x799b0 | fcn_000799b0 (r0);
0x00097614 b 0x9758a | goto label_12;
| label_21:
0x00097616 ldr r4, [pc, 0x9c] |
0x00097618 movw r3, 0xe16 |
0x0009761c ldr r2, [pc, 0x98] |
0x0009761e movt r3, 2 | r3 = 0x20e16;
0x00097622 ldr r1, [pc, 0x98] |
0x00097624 movs r0, 0x15 | r0 = 0x15;
0x00097626 add r4, pc | r4 = 0x12ece0;
0x00097628 adds r4, 0x14 | r4 += 0x14;
0x0009762a add r2, pc | r2 = 0x12ece6;
0x0009762c str r4, [sp] | *(sp) = r4;
0x0009762e add r1, pc | r1 = 0x12ecf0;
0x00097630 movs r4, 0x15 | r4 = 0x15;
0x00097632 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x00097636 b 0x975c4 | goto label_13;
| label_43:
0x00097638 cmp r4, 0x64 |
| if (r4 != 0x64) {
0x0009763a bne.w 0x97506 | goto label_14;
| }
0x0009763e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00097640 mov r3, r2 | r3 = r2;
0x00097642 str r2, [sp, 0x1c] | var_1ch = r2;
| label_17:
0x00097644 movs r1, 0 | r1 = 0;
0x00097646 ldr r0, [sp, 0x20] | r0 = x;
0x00097648 str r1, [r3] | *(r3) = r1;
0x0009764a ldr r4, [sp, 0x14] | r4 = var_14h;
0x0009764c ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_18h]");
0x00097650 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00097652 mov r7, r0 | r7 = r0;
0x00097654 cmp r0, 0 |
| if (r0 == 0) {
0x00097656 beq 0x9755e | goto label_15;
| }
0x00097658 b 0x97516 | goto label_7;
| label_45:
0x0009765a mov r0, r5 | r0 = r5;
0x0009765c bl 0x799b0 | fcn_000799b0 (r0);
0x00097660 b 0x97522 | goto label_16;
| label_35:
0x00097662 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00097664 b 0x97644 | goto label_17;
| label_24:
0x00097666 ldr r5, [sp, 0x40] | r5 = var_40h;
0x00097668 mov r7, sb | r7 = sb;
| if (r5 != 0) {
0x0009766a cbz r5, 0x97688 |
0x0009766c mov r8, r6 | r8 = r6;
0x0009766e str r6, [sp, 0x18] | var_18h = r6;
0x00097670 b 0x97582 | goto label_18;
| label_44:
0x00097672 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00097674 add.w r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x00097678 str r3, [sp, 0x1c] | var_1ch = r3;
0x0009767a b 0x97408 | goto label_19;
| label_42:
0x0009767c subs r6, r4, 0 | r6 = r4 - 0;
0x0009767e mov r7, sb | r7 = sb;
0x00097680 it ne |
| if (r6 == r4) {
0x00097682 movne r6, 1 | r6 = 1;
| }
0x00097684 mov r8, r4 | r8 = r4;
0x00097686 b 0x97582 | goto label_18;
| }
0x00097688 mov r6, r5 | r6 = r5;
0x0009768a mov r8, r5 | r8 = r5;
0x0009768c b 0x9759c | goto label_20;
| label_48:
0x0009768e blx 0x6430 | fcn_00006430 ();
0x00097692 nop |
0x00097694 cmp r2, 0xf6 |
0x00097696 movs r5, r0 | r5 = r0;
0x00097698 lsls r4, r6, 8 | r4 = r6 << 8;
0x0009769a movs r0, r0 |
0x0009769c cmp r7, 0xc8 |
0x0009769e movs r5, r0 | r5 = r0;
0x000976a0 ldr r2, [pc, 0x3a8] | r2 = *(0x97a4c);
0x000976a2 movs r4, r0 | r4 = r0;
0x000976a4 ldr r2, [pc, 0x270] | r2 = *(0x97918);
0x000976a6 movs r4, r0 | r4 = r0;
0x000976a8 cmp r4, 0xd6 |
0x000976aa movs r5, r0 | r5 = r0;
0x000976ac movs r7, 0xd0 | r7 = 0xd0;
0x000976ae movs r5, r0 | r5 = r0;
0x000976b0 lsrs r4, r6, 6 | r4 = r6 >> 6;
0x000976b2 movs r3, r0 | r3 = r0;
0x000976b4 ldr r2, [pc, 0x168] | r2 = *(0x97820);
0x000976b6 movs r3, r0 | r3 = r0;
0x000976b8 ldr r3, [sp, 0x98] | r3 = *(arg_98h);
0x000976ba movs r3, r0 | r3 = r0;
0x000976bc ldr r3, [sp, 0xa8] | r3 = *(arg_a8h);
0x000976be movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x977f4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000977f4 () | void fcn_000977f4 (int16_t arg_0h, int16_t arg_1h_2, int16_t arg_18h, int16_t arg_24h, int16_t arg_2ch, int16_t arg_1h, arithmetic arg_94h, int16_t arg_98h, int16_t arg_9ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| arithmetic x;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| arithmetic var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int32_t var_6ch_2;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int32_t var_7ch_2;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000977f4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000977f8 mov r4, r0 | r4 = r0;
0x000977fa ldr r6, [r0, 0x18] | r6 = *(arg_0hx18);
0x000977fc mov r5, r1 | r5 = r1;
0x000977fe mov r7, r2 | r7 = r2;
0x00097800 sub sp, 0x6c |
0x00097802 ldr.w r0, [pc, 0x45c] |
0x00097806 ldr.w r1, [pc, 0x45c] | r1 = *(0x97c66);
0x0009780a orn r6, r6, 0x40 | r6 |= 0x40;
| r6 = ~r6;
0x0009780e ldr.w r2, [pc, 0x458] |
0x00097812 add r0, pc | r0 = 0x12f478;
0x00097814 ldr r1, [r0, r1] |
0x00097816 add r2, pc | r2 = 0x12f484;
0x00097818 ldr r1, [r1] | r1 = imp.atan;
0x0009781a str r1, [sp, 0x64] | var_64h = r1;
0x0009781c mov.w r1, 0 | r1 = 0;
0x00097820 str r2, [sp, 0x48] | var_48h = r2;
0x00097822 movs r2, 1 | r2 = 1;
0x00097824 cmp r5, r2 |
0x00097826 strb.w r2, [r4, 0xb1] | *((r4 + 0xb1)) = r2;
| if (r5 == r2) {
0x0009782a beq.w 0x97982 | goto label_96;
| }
0x0009782e ldr.w sl, [pc, 0x43c] |
0x00097832 add sl, pc | sl = 0x12f4a4;
| label_0:
0x00097834 str r3, [sp, 0x28] | var_28h = r3;
0x00097836 add r2, sp, 0x4c | r2 += var_4ch;
0x00097838 ldr.w r3, [pc, 0x434] |
0x0009783c movs r1, 5 | r1 = 5;
0x0009783e vdup.32 d16, sl | __asm ("vdup.32 d16, sl");
0x00097842 str r4, [sp, 0x18] | x = r4;
0x00097844 add r3, pc | r3 = 0x12f4b8;
0x00097846 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0009784a str r3, [sp, 0x54] | var_54h = r3;
0x0009784c add r2, sp, 0x18 | r2 += x;
0x0009784e ldr.w r3, [pc, 0x424] |
0x00097852 mov r0, r2 | r0 = r2;
0x00097854 str r2, [sp, 8] | var_8h = r2;
0x00097856 add r2, sp, 0x48 | r2 += var_48h;
0x00097858 strd r7, r5, [sp, 0x1c] | __asm ("strd r7, r5, [var_20h]");
0x0009785c add r3, pc | r3 = 0x12f4d6;
0x0009785e str r3, [sp, 0x58] | var_58h = r3;
0x00097860 movs r3, 0 | r3 = 0;
0x00097862 str r3, [sp, 0x5c] | var_5ch = r3;
0x00097864 str r3, [sp, 0x24] | var_24h = r3;
0x00097866 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [var_2ch]");
0x0009786a bl 0xab2d0 | fcn_000ab2d0 (r0, r1);
0x0009786e ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00097870 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x00097874 ands r3, r6 | r3 &= r6;
0x00097876 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00097878 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009787c bne 0x97946 | goto label_1;
| }
0x0009787e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00097880 lsls r2, r5, 4 | r2 = r5 << 4;
0x00097882 str r2, [sp, 0xc] | var_ch = r2;
0x00097884 adds r6, r3, r2 | r6 = r3 + r2;
0x00097886 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097888 cmp r0, 0 |
| if (r0 == 0) {
0x0009788a beq.w 0x97b6e | goto label_97;
| }
0x0009788e ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x00097890 cbz r3, 0x978a0 |
0x00097892 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00097894 adds r3, 1 | r3++;
0x00097896 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00097898 ldrb r3, [r0, 0xa] | r3 = *((r0 + 0xa));
0x0009789a cmp r3, 0 |
| if (r3 == 0) {
0x0009789c beq.w 0x97a84 | goto label_98;
| }
| }
| label_5:
0x000978a0 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x000978a2 cmp r3, 0 |
| if (r3 != 0) {
0x000978a4 bne.w 0x97a7e | goto label_99;
| }
| label_4:
0x000978a8 movs r2, 0 | r2 = 0;
0x000978aa mov r1, r2 | r1 = r2;
0x000978ac bl 0x76d50 | r0 = fcn_00076d50 (r0, r1, r2, r3);
0x000978b0 mov r3, r0 | r3 = r0;
0x000978b2 cmp r0, 0 |
| if (r0 != 0) {
0x000978b4 bne.w 0x97bce | goto label_100;
| }
0x000978b8 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000978ba movs r3, 1 | r3 = 1;
0x000978bc str r3, [sp, 0x10] | var_10h = r3;
| label_3:
0x000978be add r2, sp, 0x34 | r2 += var_34h;
0x000978c0 str r4, [sp, 0x14] | var_14h = r4;
0x000978c2 mov.w sb, 0 | sb = 0;
0x000978c6 mov fp, r2 |
0x000978c8 mov r4, r2 | r4 = r2;
0x000978ca b 0x978ce |
| while (sb != 5) {
0x000978cc ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000978ce add.w sb, sb, 1 | sb++;
0x000978d2 mov r2, r4 | r2 = r4;
0x000978d4 mov r1, sb | r1 = sb;
0x000978d6 adds r4, 4 | r4 += 4;
0x000978d8 bl 0x30360 | fcn_00030360 (r0, r1, r2);
0x000978dc cmp.w sb, 5 |
0x000978e0 bne 0x978cc |
| }
0x000978e2 ldr r4, [sp, 0x14] | r4 = var_14h;
0x000978e4 movs r1, 0 | r1 = 0;
0x000978e6 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000978e8 lsls r3, r3, 6 | r3 <<= 6;
| if (r3 < r3) {
0x000978ea bmi 0x9798a | goto label_101;
| }
0x000978ec ldr r2, [sp, 0x44] | r2 = var_44h;
0x000978ee ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000978f0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000978f2 str r1, [r3] | *(r3) = r1;
0x000978f4 cmp r2, 0 |
| if (r2 == 0) {
0x000978f6 beq 0x97998 | goto label_102;
| }
0x000978f8 cmp r5, 0 |
| if (r5 == 0) {
0x000978fa beq.w 0x97ae8 | goto label_103;
| }
| label_9:
0x000978fe ldrb.w r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x00097902 and r2, r2, 3 | r2 &= 3;
0x00097906 cmp r2, r1 |
| if (r2 == r1) {
0x00097908 beq 0x9799c | goto label_10;
| }
0x0009790a ldr r1, [pc, 0x36c] |
0x0009790c add r1, pc | r1 = 0x12f58a;
| label_12:
0x0009790e mov r0, r4 | r0 = r4;
0x00097910 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x00097914 ldr r1, [r7] | r1 = *(r7);
0x00097916 mov sb, r0 | sb = r0;
| if (r1 != 0) {
0x00097918 cbz r1, 0x97920 |
0x0009791a mov r0, r4 | r0 = r4;
0x0009791c bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x00097920 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00097922 str.w sb, [r7] | __asm ("str.w sb, [r7]");
0x00097926 cmp r3, 0 |
| if (r3 != 0) {
0x00097928 bne.w 0x97c22 | goto label_104;
| }
0x0009792c ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0009792e ldrb r3, [r0, 9] | r3 = *((r0 + 9));
0x00097930 cmp r3, 0 |
| if (r3 == 0) {
0x00097932 beq.w 0x97c36 | goto label_105;
| }
0x00097936 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00097938 subs r3, 1 | r3--;
0x0009793a str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0009793c cmp r3, 0 |
| if (r3 == 0) {
0x0009793e beq.w 0x97c52 | goto label_106;
| }
0x00097942 mov.w r8, 1 | r8 = 1;
| label_1:
0x00097946 movw r3, 0xc0a | r3 = 0xc0a;
0x0009794a cmp r8, r3 |
0x0009794c it ne |
| if (r8 != r3) {
0x0009794e cmpne r8, 7 | __asm ("cmpne r8, 7");
| }
| if (r8 == r3) {
0x00097952 beq.w 0x97b7e | goto label_107;
| }
| label_15:
0x00097956 mov r1, r5 | r1 = r5;
0x00097958 mov r0, r4 | r0 = r4;
0x0009795a bl 0x314e4 | fcn_000314e4 (r0, r1);
| do {
| label_7:
0x0009795e movs r3, 0 | r3 = 0;
0x00097960 ldr r2, [pc, 0x318] |
0x00097962 strb.w r3, [r4, 0xb1] | *((r4 + 0xb1)) = r3;
0x00097966 ldr r3, [pc, 0x2fc] | r3 = *(0x97c66);
0x00097968 add r2, pc | r2 = 0x12f5e8;
0x0009796a ldr r3, [r2, r3] | r3 = imp.atan;
0x0009796c ldr r2, [r3] | r2 = imp.atan;
0x0009796e ldr r3, [sp, 0x64] | r3 = var_64h;
0x00097970 eors r2, r3 | r2 ^= r3;
0x00097972 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00097976 bne.w 0x97c5c | goto label_108;
| }
0x0009797a mov r0, r8 | r0 = r8;
0x0009797c add sp, 0x6c |
0x0009797e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_96:
0x00097982 ldr.w sl, [pc, 0x2fc] |
0x00097986 add sl, pc | sl = 0x12f60c;
0x00097988 b 0x97834 | goto label_0;
| label_101:
0x0009798a ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0009798c str r1, [sp, 0x34] | var_34h = r1;
0x0009798e strd r1, r1, [fp, 4] | __asm ("strd r1, r1, [var_3ch]");
0x00097990 asrs r1, r0, 4 | r1 = r0 >> 4;
0x00097992 strd r1, r1, [fp, 0xc] | __asm ("strd r1, r1, [var_44h]");
0x00097996 str r1, [r3] | *(r3) = r1;
| label_102:
0x00097998 ldrb.w r1, [r4, 0x54] | r1 = *((r4 + 0x54));
| label_10:
0x0009799c ldr r2, [r3, 0x50] | r2 = *((r3 + 0x50));
0x0009799e strb.w r1, [r3, 0x4d] | *((r3 + 0x4d)) = r1;
| if (r2 == 0) {
0x000979a2 cbnz r2, 0x979c0 |
0x000979a4 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000979a6 cmp r1, 0 |
| if (r1 >= 0) {
0x000979a8 bge.w 0x97b18 | goto label_109;
| }
0x000979aa strh r6, [r6, 4] | *((r6 + 4)) = r6;
0x000979ac cmp.w r1, -0x80000000 |
| if (r1 == -0x80000000) {
0x000979b0 beq.w 0x97c42 | goto label_110;
| }
0x000979b4 rsbs r1, r1, 0 | r1 -= ;
| label_11:
0x000979b6 str r1, [r3, 0x50] | *((r3 + 0x50)) = r1;
0x000979b8 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000979ba bl 0x30538 | fcn_00030538 (r0, r1);
0x000979be ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| }
0x000979c0 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000979c2 uxtb r2, r1 | r2 = (int8_t) r1;
0x000979c4 strb.w r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x000979c8 cmp r2, 0 |
| if (r2 == 0) {
0x000979ca beq 0x97a76 | goto label_111;
| }
0x000979cc cmp r2, 4 |
| if (r2 > 4) {
0x000979ce bhi.w 0x97b26 | goto label_112;
| }
| label_2:
0x000979d2 clz r3, r5 | r3 &= r5;
0x000979d6 cmp r1, 3 |
0x000979d8 lsr.w r3, r3, 5 | r3 >>= 5;
0x000979dc it le |
| if (r1 > 3) {
0x000979de movle r3, 0 | r3 = 0;
| }
0x000979e0 cmp r3, 0 |
| if (r3 != 0) {
0x000979e2 bne.w 0x97bc4 | goto label_113;
| }
| label_16:
0x000979e6 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000979e8 mov r3, sl | r3 = sl;
0x000979ea ldr r1, [sp, 0xc] | r1 = var_ch;
0x000979ec mov r0, r4 | r0 = r4;
0x000979ee ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000979f0 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x000979f2 str r2, [sp, 0x30] | var_30h = r2;
0x000979f4 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000979f6 ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x000979f8 ldr r1, [pc, 0x288] |
0x000979fa add r1, pc | r1 = 0x12f682;
0x000979fc bl 0x4a320 | fcn_0004a320 (r0);
0x00097a00 movs r2, 0 | r2 = 0;
0x00097a02 ldr r3, [sp, 8] | r3 = var_8h;
0x00097a04 str r2, [sp] | *(sp) = r2;
0x00097a06 mov r1, r0 | r1 = r0;
0x00097a08 ldr.w sb, [r4, 0x168] | sb = *((r4 + 0x168));
0x00097a0c mov r7, r0 | r7 = r0;
0x00097a0e str.w r2, [r4, 0x168] | __asm ("str.w r2, [r4, 0x168]");
0x00097a12 mov r0, r4 | r0 = r4;
0x00097a14 ldr r2, [pc, 0x270] |
0x00097a16 add r2, pc | r2 = 0x12f6a2;
0x00097a18 bl 0x97290 | fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x00097a1c str.w sb, [r4, 0x168] | __asm ("str.w sb, [r4, 0x168]");
0x00097a20 mov r3, r0 | r3 = r0;
0x00097a22 cmp r0, 0 |
| if (r0 == 0) {
0x00097a24 beq 0x97a92 | goto label_114;
| }
| if (r7 != 0) {
0x00097a26 cbz r7, 0x97a34 |
0x00097a28 str r0, [sp, 8] | var_8h = r0;
0x00097a2a mov r1, r7 | r1 = r7;
0x00097a2c mov r0, r4 | r0 = r4;
0x00097a2e bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00097a32 ldr r3, [sp, 8] | r3 = var_8h;
| }
| label_6:
0x00097a34 ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
0x00097a38 cmp r2, 0 |
| if (r2 != 0) {
0x00097a3a bne.w 0x97b9a | goto label_115;
| }
0x00097a3e ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x00097a40 lsls r1, r1, 4 | r1 <<= 4;
| if (r1 >= r1) {
0x00097a42 bpl 0x97b2c | goto label_116;
| }
0x00097a44 cmp r3, 7 |
| if (r3 != 7) {
0x00097a46 bne 0x97ab6 | goto label_117;
| }
0x00097a48 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00097a4a cmp r1, 0 |
| if (r1 != 0) {
0x00097a4c bne 0x97b48 | goto label_19;
| }
0x00097a4e ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097a50 ldrb r1, [r0, 9] | r1 = *((r0 + 9));
0x00097a52 cmp r1, 0 |
| if (r1 == 0) {
0x00097a54 beq.w 0x97c1c | goto label_118;
| }
0x00097a58 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00097a5a subs r2, 1 | r2--;
0x00097a5c str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x00097a5e cmp r2, 0 |
| if (r2 != 0) {
0x00097a60 bne.w 0x97bbe | goto label_119;
| }
| label_8:
0x00097a64 str r3, [sp, 8] | var_8h = r3;
0x00097a66 bl 0x22944 | fcn_00022944 (r0);
0x00097a6a ldr r3, [sp, 8] | r3 = var_8h;
| label_14:
0x00097a6c cmp r3, 0 |
0x00097a6e beq.w 0x9795e |
| } while (r3 == 0);
| label_13:
0x00097a72 mov r8, r3 | r8 = r3;
0x00097a74 b 0x97946 | goto label_1;
| label_111:
0x00097a76 movs r2, 1 | r2 = 1;
0x00097a78 strb.w r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x00097a7c b 0x979d2 | goto label_2;
| label_99:
0x00097a7e movs r3, 0 | r3 = 0;
0x00097a80 str r3, [sp, 0x10] | var_10h = r3;
0x00097a82 b 0x978be | goto label_3;
| label_98:
0x00097a84 bl 0x2adac | fcn_0002adac (r0);
0x00097a88 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097a8a cmp r0, 0 |
| if (r0 == 0) {
0x00097a8c beq.w 0x978a8 | goto label_4;
| }
0x00097a90 b 0x978a0 | goto label_5;
| label_114:
0x00097a92 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r7 != 0) {
0x00097a94 cbz r7, 0x97aa2 |
0x00097a96 mov r1, r7 | r1 = r7;
0x00097a98 mov r0, r4 | r0 = r4;
0x00097a9a str r3, [sp, 8] | var_8h = r3;
0x00097a9c bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00097aa0 ldr r3, [sp, 8] | r3 = var_8h;
| }
0x00097aa2 cmp r3, 0 |
| if (r3 != 0) {
0x00097aa4 bne 0x97a34 | goto label_6;
| }
0x00097aa6 mov r1, r5 | r1 = r5;
0x00097aa8 mov r0, r4 | r0 = r4;
0x00097aaa bl 0x976c0 | fcn_000976c0 (r0, r1, r2, r3);
0x00097aae ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x00097ab2 cmp r3, 0 |
| if (r3 != 0) {
0x00097ab4 bne 0x97b9a | goto label_115;
| }
| label_117:
0x00097ab6 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00097ab8 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00097aba add r3, r2 | r3 += r2;
0x00097abc ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00097abe ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
0x00097ac2 orr r3, r3, 1 | r3 |= 1;
0x00097ac6 strh.w r3, [r2, 0x4e] | *((r2 + 0x4e)) = r3;
0x00097aca ldr r3, [sp, 0x10] | r3 = var_10h;
0x00097acc cmp r3, 0 |
| if (r3 != 0) {
0x00097ace bne 0x97b46 | goto label_120;
| }
0x00097ad0 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097ad2 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
0x00097ad4 cmp r3, 0 |
| if (r3 == 0) {
0x00097ad6 beq.w 0x9795e | goto label_7;
| }
0x00097ad8 add r7, sp, 0x108 | r7 = sp + 0x108;
0x00097ada ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00097adc subs r3, 1 | r3--;
0x00097ade str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00097ae0 cmp r3, 0 |
| if (r3 != 0) {
0x00097ae2 bne.w 0x9795e | goto label_7;
| }
0x00097ae6 b 0x97a64 | goto label_8;
| label_103:
0x00097ae8 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00097aea lsls r0, r1, 0x19 | r0 = r1 << 0x19;
| if (r0 < r1) {
0x00097aec bmi.w 0x978fe | goto label_9;
| }
0x00097af0 and r1, r2, 3 | r1 = r2 & 3;
0x00097af4 ldr r2, [pc, 0x194] |
0x00097af6 cmp r1, 1 |
0x00097af8 mov r3, r5 | r3 = r5;
0x00097afa it lo |
| if (r1 >= 1) {
0x00097afc movlo r1, 1 | r1 = 1;
| }
0x00097afe mov r0, r4 | r0 = r4;
0x00097b00 add r2, pc |
0x00097b02 strb.w r1, [r4, 0x54] | *((r4 + 0x54)) = r1;
0x00097b06 add.w r2, r2, 0x780 | r2 = 0x12ff10;
0x00097b0a bl 0x3b88c | fcn_0003b88c (r0, r1, r2, r3);
0x00097b0e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00097b10 ldrb.w r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x00097b14 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x00097b16 b 0x9799c | goto label_10;
| if (r1 != 1) {
| label_109:
0x00097b18 bne.w 0x979b6 | goto label_11;
| }
0x00097b1c movw r1, 0xf830 |
0x00097b20 movt r1, 0xffff | r1 = 0xfffff830;
0x00097b24 b 0x979b6 | goto label_11;
| label_112:
0x00097b26 ldr r1, [pc, 0x168] |
0x00097b28 add r1, pc | r1 = 0x12f7be;
0x00097b2a b 0x9790e | goto label_12;
| label_116:
0x00097b2c ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r2 != 0) {
0x00097b2e cbnz r2, 0x97b48 | goto label_19;
| }
0x00097b30 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097b32 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x00097b34 cmp r2, 0 |
| if (r2 == 0) {
0x00097b36 beq 0x97a72 | goto label_13;
| }
| label_17:
0x00097b38 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00097b3a subs r2, 1 | r2--;
0x00097b3c str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x00097b3e cmp r2, 0 |
| if (r2 == 0) {
0x00097b40 beq 0x97a64 | goto label_8;
| }
0x00097b42 mov r8, r3 | r8 = r3;
0x00097b44 b 0x97946 | goto label_1;
| label_120:
0x00097b46 movs r3, 0 | r3 = 0;
| label_19:
0x00097b48 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097b4a str r3, [sp, 8] | var_8h = r3;
0x00097b4c bl 0x767d0 | fcn_000767d0 (r0, r1);
0x00097b50 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097b52 ldr r3, [sp, 8] | r3 = var_8h;
0x00097b54 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x00097b56 cmp r2, 0 |
| if (r2 == 0) {
0x00097b58 beq 0x97a6c | goto label_14;
| }
0x00097b5a ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00097b5c subs r2, 1 | r2--;
0x00097b5e str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x00097b60 cmp r2, 0 |
| if (r2 == 0) {
0x00097b62 beq.w 0x97a64 | goto label_8;
| }
0x00097b66 cmp r3, 0 |
| if (r3 == 0) {
0x00097b68 beq.w 0x9795e | goto label_7;
| }
0x00097b6c b 0x97a72 | goto label_13;
| label_97:
0x00097b6e ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00097b70 ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
0x00097b74 orr r3, r3, 1 | r3 |= 1;
0x00097b78 strh.w r3, [r2, 0x4e] | *((r2 + 0x4e)) = r3;
0x00097b7c b 0x9795e | goto label_7;
| label_107:
0x00097b7e ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
| label_18:
0x00097b82 cmp r2, 0 |
| if (r2 != 0) {
0x00097b84 bne.w 0x97956 | goto label_15;
| }
0x00097b88 ldrb.w r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x00097b8c cmp r3, 0 |
| if (r3 != 0) {
0x00097b8e bne.w 0x97956 | goto label_15;
| }
0x00097b92 mov r0, r4 | r0 = r4;
0x00097b94 bl 0x38024 | fcn_00038024 (r0);
0x00097b98 b 0x97956 | goto label_15;
| label_115:
0x00097b9a mov r0, r4 | r0 = r4;
0x00097b9c bl 0x31440 | fcn_00031440 (r0);
0x00097ba0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00097ba2 ldr r6, [r4, 0x10] | r6 = *((r4 + 0x10));
0x00097ba4 add r6, r3 | r6 += r3;
0x00097ba6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00097ba8 cmp r3, 0 |
| if (r3 != 0) {
0x00097baa bne 0x97c32 | goto label_121;
| }
0x00097bac ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097bae ldrb r3, [r0, 9] | r3 = *((r0 + 9));
0x00097bb0 cmp r3, 0 |
| if (r3 == 0) {
0x00097bb2 beq 0x97c18 | goto label_122;
| }
0x00097bb4 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00097bb6 subs r3, 1 | r3--;
0x00097bb8 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00097bba cmp r3, 0 |
| if (r3 == 0) {
0x00097bbc beq 0x97c48 | goto label_123;
| }
| label_119:
0x00097bbe mov.w r8, 7 | r8 = 7;
0x00097bc2 b 0x97946 | goto label_1;
| label_113:
0x00097bc4 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00097bc6 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x00097bca str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x00097bcc b 0x979e6 | goto label_16;
| label_100:
0x00097bce cmp r0, 0x65 |
| if (r0 == 0x65) {
0x00097bd0 beq 0x97c3c | goto label_124;
| }
0x00097bd2 cmp.w r0, 0x204 |
| if (r0 == 0x204) {
0x00097bd6 beq 0x97c26 | goto label_125;
| }
0x00097bd8 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x00097bda beq 0x97c2c | goto label_126;
| }
0x00097bdc uxtb r2, r0 | r2 = (int8_t) r0;
0x00097bde cmp r2, 0x1c |
| if (r2 > 0x1c) {
0x00097be0 bgt 0x97c4c | goto label_127;
| }
0x00097be2 ldr r1, [pc, 0xb0] |
0x00097be4 add r1, pc | r1 = 0x12f87e;
0x00097be6 add.w r2, r1, r2, lsl 2 | r2 = r1 + (r2 << 2);
0x00097bea ldr.w r1, [r2, 0x248] | r1 = *((r2 + 0x248));
| if (r1 == 0) {
0x00097bee cbz r1, 0x97c56 | goto label_128;
| }
| label_20:
0x00097bf0 mov r0, r4 | r0 = r4;
0x00097bf2 str r3, [sp, 8] | var_8h = r3;
0x00097bf4 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x00097bf8 ldr r1, [r7] | r1 = *(r7);
0x00097bfa mov sb, r0 | sb = r0;
0x00097bfc ldr r3, [sp, 8] | r3 = var_8h;
| if (r1 != 0) {
0x00097bfe cbz r1, 0x97c08 |
0x00097c00 mov r0, r4 | r0 = r4;
0x00097c02 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00097c06 ldr r3, [sp, 8] | r3 = var_8h;
| }
0x00097c08 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00097c0a str.w sb, [r7] | __asm ("str.w sb, [r7]");
0x00097c0e ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x00097c10 cmp r2, 0 |
| if (r2 != 0) {
0x00097c12 bne 0x97b38 | goto label_17;
| }
0x00097c14 mov r8, r3 | r8 = r3;
0x00097c16 b 0x97946 | goto label_1;
| label_122:
0x00097c18 ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
| label_118:
0x00097c1c mov.w r8, 7 | r8 = 7;
0x00097c20 b 0x97b82 | goto label_18;
| label_104:
0x00097c22 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00097c24 b 0x97b48 | goto label_19;
| label_125:
0x00097c26 ldr r1, [pc, 0x70] |
0x00097c28 add r1, pc | r1 = 0x12f8c6;
0x00097c2a b 0x97bf0 | goto label_20;
| label_126:
0x00097c2c ldr r1, [pc, 0x6c] |
0x00097c2e add r1, pc | r1 = 0x12f8ce;
0x00097c30 b 0x97bf0 | goto label_20;
| label_121:
0x00097c32 movs r3, 7 | r3 = 7;
0x00097c34 b 0x97b48 | goto label_19;
| label_105:
0x00097c36 mov.w r8, 1 | r8 = 1;
0x00097c3a b 0x97956 | goto label_15;
| label_124:
0x00097c3c ldr r1, [pc, 0x60] |
0x00097c3e add r1, pc | r1 = 0x12f8e2;
0x00097c40 b 0x97bf0 | goto label_20;
| label_110:
0x00097c42 mvn r1, 0x80000000 | r1 = ~0x80000000;
0x00097c46 b 0x979b6 | goto label_11;
| label_123:
0x00097c48 movs r3, 7 | r3 = 7;
0x00097c4a b 0x97a64 | goto label_8;
| label_127:
0x00097c4c ldr r1, [pc, 0x54] |
0x00097c4e add r1, pc | r1 = 0x12f8f6;
0x00097c50 b 0x97bf0 | goto label_20;
| label_106:
0x00097c52 movs r3, 1 | r3 = 1;
0x00097c54 b 0x97a64 | goto label_8;
| label_128:
0x00097c56 ldr r1, [pc, 0x50] |
0x00097c58 add r1, pc | r1 = 0x12f906;
0x00097c5a b 0x97bf0 | goto label_20;
| label_108:
0x00097c5c blx 0x6430 | fcn_00006430 ();
0x00097c60 movs r5, 0x86 | r5 = 0x86;
0x00097c62 movs r5, r0 | r5 = r0;
0x00097c64 lsls r4, r6, 8 | r4 = r6 << 8;
0x00097c66 movs r0, r0 |
0x00097c68 strb r6, [r6, 0x1e] | *((r6 + 0x1e)) = r6;
0x00097c6a movs r3, r0 | r3 = r0;
0x00097c6c adds r7, 0x2e | r7 += 0x2e;
0x00097c6e movs r3, r0 | r3 = r0;
0x00097c70 rors r4, r5 | __asm ("rors r4, r5");
0x00097c72 movs r4, r0 | r4 = r0;
0x00097c74 b 0x98258 | goto label_129;
| do {
0x00098056 movs r3, 1 | r3 = 1;
0x00098058 ldr r2, [pc, 0x1f4] |
0x0009805a strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x0009805c ldr r3, [pc, 0x1d0] | r3 = *(0x98230);
0x0009805e add r2, pc | r2 = 0x1302b2;
0x00098060 ldr r3, [r2, r3] | r3 = imp.atan;
0x00098062 ldr r2, [r3] | r2 = imp.atan;
0x00098064 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00098066 eors r2, r3 | r2 ^= r3;
0x00098068 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009806c bne.w 0x98226 | goto label_130;
| }
0x00098070 mov r1, r8 | r1 = r8;
0x00098072 mov r0, r6 | r0 = r6;
0x00098074 add sp, 0x2c |
0x00098076 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009807a b.w 0x2d144 | void (*0x2d144)() ();
| if (r2 == r3) {
| label_23:
0x000981ec beq 0x98220 | goto label_131;
| }
| label_21:
0x000981ee mov r0, r4 | r0 = r4;
0x000981f0 bl 0x41b2c | fcn_00041b2c (r0, r1);
0x000981f2 invalid |
| label_22:
0x000981f4 b 0x98056 |
| } while (1);
| label_131:
0x00098220 bl 0x7c594 | fcn_0007c594 (r0);
0x00098224 b 0x981ee | goto label_21;
| label_130:
0x00098226 blx 0x6430 | fcn_00006430 ();
0x0009822a nop |
0x0009822c movs r0, 0x32 | r0 = 0x32;
0x0009822e movs r5, r0 | r5 = r0;
0x00098230 lsls r4, r6, 8 | r4 = r6 << 8;
0x00098232 movs r0, r0 |
0x00098234 strb r4, [r2, 7] | *((r2 + 7)) = r4;
0x00098236 movs r3, r0 | r3 = r0;
0x00098238 adds r1, 0xb0 | r1 += 0xb0;
0x0009823a movs r3, r0 | r3 = r0;
0x0009823c adds r1, 0x38 | r1 += 0x38;
0x0009823e movs r3, r0 | r3 = r0;
0x00098240 cmp r7, 0xbe |
0x00098242 movs r3, r0 | r3 = r0;
0x00098244 ldr r7, [pc, 0x80] | r7 = *(0x982c8);
0x00098246 movs r4, r0 | r4 = r0;
0x00098248 adds r6, r6, 5 | r6 += 5;
0x0009824a movs r5, r0 | r5 = r0;
0x0009824c b 0x9875c | goto label_132;
| label_129:
0x00098258 adds r4, r5, 3 | r4 = r5 + 3;
0x0009825a movs r5, r0 | r5 = r0;
0x0009825c ldr r2, [r1, 0x6c] | r2 = *((r1 + 0x6c));
0x0009825e movs r3, r0 | r3 = r0;
| if (r3 < r0) {
0x00098260 blt 0x982d0 | void (*0x982d0)() ();
| }
0x00098262 movs r3, r0 | r3 = r0;
0x00098264 ldr r5, [pc, 0x3c0] | r5 = *(0x98628);
0x00098266 movs r4, r0 | r4 = r0;
0x00098268 cmp r6, 0x98 |
0x0009826a movs r3, r0 | r3 = r0;
0x0009826c adds r0, r3, 1 | r0 = r3 + 1;
0x0009826e movs r5, r0 | r5 = r0;
| if (r5 >= r0) {
0x00098270 bge 0x981f4 | goto label_22;
| }
0x00098272 movs r3, r0 | r3 = r0;
0x00098274 cmp r6, 0x6c |
0x00098276 movs r3, r0 | r3 = r0;
| if (r3 >= r0) {
0x00098278 bge 0x981ec | goto label_23;
| }
0x0009827a movs r3, r0 | r3 = r0;
0x0009827c rsbs r6, r1, 0 | r6 = r1 - ;
0x0009827e movs r5, r0 | r5 = r0;
0x00098280 b 0x98408 | void (*0x98408)() ();
| do {
| label_24:
0x00098620 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098622 adds r6, 1 | r6++;
0x00098624 cmp r2, r6 |
0x00098626 add.w r3, r3, 0x40 | r3 += 0x40;
0x0009862a str r3, [sp, 0x10] | var_10h = r3;
| if (r2 <= r6) {
0x0009862c ble.w 0x98af6 | goto label_133;
| }
0x00098630 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098632 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00098634 cmp r3, 0 |
0x00098636 bne 0x98620 |
| } while (r3 != 0);
0x00098638 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0009863a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0009863c cmp r0, 0 |
| if (r0 == 0) {
0x0009863e beq.w 0x98754 | goto label_134;
| }
0x00098642 ldr.w fp, [r8, 0x108] | fp = *((r8 + 0x108));
0x00098646 cmp.w fp, 0 |
| if (fp != 0) {
0x0009864a beq 0x9865c |
0x0009864c ldr.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
| if (r3 != 0) {
0x00098650 cbnz r3, 0x9865c | goto label_26;
| }
0x00098652 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00098654 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00098656 cmp r3, 0 |
| if (r3 == 0) {
0x00098658 beq.w 0x987da | goto label_135;
| }
| }
| label_26:
0x0009865c ldr r4, [sp, 0x10] | r4 = var_10h;
0x0009865e movs r1, 0 | r1 = 0;
0x00098660 mov r0, r8 | r0 = r8;
0x00098662 mov r2, r4 | r2 = r4;
0x00098664 bl 0x98544 | r0 = fcn_00098544 (r0, r1, r2);
0x00098668 mov r5, r0 | r5 = r0;
0x0009866a str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0009866c cmp r0, 0 |
| if (r0 == 0) {
0x0009866e beq.w 0x98ac0 | goto label_40;
| }
0x00098672 ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x00098674 movw r2, 0xfffe | r2 = 0xfffe;
0x00098678 cmp r3, r2 |
| if (r3 > r2) {
0x0009867a bhi.w 0x99702 | goto label_136;
| }
0x0009867e ldrb.w r2, [r0, 0x2b] | r2 = *((r0 + 0x2b));
0x00098682 adds r3, 1 | r3++;
0x00098684 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00098686 cmp r2, 1 |
| if (r2 != 1) {
0x00098688 bne.w 0x98ad0 | goto label_137;
| }
| label_38:
0x0009868c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009868e mov r1, r5 | r1 = r5;
0x00098690 mov r0, r8 | r0 = r8;
0x00098692 ldrh r7, [r3, 0x14] | r7 = *((r3 + 0x14));
0x00098694 bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x00098698 cmp r0, 0 |
| if (r0 != 0) {
0x0009869a bne.w 0x98ac0 | goto label_40;
| }
0x0009869e ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000986a2 cmp r3, 2 |
| if (r3 == 2) {
0x000986a4 beq.w 0x98ee8 | goto label_138;
| }
0x000986a8 cmp r3, 1 |
| if (r3 == 1) {
0x000986aa beq.w 0x98e0e | goto label_139;
| }
| label_54:
0x000986ae ldr r3, [sp, 0x10] | r3 = var_10h;
0x000986b0 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
| label_46:
0x000986b2 movw r2, 0xffff | r2 = 0xffff;
0x000986b6 ldrsh.w r4, [r5, 0x22] | r4 = *((r5 + 0x22));
0x000986ba strh r2, [r5, 0x22] | *((r5 + 0x22)) = r2;
0x000986bc movs r3, 1 | r3 = 1;
0x000986be ldr r2, [sp, 0x24] | r2 = var_24h;
0x000986c0 uxtb r7, r7 | r7 = (int8_t) r7;
0x000986c2 mov sb, r2 | sb = r2;
0x000986c4 mov r0, r2 | r0 = r2;
0x000986c6 strh r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x000986c8 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
0x000986cc strh.w r7, [sb, 0x14] | *((sb + 0x14)) = r7;
0x000986d0 strh r4, [r5, 0x22] | *((r5 + 0x22)) = r4;
| label_25:
0x000986d2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000986d4 ldrb.w r3, [r3, 0x25] | r3 = *((r3 + 0x25));
| label_35:
0x000986d8 lsls r7, r3, 0x1e | r7 = r3 << 0x1e;
0x000986da bmi 0x98746 |
| while (r0 == 0) {
0x000986dc ldr r3, [sp, 0x20] | r3 = var_20h;
0x000986de ldr r2, [r3] | r2 = *(r3);
0x000986e0 b 0x98620 | goto label_24;
| label_65:
0x000986e2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000986e4 mov r1, r7 | r1 = r7;
0x000986e6 mov sl, fp | sl = fp;
0x000986e8 ldr.w fp, [sp, 0x10] | fp = var_10h;
0x000986ec bl 0x30cbc | fcn_00030cbc (r0, r1);
0x000986f0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000986f2 mov r4, sb | r4 = sb;
0x000986f4 str.w sl, [r3, 0x1c] | __asm ("str.w sl, [r3, 0x1c]");
| label_95:
0x000986f8 cmp.w sl, 0 |
| if (sl != 0) {
0x000986fc beq 0x98724 |
0x000986fe ldr r3, [sp, 0x14] | r3 = var_14h;
0x00098700 ldr.w r2, [sl] | r2 = *(sl);
0x00098704 ldr.w r3, [r3, 0x80] | r3 = *((r3 + 0x80));
0x00098708 cmp r2, r3 |
| if (r2 > r3) {
0x0009870a bgt.w 0x99726 | goto label_140;
| }
0x0009870e movs r3, 8 |
0x00098710 movt r3, 0x40 | r3 = 0x400008;
0x00098714 and.w r3, r8, r3 | r3 = r8 & r3;
| if (r3 == 0) {
0x00098718 cbz r3, 0x98724 | goto label_36;
| }
0x0009871a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0009871c ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0009871e orr r3, r3, 0x40000 | r3 |= 0x40000;
0x00098722 str r3, [r2, 4] | *((r2 + 4)) = r3;
| }
| label_36:
0x00098724 ldr.w r2, [pc, 0x998] |
0x00098728 ldr.w r3, [pc, 0x98c] | r3 = *(0x990b8);
0x0009872c add r2, pc | r2 = 0x1317f0;
0x0009872e ldr r3, [r2, r3] | r3 = imp.atan;
0x00098730 ldr r2, [r3] | r2 = imp.atan;
0x00098732 ldr r3, [sp, 0x9c] | r3 = *(arg_9ch);
0x00098734 eors r2, r3 | r2 ^= r3;
0x00098736 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009873a bne.w 0x996fe | goto label_141;
| }
0x0009873e mov r0, r4 | r0 = r4;
0x00098740 add sp, 0xa4 |
0x00098742 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00098746 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00098748 mov r0, r8 | r0 = r8;
0x0009874a bl 0x44034 | r0 = fcn_00044034 (r0, r1);
0x0009874e cmp r0, 0 |
0x00098750 beq 0x986dc |
| }
0x00098752 b 0x98ac0 | goto label_40;
| label_134:
0x00098754 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x00098756 mov r4, r3 | r4 = r3;
0x00098758 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009875a bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
| label_132:
0x0009875c mcrr2 p8, 0, r2, sb, c0 | __asm ("mcrr2 p8, 0, r2, sb, c0");
| if (r0 != 0) {
0x00098760 bne.w 0x98ac0 | goto label_40;
| }
0x00098764 ldr.w r0, [r8] | r0 = *(r8);
0x00098768 ldr r7, [r4, 0x14] | r7 = *((r4 + 0x14));
0x0009876a cmp r0, 0 |
| if (r0 == 0) {
0x0009876c beq.w 0x98ac4 | goto label_142;
| }
0x00098770 movs r2, 0x40 | r2 = 0x40;
0x00098772 movs r3, 0 | r3 = 0;
0x00098774 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00098778 mov r5, r0 | r5 = r0;
| label_37:
0x0009877a cmp r5, 0 |
| if (r5 == 0) {
0x0009877c beq.w 0x98abc | goto label_143;
| }
0x00098780 movs r1, 0 | r1 = 0;
0x00098782 movs r2, 0x40 | r2 = 0x40;
0x00098784 mov r0, r5 | r0 = r5;
0x00098786 blx 0x62ec | fcn_000062ec ();
0x0009878a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0009878c ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0009878e str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x00098790 movs r3, 1 | r3 = 1;
0x00098792 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00098794 cmp r1, 0 |
| if (r1 == 0) {
0x00098796 beq.w 0x98ae4 | goto label_144;
| }
0x0009879a ldr.w r0, [r8] | r0 = *(r8);
0x0009879e bl 0x392f0 | fcn_000392f0 (r0, r1);
| label_39:
0x000987a2 str r0, [r5] | *(r5) = r0;
| do {
0x000987a4 mov r3, r7 | r3 = r7;
0x000987a6 ldr r7, [r7, 0x34] | r7 = *((r7 + 0x34));
0x000987a8 cmp r7, 0 |
0x000987aa bne 0x987a4 |
| } while (r7 != 0);
0x000987ac ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x000987ae add.w r2, r5, 0x22 | r2 = r5 + 0x22;
0x000987b2 adds r3, r5, 4 | r3 = r5 + 4;
0x000987b4 ldr.w r0, [r8] | r0 = *(r8);
0x000987b8 bl 0x629c4 | fcn_000629c4 (r0, r1, r2, r3, r4, r5, r6);
0x000987bc ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000987be movw r2, 0xffff | r2 = 0xffff;
0x000987c2 orr r3, r3, 0x4200 | r3 |= 0x4200;
0x000987c6 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x000987c8 ldr.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x000987cc strh r2, [r5, 0x20] | *((r5 + 0x20)) = r2;
0x000987ce movs r2, 0xc8 | r2 = 0xc8;
0x000987d0 strh r2, [r5, 0x26] | *((r5 + 0x26)) = r2;
0x000987d2 cmp r3, 0 |
| if (r3 == 0) {
0x000987d4 beq.w 0x986d2 | goto label_25;
| }
0x000987d6 add r7, sp, 0x1f4 | r7 = sp + 0x1f4;
0x000987d8 b 0x98ac0 | goto label_40;
| label_135:
0x000987da ldrb.w r3, [r2, 0x26] | r3 = *((r2 + 0x26));
0x000987de lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
0x000987e0 itt pl |
| if (r1 < r3) {
0x000987e2 addpl r3, r0, -1 | r3 = r0 + -1;
| }
| if (r1 < r3) {
0x000987e6 mov r1, fp | r1 = fp;
| goto label_145;
| }
| if (r1 < r3) {
| label_145:
0x000987e8 bmi.w 0x9865c | goto label_26;
| }
| label_28:
0x000987ec ldr.w sb, [r1] | sb = *(r1);
0x000987f0 cmp.w sb, 0 |
0x000987f4 itt gt |
| if (sb <= 0) {
0x000987f6 movgt lr, r1 | lr = r1;
| }
| if (sb <= 0) {
0x000987f8 movgt r5, 0 | r5 = 0;
| }
| if (sb <= 0) {
0x000987fa ble 0x9882c | goto label_146;
| }
| label_27:
0x000987fc ldr.w r2, [lr, 0xc] | r2 = *((lr + 0xc));
0x00098800 mov fp, r3 |
0x00098802 add.w ip, r2, -1 |
| do {
| label_29:
0x00098806 ldrb r4, [fp, 1]! | r4 = *(arg_1h_2);
0x0009880a ldrb r7, [ip, 1]! | r7 = *((ip += 1));
0x0009880e cmp r4, r7 |
| if (r4 == r7) {
0x00098810 beq 0x9883c | goto label_147;
| }
0x00098812 add r4, sl | r4 += sl;
0x00098814 add r7, sl | r7 += sl;
0x00098816 ldrb.w r4, [r4, 0x140] | r4 = *((r4 + 0x140));
0x0009881a ldrb.w r7, [r7, 0x140] | r7 = *((r7 + 0x140));
0x0009881e cmp r4, r7 |
0x00098820 beq 0x98806 |
| } while (r4 == r7);
0x00098822 adds r5, 1 | r5++;
0x00098824 add.w lr, lr, 0x18 | lr += 0x18;
0x00098828 cmp sb, r5 |
| if (sb != r5) {
0x0009882a bne 0x987fc | goto label_27;
| }
| label_146:
0x0009882c ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0009882e cmp r2, 0 |
| if (r2 != 0) {
0x00098830 bne.w 0x9865c | goto label_26;
| }
0x00098834 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x00098836 cmp r1, 0 |
| if (r1 != 0) {
0x00098838 bne 0x987ec | goto label_28;
| }
0x0009883a b 0x9865c | goto label_26;
| label_147:
0x0009883c cmp r4, 0 |
| if (r4 != 0) {
0x0009883e bne 0x98806 | goto label_29;
| }
0x00098840 lsls r3, r5, 1 | r3 = r5 << 1;
0x00098842 mov fp, r1 |
0x00098844 ldr.w r4, [r8] | r4 = *(r8);
0x00098848 str r3, [sp, 0x28] | var_28h = r3;
0x0009884a add r3, r5 | r3 += r5;
0x0009884c add.w r3, r1, r3, lsl 3 | r3 = r1 + (r3 << 3);
0x00098850 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x00098852 cmp r1, 0 |
| if (r1 != 0) {
0x00098854 bne.w 0x98eb8 | goto label_148;
| }
0x00098858 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0009885a ldrb.w r3, [r3, 0x25] | r3 = *((r3 + 0x25));
0x0009885e lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 < r3) {
0x00098860 bmi.w 0x98e00 | goto label_149;
| }
0x00098864 cmp r4, 0 |
| if (r4 == 0) {
0x00098866 beq.w 0x98f20 | goto label_150;
| }
0x0009886a mov r0, r4 | r0 = r4;
0x0009886c movs r2, 0x40 | r2 = 0x40;
0x0009886e movs r3, 0 | r3 = 0;
0x00098870 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x00098874 str r0, [sp, 0x18] | x = r0;
| label_53:
0x00098876 ldr r3, [sp, 0x18] | r3 = x;
0x00098878 cmp r3, 0 |
| if (r3 == 0) {
0x0009887a beq.w 0x98ac0 | goto label_40;
| }
0x0009887e mov r0, r3 | r0 = r3;
0x00098880 movs r2, 0x40 | r2 = 0x40;
0x00098882 movs r1, 0 | r1 = 0;
0x00098884 blx 0x62ec | fcn_000062ec ();
0x00098888 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009888a add r3, r5 | r3 += r5;
0x0009888c add.w sb, fp, r3, lsl 3 | sb = fp + (r3 << 3);
0x00098890 ldr.w r7, [sb, 0x1c] | r7 = *((sb + 0x1c));
0x00098894 cmp r7, 0 |
| if (r7 == 0) {
0x00098896 beq.w 0x98f54 | goto label_151;
| }
| label_55:
0x0009889a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009889c mov r0, r4 | r0 = r4;
0x0009889e ldr r2, [sp, 0x18] | r2 = x;
0x000988a0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000988a2 add.w sb, r3, r5 | sb = r3 + r5;
0x000988a6 movs r3, 1 | r3 = 1;
0x000988a8 add.w sb, fp, sb, lsl 3 | sb = fp + (sb << 3);
0x000988ac str r2, [r1, 0x10] | *((r1 + 0x10)) = r2;
0x000988ae ldr.w r1, [sb, 0xc] | r1 = *((sb + 0xc));
0x000988b2 str r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
0x000988b4 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x000988b8 ldr r2, [sp, 0x18] | r2 = x;
0x000988ba ldr.w r1, [sb, 0x14] | r1 = *((sb + 0x14));
0x000988be ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000988c0 str r0, [r2] | *(r2) = r0;
0x000988c2 mov r0, r4 | r0 = r4;
0x000988c4 orr r3, r3, 0x4200 | r3 |= 0x4200;
0x000988c8 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x000988ca movw r3, 0xffff | r3 = 0xffff;
0x000988ce strh r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x000988d0 movs r3, 0xc8 | r3 = 0xc8;
0x000988d2 strh r3, [r2, 0x26] | *((r2 + 0x26)) = r3;
0x000988d4 movs r2, 0 | r2 = 0;
0x000988d6 bl 0x39f48 | fcn_00039f48 (r0, r1, r2, r3);
0x000988da ldr r1, [sp, 0x10] | r1 = var_10h;
0x000988dc mov sb, r0 | sb = r0;
0x000988de str r0, [r1, 0x14] | *((r1 + 0x14)) = r0;
0x000988e0 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x000988e4 cmp r3, 0 |
| if (r3 != 0) {
0x000988e6 bne.w 0x98ac0 | goto label_40;
| }
0x000988ea ldrb.w r3, [r1, 0x25] | r3 = *((r1 + 0x25));
0x000988ee ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000988f0 ands r1, r3, 2 | r1 = r3 & 2;
0x000988f4 orr r2, r2, 0x4000000 | r2 |= 0x4000000;
0x000988f8 str r2, [r0, 4] | *((r0 + 4)) = r2;
| if (r1 != r3) {
0x000988fa bne.w 0x98fd8 | goto label_152;
| }
0x000988fe ldr r0, [sp, 0x10] | r0 = var_10h;
0x00098900 ldrb.w r3, [r0, 0x26] | r3 = *((r0 + 0x26));
0x00098904 str r7, [r0, 0x3c] | *((r0 + 0x3c)) = r7;
0x00098906 orr r3, r3, 1 | r3 |= 1;
0x0009890a strb.w r3, [r0, 0x26] | *((r0 + 0x26)) = r3;
0x0009890e ldr r3, [r7] | r3 = *(r7);
0x00098910 adds r3, 1 | r3++;
0x00098912 cmp r3, 1 |
0x00098914 str r3, [r7] | *(r7) = r3;
| if (r3 > 1) {
0x00098916 ble 0x98920 |
0x00098918 ldrb r3, [r7, 0x12] | r3 = *((r7 + 0x12));
0x0009891a cmp r3, 1 |
0x0009891c it eq |
| if (r3 == 1) {
0x0009891e strbeq r1, [r7, 0x12] | *((r7 + 0x12)) = r1;
| goto label_153;
| }
| }
| label_153:
0x00098920 ldrb.w r3, [sb] | r3 = *(sb);
0x00098924 add.w r1, r3, 0x7a | r1 = r3 + 0x7a;
0x00098928 uxtb r4, r1 | r4 = (int8_t) r1;
0x0009892a cmp r4, 1 |
| if (r4 > 1) {
0x0009892c bhi.w 0x9908c | goto label_154;
| }
0x00098930 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00098932 mov.w r0, -1 | r0 = -1;
0x00098936 ldr.w r1, [pc, 0x78c] |
0x0009893a str r0, [sp, 0x2c] | var_2ch = r0;
0x0009893c add r2, r5 | r2 += r5;
0x0009893e str r6, [sp, 0x38] | var_38h = r6;
0x00098940 add.w r2, fp, r2, lsl 3 | r2 = fp + (r2 << 3);
0x00098944 add r1, pc | r1 = 0x131a0e;
0x00098946 str r3, [sp, 0x48] | var_48h = r3;
0x00098948 str r2, [sp, 0x34] | var_34h = r2;
0x0009894a mov r2, sb | r2 = sb;
0x0009894c strd r4, r5, [sp, 0x3c] | __asm ("strd r4, r5, [var_40h]");
| label_34:
0x00098950 ldr.w lr, [r2, 0x20] |
0x00098954 ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x00098956 ldr.w ip, [lr] | ip = *(lr);
0x0009895a cmp.w ip, 0 |
| if (ip <= 0) {
0x0009895e ble.w 0x99086 | goto label_155;
| }
0x00098962 mov r4, lr | r4 = lr;
0x00098964 movs r5, 0 | r5 = 0;
0x00098966 strd fp, sb, [sp, 0x4c] | __asm ("strd fp, sb, [var_4ch]");
0x0009896a b 0x98974 |
| while (r3 != 0) {
| label_30:
0x0009896c adds r5, 1 | r5++;
0x0009896e adds r4, 0x40 | r4 += 0x40;
0x00098970 cmp r5, ip |
| if (r5 == ip) {
0x00098972 beq 0x98a0a | goto label_156;
| }
| label_33:
0x00098974 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00098976 and r7, r6, 0x2000 | r7 = r6 & 0x2000;
0x0009897a cmp r3, 0 |
0x0009897c bne 0x9896c |
| }
0x0009897e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00098980 cmp r3, 0 |
| if (r3 == 0) {
0x00098982 beq 0x9896c | goto label_30;
| }
0x00098984 add.w sb, r3, -1 | sb = r3 + -1;
0x00098988 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009898a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0009898c add.w fp, r3, -1 |
0x00098990 str r3, [sp, 0x30] | var_30h = r3;
| label_32:
0x00098992 ldrb r3, [sb, 1]! | r3 = *((sb += 1));
0x00098996 ldrb r0, [fp, 1]! | r0 = *(arg_1h_2);
0x0009899a cmp r3, r0 |
| if (r3 == r0) {
0x0009899c beq 0x989ba | goto label_157;
| }
| label_31:
0x0009899e add r3, r1 | r3 += r1;
0x000989a0 add r0, r1 | r0 += r1;
0x000989a2 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000989a6 ldrb.w r0, [r0, 0x140] | r0 = *((r0 + 0x140));
0x000989aa cmp r3, r0 |
| if (r3 != r0) {
0x000989ac bne 0x9896c | goto label_30;
| }
0x000989ae ldrb r3, [sb, 1]! | r3 = *((sb += 1));
0x000989b2 ldrb r0, [fp, 1]! | r0 = *(arg_1h_2);
0x000989b6 cmp r3, r0 |
| if (r3 != r0) {
0x000989b8 bne 0x9899e | goto label_31;
| }
| label_157:
0x000989ba cmp r3, 0 |
| if (r3 != 0) {
0x000989bc bne 0x98992 | goto label_32;
| }
0x000989be ldr r3, [sp, 0x18] | r3 = x;
0x000989c0 add.w sb, lr, r5, lsl 6 | sb = lr + (r5 << 6);
0x000989c4 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000989c6 mov r0, r3 | r0 = r3;
0x000989c8 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000989ca adds r3, 1 | r3++;
0x000989cc str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x000989ce ldrb.w r0, [sb, 0x2d] | r0 = *((sb + 0x2d));
0x000989d2 orr r0, r0, 0x40 | r0 |= 0x40;
0x000989d6 strb.w r0, [sb, 0x2d] | *((sb + 0x2d)) = r0;
0x000989da cmp r7, 0 |
| if (r7 != 0) {
0x000989dc bne.w 0x98fa2 | goto label_158;
| }
0x000989e0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000989e2 orr r6, r6, 0x2000 | r6 |= 0x2000;
0x000989e6 str r6, [r2, 4] | *((r2 + 4)) = r6;
0x000989e8 adds r5, 1 | r5++;
0x000989ea mov.w r7, 0x2000 | r7 = 0x2000;
0x000989ee adds r4, 0x40 | r4 += 0x40;
0x000989f0 cmp r3, 0 |
0x000989f2 itttt lt |
| if (r3 >= 0) {
0x000989f4 ldrlt r3, [r8, 0x28] | r3 = *((r8 + 0x28));
| }
| if (r3 >= 0) {
0x000989f8 strlt r3, [sp, 0x2c] | var_2ch = r3;
| }
| if (r3 >= 0) {
0x000989fa addlt r3, 1 | r3++;
| }
| if (r3 < 0) {
0x000989fc str.w r3, [r8, 0x28] | __asm ("str.w r3, [r8, 0x28]");
| }
0x00098a00 cmp r5, ip |
0x00098a02 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00098a04 str r3, [r4, -0x10] | *((r4 - 0x10)) = r3;
| if (r5 != ip) {
0x00098a08 bne 0x98974 | goto label_33;
| }
| label_156:
0x00098a0a ldrd fp, sb, [sp, 0x4c] | __asm ("ldrd fp, sb, [var_4ch]");
| if (r7 == 0) {
| label_62:
0x00098a0e cbz r7, 0x98a1a | goto label_159;
| }
0x00098a10 ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x00098a12 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00098a14 ldrb r4, [r2] | r4 = *(r2);
0x00098a16 cmp r4, r3 |
| if (r4 == r3) {
0x00098a18 beq 0x98950 | goto label_34;
| }
| label_159:
0x00098a1a str r2, [sp, 0x2c] | var_2ch = r2;
0x00098a1c ldrd r6, r4, [sp, 0x38] | __asm ("ldrd r6, r4, [var_3ch]");
0x00098a20 ldr r5, [sp, 0x40] | r5 = var_40h;
0x00098a22 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
| label_63:
0x00098a26 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00098a28 ldr.w r1, [pc, 0x69c] |
0x00098a2c ldr.w r7, [r8, 0x108] | r7 = *((r8 + 0x108));
0x00098a30 add r3, r5 | r3 += r5;
0x00098a32 add.w r3, fp, r3, lsl 3 | r3 = fp + (r3 << 3);
0x00098a36 add r1, pc | r1 = 0x131b02;
0x00098a38 str r1, [r3, 0x18] | *((r3 + 0x18)) = r1;
0x00098a3a lsls r3, r2, 0x12 | r3 = r2 << 0x12;
0x00098a3c str.w fp, [r8, 0x108] | __asm ("str.w fp, [r8, 0x108]");
| if (r3 >= r2) {
0x00098a40 bpl.w 0x9904c | goto label_160;
| }
0x00098a44 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00098a46 ldr.w r3, [sb, 0x40] | r3 = *((sb + 0x40));
0x00098a4a ldr r0, [sp, 0x24] | r0 = var_24h;
0x00098a4c mov r1, r2 | r1 = r2;
0x00098a4e str r3, [r2, 0x40] | *((r2 + 0x40)) = r3;
0x00098a50 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
0x00098a54 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00098a56 movs r3, 0 | r3 = 0;
0x00098a58 str r3, [r2, 0x40] | *((r2 + 0x40)) = r3;
0x00098a5a cmp r0, 0 |
| if (r0 != 0) {
0x00098a5c bne.w 0x9905a | goto label_161;
| }
| label_59:
0x00098a60 mov r3, sb | r3 = sb;
0x00098a62 str.w fp, [r8, 0x108] | __asm ("str.w fp, [r8, 0x108]");
| do {
0x00098a66 mov r2, r3 | r2 = r3;
0x00098a68 ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x00098a6a cmp r3, 0 |
0x00098a6c bne 0x98a66 |
| } while (r3 != 0);
0x00098a6e ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00098a70 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00098a72 add r2, r5 | r2 += r5;
0x00098a74 add.w r2, fp, r2, lsl 3 | r2 = fp + (r2 << 3);
0x00098a78 ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x00098a7a cmp r1, 0 |
| if (r1 == 0) {
0x00098a7c beq.w 0x99028 | goto label_162;
| }
| if (r3 != 0) {
0x00098a80 cbz r3, 0x98a8c |
0x00098a82 ldr r3, [r3] | r3 = *(r3);
0x00098a84 ldr r0, [r1] | r0 = *(r1);
0x00098a86 cmp r3, r0 |
| if (r3 != r0) {
0x00098a88 bne.w 0x99060 | goto label_163;
| }
| }
| label_57:
0x00098a8c ldr r2, [sp, 0x18] | r2 = x;
0x00098a8e ldr.w r0, [r8] | r0 = *(r8);
0x00098a92 mov r3, r2 | r3 = r2;
0x00098a94 adds r2, 0x22 | r2 += 0x22;
0x00098a96 adds r3, 4 | r3 += 4;
0x00098a98 bl 0x629c4 | fcn_000629c4 (r0, r1, r2, r3, r4, r5, r6);
0x00098a9c cmp r4, 1 |
| if (r4 < 1) {
0x00098a9e bls.w 0x9902c | goto label_164;
| }
| label_58:
0x00098aa2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00098aa4 add r3, r5 | r3 += r5;
0x00098aa6 add.w fp, fp, r3, lsl 3 |
0x00098aaa movs r3, 0 | r3 = 0;
0x00098aac str.w r3, [fp, 0x18] | __asm ("str.w r3, [arg_18h]");
0x00098ab0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098ab2 str.w r7, [r8, 0x108] | __asm ("str.w r7, [r8, 0x108]");
0x00098ab6 ldrb.w r3, [r3, 0x25] | r3 = *((r3 + 0x25));
0x00098aba b 0x986d8 | goto label_35;
| label_143:
0x00098abc ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098abe str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
| label_40:
0x00098ac0 movs r4, 2 | r4 = 2;
0x00098ac2 b 0x98724 | goto label_36;
| label_142:
0x00098ac4 movs r0, 0x40 | r0 = 0x40;
0x00098ac6 movs r1, 0 | r1 = 0;
0x00098ac8 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00098acc mov r5, r0 | r5 = r0;
0x00098ace b 0x9877a | goto label_37;
| label_137:
0x00098ad0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098ad2 ldrb.w r3, [r3, 0x25] | r3 = *((r3 + 0x25));
0x00098ad6 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 < r3) {
0x00098ad8 bmi.w 0x98ed8 | goto label_165;
| }
0x00098adc cmp r2, 0 |
| if (r2 == 0) {
0x00098ade beq.w 0x986d8 | goto label_35;
| }
0x00098ae2 b 0x9868c | goto label_38;
| label_144:
0x00098ae4 ldr.w r1, [pc, 0x5e4] |
0x00098ae8 ldr.w r0, [r8] | r0 = *(r8);
0x00098aec ldr r2, [sp, 0x10] | r2 = var_10h;
0x00098aee add r1, pc | r1 = 0x131bbe;
0x00098af0 bl 0x4a320 | fcn_0004a320 (r0);
0x00098af4 b 0x987a2 | goto label_39;
| label_133:
0x00098af6 ldr r7, [sp, 0x44] | r7 = var_44h;
0x00098af8 mov fp, r8 |
0x00098afa ldr.w r4, [fp, 0x24] | r4 = *(arg_24h);
0x00098afe cmp r4, 0 |
| if (r4 != 0) {
0x00098b00 bne 0x98ac0 | goto label_40;
| }
0x00098b02 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00098b04 ldr.w sb, [r3, 0x20] | sb = *((r3 + 0x20));
0x00098b08 mov r3, sb | r3 = sb;
0x00098b0a ldr r2, [r3], 0x48 | r2 = *(r3);
| r3 += 0x48;
0x00098b0c cmp r3, 0x48 |
0x00098b0e cmp r2, 1 |
| if (r2 <= 1) {
0x00098b10 ble.w 0x9909a | goto label_166;
| }
0x00098b14 ldr.w r1, [pc, 0x5b8] |
0x00098b18 ldr.w sl, [pc, 0x5b8] |
0x00098b1c str.w fp, [sp, 0x18] | __asm ("str.w fp, [x]");
0x00098b20 mov fp, sb |
0x00098b22 add r1, pc |
0x00098b24 str r7, [sp, 0x5c] | var_5ch = r7;
0x00098b26 add.w r1, r1, 0x290 | r1 = 0x131e86;
0x00098b2a add sl, pc | sl = 0x131c02;
0x00098b2c str r1, [sp, 0x54] | var_54h = r1;
0x00098b2e movs r1, 1 | r1 = 1;
0x00098b30 mov r8, sl | r8 = sl;
0x00098b32 str r1, [sp, 0x2c] | var_2ch = r1;
0x00098b34 mov sl, r3 | sl = r3;
0x00098b36 str r4, [sp, 0x60] | var_60h = r4;
0x00098b38 b 0x98b92 | goto label_167;
| label_41:
0x00098b3a ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00098b3e ands r4, r1, 4 | r4 = r1 & 4;
0x00098b42 str r3, [sp, 0x38] | var_38h = r3;
| if (r4 != r1) {
0x00098b44 bne.w 0x98c70 | goto label_168;
| }
| label_43:
0x00098b48 ldr r3, [sp, 0x38] | r3 = var_38h;
| if (r3 != 0) {
0x00098b4a cbz r3, 0x98b78 |
0x00098b4c ldr r5, [sp, 0x38] | r5 = var_38h;
0x00098b4e ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00098b50 ldr.w r1, [sl, 0x28] | r1 = *((sl + 0x28));
0x00098b54 mov r0, r5 | r0 = r5;
0x00098b56 bl 0x23654 | fcn_00023654 (r0, r1, r2);
0x00098b5a mov r2, r5 | r2 = r5;
0x00098b5c ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00098b5e ldr r0, [sp, 0x18] | r0 = x;
0x00098b60 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00098b62 bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x00098b66 str r0, [r5, 0x24] | *((r5 + 0x24)) = r0;
0x00098b68 ldrb.w r2, [sl, 0x26] | r2 = *((sl + 0x26));
0x00098b6a movs r0, 0x26 | r0 = 0x26;
0x00098b6c str.w r4, [sl, 0x2c] | __asm ("str.w r4, [sl, 0x2c]");
0x00098b70 orr r2, r2, 8 | r2 |= 8;
0x00098b74 strb.w r2, [sl, 0x26] | *((sl + 0x26)) = r2;
| }
| label_44:
0x00098b78 ldr.w r2, [fp] | r2 = *(fp);
| do {
| label_56:
0x00098b7c ldr r7, [sp, 0x2c] | r7 = var_2ch;
| label_52:
0x00098b7e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00098b80 subs r1, r2, 1 | r1 = r2 - 1;
0x00098b82 cmp r1, r7 |
0x00098b84 add.w sl, sl, 0x40 | sl += 0x40;
0x00098b88 add.w r3, r3, 1 | r3++;
0x00098b8c str r3, [sp, 0x2c] | var_2ch = r3;
| if (r1 <= r7) {
0x00098b8e ble.w 0x99092 | goto label_169;
| }
| label_167:
0x00098b92 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00098b96 ldr r1, [sl, -0x30] | r1 = *((sl - 0x30));
0x00098b9a str r3, [sp, 0x30] | var_30h = r3;
0x00098b9c cmp r3, 0 |
0x00098b9e it ne |
| if (r3 != 0) {
0x00098ba0 cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x00098ba2 beq 0x98b7c |
| } while (r3 == 0);
0x00098ba4 ldrb.w r0, [sl, 0x24] | r0 = *((sl + 0x24));
0x00098ba8 ldrb.w r1, [sl, 0x26] | r1 = *((sl + 0x26));
0x00098bac tst.w r0, 0x20 |
0x00098bb0 ite ne |
| if ((r0 & 0x20) == 0) {
0x00098bb2 movne r3, 1 | r3 = 1;
| }
| if ((r0 & 0x20) != 0) {
0x00098bb4 moveq r3, 2 | r3 = 2;
| }
0x00098bb6 str r3, [sp, 0x4c] | var_4ch = r3;
0x00098bb8 lsls r5, r0, 0x1d | r5 = r0 << 0x1d;
0x00098bba ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00098bbc add.w sb, r3, -1 | sb = r3 + -1;
| if (r5 >= r0) {
0x00098bc0 bpl 0x98b3a | goto label_41;
| }
0x00098bc2 lsls r4, r1, 0x1d | r4 = r1 << 0x1d;
| if (r4 < r1) {
0x00098bc4 bmi.w 0x99010 | goto label_170;
| }
0x00098bc8 ldr.w r7, [sl, 0x2c] | r7 = *((sl + 0x2c));
0x00098bcc cmp r7, 0 |
| if (r7 != 0) {
0x00098bce bne.w 0x99010 | goto label_170;
| }
0x00098bd2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00098bd4 ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
0x00098bd8 cmp r1, 0 |
| if (r1 <= 0) {
0x00098bda ble.w 0x99004 | goto label_171;
| }
0x00098bde strd sl, r8, [sp, 0x24] | __asm ("strd sl, r8, [var_28h]");
0x00098be2 mov r6, r7 | r6 = r7;
0x00098be4 mov r8, r7 | r8 = r7;
| label_42:
0x00098be6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00098be8 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00098bea adds r2, r0, r6 | r2 = r0 + r6;
0x00098bec ldrh r2, [r2, 0xa] | r2 = *((r2 + 0xa));
0x00098bee ands r2, r2, 2 | r2 &= 2;
| if (r2 != r2) {
0x00098bf2 bne 0x98c30 | goto label_47;
| }
0x00098bf4 ldr.w sl, [r0, r6] | sl = *((r0 + r6));
0x00098bf8 mov r4, r2 | r4 = r2;
0x00098bfa mov r5, fp | r5 = fp;
0x00098bfc str r6, [sp, 0x10] | var_10h = r6;
| do {
0x00098bfe ldr r6, [r5, 0x18] | r6 = *((r5 + 0x18));
0x00098c00 mov r1, sl | r1 = sl;
0x00098c02 mov r0, r6 | r0 = r6;
0x00098c04 bl 0x2f37c | r0 = fcn_0002f37c (r0, r1);
0x00098c08 cmp r0, 0 |
| if (r0 >= 0) {
0x00098c0a blt 0x98c20 |
0x00098c0c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00098c0e add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00098c12 add.w r3, r3, r0, lsl 2 | r3 += (r0 << 2);
0x00098c16 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x00098c18 ands r2, r3, 2 | r2 = r3 & 2;
| if (r2 == r3) {
0x00098c1c beq.w 0x98e1e | goto label_172;
| }
| }
0x00098c20 adds r4, 1 | r4++;
0x00098c22 adds r5, 0x40 | r5 += 0x40;
0x00098c24 cmp r4, sb |
0x00098c26 ble 0x98bfe |
| } while (r4 <= sb);
0x00098c28 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00098c2a ldr r6, [sp, 0x10] | r6 = var_10h;
0x00098c2c ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
| label_47:
0x00098c30 add.w r8, r8, 1 | r8++;
0x00098c34 adds r6, 0xc | r6 += 0xc;
0x00098c36 cmp r8, r1 |
| if (r8 < r1) {
0x00098c38 blt 0x98be6 | goto label_42;
| }
0x00098c3a ldrd sl, r8, [sp, 0x24] | __asm ("ldrd sl, r8, [var_28h]");
| if (r7 != 0) {
0x00098c3e cbz r7, 0x98c54 |
0x00098c40 ldrb.w r2, [sl, 0x26] | r2 = *((sl + 0x26));
0x00098c44 str.w r7, [sl, 0x2c] | __asm ("str.w r7, [sl, 0x2c]");
0x00098c48 bic r2, r2, 0x14 | r2 = BIT_MASK (r2, 0x14);
0x00098c4c orr r2, r2, 0x14 | r2 |= 0x14;
0x00098c50 strb.w r2, [sl, 0x26] | *((sl + 0x26)) = r2;
| }
0x00098c54 ldr r3, [sp, 0x18] | r3 = x;
0x00098c56 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00098c58 cmp r2, 0 |
| if (r2 != 0) {
0x00098c5a bne.w 0x98ac0 | goto label_40;
| }
0x00098c5e ldrb.w r1, [sl, 0x26] | r1 = *((sl + 0x26));
0x00098c62 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00098c66 ands r4, r1, 4 | r4 = r1 & 4;
0x00098c6a str r3, [sp, 0x38] | var_38h = r3;
| if (r4 == r1) {
0x00098c6c beq.w 0x98b48 | goto label_43;
| }
| label_168:
0x00098c70 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00098c72 ldr r2, [r3] | r2 = *(r3);
0x00098c74 ldr r3, [sp, 0x18] | r3 = x;
0x00098c76 cmp r2, 0 |
0x00098c78 ldr r3, [r3] | r3 = *(r3);
0x00098c7a str r3, [sp, 0x28] | var_28h = r3;
| if (r2 <= 0) {
0x00098c7c ble.w 0x98b78 | goto label_44;
| }
0x00098c80 ldr.w r3, [pc, 0x454] |
0x00098c84 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x00098c88 add r3, pc | r3 = 0x131d64;
0x00098c8a str r3, [sp, 0x50] | var_50h = r3;
0x00098c8c movs r3, 1 | r3 = 1;
0x00098c8e str r3, [sp, 0x44] | var_44h = r3;
0x00098c90 b 0x98cf8 |
| while (r1 >= r3) {
| label_50:
0x00098c92 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x00098c94 mov r3, sb | r3 = sb;
0x00098c96 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00098c98 mov r1, fp | r1 = fp;
0x00098c9a mov r2, r7 | r2 = r7;
0x00098c9c bl 0x399f4 | fcn_000399f4 (r0, r1, r2, r3);
0x00098ca0 ldrb.w r3, [sl, 0x26] | r3 = *((sl + 0x26));
0x00098ca4 mov r5, r0 | r5 = r0;
0x00098ca6 lsls r6, r3, 0x1a | r6 = r3 << 0x1a;
| if (r6 < r3) {
0x00098ca8 bpl 0x98cc0 |
0x00098caa ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x00098cae add.w sb, sb, 1 | sb++;
0x00098cb2 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00098cb4 add.w r3, r3, sb, lsl 4 | r3 += (sb << 4);
0x00098cb8 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00098cba orr r2, r2, 0x40 | r2 |= 0x40;
0x00098cbe strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x00098cc0 mov r2, r4 | r2 = r4;
0x00098cc2 ldr r0, [sp, 0x18] | r0 = x;
0x00098cc4 mov r3, r5 | r3 = r5;
0x00098cc6 movs r1, 0x35 | r1 = 0x35;
0x00098cc8 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x00098ccc mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x00098cce cbz r0, 0x98cdc |
0x00098cd0 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00098cd2 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x00098cd4 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x00098cd6 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00098cd8 orrs r3, r1 | r3 |= r1;
0x00098cda str r3, [r0, 4] | *((r0 + 4)) = r3;
| }
0x00098cdc ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00098cde ldr r0, [sp, 0x18] | r0 = x;
0x00098ce0 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00098ce2 bl 0x48d98 | fcn_00048d98 (r0, r1, r2);
0x00098ce6 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00098ce8 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00098cea str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
0x00098cec ldr r3, [r3] | r3 = *(r3);
0x00098cee adds r2, r1, 1 | r2 = r1 + 1;
0x00098cf0 cmp r1, r3 |
| if (r1 >= r3) {
0x00098cf2 bge.w 0x98f1a | goto label_173;
| }
0x00098cf6 str r2, [sp, 0x44] | var_44h = r2;
0x00098cf8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00098cfa ldr r2, [sp, 0x44] | r2 = var_44h;
0x00098cfc ldr r0, [sp, 0x30] | r0 = var_30h;
0x00098cfe ldr.w r7, [r3, r2, lsl 3] | offset_0 = r2 << 3;
| r7 = *((r3 + offset_0));
0x00098d02 mov r1, r7 | r1 = r7;
0x00098d04 bl 0x2f37c | r0 = fcn_0002f37c (r0, r1);
0x00098d08 subs.w sb, r0, 0 | sb = r0 - 0;
| if (sb < r0) {
0x00098d0c blt.w 0x98ec6 | goto label_174;
| }
0x00098d10 ldrb.w r3, [sl, 0x26] | r3 = *((sl + 0x26));
0x00098d14 movs r1, 0 | r1 = 0;
0x00098d16 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00098d18 mov r0, fp | r0 = fp;
0x00098d1a ubfx r3, r3, 4, 1 | r3 = (r3 >> 4) & ((1 << 1) - 1);
0x00098d1e str r3, [sp, 8] | var_8h = r3;
0x00098d20 add r3, sp, 0x94 | r3 += arg_94h;
0x00098d22 str r3, [sp, 0x40] | var_40h = r3;
0x00098d24 str r3, [sp, 4] | var_4h = r3;
0x00098d26 add r3, sp, 0x90 | r3 += arg_0h;
0x00098d28 str r3, [sp, 0x3c] | var_3ch = r3;
0x00098d2a str r3, [sp] | *(sp) = r3;
0x00098d2c mov r3, r7 | r3 = r7;
0x00098d2e bl 0x2f414 | r0 = fcn_0002f414 (r0, r1, r2, r3, r4, r5, r6);
0x00098d32 cmp r0, 0 |
| if (r0 == 0) {
0x00098d34 beq.w 0x98ec6 | goto label_174;
| }
0x00098d38 ldrd r6, r5, [sp, 0x90] | __asm ("ldrd r6, r5, [arg_0h]");
0x00098d3c mov r1, fp | r1 = fp;
0x00098d3e ldr r0, [sp, 0x28] | r0 = var_28h;
0x00098d40 mov r3, r5 | r3 = r5;
0x00098d42 mov r2, r6 | r2 = r6;
0x00098d44 bl 0x399f4 | fcn_000399f4 (r0, r1, r2, r3);
0x00098d48 add.w r3, fp, r6, lsl 6 | r3 = fp + (r6 << 6);
0x00098d4c mov r4, r0 | r4 = r0;
0x00098d4e ldrb.w r2, [r3, 0x2e] | r2 = *((r3 + 0x2e));
0x00098d52 lsls r0, r2, 0x1a | r0 = r2 << 0x1a;
| if (r0 < r2) {
0x00098d54 bpl 0x98d68 |
0x00098d56 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00098d58 adds r5, 1 | r5++;
0x00098d5a ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00098d5c add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x00098d60 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00098d62 orr r2, r2, 0x40 | r2 |= 0x40;
0x00098d66 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x00098d68 ldrb.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x00098d6c lsls r1, r3, 0x19 | r1 = r3 << 0x19;
0x00098d6e bpl 0x98c92 |
| }
0x00098d70 movs r3, 0 | r3 = 0;
0x00098d72 str.w sb, [sp, 0x48] | __asm ("str.w sb, [var_48h]");
0x00098d76 str r3, [sp, 0x24] | var_24h = r3;
| label_49:
0x00098d78 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00098d7a adds r1, r6, 1 | r1 = r6 + 1;
0x00098d7c ldrb.w r3, [sl, 0x26] | r3 = *((sl + 0x26));
0x00098d80 mov r0, fp | r0 = fp;
0x00098d82 str r2, [sp, 4] | var_4h = r2;
0x00098d84 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00098d86 ubfx r3, r3, 4, 1 | r3 = (r3 >> 4) & ((1 << 1) - 1);
0x00098d8a str r3, [sp, 8] | var_8h = r3;
0x00098d8c mov r3, r7 | r3 = r7;
0x00098d8e str r2, [sp] | *(sp) = r2;
0x00098d90 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00098d92 bl 0x2f414 | r0 = fcn_0002f414 (r0, r1, r2, r3, r4, r5, r6);
0x00098d96 cmp r0, 0 |
| if (r0 == 0) {
0x00098d98 beq.w 0x98ec0 | goto label_175;
| }
0x00098d9c ldr r6, [sp, 0x90] | r6 = *(arg_0h);
0x00098d9e lsl.w sb, r6, 6 | sb = r6 << 6;
0x00098da2 add.w r3, fp, sb | r3 = fp + sb;
0x00098da6 ldrb.w r2, [r3, 0x2e] | r2 = *((r3 + 0x2e));
0x00098daa lsls r2, r2, 0x1d | r2 <<= 0x1d;
| if (r2 >= r2) {
0x00098dac bpl 0x98e86 | goto label_176;
| }
0x00098dae ldr r5, [r3, 0x34] | r5 = *((r3 + 0x34));
0x00098db0 ldr.w ip, [r5] | ip = *(r5);
0x00098db4 cmp.w ip, 0 |
| if (ip <= 0) {
0x00098db8 ble 0x98e86 | goto label_176;
| }
0x00098dba movs r0, 1 | r0 = 1;
0x00098dbc add.w lr, r7, -1 | lr = r7 + -1;
0x00098dc0 str r6, [sp, 0x10] | var_10h = r6;
| label_45:
0x00098dc2 ldr.w r3, [r5, r0, lsl 3] | offset_1 = r0 << 3;
| r3 = *((r5 + offset_1));
0x00098dc6 mov r1, lr | r1 = lr;
0x00098dc8 subs r6, r3, 1 | r6 = r3 - 1;
| do {
| label_48:
0x00098dca ldrb r3, [r6, 1]! | r3 = *((r6 += 1));
0x00098dce ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x00098dd2 cmp r3, r2 |
| if (r3 == r2) {
0x00098dd4 beq 0x98e44 | goto label_177;
| }
0x00098dd6 add r3, r8 | r3 += r8;
0x00098dd8 add r2, r8 | r2 += r8;
0x00098dda ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x00098dde ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x00098de2 cmp r3, r2 |
0x00098de4 beq 0x98dca |
| } while (r3 == r2);
0x00098de6 cmp ip, r0 |
0x00098de8 add.w r3, r0, 1 | r3 = r0 + 1;
| if (ip == r0) {
0x00098dec beq 0x98e86 | goto label_176;
| }
0x00098dee mov r0, r3 | r0 = r3;
0x00098df0 b 0x98dc2 | goto label_45;
| label_149:
0x00098e00 ldr r1, [pc, 0x2d8] |
0x00098e02 mov r2, r0 | r2 = r0;
0x00098e04 mov r0, r8 | r0 = r8;
0x00098e06 add r1, pc | r1 = 0x131ee6;
0x00098e08 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098e0c b 0x98ac0 | goto label_40;
| label_139:
0x00098e0e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00098e10 ldrsb.w r3, [r2, 0x25] | r3 = *((r2 + 0x25));
0x00098e14 cmp r3, 0 |
| if (r3 < 0) {
0x00098e16 blt.w 0x98f2c | goto label_178;
| }
0x00098e1a ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x00098e1c b 0x986b2 | goto label_46;
| label_172:
0x00098e1e mov r1, r7 | r1 = r7;
0x00098e20 ldr r0, [sp, 0x18] | r0 = x;
0x00098e22 ldr r6, [sp, 0x10] | r6 = var_10h;
0x00098e24 bl 0x41770 | r0 = fcn_00041770 (r0, r1, r2);
0x00098e28 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x00098e2a cbz r0, 0x98e3c |
0x00098e2c ldr r3, [sp, 0x18] | r3 = x;
0x00098e2e mov r1, sl | r1 = sl;
0x00098e30 ldr r4, [r7] | r4 = *(r7);
0x00098e32 ldr r0, [r3] | r0 = *(r3);
0x00098e34 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x00098e38 str.w r0, [r7, r4, lsl 3] | __asm ("str.w r0, [r7, r4, lsl 3]");
| }
0x00098e3c ldr r3, [sp, 0x30] | r3 = var_30h;
0x00098e3e ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
0x00098e42 b 0x98c30 | goto label_47;
| label_177:
0x00098e44 cmp r3, 0 |
| if (r3 != 0) {
0x00098e46 bne 0x98dca | goto label_48;
| }
0x00098e48 mov r2, r4 | r2 = r4;
0x00098e4a ldr r1, [sp, 0x24] | r1 = var_24h;
0x00098e4c ldr r0, [sp, 0x18] | r0 = x;
0x00098e4e add sb, fp | sb += fp;
0x00098e50 ldr r6, [sp, 0x10] | r6 = var_10h;
0x00098e52 bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x00098e56 ldr r5, [sp, 0x94] | r5 = *(arg_94h);
0x00098e58 mov r1, fp | r1 = fp;
0x00098e5a str r0, [sp, 0x24] | var_24h = r0;
0x00098e5c mov r2, r6 | r2 = r6;
0x00098e5e ldr r0, [sp, 0x28] | r0 = var_28h;
0x00098e60 mov r3, r5 | r3 = r5;
0x00098e62 bl 0x399f4 | fcn_000399f4 (r0, r1, r2, r3);
0x00098e66 ldrb.w r3, [sb, 0x2e] | r3 = *((sb + 0x2e));
0x00098e6a mov r4, r0 | r4 = r0;
0x00098e6c lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 >= r3) {
0x00098e6e bpl 0x98d78 | goto label_49;
| }
0x00098e70 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00098e74 adds r5, 1 | r5++;
0x00098e76 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00098e78 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x00098e7c ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00098e7e orr r2, r2, 0x40 | r2 |= 0x40;
0x00098e82 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x00098e84 b 0x98d78 | goto label_49;
| label_176:
0x00098e86 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00098e88 mov r2, r7 | r2 = r7;
0x00098e8a ldr r0, [sp, 0x18] | r0 = x;
0x00098e8c ldr.w sb, [sp, 0x48] | sb = var_48h;
0x00098e90 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_51:
0x00098e94 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00098e96 cmp r3, 0 |
| if (r3 == 0) {
0x00098e98 beq.w 0x98c92 | goto label_50;
| }
0x00098e9c mov r2, r4 | r2 = r4;
0x00098e9e ldr r4, [sp, 0x18] | r4 = x;
0x00098ea0 mov r1, r3 | r1 = r3;
0x00098ea2 mov r0, r4 | r0 = r4;
0x00098ea4 bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x00098ea8 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00098eaa mov r1, r0 | r1 = r0;
0x00098eac movs r3, 0 | r3 = 0;
0x00098eae mov r0, r4 | r0 = r4;
0x00098eb0 bl 0x45650 | r0 = fcn_00045650 (r0, r1, r2, r3);
0x00098eb4 mov r4, r0 | r4 = r0;
0x00098eb6 b 0x98c92 | goto label_50;
| label_148:
0x00098eb8 mov r0, r8 | r0 = r8;
0x00098eba bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098ebe b 0x98ac0 | goto label_40;
| label_175:
0x00098ec0 ldr.w sb, [sp, 0x48] | sb = var_48h;
0x00098ec4 b 0x98e94 | goto label_51;
| label_174:
0x00098ec6 ldr.w fp, [sp, 0x18] | fp = x;
0x00098eca mov r2, r7 | r2 = r7;
0x00098ecc ldr r1, [pc, 0x210] |
0x00098ece mov r0, fp | r0 = fp;
0x00098ed0 add r1, pc | r1 = 0x131fb4;
0x00098ed2 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098ed6 b 0x98ac0 | goto label_40;
| label_165:
0x00098ed8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098eda mov r0, r8 | r0 = r8;
0x00098edc ldr r1, [pc, 0x204] |
0x00098ede ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00098ee0 add r1, pc | r1 = 0x131fc8;
0x00098ee2 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098ee6 b 0x98ac0 | goto label_40;
| label_138:
0x00098ee8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00098eea ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x00098eec cmp r3, 0 |
| if (r3 >= 0) {
0x00098eee blt 0x98f06 |
0x00098ef0 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00098ef2 ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x00098ef4 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00098ef6 cmp r2, r3 |
| if (r2 == r3) {
0x00098ef8 beq 0x98f06 | goto label_179;
| }
0x00098efa ldr r1, [pc, 0x1ec] |
0x00098efc mov r0, r8 | r0 = r8;
0x00098efe ldr r2, [r5] | r2 = *(r5);
0x00098f00 add r1, pc | r1 = 0x131fee;
0x00098f02 bl 0x37f78 | fcn_00037f78 (r0, r1);
| }
| label_179:
0x00098f06 ldr r1, [r5, 0x2c] | r1 = *((r5 + 0x2c));
0x00098f08 movs r2, 0 | r2 = 0;
0x00098f0a ldr r0, [sp, 0x14] | r0 = var_14h;
0x00098f0c bl 0x39f48 | fcn_00039f48 (r0, r1, r2, r3);
0x00098f10 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098f12 mov r1, r0 | r1 = r0;
0x00098f14 str r0, [r3, 0x14] | *((r3 + 0x14)) = r0;
0x00098f16 b.w 0x986b2 | goto label_46;
| label_173:
0x00098f1a ldr.w r2, [fp] | r2 = *(fp);
0x00098f1e b 0x98b7e | goto label_52;
| label_150:
0x00098f20 movs r0, 0x40 | r0 = 0x40;
0x00098f22 movs r1, 0 | r1 = 0;
0x00098f24 bl 0x28c3c | fcn_00028c3c (r0);
0x00098f28 str r0, [sp, 0x18] | x = r0;
0x00098f2a b 0x98876 | goto label_53;
| label_178:
0x00098f2c ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x00098f2e cmp r3, 0 |
| if (r3 == 0) {
0x00098f30 beq.w 0x986ae | goto label_54;
| }
0x00098f34 ldrb r2, [r3, 0x11] | r2 = *((r3 + 0x11));
0x00098f36 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00098f38 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00098f3a ubfx r3, r3, 7, 1 | r3 = (r3 >> 7) & ((1 << 1) - 1);
0x00098f3e cmp r2, r3 |
| if (r2 < r3) {
0x00098f40 bls.w 0x986ae | goto label_54;
| }
0x00098f44 ldr r1, [pc, 0x1a4] |
0x00098f46 mov r0, r8 | r0 = r8;
0x00098f48 ldr r2, [r5] | r2 = *(r5);
0x00098f4a add r1, pc | r1 = 0x13203a;
0x00098f4c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098f50 b.w 0x986ae | goto label_54;
| label_151:
0x00098f54 cmp r4, 0 |
| if (r4 == 0) {
0x00098f56 beq.w 0x9907a | goto label_180;
| }
0x00098f5a mov r0, r4 | r0 = r4;
0x00098f5c movs r2, 0x14 | r2 = 0x14;
0x00098f5e movs r3, 0 | r3 = 0;
0x00098f60 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00098f64 mov r7, r0 | r7 = r0;
| if (r7 == 0) {
| label_61:
0x00098f66 cbz r7, 0x98fba | goto label_181;
| }
0x00098f68 movs r3, 0 | r3 = 0;
0x00098f6a str r3, [r7] | *(r7) = r3;
0x00098f6c str r3, [r7, 4] | *((r7 + 4)) = r3;
0x00098f6e str r3, [r7, 8] | *((r7 + 8)) = r3;
0x00098f70 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x00098f72 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x00098f74 ldr.w r0, [r8] | r0 = *(r8);
0x00098f78 str.w r7, [sb, 0x1c] | __asm ("str.w r7, [sb, 0x1c]");
| if (r0 == 0) {
0x00098f7c cbz r0, 0x98fb0 | goto label_182;
| }
0x00098f7e movs r2, 0xc | r2 = 0xc;
0x00098f80 movs r3, 0 | r3 = 0;
0x00098f82 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
| if (r0 == 0) {
| do {
0x00098f86 cbz r0, 0x98fca | goto label_183;
| }
0x00098f88 ldr.w r1, [r8, 0x80] | r1 = *((r8 + 0x80));
0x00098f8c ldrb.w r2, [sb, 0x20] | r2 = *((sb + 0x20));
0x00098f90 str r1, [r0] | *(r0) = r1;
0x00098f92 ldr r1, [pc, 0x15c] |
0x00098f94 str.w r0, [r8, 0x80] | __asm ("str.w r0, [r8, 0x80]");
0x00098f98 str r7, [r0, 4] | *((r0 + 4)) = r7;
0x00098f9a add r1, pc | r1 = 0x132090;
0x00098f9c str r1, [r0, 8] | *((r0 + 8)) = r1;
0x00098f9e strb r2, [r7, 0x12] | *((r7 + 0x12)) = r2;
0x00098fa0 b 0x9889a | goto label_55;
| label_158:
0x00098fa2 ldr r1, [pc, 0x150] |
0x00098fa4 mov r0, r8 | r0 = r8;
0x00098fa6 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00098fa8 add r1, pc | r1 = 0x1320a2;
0x00098faa bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098fae b 0x98ac0 | goto label_40;
| label_182:
0x00098fb0 movs r1, 0 | r1 = 0;
0x00098fb2 movs r0, 0xc | r0 = 0xc;
0x00098fb4 bl 0x28c3c | fcn_00028c3c (r0);
0x00098fb8 b 0x98f86 |
| } while (1);
| label_181:
0x00098fba mov r6, r4 | r6 = r4;
0x00098fbc str.w r7, [sb, 0x1c] | __asm ("str.w r7, [sb, 0x1c]");
| do {
0x00098fc0 ldr r1, [sp, 0x18] | r1 = x;
0x00098fc2 mov r0, r6 | r0 = r6;
0x00098fc4 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x00098fc6 ldrh.w lr, [lr, 0x57a] |
| label_183:
0x00098fca ldr.w r0, [r8] | r0 = *(r8);
0x00098fce mov r1, r7 | r1 = r7;
0x00098fd0 mov r6, r4 | r6 = r4;
0x00098fd2 bl 0x3336c | fcn_0003336c (r0, r1);
0x00098fd6 b 0x98fc0 |
| } while (1);
| label_152:
0x00098fd8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00098fda mov r0, r8 | r0 = r8;
0x00098fdc ldr r1, [pc, 0x118] |
0x00098fde ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x00098fe0 add r1, pc | r1 = 0x1320dc;
0x00098fe2 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098fe6 b 0x98ac0 | goto label_40;
| label_171:
0x00099004 ldr r3, [sp, 0x18] | r3 = x;
0x00099006 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00099008 cmp r1, 0 |
| if (r1 == 0) {
0x0009900a beq.w 0x98b7c | goto label_56;
| }
0x0009900e b 0x98ac0 | goto label_40;
| label_170:
0x00099010 ldr.w fp, [sp, 0x18] | fp = x;
0x00099014 movs r2, 0 | r2 = 0;
0x00099016 ldr r1, [pc, 0xe4] |
0x00099018 mov r0, fp | r0 = fp;
0x0009901a add r1, pc | r1 = 0x13211c;
0x0009901c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00099020 b 0x98ac0 | goto label_40;
| label_162:
0x00099028 mov r1, r3 | r1 = r3;
0x0009902a b 0x98a8c | goto label_57;
| label_164:
0x0009902c ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00099030 lsls r0, r3, 0x12 | r0 = r3 << 0x12;
| if (r0 >= r3) {
0x00099032 bpl 0x99074 | goto label_184;
| }
0x00099034 ldr r2, [pc, 0xc8] |
0x00099036 add r2, pc | r2 = 0x13213a;
| label_60:
0x00099038 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009903a mov r1, sb | r1 = sb;
0x0009903c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009903e add r3, r5 | r3 += r5;
0x00099040 add.w r3, fp, r3, lsl 3 | r3 = fp + (r3 << 3);
0x00099044 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x00099046 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
0x0009904a b 0x98aa2 | goto label_58;
| label_160:
0x0009904c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009904e mov r1, sb | r1 = sb;
0x00099050 bl 0x35ff0 | r0 = fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
0x00099054 cmp r0, 0 |
| if (r0 == 0) {
0x00099056 beq.w 0x98a60 | goto label_59;
| }
| label_161:
0x0009905a str.w r7, [r8, 0x108] | __asm ("str.w r7, [r8, 0x108]");
0x0009905e b 0x98ac0 | goto label_40;
| label_163:
0x00099060 ldr r1, [pc, 0xa0] |
0x00099062 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00099064 str r0, [sp] | *(sp) = r0;
0x00099066 mov r0, r8 | r0 = r8;
0x00099068 add r1, pc | r1 = 0x132170;
0x0009906a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009906e str.w r7, [r8, 0x108] | __asm ("str.w r7, [r8, 0x108]");
0x00099072 b 0x98ac0 | goto label_40;
| label_184:
0x00099074 ldr r2, [pc, 0x90] |
0x00099076 add r2, pc | r2 = 0x132182;
0x00099078 b 0x99038 | goto label_60;
| label_180:
0x0009907a movs r0, 0x14 | r0 = 0x14;
0x0009907c movs r1, 0 | r1 = 0;
0x0009907e bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x00099082 mov r7, r0 | r7 = r0;
0x00099084 b 0x98f66 | goto label_61;
| label_155:
0x00099086 and r7, r6, 0x2000 | r7 = r6 & 0x2000;
0x0009908a b 0x98a0e | goto label_62;
| label_154:
0x0009908c str.w sb, [sp, 0x2c] | __asm ("str.w sb, [var_2ch]");
0x00099090 b 0x98a26 | goto label_63;
| label_169:
0x00099092 ldr.w fp, [sp, 0x18] | fp = x;
0x00099096 ldrd r7, r4, [sp, 0x5c] | __asm ("ldrd r7, r4, [var_5ch]");
| label_166:
0x0009909a ldr.w ip, [r7] | ip = *(r7);
0x0009909e cmp.w ip, 0 |
0x000990a2 itttt gt |
| if (ip <= 0) {
0x000990a4 movgt r8, 0 | r8 = 0;
| }
| if (ip <= 0) {
0x000990a8 movgt r5, r7 | r5 = r7;
| }
| if (ip <= 0) {
0x000990aa movgt r1, r7 | r1 = r7;
| }
| if (ip > 0) {
0x000990ac mov r3, r8 | r3 = r8;
| }
| if (ip > 0) {
0x000990ae bgt 0x9911e | goto label_185;
| }
0x000990b0 b 0x99718 | goto label_186;
| do {
| label_64:
0x0009910c ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0009910e adds r3, 1 | r3++;
0x00099110 cmp r3, ip |
0x00099112 add.w r1, r1, 0x10 | r1 += 0x10;
0x00099116 orr.w r8, r8, r2 | r8 |= r2;
| if (r3 == ip) {
0x0009911a beq.w 0x996e0 | goto label_187;
| }
| label_185:
0x0009911e ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00099120 ldrb r0, [r2] | r0 = *(r2);
0x00099122 cmp r0, 0xb4 |
| if (r0 == 0xb4) {
0x00099124 beq 0x99132 | goto label_188;
| }
0x00099126 cmp r0, 0x8d |
0x00099128 bne 0x9910c |
| } while (r0 != 0x8d);
0x0009912a ldr r0, [r2, 0x10] | r0 = *((r2 + 0x10));
0x0009912c ldrb r0, [r0] | r0 = *(r0);
0x0009912e cmp r0, 0xb4 |
| if (r0 != 0xb4) {
0x00099130 bne 0x9910c | goto label_64;
| }
| label_188:
0x00099132 cmp ip, r3 |
| if (ip <= r3) {
0x00099134 ble.w 0x996e0 | goto label_187;
| }
0x00099138 ldr.w r3, [fp] | r3 = *(fp);
0x0009913c movs r6, 0 | r6 = 0;
0x0009913e ldr.w sb, [pc, 0x5f4] |
0x00099142 str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
0x00099146 mov fp, r6 |
0x00099148 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009914a add sb, pc | sb = 0x132884;
0x0009914c mov sl, sb | sl = sb;
0x0009914e mov sb, r4 | sb = r4;
0x00099150 and r3, r3, 0x44 | r3 &= 0x44;
0x00099154 mov r4, r6 | r4 = r6;
0x00099156 str r3, [sp, 0x44] | var_44h = r3;
0x00099158 ldr.w r3, [pc, 0x5dc] |
0x0009915c add r3, pc | r3 = 0x132898;
0x0009915e str r3, [sp, 0x78] | var_78h = r3;
0x00099160 b 0x991a6 | goto label_189;
| label_66:
0x00099162 cmp r3, 0x8d |
| if (r3 == 0x8d) {
0x00099164 bne 0x9916e |
0x00099166 ldrb r3, [r2] | r3 = *(r2);
0x00099168 cmp r3, 0xb4 |
| if (r3 == 0xb4) {
0x0009916a beq.w 0x996cc | goto label_190;
| }
| }
0x0009916e mov r1, fp | r1 = fp;
0x00099170 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00099172 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00099174 bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
0x00099178 mov fp, r0 |
| if (r0 != 0) {
0x0009917a cbz r0, 0x99196 |
0x0009917c ldr r3, [r0] | r3 = *(r0);
0x0009917e movs r0, 0 | r0 = 0;
0x00099180 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00099182 add.w r1, fp, r3, lsl 4 | r1 = fp + (r3 << 4);
0x00099186 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x00099188 str r2, [r1, -0x4] | *((r1 - 0x4)) = r2;
0x0009918c ldrb r2, [r5, 0x11] | r2 = *((r5 + 0x11));
0x0009918e bfi r3, r2, 0, 2 | value_2 = BIT_MASK (0, 2);
| value_3 = r2 & value_2;
| value_2 = ~value_2;
| r3 &= value_2;
| r3 |= value_3;
0x00099192 strb r3, [r1, 1] | *((r1 + 1)) = r3;
0x00099194 str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
| }
0x00099196 movs r3, 0 | r3 = 0;
0x00099198 str r3, [r5, 8] | *((r5 + 8)) = r3;
| label_68:
0x0009919a ldr r3, [r7] | r3 = *(r7);
0x0009919c adds r4, 1 | r4++;
0x0009919e adds r5, 0x10 | r5 += 0x10;
0x000991a0 cmp r3, r4 |
| if (r3 <= r4) {
0x000991a2 ble.w 0x986e2 | goto label_65;
| }
| label_189:
0x000991a6 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000991a8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000991aa str r2, [sp, 0x4c] | var_4ch = r2;
0x000991ac orr.w r8, r8, r3 | r8 |= r3;
0x000991b0 ldrb r3, [r2] | r3 = *(r2);
0x000991b2 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000991b4 cmp r3, 0xb4 |
| if (r3 != 0xb4) {
0x000991b6 bne 0x99162 | goto label_66;
| }
0x000991b8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000991ba ldr r6, [r3] | r6 = *(r3);
0x000991bc cmp r6, 0 |
0x000991be itt gt |
| if (r6 <= 0) {
0x000991c0 movgt r3, 0 | r3 = 0;
| }
| if (r6 <= 0) {
0x000991c2 strgt r3, [sp, 0x40] | var_40h = r3;
| }
| if (r6 <= 0) {
0x000991c4 ble.w 0x996ea | goto label_191;
| }
| label_93:
0x000991c8 ldr.w r3, [pc, 0x570] |
0x000991cc mov.w lr, 1 | lr = 1;
0x000991d0 ldr.w ip, [sp, 0x64] | ip = var_64h;
0x000991d4 mov r1, r6 | r1 = r6;
0x000991d6 str r4, [sp, 0x84] | var_84h = r4;
0x000991d8 mov r4, lr | r4 = lr;
0x000991da add r3, pc | r3 = 0x13291a;
0x000991dc strd r7, r8, [sp, 0x7c] | __asm ("strd r7, r8, [var_7ch]");
0x000991e0 str r3, [sp, 0x74] | var_74h = r3;
0x000991e2 movs r3, 0 | r3 = 0;
0x000991e4 str r3, [sp, 0x34] | var_34h = r3;
0x000991e6 mov r3, ip | r3 = ip;
0x000991e8 str r5, [sp, 0x88] | var_88h = r5;
| label_67:
0x000991ea ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000991ec ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x000991ee str r2, [sp, 0x2c] | var_2ch = r2;
0x000991f0 str r0, [sp, 0x24] | var_24h = r0;
0x000991f2 cmp r2, 0 |
| if (r2 == 0) {
0x000991f4 beq.w 0x9960a | goto label_192;
| }
| label_90:
0x000991f8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000991fa ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
| if (r2 != 0) {
0x000991fe cbnz r2, 0x99244 | goto label_193;
| }
0x00099200 ldrb.w r0, [r3, 0x26] | r0 = *((r3 + 0x26));
0x00099204 lsls r0, r0, 0x1a | r0 <<= 0x1a;
| if (r0 < r0) {
0x00099206 bmi.w 0x99624 | goto label_194;
| }
0x0009920a ldr r2, [sp, 0x40] | r2 = var_40h;
| if (r2 == 0) {
0x0009920c cbz r2, 0x9926c | goto label_195;
| }
0x0009920e ldr.w r7, [pc, 0x530] |
0x00099212 subs r6, r2, 1 | r6 = r2 - 1;
0x00099214 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00099216 add r7, pc | r7 = 0x13295c;
0x00099218 subs r5, r2, 1 | r5 = r2 - 1;
| do {
| label_69:
0x0009921a ldrb r2, [r6, 1]! | r2 = *((r6 += 1));
0x0009921e ldrb r0, [r5, 1]! | r0 = *((r5 += 1));
0x00099222 cmp r2, r0 |
| if (r2 == r0) {
0x00099224 beq 0x99268 | goto label_196;
| }
0x00099226 add r2, r7 | r2 += r7;
0x00099228 add r0, r7 | r0 += r7;
0x0009922a ldrb.w ip, [r2, 0x140] | ip = *((r2 + 0x140));
0x0009922e ldrb.w r2, [r0, 0x140] | r2 = *((r0 + 0x140));
0x00099232 cmp ip, r2 |
0x00099234 beq 0x9921a |
| } while (ip == r2);
0x00099236 mov r6, r4 | r6 = r4;
| label_82:
0x00099238 cmp r1, r6 |
0x0009923a add.w r3, r3, 0x40 | r3 += 0x40;
0x0009923e add.w r4, r4, 1 | r4++;
| if (r1 > r6) {
0x00099242 bgt 0x991ea | goto label_67;
| }
| label_193:
0x00099244 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00099246 ldrd r7, r8, [sp, 0x7c] | __asm ("ldrd r7, r8, [var_7ch]");
0x0009924a ldrd r4, r5, [sp, 0x84] | __asm ("ldrd r4, r5, [var_84h]");
0x0009924e cmp r3, 0 |
| if (r3 != 0) {
0x00099250 bne 0x9919a | goto label_68;
| }
| label_94:
0x00099252 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00099254 cmp r2, 0 |
| if (r2 == 0) {
0x00099256 beq.w 0x996ea | goto label_191;
| }
0x0009925a ldr.w r1, [pc, 0x4e8] |
0x0009925e ldr r0, [sp, 0x10] | r0 = var_10h;
0x00099260 add r1, pc | r1 = 0x1329aa;
0x00099262 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00099266 b 0x9919a | goto label_68;
| label_196:
0x00099268 cmp r2, 0 |
| if (r2 != 0) {
0x0009926a bne 0x9921a | goto label_69;
| }
| label_195:
0x0009926c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009926e ldr.w lr, [r2, 0x3c] |
0x00099272 cmp.w lr, 0 |
| if (lr == 0) {
0x00099276 beq.w 0x996f6 | goto label_197;
| }
0x0009927a ldr r2, [sp, 0x14] | r2 = var_14h;
0x0009927c ldr r0, [r2, 0x10] | r0 = *((r2 + 0x10));
0x0009927e ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00099280 cmp lr, r2 |
| if (lr == r2) {
0x00099282 beq 0x99294 | goto label_198;
| }
0x00099284 adds r0, 0x10 | r0 += 0x10;
| do {
0x00099286 mov r5, r0 | r5 = r0;
0x00099288 adds r0, 0x10 | r0 += 0x10;
0x0009928a ldr r2, [r0, -0x4] | r2 = *((r0 - 0x4));
0x0009928e cmp lr, r2 |
0x00099290 bne 0x99286 |
| } while (lr != r2);
0x00099292 mov r0, r5 | r0 = r5;
| label_198:
0x00099294 ldr r2, [r0] | r2 = *(r0);
0x00099296 mov.w lr, 0 | lr = 0;
0x0009929a str r2, [sp, 0x3c] | var_3ch = r2;
| label_91:
0x0009929c cmp r4, r1 |
0x0009929e mov r6, r4 | r6 = r4;
| if (r4 >= r1) {
0x000992a0 bge.w 0x9956a | goto label_199;
| }
0x000992a4 ldrb.w r2, [r3, 0x66] | r2 = *((r3 + 0x66));
0x000992a8 ands r2, r2, 4 | r2 &= 4;
| if (r2 == r2) {
0x000992ac beq.w 0x9956a | goto label_199;
| }
0x000992b0 ldr r2, [sp, 0x58] | r2 = var_58h;
0x000992b2 ands r2, r2, 0x800 | r2 &= 0x800;
0x000992b6 it eq |
| if (r2 != r2) {
0x000992b8 moveq r1, r2 | r1 = r2;
| }
| if (r2 != r2) {
0x000992ba bne.w 0x99640 | goto label_200;
| }
| label_81:
0x000992be ldr r2, [sp, 0x24] | r2 = var_24h;
0x000992c0 ldrsh.w r2, [r2, 0x22] | r2 = *((r2 + 0x22));
0x000992c4 cmp r2, 0 |
| if (r2 <= 0) {
0x000992c6 ble.w 0x9957a | goto label_201;
| }
0x000992ca subs r5, r4, 1 | r5 = r4 - 1;
0x000992cc ldr r0, [sp, 0x58] | r0 = var_58h;
0x000992ce str r5, [sp, 0x48] | var_48h = r5;
0x000992d0 mov.w r8, 0 | r8 = 0;
0x000992d4 ldr r5, [sp, 0x40] | r5 = var_40h;
0x000992d6 and r0, r0, 0x800 | r0 &= 0x800;
0x000992da str r6, [sp, 0x68] | var_68h = r6;
0x000992dc str r0, [sp, 0x38] | var_38h = r0;
0x000992de mov r6, fp | r6 = fp;
0x000992e0 cmp.w lr, 0 |
0x000992e4 it ne |
| if (lr != 0) {
0x000992e6 cmpne r5, 0 | __asm ("cmpne r5, 0");
| }
0x000992e8 orr.w r0, r5, r0 | r0 = r5 | r0;
0x000992ec ite ne |
| if (lr == 0) {
0x000992ee movne r7, 1 | r7 = 1;
| }
| if (lr != 0) {
0x000992f0 moveq r7, 0 | r7 = 0;
| }
0x000992f2 str r7, [sp, 0x30] | var_30h = r7;
0x000992f4 str.w lr, [sp, 0x18] | __asm ("str.w lr, [x]");
0x000992f8 ldr r7, [sp, 0x34] | r7 = var_34h;
0x000992fa str r0, [sp, 0x50] | var_50h = r0;
0x000992fc str.w lr, [sp, 0x54] | __asm ("str.w lr, [var_54h]");
0x00099300 str r1, [sp, 0x8c] | var_8ch = r1;
0x00099302 str r3, [sp, 0x28] | var_28h = r3;
0x00099304 strd r4, sb, [sp, 0x6c] | __asm ("strd r4, sb, [var_6ch]");
0x00099308 b 0x9942a |
| while (r5 < r3) {
0x0009930a ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009930c cmp r3, 0 |
| if (r3 == 0) {
0x0009930e beq.w 0x994d2 | goto label_202;
| }
| label_70:
0x00099312 mov r0, fp | r0 = fp;
0x00099314 str.w fp, [sp, 0x94] | __asm ("str.w fp, [arg_94h]");
0x00099318 cmp.w fp, 0 |
| if (fp != 0) {
0x0009931c beq 0x99326 |
0x0009931e blx 0x65dc | r0 = strcmp (r0, r1);
0x00099322 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00099326 add r5, sp, 0x94 | r5 += arg_94h;
0x00099328 movs r3, 0 | r3 = 0;
0x0009932a str r0, [sp, 0x98] | *(arg_98h) = r0;
0x0009932c mov r2, r5 | r2 = r5;
0x0009932e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00099330 movs r1, 0x3b | r1 = 0x3b;
0x00099332 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00099336 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00099338 mov r4, r0 | r4 = r0;
0x0009933a ldr r3, [r3] | r3 = *(r3);
0x0009933c cmp r3, 1 |
| if (r3 <= 1) {
0x0009933e ble.w 0x994ba | goto label_203;
| }
0x00099342 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00099344 ldrb.w r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x00099348 lsls r0, r2, 0x19 | r0 = r2 << 0x19;
| if (r0 < r2) {
0x0009934a bpl 0x99354 |
0x0009934c ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009934e cmp r2, 0 |
| if (r2 == 0) {
0x00099350 beq.w 0x99580 | goto label_204;
| }
| }
| label_83:
0x00099354 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00099356 str r0, [sp, 0x94] | *(arg_94h) = r0;
0x00099358 cmp r0, 0 |
| if (r0 == 0) {
0x0009935a beq.w 0x994ce | goto label_205;
| }
| label_75:
0x0009935e blx 0x65dc | r0 = strcmp (r0, r1);
0x00099362 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| label_76:
0x00099366 movs r3, 0 | r3 = 0;
0x00099368 mov r2, r5 | r2 = r5;
0x0009936a movs r1, 0x3b | r1 = 0x3b;
0x0009936c str r0, [sp, 0x98] | *(arg_98h) = r0;
0x0009936e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00099370 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00099374 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x00099378 mov r3, r4 | r3 = r4;
0x0009937a mov r2, r0 | r2 = r0;
0x0009937c mov r7, r0 | r7 = r0;
0x0009937e movs r1, 0x8d | r1 = 0x8d;
0x00099380 mov r0, sb | r0 = sb;
0x00099382 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x00099386 ldrb.w r3, [sb, 0xd0] | r3 = *((sb + 0xd0));
0x0009938a mov r4, r0 | r4 = r0;
0x0009938c cmp r3, 1 |
| if (r3 >= 1) {
0x0009938e bls 0x9939a |
0x00099390 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00099392 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00099394 cmp r1, 0 |
| if (r1 != 0) {
0x00099396 bne.w 0x994ee | goto label_206;
| }
| }
| label_79:
0x0009939a ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r3 != 0) {
0x0009939c cbz r3, 0x993c6 |
0x0009939e mov r0, r3 | r0 = r3;
0x000993a0 str r3, [sp, 0x94] | *(arg_94h) = r3;
0x000993a2 blx 0x65dc | r0 = strcmp (r0, r1);
0x000993a6 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x000993aa mov r2, r5 | r2 = r5;
0x000993ac movs r1, 0x3b | r1 = 0x3b;
0x000993ae movs r3, 0 | r3 = 0;
0x000993b0 str r0, [sp, 0x98] | *(arg_98h) = r0;
0x000993b2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000993b4 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000993b8 mov r3, r4 | r3 = r4;
0x000993ba mov r2, r0 | r2 = r0;
0x000993bc movs r1, 0x8d | r1 = 0x8d;
0x000993be ldr r0, [sp, 0x10] | r0 = var_10h;
0x000993c0 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x000993c4 mov r4, r0 | r4 = r0;
| }
| label_74:
0x000993c6 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000993c8 mov r1, r6 | r1 = r6;
0x000993ca mov r2, r4 | r2 = r4;
0x000993cc mov r0, r5 | r0 = r5;
0x000993ce bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x000993d0 vmax.u8 d4, d13, d6 | __asm ("vmax.u8 d4, d13, d6");
0x000993d4 cmp r0, 0 |
| if (r0 == 0) {
0x000993d6 beq.w 0x99610 | goto label_207;
| }
0x000993da ldr r3, [sp, 0x38] | r3 = var_38h;
0x000993dc ldr r4, [r0] | r4 = *(r0);
0x000993de subs r4, 1 | r4--;
| if (r3 != 0) {
0x000993e0 cbz r3, 0x993ec |
0x000993e2 ldrb.w r3, [r5, 0xd0] | r3 = *((r5 + 0xd0));
0x000993e6 cmp r3, 1 |
| if (r3 < 1) {
0x000993e8 bls.w 0x99508 | goto label_208;
| }
| }
0x000993ec ldr r3, [sp, 0x44] | r3 = var_44h;
0x000993ee cmp r3, 4 |
| if (r3 == 4) {
0x000993f0 beq 0x994e0 | goto label_209;
| }
0x000993f2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000993f4 mov r1, fp | r1 = fp;
0x000993f6 bl 0x392f0 | fcn_000392f0 (r0, r1);
| label_78:
0x000993fa adds r3, r4, 1 | r3 = r4 + 1;
0x000993fc add.w r4, r6, r4, lsl 4 | r4 = r6 + (r4 << 4);
0x00099400 add.w r3, r6, r3, lsl 4 | r3 = r6 + (r3 << 4);
0x00099404 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x00099406 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00099408 bfc r2, 0, 2 | value_4 = BIT_MASK (2, );
| value_4 = ~value_4;
| r2 &= value_4;
0x0009940c strb r2, [r3, 1] | *((r3 + 1)) = r2;
| label_71:
0x0009940e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00099410 add.w r5, r8, 1 | r5 = r8 + 1;
0x00099414 movs r7, 1 | r7 = 1;
0x00099416 ldrsh.w r2, [r3, 0x22] | r2 = *((r3 + 0x22));
| label_72:
0x0009941a ldr r3, [sp, 0x18] | r3 = x;
0x0009941c cmp r2, r5 |
0x0009941e mov r8, r5 | r8 = r5;
0x00099420 add.w r3, r3, 0x10 | r3 += 0x10;
0x00099424 str r3, [sp, 0x18] | x = r3;
| if (r2 <= r5) {
0x00099426 ble.w 0x9956e | goto label_210;
| }
0x0009942a ldr r1, [sp, 0x24] | r1 = var_24h;
0x0009942c add.w r3, r8, r8, lsl 1 | r3 = r8 + (r8 << 1);
0x00099430 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00099432 lsls r1, r3, 2 | r1 = r3 << 2;
0x00099434 str r1, [sp, 0x34] | var_34h = r1;
0x00099436 ldr.w fp, [r4, r3, lsl 2] | offset_5 = r3 << 2;
| fp = *((r4 + offset_5));
0x0009943a add r4, r1 | r4 += r1;
0x0009943c ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x0009943e cbnz r3, 0x99482 | goto label_211;
| }
| label_73:
0x00099440 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00099442 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x00099444 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00099446 lsls r1, r2, 0xe | r1 = r2 << 0xe;
| if (r1 >= r2) {
0x00099448 bmi 0x9944e |
0x0009944a lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 < r3) {
0x0009944c bmi 0x994da | goto label_212;
| }
| }
0x0009944e lsls r5, r3, 0x15 | r5 = r3 << 0x15;
0x00099450 bmi.w 0x9930a |
| }
0x00099454 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00099456 cmp r3, 0 |
| if (r3 == 0) {
0x00099458 beq.w 0x99312 | goto label_70;
| }
0x0009945c ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009945e cmp r3, 0 |
| if (r3 != 0) {
0x00099460 bne.w 0x99312 | goto label_70;
| }
0x00099464 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00099466 ldrb.w r3, [r3, 0x26] | r3 = *((r3 + 0x26));
0x0009946a lsls r4, r3, 0x1d | r4 = r3 << 0x1d;
| if (r4 >= r3) {
0x0009946c bpl.w 0x99312 | goto label_70;
| }
0x00099470 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00099472 mov r1, fp | r1 = fp;
0x00099474 ldr r0, [r3, 0x2c] | r0 = *((r3 + 0x2c));
0x00099476 bl 0x2d990 | r0 = fcn_0002d990 (r0, r1);
0x0009947a cmp r0, 0 |
| if (r0 < 0) {
0x0009947c blt.w 0x99312 | goto label_70;
| }
0x00099480 b 0x9940e | goto label_71;
| label_211:
0x00099482 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00099484 add.w r5, r8, 1 | r5 = r8 + 1;
0x00099488 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x0009948c ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0009948e and r3, r3, 3 | r3 &= 3;
0x00099492 cmp r3, 2 |
| if (r3 != 2) {
0x00099494 bne 0x9941a | goto label_72;
| }
0x00099496 ldr r2, [sp, 0x18] | r2 = x;
0x00099498 movs r3, 0 | r3 = 0;
0x0009949a mov r1, r3 | r1 = r3;
0x0009949c ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0009949e ldr r2, [sp, 0x40] | r2 = var_40h;
0x000994a0 bl 0x35314 | r0 = fcn_00035314 (r0, r1, r2, r3);
0x000994a4 cmp r0, 0 |
| if (r0 != 0) {
0x000994a6 bne 0x99440 | goto label_73;
| }
| label_77:
0x000994a8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000994aa ldrsh.w r2, [r3, 0x22] | r2 = *((r3 + 0x22));
0x000994ae b 0x9941a | goto label_72;
| label_84:
0x000994b0 cmp r1, 0 |
| if (r1 != 0) {
0x000994b2 bne.w 0x995c2 | goto label_85;
| }
0x000994b6 mov r4, r2 | r4 = r2;
0x000994b8 mov r6, r3 | r6 = r3;
| label_203:
0x000994ba ldr r3, [sp, 0x10] | r3 = var_10h;
0x000994bc ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000994c0 cmp r3, 1 |
| if (r3 < 1) {
0x000994c2 bls 0x993c6 | goto label_74;
| }
0x000994c4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000994c6 str r0, [sp, 0x94] | *(arg_94h) = r0;
0x000994c8 cmp r0, 0 |
| if (r0 != 0) {
0x000994ca bne.w 0x9935e | goto label_75;
| }
| label_205:
0x000994ce ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000994d0 b 0x99366 | goto label_76;
| label_202:
0x000994d2 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000994d4 cmp r3, 0 |
| if (r3 != 0) {
0x000994d6 bne.w 0x99312 | goto label_70;
| }
| label_212:
0x000994da add.w r5, r8, 1 | r5 = r8 + 1;
0x000994de b 0x994a8 | goto label_77;
| label_209:
0x000994e0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000994e2 mov r3, fp | r3 = fp;
0x000994e4 ldr r1, [sp, 0x78] | r1 = var_78h;
0x000994e6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000994e8 bl 0x4a320 | fcn_0004a320 (r0);
0x000994ec b 0x993fa | goto label_78;
| label_206:
0x000994ee ldr.w r3, [sb, 0x10c] | r3 = *((sb + 0x10c));
| if (r3 != 0) {
0x000994f2 cbnz r3, 0x994fe | goto label_213;
| }
0x000994f4 b 0x9939a | goto label_79;
| label_80:
0x000994f6 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000994f8 cmp r3, 0 |
| if (r3 == 0) {
0x000994fa beq.w 0x9939a | goto label_79;
| }
| label_213:
0x000994fe ldr r2, [r3] | r2 = *(r3);
0x00099500 cmp r1, r2 |
| if (r1 != r2) {
0x00099502 bne 0x994f6 | goto label_80;
| }
0x00099504 str r7, [r3] | *(r3) = r7;
0x00099506 b 0x9939a | goto label_79;
| label_208:
0x00099508 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009950a cmp r3, 0 |
| if (r3 == 0) {
0x0009950c beq.w 0x9962e | goto label_214;
| }
0x00099510 ldr r3, [sp, 0x18] | r3 = x;
0x00099512 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00099514 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00099516 bl 0x392f0 | fcn_000392f0 (r0, r1);
| label_92:
0x0009951a ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009951c adds r5, r4, 1 | r5 = r4 + 1;
0x0009951e add.w r3, r6, r5, lsl 4 | r3 = r6 + (r5 << 4);
0x00099522 add.w r4, r6, r4, lsl 4 | r4 = r6 + (r4 << 4);
0x00099526 ldrb.w r1, [r2, 0x26] | r1 = *((r2 + 0x26));
0x0009952a str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0009952c movs r0, 2 | r0 = 2;
0x0009952e ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00099530 bfi r2, r0, 0, 2 | value_6 = BIT_MASK (0, 2);
| value_7 = r0 & value_6;
| value_6 = ~value_6;
| r2 &= value_6;
| r2 |= value_7;
0x00099534 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x00099536 lsls r2, r1, 0x1d | r2 = r1 << 0x1d;
| if (r2 < r1) {
0x00099538 bmi 0x995fa | goto label_215;
| }
| label_89:
0x0009953a ldr r3, [sp, 0x8c] | r3 = var_8ch;
| if (r3 != 0) {
0x0009953c cbz r3, 0x99558 |
0x0009953e mov r1, fp | r1 = fp;
0x00099540 mov r0, r3 | r0 = r3;
0x00099542 bl 0x2d990 | r0 = fcn_0002d990 (r0, r1);
0x00099546 cmp r0, 0 |
| if (r0 < 0) {
0x00099548 blt 0x99558 | goto label_216;
| }
| label_88:
0x0009954a add.w r5, r6, r5, lsl 4 | r5 = r6 + (r5 << 4);
0x0009954e ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x00099550 orr r3, r3, 1 | r3 |= 1;
0x00099554 strb r3, [r5, 2] | *((r5 + 2)) = r3;
0x00099556 b 0x9940e | goto label_71;
| }
| label_216:
0x00099558 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009955a ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009955c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0009955e add r3, r2 | r3 += r2;
0x00099560 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x00099562 lsls r3, r3, 0x15 | r3 <<= 0x15;
| if (r3 >= r3) {
0x00099564 bpl.w 0x9940e | goto label_71;
| }
| label_199:
0x0009956a movs r1, 0 | r1 = 0;
0x0009956c b 0x992be | goto label_81;
| label_210:
0x0009956e mov fp, r6 |
0x00099570 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00099572 ldr r6, [sp, 0x68] | r6 = var_68h;
0x00099574 ldrd r4, sb, [sp, 0x6c] | __asm ("ldrd r4, sb, [var_6ch]");
0x00099578 str r7, [sp, 0x34] | var_34h = r7;
| label_201:
0x0009957a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0009957c ldr r1, [r2] | r1 = *(r2);
0x0009957e b 0x99238 | goto label_82;
| label_204:
0x00099580 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00099582 subs r3, r3, r2 | r3 -= r2;
0x00099584 subs r7, r3, 1 | r7 = r3 - 1;
0x00099586 cmp r7, 0 |
| if (r7 <= 0) {
0x00099588 ble.w 0x99354 | goto label_83;
| }
0x0009958c ldr.w sb, [sp, 0x28] | sb = var_28h;
0x00099590 add.w lr, fp, -1 | lr = fp + -1;
0x00099594 mov r2, r4 | r2 = r4;
0x00099596 mov r3, r6 | r3 = r6;
| label_87:
0x00099598 ldrb.w r1, [sb, 0x66] | r1 = *((sb + 0x66));
0x0009959c add.w sb, sb, 0x40 | sb += 0x40;
0x000995a0 subs r7, 1 | r7--;
0x000995a2 lsls r1, r1, 0x1d | r1 <<= 0x1d;
| if (r1 >= r1) {
0x000995a4 bpl 0x995f0 | goto label_217;
| }
0x000995a6 ldr.w r4, [sb, 0x2c] | r4 = *((sb + 0x2c));
| if (r4 == 0) {
0x000995aa cbz r4, 0x995f0 | goto label_217;
| }
0x000995ac ldr r6, [r4] | r6 = *(r4);
0x000995ae cmp r6, 0 |
| if (r6 <= 0) {
0x000995b0 ble 0x995f0 | goto label_217;
| }
0x000995b2 movs r0, 1 | r0 = 1;
0x000995b4 strd r7, sb, [sp, 0x5c] | __asm ("strd r7, sb, [var_5ch]");
| label_86:
0x000995b8 ldr.w r1, [r4, r0, lsl 3] | offset_8 = r0 << 3;
| r1 = *((r4 + offset_8));
0x000995bc mov ip, lr |
0x000995be add.w sb, r1, -1 | sb = r1 + -1;
| label_85:
0x000995c2 ldrb r1, [sb, 1]! | r1 = *((sb += 1));
0x000995c6 ldrb r7, [ip, 1]! | r7 = *((ip += 1));
0x000995ca cmp r1, r7 |
| if (r1 == r7) {
0x000995cc beq.w 0x994b0 | goto label_84;
| }
0x000995d0 add r1, sl | r1 += sl;
0x000995d2 add r7, sl | r7 += sl;
0x000995d4 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000995d8 ldrb.w r7, [r7, 0x140] | r7 = *((r7 + 0x140));
0x000995dc cmp r1, r7 |
| if (r1 == r7) {
0x000995de beq 0x995c2 | goto label_85;
| }
0x000995e0 cmp r0, r6 |
0x000995e2 add.w r1, r0, 1 | r1 = r0 + 1;
| if (r0 != r6) {
0x000995e6 beq 0x995ec |
0x000995e8 mov r0, r1 | r0 = r1;
0x000995ea b 0x995b8 | goto label_86;
| }
0x000995ec ldrd r7, sb, [sp, 0x5c] | __asm ("ldrd r7, sb, [var_5ch]");
| label_217:
0x000995f0 cmp r7, 0 |
| if (r7 != 0) {
0x000995f2 bne 0x99598 | goto label_87;
| }
0x000995f4 mov r4, r2 | r4 = r2;
0x000995f6 mov r6, r3 | r6 = r3;
0x000995f8 b 0x99354 | goto label_83;
| label_215:
0x000995fa ldr r3, [sp, 0x28] | r3 = var_28h;
0x000995fc mov r1, fp | r1 = fp;
0x000995fe ldr r0, [r3, 0x2c] | r0 = *((r3 + 0x2c));
0x00099600 bl 0x2d990 | r0 = fcn_0002d990 (r0, r1);
0x00099604 cmp r0, 0 |
| if (r0 >= 0) {
0x00099606 bge 0x9954a | goto label_88;
| }
0x00099608 b 0x9953a | goto label_89;
| label_192:
0x0009960a ldr r2, [r0] | r2 = *(r0);
0x0009960c str r2, [sp, 0x2c] | var_2ch = r2;
0x0009960e b 0x991f8 | goto label_90;
| label_207:
0x00099610 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00099612 mov fp, r0 |
0x00099614 ldr r6, [sp, 0x68] | r6 = var_68h;
0x00099616 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00099618 ldr r1, [r2] | r1 = *(r2);
0x0009961a movs r2, 1 | r2 = 1;
0x0009961c ldrd r4, sb, [sp, 0x6c] | __asm ("ldrd r4, sb, [var_6ch]");
0x00099620 str r2, [sp, 0x34] | var_34h = r2;
0x00099622 b 0x99238 | goto label_82;
| label_194:
0x00099624 str r2, [sp, 0x3c] | var_3ch = r2;
0x00099626 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x00099628 ldr.w lr, [r2, 0x1c] |
0x0009962c b 0x9929c | goto label_91;
| label_214:
0x0009962e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00099630 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00099632 ldr r1, [sp, 0x74] | r1 = var_74h;
0x00099634 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00099636 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009963a bl 0x4a320 | fcn_0004a320 (r0);
0x0009963e b 0x9951a | goto label_92;
| label_200:
0x00099640 ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x00099642 ldr r2, [r1] | r2 = *(r1);
0x00099644 cmp r2, 0 |
| if (r2 <= 0) {
0x00099646 ble.w 0x992be | goto label_81;
| }
0x0009964a ldr r7, [pc, 0xfc] |
0x0009964c movs r5, 1 | r5 = 1;
0x0009964e add.w r8, sp, 0x94 | r8 += arg_94h;
0x00099652 mov r6, r1 | r6 = r1;
0x00099654 str r4, [sp, 0x18] | x = r4;
0x00099656 add r7, pc | r7 = 0x132da4;
0x00099658 str.w lr, [sp, 0x28] | __asm ("str.w lr, [var_28h]");
0x0009965c str r3, [sp, 0x30] | var_30h = r3;
0x0009965e str r4, [sp, 0x38] | var_38h = r4;
0x00099660 b 0x99664 |
| while (r3 > r5) {
0x00099662 mov r5, r2 | r5 = r2;
0x00099664 ldr.w r4, [r6, r5, lsl 3] | offset_9 = r5 << 3;
| r4 = *((r6 + offset_9));
0x00099668 mov r0, r4 | r0 = r4;
0x0009966a str r4, [sp, 0x94] | *(arg_94h) = r4;
| if (r4 != 0) {
0x0009966c cbz r4, 0x99676 |
0x0009966e blx 0x65dc | r0 = strcmp (r0, r1);
0x00099672 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00099676 movs r3, 0 | r3 = 0;
0x00099678 mov r2, r8 | r2 = r8;
0x0009967a movs r1, 0x3b | r1 = 0x3b;
0x0009967c str r0, [sp, 0x98] | *(arg_98h) = r0;
0x0009967e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00099680 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x00099684 mov r1, fp | r1 = fp;
0x00099686 mov r2, r0 | r2 = r0;
0x00099688 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0009968a bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
0x0009968e mov fp, r0 |
| if (r0 != 0) {
0x00099690 cbz r0, 0x996b6 |
0x00099692 mov r2, r4 | r2 = r4;
0x00099694 ldr r4, [r0] | r4 = *(r0);
0x00099696 mov r1, r7 | r1 = r7;
0x00099698 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0009969a bl 0x4a320 | fcn_0004a320 (r0);
0x0009969e subs r3, r4, 1 | r3 = r4 - 1;
0x000996a0 add.w r3, fp, r3, lsl 4 | r3 = fp + (r3 << 4);
0x000996a4 add.w r4, fp, r4, lsl 4 | r4 = fp + (r4 << 4);
0x000996a8 str r0, [r3, 0xc] | *((r3 + 0xc)) = r0;
0x000996aa ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000996ac and r3, r3, 0x7c | r3 &= 0x7c;
0x000996b0 orn r3, r3, 0x7d | r3 |= 0x7d;
| r3 = ~r3;
0x000996b4 strb r3, [r4, 1] | *((r4 + 1)) = r3;
| }
0x000996b6 ldr r3, [r6] | r3 = *(r6);
0x000996b8 adds r2, r5, 1 | r2 = r5 + 1;
0x000996ba cmp r3, r5 |
0x000996bc bgt 0x99662 |
| }
0x000996be mov r1, r6 | r1 = r6;
0x000996c0 ldr.w lr, [sp, 0x28] | lr = var_28h;
0x000996c4 ldr r6, [sp, 0x18] | r6 = x;
0x000996c6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000996c8 ldr r4, [sp, 0x38] | r4 = var_38h;
0x000996ca b 0x992be | goto label_81;
| label_190:
0x000996cc ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000996ce ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000996d0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000996d2 str r3, [sp, 0x40] | var_40h = r3;
0x000996d4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000996d6 ldr r6, [r3] | r6 = *(r3);
0x000996d8 cmp r6, 0 |
| if (r6 > 0) {
0x000996da bgt.w 0x991c8 | goto label_93;
| }
0x000996de b 0x99252 | goto label_94;
| label_187:
0x000996e0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000996e2 ldr.w sl, [r3, 0x1c] | sl = *((r3 + 0x1c));
0x000996e6 b.w 0x986f8 | goto label_95;
| label_191:
0x000996ea ldr r1, [pc, 0x60] |
0x000996ec ldr r0, [sp, 0x10] | r0 = var_10h;
0x000996ee add r1, pc | r1 = 0x132e40;
0x000996f0 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000996f4 b 0x9919a | goto label_68;
| label_197:
0x000996f6 ldr r2, [pc, 0x58] |
0x000996f8 add r2, pc | r2 = 0x132e4e;
0x000996fa str r2, [sp, 0x3c] | var_3ch = r2;
0x000996fc b 0x9929c | goto label_91;
| label_141:
0x000996fe blx 0x6430 | fcn_00006430 ();
| label_136:
0x00099702 ldr r1, [pc, 0x50] |
0x00099704 ldr r2, [r0] | r2 = *(r0);
0x00099706 mov r0, r8 | r0 = r8;
0x00099708 add r1, pc | r1 = 0x132e62;
0x0009970a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009970e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00099710 movs r3, 0 | r3 = 0;
0x00099712 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00099714 b.w 0x98ac0 | goto label_40;
| label_186:
0x00099718 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0009971a mov.w r8, 0 | r8 = 0;
0x0009971e ldr.w sl, [r3, 0x1c] | sl = *((r3 + 0x1c));
0x00099722 b.w 0x986f8 | goto label_95;
| label_140:
0x00099726 ldr r1, [pc, 0x30] |
0x00099728 mov r0, fp | r0 = fp;
0x0009972a add r1, pc | r1 = 0x132e88;
0x0009972c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00099730 b.w 0x98ac0 | goto label_40;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x97d50 */
| #include <stdint.h>
|
; (fcn) fcn.00097d50 () | void fcn_00097d50 (int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00097d50 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00097d54 mov r8, r2 | r8 = r2;
0x00097d56 ldr.w r2, [pc, 0x4d4] |
0x00097d5a mov sb, r3 | sb = r3;
0x00097d5c sub sp, 0x2c |
0x00097d5e mov r4, r0 | r4 = r0;
0x00097d60 ldr.w r3, [pc, 0x4cc] | r3 = *(0x98230);
0x00097d64 mov r5, r1 | r5 = r1;
0x00097d66 add r2, pc | r2 = 0x12ff98;
0x00097d68 ldr r6, [r0] | r6 = *(r0);
0x00097d6a ldr.w fp, [sp, 0x50] | fp = *(arg_50h);
0x00097d6e ldr r3, [r2, r3] |
0x00097d70 ldr r3, [r3] | r3 = imp.atan;
0x00097d72 str r3, [sp, 0x24] | var_24h = r3;
0x00097d74 mov.w r3, 0 | r3 = 0;
0x00097d78 ldrd sl, r3, [sp, 0x54] | __asm ("ldrd sl, r3, [arg_54h]");
0x00097d7c str r3, [sp, 0x10] | var_10h = r3;
0x00097d7e ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
| if (r3 != 0) {
0x00097d82 cbz r3, 0x97d8e |
0x00097d84 ldr.w r3, [r6, 0xac] | r3 = *((r6 + 0xac));
0x00097d88 cmp r3, 1 |
| if (r3 == 1) {
0x00097d8a beq.w 0x9807e | goto label_16;
| }
| }
0x00097d8e mov r1, r5 | r1 = r5;
0x00097d90 add r3, sp, 0x20 | r3 += var_20h;
0x00097d92 mov r2, r8 | r2 = r8;
0x00097d94 mov r0, r4 | r0 = r4;
0x00097d96 bl 0x43f60 | r0 = fcn_00043f60 (r0, r1, r2, r3);
0x00097d9a subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 < r0) {
0x00097d9c blt.w 0x980a8 | goto label_7;
| }
0x00097da0 cmp.w sb, 0 |
| if (sb != 0) {
0x00097da4 beq 0x97db8 |
0x00097da6 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00097daa cmp r3, 0 |
0x00097dac it ne |
| if (r3 != 0) {
0x00097dae cmpne r7, 1 | __asm ("cmpne r7, 1");
| }
0x00097db0 it eq |
| if (r3 != 0) {
0x00097db2 moveq r7, 1 | r7 = 1;
| }
| if (r3 != 0) {
0x00097db4 bne.w 0x9813c | goto label_17;
| }
| }
0x00097db8 ldr r5, [sp, 0x20] | r5 = var_20h;
0x00097dba mov r0, r6 | r0 = r6;
0x00097dbc mov r1, r5 | r1 = r5;
0x00097dbe bl 0x39394 | fcn_00039394 (r0, r1);
0x00097dc2 ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x00097dc6 mov r8, r0 | r8 = r0;
0x00097dc8 cmp r3, 3 |
0x00097dca it ne |
| if (r3 != 3) {
0x00097dcc cmpne r3, 1 | __asm ("cmpne r3, 1");
| }
| if (r3 > 3) {
0x00097dce bhi.w 0x980c4 | goto label_18;
| }
| label_2:
0x00097dd2 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00097dd6 add.w r3, r4, 0xbc | r3 = r4 + 0xbc;
0x00097dda stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00097dde cmp.w r8, 0 |
| if (r8 == 0) {
0x00097de2 beq.w 0x980a8 | goto label_7;
| }
| label_1:
0x00097de6 cmp.w fp, 0 |
| if (fp != 0) {
0x00097dea bne.w 0x98042 | goto label_19;
| }
0x00097dee ldr.w r2, [pc, 0x444] |
0x00097df2 mov r3, r8 | r3 = r8;
0x00097df4 mov r1, r8 | r1 = r8;
0x00097df6 mov r0, r4 | r0 = r4;
0x00097df8 add r2, pc | r2 = 0x130032;
0x00097dfa bl 0x57278 | r0 = fcn_00057278 (r0, r1, r2, r3);
0x00097dfe cmp r0, 0 |
| if (r0 != 0) {
0x00097e00 bne.w 0x98056 | void (*0x98056)() ();
| }
| label_0:
0x00097e04 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x00097e06 lsls r1, r7, 4 | r1 = r7 << 4;
0x00097e08 ldrb.w r3, [r6, 0xb0] | r3 = *((r6 + 0xb0));
0x00097e0c str r1, [sp, 0x18] | var_18h = r1;
0x00097e0e ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x00097e10 cmp r3, 1 |
0x00097e12 str r2, [sp, 0x14] | var_14h = r2;
| if (r3 == 1) {
0x00097e14 beq.w 0x98160 | goto label_20;
| }
0x00097e18 ldr.w r2, [pc, 0x41c] |
0x00097e1c cmp.w sb, 1 |
0x00097e20 add r2, pc | r2 = 0x13005c;
| if (sb != 1) {
0x00097e22 beq 0x97e2a |
0x00097e24 ldr.w r2, [pc, 0x414] |
0x00097e28 add r2, pc | r2 = 0x130068;
| }
| label_5:
0x00097e2a ldr r3, [sp, 0x14] | r3 = var_14h;
0x00097e2c movs r1, 0x12 | r1 = 0x12;
0x00097e2e mov r0, r4 | r0 = r4;
0x00097e30 str r3, [sp] | *(sp) = r3;
0x00097e32 movs r3, 0 | r3 = 0;
0x00097e34 bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x00097e38 cmp r0, 0 |
| if (r0 != 0) {
0x00097e3a bne.w 0x98056 | void (*0x98056)() ();
| }
0x00097e3e cmp.w sl, 0 |
| if (sl == 0) {
0x00097e42 beq.w 0x98112 | goto label_21;
| }
| label_3:
0x00097e46 ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x00097e4a cmp r3, 0 |
| if (r3 == 0) {
0x00097e4c beq.w 0x980d0 | goto label_22;
| }
| label_8:
0x00097e50 mov r0, r6 | r0 = r6;
0x00097e52 movs r2, 0x40 | r2 = 0x40;
0x00097e54 movs r3, 0 | r3 = 0;
0x00097e56 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00097e5a mov r5, r0 | r5 = r0;
0x00097e5c cmp r0, 0 |
| if (r0 == 0) {
0x00097e5e beq.w 0x98168 | goto label_23;
| }
0x00097e62 movs r2, 0x3c | r2 = 0x3c;
0x00097e64 movs r1, 0 | r1 = 0;
0x00097e66 adds r0, 4 | r0 += 4;
0x00097e68 blx 0x62ec | fcn_000062ec ();
0x00097e6c ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00097e6e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00097e70 str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x00097e74 add r3, r2 | r3 += r2;
0x00097e76 movs r2, 0xc8 | r2 = 0xc8;
0x00097e78 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00097e7a strh r2, [r5, 0x26] | *((r5 + 0x26)) = r2;
0x00097e7c str r3, [r5, 0x3c] | *((r5 + 0x3c)) = r3;
0x00097e7e movw r3, 0xffff | r3 = 0xffff;
0x00097e82 strh r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x00097e84 movs r3, 1 | r3 = 1;
0x00097e86 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00097e88 str.w r5, [r4, 0xec] | __asm ("str.w r5, [r4, 0xec]");
0x00097e8c ldrb.w r2, [r6, 0xb1] | r2 = *((r6 + 0xb1));
0x00097e90 cmp r2, 0 |
| if (r2 != 0) {
0x00097e92 bne.w 0x980a8 | goto label_7;
| }
0x00097e96 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00097e98 str r2, [sp, 0x10] | var_10h = r2;
0x00097e9a cmp r2, 0 |
| if (r2 == 0) {
0x00097e9c beq.w 0x98174 | goto label_24;
| }
| label_6:
0x00097ea0 mov r2, r7 | r2 = r7;
0x00097ea2 movs r1, 1 | r1 = 1;
0x00097ea4 mov r0, r4 | r0 = r4;
0x00097ea6 bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x00097eaa cmp.w sl, 0 |
| if (sl != 0) {
0x00097eae bne.w 0x981f6 | goto label_25;
| }
| label_12:
0x00097eb2 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00097eb4 movs r2, 2 | r2 = 2;
0x00097eb6 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x00097eba movs r1, 0x63 | r1 = 0x63;
0x00097ebc str r2, [sp] | *(sp) = r2;
0x00097ebe mov r2, r7 | r2 = r7;
0x00097ec0 add.w r8, r3, 3 | r8 = r3 + 3;
0x00097ec4 adds r5, r3, 1 | r5 = r3 + 1;
0x00097ec6 adds r3, 2 | r3 += 2;
0x00097ec8 mov r0, sb | r0 = sb;
0x00097eca str r3, [sp, 0x1c] | var_1ch = r3;
0x00097ecc strd r5, r3, [r4, 0x58] | __asm ("strd r5, r3, [r4, 0x58]");
0x00097ed0 mov r3, r8 | r3 = r8;
0x00097ed2 str.w r8, [r4, 0x2c] | __asm ("str.w r8, [r4, 0x2c]");
0x00097ed6 str r5, [sp, 0x14] | var_14h = r5;
0x00097ed8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00097edc ldr.w r2, [sb, 0x98] | r2 = *((sb + 0x98));
0x00097ee0 movs r3, 1 | r3 = 1;
0x00097ee2 lsls r3, r7 | r3 <<= r7;
0x00097ee4 cmp r7, 1 |
0x00097ee6 orr.w r2, r2, r3 | r2 |= r3;
0x00097eea str.w r2, [sb, 0x98] | __asm ("str.w r2, [sb, 0x98]");
| if (r7 != 1) {
0x00097eee beq 0x97f0a |
0x00097ef0 ldr.w r2, [sb] | r2 = *(sb);
0x00097ef4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00097ef6 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00097ef8 add r2, r1 | r2 += r1;
0x00097efa ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00097efc ldrb r2, [r2, 9] | r2 = *((r2 + 9));
| if (r2 == 0) {
0x00097efe cbz r2, 0x97f0a | goto label_26;
| }
0x00097f00 ldr.w r2, [sb, 0x9c] | r2 = *((sb + 0x9c));
0x00097f04 orrs r2, r3 | r2 |= r3;
0x00097f06 str.w r2, [sb, 0x9c] | __asm ("str.w r2, [sb, 0x9c]");
| }
| label_26:
0x00097f0a movs r3, 0 | r3 = 0;
0x00097f0c mov r2, r8 | r2 = r8;
0x00097f0e movs r1, 0xf | r1 = 0xf;
0x00097f10 str r3, [sp] | *(sp) = r3;
0x00097f12 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00097f14 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00097f18 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x00097f1a mov sb, r0 | sb = r0;
0x00097f1c ldr r5, [sp, 0x10] | r5 = var_10h;
0x00097f1e movs r1, 0x64 | r1 = 0x64;
0x00097f20 lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x00097f22 mov r2, r7 | r2 = r7;
0x00097f24 ite mi |
| if (r2 >= r3) {
0x00097f26 movmi r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x00097f28 movpl r3, 4 | r3 = 4;
| }
0x00097f2a str r3, [sp] | *(sp) = r3;
0x00097f2c mov r0, r5 | r0 = r5;
0x00097f2e movs r3, 2 | r3 = 2;
0x00097f30 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00097f34 ldrb.w r3, [r6, 0x54] | r3 = *((r6 + 0x54));
0x00097f38 mov r2, r7 | r2 = r7;
0x00097f3a movs r1, 0x64 | r1 = 0x64;
0x00097f3c mov r0, r5 | r0 = r5;
0x00097f3e str r3, [sp] | *(sp) = r3;
0x00097f40 movs r3, 5 | r3 = 5;
0x00097f42 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00097f46 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00097f48 cmp.w sb, 0 |
0x00097f4c ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00097f4e ldr r3, [r1] | r3 = *(r1);
0x00097f50 it lt |
| if (sb >= 0) {
0x00097f52 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x00097f56 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00097f5a cmp r3, 0 |
| if (r3 != 0) {
0x00097f5c bne.w 0x981bc | goto label_27;
| }
0x00097f60 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x00097f62 add.w sb, sb, sb, lsl 1 | sb += (sb << 1);
0x00097f66 add.w r3, r3, sb, lsl 3 | r3 += (sb << 3);
| label_10:
0x00097f6a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00097f6c orrs.w r3, fp, sl | r3 = fp | sl;
0x00097f70 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 == fp) {
0x00097f72 beq.w 0x981a8 | goto label_28;
| }
0x00097f76 movs r2, 0 | r2 = 0;
0x00097f78 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00097f7a movs r1, 0x47 | r1 = 0x47;
0x00097f7c str r2, [sp] | *(sp) = r2;
0x00097f7e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_9:
0x00097f82 ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x00097f84 cmp r6, 0 |
| if (r6 == 0) {
0x00097f86 beq.w 0x981c4 | goto label_29;
| }
| label_11:
0x00097f8a cmp r7, 1 |
| if (r7 != 1) {
0x00097f8c beq 0x97fae |
0x00097f8e ldr r3, [r4] | r3 = *(r4);
0x00097f90 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00097f92 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00097f94 add r3, r2 | r3 += r2;
0x00097f96 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00097f98 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x00097f9a cbz r3, 0x97fae | goto label_30;
| }
0x00097f9c ldr r3, [pc, 0x2a0] |
0x00097f9e mov r1, r7 | r1 = r7;
0x00097fa0 mov r0, r4 | r0 = r4;
0x00097fa2 add r3, pc | r3 = 0x1301e6;
0x00097fa4 str r3, [sp] | *(sp) = r3;
0x00097fa6 movs r3, 1 | r3 = 1;
0x00097fa8 mov r2, r3 | r2 = r3;
0x00097faa bl 0x42ffc | fcn_00042ffc (r0, r1, r2, r3, r4);
| }
| label_30:
0x00097fae movs r3, 5 | r3 = 5;
0x00097fb0 mov r0, r6 | r0 = r6;
0x00097fb2 str r3, [sp, 4] | var_4h = r3;
0x00097fb4 movs r2, 0 | r2 = 0;
0x00097fb6 movs r3, 1 | r3 = 1;
0x00097fb8 movs r1, 0x71 | r1 = 0x71;
0x00097fba str r7, [sp] | *(sp) = r7;
0x00097fbc bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x00097fc0 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
| if (r3 == 0) {
0x00097fc2 cbnz r3, 0x97fc8 |
0x00097fc4 movs r3, 1 | r3 = 1;
0x00097fc6 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| }
0x00097fc8 ldr r6, [sp, 0x10] | r6 = var_10h;
0x00097fca movs r4, 0 | r4 = 0;
0x00097fcc ldr r5, [sp, 0x14] | r5 = var_14h;
0x00097fce mov r2, r4 | r2 = r4;
0x00097fd0 movs r1, 0x7f | r1 = 0x7f;
0x00097fd2 str r4, [sp] | *(sp) = r4;
0x00097fd4 mov r0, r6 | r0 = r6;
0x00097fd6 mov r3, r5 | r3 = r5;
0x00097fd8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00097fdc mov.w r3, -1 | r3 = -1;
0x00097fe0 movs r2, 6 | r2 = 6;
0x00097fe2 str r3, [sp, 8] | var_8h = r3;
0x00097fe4 movs r1, 0x4d | r1 = 0x4d;
0x00097fe6 ldr r3, [pc, 0x25c] |
0x00097fe8 mov r0, r6 | r0 = r6;
0x00097fea str r4, [sp] | *(sp) = r4;
0x00097fec add r3, pc |
0x00097fee add.w r3, r3, 0xdd0 | r3 = 0x131006;
0x00097ff2 str r3, [sp, 4] | var_4h = r3;
0x00097ff4 mov r3, r8 | r3 = r8;
0x00097ff6 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x00097ffa mov r3, r8 | r3 = r8;
0x00097ffc mov r2, r4 | r2 = r4;
0x00097ffe movs r1, 0x80 | r1 = 0x80;
0x00098000 mov r0, r6 | r0 = r6;
0x00098002 str r5, [sp] | *(sp) = r5;
0x00098004 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x00098006 ldc2 p14, c6, [sl, -0x3cc]! | __asm ("ldc2 p14, c6, [sl, -0x3cc]!");
0x0009800a cmp r3, 0 |
| if (r3 > 0) {
0x0009800c ble 0x9801e |
0x0009800e ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x00098010 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00098014 movs r1, 8 | r1 = 8;
0x00098016 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009801a strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x0009801e ldr r2, [pc, 0x228] |
0x00098020 ldr r3, [pc, 0x20c] | r3 = *(0x98230);
0x00098022 add r2, pc | r2 = 0x130270;
0x00098024 ldr r3, [r2, r3] | r3 = imp.atan;
0x00098026 ldr r2, [r3] | r2 = imp.atan;
0x00098028 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009802a eors r2, r3 | r2 ^= r3;
0x0009802c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00098030 bne.w 0x98226 | void (*0x98226)() ();
| }
0x00098034 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00098036 movs r1, 0x7a | r1 = 0x7a;
0x00098038 add sp, 0x2c |
0x0009803a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009803e b.w 0x429a8 | void (*0x429a8)() ();
| label_19:
0x00098042 ldr r2, [pc, 0x208] |
0x00098044 mov r3, r8 | r3 = r8;
0x00098046 mov r1, r8 | r1 = r8;
0x00098048 mov r0, r4 | r0 = r4;
0x0009804a add r2, pc | r2 = 0x13029c;
0x0009804c bl 0x57278 | r0 = fcn_00057278 (r0, r1, r2, r3);
0x00098050 cmp r0, 0 |
| if (r0 == 0) {
0x00098052 beq.w 0x97e04 | goto label_0;
| }
| label_16:
0x0009807e ldrb.w r7, [r6, 0xb0] | r7 = *((r6 + 0xb0));
0x00098082 cmp r7, 1 |
| if (r7 == 1) {
0x00098084 beq 0x98136 | goto label_31;
| }
0x00098086 ldr r1, [pc, 0x1cc] |
0x00098088 add r1, pc | r1 = 0x1302e2;
| label_4:
0x0009808a mov r0, r6 | r0 = r6;
0x0009808c bl 0x392f0 | r0 = fcn_000392f0 (r0, r1);
0x00098090 mov r8, r0 | r8 = r0;
0x00098092 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00098096 add.w r3, r4, 0xbc | r3 = r4 + 0xbc;
0x0009809a str r5, [sp, 0x20] | var_20h = r5;
0x0009809c stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x000980a0 cmp.w r8, 0 |
| if (r8 != 0) {
0x000980a4 bne.w 0x97de6 | goto label_1;
| }
| label_7:
0x000980a8 ldr r2, [pc, 0x1ac] |
0x000980aa ldr r3, [pc, 0x184] | r3 = *(0x98232);
0x000980ac add r2, pc | r2 = 0x130308;
0x000980ae ldr r3, [r2, r3] | r3 = imp.atan;
0x000980b0 ldr r2, [r3] | r2 = imp.atan;
0x000980b2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000980b4 eors r2, r3 | r2 ^= r3;
0x000980b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000980ba bne.w 0x98226 | void (*0x98226)() ();
| }
0x000980be add sp, 0x2c |
0x000980c0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x000980c4 mov r1, r0 | r1 = r0;
0x000980c6 mov r2, r5 | r2 = r5;
0x000980c8 mov r0, r4 | r0 = r4;
0x000980ca bl 0x39874 | fcn_00039874 (r0, r1, r2);
0x000980ce b 0x97dd2 | goto label_2;
| label_22:
0x000980d0 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000980d2 mov r0, r4 | r0 = r4;
0x000980d4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000980d6 ldr.w sb, [r3, r2] | sb = *((r3 + r2));
0x000980da bl 0x97d18 | r0 = fcn_00097d18 (r0);
0x000980de cmp r0, 0 |
| if (r0 != 0) {
0x000980e0 bne 0x98056 | void (*0x98056)() ();
| }
0x000980e2 mov r2, sb | r2 = sb;
0x000980e4 mov r1, r8 | r1 = r8;
0x000980e6 mov r0, r6 | r0 = r6;
0x000980e8 bl 0x56ec0 | r0 = fcn_00056ec0 (r0, r1, r2, r3);
0x000980ec cmp r0, 0 |
| if (r0 == 0) {
0x000980ee beq 0x9818a | goto label_32;
| }
0x000980f0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000980f2 cmp r3, 0 |
| if (r3 != 0) {
0x000980f4 bne 0x981d2 | goto label_33;
| }
0x000980f6 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x000980fa cmp r3, 2 |
| if (r3 == 2) {
0x000980fc beq.w 0x9820c | goto label_34;
| }
0x00098100 ldr r2, [pc, 0x158] |
0x00098102 add r2, pc | r2 = 0x130362;
| label_14:
0x00098104 ldr r1, [pc, 0x158] |
0x00098106 mov r3, r5 | r3 = r5;
0x00098108 mov r0, r4 | r0 = r4;
0x0009810a add r1, pc | r1 = 0x13036e;
0x0009810c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00098110 b 0x98056 | void (*0x98056)() ();
| label_21:
0x00098112 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00098114 mov r2, r8 | r2 = r8;
0x00098116 mov r0, r4 | r0 = r4;
0x00098118 str r3, [sp] | *(sp) = r3;
0x0009811a ldr r3, [pc, 0x148] |
0x0009811c add r3, pc | r3 = 0x130386;
0x0009811e add.w r3, r3, fp, lsl 1 | r3 += (fp << 1);
0x00098122 add r3, sb | r3 += sb;
0x00098124 ldrb.w r1, [r3, 0xdcc] | r1 = *((r3 + 0xdcc));
0x00098128 mov r3, sl | r3 = sl;
0x0009812a bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0009812e cmp r0, 0 |
| if (r0 == 0) {
0x00098130 beq.w 0x97e46 | goto label_3;
| }
0x00098134 b 0x98056 | void (*0x98056)() ();
| label_31:
0x00098136 ldr r1, [pc, 0x130] |
0x00098138 add r1, pc | r1 = 0x1303a6;
0x0009813a b 0x9808a | goto label_4;
| label_17:
0x0009813c ldr r2, [pc, 0x12c] |
0x0009813e ldr r3, [pc, 0xf0] | r3 = *(0x98232);
0x00098140 add r2, pc | r2 = 0x1303b0;
0x00098142 ldr r3, [r2, r3] | r3 = imp.atan;
0x00098144 ldr r2, [r3] | r2 = imp.atan;
0x00098146 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00098148 eors r2, r3 | r2 ^= r3;
0x0009814a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009814e bne 0x98226 | void (*0x98226)() ();
| }
0x00098150 ldr r1, [pc, 0x11c] |
0x00098152 mov r0, r4 | r0 = r4;
0x00098154 add r1, pc | r1 = 0x1303c8;
0x00098156 add sp, 0x2c |
0x00098158 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009815c b.w 0x37f78 | void (*0x37f78)() ();
| label_20:
0x00098160 ldr r2, [pc, 0x110] |
0x00098162 mov sb, r3 | sb = r3;
0x00098164 add r2, pc | r2 = 0x1303dc;
0x00098166 b 0x97e2a | goto label_5;
| label_23:
0x00098168 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0009816a movs r2, 7 | r2 = 7;
0x0009816c str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0009816e adds r3, 1 | r3++;
0x00098170 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00098172 b 0x98056 | void (*0x98056)() ();
| label_24:
0x00098174 ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x00098176 cmp r2, 0 |
| if (r2 == 0) {
0x00098178 beq 0x98200 | goto label_35;
| }
| label_13:
0x0009817a mov r0, r4 | r0 = r4;
0x0009817c bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x00098180 str r0, [sp, 0x10] | var_10h = r0;
0x00098182 cmp r0, 0 |
| if (r0 != 0) {
0x00098184 bne.w 0x97ea0 | goto label_6;
| }
0x00098188 b 0x980a8 | goto label_7;
| label_32:
0x0009818a mov r2, sb | r2 = sb;
0x0009818c mov r1, r8 | r1 = r8;
0x0009818e mov r0, r6 | r0 = r6;
0x00098190 bl 0x32fc4 | r0 = fcn_00032fc4 (r0, r1, r2, r3);
0x00098194 cmp r0, 0 |
| if (r0 == 0) {
0x00098196 beq.w 0x97e50 | goto label_8;
| }
0x0009819a ldr r1, [pc, 0xdc] |
0x0009819c mov r2, r8 | r2 = r8;
0x0009819e mov r0, r4 | r0 = r4;
0x000981a0 add r1, pc | r1 = 0x13041e;
0x000981a2 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000981a6 b 0x98056 | void (*0x98056)() ();
| label_28:
0x000981a8 movs r2, 1 | r2 = 1;
0x000981aa ldr r0, [sp, 0x10] | r0 = var_10h;
0x000981ac str r2, [sp] | *(sp) = r2;
0x000981ae movs r1, 0x93 | r1 = 0x93;
0x000981b0 mov r2, r7 | r2 = r7;
0x000981b2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000981b6 str.w r0, [r4, 0x84] | __asm ("str.w r0, [r4, 0x84]");
0x000981ba b 0x97f82 | goto label_9;
| label_27:
0x000981bc ldr r3, [pc, 0xbc] |
0x000981be add r3, pc | r3 = 0x13043e;
0x000981c0 adds r3, 4 | r3 += 4;
0x000981c2 b 0x97f6a | goto label_10;
| label_29:
0x000981c4 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
| if (r3 == 0) {
0x000981c6 cbz r3, 0x98212 | goto label_36;
| }
| label_15:
0x000981c8 mov r0, r4 | r0 = r4;
0x000981ca bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000981ce mov r6, r0 | r6 = r0;
0x000981d0 b 0x97f8a | goto label_11;
| label_33:
0x000981d2 ldr r0, [r4, 0x74] | r0 = *((r4 + 0x74));
0x000981d4 movs r3, 1 | r3 = 1;
0x000981d6 lsls r3, r7 | r3 <<= r7;
0x000981d8 cmp r0, 0 |
0x000981da it eq |
| if (r0 != 0) {
0x000981dc moveq r0, r4 | r0 = r4;
| }
0x000981de ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x000981e0 tst r2, r3 |
| if ((r2 & r3) != 0) {
0x000981e2 bne 0x981ee | void (*0x981ee)() ();
| }
0x000981e4 cmp r7, 1 |
0x000981e6 orr.w r2, r2, r3 | r2 |= r3;
0x000981ea str r2, [r0, 0x54] | *((r0 + 0x54)) = r2;
| label_25:
0x000981f6 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000981f8 movs r1, 0xaa | r1 = 0xaa;
0x000981fa bl 0x429a8 | fcn_000429a8 (r0, r1);
0x000981fe b 0x97eb2 | goto label_12;
| label_35:
0x00098200 ldr r2, [r4] | r2 = *(r4);
0x00098202 ldr r2, [r2, 0x50] | r2 = *((r2 + 0x50));
0x00098204 lsls r1, r2, 0x1c | r1 = r2 << 0x1c;
0x00098206 it pl |
| if (r1 < r2) {
0x00098208 strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0009820a b 0x9817a | goto label_13;
| label_34:
0x0009820c ldr r2, [pc, 0x70] |
0x0009820e add r2, pc | r2 = 0x130492;
0x00098210 b 0x98104 | goto label_14;
| label_36:
0x00098212 ldr r3, [r4] | r3 = *(r4);
0x00098214 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00098216 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00098218 itt pl |
| if (r3 < r3) {
0x0009821a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0009821c strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0009821e b 0x981c8 | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x99ce4 */
| #include <stdint.h>
|
; (fcn) fcn.00099ce4 () | void fcn_00099ce4 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00099ce4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00099ce8 mov r4, r1 | r4 = r1;
0x00099cea ldr r5, [r0] | r5 = *(r0);
0x00099cec sub sp, 0xc |
0x00099cee ldrb.w r1, [r5, 0x57] | r1 = *((r5 + 0x57));
0x00099cf2 cbz r1, 0x99d02 |
| while (r0 == 0) {
| label_0:
0x00099cf4 mov r1, r4 | r1 = r4;
0x00099cf6 mov r0, r5 | r0 = r5;
0x00099cf8 add sp, 0xc |
0x00099cfa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00099cfe b.w 0x30a7c | void (*0x30a7c)() ();
0x00099d02 add.w r2, r4, 8 | r2 = r4 + 8;
0x00099d06 mov sl, r0 | sl = r0;
0x00099d08 bl 0x98544 | r0 = fcn_00098544 (r0, r1, r2);
0x00099d0c mov r6, r0 | r6 = r0;
0x00099d0e cmp r0, 0 |
0x00099d10 beq 0x99cf4 |
| }
0x00099d12 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x00099d16 cmp r3, 1 |
| if (r3 == 1) {
0x00099d18 beq.w 0x99e7c | goto label_4;
| }
0x00099d1c cmp r3, 2 |
| if (r3 == 2) {
0x00099d1e beq.w 0x99e6c | goto label_5;
| }
0x00099d22 mov r1, r0 | r1 = r0;
0x00099d24 mov r0, sl | r0 = sl;
0x00099d26 bl 0x45844 | r0 = fcn_00045844 (r0, r1);
0x00099d2a mov sb, r0 | sb = r0;
0x00099d2c cmp r0, 0 |
| if (r0 != 0) {
0x00099d2e bne 0x99cf4 | goto label_0;
| }
0x00099d30 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00099d34 movs r2, 1 | r2 = 1;
0x00099d36 cmp r3, 0 |
0x00099d38 it eq |
| if (r3 != 0) {
0x00099d3a moveq r3, sl | r3 = sl;
| }
0x00099d3c strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x00099d3e ldr r1, [r6, 0x3c] | r1 = *((r6 + 0x3c));
0x00099d40 cmp r1, 0 |
| if (r1 == 0) {
0x00099d42 beq.w 0x99e88 | goto label_6;
| }
0x00099d46 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00099d48 mov r7, r0 | r7 = r0;
0x00099d4a ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00099d4c cmp r1, r2 |
| if (r1 == r2) {
0x00099d4e beq 0x99d5a | goto label_3;
| }
| do {
0x00099d50 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00099d52 adds r3, 0x10 | r3 += 0x10;
0x00099d54 adds r7, 1 | r7++;
0x00099d56 cmp r1, r2 |
0x00099d58 bne 0x99d50 |
| } while (r1 != r2);
| label_3:
0x00099d5a mov r0, r5 | r0 = r5;
0x00099d5c movs r2, 0x40 | r2 = 0x40;
0x00099d5e movs r3, 0 | r3 = 0;
0x00099d60 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00099d64 mov r8, r0 | r8 = r0;
0x00099d66 cmp r0, 0 |
| if (r0 == 0) {
0x00099d68 beq 0x99cf4 | goto label_0;
| }
0x00099d6a movs r2, 0x40 | r2 = 0x40;
0x00099d6c movs r1, 0 | r1 = 0;
0x00099d6e blx 0x62ec | fcn_000062ec ();
0x00099d72 ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x00099d76 mov r0, r5 | r0 = r5;
0x00099d78 str.w r8, [sl, 0xec] | __asm ("str.w r8, [sl, 0xec]");
0x00099d7c adds r3, r2, 6 | r3 = r2 + 6;
0x00099d7e strh.w r2, [r8, 0x22] | *((r8 + 0x22)) = r2;
0x00099d82 subs r2, 1 | r2--;
0x00099d84 it pl |
| if (r2 < 1) {
0x00099d86 movpl r3, r2 | r3 = r2;
| }
0x00099d88 movs r2, 1 | r2 = 1;
0x00099d8a asrs r3, r3, 3 | r3 >>= 3;
0x00099d8c str.w r2, [r8, 0x18] | __asm ("str.w r2, [r8, 0x18]");
0x00099d90 adds r3, 1 | r3++;
0x00099d92 lsl.w sl, r3, 4 | sl = r3 << 4;
0x00099d96 add.w sl, sl, r3, lsl 3 | sl += (r3 << 3);
0x00099d9a movs r3, 0 | r3 = 0;
0x00099d9c lsl.w sl, sl, 2 | sl <<= 2;
0x00099da0 mov r2, sl | r2 = sl;
0x00099da2 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x00099da6 mov fp, r0 |
| if (r0 != 0) {
0x00099da8 cbz r0, 0x99db2 |
0x00099daa mov r2, sl | r2 = sl;
0x00099dac movs r1, 0 | r1 = 0;
0x00099dae blx 0x62ec | fcn_000062ec ();
| }
0x00099db2 ldr r1, [pc, 0xe0] |
0x00099db4 mov r0, r5 | r0 = r5;
0x00099db6 str.w fp, [r8, 4] | __asm ("str.w fp, [r8, 4]");
0x00099dba ldr r2, [r6] | r2 = *(r6);
0x00099dbc add r1, pc | r1 = 0x133c56;
0x00099dbe bl 0x4a320 | r0 = fcn_0004a320 (r0);
0x00099dc2 mov r3, r0 | r3 = r0;
0x00099dc4 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00099dc8 ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x00099dcc cmp r3, 0 |
0x00099dce it ne |
| if (r3 != 0) {
0x00099dd0 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00099dd2 ite eq |
| if (r3 != 0) {
0x00099dd4 moveq fp, 1 |
| }
| if (r3 == 0) {
0x00099dd8 mov.w fp, 0 | goto label_7;
| }
| if (r3 == 0) {
| label_7:
0x00099ddc beq 0x99cf4 | goto label_0;
| }
0x00099dde ldrsh.w r2, [r8, 0x22] | r2 = *((r8 + 0x22));
0x00099de2 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00099de4 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00099de8 lsls r2, r2, 2 | r2 <<= 2;
0x00099dea blx 0x65ac | EVP_CIPHER_CTX_free ();
0x00099dee ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x00099df2 cmp r3, 0 |
| if (r3 <= 0) {
0x00099df4 ble 0x99e44 | goto label_8;
| }
0x00099df6 ldr.w sl, [pc, 0xa0] |
0x00099dfa add sl, pc | sl = 0x133c98;
| label_1:
0x00099dfc ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00099e00 mov r0, r5 | r0 = r5;
0x00099e02 ldr.w r1, [r3, fp] | r1 = *((r3 + fp));
0x00099e06 str r3, [sp, 4] | var_4h = r3;
0x00099e08 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x00099e0c ldr r3, [sp, 4] | r3 = var_4h;
0x00099e0e mov r2, r0 | r2 = r0;
0x00099e10 add.w r1, r3, fp | r1 = r3 + fp;
0x00099e14 str.w r0, [r3, fp] | __asm ("str.w r0, [r3, fp]");
| if (r0 == 0) {
0x00099e18 cbz r0, 0x99e32 | goto label_2;
| }
0x00099e1a ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x00099e1c cbz r3, 0x99e78 | goto label_9;
| }
0x00099e1e movs r2, 0 | r2 = 0;
| do {
0x00099e20 add r3, sl | r3 += sl;
0x00099e22 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x00099e26 add r2, r3 | r2 += r3;
0x00099e28 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00099e2c uxtb r2, r2 | r2 = (int8_t) r2;
0x00099e2e cmp r3, 0 |
0x00099e30 bne 0x99e20 |
| } while (r3 != 0);
| label_2:
0x00099e32 strb r2, [r1, 7] | *((r1 + 7)) = r2;
0x00099e34 add.w sb, sb, 1 | sb++;
0x00099e38 ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x00099e3c add.w fp, fp, 0xc |
0x00099e40 cmp r3, sb |
| if (r3 > sb) {
0x00099e42 bgt 0x99dfc | goto label_1;
| }
| label_8:
0x00099e44 movs r2, 0 | r2 = 0;
0x00099e46 ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x00099e48 mov r0, r5 | r0 = r5;
0x00099e4a bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x00099e4e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00099e50 ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x00099e52 str.w r0, [r8, 0x34] | __asm ("str.w r0, [r8, 0x34]");
0x00099e56 add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x00099e5a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00099e5c str.w r2, [r8, 0x2c] | __asm ("str.w r2, [r8, 0x2c]");
0x00099e60 movs r2, 1 | r2 = 1;
0x00099e62 str.w r2, [r8, 0x18] | __asm ("str.w r2, [r8, 0x18]");
0x00099e66 str.w r3, [r8, 0x3c] | __asm ("str.w r3, [r8, 0x3c]");
0x00099e6a b 0x99cf4 | goto label_0;
| label_5:
0x00099e6c ldr r1, [pc, 0x2c] |
0x00099e6e mov r0, sl | r0 = sl;
0x00099e70 add r1, pc | r1 = 0x133d10;
0x00099e72 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00099e76 b 0x99cf4 | goto label_0;
| label_9:
0x00099e78 mov r2, r3 | r2 = r3;
0x00099e7a b 0x99e32 | goto label_2;
| label_4:
0x00099e7c ldr r1, [pc, 0x20] |
0x00099e7e mov r0, sl | r0 = sl;
0x00099e80 add r1, pc | r1 = 0x133d24;
0x00099e82 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x00099e86 b 0x99cf4 | goto label_0;
| label_6:
0x00099e88 mov.w r7, 0x8000 |
0x00099e8c movt r7, 0xffff | r7 = 0x-8000;
0x00099e90 b 0x99d5a | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x9a3a0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0009a3a0 () | void fcn_0009a3a0 (arithmetic arg_18h, int16_t arg_1ch, int16_t arg_32h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_22h;
| int16_t var_2bh;
| arithmetic var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| arithmetic var_4ch;
| int16_t var_50h;
| int16_t var_54h_2;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| arithmetic x;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_dch;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_f4h;
| int16_t var_f8h;
| int16_t var_fch;
| int16_t var_108h;
| int16_t var_10ch;
| int16_t var_110h;
| int16_t var_114h;
| int16_t var_118h;
| int16_t var_11ch;
| int16_t var_148h;
| int16_t var_14ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009a3a0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009a3a4 sub sp, 0x124 |
0x0009a3a6 str r2, [sp, 0x38] | var_38h = r2;
0x0009a3a8 ldr.w r2, [pc, 0xa14] |
0x0009a3ac str r3, [sp, 0x50] | var_50h = r3;
0x0009a3ae ldr.w r3, [pc, 0xa14] | r3 = *(0x9adc6);
0x0009a3b2 add r2, pc | r2 = 0x135176;
0x0009a3b4 str r0, [sp, 0x2c] | var_2ch = r0;
0x0009a3b6 ldr r5, [r0, 0x24] | r5 = *(var_0hx24);
0x0009a3b8 ldr r3, [r2, r3] |
0x0009a3ba ldr r3, [r3] | r3 = imp.atan;
0x0009a3bc str r3, [sp, 0x11c] | var_11ch = r3;
0x0009a3be mov.w r3, 0 | r3 = 0;
0x0009a3c2 movs r3, 0 | r3 = 0;
0x0009a3c4 str r3, [sp, 0xd4] | var_d4h = r3;
0x0009a3c6 strd r3, r3, [sp, 0xcc] | __asm ("strd r3, r3, [sp, 0xcc]");
0x0009a3ca ldr r3, [sp, 0x14c] | r3 = var_14ch;
0x0009a3cc str r5, [sp, 0x44] | var_44h = r5;
0x0009a3ce str r1, [sp, 0x3c] | var_3ch = r1;
0x0009a3d0 str r3, [sp, 0x60] | var_60h = r3;
0x0009a3d2 ldr r3, [r0] | r3 = *(r0);
0x0009a3d4 str r3, [sp, 0x30] | var_30h = r3;
0x0009a3d6 cmp r5, 0 |
| if (r5 == 0) {
0x0009a3d8 beq.w 0x9a54e | goto label_78;
| }
| label_1:
0x0009a3dc ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009a3de ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009a3e0 bl 0x30a7c | fcn_00030a7c (r0, r1);
0x0009a3e4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009a3e6 cmp r3, 0 |
| if (r3 != 0) {
0x0009a3e8 bne.w 0x9a544 | goto label_79;
| }
| label_0:
0x0009a3ec ldr r3, [sp, 0x50] | r3 = var_50h;
| if (r3 != 0) {
0x0009a3ee cbz r3, 0x9a3f8 |
0x0009a3f0 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009a3f2 mov r1, r3 | r1 = r3;
0x0009a3f4 bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x0009a3f8 ldr.w r2, [pc, 0x9cc] |
0x0009a3fc ldr.w r3, [pc, 0x9c4] | r3 = *(0x9adc4);
0x0009a400 add r2, pc | r2 = 0x1351cc;
0x0009a402 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009a404 ldr r2, [r3] | r2 = imp.atan;
0x0009a406 ldr r3, [sp, 0x11c] | r3 = var_11ch;
0x0009a408 eors r2, r3 | r2 ^= r3;
0x0009a40a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009a40e bne.w 0x9b79a | goto label_80;
| }
0x0009a412 add sp, 0x124 |
0x0009a414 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_52:
0x0009a418 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009a41a mov r1, r8 | r1 = r8;
0x0009a41c ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009a41e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a420 str r3, [sp, 4] | var_4h = r3;
0x0009a422 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009a424 str r3, [sp] | *(sp) = r3;
0x0009a426 mov r3, r4 | r3 = r4;
0x0009a428 bl 0x8ecac | fcn_0008ecac (r0, r1, r2, r3, r4, r5, r6);
| if (r4 != 0) {
0x0009a42c cbz r4, 0x9a436 |
0x0009a42e mov r1, r4 | r1 = r4;
0x0009a430 mov r0, r6 | r0 = r6;
0x0009a432 bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x0009a436 mov.w fp, 0 |
| label_59:
0x0009a43a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009a43c ldr r3, [r3] | r3 = *(r3);
0x0009a43e cmp r3, 1 |
| if (r3 == 1) {
0x0009a440 beq.w 0x9b968 | goto label_81;
| }
| label_56:
0x0009a444 movs r4, 0 | r4 = 0;
0x0009a446 mov r2, r8 | r2 = r8;
0x0009a448 mov r3, r4 | r3 = r4;
0x0009a44a movs r1, 0x23 | r1 = 0x23;
0x0009a44c mov r0, sb | r0 = sb;
0x0009a44e str r4, [sp] | *(sp) = r4;
0x0009a450 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009a454 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009a456 str r0, [sp, 0x48] | var_48h = r0;
0x0009a458 cmp r3, r4 |
| if (r3 <= r4) {
0x0009a45a ble 0x9a476 | goto label_82;
| }
| do {
0x0009a45c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009a45e mov r2, r8 | r2 = r8;
0x0009a460 movs r1, 0x5e | r1 = 0x5e;
0x0009a462 mov r0, sb | r0 = sb;
0x0009a464 add r3, r4 | r3 += r4;
0x0009a466 str r3, [sp] | *(sp) = r3;
0x0009a468 mov r3, r4 | r3 = r4;
0x0009a46a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009a46e ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009a470 adds r4, 1 | r4++;
0x0009a472 cmp r3, r4 |
0x0009a474 bgt 0x9a45c |
| } while (r3 > r4);
| label_82:
0x0009a476 movs r3, 0 | r3 = 0;
0x0009a478 mov sl, r3 | sl = r3;
0x0009a47a ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009a47c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a47e bl 0x3b720 | fcn_0003b720 (r0, r1);
0x0009a482 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009a484 movs r2, 0 | r2 = 0;
0x0009a486 movs r1, 7 | r1 = 7;
0x0009a488 mov r0, sb | r0 = sb;
0x0009a48a str r3, [sp] | *(sp) = r3;
0x0009a48c ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009a48e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009a492 mvn r3, 0xa | r3 = ~0xa;
0x0009a496 mov r1, r0 | r1 = r0;
0x0009a498 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009a49a mov r0, sb | r0 = sb;
0x0009a49c bl 0x395c0 | fcn_000395c0 (r0, r1, r2, r3);
0x0009a4a0 ldr r3, [sp, 0x148] | r3 = var_148h;
0x0009a4a2 cmp r3, 0xb |
0x0009a4a4 it eq |
| if (r3 != 0xb) {
0x0009a4a6 moveq r3, 2 | r3 = 2;
| }
0x0009a4a8 str r3, [sp, 0x148] | var_148h = r3;
0x0009a4aa ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009a4ae cmp r3, 0 |
| if (r3 > 0) {
0x0009a4b0 ble 0x9a4c4 |
0x0009a4b2 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0009a4b6 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009a4b8 lsls r3, r0, 0xd | r3 = r0 << 0xd;
0x0009a4ba add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009a4be ldr r3, [sp, 0x148] | r3 = var_148h;
0x0009a4c0 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0009a4c4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009a4c6 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0009a4c8 cmp r3, 0 |
0x0009a4ca it ne |
| if (r3 == 0) {
0x0009a4cc movne r2, r3 | r2 = r3;
| }
0x0009a4ce movs r3, 1 | r3 = 1;
0x0009a4d0 strb r3, [r2, 0x15] | *((r2 + 0x15)) = r3;
0x0009a4d2 mov r3, sl | r3 = sl;
0x0009a4d4 cmp r3, 0 |
| if (r3 != 0) {
0x0009a4d6 bne.w 0x9b97c | goto label_83;
| }
0x0009a4da ldr r4, [sp, 0x48] | r4 = var_48h;
0x0009a4dc mov r2, r8 | r2 = r8;
0x0009a4de movs r1, 0x26 | r1 = 0x26;
0x0009a4e0 mov r0, sb | r0 = sb;
0x0009a4e2 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0009a4e6 adds r3, r4, 1 | r3 = r4 + 1;
0x0009a4e8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009a4ec ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0009a4f0 cmp r4, 0 |
0x0009a4f2 itt lt |
| if (r4 >= 0) {
0x0009a4f4 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r4 < 0) {
0x0009a4f8 str r3, [sp, 0x48] | var_48h = r3;
| }
0x0009a4fa ldr.w r3, [sb] | r3 = *(sb);
0x0009a4fe ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009a502 cmp r3, 0 |
| if (r3 != 0) {
0x0009a504 bne.w 0x9b972 | goto label_84;
| }
0x0009a508 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009a50c movs r1, 0x18 | r1 = 0x18;
0x0009a50e ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009a510 mla r3, r1, r0, r3 | __asm ("mla r3, r1, r0, r3");
| label_57:
0x0009a514 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009a516 movs r3, 0 | r3 = 0;
0x0009a518 mov r2, r8 | r2 = r8;
0x0009a51a mov r0, sb | r0 = sb;
0x0009a51c movs r1, 0x7a | r1 = 0x7a;
0x0009a51e str r3, [sp] | *(sp) = r3;
0x0009a520 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_5:
0x0009a524 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009a526 ldr r1, [sp, 0x40] | r1 = var_40h;
| if (r3 != 0) {
0x0009a528 cbz r3, 0x9a534 |
| label_19:
0x0009a52a ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009a52c str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0009a530 movs r3, 0 | r3 = 0;
0x0009a532 str r3, [sp, 0xd4] | var_d4h = r3;
| }
| label_20:
0x0009a534 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009a536 mov r0, r4 | r0 = r4;
0x0009a538 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0009a53c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009a53e mov r0, r4 | r0 = r4;
0x0009a540 bl 0x30a7c | fcn_00030a7c (r0, r1);
| label_79:
0x0009a544 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009a546 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009a548 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x0009a54c b 0x9a3ec | goto label_0;
| label_78:
0x0009a54e mov r4, r0 | r4 = r0;
0x0009a550 bl 0x9975c | fcn_0009975c (r0, r1);
0x0009a554 str r0, [sp, 0x34] | var_34h = r0;
0x0009a556 cmp r0, 0 |
| if (r0 == 0) {
0x0009a558 beq.w 0x9ab5e | goto label_85;
| }
0x0009a55c ldr r1, [r0, 0x3c] | r1 = *((r0 + 0x3c));
0x0009a55e ldr r0, [r4] | r0 = *(r4);
0x0009a560 cmp r1, 0 |
| if (r1 == 0) {
0x0009a562 beq.w 0x9afba | goto label_86;
| }
0x0009a566 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0009a568 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0009a56a cmp r1, r2 |
| if (r1 == r2) {
0x0009a56c beq.w 0x9ac7a | goto label_87;
| }
0x0009a570 mov r8, r5 | r8 = r5;
| do {
0x0009a572 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0009a574 adds r3, 0x10 | r3 += 0x10;
0x0009a576 add.w r8, r8, 1 | r8++;
0x0009a57a cmp r1, r2 |
0x0009a57c bne 0x9a572 |
| } while (r1 != r2);
| label_18:
0x0009a57e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009a580 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0009a582 cmp r3, 0 |
| if (r3 == 0) {
0x0009a584 beq.w 0x9ab44 | goto label_88;
| }
| label_9:
0x0009a588 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009a58a ldrb.w r3, [r3, 0x97] | r3 = *((r3 + 0x97));
0x0009a58e cmp r3, 0 |
| if (r3 != 0) {
0x0009a590 bne.w 0x9ab52 | goto label_89;
| }
0x0009a594 add r3, sp, 0xc8 | r3 += var_c8h;
0x0009a596 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009a598 str r3, [sp] | *(sp) = r3;
0x0009a59a movs r2, 0x81 | r2 = 0x81;
0x0009a59c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009a59e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a5a0 bl 0x45008 | fcn_00045008 (r0, r1, r2, r3, r4);
0x0009a5a4 str r0, [sp, 0x80] | var_80h = r0;
| label_10:
0x0009a5a6 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009a5a8 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009a5aa ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009a5ac ldr r3, [r3] | r3 = *(r3);
0x0009a5ae ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
0x0009a5b2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a5b4 cmp r3, 1 |
0x0009a5b6 it gt |
| if (r3 <= 1) {
0x0009a5b8 ldrgt r3, [sp, 0x38] | r3 = var_38h;
| }
0x0009a5ba str r2, [sp, 0x6c] | var_6ch = r2;
0x0009a5bc itt gt |
| if (r3 <= 1) {
0x0009a5be ldrgt r3, [r3] | r3 = *(r3);
| }
| if (r3 <= 1) {
0x0009a5c0 strgt r3, [sp, 0x44] | var_44h = r3;
| }
0x0009a5c2 bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x0009a5c6 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0009a5c8 cbz r0, 0x9a5de | goto label_90;
| }
0x0009a5ca ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009a5cc cmp r3, 0 |
| if (r3 == 0) {
0x0009a5ce beq.w 0x9a3dc | goto label_1;
| }
0x0009a5d2 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009a5d4 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0009a5d8 movs r3, 0 | r3 = 0;
0x0009a5da str r3, [sp, 0xd4] | var_d4h = r3;
0x0009a5dc b 0x9a3dc | goto label_1;
| label_90:
0x0009a5de ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x0009a5e0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009a5e2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a5e4 bl 0x45110 | fcn_00045110 (r0, r1, r2);
0x0009a5e8 str r0, [sp, 0xa8] | var_a8h = r0;
0x0009a5ea cmp r0, 0 |
| if (r0 != 0) {
0x0009a5ec bne.w 0x9ab72 | goto label_91;
| }
0x0009a5f0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009a5f2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009a5f4 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0009a5f6 ldr r0, [r1, 0x28] | r0 = *((r1 + 0x28));
0x0009a5f8 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0009a5fa ands r5, r2, 0x80 | r5 = r2 & 0x80;
0x0009a5fe str r0, [sp, 0x70] | var_70h = r0;
0x0009a600 add.w r0, r0, 1 | r0++;
0x0009a604 str r0, [sp, 0x7c] | var_7ch = r0;
0x0009a606 str r0, [r1, 0x28] | *((r1 + 0x28)) = r0;
| if (r5 == r2) {
0x0009a608 beq.w 0x9ab84 | goto label_92;
| }
0x0009a60c mov r1, r3 | r1 = r3;
| if (r3 != 0) {
0x0009a60e cbnz r3, 0x9a618 | goto label_93;
| }
0x0009a610 b.w 0x9afaa | goto label_94;
| do {
0x0009a614 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
| if (r1 == 0) {
0x0009a616 cbz r1, 0x9a624 | goto label_95;
| }
| label_93:
0x0009a618 ldrb.w r2, [r1, 0x37] | r2 = *((r1 + 0x37));
0x0009a61c and r2, r2, 3 | r2 &= 3;
0x0009a620 cmp r2, 2 |
0x0009a622 bne 0x9a614 |
| } while (r2 != 2);
| label_95:
0x0009a624 str r1, [sp, 0x58] | var_58h = r1;
| label_12:
0x0009a626 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0009a628 ldr r1, [sp, 0x70] | r1 = var_70h;
0x0009a62a ldr r0, [sp, 0x58] | r0 = var_58h;
| do {
0x0009a62c cmp r3, r0 |
0x0009a62e it eq |
| if (r3 != r0) {
0x0009a630 moveq r1, r2 | r1 = r2;
| }
0x0009a632 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009a634 adds r2, 1 | r2++;
0x0009a636 cmp r3, 0 |
0x0009a638 bne 0x9a62c |
| } while (r3 != 0);
0x0009a63a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009a63c str r1, [sp, 0x54] | var_54h_2 = r1;
0x0009a63e str r2, [r3, 0x28] | *((r3 + 0x28)) = r2;
0x0009a640 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009a642 subs r3, r2, r3 | r3 = r2 - r3;
0x0009a644 subs r5, r3, 1 | r5 = r3 - 1;
0x0009a646 adds r3, 1 | r3++;
0x0009a648 str r5, [sp, 0xa4] | var_a4h = r5;
| label_22:
0x0009a64a ldr r2, [sp, 0x60] | r2 = var_60h;
| if (r2 != 0) {
0x0009a64c cbz r2, 0x9a65c |
0x0009a64e ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x0009a650 ldr r2, [r2, 0x2c] | r2 = *((r2 + 0x2c));
0x0009a652 str r1, [sp, 0x54] | var_54h_2 = r1;
0x0009a654 str r2, [sp, 0x7c] | var_7ch = r2;
0x0009a656 ldr r1, [sp, 0x70] | r1 = var_70h;
0x0009a658 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009a65a str r1, [r2, 0x28] | *((r2 + 0x28)) = r1;
| }
0x0009a65c ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0009a65e movs r4, 0 | r4 = 0;
0x0009a660 ldr r1, [sp, 0x54] | r1 = var_54h_2;
0x0009a662 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009a664 str r1, [r2, 0x30] | *((r2 + 0x30)) = r1;
0x0009a666 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009a668 ldr r1, [sp, 0xa4] | r1 = var_a4h;
0x0009a66a ldrsh.w r2, [r2, 0x22] | r2 = *((r2 + 0x22));
0x0009a66e add r2, r1 | r2 += r1;
0x0009a670 adds r2, 1 | r2++;
0x0009a672 add.w r2, r3, r2, lsl 2 | r2 = r3 + (r2 << 2);
0x0009a676 mov r3, r4 | r3 = r4;
0x0009a678 bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0009a67c str r0, [sp, 0x40] | var_40h = r0;
0x0009a67e cmp r0, 0 |
| if (r0 == 0) {
0x0009a680 beq.w 0x9ac80 | goto label_96;
| }
0x0009a684 add.w fp, r5, 1 |
0x0009a688 ldr r5, [sp, 0x34] | r5 = var_34h;
0x0009a68a ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009a68c movs r1, 1 | r1 = 1;
0x0009a68e ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x0009a692 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0009a696 mov r2, fp | r2 = fp;
0x0009a698 str r3, [sp, 0x8c] | var_8ch = r3;
0x0009a69a add.w r3, r3, fp, lsl 2 | r3 += (fp << 2);
0x0009a69e mov r6, r3 | r6 = r3;
0x0009a6a0 mov r0, r3 | r0 = r3;
0x0009a6a2 str r3, [sp, 0x94] | var_94h = r3;
0x0009a6a4 blx 0x62ec | fcn_000062ec ();
0x0009a6a8 strb.w r4, [r6, fp] | *((r6 + fp)) = r4;
0x0009a6ac ldrsh.w r2, [r5, 0x22] | r2 = *((r5 + 0x22));
0x0009a6b0 cmp r2, 0 |
| if (r2 > 0) {
0x0009a6b2 ble 0x9a6be |
0x0009a6b4 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0009a6b6 lsls r2, r2, 2 | r2 <<= 2;
0x0009a6b8 movs r1, 0xff | r1 = 0xff;
0x0009a6ba blx 0x62ec | fcn_000062ec ();
| }
0x0009a6be ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0009a6c0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009a6c2 str r2, [sp, 0xf8] | var_f8h = r2;
0x0009a6c4 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0009a6c6 str r3, [sp, 0xf4] | var_f4h = r3;
0x0009a6c8 str r2, [sp, 0xfc] | var_fch = r2;
0x0009a6ca ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0009a6cc movs r3, 0 | r3 = 0;
0x0009a6ce strd r3, r3, [sp, 0x100] | __asm ("strd r3, r3, [sp, 0x100]");
0x0009a6d2 str r3, [sp, 0x108] | *(arg_18h) = r3;
0x0009a6d4 str r3, [sp, 0x110] | var_110h = r3;
0x0009a6d6 mov.w r3, 0x200 | r3 = 0x200;
0x0009a6da str r2, [sp, 0x4c] | var_4ch = r2;
0x0009a6dc str r3, [sp, 0x10c] | *(arg_1ch) = r3;
0x0009a6de cmp r2, 0 |
| if (r2 == 0) {
0x0009a6e0 beq.w 0x9aba2 | goto label_97;
| }
| label_14:
0x0009a6e4 ldr r6, [sp, 0x38] | r6 = var_38h;
0x0009a6e6 ldr r3, [r6] | r3 = *(r6);
0x0009a6e8 cmp r3, 0 |
| if (r3 <= 0) {
0x0009a6ea ble.w 0x9b784 | goto label_98;
| }
0x0009a6ee ldr.w r4, [pc, 0x6dc] |
0x0009a6f2 mov.w sl, 0 | sl = 0;
0x0009a6f6 str.w fp, [sp, 0x74] | __asm ("str.w fp, [var_74h]");
0x0009a6fa lsl.w r3, r8, 4 | r3 = r8 << 4;
0x0009a6fe ldr.w fp, [sp, 0x34] | fp = var_34h;
0x0009a702 mov r5, sl | r5 = sl;
0x0009a704 add r4, pc | r4 = 0x1354d6;
0x0009a706 str r3, [sp, 0x68] | var_68h = r3;
0x0009a708 mov.w r3, -1 | r3 = -1;
0x0009a70c str.w sl, [sp, 0x64] | __asm ("str.w sl, [var_64h]");
0x0009a710 str r3, [sp, 0x78] | var_78h = r3;
0x0009a712 str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x0009a716 str.w sl, [sp, 0xac] | __asm ("str.w sl, [var_ach]");
0x0009a71a str.w r8, [sp, 0x84] | __asm ("str.w r8, [var_84h]");
| label_6:
0x0009a71e ldr.w sb, [r6, 0xc] | sb = *((r6 + 0xc));
0x0009a722 mov r2, sb | r2 = sb;
0x0009a724 mov r8, sb | r8 = sb;
0x0009a726 cmp.w sb, 0 |
| if (sb == 0) {
0x0009a72a beq 0x9a754 | goto label_11;
| }
0x0009a72c ldrb.w r3, [sb] | r3 = *(sb);
0x0009a730 cmp r3, 0 |
| if (r3 == 0) {
0x0009a732 beq.w 0x9ab5a | goto label_99;
| }
0x0009a736 ldr.w r1, [pc, 0x698] |
0x0009a73a mov.w r8, 0 | r8 = 0;
0x0009a73e add r1, pc | r1 = 0x135514;
| do {
0x0009a740 add r3, r1 | r3 += r1;
0x0009a742 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0009a746 add r8, r3 | r8 += r3;
0x0009a748 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0009a74c uxtb.w r8, r8 | r8 = (int8_t) r8;
0x0009a750 cmp r3, 0 |
0x0009a752 bne 0x9a740 |
| } while (r3 != 0);
| label_11:
0x0009a754 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009a756 cmp r3, 0 |
| if (r3 == 0) {
0x0009a758 beq.w 0x9ab30 | goto label_100;
| }
| label_8:
0x0009a75c ldrsh.w lr, [fp, 0x22] | lr = var_22h;
0x0009a760 cmp.w lr, 0 |
| if (lr <= 0) {
0x0009a764 ble.w 0x9ab04 | goto label_101;
| }
0x0009a768 ldr.w r1, [fp, 4] | r1 = var_dch;
0x0009a76c movs r7, 0 | r7 = 0;
0x0009a76e mov ip, r1 |
0x0009a770 mov r2, r1 | r2 = r1;
0x0009a772 b 0x9a780 |
| while (r3 != r8) {
| label_2:
0x0009a774 adds r7, 1 | r7++;
0x0009a776 add.w ip, ip, 0xc |
0x0009a77a cmp r7, lr |
| if (r7 == lr) {
0x0009a77c beq.w 0x9ab04 | goto label_101;
| }
0x0009a780 ldrb.w r3, [ip, 7] | r3 = *((ip + 7));
0x0009a784 cmp r3, r8 |
0x0009a786 bne 0x9a774 |
| }
0x0009a788 ldr.w r3, [ip] | r3 = *(ip);
0x0009a78c add.w sl, sb, -1 | sl = sb + -1;
0x0009a790 subs r0, r3, 1 | r0 = r3 - 1;
0x0009a792 str r3, [sp, 0x48] | var_48h = r3;
| label_4:
0x0009a794 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0009a798 ldrb r1, [sl, 1]! | r1 = *((sl += 1));
0x0009a79c cmp r3, r1 |
| if (r3 == r1) {
0x0009a79e beq 0x9a7bc | goto label_102;
| }
| label_3:
0x0009a7a0 add r3, r4 | r3 += r4;
0x0009a7a2 add r1, r4 | r1 += r4;
0x0009a7a4 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0009a7a8 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x0009a7ac cmp r3, r1 |
| if (r3 != r1) {
0x0009a7ae bne 0x9a774 | goto label_2;
| }
0x0009a7b0 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0009a7b4 ldrb r1, [sl, 1]! | r1 = *((sl += 1));
0x0009a7b8 cmp r3, r1 |
| if (r3 != r1) {
0x0009a7ba bne 0x9a7a0 | goto label_3;
| }
| label_102:
0x0009a7bc cmp r3, 0 |
| if (r3 != 0) {
0x0009a7be bne 0x9a794 | goto label_4;
| }
0x0009a7c0 mov r1, r2 | r1 = r2;
0x0009a7c2 ldrsh.w r2, [fp, 0x20] | r2 = var_f8h;
0x0009a7c6 cmp r2, r7 |
| if (r2 == r7) {
0x0009a7c8 beq.w 0x9ab90 | goto label_103;
| }
0x0009a7cc ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009a7ce ldrh.w r2, [ip, 0xa] | r2 = *((ip + 0xa));
| if (r3 != 0) {
0x0009a7d2 cbz r3, 0x9a7da |
0x0009a7d4 lsls r3, r2, 0x1f | r3 = r2 << 0x1f;
| if (r3 < r2) {
0x0009a7d6 bmi.w 0x9ab9c | goto label_104;
| }
| }
0x0009a7da tst.w r2, 0x60 |
| if ((r2 & 0x60) != 0) {
0x0009a7de bne.w 0x9b760 | goto label_105;
| }
| label_13:
0x0009a7e2 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009a7e4 cmp lr, r7 |
0x0009a7e6 str.w r5, [r3, r7, lsl 2] | __asm ("str.w r5, [r3, r7, lsl 2]");
| if (lr <= r7) {
0x0009a7ea ble.w 0x9ab04 | goto label_101;
| }
0x0009a7ee add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x0009a7f2 ldr.w r2, [fp] | r2 = *(fp);
0x0009a7f6 ldr.w r3, [r1, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r1 + offset_0));
| label_7:
0x0009a7fa ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009a7fc ldr r0, [sp, 0x68] | r0 = var_68h;
0x0009a7fe ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0009a800 ldr r1, [r1, r0] | r1 = *((r1 + r0));
0x0009a802 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a804 str r1, [sp] | *(sp) = r1;
0x0009a806 movs r1, 0x17 | r1 = 0x17;
0x0009a808 bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x0009a80c cmp r0, 1 |
| if (r0 == 1) {
0x0009a80e beq.w 0x9a524 | goto label_5;
| }
0x0009a812 cmp r0, 2 |
0x0009a814 add.w r5, r5, 1 | r5++;
0x0009a818 itt eq |
| if (r0 != 2) {
0x0009a81a ldreq r2, [sp, 0x40] | r2 = var_40h;
| }
| if (r0 != 2) {
0x0009a81c moveq r3, -1 | r3 = -1;
| }
0x0009a820 add.w r6, r6, 0x10 | r6 += 0x10;
0x0009a824 it eq |
| if (r0 != 2) {
0x0009a826 streq r3, [r2, r7, lsl 2] | offset_1 = r7 << 2;
| *((r2 + offset_1)) = r3;
| }
0x0009a82a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009a82c ldr r3, [r3] | r3 = *(r3);
0x0009a82e cmp r5, r3 |
| if (r5 < r3) {
0x0009a830 blt.w 0x9a71e | goto label_6;
| }
0x0009a834 ldr r3, [sp, 0xac] | r3 = var_ach;
0x0009a836 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009a838 ldr.w fp, [sp, 0x74] | fp = var_74h;
0x0009a83c ldr.w r8, [sp, 0x84] | r8 = var_84h;
0x0009a840 add r3, r2 | r3 += r2;
0x0009a842 str r3, [sp, 0x98] | var_98h = r3;
0x0009a844 str r3, [sp, 0xb0] | var_b0h = r3;
| label_49:
0x0009a846 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009a848 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x0009a84a tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0009a84e bne.w 0x9aed2 | goto label_106;
| }
0x0009a852 ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
| label_25:
0x0009a856 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009a858 cmp r2, 1 |
0x0009a85a mov.w r0, -1 | r0 = -1;
0x0009a85e ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x0009a860 it ne |
| if (r2 == 1) {
0x0009a862 movne r0, 0 | r0 = 0;
| }
0x0009a864 ldr r3, [r3] | r3 = *(r3);
0x0009a866 ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x0009a868 clz r3, r2 | r3 &= r2;
0x0009a86c lsrs r3, r3, 5 | r3 >>= 5;
0x0009a86e str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0009a870 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x0009a872 ands.w r3, r3, r1, lsr 14 | r3 &= (r1 >> 14);
| if (r3 != r3) {
0x0009a876 bne.w 0x9afe6 | goto label_107;
| }
| label_30:
0x0009a87a movs r3, 0 | r3 = 0;
0x0009a87c str r3, [sp, 0x68] | var_68h = r3;
| label_29:
0x0009a87e ldr r3, [sp, 0x148] | r3 = var_148h;
0x0009a880 cmp r3, 5 |
0x0009a882 itt eq |
| if (r3 != 5) {
0x0009a884 moveq r3, 1 | r3 = 1;
| }
| if (r3 != 5) {
0x0009a886 streq r3, [sp, 0xcc] | var_cch = r3;
| }
0x0009a888 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009a88a ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x0009a88c cmp r4, 0 |
| if (r4 == 0) {
0x0009a88e beq.w 0x9b77c | goto label_108;
| }
0x0009a892 ldr.w r3, [pc, 0x540] | r3 = *(0x0009add4);
0x0009a896 mov.w sb, 0 | sb = 0;
0x0009a89a ldr r2, [sp, 0x68] | r2 = var_68h;
0x0009a89c ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x0009a89e add r3, pc | r3 += pc;
0x0009a8a0 str.w r8, [sp, 0x84] | __asm ("str.w r8, [var_84h]");
0x0009a8a4 str r3, [sp, 0x48] | var_48h = r3;
0x0009a8a6 ldr.w r3, [pc, 0x530] | r3 = *(0x0009add8);
0x0009a8aa add r3, pc | r3 += pc;
0x0009a8ac str r3, [sp, 0x74] | var_74h = r3;
0x0009a8ae ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009a8b0 cmp r2, 1 |
0x0009a8b2 it le |
| if (r2 <= 1) {
0x0009a8b4 cmple r3, 0 | __asm ("cmple r3, 0");
| }
0x0009a8b6 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x0009a8b8 ite ne |
| if (r2 == 1) {
0x0009a8ba movne r3, 1 | r3 = 1;
| }
| if (r2 != 1) {
0x0009a8bc moveq r3, 0 | r3 = 0;
| }
0x0009a8be mov r8, r3 | r8 = r3;
0x0009a8c0 sub.w sl, r2, 4 | sl = r2 - 4;
| do {
0x0009a8c4 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009a8c6 cmp r3, r4 |
0x0009a8c8 ite ne |
| if (r3 == r4) {
0x0009a8ca movne r2, r8 | r2 = r8;
| }
| if (r3 != r4) {
0x0009a8cc orreq r2, r8, 1 | r2 = r8 | 1;
| }
0x0009a8d0 cmp r2, 0 |
| if (r2 == 0) {
0x0009a8d2 beq.w 0x9abd2 | goto label_109;
| }
| label_15:
0x0009a8d6 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x0009a8d8 ldrh r1, [r4, 0x34] | r1 = *((r4 + 0x34));
0x0009a8da adds r2, 1 | r2++;
0x0009a8dc add r1, r2 | r1 += r2;
0x0009a8de str r1, [r7, 0x2c] | *((r7 + 0x2c)) = r1;
| label_27:
0x0009a8e0 cmp r2, 0 |
| if (r2 == 0) {
0x0009a8e2 beq.w 0x9ac30 | goto label_110;
| }
| label_16:
0x0009a8e6 ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x0009a8e8 add.w sb, sb, 1 | sb++;
0x0009a8ec str r2, [sl, 4]! | *((sl += 4)) = r2;
0x0009a8f0 cmp r4, 0 |
0x0009a8f2 bne 0x9a8c4 |
| } while (r4 != 0);
0x0009a8f4 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009a8f6 ldr.w r8, [sp, 0x84] | r8 = var_84h;
0x0009a8fa add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
0x0009a8fe str r3, [sp, 0xbc] | var_bch = r3;
| label_48:
0x0009a900 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009a902 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0009a904 adds r3, 1 | r3++;
0x0009a906 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x0009a908 ldr r2, [sp, 0xbc] | r2 = var_bch;
0x0009a90a str r3, [r2] | *(r2) = r3;
0x0009a90c ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0009a90e cmp r3, 0 |
| if (r3 != 0) {
0x0009a910 bne.w 0x9b210 | goto label_111;
| }
| label_36:
0x0009a914 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009a916 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
| if (r3 == 0) {
0x0009a918 cbnz r3, 0x9a928 |
0x0009a91a ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009a91c ldrb.w r3, [r2, 0x96] | r3 = *((r2 + 0x96));
0x0009a920 orr r3, r3, 0x10 | r3 |= 0x10;
0x0009a924 strb.w r3, [r2, 0x96] | *((r2 + 0x96)) = r3;
| }
0x0009a928 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0009a92a ldr r2, [sp, 0x68] | r2 = var_68h;
0x0009a92c ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0009a92e orrs r3, r2 | r3 |= r2;
0x0009a930 mov r2, r8 | r2 = r8;
0x0009a932 ite ne |
| if (r3 == r2) {
0x0009a934 movne r3, 1 | r3 = 1;
| }
| if (r3 != r2) {
0x0009a936 moveq r3, 0 | r3 = 0;
| }
0x0009a938 mov r1, r3 | r1 = r3;
0x0009a93a mov r0, r4 | r0 = r4;
0x0009a93c mov r5, r3 | r5 = r3;
0x0009a93e str r3, [sp, 0xc4] | x = r3;
0x0009a940 bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x0009a944 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009a946 ldrb.w r1, [r2, 0x2b] | r1 = *((r2 + 0x2b));
0x0009a94a cmp r1, 1 |
| if (r1 == 1) {
0x0009a94c beq.w 0x9b202 | goto label_112;
| }
0x0009a950 ldr r0, [sp, 0xbc] | r0 = var_bch;
0x0009a952 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0009a954 ldrsh.w r2, [r2, 0x22] | r2 = *((r2 + 0x22));
0x0009a958 ldr r4, [r0] | r4 = *(r0);
0x0009a95a mov r0, r5 | r0 = r5;
0x0009a95c ldr r5, [sp, 0xac] | r5 = var_ach;
0x0009a95e add.w fp, r3, 1 |
0x0009a962 orrs r0, r5 | r0 |= r5;
| if (r0 == r5) {
0x0009a964 beq.w 0x9b1ee | goto label_113;
| }
0x0009a968 adds r3, 2 | r3 += 2;
0x0009a96a ldr r0, [sp, 0xc4] | r0 = x;
0x0009a96c str r3, [sp, 0xb4] | var_b4h = r3;
0x0009a96e ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009a970 cmp r3, 0 |
0x0009a972 it ne |
| if (r3 == 0) {
0x0009a974 orrne r0, r0, 1 | r0 |= 1;
| }
0x0009a978 add.w r3, fp, r2 | r3 = fp + r2;
0x0009a97c cmp r0, 0 |
| if (r0 == 0) {
0x0009a97e beq.w 0x9b62c | goto label_114;
| }
| label_77:
0x0009a982 adds r3, 1 | r3++;
0x0009a984 str r3, [sp, 0x74] | var_74h = r3;
| label_34:
0x0009a986 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009a988 add r2, r3 | r2 += r3;
0x0009a98a adds r3, 1 | r3++;
0x0009a98c str r3, [sp, 0x9c] | var_9ch = r3;
0x0009a98e str r2, [r0, 0x2c] | *((r0 + 0x2c)) = r2;
| label_35:
0x0009a990 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009a992 cmp r3, 2 |
| if (r3 == 2) {
0x0009a994 beq.w 0x9b1b2 | goto label_115;
| }
0x0009a998 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009a99a cmp r3, 0 |
| if (r3 == 0) {
0x0009a99c beq.w 0x9b1d6 | goto label_116;
| }
| label_33:
0x0009a9a0 cmp r1, 1 |
| if (r1 == 1) {
0x0009a9a2 beq.w 0x9b834 | goto label_117;
| }
0x0009a9a6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009a9a8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009a9aa ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0009a9ac ldr r1, [r2, 0x38] | r1 = *((r2 + 0x38));
0x0009a9ae ands r3, r3, 1 | r3 &= 1;
0x0009a9b2 add.w sl, r1, -1 | sl = r1 + -1;
0x0009a9b6 str r1, [sp, 0xc0] | var_c0h = r1;
0x0009a9b8 str.w sl, [r2, 0x38] | __asm ("str.w sl, [r2, 0x38]");
| if (r3 == r3) {
0x0009a9bc beq.w 0x9aeb0 | goto label_74;
| }
0x0009a9c0 ldr r3, [r2, 0x78] | r3 = *((r2 + 0x78));
0x0009a9c2 cmp r3, 0 |
| if (r3 == 0) {
0x0009a9c4 beq.w 0x9be06 | goto label_118;
| }
0x0009a9c8 movs r3, 0 | r3 = 0;
0x0009a9ca str r3, [sp, 0x90] | var_90h = r3;
| label_21:
0x0009a9cc ldr r3, [sp, 0x44] | r3 = var_44h;
| if (r3 == 0) {
0x0009a9ce cbnz r3, 0x9a9da |
0x0009a9d0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009a9d2 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009a9d4 lsls r5, r3, 0x18 | r5 = r3 << 0x18;
| if (r5 >= r3) {
0x0009a9d6 bpl.w 0x9b21e | goto label_119;
| }
| }
0x0009a9da ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009a9dc cmp r3, 0 |
| if (r3 == 0) {
0x0009a9de beq.w 0x9b52a | goto label_120;
| }
0x0009a9e2 ldrsh.w r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0009a9e6 strd r3, r3, [sp, 0x84] | __asm ("strd r3, r3, [sp, 0x84]");
| label_42:
0x0009a9ea ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009a9ec ldr r3, [sp, 0x84] | r3 = var_84h;
0x0009a9ee ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009a9f0 ldr r6, [r2, 0x2c] | r6 = *((r2 + 0x2c));
0x0009a9f2 adds r3, r6, r3 | r3 = r6 + r3;
0x0009a9f4 adds r6, 1 | r6++;
0x0009a9f6 add r3, r1 | r3 += r1;
0x0009a9f8 adds r7, r3, 1 | r7 = r3 + 1;
0x0009a9fa ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009a9fc str r7, [r2, 0x2c] | *((r2 + 0x2c)) = r7;
0x0009a9fe cmp r3, 0 |
| if (r3 == 0) {
0x0009aa00 beq.w 0x9b2e6 | goto label_121;
| }
0x0009aa04 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009aa06 cmp r3, 0 |
| if (r3 == 0) {
0x0009aa08 beq.w 0x9bdfc | goto label_122;
| }
0x0009aa0c movs r3, 0 | r3 = 0;
0x0009aa0e str r3, [sp, 0x48] | var_48h = r3;
| label_70:
0x0009aa10 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009aa12 mov r7, r6 | r7 = r6;
0x0009aa14 mov.w sb, 0 | sb = 0;
0x0009aa18 str.w sb, [sp, 0xa0] | __asm ("str.w sb, [var_a0h]");
0x0009aa1c ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0009aa1e cmp r3, 0 |
0x0009aa20 it eq |
| if (r3 != 0) {
0x0009aa22 moveq r3, r2 | r3 = r2;
| }
0x0009aa24 movs r2, 1 | r2 = 1;
0x0009aa26 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0009aa28 str r2, [sp, 0xb8] | var_b8h = r2;
| label_37:
0x0009aa2a ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009aa2c cmp r3, 0 |
| if (r3 == 0) {
0x0009aa2e beq.w 0x9b42c | goto label_123;
| }
| label_46:
0x0009aa32 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009aa34 cmp r3, 0 |
| if (r3 == 0) {
0x0009aa36 beq.w 0x9b2de | goto label_124;
| }
0x0009aa3a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009aa3c cmp r3, 0 |
| if (r3 != 0) {
0x0009aa3e bne.w 0x9be3e | goto label_125;
| }
0x0009aa42 str r3, [sp, 0x70] | var_70h = r3;
| label_45:
0x0009aa44 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009aa46 ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x0009aa48 cbz r3, 0x9aa52 |
0x0009aa4a ldr r1, [sp, 0x64] | r1 = var_64h;
0x0009aa4c ldr r2, [sp, 0x74] | r2 = var_74h;
0x0009aa4e bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
| }
| label_41:
0x0009aa52 movs r3, 0 | r3 = 0;
0x0009aa54 ldr r2, [sp, 0x74] | r2 = var_74h;
0x0009aa56 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009aa58 movs r1, 0xc | r1 = 0xc;
0x0009aa5a str r3, [sp] | *(sp) = r3;
0x0009aa5c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_38:
0x0009aa60 ldr r3, [sp, 0xc4] | r3 = x;
0x0009aa62 ldr r2, [sp, 0xac] | r2 = var_ach;
0x0009aa64 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0009aa66 beq.w 0x9acd6 | goto label_126;
| }
0x0009aa6a ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009aa6c cmp r3, 0 |
| if (r3 != 0) {
0x0009aa6e bne.w 0x9b094 | goto label_127;
| }
| label_32:
0x0009aa72 movs r4, 0 | r4 = 0;
| label_31:
0x0009aa74 ldr r3, [sp, 0x148] | r3 = var_148h;
0x0009aa76 ldr r6, [sp, 0x34] | r6 = var_34h;
0x0009aa78 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009aa7a str r3, [sp, 8] | var_8h = r3;
0x0009aa7c movs r3, 3 | r3 = 3;
0x0009aa7e str r3, [sp] | *(sp) = r3;
0x0009aa80 movs r3, 0 | r3 = 0;
0x0009aa82 ldr r1, [sp, 0x80] | r1 = var_80h;
0x0009aa84 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009aa86 str r6, [sp, 4] | var_4h = r6;
0x0009aa88 bl 0x9c6cc | fcn_0009c6cc (r0, r1, r2, r3, r4, r5, r6);
0x0009aa8c ldrsh.w r3, [r6, 0x22] | r3 = *((r6 + 0x22));
0x0009aa90 orr.w r5, r0, r4 | r5 = r0 | r4;
0x0009aa94 cmp r3, 0 |
| if (r3 <= 0) {
0x0009aa96 ble.w 0x9acb2 | goto label_128;
| }
0x0009aa9a movs r4, 0 | r4 = 0;
0x0009aa9c ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x0009aaa0 mov r6, r4 | r6 = r4;
0x0009aaa2 b 0x9aac0 | void (*0x9aac0)() ();
| label_101:
0x0009ab04 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009ab06 cmp r3, 0 |
| if (r3 != 0) {
0x0009ab08 bne.w 0x9ac94 | goto label_129;
| }
0x0009ab0c mov r0, sb | r0 = sb;
0x0009ab0e bl 0x34f9c | r0 = fcn_00034f9c (r0);
0x0009ab12 cmp r0, 0 |
| if (r0 == 0) {
0x0009ab14 beq.w 0x9ac94 | goto label_129;
| }
0x0009ab18 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0009ab1a movs r1, 1 | r1 = 1;
0x0009ab1c ldr.w r2, [fp] | r2 = *(fp);
0x0009ab20 mov.w r7, -1 | r7 = -1;
0x0009ab24 str r5, [sp, 0x78] | var_78h = r5;
0x0009ab26 str r3, [sp, 0x64] | var_64h = r3;
0x0009ab28 ldr r3, [pc, 0x2b0] |
0x0009ab2a str r1, [sp, 0x5c] | var_5ch = r1;
0x0009ab2c add r3, pc | r3 = 0x13590c;
0x0009ab2e b 0x9a7fa | goto label_7;
| label_100:
0x0009ab30 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0009ab32 add r0, sp, 0xf4 | r0 += var_f4h;
0x0009ab34 bl 0x48a9c | r0 = fcn_00048a9c (r0, r1);
0x0009ab38 cmp r0, 0 |
| if (r0 != 0) {
0x0009ab3a bne.w 0x9a524 | goto label_5;
| }
0x0009ab3e ldr.w sb, [r6, 0xc] | sb = *((r6 + 0xc));
0x0009ab42 b 0x9a75c | goto label_8;
| label_88:
0x0009ab44 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0009ab46 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| if (r3 == 0) {
0x0009ab48 cbz r3, 0x9ab52 | goto label_89;
| }
0x0009ab4a ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0009ab4c cmp r3, 0 |
| if (r3 != 0) {
0x0009ab4e bne.w 0x9a588 | goto label_9;
| }
| label_89:
0x0009ab52 movs r3, 0 | r3 = 0;
0x0009ab54 str r3, [sp, 0xc8] | var_c8h = r3;
0x0009ab56 str r3, [sp, 0x80] | var_80h = r3;
0x0009ab58 b 0x9a5a6 | goto label_10;
| label_99:
0x0009ab5a mov r8, r3 | r8 = r3;
0x0009ab5c b 0x9a754 | goto label_11;
| label_85:
0x0009ab5e ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009ab60 cmp r3, 0 |
| if (r3 == 0) {
0x0009ab62 beq.w 0x9a3dc | goto label_1;
| }
0x0009ab66 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009ab68 str r2, [sp, 0xd4] | var_d4h = r2;
0x0009ab6a ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009ab6c str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0009ab70 b 0x9a3dc | goto label_1;
| label_91:
0x0009ab72 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009ab74 cmp r3, 0 |
| if (r3 == 0) {
0x0009ab76 beq.w 0x9a3dc | goto label_1;
| }
0x0009ab7a ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009ab7c str r4, [sp, 0xd4] | var_d4h = r4;
0x0009ab7e str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0009ab82 b 0x9a3dc | goto label_1;
| label_92:
0x0009ab84 cmp r3, 0 |
| if (r3 == 0) {
0x0009ab86 beq.w 0x9aeb4 | goto label_130;
| }
0x0009ab8a ldr r2, [sp, 0xa8] | r2 = var_a8h;
0x0009ab8c str r2, [sp, 0x58] | var_58h = r2;
0x0009ab8e b 0x9a626 | goto label_12;
| label_103:
0x0009ab90 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0009ab92 str r5, [sp, 0x78] | var_78h = r5;
0x0009ab94 str r3, [sp, 0x64] | var_64h = r3;
0x0009ab96 movs r3, 1 | r3 = 1;
0x0009ab98 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009ab9a b 0x9a7e2 | goto label_13;
| label_104:
0x0009ab9c movs r3, 1 | r3 = 1;
0x0009ab9e str r3, [sp, 0xac] | var_ach = r3;
0x0009aba0 b 0x9a7e2 | goto label_13;
| label_97:
0x0009aba2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009aba4 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0009aba6 cmp r3, 0 |
| if (r3 == 0) {
0x0009aba8 beq.w 0x9aec2 | goto label_131;
| }
| label_23:
0x0009abac ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009abae bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x0009abb2 str r0, [sp, 0x4c] | var_4ch = r0;
0x0009abb4 cmp r0, 0 |
| if (r0 != 0) {
0x0009abb6 bne.w 0x9a6e4 | goto label_14;
| }
0x0009abba ldr r3, [sp, 0xd4] | r3 = var_d4h;
| if (r3 != 0) {
0x0009abbc cbz r3, 0x9abc8 |
0x0009abbe ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009abc0 str r2, [sp, 0xd4] | var_d4h = r2;
0x0009abc2 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009abc4 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
| }
0x0009abc8 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009abca ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009abcc bl 0x2d144 | fcn_0002d144 (r0, r1);
0x0009abd0 b 0x9a3dc | goto label_1;
| label_109:
0x0009abd2 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
| if (r1 == 0) {
0x0009abd4 cbz r1, 0x9ac04 | goto label_132;
| }
0x0009abd6 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0009abd8 add r0, sp, 0xd8 | r0 += var_d8h;
0x0009abda str r2, [sp, 0xd8] | var_d8h = r2;
0x0009abdc strd r2, r2, [sp, 0xe0] | __asm ("strd r2, r2, [sp, 0xe0]");
0x0009abe0 str r3, [sp, 0xdc] | var_dch = r3;
0x0009abe2 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009abe4 strd r2, r2, [sp, 0xe8] | __asm ("strd r2, r2, [sp, 0xe8]");
0x0009abe8 str r3, [sp, 0xf0] | var_f0h = r3;
0x0009abea bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0009abee ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009abf0 ldrh.w r2, [sp, 0xec] | r2 = var_ech;
| if (r3 == 0) {
0x0009abf4 cbnz r3, 0x9abfe |
0x0009abf6 bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x0009abfa lsls r2, r2, 0x10 | r2 <<= 0x10;
0x0009abfc lsrs r2, r2, 0x10 | r2 >>= 0x10;
| }
0x0009abfe cmp r2, 0 |
| if (r2 != 0) {
0x0009ac00 bne.w 0x9a8d6 | goto label_15;
| }
| label_132:
0x0009ac04 ldrh r2, [r4, 0x32] | r2 = *((r4 + 0x32));
| if (r2 == 0) {
0x0009ac06 cbz r2, 0x9ac30 | goto label_110;
| }
0x0009ac08 movs r5, 0 | r5 = 0;
0x0009ac0a add r6, sp, 0xd8 | r6 += var_d8h;
0x0009ac0c mov r2, r5 | r2 = r5;
| do {
0x0009ac0e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0009ac10 ldrsh.w r3, [r3, r5, lsl 1] | offset_2 = r5 << 1;
| r3 = *((r3 + offset_2));
0x0009ac14 cmp r3, 0 |
| if (r3 < 0) {
0x0009ac16 blt 0x9ac3c | goto label_133;
| }
0x0009ac18 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009ac1a ldr.w r3, [r1, r3, lsl 2] | offset_3 = r3 << 2;
| r3 = *((r1 + offset_3));
0x0009ac1e mvns r3, r3 | r3 = ~r3;
0x0009ac20 lsrs r3, r3, 0x1f | r3 >>= 0x1f;
| label_17:
0x0009ac22 cmp r3, 0 |
| if (r3 != 0) {
0x0009ac24 bne.w 0x9afc6 | goto label_134;
| }
0x0009ac28 ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0009ac2a adds r5, 1 | r5++;
0x0009ac2c cmp r5, r3 |
0x0009ac2e blt 0x9ac0e |
| } while (r5 < r3);
| label_110:
0x0009ac30 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009ac32 movs r2, 0 | r2 = 0;
0x0009ac34 adds r1, r3, 1 | r1 = r3 + 1;
0x0009ac36 strb.w r2, [r1, sb] | *((r1 + sb)) = r2;
0x0009ac3a b 0x9a8e6 | goto label_16;
| label_133:
0x0009ac3c ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0009ac3e add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x0009ac42 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0009ac44 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009ac46 str r2, [r6] | *(r6) = r2;
0x0009ac48 strd r2, r2, [r6, 8] | __asm ("strd r2, r2, [r6, 8]");
0x0009ac4c strd r2, r2, [r6, 0x10] | __asm ("strd r2, r2, [r6, 0x10]");
0x0009ac50 str r3, [sp, 0xdc] | var_dch = r3;
0x0009ac52 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009ac54 str r3, [sp, 0xf0] | var_f0h = r3;
0x0009ac56 mov r3, r1 | r3 = r1;
| if (r1 != 0) {
0x0009ac58 cbz r1, 0x9ac66 |
0x0009ac5a mov r0, r6 | r0 = r6;
0x0009ac5c bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0009ac60 ldrh.w r3, [sp, 0xec] | r3 = var_ech;
0x0009ac64 movs r2, 0 | r2 = 0;
| }
0x0009ac66 ldr r1, [sp, 0x5c] | r1 = var_5ch;
| if (r1 == 0) {
0x0009ac68 cbnz r1, 0x9ac72 |
0x0009ac6a bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0009ac6e lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0009ac70 lsrs r3, r3, 0x10 | r3 >>= 0x10;
| }
0x0009ac72 subs r3, 0 |
0x0009ac74 it ne |
| if (r3 == 0) {
0x0009ac76 movne r3, 1 | r3 = 1;
| }
0x0009ac78 b 0x9ac22 | goto label_17;
| label_87:
0x0009ac7a ldr.w r8, [sp, 0x44] | r8 = var_44h;
0x0009ac7e b 0x9a57e | goto label_18;
| label_96:
0x0009ac80 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009ac82 cmp r3, 0 |
| if (r3 == 0) {
0x0009ac84 beq.w 0x9a3dc | goto label_1;
| }
0x0009ac88 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009ac8a str r0, [sp, 0xd4] | var_d4h = r0;
0x0009ac8c str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0009ac90 b.w 0x9a3dc | goto label_1;
| label_129:
0x0009ac94 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0009ac96 mov r2, sb | r2 = sb;
0x0009ac98 ldr r1, [pc, 0x144] |
0x0009ac9a mov r0, r4 | r0 = r4;
0x0009ac9c add r1, pc | r1 = 0x135a80;
0x0009ac9e bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009aca2 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009aca4 movs r2, 1 | r2 = 1;
0x0009aca6 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009aca8 strb r2, [r4, 0x11] | *((r4 + 0x11)) = r2;
0x0009acaa cmp r3, 0 |
| if (r3 != 0) {
0x0009acac bne.w 0x9a52a | goto label_19;
| }
0x0009acb0 b 0x9a534 | goto label_20;
| label_128:
0x0009acb2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009acb4 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009acb6 eor r3, r3, 1 | r3 ^= 1;
0x0009acba cmp r2, 0 |
0x0009acbc ite ne |
| if (r2 == 0) {
0x0009acbe movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x0009acc0 andeq r3, r3, 1 | r3 &= 1;
| }
| if (r3 != 0) {
0x0009acc4 cbz r3, 0x9acd6 |
| }
| label_126:
0x0009acd6 ldr r3, [sp, 0x148] | r3 = var_148h;
0x0009acd8 ldr r5, [sp, 0x34] | r5 = var_34h;
0x0009acda ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009acdc str r3, [sp, 8] | var_8h = r3;
0x0009acde movs r3, 1 | r3 = 1;
0x0009ace0 ldr r1, [sp, 0x80] | r1 = var_80h;
0x0009ace2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009ace4 str r5, [sp, 4] | var_4h = r5;
0x0009ace6 str r3, [sp] | *(sp) = r3;
0x0009ace8 bl 0x9c6cc | fcn_0009c6cc (r0, r1, r2, r3, r4, r5, r6);
0x0009acec str r0, [sp, 0x5c] | var_5ch = r0;
0x0009acee ldrsh.w r0, [r5, 0x22] | r0 = *((r5 + 0x22));
0x0009acf2 cmp r0, 0 |
| if (r0 <= 0) {
0x0009acf4 ble 0x9ade4 | goto label_135;
| }
0x0009acf6 ldr r6, [sp, 0x9c] | r6 = var_9ch;
0x0009acf8 movs r4, 0 | r4 = 0;
0x0009acfa b 0x9ad08 |
0x0009ad08 ldrsh.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0009ad0c cmp r3, r4 |
| if (r3 == r4) {
0x0009ad0e beq 0x9ad56 | void (*0x9ad56)() ();
| }
| label_135:
0x0009ade4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009ade6 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009ade8 tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0009adec bne.w 0x9b534 | goto label_136;
| }
| label_43:
0x0009adf0 ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x0009adf2 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x0009adf4 bmi.w 0x9b564 | void (*0x9b564)() ();
| }
| label_50:
0x0009ae90 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0009ae92 cmp r3, 0 |
| if (r3 != 0) {
0x0009ae94 bne.w 0x9b612 | goto label_137;
| }
0x0009ae98 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009ae9a cmp r3, 0 |
| if (r3 == 0) {
0x0009ae9c beq.w 0x9b60c | goto label_60;
| }
0x0009aea0 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0009aea2 str r2, [sp, 0xd4] | var_d4h = r2;
| label_61:
0x0009aea4 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0009aea6 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009aea8 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0009aeac b.w 0x9a534 | goto label_20;
| label_74:
0x0009aeb0 str r3, [sp, 0x90] | var_90h = r3;
0x0009aeb2 b 0x9a9cc | goto label_21;
| label_130:
0x0009aeb4 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009aeb6 str r5, [sp, 0x58] | var_58h = r5;
0x0009aeb8 str r5, [sp, 0xa4] | var_a4h = r5;
0x0009aeba str r3, [sp, 0x54] | var_54h_2 = r3;
0x0009aebc movs r3, 2 | r3 = 2;
0x0009aebe b.w 0x9a64a | goto label_22;
| label_131:
0x0009aec2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009aec4 ldr r3, [r2] | r3 = *(r2);
0x0009aec6 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0009aec8 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x0009aeca itt pl |
| if (r1 < r3) {
0x0009aecc movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x0009aece strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x0009aed0 b 0x9abac | goto label_23;
| label_106:
0x0009aed2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009aed4 movw sb, 0x869f |
0x0009aed8 ldr.w sl, [pc, 0xb00] | sl = *(0x0009b9dc);
0x0009aedc movt sb, 1 | sb = 0x1869f;
0x0009aee0 str.w fp, [sp, 0x68] | __asm ("str.w fp, [var_68h]");
0x0009aee4 ldrsh.w r0, [r3, 0x22] | r0 = *((r3 + 0x22));
0x0009aee6 movs r2, r4 | r2 = r4;
0x0009aee8 ldrb.w r2, [r3, 0x2b] | r2 = *((r3 + 0x2b));
0x0009aeec add sl, pc | sl += pc;
0x0009aeee str.w r8, [sp, 0x74] | __asm ("str.w r8, [var_74h]");
| label_24:
0x0009aef2 cmp r0, 0 |
| if (r0 <= 0) {
0x0009aef4 ble 0x9af8e | goto label_138;
| }
0x0009aef6 add.w fp, sp, 0xd8 |
0x0009aefa ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009aefc str.w fp, [sp, 0x48] | __asm ("str.w fp, [var_48h]");
0x0009af00 mov.w r8, 0 | r8 = 0;
0x0009af04 ldr.w fp, [sp, 0x34] | fp = var_34h;
0x0009af08 mov r4, r8 | r4 = r8;
0x0009af0a subs r6, r3, 4 | r6 = r3 - 4;
0x0009af0c mov r5, r8 | r5 = r8;
0x0009af0e mov r1, r2 | r1 = r2;
| do {
0x0009af10 ldr r3, [r6, 4]! | r3 = *((r6 += 4));
0x0009af14 cmp r3, 0 |
| if (r3 < 0) {
0x0009af16 bge 0x9af7e |
0x0009af18 ldr.w r3, [fp, 4] | r3 = var_dch;
0x0009af1c add.w ip, r3, r5 |
0x0009af20 ldrh.w r3, [ip, 0xa] | r3 = *((ip + 0xa));
0x0009af24 and r3, r3, 0x60 | r3 &= 0x60;
| if (r3 == 0) {
0x0009af28 cbz r3, 0x9af7e | goto label_26;
| }
0x0009af2a ldrh.w r2, [ip, 8] | r2 = *((ip + 8));
| if (r2 == 0) {
0x0009af2e cbz r2, 0x9af7e | goto label_26;
| }
| if (r1 != 0) {
0x0009af30 cbnz r1, 0x9af7e | goto label_26;
| }
0x0009af32 ldr.w r3, [fp, 0x34] | r3 = *(arg_1ch);
| if (r3 == 0) {
0x0009af36 cbz r3, 0x9af7e | goto label_26;
| }
0x0009af38 ldr r7, [r3] | r7 = *(r3);
0x0009af3a cmp r7, r2 |
| if (r7 < r2) {
0x0009af3c blt 0x9af7e | goto label_26;
| }
0x0009af3e add.w ip, r3, r2, lsl 4 |
0x0009af42 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009af44 ldr r3, [ip, -0x8] | r3 = *((ip - 0x8));
0x0009af48 str r1, [r2] | *(r2) = r1;
0x0009af4a strd r1, r1, [r2, 8] | __asm ("strd r1, r1, [r2, 8]");
0x0009af4e strd r1, r1, [r2, 0x10] | __asm ("strd r1, r1, [r2, 0x10]");
0x0009af52 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009af54 str.w sl, [sp, 0xdc] | __asm ("str.w sl, [var_dch]");
0x0009af58 str r2, [sp, 0xf0] | var_f0h = r2;
| if (r3 != 0) {
0x0009af5a cbz r3, 0x9af76 |
0x0009af5c mov r1, r3 | r1 = r3;
0x0009af5e ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009af60 bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0009af64 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009af66 ldrh.w r3, [sp, 0xec] | r3 = var_ech;
| if (r2 == 0) {
0x0009af6a cbnz r2, 0x9af74 |
0x0009af6c bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0009af70 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0009af72 lsrs r3, r3, 0x10 | r3 >>= 0x10;
| }
| if (r3 != 0) {
0x0009af74 cbnz r3, 0x9af98 | goto label_139;
| }
| }
0x0009af76 ldrb.w r1, [fp, 0x2b] | r1 = var_2bh;
0x0009af7a ldrsh.w r0, [fp, 0x22] | r0 = var_22h;
| }
| label_26:
0x0009af7e adds r4, 1 | r4++;
0x0009af80 adds r5, 0xc | r5 += 0xc;
0x0009af82 cmp r4, r0 |
0x0009af84 blt 0x9af10 |
| } while (r4 < r0);
0x0009af86 mov r2, r1 | r2 = r1;
0x0009af88 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009af8c bne 0x9aef2 | goto label_24;
| }
| label_138:
0x0009af8e ldr.w fp, [sp, 0x68] | fp = var_68h;
0x0009af92 ldr.w r8, [sp, 0x74] | r8 = var_74h;
0x0009af96 b 0x9a856 | goto label_25;
| label_139:
0x0009af98 str.w sb, [r6] | __asm ("str.w sb, [r6]");
0x0009af9c mov.w r8, 1 | r8 = 1;
0x0009afa0 ldrsh.w r0, [fp, 0x22] | r0 = var_22h;
0x0009afa4 ldrb.w r1, [fp, 0x2b] | r1 = var_2bh;
0x0009afa8 b 0x9af7e | goto label_26;
| label_94:
0x0009afaa ldr r5, [sp, 0xa8] | r5 = var_a8h;
0x0009afac movs r3, 2 | r3 = 2;
0x0009afae ldr r2, [sp, 0x70] | r2 = var_70h;
0x0009afb0 str r5, [sp, 0x58] | var_58h = r5;
0x0009afb2 str r2, [sp, 0x54] | var_54h_2 = r2;
0x0009afb4 str r5, [sp, 0xa4] | var_a4h = r5;
0x0009afb6 b.w 0x9a64a | goto label_22;
| label_86:
0x0009afba mov.w r8, 0x8000 |
0x0009afbe movt r8, 0xffff | r8 = 0x-8000;
0x0009afc2 b.w 0x9a57e | goto label_18;
| label_134:
0x0009afc6 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x0009afc8 ldr r3, [sp, 0x148] | r3 = var_148h;
0x0009afca ldrh r1, [r4, 0x34] | r1 = *((r4 + 0x34));
0x0009afcc adds r2, 1 | r2++;
0x0009afce cmp r3, 0xb |
0x0009afd0 add r1, r2 | r1 += r2;
0x0009afd2 str r1, [r7, 0x2c] | *((r7 + 0x2c)) = r1;
| if (r3 != 0xb) {
0x0009afd4 bne.w 0x9a8e0 | goto label_27;
| }
0x0009afd8 ldrb.w r1, [r4, 0x36] | r1 = *((r4 + 0x36));
0x0009afdc cmp r1, 5 |
0x0009afde itt eq |
| if (r1 != 5) {
0x0009afe0 moveq r1, 1 | r1 = 1;
| }
| if (r1 != 5) {
0x0009afe2 streq r1, [sp, 0xcc] | var_cch = r1;
| }
0x0009afe4 b 0x9a8e0 | goto label_27;
| label_107:
0x0009afe6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009afe8 ldr r6, [r3, 0x30] | r6 = *((r3 + 0x30));
0x0009afea ldr.w sb, [r3] | sb = *(r3);
0x0009afee cmp r6, 0 |
| if (r6 == 0) {
0x0009aff0 beq.w 0x9b73a | goto label_140;
| }
0x0009aff4 ldr r5, [sp, 0x34] | r5 = var_34h;
0x0009aff6 movs r4, 0 | r4 = 0;
0x0009aff8 ldr r7, [sp, 0x40] | r7 = var_40h;
0x0009affa movs r3, 1 | r3 = 1;
0x0009affc ldr.w sl, [sp, 0x98] | sl = var_98h;
0x0009b000 str r3, [sp, 0x68] | var_68h = r3;
| label_28:
0x0009b002 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x0009b004 cmp r1, 0 |
0x0009b006 itt gt |
| if (r1 <= 0) {
0x0009b008 movgt r3, 0 | r3 = 0;
| }
| if (r1 <= 0) {
0x0009b00a addgt r0, r6, 0x24 | r0 = r6 + 0x24;
| }
| if (r1 > 0) {
0x0009b00e bgt 0x9b032 | goto label_141;
| }
0x0009b010 b 0x9b054 | goto label_142;
| do {
0x0009b012 ldrsh.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x0009b016 cmp.w sl, 0 |
0x0009b01a sub.w r2, r2, ip | r2 -= ip;
0x0009b01e clz r2, r2 | r2 &= r2;
0x0009b022 lsr.w r2, r2, 5 | r2 >>= 5;
0x0009b026 it eq |
| if (sl != 0) {
0x0009b028 moveq r2, 0 | r2 = 0;
| }
| if (r2 != 0) {
0x0009b02a cbnz r2, 0x9b03e | goto label_143;
| }
0x0009b02c adds r3, 1 | r3++;
0x0009b02e cmp r3, r1 |
| if (r3 == r1) {
0x0009b030 beq 0x9b054 | goto label_142;
| }
| label_141:
0x0009b032 ldr.w ip, [r0, r3, lsl 3] | offset_4 = r3 << 3;
| ip = *((r0 + offset_4));
0x0009b036 ldr.w r2, [r7, ip, lsl 2] | offset_5 = ip << 2;
| r2 = *((r7 + offset_5));
0x0009b03a cmp r2, 0 |
0x0009b03c blt 0x9b012 |
| } while (r2 < 0);
| label_143:
0x0009b03e ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0009b040 mov r0, sb | r0 = sb;
0x0009b042 bl 0x31abc | fcn_00031abc (r0, r1);
0x0009b046 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009b048 cmp r0, 0 |
0x0009b04a mov.w r4, 1 | r4 = 1;
0x0009b04e it eq |
| if (r0 != 0) {
0x0009b050 moveq r3, 2 | r3 = 2;
| }
0x0009b052 str r3, [sp, 0x68] | var_68h = r3;
| label_142:
0x0009b054 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0009b056 cmp r6, 0 |
| if (r6 != 0) {
0x0009b058 bne 0x9b002 | goto label_28;
| }
0x0009b05a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b05c mov r2, r6 | r2 = r6;
0x0009b05e mov r1, sb | r1 = sb;
0x0009b060 ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x0009b062 adds r0, 0x38 | r0 += 0x38;
0x0009b064 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x0009b068 ldr r5, [r0, 8] | r5 = *((r0 + 8));
| if (r5 == 0) {
0x0009b06a cbz r5, 0x9b08a | goto label_144;
| }
| do {
| label_47:
0x0009b06c ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0009b06e mov r1, r5 | r1 = r5;
0x0009b070 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009b072 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009b074 bl 0x2dafc | r0 = fcn_0002dafc (r0, r1, r2, r3, r4);
| if (r0 != 0) {
0x0009b078 cbz r0, 0x9b084 |
0x0009b07a ldrb r3, [r5, 0x1a] | r3 = *((r5 + 0x1a));
0x0009b07c cmp r3, 0 |
| if (r3 != 0) {
0x0009b07e bne.w 0x9b758 | goto label_145;
| }
0x0009b082 movs r4, 1 | r4 = 1;
| }
0x0009b084 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x0009b086 cmp r5, 0 |
0x0009b088 bne 0x9b06c |
| } while (r5 != 0);
| label_144:
0x0009b08a cmp r4, 0 |
| if (r4 != 0) {
0x0009b08c bne.w 0x9a87e | goto label_29;
| }
0x0009b090 b.w 0x9a87a | goto label_30;
| label_127:
0x0009b094 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b096 ldr r3, [r0] | r3 = *(r0);
0x0009b098 ldr r4, [r3, 0x20] | r4 = *((r3 + 0x20));
0x0009b09a and r4, r4, 0x4000 | r4 &= 0x4000;
0x0009b09e cmp r4, 0 |
| if (r4 == 0) {
0x0009b0a0 beq.w 0x9aa74 | goto label_31;
| }
0x0009b0a4 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009b0a6 ldrb.w r3, [r1, 0x2b] | r3 = *((r1 + 0x2b));
0x0009b0aa cmp r3, 0 |
| if (r3 != 0) {
0x0009b0ac bne.w 0x9aa72 | goto label_32;
| }
| label_115:
0x0009b1b2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b1b4 ldr r5, [sp, 0x34] | r5 = var_34h;
0x0009b1b6 ldr.w r3, [r0, 0xf8] | r3 = *((r0 + 0xf8));
0x0009b1ba ldr r2, [r5] | r2 = *(r5);
0x0009b1bc str r0, [sp, 0xd4] | var_d4h = r0;
0x0009b1be str r3, [sp, 0xd0] | var_d0h = r3;
0x0009b1c0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009b1c2 str.w r2, [r0, 0xf8] | __asm ("str.w r2, [r0, 0xf8]");
0x0009b1c6 cmp r3, 0 |
| if (r3 != 0) {
0x0009b1c8 bne.w 0x9a9a0 | goto label_33;
| }
0x0009b1cc ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_50h]");
0x0009b1d0 mov r1, r5 | r1 = r5;
0x0009b1d2 bl 0x8eef0 | fcn_0008eef0 (r0, r1, r2, r3, r4, r5, r6);
| label_116:
0x0009b1d6 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0009b1d8 add r0, sp, 0xf4 | r0 += var_f4h;
0x0009b1da bl 0x48a9c | r0 = fcn_00048a9c (r0, r1);
0x0009b1de cmp r0, 0 |
| if (r0 != 0) {
0x0009b1e0 bne.w 0x9a524 | goto label_5;
| }
0x0009b1e4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b1e6 ldrb.w r1, [r3, 0x2b] | r1 = *((r3 + 0x2b));
0x0009b1ea b.w 0x9a9a0 | goto label_33;
| label_113:
0x0009b1ee ldr r5, [sp, 0x98] | r5 = var_98h;
0x0009b1f0 cmp r5, 0 |
| if (r5 != 0) {
0x0009b1f2 bne.w 0x9be64 | goto label_146;
| }
0x0009b1f6 mov r3, fp | r3 = fp;
0x0009b1f8 str r5, [sp, 0xb4] | var_b4h = r5;
0x0009b1fa str.w fp, [sp, 0x74] | __asm ("str.w fp, [var_74h]");
0x0009b1fe b.w 0x9a986 | goto label_34;
| label_112:
0x0009b202 movs r4, 0 | r4 = 0;
0x0009b204 mov fp, r4 |
0x0009b206 str r4, [sp, 0xb4] | var_b4h = r4;
0x0009b208 str r4, [sp, 0x9c] | var_9ch = r4;
0x0009b20a str r4, [sp, 0x74] | var_74h = r4;
0x0009b20c b.w 0x9a990 | goto label_35;
| label_111:
0x0009b210 ldr r0, [sp, 0x94] | r0 = var_94h;
0x0009b212 mov r2, fp | r2 = fp;
0x0009b214 movs r1, 1 | r1 = 1;
0x0009b216 blx 0x62ec | fcn_000062ec ();
0x0009b21a b.w 0x9a914 | goto label_36;
| label_119:
0x0009b21e ldr.w r8, [sp, 0x44] | r8 = var_44h;
0x0009b222 mov r3, r4 | r3 = r4;
0x0009b224 ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x0009b226 movs r1, 0x4b | r1 = 0x4b;
0x0009b228 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009b22c mov r2, r8 | r2 = r8;
0x0009b22e mov r0, r7 | r0 = r7;
0x0009b230 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b234 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0009b236 mov r3, r8 | r3 = r8;
0x0009b238 movs r1, 0x76 | r1 = 0x76;
0x0009b23a mov r0, r7 | r0 = r7;
0x0009b23c ldr r5, [r6, 0x28] | r5 = *((r6 + 0x28));
0x0009b23e adds r2, r5, 1 | r2 = r5 + 1;
0x0009b240 str r5, [sp, 0x48] | var_48h = r5;
0x0009b242 str r2, [r6, 0x28] | *((r6 + 0x28)) = r2;
0x0009b244 mov r2, r5 | r2 = r5;
0x0009b246 str r4, [sp] | *(sp) = r4;
0x0009b248 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b24c ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009b24e mov r8, r0 | r8 = r0;
0x0009b250 cmp r3, 0 |
| if (r3 == 0) {
0x0009b252 beq.w 0x9be46 | goto label_147;
| }
0x0009b256 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009b258 mov r7, r3 | r7 = r3;
0x0009b25a mov r6, r3 | r6 = r3;
0x0009b25c str r3, [sp, 0x88] | var_88h = r3;
| label_73:
0x0009b25e movs r3, 0x10 | r3 = 0x10;
0x0009b260 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0009b262 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b264 mov r2, sl | r2 = sl;
0x0009b266 mov.w sb, 1 | sb = 1;
0x0009b26a bl 0x7dcb8 | fcn_0007dcb8 (r0, r1, r2, r3);
0x0009b26e movs r3, 0 | r3 = 0;
0x0009b270 str r3, [sp, 0xb8] | var_b8h = r3;
0x0009b272 str r3, [sp, 0xa0] | var_a0h = r3;
| label_39:
0x0009b274 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b276 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009b278 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0009b27c beq.w 0x9bd6c | goto label_148;
| }
| label_40:
0x0009b280 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0009b282 cmp r3, 0 |
0x0009b284 str r3, [sp, 0x84] | var_84h = r3;
0x0009b286 itt gt |
| if (r3 <= 0) {
0x0009b288 ldrgt r5, [sp, 0x58] | r5 = var_58h;
| }
| if (r3 <= 0) {
0x0009b28a movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x0009b28c ble 0x9b2aa | goto label_149;
| }
| do {
0x0009b28e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0009b290 adds r2, r6, r4 | r2 = r6 + r4;
0x0009b292 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009b294 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b296 ldrsh.w r3, [r3, r4, lsl 1] | offset_6 = r4 << 1;
| r3 = *((r3 + offset_6));
0x0009b29a adds r4, 1 | r4++;
0x0009b29c str r2, [sp] | *(sp) = r2;
0x0009b29e ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b2a0 bl 0x8771c | fcn_0008771c (r0, r1, r2, r3, r4);
0x0009b2a4 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0009b2a6 cmp r4, r3 |
0x0009b2a8 bne 0x9b28e |
| } while (r4 != r3);
| label_149:
0x0009b2aa cmp.w sb, 0 |
| if (sb == 0) {
0x0009b2ae beq.w 0x9b7e4 | goto label_150;
| }
0x0009b2b2 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009b2b6 bne.w 0x9b7b0 | goto label_151;
| }
| label_51:
0x0009b2ba mov r7, r6 | r7 = r6;
0x0009b2bc b.w 0x9aa2a | goto label_37;
| label_124:
0x0009b2de ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009b2e0 str r3, [sp, 0x70] | var_70h = r3;
0x0009b2e2 b.w 0x9aa60 | goto label_38;
| label_121:
0x0009b2e6 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009b2e8 ldr r2, [sp, 0x84] | r2 = var_84h;
0x0009b2ea cmp r3, 2 |
0x0009b2ec it eq |
| if (r3 != 2) {
0x0009b2ee ldreq r3, [sp, 0x34] | r3 = var_34h;
| }
0x0009b2f0 add.w r5, r1, r2 | r5 = r1 + r2;
0x0009b2f4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009b2f6 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009b2f8 itt eq |
| if (r3 == 2) {
0x0009b2fa ldrsheq r3, [r3, 0x22] | __asm ("ldrsheq r3, [r3, 0x22]");
| }
| if (r3 == 2) {
0x0009b2fe adds r5, r5, r3 | r5 += r3;
| }
0x0009b300 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x0009b302 str r3, [sp, 0x48] | var_48h = r3;
0x0009b304 adds r3, 1 | r3++;
0x0009b306 str r3, [r1, 0x28] | *((r1 + 0x28)) = r3;
0x0009b308 cmp r2, 0 |
| if (r2 == 0) {
0x0009b30a beq.w 0x9bcb2 | goto label_152;
| }
0x0009b30e ldr r0, [sp, 0x84] | r0 = var_84h;
0x0009b310 movs r2, 0 | r2 = 0;
0x0009b312 ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x0009b316 movs r1, 0x4b | r1 = 0x4b;
0x0009b318 adds r3, r6, r0 | r3 = r6 + r0;
0x0009b31a subs r3, 1 | r3--;
0x0009b31c mov r0, r8 | r0 = r8;
0x0009b31e str r3, [sp] | *(sp) = r3;
0x0009b320 mov r3, r6 | r3 = r6;
0x0009b322 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b326 movs r3, 0 | r3 = 0;
0x0009b328 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b32a movs r1, 0x76 | r1 = 0x76;
0x0009b32c mov r0, r8 | r0 = r8;
0x0009b32e str r3, [sp] | *(sp) = r3;
0x0009b330 mov r3, r5 | r3 = r5;
0x0009b332 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b336 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0009b338 mov r8, r0 | r8 = r0;
0x0009b33a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b33c bl 0x45e80 | r0 = fcn_00045e80 (r0, r1);
0x0009b340 mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x0009b342 cbz r0, 0x9b36a |
0x0009b344 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009b346 strh r5, [r0, 8] | *((r0 + 8)) = r5;
0x0009b348 ldr r0, [r3] | r0 = *(r3);
0x0009b34a ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0009b34e cmp r3, 0 |
| if (r3 != 0) {
0x0009b350 bne.w 0x9bcc8 | goto label_153;
| }
0x0009b354 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b356 movs r1, 0x18 | r1 = 0x18;
0x0009b358 ldr r3, [r0, 0x6c] | r3 = *((r0 + 0x6c));
0x0009b35a mul r3, r1, r3 | r3 = r1 * r3;
0x0009b35e ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
0x0009b360 subs r3, 0x18 | r3 -= 0x18;
0x0009b362 add r3, r1 | r3 += r1;
0x0009b364 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0009b366 movs r2, 0xf8 | r2 = 0xf8;
0x0009b368 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
| label_63:
0x0009b36a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009b36c cmp r3, 0 |
| if (r3 != 0) {
0x0009b36e bne.w 0x9bdb4 | goto label_154;
| }
0x0009b370 strh r1, [r4, 0x28] | *((r4 + 0x28)) = r1;
| label_76:
0x0009b372 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009b374 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009b376 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
0x0009b378 orrs r3, r2 | r3 |= r2;
0x0009b37a uxtb r3, r3 | r3 = (int8_t) r3;
0x0009b37c cmp r3, 0 |
| if (r3 != 0) {
0x0009b37e bne.w 0x9bdae | goto label_155;
| }
0x0009b382 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0009b384 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0009b386 orrs r3, r2 | r3 |= r2;
0x0009b388 ldr r2, [sp, 0x68] | r2 = var_68h;
0x0009b38a orrs r3, r2 | r3 |= r2;
0x0009b38c ite ne |
| if (r3 == r2) {
0x0009b38e movne r3, 4 | r3 = 4;
| }
| if (r3 != r2) {
0x0009b390 moveq r3, 0xc | r3 = 0xc;
| }
| label_69:
0x0009b392 str r3, [sp, 8] | var_8h = r3;
0x0009b394 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009b396 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009b398 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009b39a str r3, [sp, 0xc] | var_ch = r3;
0x0009b39c movs r3, 0 | r3 = 0;
0x0009b39e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b3a0 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0009b3a4 bl 0x7ee90 | fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x0009b3a8 str r0, [sp, 0xa0] | var_a0h = r0;
0x0009b3aa cmp r0, 0 |
| if (r0 == 0) {
0x0009b3ac beq.w 0x9bdd8 | goto label_156;
| }
0x0009b3b0 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0009b3b2 add r3, sp, 0x114 | r3 += var_114h;
0x0009b3b4 ldr r0, [r2, 0x18] | r0 = *((r2 + 0x18));
0x0009b3b6 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x0009b3b8 stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x0009b3ba ldrb.w sb, [r2, 0x32] | sb = *((r2 + 0x32));
0x0009b3be ldrb.w r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x0009b3c2 cmp.w sb, 1 |
0x0009b3c6 and r3, r3, 1 | r3 &= 1;
0x0009b3ca str r3, [sp, 0xb8] | var_b8h = r3;
| if (sb == 1) {
0x0009b3cc beq.w 0x9b274 | goto label_39;
| }
0x0009b3d0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009b3d2 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0009b3d4 cmp r3, 0 |
0x0009b3d6 it eq |
| if (r3 != 0) {
0x0009b3d8 moveq r3, r2 | r3 = r2;
| }
0x0009b3da cmp.w sb, 2 |
0x0009b3de mov.w r2, 1 | r2 = 1;
0x0009b3e2 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| if (sb == 2) {
0x0009b3e4 beq.w 0x9bd88 | goto label_157;
| }
| label_68:
0x0009b3e8 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b3ea ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009b3ec ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 != r3) {
0x0009b3f0 bne.w 0x9b280 | goto label_40;
| }
0x0009b3f4 ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x0009b3f6 movs r1, 0x87 | r1 = 0x87;
0x0009b3f8 str r3, [sp] | *(sp) = r3;
0x0009b3fa mov r3, fp | r3 = fp;
0x0009b3fc ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b3fe mov r0, r5 | r0 = r5;
0x0009b400 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b404 cmp.w sb, 0 |
| if (sb != 0) {
0x0009b408 bne.w 0x9bd7a | goto label_158;
| }
0x0009b40c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009b40e mov r3, r4 | r3 = r4;
0x0009b410 mov r0, r5 | r0 = r5;
0x0009b412 ldr r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x0009b414 adds r2, 1 | r2++;
0x0009b416 str r2, [r1, 0x2c] | *((r1 + 0x2c)) = r2;
0x0009b418 ldr r1, [sp, 0xbc] | r1 = var_bch;
0x0009b41a str r2, [r1] | *(r1) = r2;
0x0009b41c movs r1, 0x80 | r1 = 0x80;
0x0009b41e ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b420 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009b424 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b428 str.w sb, [sp, 0x84] | __asm ("str.w sb, [var_84h]");
| label_123:
0x0009b42c ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009b42e subs.w r3, sb, 2 | r3 = sb - 2;
0x0009b432 it ne |
| if (r3 == sb) {
0x0009b434 movne r3, 1 | r3 = 1;
| }
0x0009b436 cmp r2, 0 |
0x0009b438 it ne |
| if (r2 == 0) {
0x0009b43a movne r3, 0 | r3 = 0;
| }
0x0009b43c cmp r3, 0 |
| if (r3 != 0) {
0x0009b43e bne.w 0x9bdf2 | goto label_159;
| }
| label_72:
0x0009b442 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009b444 cmp r3, 2 |
| if (r3 != 2) {
0x0009b446 beq 0x9b48e |
0x0009b448 cmp.w sb, 0 |
| if (sb != 0) {
0x0009b44c beq 0x9b476 |
0x0009b44e ldr r3, [sp, 0x114] | r3 = var_114h;
0x0009b450 cmp r3, 0 |
| if (r3 >= 0) {
0x0009b452 blt 0x9b45e |
0x0009b454 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0009b456 ldr r1, [sp, 0x94] | r1 = var_94h;
0x0009b458 subs r3, r3, r2 | r3 -= r2;
0x0009b45a movs r2, 0 | r2 = 0;
0x0009b45c strb r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x0009b45e ldr r3, [sp, 0x118] | r3 = var_118h;
0x0009b460 cmp r3, 0 |
| if (r3 >= 0) {
0x0009b462 blt 0x9b46e |
0x0009b464 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0009b466 ldr r1, [sp, 0x94] | r1 = var_94h;
0x0009b468 subs r3, r3, r2 | r3 -= r2;
0x0009b46a movs r2, 0 | r2 = 0;
0x0009b46c strb r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x0009b46e cmp.w sb, 2 |
| if (sb == 2) {
0x0009b472 beq.w 0x9bcd4 | goto label_160;
| }
| }
| label_64:
0x0009b476 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009b478 movs r2, 0x71 | r2 = 0x71;
0x0009b47a ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009b47c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b47e str r3, [sp, 4] | var_4h = r3;
0x0009b480 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009b482 str r3, [sp] | *(sp) = r3;
0x0009b484 movs r3, 0 | r3 = 0;
0x0009b486 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [sp, 8]");
0x0009b48a bl 0x4f62c | fcn_0004f62c (r0, r1, r2, r3, r4, r5, r6);
| }
0x0009b48e cmp.w sb, 0 |
| if (sb != 0) {
0x0009b492 bne.w 0x9b6de | goto label_161;
| }
0x0009b496 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009b498 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0009b49a orrs r3, r4 | r3 |= r4;
0x0009b49c mov r3, sl | r3 = sl;
| if (r3 == r4) {
0x0009b49e beq.w 0x9b692 | goto label_162;
| }
0x0009b4a2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009b4a4 ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x0009b4a8 ldr r2, [r1, 0x38] | r2 = *((r1 + 0x38));
0x0009b4aa mov r0, r8 | r0 = r8;
0x0009b4ac subs r5, r2, 1 | r5 = r2 - 1;
0x0009b4ae ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b4b0 str r5, [r1, 0x38] | *((r1 + 0x38)) = r5;
0x0009b4b2 movs r1, 0x23 | r1 = 0x23;
0x0009b4b4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0009b4b8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b4bc ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x0009b4c0 str r3, [sp, 0x70] | var_70h = r3;
0x0009b4c2 cmp r4, 0 |
| if (r4 == 0) {
0x0009b4c4 beq.w 0x9b664 | goto label_163;
| }
0x0009b4c8 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009b4ca cmp r3, 2 |
| if (r3 == 2) {
0x0009b4cc beq.w 0x9b656 | goto label_164;
| }
0x0009b4d0 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009b4d2 cmp r3, 0 |
| if (r3 == 0) {
0x0009b4d4 beq.w 0x9b634 | goto label_165;
| }
0x0009b4d8 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0009b4da cmp r3, 0 |
0x0009b4dc it gt |
| if (r3 <= 0) {
0x0009b4de movgt r4, sb | r4 = sb;
| }
| if (r3 <= 0) {
0x0009b4e0 ble 0x9b4fa | goto label_166;
| }
| do {
0x0009b4e2 adds r3, r6, r4 | r3 = r6 + r4;
0x0009b4e4 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b4e6 str r3, [sp] | *(sp) = r3;
0x0009b4e8 movs r1, 0x5e | r1 = 0x5e;
0x0009b4ea mov r3, r4 | r3 = r4;
0x0009b4ec ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b4ee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b4f2 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0009b4f4 adds r4, 1 | r4++;
0x0009b4f6 cmp r4, r3 |
0x0009b4f8 bne 0x9b4e2 |
| } while (r4 != r3);
| label_166:
0x0009b4fa ldr r3, [sp, 0x88] | r3 = var_88h;
0x0009b4fc movs r1, 0x1b | r1 = 0x1b;
0x0009b4fe ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b500 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b502 str r3, [sp, 4] | var_4h = r3;
0x0009b504 mov r3, r5 | r3 = r5;
0x0009b506 str r6, [sp] | *(sp) = r6;
0x0009b508 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0009b50c ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009b50e cmp r3, 0 |
| if (r3 == 0) {
0x0009b510 beq.w 0x9b65e | goto label_167;
| }
| label_44:
0x0009b514 mov sl, r5 | sl = r5;
| label_75:
0x0009b516 ldrd r2, r3, [sp, 0x74] | __asm ("ldrd r2, r3, [var_74h]");
0x0009b51a movs r1, 0x5e | r1 = 0x5e;
0x0009b51c ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b51e str r2, [sp] | *(sp) = r2;
0x0009b520 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b522 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b526 b.w 0x9aa52 | goto label_41;
| label_120:
0x0009b52a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009b52c strd r3, r3, [sp, 0x84] | __asm ("strd r3, r3, [sp, 0x84]");
0x0009b530 b.w 0x9a9ea | goto label_42;
| label_136:
0x0009b534 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009b536 ldr r1, [sp, 0x9c] | r1 = var_9ch;
0x0009b538 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b53a bl 0x87fec | fcn_00087fec (r0, r1, r2, r3);
0x0009b53e b 0x9adf0 | goto label_43;
| label_60:
0x0009b60c ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009b60e b.w 0x9a534 | goto label_20;
| label_137:
0x0009b612 ldr r2, [pc, 0x3cc] |
0x0009b614 ldr r1, [sp, 0x90] | r1 = var_90h;
0x0009b616 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b618 add r2, pc | r2 = 0x136ffe;
0x0009b61a bl 0x41cf8 | fcn_00041cf8 (r0, r1, r2);
0x0009b61e ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009b620 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009b622 cmp r3, 0 |
| if (r3 != 0) {
0x0009b624 bne.w 0x9a52a | goto label_19;
| }
0x0009b628 b.w 0x9a534 | goto label_20;
| label_114:
0x0009b62c str.w fp, [sp, 0x74] | __asm ("str.w fp, [var_74h]");
0x0009b630 b.w 0x9a986 | goto label_34;
| label_165:
0x0009b634 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009b636 movs r1, 0x87 | r1 = 0x87;
0x0009b638 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x0009b63a ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b63c str r3, [sp] | *(sp) = r3;
0x0009b63e mov r3, fp | r3 = fp;
0x0009b640 mov r0, r4 | r0 = r4;
0x0009b642 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b646 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b648 mov r3, r5 | r3 = r5;
0x0009b64a movs r1, 0x1e | r1 = 0x1e;
0x0009b64c mov r0, r4 | r0 = r4;
0x0009b64e str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009b652 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_164:
0x0009b656 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009b658 cmp r3, 0 |
| if (r3 != 0) {
0x0009b65a bne.w 0x9b514 | goto label_44;
| }
| do {
| label_167:
0x0009b65e mov sl, r5 | sl = r5;
0x0009b660 b.w 0x9aa60 | goto label_38;
| label_163:
0x0009b664 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0009b666 mov r3, r7 | r3 = r7;
0x0009b668 ldr r6, [sp, 0x4c] | r6 = var_4ch;
0x0009b66a movs r1, 0x86 | r1 = 0x86;
0x0009b66c ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b66e str r4, [sp] | *(sp) = r4;
0x0009b670 mov r0, r6 | r0 = r6;
0x0009b672 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b676 mov r3, r5 | r3 = r5;
0x0009b678 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b67a movs r1, 0x1b | r1 = 0x1b;
0x0009b67c mov r0, r6 | r0 = r6;
0x0009b67e strd r7, r4, [sp] | __asm ("strd r7, r4, [sp]");
0x0009b682 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0009b686 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009b688 cmp r3, 0 |
0x0009b68a beq 0x9b65e |
| } while (r3 == 0);
0x0009b68c mov sl, r5 | sl = r5;
0x0009b68e b.w 0x9aa44 | goto label_45;
| label_162:
0x0009b692 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x0009b694 movs r1, 0x23 | r1 = 0x23;
0x0009b696 ldr r5, [sp, 0x48] | r5 = var_48h;
0x0009b698 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0009b69c mov r0, r4 | r0 = r4;
0x0009b69e mov r2, r5 | r2 = r5;
0x0009b6a0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b6a2 vld2.32 {d25[0], d26[0]}, [ip], fp | __asm ("vld2.32 {d25[0], d26[0]}, [ip], fp");
0x0009b6a6 mov r2, r5 | r2 = r5;
0x0009b6a8 mov r0, r4 | r0 = r4;
0x0009b6aa ldr r3, [r1, 0x38] | r3 = *((r1 + 0x38));
0x0009b6ac add.w sl, r3, -1 | sl = r3 + -1;
0x0009b6b0 mov r3, fp | r3 = fp;
0x0009b6b2 str.w sl, [r1, 0x38] | __asm ("str.w sl, [r1, 0x38]");
0x0009b6b6 movs r1, 0x87 | r1 = 0x87;
0x0009b6b8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0009b6bc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b6c0 mov r3, sl | r3 = sl;
0x0009b6c2 str r0, [sp, 0x70] | var_70h = r0;
0x0009b6c4 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b6c6 movs r1, 0x1e | r1 = 0x1e;
0x0009b6c8 mov r0, r4 | r0 = r4;
0x0009b6ca str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009b6ce bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b6d2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009b6d4 cmp r3, 0 |
| if (r3 != 0) {
0x0009b6d6 bne.w 0x9aa44 | goto label_45;
| }
0x0009b6da b.w 0x9aa60 | goto label_38;
| label_161:
0x0009b6de ldr r3, [sp, 0x114] | r3 = var_114h;
0x0009b6e0 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b6e2 cmp r3, r2 |
| if (r3 != r2) {
0x0009b6e4 beq 0x9b700 |
0x0009b6e6 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0009b6e8 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b6ea cmp r3, r2 |
| if (r3 == r2) {
0x0009b6ec beq 0x9b700 | goto label_168;
| }
| label_66:
0x0009b6ee ldr r3, [sp, 0x84] | r3 = var_84h;
0x0009b6f0 movs r1, 0x1b | r1 = 0x1b;
0x0009b6f2 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009b6f4 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b6f6 strd r7, r3, [sp] | __asm ("strd r7, r3, [sp]");
0x0009b6fa mov r3, sl | r3 = sl;
0x0009b6fc bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
| }
| label_168:
0x0009b700 cmp.w sb, 1 |
0x0009b704 it eq |
| if (sb != 1) {
0x0009b706 moveq r2, sl | r2 = sl;
| }
| if (sb != 1) {
0x0009b708 beq 0x9b712 |
| label_65:
0x0009b70a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009b70c ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x0009b70e subs r2, 1 | r2--;
0x0009b710 str r2, [r3, 0x38] | *((r3 + 0x38)) = r2;
| }
0x0009b712 mov r3, sl | r3 = sl;
0x0009b714 mov sl, r2 | sl = r2;
0x0009b716 movs r2, 0 | r2 = 0;
0x0009b718 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009b71a str r2, [sp] | *(sp) = r2;
0x0009b71c movs r1, 0x32 | r1 = 0x32;
0x0009b71e ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009b720 cmp r2, 0 |
0x0009b722 ite ne |
| if (r2 == 0) {
0x0009b724 movne r2, r7 | r2 = r7;
| }
| if (r2 != 0) {
0x0009b726 moveq r2, fp | r2 = fp;
| }
0x0009b728 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b72c b.w 0x9aa32 | goto label_46;
| label_140:
0x0009b73a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b73c mov r1, sb | r1 = sb;
0x0009b73e mov r2, r6 | r2 = r6;
0x0009b740 ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x0009b742 adds r0, 0x38 | r0 += 0x38;
0x0009b744 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x0009b748 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0009b74a cmp r5, 0 |
| if (r5 == 0) {
0x0009b74c beq.w 0x9a87a | goto label_30;
| }
0x0009b750 movs r3, 1 | r3 = 1;
0x0009b752 mov r4, r6 | r4 = r6;
0x0009b754 str r3, [sp, 0x68] | var_68h = r3;
0x0009b756 b 0x9b06c | goto label_47;
| label_145:
0x0009b758 movs r3, 2 | r3 = 2;
0x0009b75a str r3, [sp, 0x68] | var_68h = r3;
0x0009b75c b.w 0x9a87e | goto label_29;
| label_105:
0x0009b760 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009b762 ldr r1, [pc, 0x280] |
0x0009b764 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b766 mov r2, r3 | r2 = r3;
0x0009b768 add r1, pc | r1 = 0x137152;
0x0009b76a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x0009b76e ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009b770 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009b772 cmp r3, 0 |
| if (r3 != 0) {
0x0009b774 bne.w 0x9a52a | goto label_19;
| }
0x0009b778 b.w 0x9a534 | goto label_20;
| label_108:
0x0009b77c ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009b77e str r3, [sp, 0xbc] | var_bch = r3;
0x0009b780 b.w 0x9a900 | goto label_48;
| label_98:
0x0009b784 movs r3, 0 | r3 = 0;
0x0009b786 mov.w r2, -1 | r2 = -1;
0x0009b78a str r3, [sp, 0xb0] | var_b0h = r3;
0x0009b78c str r2, [sp, 0x78] | var_78h = r2;
0x0009b78e str r3, [sp, 0x98] | var_98h = r3;
0x0009b790 str r3, [sp, 0x64] | var_64h = r3;
0x0009b792 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009b794 str r3, [sp, 0xac] | var_ach = r3;
0x0009b796 b.w 0x9a846 | goto label_49;
| label_80:
0x0009b79a blx 0x6430 | fcn_00006430 ();
0x0009b79e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b7a0 ldr r3, [r0, 0x70] | r3 = *((r0 + 0x70));
0x0009b7a2 cmp r3, 0 |
| if (r3 == 0) {
0x0009b7a4 beq.w 0x9ae90 | goto label_50;
| }
0x0009b7a8 bl 0x4f4d8 | fcn_0004f4d8 (r0, r1);
0x0009b7ac b.w 0x9ae90 | goto label_50;
| label_151:
0x0009b7b0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009b7b2 ldr r0, [r3] | r0 = *(r3);
0x0009b7b4 ldrb.w r7, [r0, 0x57] | r7 = *((r0 + 0x57));
0x0009b7b8 cmp r7, 0 |
| if (r7 != 0) {
0x0009b7ba bne.w 0x9b2ba | goto label_51;
| }
0x0009b7be movs r4, 0x18 | r4 = 0x18;
0x0009b7c0 ldr r5, [r3, 0x68] | r5 = *((r3 + 0x68));
0x0009b7c2 mul r4, r4, r8 | r4 *= r8;
0x0009b7c6 add.w r8, r5, r4 | r8 = r5 + r4;
0x0009b7ca ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0009b7ce ldrsb.w r1, [r8, 1] | r1 = *((r8 + 1));
0x0009b7d2 bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x0009b7d6 movs r3, 0xb8 | r3 = 0xb8;
0x0009b7d8 str.w r7, [r8, 0x10] | __asm ("str.w r7, [r8, 0x10]");
0x0009b7dc mov r7, r6 | r7 = r6;
0x0009b7de strh r3, [r5, r4] | *((r5 + r4)) = r3;
0x0009b7e0 b.w 0x9aa2a | goto label_37;
| label_150:
0x0009b7e4 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0009b7e6 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009b7e8 bl 0x43864 | fcn_00043864 (r0, r1);
0x0009b7ec ldr r5, [sp, 0x88] | r5 = var_88h;
0x0009b7ee mov r2, r6 | r2 = r6;
0x0009b7f0 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x0009b7f2 movs r1, 0x61 | r1 = 0x61;
0x0009b7f4 str r0, [sp, 4] | var_4h = r0;
0x0009b7f6 mov r3, r5 | r3 = r5;
0x0009b7f8 str r5, [sp, 8] | var_8h = r5;
0x0009b7fa mov r0, r4 | r0 = r4;
0x0009b7fc str r7, [sp] | *(sp) = r7;
0x0009b7fe bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0009b802 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009b804 mov r3, r7 | r3 = r7;
0x0009b806 movs r1, 0x8a | r1 = 0x8a;
0x0009b808 mov r0, r4 | r0 = r4;
0x0009b80a strd r6, r5, [sp] | __asm ("strd r6, r5, [sp]");
0x0009b80e str.w sb, [sp, 0x84] | __asm ("str.w sb, [var_84h]");
0x0009b812 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0009b816 b.w 0x9aa2a | goto label_37;
| label_117:
0x0009b834 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b836 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009b838 ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x0009b83a ldr.w sb, [r2, 8] | sb = *((r2 + 8));
0x0009b83e ldr r6, [r2] | r6 = *(r2);
0x0009b840 str r3, [sp, 0x54] | var_54h_2 = r3;
| if (r3 == 0) {
0x0009b842 cbz r3, 0x9b854 | goto label_169;
| }
0x0009b844 ldr r3, [sp, 0x54] | r3 = var_54h_2;
0x0009b846 b 0x9b84c |
| while (r6 != r2) {
0x0009b848 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
| if (r3 == 0) {
0x0009b84a cbz r3, 0x9b852 | goto label_170;
| }
0x0009b84c ldr r2, [r3] | r2 = *(r3);
0x0009b84e cmp r6, r2 |
0x0009b850 bne 0x9b848 |
| }
| label_170:
0x0009b852 str r3, [sp, 0x54] | var_54h_2 = r3;
| label_169:
0x0009b854 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009b856 movs r4, 0 | r4 = 0;
0x0009b858 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b85a ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009b85c ldr.w r8, [r2, 0x28] | r8 = *((r2 + 0x28));
0x0009b860 ldrsh.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
0x0009b864 ldr r5, [r0, 0x30] | r5 = *((r0 + 0x30));
0x0009b866 mov r0, sb | r0 = sb;
0x0009b868 adds r1, r3, 2 | r1 = r3 + 2;
0x0009b86a add.w r3, r8, 1 | r3 = r8 + 1;
0x0009b86e str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x0009b870 mov sl, r1 | sl = r1;
0x0009b872 mov r3, r1 | r3 = r1;
0x0009b874 str r1, [sp, 0x58] | var_58h = r1;
0x0009b876 str r5, [sp, 0x44] | var_44h = r5;
0x0009b878 movs r1, 0x76 | r1 = 0x76;
0x0009b87a mov r5, r2 | r5 = r2;
0x0009b87c str r4, [sp] | *(sp) = r4;
0x0009b87e mov r2, r8 | r2 = r8;
0x0009b880 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009b884 str r0, [sp, 0x48] | var_48h = r0;
0x0009b886 mov r1, sl | r1 = sl;
0x0009b888 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009b88a mov r2, r5 | r2 = r5;
0x0009b88c ldr r7, [r5, 0x2c] | r7 = *((r5 + 0x2c));
0x0009b88e ldr r3, [r0] | r3 = *(r0);
0x0009b890 adds r5, r1, r7 | r5 = r1 + r7;
0x0009b892 str r5, [r2, 0x2c] | *((r2 + 0x2c)) = r5;
0x0009b894 adds r2, r7, 1 | r2 = r7 + 1;
0x0009b896 cmp r3, 1 |
0x0009b898 str r2, [sp, 0x4c] | var_4ch = r2;
| if (r3 <= 1) {
0x0009b89a ble.w 0x9b9ec | goto label_171;
| }
0x0009b89e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b8a0 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009b8a2 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 != r3) {
0x0009b8a6 bne 0x9b986 | goto label_172;
| }
0x0009b8a8 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009b8aa cmp r2, 0 |
| if (r2 == 0) {
0x0009b8ac beq 0x9b958 | goto label_173;
| }
0x0009b8ae mov r1, r2 | r1 = r2;
0x0009b8b0 mov r0, r6 | r0 = r6;
0x0009b8b2 mov r2, r3 | r2 = r3;
0x0009b8b4 str r3, [sp, 0x64] | var_64h = r3;
0x0009b8b6 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0009b8ba mov r1, r0 | r1 = r0;
| label_55:
0x0009b8bc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009b8be ldr r0, [r3] | r0 = *(r3);
0x0009b8c0 bl 0x384f8 | fcn_000384f8 (r0, r1);
0x0009b8c4 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009b8c6 mov r4, r0 | r4 = r0;
0x0009b8c8 ldrsh.w r3, [r2, 0x22] | r3 = *((r2 + 0x22));
0x0009b8cc cmp r3, 0 |
| if (r3 <= 0) {
0x0009b8ce ble.w 0x9a418 | goto label_52;
| }
0x0009b8d2 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009b8d4 movs r7, 0 | r7 = 0;
0x0009b8d6 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0009b8da subs r5, r2, 4 | r5 = r2 - 4;
0x0009b8dc b 0x9b90e | goto label_174;
| label_53:
0x0009b8de ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009b8e0 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0009b8e4 ldr r2, [r3, 8] | r2 = *((r3 + 8));
| if (r2 != 0) {
0x0009b8e6 cbz r2, 0x9b8f6 |
0x0009b8e8 movs r3, 0 | r3 = 0;
0x0009b8ea mov r1, r2 | r1 = r2;
0x0009b8ec mov r0, r6 | r0 = r6;
0x0009b8ee mov r2, r3 | r2 = r3;
0x0009b8f0 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0009b8f4 mov r2, r0 | r2 = r0;
| }
0x0009b8f6 mov r1, r4 | r1 = r4;
0x0009b8f8 mov r0, sl | r0 = sl;
0x0009b8fa bl 0x431ec | fcn_000431ec (r0, r1, r2);
0x0009b8fe adds r7, 1 | r7++;
0x0009b900 mov r4, r0 | r4 = r0;
| label_54:
0x0009b902 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b904 ldrsh.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
0x0009b908 cmp r7, r3 |
| if (r7 >= r3) {
0x0009b90a bge.w 0x9a418 | goto label_52;
| }
| label_174:
0x0009b90e ldr r3, [r5, 4]! | r3 = *((r5 += 4));
0x0009b912 cmp r3, 0 |
| if (r3 >= 0) {
0x0009b914 bge 0x9b8de | goto label_53;
| }
0x0009b916 movs r3, 0 | r3 = 0;
0x0009b918 movs r1, 0x4b | r1 = 0x4b;
0x0009b91a mov r2, r3 | r2 = r3;
0x0009b91c mov r0, sl | r0 = sl;
0x0009b91e bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x0009b922 adds r7, 1 | r7++;
0x0009b924 mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x0009b926 cbz r0, 0x9b92a |
0x0009b928 strh r7, [r0, 0x20] | *((r0 + 0x20)) = r7;
| }
0x0009b92a mov r1, r4 | r1 = r4;
0x0009b92c mov r0, sl | r0 = sl;
0x0009b92e bl 0x431ec | r0 = fcn_000431ec (r0, r1, r2);
0x0009b932 mov r4, r0 | r4 = r0;
0x0009b934 b 0x9b902 | goto label_54;
| label_173:
0x0009b958 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009b95a movs r1, 0x4b | r1 = 0x4b;
0x0009b95c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b95e mov r2, r3 | r2 = r3;
0x0009b960 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0009b964 mov r1, r0 | r1 = r0;
0x0009b966 b 0x9b8bc | goto label_55;
| label_81:
0x0009b968 mov r0, fp | r0 = fp;
0x0009b96a bl 0x8248c | fcn_0008248c (r0, r1);
0x0009b96e b.w 0x9a444 | goto label_56;
| label_84:
0x0009b972 ldr r3, [pc, 0x74] |
0x0009b974 add r3, pc | r3 = 0x137362;
0x0009b976 adds r3, 4 | r3 += 4;
0x0009b978 b.w 0x9a514 | goto label_57;
| label_83:
0x0009b97c mov r0, fp | r0 = fp;
0x0009b97e bl 0x8248c | fcn_0008248c (r0, r1);
0x0009b982 b.w 0x9a524 | goto label_5;
| label_172:
0x0009b986 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009b988 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0009b98a str r3, [sp, 0x64] | var_64h = r3;
0x0009b98c cmp r3, 0 |
| if (r3 == 0) {
0x0009b98e beq.w 0x9be6c | goto label_175;
| }
0x0009b992 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009b994 b 0x9b99e |
| while (r2 != 2) {
0x0009b996 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009b998 cmp r3, 0 |
| if (r3 == 0) {
0x0009b99a beq.w 0x9be6c | goto label_175;
| }
0x0009b99e ldrb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x0009b9a2 and r2, r2, 3 | r2 &= 3;
0x0009b9a6 cmp r2, 2 |
0x0009b9a8 bne 0x9b996 |
| }
0x0009b9aa str r3, [sp, 0x64] | var_64h = r3;
0x0009b9ac ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0009b9ae ldrsh.w r4, [r3] | r4 = *(r3);
0x0009b9b2 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009b9b4 ldr.w r3, [r3, r4, lsl 2] | offset_7 = r4 << 2;
| r3 = *((r3 + offset_7));
0x0009b9b8 cmp r3, 0 |
| if (r3 < 0) {
0x0009b9ba blt.w 0x9bc98 | goto label_176;
| }
0x0009b9be ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009b9c0 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0009b9c4 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0009b9c6 cmp r1, 0 |
| if (r1 == 0) {
0x0009b9c8 beq.w 0x9b8bc | goto label_55;
| }
0x0009b9cc movs r3, 0 | r3 = 0;
0x0009b9ce mov r0, r6 | r0 = r6;
0x0009b9d0 mov r2, r3 | r2 = r3;
0x0009b9d2 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0009b9d6 mov r1, r0 | r1 = r0;
0x0009b9d8 b 0x9b8bc | goto label_55;
| label_171:
0x0009b9ec ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009b9ee movs r2, 4 | r2 = 4;
0x0009b9f0 adds r6, r5, 2 | r6 = r5 + 2;
0x0009b9f2 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009b9f4 mov r3, r4 | r3 = r4;
0x0009b9f6 str r6, [r0, 0x2c] | *((r0 + 0x2c)) = r6;
0x0009b9f8 str r2, [sp, 8] | var_8h = r2;
0x0009b9fa str r4, [sp, 0xc] | var_ch = r4;
0x0009b9fc ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009b9fe strd r4, r4, [sp] | __asm ("strd r4, r4, [sp]");
0x0009ba02 bl 0x7ee90 | r0 = fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x0009ba06 mov fp, r0 |
0x0009ba08 cmp r0, 0 |
| if (r0 == 0) {
0x0009ba0a beq.w 0x9bb28 | goto label_177;
| }
0x0009ba0e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009ba10 ldrsh.w r0, [r3, 0x22] | r0 = *((r3 + 0x22));
0x0009ba14 cmp r0, 0 |
| if (r0 <= 0) {
0x0009ba16 ble 0x9ba84 | goto label_178;
| }
0x0009ba18 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009ba1a mov r4, r7 | r4 = r7;
0x0009ba1c ldr.w sl, [sp, 0x34] | sl = var_34h;
0x0009ba20 subs r3, 4 | r3 -= 4;
0x0009ba22 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009ba24 b 0x9ba46 |
| while (r3 >= 0) {
0x0009ba26 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009ba28 add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x0009ba2c ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0009ba2e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009ba30 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| if (r3 != 0) {
0x0009ba32 cbz r3, 0x9ba3e |
0x0009ba34 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009ba36 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x0009ba3a ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
| }
| label_58:
0x0009ba3e adds r4, 1 | r4++;
0x0009ba40 subs r3, r4, r7 | r3 = r4 - r7;
0x0009ba42 cmp r0, r3 |
| if (r0 <= r3) {
0x0009ba44 ble 0x9ba84 | goto label_178;
| }
0x0009ba46 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009ba48 ldr r3, [r2, 4]! | r3 = *((r2 += 4));
0x0009ba4c cmp r3, 0 |
0x0009ba4e str r2, [sp, 0x5c] | var_5ch = r2;
0x0009ba50 add.w r2, r4, 3 | r2 = r4 + 3;
0x0009ba54 bge 0x9ba26 |
| }
0x0009ba56 subs r3, r4, r7 | r3 = r4 - r7;
0x0009ba58 movs r1, 0xaf | r1 = 0xaf;
0x0009ba5a str r2, [sp] | *(sp) = r2;
0x0009ba5c mov r0, sb | r0 = sb;
0x0009ba5e ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009ba60 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009ba64 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0009ba68 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0009ba6c cmp r2, 0 |
0x0009ba6e itttt gt |
| if (r2 <= 0) {
0x0009ba70 ldrgt r3, [sb, 0x68] | r3 = *((sb + 0x68));
| }
| if (r2 <= 0) {
0x0009ba74 movgt r1, 0x18 | r1 = 0x18;
| }
| if (r2 > 0) {
0x0009ba76 mlagt r3, r1, r2, r3 | __asm ("mlagt r3, r1, r2, r3");
| }
| if (r2 > 0) {
0x0009ba7a movs r2, 1 | r2 = 1;
| }
0x0009ba7c it gt |
| if (r2 > 1) {
0x0009ba7e strhgt r2, [r3, -0x16] | __asm ("strhgt r2, [r3, -0x16]");
| }
0x0009ba82 b 0x9ba3e | goto label_58;
| label_178:
0x0009ba84 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009ba86 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009ba88 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0009ba8c beq 0x9bb36 | goto label_179;
| }
0x0009ba8e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009ba90 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| if (r3 != 0) {
0x0009ba92 cbnz r3, 0x9ba9e | goto label_180;
| }
0x0009ba94 b 0x9be6c | goto label_175;
| do {
0x0009ba96 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009ba98 cmp r3, 0 |
| if (r3 == 0) {
0x0009ba9a beq.w 0x9be6c | goto label_175;
| }
| label_180:
0x0009ba9e ldrb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x0009baa2 and r2, r2, 3 | r2 &= 3;
0x0009baa6 cmp r2, 2 |
0x0009baa8 bne 0x9ba96 |
| } while (r2 != 2);
0x0009baaa ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0009baac movs r1, 0xaf | r1 = 0xaf;
0x0009baae ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009bab0 mov r0, sb | r0 = sb;
0x0009bab2 ldrsh.w r4, [r3] | r4 = *(r3);
0x0009bab6 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009bab8 str r3, [sp] | *(sp) = r3;
0x0009baba mov r3, r4 | r3 = r4;
0x0009babc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bac0 movs r1, 0 | r1 = 0;
0x0009bac2 adds r2, r7, 3 | r2 = r7 + 3;
0x0009bac4 str r1, [sp] | *(sp) = r1;
0x0009bac6 add r2, r4 | r2 += r4;
0x0009bac8 adds r3, r7, 2 | r3 = r7 + 2;
0x0009baca movs r1, 0x51 | r1 = 0x51;
0x0009bacc mov r0, sb | r0 = sb;
0x0009bace bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_62:
0x0009bad2 ldr.w r0, [fp, 0x18] | r0 = *(arg_18h);
0x0009bad6 add r3, sp, 0x114 | r3 += var_114h;
0x0009bad8 ldr.w r1, [fp, 0x1c] | r1 = *(arg_1ch);
0x0009badc stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x0009bade ldrb.w r3, [fp, 0x32] | r3 = *(arg_32h);
0x0009bae2 mov sl, r3 | sl = r3;
0x0009bae4 cmp r3, 0 |
| if (r3 != 0) {
0x0009bae6 bne 0x9bb5a | goto label_181;
| }
0x0009bae8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009baea adds r4, r5, 1 | r4 = r5 + 1;
0x0009baec movs r1, 0x61 | r1 = 0x61;
0x0009baee mov r0, sb | r0 = sb;
0x0009baf0 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0009baf2 cmp r3, 0 |
0x0009baf4 it eq |
| if (r3 != 0) {
0x0009baf6 moveq r3, r2 | r3 = r2;
| }
0x0009baf8 movs r2, 1 | r2 = 1;
0x0009bafa strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0009bafc ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009bafe ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009bb00 str r4, [sp] | *(sp) = r4;
0x0009bb02 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bb06 mov r3, r6 | r3 = r6;
0x0009bb08 mov r2, r8 | r2 = r8;
0x0009bb0a movs r1, 0x7f | r1 = 0x7f;
0x0009bb0c mov r0, sb | r0 = sb;
0x0009bb0e str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0009bb12 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bb16 mov r3, r4 | r3 = r4;
0x0009bb18 mov r2, r8 | r2 = r8;
0x0009bb1a movs r1, 0x80 | r1 = 0x80;
0x0009bb1c mov r0, sb | r0 = sb;
0x0009bb1e str r6, [sp] | *(sp) = r6;
0x0009bb20 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bb24 b.w 0x9a43a | goto label_59;
| label_177:
0x0009bb28 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009bb2a cmp r3, 0 |
| if (r3 == 0) {
0x0009bb2c beq.w 0x9b60c | goto label_60;
| }
0x0009bb30 str r0, [sp, 0xd4] | var_d4h = r0;
0x0009bb32 b.w 0x9aea4 | goto label_61;
| label_179:
0x0009bb36 movs r1, 0x87 | r1 = 0x87;
0x0009bb38 str r3, [sp] | *(sp) = r3;
0x0009bb3a ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009bb3c mov r0, sb | r0 = sb;
0x0009bb3e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009bb40 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bb44 ldr r1, [sp, 0x64] | r1 = var_64h;
0x0009bb46 adds r3, r7, 2 | r3 = r7 + 2;
| if (r1 == 0) {
0x0009bb48 cbz r1, 0x9bb94 | goto label_182;
| }
0x0009bb4a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009bb4c ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0009bb4e cmp r2, 0 |
| if (r2 == 0) {
0x0009bb50 beq 0x9bad2 | goto label_62;
| }
0x0009bb52 mov r2, r3 | r2 = r3;
0x0009bb54 bl 0x871b8 | fcn_000871b8 (r0, r1, r2);
0x0009bb58 b 0x9bad2 | goto label_62;
| label_181:
0x0009bb5a ldr.w r0, [sb] | r0 = *(sb);
0x0009bb5e ldrb.w r5, [r0, 0x57] | r5 = *((r0 + 0x57));
| if (r5 == 0) {
0x0009bb62 cbnz r5, 0x9bb82 |
0x0009bb64 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009bb66 movs r4, 0x18 | r4 = 0x18;
0x0009bb68 ldr.w r6, [sb, 0x68] | r6 = *((sb + 0x68));
0x0009bb6c mul r4, r3, r4 | r4 = r3 * r4;
0x0009bb70 adds r7, r6, r4 | r7 = r6 + r4;
0x0009bb72 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x0009bb74 ldrsb.w r1, [r7, 1] | r1 = *((r7 + 1));
0x0009bb78 bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x0009bb7c movs r3, 0xb8 | r3 = 0xb8;
0x0009bb7e str r5, [r7, 0x10] | *((r7 + 0x10)) = r5;
0x0009bb80 strh r3, [r6, r4] | *((r6 + r4)) = r3;
| }
0x0009bb82 movs r3, 0 | r3 = 0;
0x0009bb84 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009bb86 movs r1, 0x7a | r1 = 0x7a;
0x0009bb88 mov r0, sb | r0 = sb;
0x0009bb8a str r3, [sp] | *(sp) = r3;
0x0009bb8c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bb8e invalid |
0x0009bb92 pop {r0, r1, r4, r5, r6} |
| label_182:
0x0009bb94 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009bb96 movs r1, 0x87 | r1 = 0x87;
0x0009bb98 mov r0, sb | r0 = sb;
0x0009bb9a str r2, [sp] | *(sp) = r2;
0x0009bb9c ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009bb9e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bba2 b 0x9bad2 | goto label_62;
| label_176:
0x0009bc98 movs r3, 0 | r3 = 0;
0x0009bc9a movs r1, 0x4b | r1 = 0x4b;
0x0009bc9c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009bc9e mov r2, r3 | r2 = r3;
0x0009bca0 bl 0x48c80 | r0 = fcn_00048c80 (r0, r1, r2, r3);
0x0009bca4 mov r1, r0 | r1 = r0;
0x0009bca6 cmp r0, 0 |
| if (r0 == 0) {
0x0009bca8 beq.w 0x9b8bc | goto label_55;
| }
0x0009bcac adds r4, 1 | r4++;
0x0009bcae strh r4, [r0, 0x20] | *((r0 + 0x20)) = r4;
0x0009bcb0 b 0x9b8bc | goto label_55;
| label_152:
0x0009bcb2 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009bcb4 mov r3, r5 | r3 = r5;
0x0009bcb6 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009bcb8 movs r1, 0x76 | r1 = 0x76;
0x0009bcba str r2, [sp] | *(sp) = r2;
0x0009bcbc ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009bcbe bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bcc2 mov r8, r0 | r8 = r0;
0x0009bcc4 b.w 0x9b36a | goto label_63;
| label_153:
0x0009bcc8 mvn r1, 7 | r1 = ~7;
0x0009bccc bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x0009bcd0 b.w 0x9b36a | goto label_63;
| label_160:
0x0009bcd4 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0009bcd6 ldr r2, [sp, 0xa4] | r2 = var_a4h;
0x0009bcd8 mvns r3, r3 | r3 = ~r3;
0x0009bcda lsrs r3, r3, 0x1f | r3 >>= 0x1f;
0x0009bcdc cmp r2, r3 |
| if (r2 <= r3) {
0x0009bcde ble.w 0x9b476 | goto label_64;
| }
0x0009bce2 movs r5, 0 | r5 = 0;
0x0009bce4 movs r1, 0xe | r1 = 0xe;
0x0009bce6 mov r3, r5 | r3 = r5;
0x0009bce8 mov r2, r5 | r2 = r5;
0x0009bcea ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009bcec str r5, [sp] | *(sp) = r5;
0x0009bcee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bcf2 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009bcf4 mov r4, r0 | r4 = r0;
0x0009bcf6 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009bcf8 movs r2, 0x71 | r2 = 0x71;
0x0009bcfa ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009bcfc str r3, [sp, 4] | var_4h = r3;
0x0009bcfe ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009bd00 strd r5, r5, [sp, 8] | __asm ("strd r5, r5, [sp, 8]");
0x0009bd04 str r3, [sp] | *(sp) = r3;
0x0009bd06 mov r3, r5 | r3 = r5;
0x0009bd08 bl 0x4f62c | fcn_0004f62c (r0, r1, r2, r3, r4, r5, r6);
| if (r4 == 0) {
0x0009bd0c cbz r4, 0x9bd4e | goto label_183;
| }
0x0009bd0e ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0009bd10 ldr r2, [r1, 0x6c] | r2 = *((r1 + 0x6c));
0x0009bd12 subs r3, r2, 1 | r3 = r2 - 1;
0x0009bd14 cmp r4, r3 |
0x0009bd16 it eq |
| if (r4 != r3) {
0x0009bd18 streq r4, [r1, 0x6c] | *((r1 + 0x6c)) = r4;
| }
| if (r4 != r3) {
0x0009bd1a beq 0x9bd38 |
0x0009bd1c ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0009bd1e bics.w r4, r4, r4, asr 32 | __asm ("bics.w r4, r4, r4, asr 32");
0x0009bd22 it hs |
| if (r4 < r3) {
0x0009bd24 movhs r4, r3 | r4 = r3;
| }
0x0009bd26 ldr r3, [r1] | r3 = *(r1);
0x0009bd28 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0009bd2c cbnz r3, 0x9bd64 | goto label_184;
| }
0x0009bd2e ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0009bd30 movs r1, 0x18 | r1 = 0x18;
0x0009bd32 mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_67:
0x0009bd36 str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
0x0009bd38 ldr r3, [sp, 0x114] | r3 = var_114h;
0x0009bd3a ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009bd3c cmp r3, r2 |
| if (r3 == r2) {
0x0009bd3e beq.w 0x9b70a | goto label_65;
| }
0x0009bd42 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0009bd44 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009bd46 cmp r3, r2 |
| if (r3 == r2) {
0x0009bd48 beq.w 0x9b70a | goto label_65;
| }
0x0009bd4c b 0x9b6ee | goto label_66;
| label_183:
0x0009bd4e ldr r3, [sp, 0x114] | r3 = var_114h;
0x0009bd50 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009bd52 cmp r3, r2 |
| if (r3 == r2) {
0x0009bd54 beq.w 0x9b70a | goto label_65;
| }
0x0009bd58 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0009bd5a ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009bd5c cmp r2, r3 |
| if (r2 == r3) {
0x0009bd5e beq.w 0x9b70a | goto label_65;
| }
0x0009bd62 b 0x9b6ee | goto label_66;
| label_184:
0x0009bd64 ldr r3, [pc, 0x10c] |
0x0009bd66 add r3, pc | r3 = 0x137bde;
0x0009bd68 adds r3, 4 | r3 += 4;
0x0009bd6a b 0x9bd36 | goto label_67;
| label_148:
0x0009bd6c str r3, [sp] | *(sp) = r3;
0x0009bd6e movs r1, 0x87 | r1 = 0x87;
0x0009bd70 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009bd72 mov r3, fp | r3 = fp;
0x0009bd74 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009bd76 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_158:
0x0009bd7a cmp.w r8, 0 |
| if (r8 != 0) {
0x0009bd7e bne 0x9bde8 | goto label_185;
| }
| label_71:
0x0009bd80 movs r3, 0 | r3 = 0;
0x0009bd82 str r3, [sp, 0x84] | var_84h = r3;
0x0009bd84 b.w 0x9aa2a | goto label_37;
| label_157:
0x0009bd88 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0009bd8a cmp r3, 0 |
| if (r3 < 0) {
0x0009bd8c blt.w 0x9b274 | goto label_39;
| }
0x0009bd90 ldr r2, [sp, 0x54] | r2 = var_54h_2;
0x0009bd92 cmp r2, r3 |
| if (r2 == r3) {
0x0009bd94 beq.w 0x9b274 | goto label_39;
| }
0x0009bd98 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0009bd9a subs r3, r3, r2 | r3 -= r2;
0x0009bd9c ldr r2, [sp, 0x94] | r2 = var_94h;
0x0009bd9e ldrb r3, [r2, r3] | r3 = *((r2 + r3));
0x0009bda0 clz r3, r3 | r3 &= r3;
0x0009bda4 lsrs r3, r3, 5 | r3 >>= 5;
0x0009bda6 lsl.w sb, r3, 1 | sb = r3 << 1;
0x0009bdaa b.w 0x9b3e8 | goto label_68;
| label_155:
0x0009bdae movs r3, 4 | r3 = 4;
0x0009bdb0 b.w 0x9b392 | goto label_69;
| label_154:
0x0009bdb4 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009bdb6 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0009bdb8 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009bdba str r3, [sp, 4] | var_4h = r3;
0x0009bdbc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009bdbe ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009bdc0 str r3, [sp] | *(sp) = r3;
0x0009bdc2 ldr r3, [sp, 0x54] | r3 = var_54h_2;
0x0009bdc4 cmp r2, 2 |
0x0009bdc6 it eq |
| if (r2 != 2) {
0x0009bdc8 moveq r3, r1 | r3 = r1;
| }
0x0009bdca ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009bdcc str r3, [sp, 0x54] | var_54h_2 = r3;
0x0009bdce ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009bdd0 bl 0x8ecac | fcn_0008ecac (r0, r1, r2, r3, r4, r5, r6);
0x0009bdd4 b.w 0x9aa10 | goto label_70;
| label_156:
0x0009bdd8 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0009bdda cmp r3, 0 |
| if (r3 == 0) {
0x0009bddc beq.w 0x9b60c | goto label_60;
| }
0x0009bde0 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0009bde2 str r2, [sp, 0xd4] | var_d4h = r2;
0x0009bde4 b.w 0x9aea4 | goto label_61;
| label_185:
0x0009bde8 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009bdea mov r1, r8 | r1 = r8;
0x0009bdec bl 0x32ebc | fcn_00032ebc (r0, r1);
0x0009bdf0 b 0x9bd80 | goto label_71;
| label_159:
0x0009bdf2 ldr r0, [sp, 0xa0] | r0 = var_a0h;
0x0009bdf4 bl 0x8248c | fcn_0008248c (r0, r1);
0x0009bdf8 b.w 0x9b442 | goto label_72;
| label_122:
0x0009bdfc ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009bdfe mov r8, r3 | r8 = r3;
0x0009be00 str r3, [sp, 0x48] | var_48h = r3;
0x0009be02 b.w 0x9b25e | goto label_73;
| label_118:
0x0009be06 mov r1, r2 | r1 = r2;
0x0009be08 ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x0009be0a cmp r2, 0 |
| if (r2 != 0) {
0x0009be0c bne.w 0x9aeb0 | goto label_74;
| }
0x0009be10 ldrb.w r3, [r1, 0x95] | r3 = *((r1 + 0x95));
0x0009be14 ldr r1, [sp, 0x60] | r1 = var_60h;
0x0009be16 cmp r3, 0 |
0x0009be18 it eq |
| if (r3 == 0) {
0x0009be1a cmpeq r1, 0 | __asm ("cmpeq r1, 0");
| }
0x0009be1c ite eq |
| if (r3 != 0) {
0x0009be1e moveq r3, 1 | r3 = 1;
| }
| if (r3 != 0) {
0x0009be20 movne r3, 0 | r3 = 0;
| goto label_186;
| }
| if (r3 != 0) {
| label_186:
0x0009be22 bne.w 0x9aeb0 | goto label_74;
| }
0x0009be26 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009be28 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x0009be2a ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x0009be2c adds r3, 1 | r3++;
0x0009be2e str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x0009be30 movs r1, 0x47 | r1 = 0x47;
0x0009be32 str r2, [sp] | *(sp) = r2;
0x0009be34 str r3, [sp, 0x90] | var_90h = r3;
0x0009be36 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009be3a b.w 0x9a9cc | goto label_21;
| label_125:
0x0009be3e movs r3, 0 | r3 = 0;
0x0009be40 str r3, [sp, 0x70] | var_70h = r3;
0x0009be42 b.w 0x9b516 | goto label_75;
| label_147:
0x0009be46 mov r7, r3 | r7 = r3;
0x0009be48 mov r6, r3 | r6 = r3;
0x0009be4a str r3, [sp, 0x88] | var_88h = r3;
0x0009be4c b.w 0x9b372 | goto label_76;
| label_146:
0x0009be64 mov r3, fp | r3 = fp;
0x0009be66 str r0, [sp, 0xb4] | var_b4h = r0;
0x0009be68 b.w 0x9a982 | goto label_77;
| label_175:
0x0009be6c movs r3, 0 | r3 = 0;
0x0009be6e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0009be70 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x9be78 */
| #include <stdint.h>
|
; (fcn) fcn.0009be78 () | void fcn_0009be78 (int16_t arg_4h, arithmetic x, int16_t arg_60h, arithmetic arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009be78 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009be7c mov fp, r3 |
0x0009be7e ldr r3, [r0] | r3 = *(r0);
0x0009be80 sub sp, 0x3c |
0x0009be82 mov sb, r1 | sb = r1;
0x0009be84 mov r8, r0 | r8 = r0;
0x0009be86 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x0009be88 mov r6, r2 | r6 = r2;
0x0009be8a str r3, [sp, 0x18] | var_18h = r3;
0x0009be8c ldr.w r3, [sb, 0x28] | r3 = *((sb + 0x28));
0x0009be90 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0009be92 str r1, [sp, 0x14] | var_14h = r1;
0x0009be94 str r3, [sp, 0x20] | var_20h = r3;
0x0009be96 mov r3, sb | r3 = sb;
0x0009be98 b 0x9bea4 |
| while (r2 != 0) {
0x0009be9a ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0009be9c cmp fp, r2 |
| if (fp == r2) {
0x0009be9e beq 0x9beaa | goto label_6;
| }
0x0009bea0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
| if (r3 == 0) {
0x0009bea2 cbz r3, 0x9beaa | goto label_6;
| }
0x0009bea4 ldr r2, [r3] | r2 = *(r3);
0x0009bea6 cmp r2, 0 |
0x0009bea8 bne 0x9be9a |
| }
| label_6:
0x0009beaa ldr r1, [pc, 0x238] |
0x0009beac mov r0, r7 | r0 = r7;
0x0009beae str r3, [sp, 0x1c] | var_1ch = r3;
0x0009beb0 add r1, pc | r1 = 0x137f9a;
0x0009beb2 bl 0x4a160 | fcn_0004a160 (r0);
0x0009beb6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0009beb8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0009beba cmp.w fp, 0 |
0x0009bebe it ne |
| if (fp != 0) {
0x0009bec0 cmpne r3, r2 | __asm ("cmpne r3, r2");
| }
| if (fp == 0) {
0x0009bec2 beq.w 0x9bfe4 | goto label_2;
| }
0x0009bec6 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0009bec8 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
| if (r1 >= r3) {
0x0009beca bpl.w 0x9c078 | goto label_7;
| }
0x0009bece ldr.w sl, [r6, 8] | sl = *((r6 + 8));
0x0009bed2 mov r2, sl | r2 = sl;
0x0009bed4 cmp.w sl, 0 |
| if (sl != 0) {
0x0009bed8 bne 0x9bee4 | goto label_8;
| }
0x0009beda b 0x9c0de | goto label_9;
| do {
0x0009bedc ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0009bede cmp r2, 0 |
| if (r2 == 0) {
0x0009bee0 beq.w 0x9c0de | goto label_9;
| }
| label_8:
0x0009bee4 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x0009bee8 and r3, r3, 3 | r3 &= 3;
0x0009beec cmp r3, 2 |
0x0009beee bne 0x9bedc |
| } while (r3 != 2);
0x0009bef0 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0009bef4 mov sl, r2 | sl = r2;
0x0009bef6 ldrh r1, [r2, 0x32] | r1 = *((r2 + 0x32));
0x0009bef8 adds r2, r3, r1 | r2 = r3 + r1;
0x0009befa adds r3, 1 | r3++;
0x0009befc str r1, [sp, 0x28] | var_28h = r1;
0x0009befe str.w r2, [r8, 0x2c] | __asm ("str.w r2, [r8, 0x2c]");
0x0009bf02 str r3, [sp, 0x2c] | var_2ch = r3;
0x0009bf04 cmp r1, 0 |
| if (r1 == 0) {
0x0009bf06 beq 0x9bf86 | goto label_10;
| }
0x0009bf08 ldr r3, [pc, 0x1dc] |
0x0009bf0a movs r5, 0 | r5 = 0;
0x0009bf0c str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x0009bf10 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x0009bf14 ldr.w r8, [sp, 0x28] | r8 = var_28h;
0x0009bf18 add r3, pc | r3 = 0x138004;
0x0009bf1a ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x0009bf1e str r3, [sp, 0x24] | var_24h = r3;
| label_0:
0x0009bf20 ldrh.w r0, [fp, 0x34] | r0 = *(x);
0x0009bf24 lsls r4, r5, 1 | r4 = r5 << 1;
0x0009bf26 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0009bf2a ldrsh.w ip, [r3, r5, lsl 1] | offset_0 = r5 << 1;
| ip = *((r3 + offset_0));
0x0009bf2e cmp r0, 0 |
| if (r0 == 0) {
0x0009bf30 beq.w 0x9c0d0 | goto label_11;
| }
0x0009bf34 ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x0009bf38 movs r3, 0 | r3 = 0;
0x0009bf3a subs r2, 2 | r2 -= 2;
0x0009bf3c b 0x9bf46 |
| while (r1 != ip) {
0x0009bf3e adds r3, 1 | r3++;
0x0009bf40 cmp r3, r0 |
| if (r3 == r0) {
0x0009bf42 beq.w 0x9c0d0 | goto label_11;
| }
0x0009bf46 ldrsh r1, [r2, 2]! | r1 = *((r2 += 2));
0x0009bf4a cmp r1, ip |
0x0009bf4c bne 0x9bf3e |
| }
0x0009bf4e sxth r3, r3 | __asm ("sxth r3, r3");
| label_4:
0x0009bf50 add.w r2, sb, r5 | r2 = sb + r5;
0x0009bf54 movs r1, 0x5e | r1 = 0x5e;
0x0009bf56 str r2, [sp] | *(sp) = r2;
0x0009bf58 mov r0, r7 | r0 = r7;
0x0009bf5a ldr r2, [sp, 0x14] | r2 = var_14h;
0x0009bf5c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009bf60 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0009bf64 adds r5, 1 | r5++;
0x0009bf66 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0009bf68 mov r0, r7 | r0 = r7;
0x0009bf6a ldr r1, [sp, 0x24] | r1 = var_24h;
0x0009bf6c ldrsh r3, [r3, r4] | r3 = *((r3 + r4));
0x0009bf6e add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009bf72 ldr.w r3, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| r3 = *((r2 + offset_1));
0x0009bf76 ldr.w r2, [fp] | r2 = *(fp);
0x0009bf7a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009bf7e cmp r8, r5 |
| if (r8 != r5) {
0x0009bf80 bne 0x9bf20 | goto label_0;
| }
0x0009bf82 ldrd r8, sb, [sp, 0x30] | __asm ("ldrd r8, sb, [var_30h]");
| label_10:
0x0009bf86 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009bf88 movs r1, 0x1c | r1 = 0x1c;
0x0009bf8a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0009bf8c mov r0, r7 | r0 = r7;
0x0009bf8e str r3, [sp, 4] | var_4h = r3;
0x0009bf90 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009bf92 str r3, [sp] | *(sp) = r3;
0x0009bf94 movs r3, 0 | r3 = 0;
0x0009bf96 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0009bf9a ldr r3, [pc, 0x150] |
0x0009bf9c mov r5, r0 | r5 = r0;
0x0009bf9e movs r2, 0xb | r2 = 0xb;
0x0009bfa0 movs r1, 0x46 | r1 = 0x46;
0x0009bfa2 mov r0, r7 | r0 = r7;
0x0009bfa4 add r3, pc | r3 = 0x138096;
0x0009bfa6 str r3, [sp, 4] | var_4h = r3;
0x0009bfa8 mov.w r3, -1 | r3 = -1;
0x0009bfac str r3, [sp, 8] | var_8h = r3;
0x0009bfae movs r3, 0 | r3 = 0;
0x0009bfb0 str r3, [sp] | *(sp) = r3;
0x0009bfb2 movs r3, 2 | r3 = 2;
0x0009bfb4 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0009bfb8 ldr.w r3, [r8, 0x74] | r3 = *((r8 + 0x74));
0x0009bfbc movs r2, 1 | r2 = 1;
0x0009bfbe cmp r3, 0 |
0x0009bfc0 it eq |
| if (r3 != 0) {
0x0009bfc2 moveq r3, r8 | r3 = r8;
| }
0x0009bfc4 cmp r5, 0 |
0x0009bfc6 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x0009bfc8 ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
| if (r5 < 0) {
0x0009bfca bge 0x9bfce |
0x0009bfcc subs r5, r2, 1 | r5 = r2 - 1;
| }
0x0009bfce ldr r3, [r7] | r3 = *(r7);
0x0009bfd0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009bfd4 cmp r3, 0 |
| if (r3 != 0) {
0x0009bfd6 bne 0x9c0d6 | goto label_12;
| }
0x0009bfd8 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x0009bfda add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0009bfde add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
| label_5:
0x0009bfe2 str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_2:
0x0009bfe4 ldr.w r1, [sb, 0x20] | r1 = *((sb + 0x20));
0x0009bfe8 movs r2, 0 | r2 = 0;
0x0009bfea ldr r0, [sp, 0x18] | r0 = var_18h;
0x0009bfec bl 0x3a874 | fcn_0003a874 (r0, r1, r2);
0x0009bff0 ldrsh.w r1, [r6, 0x22] | r1 = *((r6 + 0x22));
0x0009bff4 mov r4, r0 | r4 = r0;
0x0009bff6 cmp r1, 0 |
0x0009bff8 itt gt |
| if (r1 <= 0) {
0x0009bffa movgt r5, 0 | r5 = 0;
| }
| if (r1 <= 0) {
0x0009bffc movgt fp, r5 |
| }
| if (r1 > 0) {
0x0009bffe bgt 0x9c008 | goto label_1;
| }
0x0009c000 b 0x9c036 | goto label_13;
| do {
0x0009c002 adds r5, 1 | r5++;
0x0009c004 cmp r1, r5 |
| if (r1 <= r5) {
0x0009c006 ble 0x9c036 | goto label_13;
| }
| label_1:
0x0009c008 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0009c00a add.w r2, r5, r5, lsl 1 | r2 = r5 + (r5 << 1);
0x0009c00e add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0009c012 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x0009c014 cmp r3, 0x45 |
0x0009c016 bne 0x9c002 |
| } while (r3 != 0x45);
0x0009c018 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009c01c movs r1, 0x57 | r1 = 0x57;
0x0009c01e ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x0009c022 movs r3, 0 | r3 = 0;
0x0009c024 mov r0, r7 | r0 = r7;
0x0009c026 add r2, r5 | r2 += r5;
0x0009c028 adds r5, 1 | r5++;
0x0009c02a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009c02e ldrsh.w r1, [r6, 0x22] | r1 = *((r6 + 0x22));
0x0009c032 cmp r1, r5 |
| if (r1 > r5) {
0x0009c034 bgt 0x9c008 | goto label_1;
| }
| label_13:
0x0009c036 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0009c038 movs r2, 0 | r2 = 0;
0x0009c03a ldr r0, [sp, 0x18] | r0 = var_18h;
0x0009c03c ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0009c03e bl 0x3a3f8 | fcn_0003a3f8 (r0, r1, r2, r3, r4);
0x0009c042 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0009c044 mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x0009c046 cbz r3, 0x9c056 |
0x0009c048 mov r1, r3 | r1 = r3;
0x0009c04a movs r3, 0 | r3 = 0;
0x0009c04c mov r2, r3 | r2 = r3;
0x0009c04e ldr r0, [sp, 0x18] | r0 = var_18h;
0x0009c050 bl 0x3a0fc | r0 = fcn_0003a0fc (r0, r1, r2, r3);
0x0009c054 mov r3, r0 | r3 = r0;
| }
0x0009c056 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0009c058 mov r1, r4 | r1 = r4;
0x0009c05a movs r4, 2 | r4 = 2;
0x0009c05c mov r0, r8 | r0 = r8;
0x0009c05e str r4, [sp] | *(sp) = r4;
0x0009c060 str r2, [sp, 4] | var_4h = r2;
0x0009c062 mov r2, r5 | r2 = r5;
0x0009c064 bl 0x9a3a0 | fcn_0009a3a0 (r0, r1, r2, r3, r4, r5, r6);
0x0009c068 ldr r1, [pc, 0x84] |
0x0009c06a mov r0, r7 | r0 = r7;
0x0009c06c add r1, pc | r1 = 0x138160;
0x0009c06e add sp, 0x3c |
0x0009c070 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009c074 b.w 0x4a160 | void (*0x4a160)() ();
| label_7:
0x0009c078 ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
| if (r3 == 0) {
0x0009c07c cbz r3, 0x9c0c4 | goto label_14;
| }
0x0009c07e subs r3, 1 | r3--;
0x0009c080 uxtb r3, r3 | r3 = (int8_t) r3;
0x0009c082 strb.w r3, [r8, 0x13] | *((r8 + 0x13)) = r3;
0x0009c086 adds r3, 0x26 | r3 += 0x26;
0x0009c088 ldr.w r5, [r8, r3, lsl 2] | offset_2 = r3 << 2;
| r5 = *((r8 + offset_2));
| label_3:
0x0009c08c movs r4, 0 | r4 = 0;
0x0009c08e ldr r2, [sp, 0x14] | r2 = var_14h;
0x0009c090 mov r3, r5 | r3 = r5;
0x0009c092 movs r1, 0x8e | r1 = 0x8e;
0x0009c094 mov r0, r7 | r0 = r7;
0x0009c096 str r4, [sp] | *(sp) = r4;
0x0009c098 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009c09c ldr r2, [sp, 0x20] | r2 = var_20h;
0x0009c09e mov r3, r4 | r3 = r4;
0x0009c0a0 movs r1, 0x1d | r1 = 0x1d;
0x0009c0a2 mov r0, r7 | r0 = r7;
0x0009c0a4 str r5, [sp] | *(sp) = r5;
0x0009c0a6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009c0aa cmp r5, 0 |
| if (r5 == 0) {
0x0009c0ac beq 0x9bfe4 | goto label_2;
| }
0x0009c0ae ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0009c0b2 cmp r3, 7 |
| if (r3 > 7) {
0x0009c0b4 bhi 0x9bfe4 | goto label_2;
| }
0x0009c0b6 adds r2, r3, 1 | r2 = r3 + 1;
0x0009c0b8 adds r3, 0x26 | r3 += 0x26;
0x0009c0ba strb.w r2, [r8, 0x13] | *((r8 + 0x13)) = r2;
0x0009c0be str.w r5, [r8, r3, lsl 2] | __asm ("str.w r5, [r8, r3, lsl 2]");
0x0009c0c2 b 0x9bfe4 | goto label_2;
| label_14:
0x0009c0c4 ldr.w r5, [r8, 0x2c] | r5 = *((r8 + 0x2c));
0x0009c0c8 adds r5, 1 | r5++;
0x0009c0ca str.w r5, [r8, 0x2c] | __asm ("str.w r5, [r8, 0x2c]");
0x0009c0ce b 0x9c08c | goto label_3;
| label_11:
0x0009c0d0 mov.w r3, -1 | r3 = -1;
0x0009c0d4 b 0x9bf50 | goto label_4;
| label_12:
0x0009c0d6 ldr r3, [pc, 0x1c] |
0x0009c0d8 add r3, pc | r3 = 0x1381d2;
0x0009c0da adds r3, 4 | r3 += 4;
0x0009c0dc b 0x9bfe2 | goto label_5;
| label_9:
0x0009c0de movs r3, 0 | r3 = 0;
0x0009c0e0 ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0009c0e2 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x9cf78 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0009cf78 () | void fcn_0009cf78 (int16_t arg_118h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_130h, int16_t arg_134h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic var_24h;
| arithmetic var_28h;
| int16_t var_2ch;
| arithmetic var_30h;
| int16_t var_34h;
| int16_t var_38h;
| arithmetic var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| arithmetic var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| arithmetic var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| arithmetic var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| arithmetic x;
| int16_t var_d4h;
| int32_t var_d8h;
| int32_t var_d8h_2;
| int32_t var_e0h;
| int16_t var_e4h;
| int16_t var_e8h;
| int16_t var_ech;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009cf78 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009cf7c sub sp, 0xf4 |
0x0009cf7e mov r4, r0 | r4 = r0;
0x0009cf80 str r0, [sp, 0x28] | var_28h = r0;
0x0009cf82 mov sl, r1 | sl = r1;
0x0009cf84 ldr.w r0, [pc, 0xb14] |
0x0009cf88 ldr.w r1, [pc, 0xb14] | r1 = *(0x9daa0);
0x0009cf8c ldr.w sb, [r4, 8] | sb = *((r4 + 8));
0x0009cf90 add r0, pc | r0 = 0x13aa30;
0x0009cf92 ldrsh.w r8, [sl, 0x22] | r8 = *((sl + 0x22));
0x0009cf96 ldr r1, [r0, r1] |
0x0009cf98 ldr r1, [r1] | r1 = imp.atan;
0x0009cf9a str r1, [sp, 0xec] | var_ech = r1;
0x0009cf9c mov.w r1, 0 | r1 = 0;
0x0009cfa0 ldrb.w r1, [sp, 0x124] | r1 = *(arg_124h);
0x0009cfa4 str r3, [sp, 0x98] | var_98h = r3;
0x0009cfa6 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009cfa8 str r1, [sp, 0x6c] | var_6ch = r1;
0x0009cfaa ldrb.w r1, [sp, 0x128] | r1 = *(arg_128h);
0x0009cfae str r2, [sp, 0x34] | var_34h = r2;
0x0009cfb0 subs r3, 0 |
0x0009cfb2 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x0009cfb6 it ne |
| if (r3 == 0) {
0x0009cfb8 movne r3, 1 | r3 = 1;
| }
0x0009cfba str r1, [sp, 0x38] | var_38h = r1;
0x0009cfbc ldr r1, [sp, 0x130] | r1 = *(arg_130h);
0x0009cfbe str r3, [sp, 0x64] | var_64h = r3;
0x0009cfc0 ands r3, r2, 0x80 | r3 = r2 & 0x80;
0x0009cfc4 str r1, [sp, 0xb0] | var_b0h = r1;
0x0009cfc6 ldrd fp, r1, [sp, 0x134] | __asm ("ldrd fp, r1, [arg_134h]");
0x0009cfca str r1, [sp, 0x44] | var_44h = r1;
0x0009cfcc ldr r1, [r4] | r1 = *(r4);
0x0009cfce str r1, [sp, 0x3c] | var_3ch = r1;
| if (r3 == r2) {
0x0009cfd0 beq.w 0x9d1a2 | goto label_78;
| }
0x0009cfd4 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0009cfd8 str r3, [sp, 0x4c] | var_4ch = r3;
0x0009cfda ldr r1, [sp, 0x4c] | r1 = var_4ch;
| if (r3 != 0) {
0x0009cfdc cbnz r3, 0x9cfea | goto label_79;
| }
0x0009cfde b.w 0x9e448 | goto label_80;
| do {
0x0009cfe2 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0009cfe4 cmp r1, 0 |
| if (r1 == 0) {
0x0009cfe6 beq.w 0x9e448 | goto label_80;
| }
| label_79:
0x0009cfea ldrb.w r3, [r1, 0x37] | r3 = *((r1 + 0x37));
0x0009cfee and r3, r3, 3 | r3 &= 3;
0x0009cff2 cmp r3, 2 |
0x0009cff4 bne 0x9cfe2 |
| } while (r3 != 2);
0x0009cff6 ldrh r3, [r1, 0x32] | r3 = *((r1 + 0x32));
0x0009cff8 lsls r4, r2, 0x14 | r4 = r2 << 0x14;
0x0009cffa str r1, [sp, 0x4c] | var_4ch = r1;
0x0009cffc str r3, [sp, 0x78] | var_78h = r3;
| if (r4 < r2) {
0x0009cffe bmi.w 0x9d1b0 | goto label_81;
| }
| label_0:
0x0009d002 ldr.w ip, [sl, 0x10] | ip = *((sl + 0x10));
0x0009d006 cmp.w ip, 0 |
| if (ip == 0) {
0x0009d00a beq.w 0x9d40a | goto label_82;
| }
0x0009d00e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009d010 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009d012 and r7, r3, 0x200 | r7 = r3 & 0x200;
0x0009d016 cmp r7, 0 |
| if (r7 != 0) {
0x0009d018 bne.w 0x9d40a | goto label_82;
| }
0x0009d01c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009d01e ldr.w r0, [ip] | r0 = *(ip);
0x0009d022 ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009d024 cmp r3, 0xb |
0x0009d026 ldr r1, [sp, 0x28] | r1 = var_28h;
0x0009d028 ite ne |
| if (r3 == 0xb) {
0x0009d02a movne r8, r3 | r8 = r3;
| }
| if (r3 != 0xb) {
0x0009d02c moveq r8, 2 | r8 = 2;
| }
0x0009d030 cmp r0, 0 |
0x0009d032 mvn.w r2, r2 | r2 = ~r2;
0x0009d036 str r2, [r1, 0x34] | *((r1 + 0x34)) = r2;
| if (r0 <= 0) {
0x0009d038 ble 0x9d11c | goto label_83;
| }
0x0009d03a ldr.w r3, [pc, 0xa68] | r3 = *(0x0009daa4);
0x0009d03e mov r5, ip | r5 = ip;
0x0009d040 str.w sl, [sp, 0x40] | __asm ("str.w sl, [var_40h]");
0x0009d044 mov r6, r7 | r6 = r7;
0x0009d046 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0009d04a mov sl, r1 | sl = r1;
0x0009d04c mov fp, ip |
0x0009d04e add r3, pc | r3 += pc;
0x0009d050 str r3, [sp, 0x2c] | var_2ch = r3;
| do {
0x0009d052 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009d054 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0009d056 cmp r2, 0 |
| if (r2 == 0) {
0x0009d058 beq.w 0x9d642 | goto label_84;
| }
0x0009d05c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009d05e add r0, sp, 0xd0 | r0 += x;
0x0009d060 str r2, [sp, 0xd4] | var_d4h = r2;
0x0009d062 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009d064 str r2, [sp, 0xe8] | var_e8h = r2;
0x0009d066 movs r2, 0 | r2 = 0;
0x0009d068 str r2, [sp, 0xd0] | x = r2;
0x0009d06a strd r2, r2, [sp, 0xd8] | __asm ("strd r2, r2, [var_d8h]");
0x0009d06e strd r2, r2, [sp, 0xe0] | __asm ("strd r2, r2, [var_e4h]");
0x0009d072 cmp r3, 0 |
| if (r3 != 0) {
0x0009d074 beq 0x9d10c |
0x0009d076 mov r1, r3 | r1 = r3;
0x0009d078 str r3, [sp, 0x30] | var_30h = r3;
0x0009d07a bl 0x35b0c | fcn_00035b0c (r0, r1);
0x0009d07e ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x0009d080 ldrh.w r2, [sp, 0xe4] | r2 = var_e4h;
0x0009d084 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r1 == 0) {
0x0009d086 cbnz r1, 0x9d090 |
0x0009d088 bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x0009d08c lsls r2, r2, 0x10 | r2 <<= 0x10;
0x0009d08e lsrs r2, r2, 0x10 | r2 >>= 0x10;
| }
0x0009d090 cmp r2, 0 |
| if (r2 == 0) {
0x0009d092 beq 0x9d10c | goto label_85;
| }
0x0009d094 cmp r7, 0 |
| if (r7 == 0) {
0x0009d096 beq.w 0x9d694 | goto label_86;
| }
0x0009d09a ldr.w r4, [sl, 0x38] | r4 = *((sl + 0x38));
0x0009d09e subs r7, r4, 1 | r7 = r4 - 1;
0x0009d0a0 str.w r7, [sl, 0x38] | __asm ("str.w r7, [sl, 0x38]");
| label_15:
0x0009d0a4 mov r1, r3 | r1 = r3;
0x0009d0a6 movs r3, 0 | r3 = 0;
0x0009d0a8 mov r2, r3 | r2 = r3;
0x0009d0aa ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009d0ac bl 0x3a0fc | fcn_0003a0fc (r0, r1, r2, r3);
0x0009d0b0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009d0b2 mov r1, r0 | r1 = r0;
0x0009d0b4 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009d0b8 cmp r3, 0 |
| if (r3 == 0) {
0x0009d0ba beq.w 0x9d61c | goto label_87;
| }
| if (r1 != 0) {
| label_13:
0x0009d0be cbz r1, 0x9d0c6 |
0x0009d0c0 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009d0c2 bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
| label_16:
0x0009d0c6 cmp.w r8, 4 |
| if (r8 == 4) {
0x0009d0ca beq.w 0x9d674 | goto label_88;
| }
| label_17:
0x0009d0ce cmp.w r8, 5 |
0x0009d0d2 mov.w r2, 0 | r2 = 0;
0x0009d0d6 it eq |
| if (r8 != 5) {
0x0009d0d8 moveq r8, 2 | r8 = 2;
| }
0x0009d0dc movs r1, 3 | r1 = 3;
0x0009d0de ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0009d0e0 mov r0, sl | r0 = sl;
0x0009d0e2 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x0009d0e6 mov r2, r8 | r2 = r8;
0x0009d0e8 movw r1, 0x113 | r1 = 0x113;
0x0009d0ec bl 0x41ebc | fcn_00041ebc (r0, r1, r2, r3, r4, r5);
0x0009d0f0 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009d0f4 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009d0f8 cmn r2, r3 |
| if (r2 < r3) {
0x0009d0fa bmi.w 0x9d68a | goto label_89;
| }
| label_18:
0x0009d0fe ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0009d100 lsls r4, r4, 2 | r4 <<= 2;
0x0009d102 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0009d106 rsbs r4, r4, 0 | r4 -= ;
0x0009d108 str r2, [r3, r4] | *((r3 + r4)) = r2;
| label_19:
0x0009d10a movs r7, 1 | r7 = 1;
| }
| label_85:
0x0009d10c ldr.w r3, [fp] | r3 = *(fp);
0x0009d110 adds r6, 1 | r6++;
0x0009d112 adds r5, 0x10 | r5 += 0x10;
0x0009d114 cmp r3, r6 |
0x0009d116 bgt 0x9d052 |
| } while (r3 > r6);
0x0009d118 ldr.w sl, [sp, 0x40] | sl = var_40h;
| label_83:
0x0009d11c ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009d11e movs r3, 0 | r3 = 0;
0x0009d120 ldr.w r8, [sl, 8] | r8 = *((sl + 8));
0x0009d124 str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0009d126 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009d128 mov r3, r8 | r3 = r8;
0x0009d12a cmp r2, 0 |
| if (r2 != 0) {
0x0009d12c bne.w 0x9d41a | goto label_90;
| }
| label_8:
0x0009d130 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009d132 str r3, [sp, 0x68] | var_68h = r3;
0x0009d134 str r3, [sp, 0x48] | var_48h = r3;
| label_14:
0x0009d136 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009d138 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009d13a tst.w r3, 0x6000 |
| if ((r3 & 0x6000) == 0) {
0x0009d13e beq.w 0x9d4fe | goto label_50;
| }
| label_10:
0x0009d142 and r3, r3, 0x2000 | r3 &= 0x2000;
0x0009d146 cmp r3, 0 |
| if (r3 == 0) {
0x0009d148 beq.w 0x9debc | goto label_91;
| }
0x0009d14c ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0009d150 cmp r3, 0 |
| if (r3 == 0) {
0x0009d152 beq.w 0x9dfce | goto label_92;
| }
| label_58:
0x0009d156 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009d158 ldrb.w r3, [r3, 0x97] | r3 = *((r3 + 0x97));
0x0009d15c cmp r3, 0 |
| if (r3 != 0) {
0x0009d15e bne.w 0x9dfe2 | goto label_93;
| }
0x0009d162 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d164 movs r2, 0x80 | r2 = 0x80;
0x0009d166 mov r1, sl | r1 = sl;
0x0009d168 str r3, [sp] | *(sp) = r3;
0x0009d16a bl 0x45008 | fcn_00045008 (r0, r1, r2, r3, r4);
0x0009d16e str r0, [sp, 0xac] | var_ach = r0;
0x0009d170 cmp r0, 0 |
| if (r0 == 0) {
0x0009d172 beq.w 0x9dfe2 | goto label_93;
| }
| label_51:
0x0009d176 ldr r4, [sp, 0x28] | r4 = var_28h;
0x0009d178 movs r2, 0 | r2 = 0;
0x0009d17a movs r1, 0x47 | r1 = 0x47;
0x0009d17c mov r0, sb | r0 = sb;
0x0009d17e ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0009d180 adds r3, 1 | r3++;
0x0009d182 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0009d184 str r2, [sp] | *(sp) = r2;
0x0009d186 str r3, [sp, 0x94] | var_94h = r3;
0x0009d188 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d18c ldr.w r1, [pc, 0x918] |
0x0009d190 mov r0, sb | r0 = sb;
0x0009d192 add r1, pc | r1 = 0x13ac3e;
0x0009d194 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009d198 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0009d19a subs r3, 1 | r3--;
0x0009d19c str r3, [sp, 0xa8] | var_a8h = r3;
0x0009d19e str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x0009d1a0 b 0x9d506 | goto label_94;
| label_78:
0x0009d1a2 lsls r4, r2, 0x14 | r4 = r2 << 0x14;
0x0009d1a4 str r3, [sp, 0x4c] | var_4ch = r3;
0x0009d1a6 mov.w r3, 1 | r3 = 1;
0x0009d1aa str r3, [sp, 0x78] | var_78h = r3;
| if (r4 >= r2) {
0x0009d1ac bpl.w 0x9d002 | goto label_0;
| }
| label_81:
0x0009d1b0 ldr.w r2, [pc, 0x8f8] |
0x0009d1b4 movs r3, 0 | r3 = 0;
0x0009d1b6 mov lr, r3 | lr = r3;
0x0009d1b8 str r3, [sp, 0x2c] | var_2ch = r3;
0x0009d1ba str r3, [sp, 0x40] | var_40h = r3;
0x0009d1bc add r2, pc | r2 = 0x13ac6c;
0x0009d1be str r2, [sp, 0x50] | var_50h = r2;
0x0009d1c0 ldr.w r2, [pc, 0x8ec] |
0x0009d1c4 add r2, pc | r2 = 0x13ac78;
0x0009d1c6 str r2, [sp, 0x5c] | var_5ch = r2;
| label_1:
0x0009d1c8 cmp.w r8, 0 |
0x0009d1cc it le |
| if (r8 > 0) {
0x0009d1ce andle ip, lr, 1 |
| }
| if (r8 <= 0) {
0x0009d1d2 ble.w 0x9d318 | goto label_95;
| }
0x0009d1d6 movs r4, 0 | r4 = 0;
0x0009d1d8 and ip, lr, 1 |
0x0009d1dc eor r3, lr, 1 | r3 = lr ^ 1;
0x0009d1e0 str.w lr, [sp, 0x48] | __asm ("str.w lr, [var_48h]");
0x0009d1e4 str r3, [sp, 0x24] | var_24h = r3;
0x0009d1e6 str.w ip, [sp, 0x30] | __asm ("str.w ip, [var_30h]");
| do {
0x0009d1ea ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0009d1ee add.w r2, r4, r4, lsl 1 | r2 = r4 + (r4 << 1);
0x0009d1f2 add.w r6, r3, r2, lsl 2 | r6 = r3 + (r2 << 2);
0x0009d1f6 ldrb r5, [r6, 4] | r5 = *((r6 + 4));
0x0009d1f8 ands r5, r5, 0xf | r5 &= 0xf;
| if (r5 != r5) {
0x0009d1fc beq.w 0x9d30c |
0x0009d200 ldrsh.w r1, [sl, 0x20] | r1 = *((sl + 0x20));
0x0009d204 cmp r1, r4 |
| if (r1 == r4) {
0x0009d206 beq.w 0x9d30c | goto label_3;
| }
0x0009d20a ldrh r1, [r6, 0xa] | r1 = *((r6 + 0xa));
0x0009d20c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009d20e ands r1, r1, 0x60 | r1 &= 0x60;
0x0009d212 and r0, r0, 1 | r0 &= 1;
0x0009d216 it eq |
| if (r1 != r1) {
0x0009d218 moveq r0, 0 | r0 = 0;
| }
0x0009d21a cmp r0, 0 |
| if (r0 != 0) {
0x0009d21c bne.w 0x9d3e4 | goto label_96;
| }
0x0009d220 cmp.w fp, 0 |
| if (fp != 0) {
0x0009d224 beq 0x9d236 |
0x0009d226 ldr.w r0, [fp, r4, lsl 2] | offset_0 = r4 << 2;
| r0 = *((fp + offset_0));
0x0009d22a clz r7, r1 | r7 &= r1;
0x0009d22e lsrs r7, r7, 5 | r7 >>= 5;
0x0009d230 ands.w r7, r7, r0, lsr 31 | r7 &= (r0 >> 31);
| if (r7 != r7) {
0x0009d234 bne 0x9d30c | goto label_3;
| }
| }
0x0009d236 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0009d238 cmp r0, 0xb |
0x0009d23a it ne |
| if (r0 == 0xb) {
0x0009d23c movne r5, r0 | r5 = r0;
| }
| if (r0 == 0xb) {
0x0009d23e beq.w 0x9d3ec | goto label_97;
| }
| label_4:
0x0009d242 cmp r5, 5 |
| if (r5 == 5) {
0x0009d244 beq 0x9d340 | goto label_98;
| }
| label_5:
0x0009d246 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009d248 cmp r1, 0 |
0x0009d24a ite ne |
| if (r1 == 0) {
0x0009d24c movne r0, 0 | r0 = 0;
| }
| if (r1 != 0) {
0x0009d24e andeq r0, r0, 1 | r0 &= 1;
| }
0x0009d252 cmp r0, 0 |
| if (r0 != 0) {
0x0009d254 bne 0x9d30c | goto label_3;
| }
0x0009d256 ldr.w r0, [sl, 0x1c] | r0 = *((sl + 0x1c));
0x0009d25a sxth r1, r4 | __asm ("sxth r1, r4");
0x0009d25c lsls r0, r0, 0x1a | r0 <<= 0x1a;
| if (r0 < r0) {
0x0009d25e bpl 0x9d270 |
0x0009d260 mov r0, sl | r0 = sl;
0x0009d262 strd r2, r3, [sp, 0x54] | __asm ("strd r2, r3, [var_54h]");
0x0009d266 bl 0x277d4 | fcn_000277d4 (r0, r1);
0x0009d26a ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_54h]");
0x0009d26e mov r1, r0 | r1 = r0;
| }
0x0009d270 ldr r0, [sp, 0x11c] | r0 = *(arg_11ch);
0x0009d272 add r1, r0 | r1 += r0;
0x0009d274 adds r7, r1, 1 | r7 = r1 + 1;
0x0009d276 subs r1, r5, 1 | r1 = r5 - 1;
0x0009d278 cmp r1, 4 |
| if (r1 > 4) {
0x0009d27a bhi.w 0x9d3d2 | goto label_99;
| }
| /* switch table (5 cases) at 0x9d282 */
0x0009d27e tbb [pc, r1] | __asm ("tbb [0x0009d284]");
| label_2:
0x0009d288 cmp r0, 0 |
| if (r0 == 0) {
0x0009d28a beq.w 0x9d606 | goto label_100;
| }
0x0009d28e mov r0, sl | r0 = sl;
0x0009d290 strd r2, r3, [sp, 0x54] | __asm ("strd r2, r3, [var_54h]");
0x0009d294 bl 0x277d4 | fcn_000277d4 (r0, r1);
0x0009d298 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009d29a adds r7, r0, r3 | r7 = r0 + r3;
0x0009d29c ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_54h]");
0x0009d2a0 adds r7, 1 | r7++;
| label_11:
0x0009d2a2 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d2a4 movs r5, 2 | r5 = 2;
0x0009d2a6 ldr r1, [r0, 0x74] | r1 = *((r0 + 0x74));
0x0009d2a8 cmp r1, 0 |
0x0009d2aa it eq |
| if (r1 != 0) {
0x0009d2ac moveq r1, r0 | r1 = r0;
| }
0x0009d2ae movs r0, 1 | r0 = 1;
0x0009d2b0 strb r0, [r1, 0x15] | *((r1 + 0x15)) = r0;
0x0009d2b2 ldr.w r3, [r3, r2, lsl 2] | offset_1 = r2 << 2;
| r3 = *((r3 + offset_1));
0x0009d2b6 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0009d2b8 ldr.w r2, [sl] | r2 = *(sl);
0x0009d2bc ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009d2be bl 0x4a320 | fcn_0004a320 (r0);
0x0009d2c2 mov r3, r5 | r3 = r5;
0x0009d2c4 movw r2, 0x513 | r2 = 0x513;
0x0009d2c8 mov r5, r0 | r5 = r0;
0x0009d2ca movs r1, 0x45 | r1 = 0x45;
0x0009d2cc mov r0, sb | r0 = sb;
0x0009d2ce str r7, [sp] | *(sp) = r7;
0x0009d2d0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d2d4 ldr.w r0, [sb] | r0 = *(sb);
0x0009d2d8 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0009d2dc cmp r3, 0 |
| if (r3 != 0) {
0x0009d2de bne.w 0x9d3f6 | goto label_101;
| }
0x0009d2e2 ldrd r1, r3, [sb, 0x68] | __asm ("ldrd r1, r3, [sb, 0x68]");
0x0009d2e6 movs r0, 0xfa | r0 = 0xfa;
0x0009d2e8 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0009d2ec lsls r2, r2, 3 | r2 <<= 3;
0x0009d2ee subs r2, 0x18 | r2 -= 0x18;
0x0009d2f0 add r1, r2 | r1 += r2;
0x0009d2f2 strb r0, [r1, 1] | *((r1 + 1)) = r0;
0x0009d2f4 str r5, [r1, 0x10] | *((r1 + 0x10)) = r5;
| label_6:
0x0009d2f6 cmp r3, 0 |
| if (r3 <= 0) {
0x0009d2f8 ble 0x9d30c | goto label_3;
| }
0x0009d2fa ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0009d2fe add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009d302 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009d306 movs r3, 1 | r3 = 1;
0x0009d308 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
| label_3:
0x0009d30c adds r4, 1 | r4++;
0x0009d30e cmp r8, r4 |
0x0009d310 bne.w 0x9d1ea |
| } while (r8 != r4);
0x0009d314 ldr.w ip, [sp, 0x30] | ip = var_30h;
| label_95:
0x0009d318 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009d31a ldr r2, [sp, 0x40] | r2 = var_40h;
0x0009d31c orrs r3, r2 | r3 |= r2;
0x0009d31e ite ne |
| if (r3 == r2) {
0x0009d320 movne r3, ip | r3 = ip;
| }
| if (r3 != r2) {
0x0009d322 orreq r3, ip, 1 | r3 = ip | 1;
| }
0x0009d326 cmp r3, 0 |
| if (r3 != 0) {
0x0009d328 bne.w 0x9d002 | goto label_0;
| }
| if (r2 != 0) {
0x0009d32c cbz r2, 0x9d33a |
0x0009d32e ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0009d332 tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0009d336 bne.w 0x9d60e | goto label_102;
| }
| }
| label_12:
0x0009d33a mov.w lr, 1 | lr = 1;
0x0009d33e b 0x9d1c8 | goto label_1;
| label_98:
0x0009d340 ldr r5, [sp, 0x48] | r5 = var_48h;
0x0009d342 ldr.w r1, [sl, 0x1c] | r1 = *((sl + 0x1c));
0x0009d346 and r0, r1, 0x20 | r0 = r1 & 0x20;
0x0009d34a sxth r1, r4 | __asm ("sxth r1, r4");
0x0009d34c cmp r5, 0 |
| if (r5 != 0) {
0x0009d34e bne 0x9d288 | goto label_2;
| }
0x0009d350 ldrh r5, [r6, 8] | r5 = *((r6 + 8));
0x0009d352 cmp r5, 0 |
| if (r5 == 0) {
0x0009d354 beq 0x9d288 | goto label_2;
| }
0x0009d356 cmp r0, 0 |
| if (r0 == 0) {
0x0009d358 beq.w 0x9d6a6 | goto label_103;
| }
0x0009d35c mov r0, sl | r0 = sl;
0x0009d35e bl 0x277d4 | fcn_000277d4 (r0, r1);
0x0009d362 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009d364 adds r7, r0, r3 | r7 = r0 + r3;
0x0009d366 adds r7, 1 | r7++;
| label_21:
0x0009d368 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009d36a movs r5, 0 | r5 = 0;
0x0009d36c movs r1, 0x33 | r1 = 0x33;
0x0009d36e mov r2, r7 | r2 = r7;
0x0009d370 mov r0, sb | r0 = sb;
0x0009d372 str r5, [sp] | *(sp) = r5;
0x0009d374 adds r3, 1 | r3++;
0x0009d376 str r3, [sp, 0x40] | var_40h = r3;
0x0009d378 mov r3, r5 | r3 = r5;
0x0009d37a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d37e ldrh r3, [r6, 8] | r3 = *((r6 + 8));
0x0009d380 mov r6, r0 | r6 = r0;
0x0009d382 mov r1, r3 | r1 = r3;
| if (r3 != 0) {
0x0009d384 cbz r3, 0x9d3a4 |
0x0009d386 ldrb.w r0, [sl, 0x2b] | r0 = *((sl + 0x2b));
0x0009d38a mov r1, r5 | r1 = r5;
| if (r0 != 0) {
0x0009d38c cbnz r0, 0x9d3a4 | goto label_104;
| }
0x0009d38e ldr.w r1, [sl, 0x34] | r1 = *((sl + 0x34));
| if (r1 == 0) {
0x0009d392 cbz r1, 0x9d3a4 | goto label_104;
| }
0x0009d394 ldr r2, [r1] | r2 = *(r1);
0x0009d396 cmp r2, r3 |
0x0009d398 itet ge |
| if (r2 < r3) {
0x0009d39a addge r1, r1, r3, lsl 4 | r1 += (r3 << 4);
| }
| if (r2 < r3) {
0x0009d39e movge r1, r0 | r1 = r0;
| }
| if (r2 < r3) {
0x0009d3a0 ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| goto label_104;
| }
| }
| label_104:
0x0009d3a4 mov r2, r7 | r2 = r7;
0x0009d3a6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d3a8 bl 0x875e0 | fcn_000875e0 (r0, r1, r2);
0x0009d3ac ldr.w r3, [sb] | r3 = *(sb);
0x0009d3b0 cmp r6, 0 |
0x0009d3b2 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0009d3b6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009d3ba it lt |
| if (r6 >= 0) {
0x0009d3bc addlt r6, r2, -1 | r6 = r2 + -1;
| }
| if (r3 != 0) {
0x0009d3c0 cbnz r3, 0x9d404 | goto label_105;
| }
0x0009d3c2 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009d3c6 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0009d3ca add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
| label_7:
0x0009d3ce str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009d3d0 b 0x9d30c | goto label_3;
| label_99:
0x0009d3d2 movs r3, 0 | r3 = 0;
0x0009d3d4 mov r2, r7 | r2 = r7;
0x0009d3d6 str r3, [sp] | *(sp) = r3;
0x0009d3d8 movs r1, 0x32 | r1 = 0x32;
0x0009d3da ldr r3, [sp, 0x12c] | r3 = *(arg_12ch);
0x0009d3dc mov r0, sb | r0 = sb;
0x0009d3de bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d3e2 b 0x9d30c | goto label_3;
| label_96:
0x0009d3e4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009d3e6 adds r3, 1 | r3++;
0x0009d3e8 str r3, [sp, 0x2c] | var_2ch = r3;
0x0009d3ea b 0x9d30c | goto label_3;
| label_97:
0x0009d3ec cmp r5, 0xb |
| if (r5 != 0xb) {
0x0009d3ee bne.w 0x9d242 | goto label_4;
| }
0x0009d3f2 movs r5, 2 | r5 = 2;
0x0009d3f4 b 0x9d246 | goto label_5;
| if (r5 != 0) {
| label_101:
0x0009d3f6 cbz r5, 0x9d3fe |
0x0009d3f8 mov r1, r5 | r1 = r5;
0x0009d3fa bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x0009d3fe ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009d402 b 0x9d2f6 | goto label_6;
| label_105:
0x0009d404 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009d406 adds r3, 4 | r3 += 4;
0x0009d408 b 0x9d3ce | goto label_7;
| label_82:
0x0009d40a ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009d40c movs r7, 0 | r7 = 0;
0x0009d40e ldr.w r8, [sl, 8] | r8 = *((sl + 8));
0x0009d412 mov r3, r8 | r3 = r8;
0x0009d414 cmp r2, 0 |
| if (r2 == 0) {
0x0009d416 beq.w 0x9d130 | goto label_8;
| }
| label_90:
0x0009d41a ldr r2, [r2] | r2 = *(r2);
0x0009d41c str r2, [sp, 0x68] | var_68h = r2;
0x0009d41e cmp r2, 0 |
| if (r2 == 0) {
0x0009d420 beq.w 0x9d62c | goto label_106;
| }
0x0009d424 cmp.w r8, 0 |
| if (r8 == 0) {
0x0009d428 beq.w 0x9e19c | goto label_107;
| }
0x0009d42c mov.w r8, 0 | r8 = 0;
| do {
0x0009d430 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009d432 add.w r8, r8, 1 | r8++;
0x0009d436 cmp r3, 0 |
0x0009d438 bne 0x9d430 |
| } while (r3 != 0);
0x0009d43a ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009d43c add.w r4, r8, r8, lsl 2 | r4 = r8 + (r8 << 2);
0x0009d440 lsls r4, r4, 1 | r4 <<= 1;
0x0009d442 cmp r0, 0 |
| if (r0 == 0) {
0x0009d444 beq.w 0x9defe | goto label_108;
| }
0x0009d448 mov r2, r4 | r2 = r4;
0x0009d44a bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x0009d44e str r0, [sp, 0x68] | var_68h = r0;
| label_53:
0x0009d450 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009d452 cmp r3, 0 |
| if (r3 == 0) {
0x0009d454 beq.w 0x9da80 | goto label_109;
| }
0x0009d458 mov r2, r4 | r2 = r4;
0x0009d45a movs r1, 0 | r1 = 0;
0x0009d45c mov r0, r3 | r0 = r3;
0x0009d45e mov r4, r3 | r4 = r3;
0x0009d460 blx 0x62ec | fcn_000062ec ();
0x0009d464 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009d466 mov r3, r4 | r3 = r4;
0x0009d468 ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x0009d46c add.w r6, r4, r8, lsl 3 | r6 = r4 + (r8 << 3);
0x0009d470 mov.w lr, 1 | lr = 1;
0x0009d474 str r4, [r2, 0x18] | *((r2 + 0x18)) = r4;
0x0009d476 mov r0, r2 | r0 = r2;
0x0009d478 movs r4, 0 | r4 = 0;
0x0009d47a mov ip, r3 |
| label_9:
0x0009d47c ldr r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x0009d47e cbz r3, 0x9d4c8 | goto label_110;
| }
0x0009d480 ldr r5, [r0, 0x1c] | r5 = *((r0 + 0x1c));
| if (r5 == 0) {
0x0009d482 cbz r5, 0x9d4c2 | goto label_111;
| }
0x0009d484 cmp r1, 0 |
| if (r1 == 0) {
0x0009d486 beq.w 0x9e14a | goto label_112;
| }
0x0009d48a cmp r5, r1 |
| if (r5 == r1) {
0x0009d48c beq.w 0x9e14a | goto label_112;
| }
0x0009d490 mov r3, r1 | r3 = r1;
0x0009d492 movs r2, 0 | r2 = 0;
0x0009d494 b 0x9d49a |
| while (r3 != 0) {
0x0009d496 cmp r5, r3 |
| if (r5 == r3) {
0x0009d498 beq 0x9d4a2 | goto label_113;
| }
0x0009d49a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009d49c adds r2, 1 | r2++;
0x0009d49e cmp r3, 0 |
0x0009d4a0 bne 0x9d496 |
| }
| label_113:
0x0009d4a2 adds r5, r6, r2 | r5 = r6 + r2;
| label_66:
0x0009d4a4 ldrb.w fp, [r5] | fp = *(r5);
0x0009d4a8 cmp.w fp, 0 |
| if (fp == 0) {
0x0009d4ac bne 0x9d4c2 |
0x0009d4ae strb.w lr, [r5] |
0x0009d4b2 str.w r3, [ip, r4, lsl 3] | __asm ("str.w r3, [ip, r4, lsl 3]");
0x0009d4b6 add.w r3, ip, r4, lsl 3 | r3 = ip + (r4 << 3);
0x0009d4ba adds r4, 1 | r4++;
0x0009d4bc ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x0009d4c0 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
| label_111:
0x0009d4c2 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x0009d4c4 cmp r0, 0 |
| if (r0 != 0) {
0x0009d4c6 bne 0x9d47c | goto label_9;
| }
| if (r1 == 0) {
| label_110:
0x0009d4c8 cbz r1, 0x9d4ee | goto label_114;
| }
0x0009d4ca ldr r5, [sp, 0x68] | r5 = var_68h;
0x0009d4cc subs r3, r6, 1 | r3 = r6 - 1;
0x0009d4ce rsb.w r6, r6, 1 | r6 = 1 - r6;
| do {
0x0009d4d2 mov r2, r3 | r2 = r3;
0x0009d4d4 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
| if (r0 == 0) {
0x0009d4d8 cbnz r0, 0x9d4e8 |
0x0009d4da add.w r0, r5, r4, lsl 3 | r0 = r5 + (r4 << 3);
0x0009d4de str.w r1, [r5, r4, lsl 3] | __asm ("str.w r1, [r5, r4, lsl 3]");
0x0009d4e2 adds r4, 1 | r4++;
0x0009d4e4 add r2, r6 | r2 += r6;
0x0009d4e6 str r2, [r0, 4] | *((r0 + 4)) = r2;
| }
0x0009d4e8 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0009d4ea cmp r1, 0 |
0x0009d4ec bne 0x9d4d2 |
| } while (r1 != 0);
| label_114:
0x0009d4ee movs r3, 1 | r3 = 1;
0x0009d4f0 str r3, [sp, 0x48] | var_48h = r3;
0x0009d4f2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009d4f4 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009d4f6 tst.w r3, 0x6000 |
| if ((r3 & 0x6000) != 0) {
0x0009d4fa bne.w 0x9d142 | goto label_10;
| }
| label_50:
0x0009d4fe movs r3, 0 | r3 = 0;
0x0009d500 strd r3, r3, [sp, 0xa8] | __asm ("strd r3, r3, [var_a8h]");
0x0009d504 str r3, [sp, 0x94] | var_94h = r3;
| label_94:
0x0009d506 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009d508 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009d50a subs r3, 0 |
0x0009d50c it ne |
| if (r3 == 0) {
0x0009d50e movne r3, 1 | r3 = 1;
| }
0x0009d510 cmp r2, 0 |
0x0009d512 it ne |
| if (r2 == 0) {
0x0009d514 movne r3, 0 | r3 = 0;
| }
0x0009d516 cmp r3, 0 |
| if (r3 == 0) {
0x0009d518 beq.w 0x9d6ae | goto label_115;
| }
0x0009d51c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009d51e ldr r4, [sp, 0x38] | r4 = var_38h;
0x0009d520 ldr r6, [r3, 0x38] | r6 = *((r3 + 0x38));
0x0009d522 cmp r4, 0xb |
0x0009d524 add.w r5, r6, -1 | r5 = r6 + -1;
0x0009d528 str r5, [r3, 0x38] | *((r3 + 0x38)) = r5;
0x0009d52a ldrb.w r3, [sl, 0x2a] | r3 = *((sl + 0x2a));
| if (r4 == 0xb) {
0x0009d52e beq.w 0x9e088 | goto label_116;
| }
| label_61:
0x0009d532 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009d534 cmp r3, 0 |
| if (r3 == 0) {
0x0009d536 beq.w 0x9e1a8 | goto label_117;
| }
| label_62:
0x0009d53a ldr.w fp, [sp, 0x44] | fp = var_44h;
0x0009d53e mov r3, fp | r3 = fp;
0x0009d540 b 0x9d54e |
| while (r2 != 0) {
0x0009d542 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
| if (r2 == 0) {
0x0009d544 cbz r2, 0x9d554 | goto label_118;
| }
0x0009d546 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0009d548 cmp r3, 0 |
| if (r3 == 0) {
0x0009d54a beq.w 0x9e1f2 | goto label_119;
| }
0x0009d54e ldr r2, [r3] | r2 = *(r3);
0x0009d550 cmp r2, 0 |
0x0009d552 bne 0x9d542 |
| }
| label_118:
0x0009d554 mov fp, r3 |
0x0009d556 ldrb r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009d558 cmp r3, 0 |
| if (r3 == 0) {
0x0009d55a beq.w 0x9df3a | goto label_120;
| }
0x0009d55e ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009d560 cmp r3, fp |
0x0009d562 it ne |
| if (r3 == fp) {
0x0009d564 movne r4, 6 | r4 = 6;
| }
| if (r3 == fp) {
0x0009d566 beq.w 0x9e110 | goto label_121;
| }
| label_56:
0x0009d56a movs r3, 0 | r3 = 0;
0x0009d56c movs r1, 8 | r1 = 8;
0x0009d56e mov r2, r3 | r2 = r3;
0x0009d570 mov r0, sb | r0 = sb;
0x0009d572 str r3, [sp] | *(sp) = r3;
0x0009d574 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d578 str r0, [sp, 0x90] | var_90h = r0;
| label_68:
0x0009d57a cmp r4, 5 |
| if (r4 != 5) {
0x0009d57c bne.w 0x9e036 | goto label_122;
| }
0x0009d580 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009d582 cmp r3, 5 |
| if (r3 == 5) {
0x0009d584 beq.w 0x9e348 | goto label_123;
| }
0x0009d588 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0009d58c ldr r2, [sp, 0x90] | r2 = var_90h;
0x0009d58e subs r3, 0 |
0x0009d590 it ne |
| if (r3 == 0) {
0x0009d592 movne r3, 1 | r3 = 1;
| }
0x0009d594 cmp r2, 0 |
0x0009d596 it ne |
| if (r2 == 0) {
0x0009d598 movne r3, 0 | r3 = 0;
| }
0x0009d59a cmp r3, 0 |
| if (r3 != 0) {
0x0009d59c bne.w 0x9e40c | goto label_124;
| }
0x0009d5a0 str r3, [sp, 0x8c] | var_8ch = r3;
| label_69:
0x0009d5a2 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009d5a4 cmp r3, 0 |
| if (r3 != 0) {
0x0009d5a6 bne.w 0x9e158 | goto label_73;
| }
0x0009d5aa ldr.w r1, [pc, 0x508] |
0x0009d5ae mov r0, sb | r0 = sb;
0x0009d5b0 add r1, pc | r1 = 0x13b06a;
0x0009d5b2 bl 0x4a160 | fcn_0004a160 (r0);
0x0009d5b6 ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009d5b8 mov r3, r5 | r3 = r5;
0x0009d5ba movs r1, 0x1e | r1 = 0x1e;
0x0009d5bc mov r0, sb | r0 = sb;
0x0009d5be str r2, [sp] | *(sp) = r2;
0x0009d5c0 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009d5c2 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d5c6 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009d5c8 cmp r3, 0 |
| if (r3 != 0) {
0x0009d5ca bne.w 0x9e360 | goto label_125;
| }
0x0009d5ce ldr.w r1, [sl, 8] | r1 = *((sl + 8));
| if (r1 != 0) {
0x0009d5d2 cbz r1, 0x9d5fa |
0x0009d5d4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d5d6 movs r2, 1 | r2 = 1;
0x0009d5d8 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0009d5da cmp r3, 0 |
0x0009d5dc it eq |
| if (r3 != 0) {
0x0009d5de moveq r3, r0 | r3 = r0;
| }
0x0009d5e0 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0009d5e2 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009d5e4 str r3, [sp, 4] | var_4h = r3;
0x0009d5e6 ldr r3, [sp, 0x118] | r3 = *(arg_118h);
0x0009d5e8 str r3, [sp] | *(sp) = r3;
0x0009d5ea mov.w r3, -1 | r3 = -1;
0x0009d5ee str r3, [sp, 8] | var_8h = r3;
0x0009d5f0 ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009d5f2 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x0009d5f6 bl 0x8f2f0 | fcn_0008f2f0 (r0, r1, r2, r3, r4, r5, r6);
| }
0x0009d5fa movs r3, 1 | r3 = 1;
0x0009d5fc movs r0, 0 | r0 = 0;
0x0009d5fe strd r3, r0, [sp, 0x9c] | __asm ("strd r3, r0, [var_a0h]");
0x0009d602 b.w 0x9e0d6 | goto label_71;
| label_100:
0x0009d606 ldr r1, [sp, 0x11c] | r1 = *(arg_11ch);
0x0009d608 adds r7, r1, r4 | r7 = r1 + r4;
0x0009d60a adds r7, 1 | r7++;
0x0009d60c b 0x9d2a2 | goto label_11;
| label_102:
0x0009d60e ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009d610 mov r2, sl | r2 = sl;
0x0009d612 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d614 adds r1, r3, 1 | r1 = r3 + 1;
0x0009d616 bl 0x87fec | fcn_00087fec (r0, r1, r2, r3);
0x0009d61a b 0x9d33a | goto label_12;
| label_87:
0x0009d61c str r0, [sp, 0x30] | var_30h = r0;
0x0009d61e mov r2, r7 | r2 = r7;
0x0009d620 movs r3, 0x10 | r3 = 0x10;
0x0009d622 mov r0, sl | r0 = sl;
0x0009d624 bl 0x7d960 | fcn_0007d960 (r0, r1, r2, r3);
0x0009d628 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009d62a b 0x9d0be | goto label_13;
| label_106:
0x0009d62c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009d62e ldrb r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009d630 cmp r3, 0 |
| if (r3 != 0) {
0x0009d632 bne.w 0x9df96 | goto label_126;
| }
0x0009d636 mov r3, r2 | r3 = r2;
0x0009d638 str r2, [sp, 0x44] | var_44h = r2;
0x0009d63a movs r2, 4 | r2 = 4;
0x0009d63c str r3, [sp, 0x48] | var_48h = r3;
0x0009d63e str r2, [sp, 0x38] | var_38h = r2;
0x0009d640 b 0x9d136 | goto label_14;
| if (r7 == 0) {
| label_84:
0x0009d642 cbz r7, 0x9d694 | goto label_86;
| }
| label_20:
0x0009d644 ldr.w r4, [sl, 0x38] | r4 = *((sl + 0x38));
0x0009d648 subs r7, r4, 1 | r7 = r4 - 1;
0x0009d64a str.w r7, [sl, 0x38] | __asm ("str.w r7, [sl, 0x38]");
0x0009d64e cmp r3, 0 |
| if (r3 != 0) {
0x0009d650 bne.w 0x9d0a4 | goto label_15;
| }
0x0009d654 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0009d656 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0009d65a cmp r2, 0 |
| if (r2 != 0) {
0x0009d65c bne.w 0x9d0c6 | goto label_16;
| }
0x0009d660 mov r1, r3 | r1 = r3;
0x0009d662 mov r2, r7 | r2 = r7;
0x0009d664 movs r3, 0x10 | r3 = 0x10;
0x0009d666 mov r0, sl | r0 = sl;
0x0009d668 bl 0x7d960 | fcn_0007d960 (r0, r1, r2, r3);
0x0009d66c cmp.w r8, 4 |
| if (r8 != 4) {
0x0009d670 bne.w 0x9d0ce | goto label_17;
| }
| label_88:
0x0009d674 mov r0, sb | r0 = sb;
0x0009d676 ldr r1, [sp, 0x12c] | r1 = *(arg_12ch);
0x0009d678 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0009d67c ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009d680 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009d684 cmn r2, r3 |
| if (r2 >= r3) {
0x0009d686 bpl.w 0x9d0fe | goto label_18;
| }
| label_89:
0x0009d68a rsbs r2, r4, 0 | r2 = r4 - ;
0x0009d68c mov r1, sb | r1 = sb;
0x0009d68e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0009d692 b 0x9d10a | goto label_19;
| label_86:
0x0009d694 str r3, [sp, 0x30] | var_30h = r3;
0x0009d696 mov r0, sb | r0 = sb;
0x0009d698 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009d69a ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009d69c adds r2, r3, 1 | r2 = r3 + 1;
0x0009d69e bl 0x438fc | fcn_000438fc (r0, r1, r2);
0x0009d6a2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009d6a4 b 0x9d644 | goto label_20;
| label_103:
0x0009d6a6 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009d6a8 adds r7, r3, r4 | r7 = r3 + r4;
0x0009d6aa adds r7, 1 | r7++;
0x0009d6ac b 0x9d368 | goto label_21;
| label_115:
0x0009d6ae mov r4, r3 | r4 = r3;
0x0009d6b0 mov ip, r3 |
0x0009d6b2 mov fp, r3 |
0x0009d6b4 str r3, [sp, 0xa0] | var_a0h = r3;
0x0009d6b6 strd r3, r3, [sp, 0x8c] | __asm ("strd r3, r3, [var_90h]");
0x0009d6ba str r3, [sp, 0x9c] | var_9ch = r3;
| label_64:
0x0009d6bc ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009d6be cmp r3, 0 |
| if (r3 == 0) {
0x0009d6c0 beq.w 0x9dca0 | goto label_127;
| }
0x0009d6c4 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009d6c6 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0009d6c8 ldr r3, [r3] | r3 = *(r3);
0x0009d6ca mov r1, r2 | r1 = r2;
0x0009d6cc mov r2, r3 | r2 = r3;
0x0009d6ce mov r6, r2 | r6 = r2;
0x0009d6d0 cmp r2, 0 |
| if (r2 == 0) {
0x0009d6d2 beq.w 0x9dcae | goto label_128;
| }
| label_39:
0x0009d6d6 ldr r3, [pc, 0x3e0] |
0x0009d6d8 mov r2, r7 | r2 = r7;
0x0009d6da str.w r8, [sp, 0x40] | __asm ("str.w r8, [var_40h]");
0x0009d6de mov r7, fp | r7 = fp;
0x0009d6e0 mov r8, r1 | r8 = r1;
0x0009d6e2 str.w ip, [sp, 0x7c] | __asm ("str.w ip, [var_7ch]");
0x0009d6e6 add r3, pc | r3 = 0x13b1a4;
0x0009d6e8 str r4, [sp, 0xa4] | var_a4h = r4;
0x0009d6ea str r3, [sp, 0x80] | var_80h = r3;
0x0009d6ec ldr r3, [pc, 0x3cc] |
0x0009d6ee add r3, pc | r3 = 0x13b1ae;
0x0009d6f0 str r3, [sp, 0x84] | var_84h = r3;
0x0009d6f2 ldr r3, [pc, 0x3cc] |
0x0009d6f4 add r3, pc | r3 = 0x13b1ba;
0x0009d6f6 str r3, [sp, 0x2c] | var_2ch = r3;
0x0009d6f8 ldr r3, [pc, 0x3c8] |
0x0009d6fa add r3, pc | r3 = 0x13b1c2;
0x0009d6fc str r3, [sp, 0x50] | var_50h = r3;
0x0009d6fe ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0009d700 str r3, [sp, 0xb8] | var_b8h = r3;
0x0009d702 movs r3, 0 | r3 = 0;
0x0009d704 str r3, [sp, 0x30] | var_30h = r3;
| do {
| label_24:
0x0009d706 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009d708 lsl.w r1, r8, 2 | r1 = r8 << 2;
0x0009d70c str r1, [sp, 0x24] | var_24h = r1;
0x0009d70e ldr.w r3, [r3, r8, lsl 2] | offset_2 = r8 << 2;
| r3 = *((r3 + offset_2));
| if (r3 != 0) {
0x0009d712 cbnz r3, 0x9d746 | goto label_129;
| }
| label_43:
0x0009d714 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009d716 cmp r3, 0 |
| if (r3 == 0) {
0x0009d718 beq.w 0x9d976 | goto label_130;
| }
| label_23:
0x0009d71c ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009d71e ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009d720 adds r1, 1 | r1++;
0x0009d722 cmp r3, r1 |
0x0009d724 str r1, [sp, 0x30] | var_30h = r1;
| if (r3 <= r1) {
0x0009d726 ble.w 0x9da5c | goto label_131;
| }
0x0009d72a ldr r0, [sp, 0x68] | r0 = var_68h;
0x0009d72c ldr.w r6, [r0, r1, lsl 3] | offset_3 = r1 << 3;
| r6 = *((r0 + offset_3));
0x0009d730 add.w r3, r0, r1, lsl 3 | r3 = r0 + (r1 << 3);
0x0009d734 ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x0009d738 cmp r6, 0 |
0x0009d73a bne 0x9d706 |
| } while (r6 != 0);
| label_25:
0x0009d73c ldr r4, [sp, 0xa4] | r4 = var_a4h;
0x0009d73e mov r7, r2 | r7 = r2;
0x0009d740 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x0009d744 b 0x9da60 | goto label_132;
| label_129:
0x0009d746 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009d748 cmp r3, 0 |
| if (r3 != 0) {
0x0009d74a bne.w 0x9da00 | goto label_133;
| }
| label_31:
0x0009d74e ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009d750 ldr r1, [r3, 0x38] | r1 = *((r3 + 0x38));
0x0009d752 str r1, [sp, 0x54] | var_54h = r1;
0x0009d754 subs r1, 1 | r1--;
0x0009d756 str r1, [sp, 0x60] | var_60h = r1;
0x0009d758 str r1, [r3, 0x38] | *((r3 + 0x38)) = r1;
0x0009d75a cmp r2, 0 |
| if (r2 == 0) {
0x0009d75c beq.w 0x9dbf6 | goto label_134;
| }
| label_35:
0x0009d760 ldr r2, [r6] | r2 = *(r6);
0x0009d762 mov r0, sb | r0 = sb;
0x0009d764 ldr r1, [sp, 0x80] | r1 = var_80h;
0x0009d766 bl 0x4a160 | fcn_0004a160 (r0);
0x0009d76a ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
| if (r3 != 0) {
0x0009d76c cbz r3, 0x9d796 |
0x0009d76e ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009d770 movs r4, 0 | r4 = 0;
0x0009d772 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009d774 movs r1, 0x4b | r1 = 0x4b;
0x0009d776 str r4, [sp] | *(sp) = r4;
0x0009d778 mov r0, sb | r0 = sb;
0x0009d77a ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x0009d77c mov r2, r4 | r2 = r4;
0x0009d77e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d782 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009d784 ldr r5, [sp, 0x28] | r5 = var_28h;
0x0009d786 ldr r1, [r6, 0x24] | r1 = *((r6 + 0x24));
0x0009d788 mvns r3, r3 | r3 = ~r3;
0x0009d78a ldr r2, [sp, 0x60] | r2 = var_60h;
0x0009d78c mov r0, r5 | r0 = r5;
0x0009d78e str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x0009d790 bl 0x7e024 | fcn_0007e024 (r0, r1, r2);
0x0009d794 str r4, [r5, 0x34] | *((r5 + 0x34)) = r4;
| }
0x0009d796 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009d798 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0009d79a ldrh r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0009d79c ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x0009d79e add.w fp, r2, 1 |
0x0009d7a2 str r2, [sp, 0x88] | var_88h = r2;
0x0009d7a4 cmp r3, 0 |
| if (r3 == 0) {
0x0009d7a6 beq.w 0x9de86 | goto label_135;
| }
0x0009d7aa ldr r3, [pc, 0x31c] |
0x0009d7ac movs r5, 0 | r5 = 0;
0x0009d7ae strd r7, r8, [sp, 0x70] | __asm ("strd r7, r8, [var_70h]");
0x0009d7b2 ldr.w r8, [sp, 0x28] | r8 = var_28h;
0x0009d7b6 add r3, pc | r3 = 0x13b284;
0x0009d7b8 ldr r7, [sp, 0x11c] | r7 = *(arg_11ch);
0x0009d7ba str r3, [sp, 0x58] | var_58h = r3;
0x0009d7bc b 0x9d808 |
| while (r2 != r4) {
0x0009d7be ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x0009d7c2 eor r2, r2, 0x20 | r2 ^= 0x20;
0x0009d7c6 ubfx r2, r2, 5, 1 | r2 = (r2 >> 5) & ((1 << 1) - 1);
0x0009d7ca orrs.w r2, r2, r4, lsr 31 | r2 |= (r4 >> 31);
| if (r2 == r2) {
0x0009d7ce bne 0x9d7dc |
0x0009d7d0 mov r1, r4 | r1 = r4;
0x0009d7d2 mov r0, sl | r0 = sl;
0x0009d7d4 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009d7d6 bl 0x277d4 | fcn_000277d4 (r0, r1);
0x0009d7da ldr r3, [sp, 0x5c] | r3 = var_5ch;
| }
0x0009d7dc adds r2, r7, r0 | r2 = r7 + r0;
0x0009d7de movs r1, 0 | r1 = 0;
0x0009d7e0 adds r2, 1 | r2++;
0x0009d7e2 str r1, [sp] | *(sp) = r1;
0x0009d7e4 mov r0, sb | r0 = sb;
0x0009d7e6 movs r1, 0x51 | r1 = 0x51;
0x0009d7e8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d7ec ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0009d7f0 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0009d7f4 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0009d7f6 mov r0, sb | r0 = sb;
0x0009d7f8 ldr.w r2, [r3, r4, lsl 2] | offset_4 = r4 << 2;
| r2 = *((r3 + offset_4));
0x0009d7fc bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
| label_26:
0x0009d800 ldrh r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0009d802 adds r5, 1 | r5++;
0x0009d804 cmp r3, r5 |
| if (r3 <= r5) {
0x0009d806 ble 0x9d844 | goto label_136;
| }
| label_22:
0x0009d808 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0009d80a ldrsh.w r4, [r3, r5, lsl 1] | offset_5 = r5 << 1;
| r4 = *((r3 + offset_5));
0x0009d80e add.w r3, fp, r5 | r3 = fp + r5;
0x0009d812 adds r1, r4, 2 | r1 = r4 + 2;
0x0009d814 mov r0, r4 | r0 = r4;
| if (r1 == r4) {
0x0009d816 beq.w 0x9d98a | goto label_137;
| }
0x0009d81a adds r2, r4, 1 | r2 = r4 + 1;
| if (r2 == r4) {
0x0009d81c beq 0x9d826 | goto label_138;
| }
0x0009d81e ldrsh.w r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x0009d822 cmp r2, r4 |
0x0009d824 bne 0x9d7be |
| }
| label_138:
0x0009d826 movs r2, 0 | r2 = 0;
0x0009d828 movs r1, 0x52 | r1 = 0x52;
0x0009d82a str r2, [sp] | *(sp) = r2;
0x0009d82c mov r0, sb | r0 = sb;
0x0009d82e mov r2, r7 | r2 = r7;
0x0009d830 adds r5, 1 | r5++;
0x0009d832 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d836 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009d838 mov r0, sb | r0 = sb;
0x0009d83a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009d83e ldrh r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0009d840 cmp r3, r5 |
| if (r3 > r5) {
0x0009d842 bgt 0x9d808 | goto label_22;
| }
| label_136:
0x0009d844 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009d846 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0009d848 ldrd r7, r8, [sp, 0x70] | __asm ("ldrd r7, r8, [var_70h]");
0x0009d84c ldr r2, [r2, r1] | r2 = *((r2 + r1));
| label_47:
0x0009d84e movs r1, 0x61 | r1 = 0x61;
0x0009d850 str r2, [sp] | *(sp) = r2;
0x0009d852 mov r0, sb | r0 = sb;
0x0009d854 mov r2, fp | r2 = fp;
0x0009d856 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009d85a ldr r2, [r6] | r2 = *(r6);
0x0009d85c mov r0, sb | r0 = sb;
0x0009d85e ldr r1, [sp, 0x84] | r1 = var_84h;
0x0009d860 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009d864 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009d866 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0009d868 ldr r5, [sp, 0x64] | r5 = var_64h;
0x0009d86a subs r3, r3, r6 | r3 -= r6;
0x0009d86c clz r3, r3 | r3 &= r3;
0x0009d870 lsrs r3, r3, 5 | r3 >>= 5;
0x0009d872 cmp r2, 0 |
0x0009d874 ite ne |
| if (r2 == 0) {
0x0009d876 movne r5, 0 | r5 = 0;
| }
| if (r2 != 0) {
0x0009d878 andeq r5, r5, 1 | r5 &= 1;
| }
0x0009d87c ldr r2, [sp, 0x54] | r2 = var_54h;
0x0009d87e ands r5, r3 | r5 &= r3;
0x0009d880 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009d882 rsb.w r2, r2, 0 | r2 -= ;
0x0009d886 str r2, [sp, 0x70] | var_70h = r2;
| if (r5 != r3) {
0x0009d888 bne.w 0x9dc1a | goto label_139;
| }
0x0009d88c ldrb.w r4, [r6, 0x36] | r4 = *((r6 + 0x36));
0x0009d890 cmp r4, 0 |
| if (r4 == 0) {
0x0009d892 beq.w 0x9dc1a | goto label_139;
| }
0x0009d896 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009d898 cmp r3, 0xb |
0x0009d89a it ne |
| if (r3 == 0xb) {
0x0009d89c movne r4, r3 | r4 = r3;
| }
| if (r3 == 0xb) {
0x0009d89e beq.w 0x9d9b4 | goto label_140;
| }
0x0009d8a2 cmp r7, 0 |
| if (r7 == 0) {
0x0009d8a4 beq.w 0x9d9c0 | goto label_141;
| }
| label_27:
0x0009d8a8 ldrb r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0009d8aa cmp r3, 0 |
0x0009d8ac ite ne |
| if (r3 == 0) {
0x0009d8ae movne r4, 6 | r4 = 6;
| }
| if (r3 != 0) {
0x0009d8b0 moveq r4, 4 | r4 = 4;
| }
| label_28:
0x0009d8b2 ldr r3, [sp, 0x118] | r3 = *(arg_118h);
0x0009d8b4 add r3, r8 | r3 += r8;
0x0009d8b6 str r3, [sp, 0x24] | var_24h = r3;
0x0009d8b8 cmp.w r8, 0 |
| if (r8 == 0) {
0x0009d8bc bne 0x9d8c6 |
0x0009d8be ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0009d8c0 cmp r3, 0 |
| if (r3 == 0) {
0x0009d8c2 beq.w 0x9dad0 | goto label_142;
| }
| }
| label_33:
0x0009d8c6 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0009d8c8 movs r1, 0x1a | r1 = 0x1a;
0x0009d8ca ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009d8cc mov r0, sb | r0 = sb;
0x0009d8ce strd fp, r3, [sp] | __asm ("strd fp, r3, [sp]");
0x0009d8d2 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009d8d4 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0009d8d8 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009d8da str r0, [sp, 0x74] | var_74h = r0;
0x0009d8dc cmp r3, r6 |
0x0009d8de it eq |
| if (r3 != r6) {
0x0009d8e0 streq fp, [sp, 0x58] | var_58h = fp;
| }
| if (r3 != r6) {
0x0009d8e4 beq 0x9d8f0 |
0x0009d8e6 ldr r1, [sp, 0x78] | r1 = var_78h;
0x0009d8e8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d8ea bl 0x27744 | fcn_00027744 (r0, r1);
0x0009d8ee str r0, [sp, 0x58] | var_58h = r0;
| }
0x0009d8f0 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009d8f2 orrs r5, r3 | r5 |= r3;
| if (r5 != r3) {
0x0009d8f4 bne.w 0x9db0a | goto label_143;
| }
| label_34:
0x0009d8f8 cmp r4, 4 |
| if (r4 == 4) {
0x0009d8fa beq 0x9d9e2 | goto label_144;
| }
| if (r4 > 4) {
0x0009d8fc bgt 0x9d9cc | goto label_145;
| }
0x0009d8fe subs r3, r4, 1 | r3 = r4 - 1;
0x0009d900 cmp r3, 2 |
| if (r3 > 2) {
0x0009d902 bhi.w 0x9dc38 | goto label_146;
| }
0x0009d906 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d908 mov r2, r6 | r2 = r6;
0x0009d90a mov r1, r4 | r1 = r4;
0x0009d90c bl 0x41f38 | fcn_00041f38 (r0, r1, r2, r3, r4, r5, r6);
| label_38:
0x0009d910 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009d914 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009d918 cmn r2, r3 |
| if (r2 < r3) {
0x0009d91a bmi 0x9d9f6 | goto label_147;
| }
| label_29:
0x0009d91c ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009d91e ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0009d920 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009d924 lsls r3, r3, 2 | r3 <<= 2;
0x0009d926 rsbs r3, r3, 0 | r3 -= ;
0x0009d928 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_30:
0x0009d92a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009d92c cmp r3, fp |
| if (r3 != fp) {
0x0009d92e beq 0x9d94a |
0x0009d930 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0009d932 cmp r3, 1 |
| if (r3 == 1) {
0x0009d934 beq.w 0x9de94 | goto label_148;
| }
0x0009d938 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009d93a ldr r1, [sp, 0x78] | r1 = var_78h;
0x0009d93c ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x0009d93e cmp r1, r3 |
0x0009d940 ittt gt |
| if (r1 <= r3) {
0x0009d942 movgt r3, r2 | r3 = r2;
| }
| if (r1 <= r3) {
0x0009d944 ldrgt r2, [sp, 0x58] | r2 = var_58h;
| }
| if (r1 <= r3) {
0x0009d946 strdgt r1, r2, [r3, 0x1c] | __asm ("strdgt r1, r2, [r3, 0x1c]");
| goto label_49;
| }
| }
| label_49:
0x0009d94a ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009d94c cmp r7, 0 |
0x0009d94e it ne |
| if (r7 != 0) {
0x0009d950 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r7 != 0) {
0x0009d952 beq 0x9d96c |
0x0009d954 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0009d956 cmp r3, 0 |
| if (r3 == 0) {
0x0009d958 beq.w 0x9dd72 | goto label_149;
| }
0x0009d95c ldr r2, [r3] | r2 = *(r3);
0x0009d95e cmp r2, 0 |
| if (r2 == 0) {
0x0009d960 beq.w 0x9dd72 | goto label_149;
| }
0x0009d964 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009d966 cmp r3, 0 |
| if (r3 == 0) {
0x0009d968 beq.w 0x9dd72 | goto label_149;
| }
| }
| label_37:
0x0009d96c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009d96e movs r2, 1 | r2 = 1;
0x0009d970 cmp r3, 0 |
| if (r3 != 0) {
0x0009d972 bne.w 0x9d71c | goto label_23;
| }
| label_130:
0x0009d976 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0009d978 add.w r8, r8, 1 | r8++;
0x0009d97c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009d97e mov r6, r3 | r6 = r3;
0x0009d980 str r3, [sp, 0x40] | var_40h = r3;
0x0009d982 cmp r6, 0 |
| if (r6 != 0) {
0x0009d984 bne.w 0x9d706 | goto label_24;
| }
0x0009d988 b 0x9d73c | goto label_25;
| label_137:
0x0009d98a mov r2, r3 | r2 = r3;
0x0009d98c ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x0009d98e mov r0, r8 | r0 = r8;
0x0009d990 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x0009d994 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0009d996 mvns r3, r7 | r3 = ~r7;
0x0009d998 str.w r3, [r8, 0x34] | __asm ("str.w r3, [r8, 0x34]");
0x0009d99c bl 0x875e0 | fcn_000875e0 (r0, r1, r2);
0x0009d9a0 movs r3, 0 | r3 = 0;
0x0009d9a2 ldr r2, [r6] | r2 = *(r6);
0x0009d9a4 str.w r3, [r8, 0x34] | __asm ("str.w r3, [r8, 0x34]");
0x0009d9a8 mov r0, sb | r0 = sb;
0x0009d9aa ldr r1, [sp, 0x58] | r1 = var_58h;
0x0009d9ac mov r3, r5 | r3 = r5;
0x0009d9ae bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009d9b2 b 0x9d800 | goto label_26;
| label_140:
0x0009d9b4 cmp r4, 0xb |
0x0009d9b6 it eq |
| if (r4 != 0xb) {
0x0009d9b8 moveq r4, 2 | r4 = 2;
| }
0x0009d9ba cmp r7, 0 |
| if (r7 != 0) {
0x0009d9bc bne.w 0x9d8a8 | goto label_27;
| }
| label_141:
0x0009d9c0 sub.w r5, r4, 5 | r5 = r4 - 5;
0x0009d9c4 clz r5, r5 | r5 &= r5;
0x0009d9c8 lsrs r5, r5, 5 | r5 >>= 5;
0x0009d9ca b 0x9d8b2 | goto label_28;
| label_145:
0x0009d9cc cmp r4, 6 |
| if (r4 != 6) {
0x0009d9ce bne.w 0x9dc38 | goto label_146;
| }
0x0009d9d2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009d9d4 mov r2, sl | r2 = sl;
0x0009d9d6 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009d9d8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009d9da str r3, [sp] | *(sp) = r3;
0x0009d9dc mov r3, r6 | r3 = r6;
0x0009d9de bl 0x9be78 | fcn_0009be78 (r0, r1, r2, r3, r4, r5, r6);
| label_144:
0x0009d9e2 mov r0, sb | r0 = sb;
0x0009d9e4 ldr r1, [sp, 0x12c] | r1 = *(arg_12ch);
0x0009d9e6 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0009d9ea ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009d9ee ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009d9f2 cmn r2, r3 |
| if (r2 >= r3) {
0x0009d9f4 bpl 0x9d91c | goto label_29;
| }
| label_147:
0x0009d9f6 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0009d9f8 mov r1, sb | r1 = sb;
0x0009d9fa bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0009d9fe b 0x9d92a | goto label_30;
| label_133:
0x0009da00 ldr r7, [sp, 0x44] | r7 = var_44h;
0x0009da02 b 0x9da12 | goto label_150;
| label_32:
0x0009da04 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0009da06 cmp r3, r6 |
| if (r3 == r6) {
0x0009da08 beq 0x9da18 | goto label_151;
| }
0x0009da0a ldr r7, [r7, 0x10] | r7 = *((r7 + 0x10));
0x0009da0c cmp r7, 0 |
| if (r7 == 0) {
0x0009da0e beq.w 0x9d74e | goto label_31;
| }
| label_150:
0x0009da12 ldr r3, [r7] | r3 = *(r7);
0x0009da14 cmp r3, 0 |
| if (r3 != 0) {
0x0009da16 bne 0x9da04 | goto label_32;
| }
| label_151:
0x0009da18 ldr r0, [sp, 0x90] | r0 = var_90h;
0x0009da1a ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009da1c subs r3, r0, 0 | r3 = r0 - 0;
0x0009da1e it ne |
| if (r3 == r0) {
0x0009da20 movne r3, 1 | r3 = 1;
| }
0x0009da22 cmp r1, r7 |
0x0009da24 it ne |
| if (r1 == r7) {
0x0009da26 movne r3, 0 | r3 = 0;
| }
0x0009da28 cmp r3, 0 |
| if (r3 == 0) {
0x0009da2a beq.w 0x9d74e | goto label_31;
| }
0x0009da2e cmp r0, 0 |
0x0009da30 ldr.w r0, [sb] | r0 = *(sb);
0x0009da34 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009da38 it ge |
| if (r0 < 0) {
0x0009da3a ldrge r3, [sp, 0x90] | r3 = var_90h;
| }
0x0009da3c ldrb.w r0, [r0, 0x57] | r0 = *((r0 + 0x57));
0x0009da40 it lt |
| if (r0 >= 0) {
0x0009da42 addlt r3, r1, -1 | r3 = r1 + -1;
| }
0x0009da46 cmp r0, 0 |
| if (r0 != 0) {
0x0009da48 bne.w 0x9de8a | goto label_152;
| }
0x0009da4c add.w r0, r3, r3, lsl 1 | r0 = r3 + (r3 << 1);
0x0009da50 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009da54 add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
| label_48:
0x0009da58 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0009da5a b 0x9d74e | goto label_31;
| label_131:
0x0009da5c ldr r4, [sp, 0xa4] | r4 = var_a4h;
0x0009da5e mov r7, r2 | r7 = r2;
| label_132:
0x0009da60 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009da62 cmp r3, 0 |
| if (r3 != 0) {
0x0009da64 bne.w 0x9dcbc | goto label_153;
| }
| label_40:
0x0009da68 ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x0009da6a cmp r3, 0 |
| if (r3 != 0) {
0x0009da6c bne.w 0x9dd00 | goto label_154;
| }
| label_41:
0x0009da70 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0009da74 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 >= r3) {
0x0009da76 bpl.w 0x9dd46 | goto label_155;
| }
| label_42:
0x0009da7a ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0009da7c ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x0009da7e str r2, [r3] | *(r3) = r2;
| label_109:
0x0009da80 ldr r2, [pc, 0x48] |
0x0009da82 ldr r3, [pc, 0x1c] | r3 = *(0x9daa2);
0x0009da84 add r2, pc | r2 = 0x13b554;
0x0009da86 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009da88 ldr r2, [r3] | r2 = imp.atan;
0x0009da8a ldr r3, [sp, 0xec] | r3 = var_ech;
0x0009da8c eors r2, r3 | r2 ^= r3;
0x0009da8e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009da92 bne.w 0x9e440 | goto label_156;
| }
0x0009da96 add sp, 0xf4 |
0x0009da98 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_142:
0x0009dad0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009dad2 tst r3, r5 |
| if ((r3 & r5) == 0) {
0x0009dad4 beq.w 0x9d8c6 | goto label_33;
| }
0x0009dad8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009dada ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x0009dadc lsls r1, r2, 0x12 | r1 = r2 << 0x12;
| if (r1 < r2) {
0x0009dade bmi.w 0x9dfa2 | goto label_157;
| }
| label_57:
0x0009dae2 lsls r2, r2, 0x11 | r2 <<= 0x11;
| if (r2 >= r2) {
0x0009dae4 bpl.w 0x9dc1a | goto label_139;
| }
0x0009dae8 ldr.w r2, [sl, 0x30] | r2 = *((sl + 0x30));
0x0009daec cmp r2, 0 |
| if (r2 == 0) {
0x0009daee beq.w 0x9dc04 | goto label_158;
| }
| label_36:
0x0009daf2 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0009daf4 movs r1, 0x1a | r1 = 0x1a;
0x0009daf6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009daf8 mov r0, sb | r0 = sb;
0x0009dafa strd fp, r3, [sp] | __asm ("strd fp, r3, [sp]");
0x0009dafe ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009db00 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x0009db04 str.w fp, [sp, 0x58] | __asm ("str.w fp, [var_58h]");
0x0009db08 str r0, [sp, 0x74] | var_74h = r0;
| label_143:
0x0009db0a ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0009db0e ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0009db12 beq.w 0x9ddb2 | goto label_159;
| }
0x0009db16 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009db18 cmp r3, r6 |
| if (r3 != r6) {
0x0009db1a bne.w 0x9ddf6 | goto label_160;
| }
| label_44:
0x0009db1e ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009db20 cmp r3, 0 |
| if (r3 == 0) {
0x0009db22 beq.w 0x9d8f8 | goto label_34;
| }
0x0009db26 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0009db28 ldrb.w r3, [r6, 0x37] | r3 = *((r6 + 0x37));
0x0009db2c ldr r0, [sp, 0x58] | r0 = var_58h;
0x0009db2e ldrh r2, [r1, 0x32] | r2 = *((r1 + 0x32));
0x0009db30 and r3, r3, 3 | r3 &= 3;
0x0009db34 cmp r3, 2 |
0x0009db36 it eq |
| if (r3 != 2) {
0x0009db38 moveq r0, fp | r0 = fp;
| }
0x0009db3a ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009db3e str r0, [sp, 0xb4] | var_b4h = r0;
0x0009db40 adds r3, r2, r3 | r3 = r2 + r3;
0x0009db42 cmp r2, 0 |
| if (r2 == 0) {
0x0009db44 beq.w 0x9d8f8 | goto label_34;
| }
0x0009db48 ldr r2, [sp, 0x120] | r2 = *(arg_120h);
0x0009db4a movs r0, 0x34 | r0 = 0x34;
0x0009db4c str.w r8, [sp, 0xc8] | __asm ("str.w r8, [var_c8h]");
0x0009db50 movs r5, 0 | r5 = 0;
0x0009db52 ldr.w r8, [sp, 0x60] | r8 = var_60h;
0x0009db56 adds r2, 1 | r2++;
0x0009db58 strd r6, r4, [sp, 0xbc] | __asm ("strd r6, r4, [var_bch]");
0x0009db5c str r7, [sp, 0xc4] | var_c4h = r7;
0x0009db5e mov r6, r3 | r6 = r3;
0x0009db60 str.w fp, [sp, 0xcc] | __asm ("str.w fp, [var_cch]");
0x0009db64 mov r7, r0 | r7 = r0;
0x0009db66 mov r4, r1 | r4 = r1;
0x0009db68 mov fp, r2 |
| do {
0x0009db6a ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0009db6c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009db6e ldr.w r1, [r3, r5, lsl 2] | offset_6 = r5 << 2;
| r1 = *((r3 + offset_6));
0x0009db72 bl 0x45e44 | fcn_00045e44 (r0, r1);
0x0009db76 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0009db78 mov r2, r0 | r2 = r0;
0x0009db7a ldrsh.w r1, [r3, r5, lsl 1] | offset_7 = r5 << 1;
| r1 = *((r3 + offset_7));
0x0009db7e ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0009db80 subs r3, 1 | r3--;
0x0009db82 cmp r3, r5 |
0x0009db84 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0009db88 itt eq |
| if (r3 != r5) {
0x0009db8a moveq r6, r8 | r6 = r8;
| }
| if (r3 != r5) {
0x0009db8c moveq r7, 0x35 | r7 = 0x35;
| }
0x0009db8e eor r3, r3, 0x20 | r3 ^= 0x20;
0x0009db92 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0009db96 orrs.w r3, r3, r1, lsr 31 | r3 |= (r1 >> 31);
| if (r3 == r3) {
0x0009db9a bne 0x9dba8 |
0x0009db9c str r0, [sp, 0x60] | var_60h = r0;
0x0009db9e mov r0, sl | r0 = sl;
0x0009dba0 bl 0x277d4 | fcn_000277d4 (r0, r1);
0x0009dba4 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0009dba6 mov r1, r0 | r1 = r0;
| }
0x0009dba8 mvn r3, 1 | r3 = ~1;
0x0009dbac str r2, [sp, 4] | var_4h = r2;
0x0009dbae str r3, [sp, 8] | var_8h = r3;
0x0009dbb0 add.w r2, r1, fp | r2 = r1 + fp;
0x0009dbb4 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x0009dbb6 mov r1, r7 | r1 = r7;
0x0009dbb8 mov r0, sb | r0 = sb;
0x0009dbba add r3, r5 | r3 += r5;
0x0009dbbc str r3, [sp] | *(sp) = r3;
0x0009dbbe mov r3, r6 | r3 = r6;
0x0009dbc0 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0009dbc4 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009dbc8 cmp r3, 0 |
| if (r3 > 0) {
0x0009dbca ble 0x9dbe0 |
0x0009dbcc ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0009dbd0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009dbd4 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009dbd8 mov.w r3, 0x90 | r3 = 0x90;
0x0009dbdc strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x0009dbe0 ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0009dbe2 adds r5, 1 | r5++;
0x0009dbe4 cmp r3, r5 |
0x0009dbe6 bgt 0x9db6a |
| } while (r3 > r5);
0x0009dbe8 ldrd r6, r4, [sp, 0xbc] | __asm ("ldrd r6, r4, [var_bch]");
0x0009dbec ldrd r7, r8, [sp, 0xc4] | __asm ("ldrd r7, r8, [var_c8h]");
0x0009dbf0 ldr.w fp, [sp, 0xcc] | fp = var_cch;
0x0009dbf4 b 0x9d8f8 | goto label_34;
| label_134:
0x0009dbf6 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009dbf8 mov r1, sl | r1 = sl;
0x0009dbfa mov r0, sb | r0 = sb;
0x0009dbfc adds r2, r3, 1 | r2 = r3 + 1;
0x0009dbfe bl 0x438fc | fcn_000438fc (r0, r1, r2);
0x0009dc02 b 0x9d760 | goto label_35;
| label_158:
0x0009dc04 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x0009dc08 ldr.w r1, [sl] | r1 = *(sl);
0x0009dc0c adds r0, 0x38 | r0 += 0x38;
0x0009dc0e bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x0009dc12 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0009dc14 cmp r3, 0 |
| if (r3 != 0) {
0x0009dc16 bne.w 0x9daf2 | goto label_36;
| }
| label_139:
0x0009dc1a ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009dc1e ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009dc22 cmn r2, r3 |
| if (r2 < r3) {
0x0009dc24 bmi.w 0x9deb2 | goto label_161;
| }
0x0009dc28 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009dc2a ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0009dc2c ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009dc30 lsls r3, r3, 2 | r3 <<= 2;
0x0009dc32 rsbs r3, r3, 0 | r3 -= ;
0x0009dc34 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0009dc36 b 0x9d96c | goto label_37;
| label_146:
0x0009dc38 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009dc3c str r3, [sp, 0x60] | var_60h = r3;
0x0009dc3e ldr r3, [sp, 0x94] | r3 = var_94h;
| if (r3 != 0) {
0x0009dc40 cbz r3, 0x9dc56 |
0x0009dc42 ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x0009dc44 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009dc46 adds r3, 1 | r3++;
0x0009dc48 str r3, [sp, 0xa0] | var_a0h = r3;
0x0009dc4a ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0009dc4c cmp r3, 0 |
0x0009dc4e it eq |
| if (r3 != 0) {
0x0009dc50 moveq r3, r2 | r3 = r2;
| }
0x0009dc52 movs r2, 1 | r2 = 1;
0x0009dc54 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| }
0x0009dc56 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009dc58 ldr r2, [sp, 0xac] | r2 = var_ach;
0x0009dc5a ldrsh.w r4, [sp, 0x78] | r4 = var_78h;
0x0009dc5e cmp r2, 0 |
0x0009dc60 ite eq |
| if (r2 != 0) {
0x0009dc62 moveq r3, 0 | r3 = 0;
| }
| if (r2 == 0) {
0x0009dc64 andne r3, r3, 1 | r3 &= 1;
| }
0x0009dc68 cmp r3, 0 |
| if (r3 != 0) {
0x0009dc6a bne.w 0x9dff0 | goto label_162;
| }
0x0009dc6e strd r4, r3, [sp, 8] | __asm ("strd r4, r3, [var_8h]");
0x0009dc72 mov r1, sl | r1 = sl;
0x0009dc74 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009dc76 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009dc78 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009dc7a str r3, [sp, 4] | var_4h = r3;
0x0009dc7c ldr r3, [sp, 0x118] | r3 = *(arg_118h);
0x0009dc7e str r2, [sp, 0x18] | var_18h = r2;
0x0009dc80 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009dc82 str r3, [sp] | *(sp) = r3;
0x0009dc84 movs r3, 5 | r3 = 5;
0x0009dc86 str r3, [sp, 0x10] | var_10h = r3;
0x0009dc88 str r2, [sp, 0x14] | var_14h = r2;
0x0009dc8a ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009dc8c ldr r2, [sp, 0xac] | r2 = var_ach;
0x0009dc8e bl 0x9cbf8 | fcn_0009cbf8 (r0, r1, r2, r3, r4, r5, r6);
| label_60:
0x0009dc92 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009dc94 cmp r3, 0 |
| if (r3 != 0) {
0x0009dc96 bne.w 0x9e1f8 | goto label_163;
| }
0x0009dc9a movs r3, 1 | r3 = 1;
0x0009dc9c str r3, [sp, 0x9c] | var_9ch = r3;
0x0009dc9e b 0x9d910 | goto label_38;
| label_127:
0x0009dca0 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009dca2 mov r2, r8 | r2 = r8;
0x0009dca4 mov r6, r2 | r6 = r2;
0x0009dca6 mov r1, r3 | r1 = r3;
0x0009dca8 cmp r2, 0 |
| if (r2 != 0) {
0x0009dcaa bne.w 0x9d6d6 | goto label_39;
| }
| label_128:
0x0009dcae ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0009dcb0 str r1, [sp, 0x30] | var_30h = r1;
0x0009dcb2 str r3, [sp, 0xb8] | var_b8h = r3;
0x0009dcb4 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009dcb6 cmp r3, 0 |
| if (r3 == 0) {
0x0009dcb8 beq.w 0x9da68 | goto label_40;
| }
| label_153:
0x0009dcbc mov r1, r3 | r1 = r3;
0x0009dcbe mov r0, sb | r0 = sb;
0x0009dcc0 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0009dcc4 ldr.w r1, [pc, 0x788] |
0x0009dcc8 mov r0, sb | r0 = sb;
0x0009dcca add r1, pc | r1 = 0x13c11e;
0x0009dccc bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009dcd0 ldr.w r3, [sb] | r3 = *(sb);
0x0009dcd4 cmp r4, 0 |
0x0009dcd6 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0009dcda ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009dcde it lt |
| if (r4 >= 0) {
0x0009dce0 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0009dce4 cmp r3, 0 |
| if (r3 != 0) {
0x0009dce6 bne.w 0x9df0c | goto label_164;
| }
0x0009dcea ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009dcee add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0009dcf2 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
| label_54:
0x0009dcf6 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009dcf8 ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x0009dcfa cmp r3, 0 |
| if (r3 == 0) {
0x0009dcfc beq.w 0x9da70 | goto label_41;
| }
| label_154:
0x0009dd00 movs r3, 0 | r3 = 0;
0x0009dd02 ldr r2, [sp, 0x94] | r2 = var_94h;
0x0009dd04 str r3, [sp] | *(sp) = r3;
0x0009dd06 movs r1, 0x10 | r1 = 0x10;
0x0009dd08 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x0009dd0a mov r0, sb | r0 = sb;
0x0009dd0c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009dd10 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009dd12 cmp r3, 0 |
| if (r3 == 0) {
0x0009dd14 beq.w 0x9df16 | goto label_165;
| }
0x0009dd18 ldr r1, [sp, 0xa8] | r1 = var_a8h;
0x0009dd1a mov r0, sb | r0 = sb;
0x0009dd1c bl 0x42960 | fcn_00042960 (r0, r1, r2);
| label_55:
0x0009dd20 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x0009dd22 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009dd26 mvns r2, r3 | r2 = ~r3;
0x0009dd28 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0009dd2c cmn r1, r3 |
| if (r1 < r3) {
0x0009dd2e bmi.w 0x9e33e | goto label_166;
| }
0x0009dd32 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0009dd34 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009dd38 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x0009dd3c ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0009dd40 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 < r3) {
0x0009dd42 bmi.w 0x9da7a | goto label_42;
| }
| label_155:
0x0009dd46 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [var_34h]");
0x0009dd4a movs r1, 0x61 | r1 = 0x61;
0x0009dd4c mov r0, sb | r0 = sb;
0x0009dd4e ldr.w r3, [r3, r2, lsl 2] | offset_8 = r2 << 2;
| r3 = *((r3 + offset_8));
0x0009dd52 str r3, [sp] | *(sp) = r3;
0x0009dd54 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0009dd56 adds r2, r3, 1 | r2 = r3 + 1;
0x0009dd58 ldrsh.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0009dd5c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009dd60 cmp r7, 0 |
| if (r7 != 0) {
0x0009dd62 bne.w 0x9da7a | goto label_42;
| }
0x0009dd66 mov r2, r7 | r2 = r7;
0x0009dd68 mov r1, sl | r1 = sl;
0x0009dd6a mov r0, sb | r0 = sb;
0x0009dd6c bl 0x438fc | fcn_000438fc (r0, r1, r2);
0x0009dd70 b 0x9da7a | goto label_42;
| label_149:
0x0009dd72 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0009dd74 mov r0, sb | r0 = sb;
0x0009dd76 adds r1, r3, 1 | r1 = r3 + 1;
0x0009dd78 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0009dd7c ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009dd7e ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0009dd82 cmp r3, 0 |
0x0009dd84 itt lt |
| if (r3 >= 0) {
0x0009dd86 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r3 < 0) {
0x0009dd8a str r3, [sp, 0x7c] | var_7ch = r3;
| }
0x0009dd8c ldr.w r3, [sb] | r3 = *(sb);
0x0009dd90 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009dd94 cmp r3, 0 |
| if (r3 != 0) {
0x0009dd96 bne.w 0x9def4 | goto label_167;
| }
0x0009dd9a ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009dd9c add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x0009dda0 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009dda4 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
| label_52:
0x0009dda8 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009ddaa movs r3, 0 | r3 = 0;
0x0009ddac movs r2, 1 | r2 = 1;
0x0009ddae str r3, [sp, 0x7c] | var_7ch = r3;
0x0009ddb0 b 0x9d714 | goto label_43;
| label_159:
0x0009ddb2 str r3, [sp] | *(sp) = r3;
0x0009ddb4 movs r1, 0x8e | r1 = 0x8e;
0x0009ddb6 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009ddb8 mov r0, sb | r0 = sb;
0x0009ddba ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009ddbc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009ddc0 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009ddc2 cmp r3, 0 |
| if (r3 == 0) {
0x0009ddc4 beq.w 0x9d8f8 | goto label_34;
| }
0x0009ddc8 ldr r2, [sp, 0x120] | r2 = *(arg_120h);
0x0009ddca movs r1, 0x35 | r1 = 0x35;
0x0009ddcc ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009ddce mov r0, sb | r0 = sb;
0x0009ddd0 str r2, [sp] | *(sp) = r2;
0x0009ddd2 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009ddd4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009ddd8 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009dddc cmp r3, 0 |
| if (r3 <= 0) {
0x0009ddde ble.w 0x9d8f8 | goto label_34;
| }
0x0009dde2 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0009dde6 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009ddea add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009ddee movs r3, 0x90 | r3 = 0x90;
0x0009ddf0 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
0x0009ddf4 b 0x9d8f8 | goto label_34;
| label_160:
0x0009ddf6 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009ddf8 ldrh r3, [r2, 0x32] | r3 = *((r2 + 0x32));
0x0009ddfa cmp r3, 0 |
| if (r3 == 0) {
0x0009ddfc beq.w 0x9db1e | goto label_44;
| }
0x0009de00 ldr.w r3, [pc, 0x650] |
0x0009de04 movs r5, 0 | r5 = 0;
0x0009de06 str.w r8, [sp, 0xc0] | __asm ("str.w r8, [var_c0h]");
0x0009de0a ldr.w r8, [sp, 0x58] | r8 = var_58h;
0x0009de0e add r3, pc | r3 = 0x13c266;
0x0009de10 str r4, [sp, 0xb4] | var_b4h = r4;
0x0009de12 str.w fp, [sp, 0xc4] | __asm ("str.w fp, [var_c4h]");
0x0009de16 mov r4, r2 | r4 = r2;
0x0009de18 mov fp, r3 |
0x0009de1a str r7, [sp, 0xbc] | var_bch = r7;
| label_45:
0x0009de1c ldrh r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0009de1e lsls r7, r5, 1 | r7 = r5 << 1;
0x0009de20 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0009de22 ldrsh.w ip, [r3, r5, lsl 1] | offset_9 = r5 << 1;
| ip = *((r3 + offset_9));
| if (r0 == 0) {
0x0009de26 cbz r0, 0x9de80 | goto label_168;
| }
0x0009de28 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0009de2a movs r3, 0 | r3 = 0;
0x0009de2c subs r2, 2 | r2 -= 2;
0x0009de2e b 0x9de36 |
| while (r1 != ip) {
0x0009de30 adds r3, 1 | r3++;
0x0009de32 cmp r3, r0 |
| if (r3 == r0) {
0x0009de34 beq 0x9de80 | goto label_168;
| }
0x0009de36 ldrsh r1, [r2, 2]! | r1 = *((r2 += 2));
0x0009de3a cmp r1, ip |
0x0009de3c bne 0x9de30 |
| }
0x0009de3e sxth r3, r3 | __asm ("sxth r3, r3");
| label_46:
0x0009de40 add.w r2, r8, r5 | r2 = r8 + r5;
0x0009de44 movs r1, 0x5e | r1 = 0x5e;
0x0009de46 str r2, [sp] | *(sp) = r2;
0x0009de48 mov r0, sb | r0 = sb;
0x0009de4a ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009de4c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009de50 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0009de52 mov r1, fp | r1 = fp;
0x0009de54 ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0009de58 mov r0, sb | r0 = sb;
0x0009de5a adds r5, 1 | r5++;
0x0009de5c ldrsh r3, [r3, r7] | r3 = *((r3 + r7));
0x0009de5e add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009de62 ldr.w r3, [r2, r3, lsl 2] | offset_10 = r3 << 2;
| r3 = *((r2 + offset_10));
0x0009de66 ldr.w r2, [sl] | r2 = *(sl);
0x0009de6a bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009de6e ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0009de70 cmp r3, r5 |
| if (r3 > r5) {
0x0009de72 bgt 0x9de1c | goto label_45;
| }
0x0009de74 ldr r4, [sp, 0xb4] | r4 = var_b4h;
0x0009de76 ldrd r7, r8, [sp, 0xbc] | __asm ("ldrd r7, r8, [var_bch]");
0x0009de7a ldr.w fp, [sp, 0xc4] | fp = var_c4h;
0x0009de7e b 0x9db1e | goto label_44;
| label_168:
0x0009de80 mov.w r3, -1 | r3 = -1;
0x0009de84 b 0x9de40 | goto label_46;
| label_135:
0x0009de86 ldr r2, [sp, 0x88] | r2 = var_88h;
0x0009de88 b 0x9d84e | goto label_47;
| label_152:
0x0009de8a ldr.w r3, [pc, 0x5cc] |
0x0009de8e add r3, pc | r3 = 0x13c2ec;
0x0009de90 adds r3, 4 | r3 += 4;
0x0009de92 b 0x9da58 | goto label_48;
| label_148:
0x0009de94 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0009de96 cmp r1, 0 |
| if (r1 == 0) {
0x0009de98 beq.w 0x9d94a | goto label_49;
| }
0x0009de9c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009de9e ldrb r3, [r0, 0x13] | r3 = *((r0 + 0x13));
0x0009dea0 cmp r3, 7 |
| if (r3 > 7) {
0x0009dea2 bhi.w 0x9d94a | goto label_49;
| }
0x0009dea6 adds r2, r3, 1 | r2 = r3 + 1;
0x0009dea8 adds r3, 0x26 | r3 += 0x26;
0x0009deaa strb r2, [r0, 0x13] | *((r0 + 0x13)) = r2;
0x0009deac str.w r1, [r0, r3, lsl 2] | __asm ("str.w r1, [r0, r3, lsl 2]");
0x0009deb0 b 0x9d94a | goto label_49;
| label_161:
0x0009deb2 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0009deb4 mov r1, sb | r1 = sb;
0x0009deb6 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0009deba b 0x9d96c | goto label_37;
| label_91:
0x0009debc ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009debe ldr r2, [r2] | r2 = *(r2);
0x0009dec0 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0009dec2 and r2, r2, 0x4000 | r2 &= 0x4000;
0x0009dec6 orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x0009dec8 beq.w 0x9d4fe | goto label_50;
| }
| label_59:
0x0009decc ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
0x0009ded0 cmp r2, 0 |
| if (r2 != 0) {
0x0009ded2 bne.w 0x9d4fe | goto label_50;
| }
0x0009ded6 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x0009deda ldr.w r1, [sl] | r1 = *(sl);
0x0009dede adds r0, 0x38 | r0 += 0x38;
0x0009dee0 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x0009dee4 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0009dee6 cmp r3, 0 |
| if (r3 == 0) {
0x0009dee8 beq.w 0x9e3a6 | goto label_169;
| }
| label_72:
0x0009deec movs r3, 0 | r3 = 0;
0x0009deee str r3, [sp, 0xac] | var_ach = r3;
0x0009def0 b.w 0x9d176 | goto label_51;
| label_167:
0x0009def4 ldr.w r3, [pc, 0x564] |
0x0009def8 add r3, pc | r3 = 0x13c358;
0x0009defa adds r3, 4 | r3 += 4;
0x0009defc b 0x9dda8 | goto label_52;
| label_108:
0x0009defe ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009df00 mov r0, r4 | r0 = r4;
0x0009df02 bl 0x28c3c | fcn_00028c3c (r0);
0x0009df06 str r0, [sp, 0x68] | var_68h = r0;
0x0009df08 b.w 0x9d450 | goto label_53;
| label_164:
0x0009df0c ldr.w r3, [pc, 0x550] |
0x0009df10 add r3, pc | r3 = 0x13c374;
0x0009df12 adds r3, 4 | r3 += 4;
0x0009df14 b 0x9dcf6 | goto label_54;
| label_165:
0x0009df16 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009df18 cmp r3, 0 |
| if (r3 != 0) {
0x0009df1a bne.w 0x9e3c6 | goto label_170;
| }
| label_74:
0x0009df1e ldr r1, [sp, 0x11c] | r1 = *(arg_11ch);
0x0009df20 mov r0, sb | r0 = sb;
0x0009df22 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009df24 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0009df26 str r1, [sp] | *(sp) = r1;
0x0009df28 movs r1, 0x1e | r1 = 0x1e;
0x0009df2a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009df2e ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009df30 mov r2, sl | r2 = sl;
0x0009df32 movs r1, 2 | r1 = 2;
0x0009df34 bl 0x4a9f0 | fcn_0004a9f0 (r0, r1, r2);
0x0009df38 b 0x9dd20 | goto label_55;
| label_120:
0x0009df3a ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009df3c cmp r2, fp |
0x0009df3e it ne |
| if (r2 != fp) {
0x0009df40 movne r4, 4 | r4 = 4;
| goto label_171;
| }
| if (r2 != fp) {
| label_171:
0x0009df42 bne.w 0x9d56a | goto label_56;
| }
0x0009df46 ldr r2, [sp, 0x120] | r2 = *(arg_120h);
0x0009df48 cmp r2, 0 |
| if (r2 != 0) {
0x0009df4a bne.w 0x9e3be | goto label_172;
| }
0x0009df4e ldr.w r1, [pc, 0x514] |
0x0009df52 mov r0, sb | r0 = sb;
0x0009df54 add r1, pc | r1 = 0x13c3be;
0x0009df56 bl 0x4a160 | fcn_0004a160 (r0);
0x0009df5a ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009df5c mov r3, r5 | r3 = r5;
0x0009df5e movs r1, 0x1e | r1 = 0x1e;
0x0009df60 mov r0, sb | r0 = sb;
0x0009df62 str r2, [sp] | *(sp) = r2;
0x0009df64 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009df66 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009df6a ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009df6c strd r3, r3, [sp, 0x8c] | __asm ("strd r3, r3, [var_90h]");
| label_65:
0x0009df70 movs r3, 0 | r3 = 0;
0x0009df72 mov r0, sb | r0 = sb;
0x0009df74 ldr r1, [sp, 0x12c] | r1 = *(arg_12ch);
0x0009df76 str r3, [sp, 0xa0] | var_a0h = r3;
0x0009df78 str r3, [sp, 0x9c] | var_9ch = r3;
0x0009df7a bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x0009df7e ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009df82 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009df86 cmn r2, r3 |
| if (r2 >= r3) {
0x0009df88 bpl.w 0x9e0e4 | goto label_173;
| }
| label_63:
0x0009df8c rsbs r2, r6, 0 | r2 = r6 - ;
0x0009df8e mov r1, sb | r1 = sb;
0x0009df90 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0009df94 b 0x9e0f0 | goto label_174;
| label_126:
0x0009df96 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009df98 str r3, [sp, 0x48] | var_48h = r3;
0x0009df9a movs r3, 6 | r3 = 6;
0x0009df9c str r3, [sp, 0x38] | var_38h = r3;
0x0009df9e b.w 0x9d136 | goto label_14;
| label_157:
0x0009dfa2 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0009dfa6 cmp r3, 0 |
| if (r3 == 0) {
0x0009dfa8 beq.w 0x9e3f2 | goto label_175;
| }
| label_75:
0x0009dfac ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009dfae ldrb.w r3, [r0, 0x97] | r3 = *((r0 + 0x97));
0x0009dfb2 cmp r3, 0 |
| if (r3 != 0) {
0x0009dfb4 bne.w 0x9dae2 | goto label_57;
| }
0x0009dfb8 movs r2, 0x80 | r2 = 0x80;
0x0009dfba mov r1, sl | r1 = sl;
0x0009dfbc str r3, [sp] | *(sp) = r3;
0x0009dfbe bl 0x45008 | r0 = fcn_00045008 (r0, r1, r2, r3, r4);
0x0009dfc2 cmp r0, 0 |
| if (r0 != 0) {
0x0009dfc4 bne.w 0x9daf2 | goto label_36;
| }
0x0009dfc8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009dfca ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x0009dfcc b 0x9dae2 | goto label_57;
| label_92:
0x0009dfce ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009dfd0 ldr r3, [r3] | r3 = *(r3);
0x0009dfd2 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0009dfd4 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
| if (r2 == 0) {
0x0009dfd6 cbz r2, 0x9dfe6 | goto label_176;
| }
0x0009dfd8 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0009dfda cmp r2, 0 |
| if (r2 != 0) {
0x0009dfdc bne.w 0x9d156 | goto label_58;
| }
0x0009dfe0 b 0x9dfe6 | goto label_176;
| label_93:
0x0009dfe2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009dfe4 ldr r3, [r3] | r3 = *(r3);
| label_176:
0x0009dfe6 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009dfe8 lsls r3, r3, 0x11 | r3 <<= 0x11;
| if (r3 >= r3) {
0x0009dfea bpl.w 0x9d4fe | goto label_50;
| }
0x0009dfee b 0x9decc | goto label_59;
| label_162:
0x0009dff0 movs r5, 0 | r5 = 0;
0x0009dff2 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009dff4 mov r3, r5 | r3 = r5;
0x0009dff6 movs r1, 0xa7 | r1 = 0xa7;
0x0009dff8 mov r0, sb | r0 = sb;
0x0009dffa str r5, [sp] | *(sp) = r5;
0x0009dffc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e000 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009e002 mov r1, sl | r1 = sl;
0x0009e004 strd r4, r5, [sp, 8] | __asm ("strd r4, r5, [var_8h]");
0x0009e008 ldr r4, [sp, 0x98] | r4 = var_98h;
0x0009e00a str r3, [sp, 0x18] | var_18h = r3;
0x0009e00c ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009e00e ldr r2, [sp, 0xac] | r2 = var_ach;
0x0009e010 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009e012 str r3, [sp, 0x14] | var_14h = r3;
0x0009e014 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009e016 str r3, [sp, 4] | var_4h = r3;
0x0009e018 ldr r3, [sp, 0x118] | r3 = *(arg_118h);
0x0009e01a str r3, [sp] | *(sp) = r3;
0x0009e01c movs r3, 5 | r3 = 5;
0x0009e01e str r3, [sp, 0x10] | var_10h = r3;
0x0009e020 mov r3, r4 | r3 = r4;
0x0009e022 bl 0x9cbf8 | fcn_0009cbf8 (r0, r1, r2, r3, r4, r5, r6);
0x0009e026 mov r3, r5 | r3 = r5;
0x0009e028 mov r2, r4 | r2 = r4;
0x0009e02a movs r1, 0xa8 | r1 = 0xa8;
0x0009e02c mov r0, sb | r0 = sb;
0x0009e02e str r5, [sp] | *(sp) = r5;
0x0009e030 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e034 b 0x9dc92 | goto label_60;
| label_122:
0x0009e036 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e038 cmp r3, 0 |
| if (r3 != 0) {
0x0009e03a bne.w 0x9e154 | goto label_177;
| }
0x0009e03e ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e040 str r3, [sp, 0x8c] | var_8ch = r3;
| label_67:
0x0009e042 ldr.w r1, [pc, 0x424] |
0x0009e046 mov r0, sb | r0 = sb;
0x0009e048 add r1, pc | r1 = 0x13c4b6;
0x0009e04a bl 0x4a160 | fcn_0004a160 (r0);
0x0009e04e ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009e050 mov r3, r5 | r3 = r5;
0x0009e052 movs r1, 0x1e | r1 = 0x1e;
0x0009e054 mov r0, sb | r0 = sb;
0x0009e056 str r2, [sp] | *(sp) = r2;
0x0009e058 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009e05a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e05e subs r3, r4, 1 | r3 = r4 - 1;
0x0009e060 cmp r3, 5 |
| if (r3 > 5) {
0x0009e062 bhi.w 0x9e444 | goto label_178;
| }
0x0009e066 adr r2, 8 | r2 = 8;
0x0009e068 ldr.w r3, [r2, r3, lsl 2] | offset_11 = r3 << 2;
| r3 = *((r2 + offset_11));
0x0009e06c add r2, r3 | r2 += r3;
0x0009e06e bx r2 | return uint32_t (*r2)() ();
| label_116:
0x0009e088 cmp r3, 0xb |
0x0009e08a mov r4, r3 | r4 = r3;
| if (r3 != 0xb) {
0x0009e08c bne.w 0x9d532 | goto label_61;
| }
0x0009e090 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009e092 movs r4, 2 | r4 = 2;
0x0009e094 cmp r3, 0 |
| if (r3 != 0) {
0x0009e096 bne.w 0x9d53a | goto label_62;
| }
0x0009e09a ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e09c cmp r3, 0 |
| if (r3 != 0) {
0x0009e09e bne.w 0x9e434 | goto label_179;
| }
0x0009e0a2 ldr r1, [pc, 0x3c8] |
0x0009e0a4 mov r0, sb | r0 = sb;
0x0009e0a6 movs r4, 2 | r4 = 2;
0x0009e0a8 add r1, pc | r1 = 0x13c51a;
0x0009e0aa bl 0x4a160 | fcn_0004a160 (r0);
0x0009e0ae ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009e0b0 mov r3, r5 | r3 = r5;
0x0009e0b2 movs r1, 0x1e | r1 = 0x1e;
0x0009e0b4 mov r0, sb | r0 = sb;
0x0009e0b6 str r2, [sp] | *(sp) = r2;
0x0009e0b8 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009e0ba bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e0be ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e0c0 mov fp, r3 |
0x0009e0c2 str r3, [sp, 0x90] | var_90h = r3;
0x0009e0c4 str r3, [sp, 0x8c] | var_8ch = r3;
| label_77:
0x0009e0c6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009e0c8 mov r1, r4 | r1 = r4;
0x0009e0ca mov r2, sl | r2 = sl;
0x0009e0cc bl 0x4a9f0 | fcn_0004a9f0 (r0, r1, r2);
0x0009e0d0 movs r3, 0 | r3 = 0;
0x0009e0d2 strd r3, r3, [sp, 0x9c] | __asm ("strd r3, r3, [var_a0h]");
| label_71:
0x0009e0d6 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009e0da ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0009e0de cmn r2, r3 |
| if (r2 < r3) {
0x0009e0e0 bmi.w 0x9df8c | goto label_63;
| }
| label_173:
0x0009e0e4 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0009e0e6 lsls r3, r6, 2 | r3 = r6 << 2;
0x0009e0e8 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009e0ec rsbs r3, r3, 0 | r3 -= ;
0x0009e0ee str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_174:
0x0009e0f0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009e0f2 cmp r3, 0 |
0x0009e0f4 it ne |
| if (r3 != 0) {
0x0009e0f6 cmpne r3, fp | __asm ("cmpne r3, fp");
| }
0x0009e0f8 ite ne |
| if (r3 == 0) {
0x0009e0fa movne r3, 1 | r3 = 1;
| }
| if (r3 != 0) {
0x0009e0fc moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0009e0fe bne 0x9e186 | goto label_180;
| }
0x0009e100 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x0009e102 cmp r2, 0 |
| if (r2 != 0) {
0x0009e104 bne 0x9e1b2 | goto label_181;
| }
0x0009e106 ldr.w ip, [sp, 0x8c] | ip = var_8ch;
0x0009e10a mov r4, ip | r4 = ip;
0x0009e10c b.w 0x9d6bc | goto label_64;
| label_121:
0x0009e110 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e112 cmp r3, 0 |
| if (r3 != 0) {
0x0009e114 bne.w 0x9e3b4 | goto label_182;
| }
0x0009e118 ldr r1, [pc, 0x354] |
0x0009e11a mov r0, sb | r0 = sb;
0x0009e11c add r1, pc | r1 = 0x13c590;
0x0009e11e bl 0x4a160 | fcn_0004a160 (r0);
0x0009e122 ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009e124 mov r3, r5 | r3 = r5;
0x0009e126 movs r1, 0x1e | r1 = 0x1e;
0x0009e128 mov r0, sb | r0 = sb;
0x0009e12a str r2, [sp] | *(sp) = r2;
0x0009e12c ldr r2, [sp, 0x98] | r2 = var_98h;
0x0009e12e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e132 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e134 strd r3, r3, [sp, 0x8c] | __asm ("strd r3, r3, [var_90h]");
0x0009e138 ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009e13a mov r2, sl | r2 = sl;
0x0009e13c ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009e13e ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009e140 str r3, [sp] | *(sp) = r3;
0x0009e142 movs r3, 0 | r3 = 0;
0x0009e144 bl 0x9be78 | fcn_0009be78 (r0, r1, r2, r3, r4, r5, r6);
0x0009e148 b 0x9df70 | goto label_65;
| label_112:
0x0009e14a mov r5, r6 | r5 = r6;
0x0009e14c mov r3, r1 | r3 = r1;
0x0009e14e movs r2, 0 | r2 = 0;
0x0009e150 b.w 0x9d4a4 | goto label_66;
| label_177:
0x0009e154 movs r3, 0 | r3 = 0;
0x0009e156 str r3, [sp, 0x8c] | var_8ch = r3;
| label_73:
0x0009e158 ldr r3, [sp, 0x120] | r3 = *(arg_120h);
0x0009e15a movs r1, 0x35 | r1 = 0x35;
0x0009e15c ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009e15e mov r0, sb | r0 = sb;
0x0009e160 str r3, [sp] | *(sp) = r3;
0x0009e162 mov r3, r5 | r3 = r5;
0x0009e164 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e168 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009e16c cmp r3, 0 |
| if (r3 <= 0) {
0x0009e16e ble.w 0x9e042 | goto label_67;
| }
0x0009e172 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0009e176 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009e17a add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009e17e movs r3, 0x90 | r3 = 0x90;
0x0009e180 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
0x0009e184 b 0x9e042 | goto label_67;
| label_180:
0x0009e186 movs r3, 0 | r3 = 0;
0x0009e188 movs r1, 8 | r1 = 8;
0x0009e18a mov r2, r3 | r2 = r3;
0x0009e18c mov r0, sb | r0 = sb;
0x0009e18e str r3, [sp] | *(sp) = r3;
0x0009e190 mov r4, r3 | r4 = r3;
0x0009e192 bl 0x41a7c | r0 = fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e196 mov ip, r0 |
0x0009e198 b.w 0x9d6bc | goto label_64;
| label_107:
0x0009e19c str.w r8, [sp, 0x68] | __asm ("str.w r8, [var_68h]");
0x0009e1a0 str.w r8, [sp, 0x48] | __asm ("str.w r8, [var_48h]");
0x0009e1a4 b.w 0x9d136 | goto label_14;
| label_117:
0x0009e1a8 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009e1aa mov fp, r3 |
0x0009e1ac str r3, [sp, 0x90] | var_90h = r3;
0x0009e1ae b.w 0x9d57a | goto label_68;
| label_181:
0x0009e1b2 mov r2, r3 | r2 = r3;
0x0009e1b4 movs r1, 8 | r1 = 8;
0x0009e1b6 str r3, [sp] | *(sp) = r3;
0x0009e1b8 mov r0, sb | r0 = sb;
0x0009e1ba bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e1be ldr.w r2, [sb] | r2 = *(sb);
0x0009e1c2 mov r4, r0 | r4 = r0;
0x0009e1c4 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009e1c6 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009e1ca ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0009e1ce subs r3, 1 | r3--;
0x0009e1d0 it mi |
| if (r3 >= 1) {
0x0009e1d2 addmi r3, r1, -1 | r3 = r1 + -1;
| }
0x0009e1d6 cmp r2, 0 |
| if (r2 != 0) {
0x0009e1d8 bne.w 0x9e350 | goto label_183;
| }
0x0009e1dc add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x0009e1e0 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009e1e4 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
| label_70:
0x0009e1e8 mov.w ip, 0 |
0x0009e1ec str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0009e1ee b.w 0x9d6bc | goto label_64;
| label_119:
0x0009e1f2 mov fp, r3 |
0x0009e1f4 b.w 0x9d56a | goto label_56;
| label_163:
0x0009e1f8 movs r4, 0 | r4 = 0;
0x0009e1fa ldr r2, [sp, 0x94] | r2 = var_94h;
0x0009e1fc movs r3, 1 | r3 = 1;
0x0009e1fe movs r1, 0x56 | r1 = 0x56;
0x0009e200 str r4, [sp] | *(sp) = r4;
0x0009e202 mov r0, sb | r0 = sb;
0x0009e204 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e208 mov r3, r4 | r3 = r4;
0x0009e20a mov r2, r4 | r2 = r4;
0x0009e20c movs r1, 8 | r1 = 8;
0x0009e20e str r4, [sp] | *(sp) = r4;
0x0009e210 mov r0, sb | r0 = sb;
0x0009e212 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e216 ldr r1, [pc, 0x25c] |
0x0009e218 mov r4, r0 | r4 = r0;
0x0009e21a mov r0, sb | r0 = sb;
0x0009e21c add r1, pc | r1 = 0x13c696;
0x0009e21e bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009e222 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x0009e224 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0009e228 mvns r2, r3 | r2 = ~r3;
0x0009e22a ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0009e22e cmn r1, r3 |
| if (r1 < r3) {
0x0009e230 bmi.w 0x9e42c | goto label_184;
| }
0x0009e234 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0009e236 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0009e23a str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_76:
0x0009e23e ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009e240 ldr r3, [r2, 0x38] | r3 = *((r2 + 0x38));
0x0009e242 subs r1, r3, 1 | r1 = r3 - 1;
0x0009e244 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0009e246 str r1, [sp, 0xb8] | var_b8h = r1;
0x0009e248 str r1, [r2, 0x38] | *((r2 + 0x38)) = r1;
| if (r3 != 0) {
0x0009e24a cbz r3, 0x9e25c |
0x0009e24c movs r3, 0 | r3 = 0;
0x0009e24e ldr r2, [sp, 0x88] | r2 = var_88h;
0x0009e250 str r3, [sp] | *(sp) = r3;
0x0009e252 mov r0, sb | r0 = sb;
0x0009e254 mov r3, r1 | r3 = r1;
0x0009e256 movs r1, 0x32 | r1 = 0x32;
0x0009e258 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
0x0009e25c ldr r2, [sp, 0x60] | r2 = var_60h;
0x0009e25e ldr r1, [sp, 0x74] | r1 = var_74h;
0x0009e260 cmp r2, r1 |
| if (r2 <= r1) {
0x0009e262 ble 0x9e30a | goto label_185;
| }
0x0009e264 ldr r3, [pc, 0x210] |
0x0009e266 ldr r5, [pc, 0x214] |
0x0009e268 str.w r8, [sp, 0x74] | __asm ("str.w r8, [var_74h]");
0x0009e26c add r3, pc | r3 = 0x13c6e8;
0x0009e26e ldr.w r8, [sp, 0xb8] | r8 = var_b8h;
0x0009e272 adds r3, 4 | r3 += 4;
0x0009e274 str r7, [sp, 0x5c] | var_5ch = r7;
0x0009e276 str r4, [sp, 0x60] | var_60h = r4;
0x0009e278 add r5, pc | r5 = 0x13c6fa;
0x0009e27a str.w sl, [sp, 0x88] | __asm ("str.w sl, [var_88h]");
0x0009e27e mov r7, r2 | r7 = r2;
0x0009e280 mov r4, r1 | r4 = r1;
0x0009e282 mov sl, r3 | sl = r3;
0x0009e284 str r6, [sp, 0x24] | var_24h = r6;
| do {
0x0009e286 ldr.w r2, [sb] | r2 = *(sb);
0x0009e28a cmp r4, 0 |
0x0009e28c ite lt |
| if (r4 >= 0) {
0x0009e28e ldrlt r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
| }
| if (r4 >= 0) {
0x0009e292 mov r3, r4 | r3 = r4;
| }
0x0009e294 mov r0, sl | r0 = sl;
0x0009e296 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0009e29a it lt |
| if (r4 >= 0) {
0x0009e29c addlt r3, r3, -1 | r3 += -1;
| }
| if (r2 == 0) {
0x0009e2a0 cbnz r2, 0x9e2ae |
0x0009e2a2 ldr.w r0, [sb, 0x68] | r0 = *((sb + 0x68));
0x0009e2a6 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009e2aa add.w r0, r0, r3, lsl 3 | r0 += (r3 << 3);
| }
0x0009e2ae ldrb r1, [r0] | r1 = *(r0);
0x0009e2b0 ldrsb.w lr, [r0, 1] |
0x0009e2b4 ldrh r6, [r0, 2] | r6 = *((r0 + 2));
0x0009e2b6 cmp r1, 0x8e |
0x0009e2b8 ldrd r2, r3, [r0, 4] | __asm ("ldrd r2, r3, [r0, 4]");
0x0009e2bc ldrd ip, r0, [r0, 0xc] | __asm ("ldrd ip, r0, [r0, 0xc]");
| if (r1 != 0x8e) {
0x0009e2c0 beq 0x9e2f6 |
0x0009e2c2 strd r0, lr, [sp, 4] | __asm ("strd r0, lr, [var_4h]");
0x0009e2c6 adds r0, r5, r1 | r0 = r5 + r1;
0x0009e2c8 ldrb.w r0, [r0, 0x658] | r0 = *((r0 + 0x658));
0x0009e2cc str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0009e2d0 tst.w r0, 1 |
0x0009e2d4 mov r0, sb | r0 = sb;
0x0009e2d6 it ne |
| if ((r0 & 1) == 0) {
0x0009e2d8 movne r3, r8 | r3 = r8;
| }
0x0009e2da bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x0009e2de ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009e2e2 cmp r3, 0 |
0x0009e2e4 itttt gt |
| if (r3 <= 0) {
0x0009e2e6 ldrgt r2, [sb, 0x68] | r2 = *((sb + 0x68));
| }
| if (r3 <= 0) {
0x0009e2ea addgt r3, r3, r3, lsl 1 | r3 += (r3 << 1);
| }
| if (r3 > 0) {
0x0009e2ee add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
| }
| if (r3 <= 0) {
0x0009e2f2 strh r6, [r2, -0x16] | *((r2 - 0x16)) = r6;
| goto label_186;
| }
| }
| label_186:
0x0009e2f6 adds r4, 1 | r4++;
0x0009e2f8 cmp r4, r7 |
0x0009e2fa bne 0x9e286 |
| } while (r4 != r7);
0x0009e2fc ldr r6, [sp, 0x24] | r6 = var_24h;
0x0009e2fe ldrd r7, r4, [sp, 0x5c] | __asm ("ldrd r7, r4, [var_60h]");
0x0009e302 ldr.w r8, [sp, 0x74] | r8 = var_74h;
0x0009e306 ldr.w sl, [sp, 0x88] | sl = var_88h;
| label_185:
0x0009e30a mov r2, r6 | r2 = r6;
0x0009e30c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009e30e movs r1, 2 | r1 = 2;
0x0009e310 bl 0x41f38 | fcn_00041f38 (r0, r1, r2, r3, r4, r5, r6);
0x0009e314 cmp r4, 0 |
0x0009e316 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
| if (r4 < 0) {
0x0009e31a bge 0x9e31e |
0x0009e31c subs r4, r2, 1 | r4 = r2 - 1;
| }
0x0009e31e ldr.w r3, [sb] | r3 = *(sb);
0x0009e322 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0009e326 cbnz r3, 0x9e358 | goto label_187;
| }
0x0009e328 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0009e32c add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0009e330 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
| do {
0x0009e334 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009e336 movs r3, 1 | r3 = 1;
0x0009e338 str r3, [sp, 0x9c] | var_9ch = r3;
0x0009e33a b.w 0x9d910 | goto label_38;
| label_166:
0x0009e33e mov r1, sb | r1 = sb;
0x0009e340 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0009e344 b.w 0x9da70 | goto label_41;
| label_123:
0x0009e348 movs r3, 0 | r3 = 0;
0x0009e34a str r3, [sp, 0x8c] | var_8ch = r3;
0x0009e34c b.w 0x9d5a2 | goto label_69;
| label_183:
0x0009e350 ldr r3, [pc, 0x12c] |
0x0009e352 add r3, pc | r3 = 0x13c7d6;
0x0009e354 adds r3, 4 | r3 += 4;
0x0009e356 b 0x9e1e8 | goto label_70;
| label_187:
0x0009e358 ldr r3, [pc, 0x128] |
0x0009e35a add r3, pc | r3 = 0x13c7e2;
0x0009e35c adds r3, 4 | r3 += 4;
0x0009e35e b 0x9e334 |
| } while (1);
| label_125:
0x0009e360 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0009e362 movs r4, 1 | r4 = 1;
0x0009e364 ldr r1, [sp, 0x11c] | r1 = *(arg_11ch);
0x0009e366 movs r5, 0 | r5 = 0;
0x0009e368 ldr r2, [sp, 0xac] | r2 = var_ach;
0x0009e36a ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0009e36c cmp r3, 0 |
0x0009e36e it eq |
| if (r3 != 0) {
0x0009e370 moveq r3, r0 | r3 = r0;
| }
0x0009e372 strb r4, [r3, 0x14] | *((r3 + 0x14)) = r4;
0x0009e374 mov.w r3, -1 | r3 = -1;
0x0009e378 str r1, [sp, 4] | var_4h = r1;
0x0009e37a ldr r1, [sp, 0x118] | r1 = *(arg_118h);
0x0009e37c str r3, [sp, 0x18] | var_18h = r3;
0x0009e37e movs r3, 5 | r3 = 5;
0x0009e380 str r3, [sp, 0x10] | var_10h = r3;
0x0009e382 str r1, [sp] | *(sp) = r1;
0x0009e384 mov r1, sl | r1 = sl;
0x0009e386 ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009e388 str r4, [sp, 0x14] | var_14h = r4;
0x0009e38a str r4, [sp, 8] | var_8h = r4;
0x0009e38c str r5, [sp, 0xc] | var_ch = r5;
0x0009e38e bl 0x9cbf8 | fcn_0009cbf8 (r0, r1, r2, r3, r4, r5, r6);
0x0009e392 ldr r2, [sp, 0x94] | r2 = var_94h;
0x0009e394 mov r3, r4 | r3 = r4;
0x0009e396 movs r1, 0x56 | r1 = 0x56;
0x0009e398 mov r0, sb | r0 = sb;
0x0009e39a str r5, [sp] | *(sp) = r5;
0x0009e39c str r4, [sp, 0xa0] | var_a0h = r4;
0x0009e39e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e3a2 str r4, [sp, 0x9c] | var_9ch = r4;
0x0009e3a4 b 0x9e0d6 | goto label_71;
| label_169:
0x0009e3a6 ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0009e3aa cmp r3, 0 |
| if (r3 != 0) {
0x0009e3ac bne.w 0x9deec | goto label_72;
| }
0x0009e3b0 b.w 0x9d4fe | goto label_50;
| label_182:
0x0009e3b4 movs r3, 0 | r3 = 0;
0x0009e3b6 movs r4, 6 | r4 = 6;
0x0009e3b8 str r3, [sp, 0x90] | var_90h = r3;
0x0009e3ba str r3, [sp, 0x8c] | var_8ch = r3;
0x0009e3bc b 0x9e158 | goto label_73;
| label_172:
0x0009e3be movs r4, 4 | r4 = 4;
0x0009e3c0 str r3, [sp, 0x90] | var_90h = r3;
0x0009e3c2 str r3, [sp, 0x8c] | var_8ch = r3;
0x0009e3c4 b 0x9e158 | goto label_73;
| label_170:
0x0009e3c6 str r3, [sp] | *(sp) = r3;
0x0009e3c8 movs r1, 0x35 | r1 = 0x35;
0x0009e3ca ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0009e3cc mov r0, sb | r0 = sb;
0x0009e3ce ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x0009e3d0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e3d4 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0009e3d8 cmp r3, 0 |
| if (r3 <= 0) {
0x0009e3da ble.w 0x9df1e | goto label_74;
| }
0x0009e3de ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0009e3e2 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009e3e6 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0009e3ea movs r3, 0x90 | r3 = 0x90;
0x0009e3ec strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
0x0009e3f0 b 0x9df1e | goto label_74;
| label_175:
0x0009e3f2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009e3f4 ldr r3, [r3] | r3 = *(r3);
0x0009e3f6 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0009e3f8 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0009e3fa cmp r3, 0 |
| if (r3 == 0) {
0x0009e3fc beq.w 0x9dae2 | goto label_57;
| }
0x0009e400 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0009e402 cmp r3, 0 |
| if (r3 != 0) {
0x0009e404 bne.w 0x9dfac | goto label_75;
| }
0x0009e408 b.w 0x9dae2 | goto label_57;
| label_124:
0x0009e40c movs r3, 0 | r3 = 0;
0x0009e40e movs r1, 8 | r1 = 8;
0x0009e410 mov r2, r3 | r2 = r3;
0x0009e412 str r3, [sp] | *(sp) = r3;
0x0009e414 mov r0, sb | r0 = sb;
0x0009e416 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x0009e41a ldr r1, [pc, 0x6c] |
0x0009e41c adds r3, r0, 1 | r3 = r0 + 1;
0x0009e41e mov r0, sb | r0 = sb;
0x0009e420 str r3, [sp, 0x8c] | var_8ch = r3;
0x0009e422 add r1, pc | r1 = 0x13c8b0;
0x0009e424 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x0009e428 b.w 0x9d5a2 | goto label_69;
| label_184:
0x0009e42c mov r1, sb | r1 = sb;
0x0009e42e bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x0009e432 b 0x9e23e | goto label_76;
| label_179:
0x0009e434 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009e436 movs r4, 2 | r4 = 2;
0x0009e438 mov fp, r3 |
0x0009e43a str r3, [sp, 0x90] | var_90h = r3;
0x0009e43c str r3, [sp, 0x8c] | var_8ch = r3;
0x0009e43e b 0x9e158 | goto label_73;
| label_156:
0x0009e440 blx 0x6430 | fcn_00006430 ();
| label_178:
0x0009e444 movs r4, 2 | r4 = 2;
0x0009e446 b 0x9e0c6 | goto label_77;
| label_80:
0x0009e448 movs r3, 0 | r3 = 0;
0x0009e44a ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0009e44c udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x9ffa4 */
| #include <stdint.h>
|
; (fcn) fcn.0009ffa4 () | void fcn_0009ffa4 (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| arithmetic x;
| int32_t var_7ch_2;
| int32_t var_84h;
| int32_t var_84h_2;
| int32_t var_8ch;
| int32_t var_8ch_2;
| int16_t var_94h;
| int32_t var_94h_2;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0009ffa4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009ffa8 mov r6, r2 | r6 = r2;
0x0009ffaa ldr.w r2, [pc, 0x990] |
0x0009ffae sub sp, 0xac |
0x0009ffb0 ldr.w r3, [pc, 0x98c] | r3 = *(0xa0940);
0x0009ffb4 add r2, pc | r2 = 0x1408f6;
0x0009ffb6 ldr.w sl, [r0, 0x24] | sl = *((r0 + 0x24));
0x0009ffba ldr r7, [r0] | r7 = *(r0);
0x0009ffbc ldr r3, [r2, r3] |
0x0009ffbe ldr r3, [r3] | r3 = imp.atan;
0x0009ffc0 str r3, [sp, 0xa4] | var_a4h = r3;
0x0009ffc2 mov.w r3, 0 | r3 = 0;
0x0009ffc6 movs r3, 0 | r3 = 0;
0x0009ffc8 str r3, [sp, 0x78] | var_78h = r3;
0x0009ffca strd r3, r3, [sp, 0x6c] | __asm ("strd r3, r3, [var_6ch]");
0x0009ffce str r3, [sp, 0x74] | var_74h = r3;
0x0009ffd0 cmp.w sl, 0 |
| if (sl == 0) {
0x0009ffd4 beq 0xa0006 | goto label_35;
| }
0x0009ffd6 mov r0, r7 | r0 = r7;
0x0009ffd8 bl 0x30a7c | fcn_00030a7c (r0, r1);
| if (r6 == 0) {
0x0009ffdc cbz r6, 0x9ffe6 | goto label_0;
| }
0x0009ffde mov r1, r6 | r1 = r6;
0x0009ffe0 mov r0, r7 | r0 = r7;
0x0009ffe2 bl 0x30c30 | fcn_00030c30 (r0, r1);
| do {
| label_0:
0x0009ffe6 ldr.w r2, [pc, 0x95c] |
0x0009ffea ldr.w r3, [pc, 0x954] | r3 = *(0xa0942);
0x0009ffee add r2, pc | r2 = 0x140938;
0x0009fff0 ldr r3, [r2, r3] | r3 = imp.atan;
0x0009fff2 ldr r2, [r3] | r2 = imp.atan;
0x0009fff4 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x0009fff6 eors r2, r3 | r2 ^= r3;
0x0009fff8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009fffc bne.w 0xa0932 | goto label_36;
| }
0x000a0000 add sp, 0xac |
0x000a0002 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000a0004 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| label_35:
0x000a0006 mov r4, r0 | r4 = r0;
0x000a0008 mov fp, r1 |
0x000a000a bl 0x9975c | r0 = fcn_0009975c (r0, r1);
0x000a000e mov r5, r0 | r5 = r0;
0x000a0010 cmp r0, 0 |
| if (r0 == 0) {
0x000a0012 beq.w 0xa0522 | goto label_37;
| }
0x000a0016 ldr r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x000a0018 cmp r3, 0 |
| if (r3 == 0) {
0x000a001a beq.w 0xa0526 | goto label_38;
| }
| label_4:
0x000a001e ldrb.w r3, [r4, 0x97] | r3 = *((r4 + 0x97));
0x000a0022 cmp r3, 0 |
| if (r3 != 0) {
0x000a0024 bne.w 0xa053e | goto label_39;
| }
0x000a0028 str r3, [sp] | *(sp) = r3;
0x000a002a movs r2, 0x80 | r2 = 0x80;
0x000a002c mov r1, r5 | r1 = r5;
0x000a002e mov r0, r4 | r0 = r4;
0x000a0030 bl 0x45008 | fcn_00045008 (r0, r1, r2, r3, r4);
0x000a0034 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000a0038 str r0, [sp, 0x28] | var_28h = r0;
0x000a003a str r3, [sp, 0x24] | var_24h = r3;
0x000a003c cmp r0, 0 |
| if (r0 == 0) {
0x000a003e beq.w 0xa090a | goto label_40;
| }
0x000a0042 mov.w sl, 1 | sl = 1;
| label_5:
0x000a0046 mov r1, r5 | r1 = r5;
0x000a0048 mov r0, r4 | r0 = r4;
0x000a004a bl 0x6340c | r0 = fcn_0006340c (r0, r1);
| if (r0 == 0) {
0x000a004e cbz r0, 0xa0080 | goto label_41;
| }
| label_1:
0x000a0050 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000a0052 movs r5, 0 | r5 = 0;
| if (r3 != 0) {
| label_3:
0x000a0054 cbz r3, 0xa0060 |
0x000a0056 ldr r2, [sp, 0x74] | r2 = var_74h;
0x000a0058 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x000a005c movs r3, 0 | r3 = 0;
0x000a005e str r3, [sp, 0x78] | var_78h = r3;
| }
0x000a0060 mov r1, fp | r1 = fp;
0x000a0062 mov r0, r7 | r0 = r7;
0x000a0064 bl 0x30a7c | fcn_00030a7c (r0, r1);
| if (r6 != 0) {
0x000a0068 cbz r6, 0xa0072 |
0x000a006a mov r1, r6 | r1 = r6;
0x000a006c mov r0, r7 | r0 = r7;
0x000a006e bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x000a0072 cmp r5, 0 |
0x000a0074 beq 0x9ffe6 |
| } while (r5 == 0);
0x000a0076 mov r1, r5 | r1 = r5;
0x000a0078 mov r0, r7 | r0 = r7;
0x000a007a bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000a007e b 0x9ffe6 | goto label_0;
| label_41:
0x000a0080 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a0082 mov r1, r5 | r1 = r5;
0x000a0084 mov r0, r4 | r0 = r4;
0x000a0086 subs r2, r3, 0 | r2 = r3 - 0;
0x000a0088 it ne |
| if (r2 == r3) {
0x000a008a movne r2, 1 | r2 = 1;
| }
0x000a008c bl 0x45110 | r0 = fcn_00045110 (r0, r1, r2);
0x000a0090 mov sb, r0 | sb = r0;
0x000a0092 cmp r0, 0 |
| if (r0 != 0) {
0x000a0094 bne 0xa0050 | goto label_1;
| }
0x000a0096 ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x000a0098 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000a009a cmp r0, 0 |
| if (r0 == 0) {
0x000a009c beq.w 0xa0916 | goto label_42;
| }
0x000a00a0 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000a00a2 cmp r0, r3 |
| if (r0 == r3) {
0x000a00a4 beq.w 0xa05f0 | goto label_43;
| }
0x000a00a8 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
0x000a00ac mov r8, sb | r8 = sb;
| do {
0x000a00ae mov r2, r3 | r2 = r3;
0x000a00b0 add.w r8, r8, 1 | r8++;
0x000a00b4 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x000a00b6 adds r3, 0x10 | r3 += 0x10;
0x000a00b8 cmp r0, r1 |
0x000a00ba bne 0xa00ae |
| } while (r0 != r1);
0x000a00bc lsl.w r3, r8, 4 | r3 = r8 << 4;
0x000a00c0 str r3, [sp, 0x44] | var_44h = r3;
| label_13:
0x000a00c2 ldr r3, [r2] | r3 = *(r2);
0x000a00c4 movs r1, 9 | r1 = 9;
0x000a00c6 ldr r2, [r5] | r2 = *(r5);
0x000a00c8 mov r0, r4 | r0 = r4;
0x000a00ca str r3, [sp] | *(sp) = r3;
0x000a00cc movs r3, 0 | r3 = 0;
0x000a00ce bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000a00d2 cmp r0, 1 |
0x000a00d4 str r0, [sp, 0x38] | var_38h = r0;
| if (r0 == 1) {
0x000a00d6 beq 0xa0050 | goto label_1;
| }
0x000a00d8 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x000a00da ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000a00dc adds r1, r2, 1 | r1 = r2 + 1;
0x000a00de str r2, [sp, 0x30] | var_30h = r2;
0x000a00e0 str r1, [r4, 0x28] | *((r4 + 0x28)) = r1;
0x000a00e2 str r1, [sp, 0x3c] | var_3ch = r1;
0x000a00e4 str.w r2, [fp, 0x30] | __asm ("str.w r2, [arg_30h]");
| if (r3 == 0) {
0x000a00e8 cbz r3, 0xa00fe | goto label_44;
| }
| do {
0x000a00ea ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a00ec mov r2, sb | r2 = sb;
0x000a00ee add.w sb, sb, 1 | sb++;
0x000a00f2 cmp r3, 0 |
0x000a00f4 bne 0xa00ea |
| } while (r3 != 0);
0x000a00f6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a00f8 adds r3, 2 | r3 += 2;
0x000a00fa add r3, r2 | r3 += r2;
0x000a00fc str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| label_44:
0x000a00fe ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a0100 cmp r3, 2 |
| if (r3 == 2) {
0x000a0102 bne 0xa0112 |
0x000a0104 ldr r2, [r5] | r2 = *(r5);
0x000a0106 ldr.w r3, [r4, 0xf8] | r3 = *((r4 + 0xf8));
0x000a010a str r4, [sp, 0x78] | var_78h = r4;
0x000a010c str.w r2, [r4, 0xf8] | __asm ("str.w r2, [r4, 0xf8]");
0x000a0110 str r3, [sp, 0x74] | var_74h = r3;
| }
0x000a0112 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000a0114 str r3, [sp, 0x2c] | var_2ch = r3;
0x000a0116 cmp r3, 0 |
| if (r3 == 0) {
0x000a0118 beq.w 0xa056a | goto label_45;
| }
| label_7:
0x000a011c ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x000a011e cmp r3, 0 |
| if (r3 == 0) {
0x000a0120 beq.w 0xa055a | goto label_46;
| }
| label_6:
0x000a0124 mov r2, r8 | r2 = r8;
0x000a0126 mov r1, sl | r1 = sl;
0x000a0128 mov r0, r4 | r0 = r4;
0x000a012a bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000a012e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a0130 cmp r3, 2 |
| if (r3 == 2) {
0x000a0132 beq.w 0xa05b2 | goto label_47;
| }
| label_10:
0x000a0136 movs r2, 0 | r2 = 0;
0x000a0138 mov r1, r6 | r1 = r6;
0x000a013a add r0, sp, 0x7c | r0 += x;
0x000a013c strd r4, fp, [sp, 0x7c] | __asm ("strd r4, fp, [var_0hx7c]");
0x000a0140 strd r2, r2, [sp, 0x84] | __asm ("strd r2, r2, [var_84h]");
0x000a0144 strd r2, r2, [sp, 0x8c] | __asm ("strd r2, r2, [var_8ch]");
0x000a0148 strd r2, r2, [sp, 0x94] | __asm ("strd r2, r2, [var_94h]");
0x000a014c bl 0x48a9c | fcn_00048a9c (r0, r1);
0x000a0150 str r0, [sp, 0x34] | var_34h = r0;
0x000a0152 cmp r0, 0 |
| if (r0 != 0) {
0x000a0154 bne.w 0xa0050 | goto label_1;
| }
0x000a0158 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x000a015a lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x000a015c bpl 0xa0182 |
0x000a015e ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
| if (r3 == 0) {
0x000a0160 cbnz r3, 0xa0182 |
0x000a0162 ldr r3, [r4, 0x78] | r3 = *((r4 + 0x78));
| if (r3 != 0) {
0x000a0164 cbnz r3, 0xa0182 | goto label_48;
| }
0x000a0166 ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
| if (r3 != 0) {
0x000a016a cbnz r3, 0xa0182 | goto label_48;
| }
0x000a016c ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a016e movs r1, 0x47 | r1 = 0x47;
0x000a0170 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0172 str r2, [sp] | *(sp) = r2;
0x000a0174 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000a0176 adds r3, 1 | r3++;
0x000a0178 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000a017a str r3, [sp, 0x40] | var_40h = r3;
0x000a017c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a0180 b 0xa0186 |
| }
| } else {
| label_48:
0x000a0182 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a0184 str r3, [sp, 0x40] | var_40h = r3;
| }
0x000a0186 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a0188 orrs r3, r6 | r3 |= r6;
| if (r3 != r6) {
0x000a018a bne 0xa0262 | goto label_49;
| }
0x000a018c cmp.w sl, 0 |
| if (sl != 0) {
0x000a0190 bne.w 0xa05ea | goto label_50;
| }
0x000a0194 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000a0198 cmp r3, 1 |
| if (r3 == 1) {
0x000a019a beq.w 0xa076a | goto label_51;
| }
0x000a019e cmp.w r8, 1 |
| if (r8 != 1) {
0x000a01a2 beq 0xa01c2 |
0x000a01a4 ldr r3, [r4] | r3 = *(r4);
0x000a01a6 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000a01a8 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a01aa add r3, r2 | r3 += r2;
0x000a01ac ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a01ae ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000a01b0 cbz r3, 0xa01c2 | goto label_52;
| }
0x000a01b2 ldr r3, [r5] | r3 = *(r5);
0x000a01b4 mov r1, r8 | r1 = r8;
0x000a01b6 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000a01b8 mov r0, r4 | r0 = r4;
0x000a01ba str r3, [sp] | *(sp) = r3;
0x000a01bc movs r3, 1 | r3 = 1;
0x000a01be bl 0x42ffc | fcn_00042ffc (r0, r1, r2, r3, r4);
| }
| label_52:
0x000a01c2 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000a01c4 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
| if (r1 >= r3) {
0x000a01c6 bmi 0xa01ec |
0x000a01c8 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000a01ca mov.w r3, -1 | r3 = -1;
0x000a01ce ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000a01d0 str r3, [sp, 8] | var_8h = r3;
0x000a01d2 ldr r3, [r5] | r3 = *(r5);
0x000a01d4 cmp r1, 0 |
0x000a01d6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a01d8 str r3, [sp, 4] | var_4h = r3;
0x000a01da ite ne |
| if (r1 == 0) {
0x000a01dc movne r3, r1 | r3 = r1;
| }
| if (r1 != 0) {
0x000a01de moveq r3, -1 | r3 = -1;
| }
0x000a01e2 movs r1, 0x91 | r1 = 0x91;
0x000a01e4 str r3, [sp] | *(sp) = r3;
0x000a01e6 mov r3, r8 | r3 = r8;
0x000a01e8 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
| }
0x000a01ec ldr.w sb, [r5, 8] | sb = *((r5 + 8));
0x000a01f0 cmp.w sb, 0 |
| if (sb == 0) {
0x000a01f4 beq.w 0xa077e | goto label_53;
| }
0x000a01f8 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000a01fa mov.w sl, 0 | sl = 0;
0x000a01fe cmp r3, 0 |
0x000a0200 it eq |
| if (r3 != 0) {
0x000a0202 moveq r3, -1 | r3 = -1;
| }
0x000a0206 strd r3, r7, [sp, 0x24] | __asm ("strd r3, r7, [var_24h]");
0x000a020a mov r7, sb | r7 = sb;
0x000a020c ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x000a0210 b 0xa021a |
| while (r3 != 2) {
| label_2:
0x000a0212 ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x000a0214 cmp r7, 0 |
| if (r7 == 0) {
0x000a0216 beq.w 0xa077c | goto label_54;
| }
0x000a021a ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x000a021c mov r3, r8 | r3 = r8;
0x000a021e movs r1, 0x91 | r1 = 0x91;
0x000a0220 mov r0, sb | r0 = sb;
0x000a0222 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a0226 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a022a ldrb.w r3, [r7, 0x37] | r3 = *((r7 + 0x37));
0x000a022e and r3, r3, 3 | r3 &= 3;
0x000a0232 cmp r3, 2 |
0x000a0234 bne 0xa0212 |
| }
0x000a0236 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000a0238 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 >= r3) {
0x000a023a bpl 0xa0212 | goto label_2;
| }
0x000a023c ldr.w r3, [sb] | r3 = *(sb);
0x000a0240 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x000a0244 invalid |
0x000a0246 adds r0, 0x6c | r0 += 0x6c;
0x000a0248 cmp r2, 0 |
| if (r2 != 0) {
0x000a024a bne.w 0xa0836 | goto label_55;
| }
0x000a024e subs r3, 1 | r3--;
0x000a0250 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000a0254 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x000a0258 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
| label_28:
0x000a025c ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a025e str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000a0260 b 0xa0212 | goto label_2;
| label_49:
0x000a0262 ldr r3, [sp, 0x94] | r3 = var_94h;
0x000a0264 and r3, r3, 0x40 | r3 &= 0x40;
0x000a0268 orrs.w r3, r3, sl | r3 |= sl;
0x000a026c ite eq |
| if (r3 != r3) {
0x000a026e moveq r3, 1 | r3 = 1;
| }
| if (r3 == r3) {
0x000a0270 movne r3, 0 | r3 = 0;
| }
0x000a0272 lsls r3, r3, 3 | r3 <<= 3;
0x000a0274 orr sl, r3, 0x14 | sl = r3 | 0x14;
| label_12:
0x000a0278 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000a027a ands r2, r2, 0x80 | r2 &= 0x80;
| if (r2 == r2) {
0x000a027e beq.w 0xa05c6 | goto label_56;
| }
0x000a0282 ldr.w r8, [r5, 8] | r8 = *((r5 + 8));
0x000a0286 mov r2, r8 | r2 = r8;
0x000a0288 cmp.w r8, 0 |
| if (r8 != 0) {
0x000a028c bne 0xa0298 | goto label_57;
| }
0x000a028e b 0xa0936 | goto label_58;
| do {
0x000a0290 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000a0292 cmp r2, 0 |
| if (r2 == 0) {
0x000a0294 beq.w 0xa0936 | goto label_58;
| }
| label_57:
0x000a0298 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000a029c and r3, r3, 3 | r3 &= 3;
0x000a02a0 cmp r3, 2 |
0x000a02a2 bne 0xa0290 |
| } while (r3 != 2);
0x000a02a4 ldrd r0, r3, [r4, 0x28] | __asm ("ldrd r0, r3, [r4, 0x28]");
0x000a02a8 mov r8, r2 | r8 = r2;
0x000a02aa ldrsh.w r1, [r2, 0x32] | r1 = *((r2 + 0x32));
0x000a02ae movs r2, 0 | r2 = 0;
0x000a02b0 str r2, [sp] | *(sp) = r2;
0x000a02b2 str r2, [sp, 0x60] | var_60h = r2;
0x000a02b4 adds r2, r3, r1 | r2 = r3 + r1;
0x000a02b6 adds r3, 1 | r3++;
0x000a02b8 str r3, [sp, 0x48] | var_48h = r3;
0x000a02ba adds r3, r0, 1 | r3 = r0 + 1;
0x000a02bc str r1, [sp, 0x44] | var_44h = r1;
0x000a02be str r0, [sp, 0x50] | var_50h = r0;
0x000a02c0 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x000a02c2 mov r2, r0 | r2 = r0;
0x000a02c4 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x000a02c6 mov r3, r1 | r3 = r1;
0x000a02c8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a02ca movs r1, 0x76 | r1 = 0x76;
0x000a02cc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a02d0 mov r1, r8 | r1 = r8;
0x000a02d2 str r0, [sp, 0x64] | var_64h = r0;
0x000a02d4 mov r0, r4 | r0 = r4;
0x000a02d6 bl 0x45f30 | fcn_00045f30 (r0);
| label_11:
0x000a02da ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a02dc mov r2, r6 | r2 = r6;
0x000a02de mov r1, fp | r1 = fp;
0x000a02e0 mov r0, r4 | r0 = r4;
0x000a02e2 strd sl, r3, [sp, 8] | __asm ("strd sl, r3, [var_8h]");
0x000a02e6 movs r3, 0 | r3 = 0;
0x000a02e8 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x000a02ec bl 0x7ee90 | fcn_0007ee90 (r0, r1, r2, r3, r4, r5, r6);
0x000a02f0 str r0, [sp, 0x3c] | var_3ch = r0;
0x000a02f2 cmp r0, 0 |
| if (r0 == 0) {
0x000a02f4 beq.w 0xa0050 | goto label_1;
| }
0x000a02f8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a02fa ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x000a02fc ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x000a02fe ldrb.w r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x000a0302 mov r2, r3 | r2 = r3;
0x000a0304 str r3, [sp, 0x38] | var_38h = r3;
0x000a0306 cmp r2, 1 |
0x000a0308 add r3, sp, 0x9c | r3 += var_9ch;
0x000a030a stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
| if (r2 != 1) {
0x000a030c beq 0xa031a |
0x000a030e ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000a0310 movs r2, 1 | r2 = 1;
0x000a0312 cmp r3, 0 |
0x000a0314 it eq |
| if (r3 != 0) {
0x000a0316 moveq r3, r4 | r3 = r4;
| }
0x000a0318 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| }
0x000a031a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a031c ldrb.w r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x000a0320 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x000a0322 bmi.w 0xa0606 | goto label_59;
| }
| label_15:
0x000a0326 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000a0328 cmp r3, 0 |
| if (r3 != 0) {
0x000a032a bne.w 0xa05a0 | goto label_60;
| }
| label_9:
0x000a032e cmp.w r8, 0 |
| if (r8 == 0) {
0x000a0332 beq.w 0xa07b2 | goto label_61;
| }
0x000a0336 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a0338 cmp r3, 0 |
| if (r3 <= 0) {
0x000a033a ble 0xa037a | goto label_62;
| }
0x000a033c str r7, [sp, 0x4c] | var_4ch = r7;
0x000a033e mov.w sl, 0 | sl = 0;
0x000a0342 str r4, [sp, 0x58] | var_58h = r4;
0x000a0344 str r6, [sp, 0x5c] | var_5ch = r6;
0x000a0346 ldr r7, [sp, 0x48] | r7 = var_48h;
0x000a0348 ldr r4, [sp, 0x30] | r4 = var_30h;
0x000a034a ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x000a034c str.w sb, [sp, 0x54] | __asm ("str.w sb, [var_54h]");
0x000a0350 mov sb, r3 | sb = r3;
| do {
0x000a0352 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000a0356 add.w r2, r7, sl | r2 = r7 + sl;
0x000a035a mov r1, r5 | r1 = r5;
0x000a035c mov r0, r6 | r0 = r6;
0x000a035e ldrsh.w r3, [r3, sl, lsl 1] | offset_0 = sl << 1;
| r3 = *((r3 + offset_0));
0x000a0362 add.w sl, sl, 1 | sl++;
0x000a0366 str r2, [sp] | *(sp) = r2;
0x000a0368 mov r2, r4 | r2 = r4;
0x000a036a bl 0x8771c | fcn_0008771c (r0, r1, r2, r3, r4);
0x000a036e cmp sl, sb |
0x000a0370 bne 0xa0352 |
| } while (sl != sb);
0x000a0372 ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x000a0374 ldrd sb, r4, [sp, 0x54] | __asm ("ldrd sb, r4, [var_54h]");
0x000a0378 ldr r6, [sp, 0x5c] | r6 = var_5ch;
| label_62:
0x000a037a ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a037c cmp r3, 0 |
| if (r3 != 0) {
0x000a037e bne.w 0xa061a | goto label_63;
| }
0x000a0382 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000a0384 mov r1, r8 | r1 = r8;
0x000a0386 ldr r0, [r4] | r0 = *(r4);
0x000a0388 add.w sl, r3, 1 | sl = r3 + 1;
0x000a038c str.w sl, [r4, 0x2c] | __asm ("str.w sl, [r4, 0x2c]");
0x000a0390 bl 0x43864 | fcn_00043864 (r0, r1);
0x000a0394 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a0396 movs r1, 0x61 | r1 = 0x61;
0x000a0398 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x000a039c ldr r2, [sp, 0x48] | r2 = var_48h;
0x000a039e str r0, [sp, 4] | var_4h = r0;
0x000a03a0 str r3, [sp, 8] | var_8h = r3;
0x000a03a2 mov r0, sb | r0 = sb;
0x000a03a4 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a03a8 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x000a03ac ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a03ae movs r1, 0x8a | r1 = 0x8a;
0x000a03b0 ldr r2, [sp, 0x50] | r2 = var_50h;
0x000a03b2 mov r0, sb | r0 = sb;
0x000a03b4 str r3, [sp, 4] | var_4h = r3;
0x000a03b6 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000a03b8 str r3, [sp] | *(sp) = r3;
0x000a03ba mov r3, sl | r3 = sl;
0x000a03bc bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x000a03c0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a03c2 str r3, [sp, 0x44] | var_44h = r3;
| label_24:
0x000a03c4 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a03c6 bl 0x8248c | fcn_0008248c (r0, r1);
0x000a03ca ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a03cc cmp r3, 2 |
0x000a03ce itt eq |
| if (r3 != 2) {
0x000a03d0 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 2) {
0x000a03d2 streq r3, [sp, 0x4c] | var_4ch = r3;
| }
| if (r3 != 2) {
0x000a03d4 beq 0xa03fc |
0x000a03d6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a03d8 movs r2, 0x71 | r2 = 0x71;
0x000a03da mov r1, r5 | r1 = r5;
0x000a03dc mov r0, r4 | r0 = r4;
0x000a03de str r3, [sp] | *(sp) = r3;
0x000a03e0 movs r3, 0 | r3 = 0;
0x000a03e2 mov sb, r3 | sb = r3;
0x000a03e4 str r3, [sp, 4] | var_4h = r3;
0x000a03e6 add r3, sp, 0x70 | r3 += var_70h;
0x000a03e8 str r3, [sp, 0xc] | var_ch = r3;
0x000a03ea add r3, sp, 0x6c | r3 += var_6ch;
0x000a03ec str r3, [sp, 8] | var_8h = r3;
0x000a03ee movs r3, 8 | r3 = 8;
0x000a03f0 bl 0x4f62c | fcn_0004f62c (r0, r1, r2, r3, r4, r5, r6);
0x000a03f4 str.w sb, [sp, 0x4c] | __asm ("str.w sb, [var_4ch]");
| label_16:
0x000a03f8 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
| }
0x000a03fc cmp.w r8, 0 |
| if (r8 == 0) {
0x000a0400 beq.w 0xa0810 | goto label_64;
| }
0x000a0404 mov.w sb, 0 | sb = 0;
0x000a0408 ldr r2, [sp, 0x50] | r2 = var_50h;
0x000a040a movs r1, 0x23 | r1 = 0x23;
0x000a040c mov r3, sb | r3 = sb;
0x000a040e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0410 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a0414 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a0418 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000a041c str r0, [sp, 0x24] | var_24h = r0;
0x000a041e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0420 cmp r3, 1 |
0x000a0422 ittet eq |
| if (r3 != 1) {
0x000a0424 ldreq r2, [sp, 0x50] | r2 = var_50h;
| }
| if (r3 != 1) {
0x000a0426 moveq r3, sb | r3 = sb;
| }
| if (r3 == 1) {
0x000a0428 ldrne r2, [sp, 0x50] | r2 = var_50h;
| }
| if (r3 != 1) {
0x000a042a moveq r1, 0x5e | r1 = 0x5e;
| }
0x000a042c ittet ne |
| if (r3 == 1) {
0x000a042e movne r3, sl | r3 = sl;
| }
| if (r3 == 1) {
0x000a0430 movne r1, 0x86 | r1 = 0x86;
| }
| if (r3 != 1) {
0x000a0432 streq sl, [sp] | *(sp) = sl;
| }
| if (r3 != 1) {
0x000a0436 str.w sb, [sp] | __asm ("str.w sb, [sp]");
| }
0x000a043a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_27:
0x000a043e ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000a0442 cmp r3, 1 |
| if (r3 != 1) {
0x000a0444 bne.w 0xa075e | goto label_65;
| }
| label_26:
0x000a0448 ldr.w sb, [r5, 0x34] | sb = *((r5 + 0x34));
0x000a044c mov r3, sb | r3 = sb;
0x000a044e cmp.w sb, 0 |
| if (sb != 0) {
0x000a0452 bne 0xa045a | goto label_66;
| }
0x000a0454 b 0xa0462 | goto label_67;
| do {
0x000a0456 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
| if (r3 == 0) {
0x000a0458 cbz r3, 0xa0460 | goto label_68;
| }
| label_66:
0x000a045a ldr r2, [r3] | r2 = *(r3);
0x000a045c cmp r7, r2 |
0x000a045e bne 0xa0456 |
| } while (r7 != r2);
| label_68:
0x000a0460 mov sb, r3 | sb = r3;
| label_67:
0x000a0462 mov r1, r5 | r1 = r5;
0x000a0464 mov r0, r4 | r0 = r4;
0x000a0466 bl 0x3b720 | fcn_0003b720 (r0, r1);
0x000a046a ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x000a046c movs r3, 1 | r3 = 1;
0x000a046e cmp r2, 0 |
0x000a0470 it eq |
| if (r2 != 0) {
0x000a0472 moveq r2, r4 | r2 = r4;
| }
0x000a0474 strb r3, [r2, 0x15] | *((r2 + 0x15)) = r3;
0x000a0476 ldr r2, [sp, 0x38] | r2 = var_38h;
0x000a0478 cmp r2, r3 |
| if (r2 == r3) {
0x000a047a beq.w 0xa06fe | goto label_69;
| }
0x000a047e ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x000a0480 mvn r2, 0xa | r2 = ~0xa;
0x000a0484 str r2, [sp, 8] | var_8h = r2;
0x000a0486 movs r1, 7 | r1 = 7;
0x000a0488 movs r2, 0 | r2 = 0;
0x000a048a strd sl, sb, [sp] | __asm ("strd sl, sb, [sp]");
0x000a048e mov r0, r5 | r0 = r5;
0x000a0490 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x000a0494 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000a0496 cmp r3, 0 |
| if (r3 > 0) {
0x000a0498 ble 0xa04ac |
| label_19:
0x000a049a ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000a049c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000a04a0 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x000a04a2 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000a04a6 movs r3, 2 | r3 = 2;
0x000a04a8 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x000a04ac ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a04ae ldr.w sb, [sp, 0x34] | sb = var_34h;
0x000a04b2 str r3, [sp, 0x34] | var_34h = r3;
| label_17:
0x000a04b4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a04b6 cmp r3, 0 |
| if (r3 != 0) {
0x000a04b8 bne.w 0xa0738 | goto label_70;
| }
0x000a04bc cmp.w r8, 0 |
| if (r8 == 0) {
0x000a04c0 beq.w 0xa0782 | goto label_71;
| }
0x000a04c4 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x000a04c8 movs r1, 0x26 | r1 = 0x26;
0x000a04ca ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a04cc ldr r5, [sp, 0x34] | r5 = var_34h;
0x000a04ce ldr r2, [sp, 0x50] | r2 = var_50h;
0x000a04d0 mov r0, r8 | r0 = r8;
0x000a04d2 str r3, [sp] | *(sp) = r3;
0x000a04d4 adds r3, r5, 1 | r3 = r5 + 1;
0x000a04d6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a04da ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x000a04de cmp r5, 0 |
0x000a04e0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a04e2 mov r3, r8 | r3 = r8;
0x000a04e4 itt lt |
| if (r5 >= 0) {
0x000a04e6 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r5 < 0) {
0x000a04ea str r3, [sp, 0x34] | var_34h = r3;
| }
0x000a04ec ldr r3, [r0] | r3 = *(r0);
0x000a04ee ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a04f2 cmp r3, 0 |
| if (r3 == 0) {
0x000a04f4 beq.w 0xa06f0 | goto label_22;
| }
0x000a04f8 ldr.w r3, [pc, 0x44c] |
0x000a04fc add r3, pc | r3 = 0x140e48;
0x000a04fe adds r3, 4 | r3 += 4;
| label_18:
0x000a0500 ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000a0502 str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_20:
0x000a0504 ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
| if (r3 == 0) {
0x000a0506 cbnz r3, 0xa0510 |
0x000a0508 ldr r3, [r4, 0x78] | r3 = *((r4 + 0x78));
0x000a050a cmp r3, 0 |
| if (r3 == 0) {
0x000a050c beq.w 0xa07f6 | goto label_72;
| }
| }
| label_25:
0x000a0510 ldr r3, [sp, 0x40] | r3 = var_40h;
| if (r3 != 0) {
0x000a0512 cbz r3, 0xa0522 |
0x000a0514 ldr.w r2, [pc, 0x434] |
0x000a0518 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000a051a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a051c add r2, pc | r2 = 0x140e6c;
0x000a051e bl 0x41cf8 | fcn_00041cf8 (r0, r1, r2);
| }
| label_37:
0x000a0522 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000a0524 b 0xa0054 | goto label_3;
| label_38:
0x000a0526 ldr r3, [r4] | r3 = *(r4);
0x000a0528 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000a052a ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
| if (r2 == 0) {
0x000a052c cbz r2, 0xa0536 | goto label_73;
| }
0x000a052e ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x000a0530 cmp r2, 0 |
| if (r2 != 0) {
0x000a0532 bne.w 0xa001e | goto label_4;
| }
| label_73:
0x000a0536 ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
0x000a053a str r2, [sp, 0x24] | var_24h = r2;
0x000a053c b 0xa0546 | goto label_33;
| label_39:
0x000a053e ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000a0542 str r3, [sp, 0x24] | var_24h = r3;
0x000a0544 ldr r3, [r4] | r3 = *(r4);
| label_33:
0x000a0546 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x000a0548 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a054a clz r3, r3 | r3 &= r3;
0x000a054e lsrs r3, r3, 5 | r3 >>= 5;
0x000a0550 ands.w r3, r3, r2, lsr 14 | r3 &= (r2 >> 14);
| if (r3 != r3) {
0x000a0554 bne 0xa0580 | goto label_74;
| }
| label_8:
0x000a0556 str r3, [sp, 0x28] | var_28h = r3;
0x000a0558 b 0xa0046 | goto label_5;
| label_46:
0x000a055a ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000a055c ldrb.w r3, [r2, 0x96] | r3 = *((r2 + 0x96));
0x000a0560 orr r3, r3, 0x10 | r3 |= 0x10;
0x000a0564 strb.w r3, [r2, 0x96] | *((r2 + 0x96)) = r3;
0x000a0568 b 0xa0124 | goto label_6;
| label_45:
0x000a056a ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000a056c cmp r3, 0 |
| if (r3 == 0) {
0x000a056e beq 0xa05f8 | goto label_75;
| }
| label_14:
0x000a0570 mov r0, r4 | r0 = r4;
0x000a0572 bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x000a0576 str r0, [sp, 0x2c] | var_2ch = r0;
0x000a0578 cmp r0, 0 |
| if (r0 != 0) {
0x000a057a bne.w 0xa011c | goto label_7;
| }
0x000a057e b 0xa0050 | goto label_1;
| label_74:
0x000a0580 ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x000a0582 movs r2, 0 | r2 = 0;
0x000a0584 ldr r1, [r5] | r1 = *(r5);
0x000a0586 adds r0, 0x38 | r0 += 0x38;
0x000a0588 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x000a058c ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000a058e str r3, [sp, 0x28] | var_28h = r3;
0x000a0590 cmp r3, 0 |
| if (r3 == 0) {
0x000a0592 beq.w 0xa0824 | goto label_76;
| }
0x000a0596 movs r3, 0 | r3 = 0;
0x000a0598 mov.w sl, 1 | sl = 1;
0x000a059c str r3, [sp, 0x24] | var_24h = r3;
0x000a059e b 0xa0556 | goto label_8;
| label_60:
0x000a05a0 movs r3, 0 | r3 = 0;
0x000a05a2 ldr r2, [sp, 0x40] | r2 = var_40h;
0x000a05a4 str r3, [sp] | *(sp) = r3;
0x000a05a6 movs r1, 0x56 | r1 = 0x56;
0x000a05a8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a05aa movs r3, 1 | r3 = 1;
0x000a05ac bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a05b0 b 0xa032e | goto label_9;
| label_47:
0x000a05b2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a05b4 mov r2, r6 | r2 = r6;
0x000a05b6 mov r1, r5 | r1 = r5;
0x000a05b8 mov r0, r4 | r0 = r4;
0x000a05ba bl 0x8eef0 | fcn_0008eef0 (r0, r1, r2, r3, r4, r5, r6);
0x000a05be ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a05c0 strd r3, r3, [sp, 0x6c] | __asm ("strd r3, r3, [var_6ch]");
0x000a05c4 b 0xa0136 | goto label_10;
| label_56:
0x000a05c6 str r2, [sp] | *(sp) = r2;
0x000a05c8 movs r1, 0x4b | r1 = 0x4b;
0x000a05ca ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000a05cc mov r8, r2 | r8 = r2;
0x000a05ce ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a05d0 str r2, [sp, 0x64] | var_64h = r2;
0x000a05d2 adds r3, 1 | r3++;
0x000a05d4 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000a05d6 str r3, [sp, 0x60] | var_60h = r3;
0x000a05d8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a05dc movs r2, 1 | r2 = 1;
0x000a05de str.w r8, [sp, 0x50] | __asm ("str.w r8, [var_50h]");
0x000a05e2 str.w r8, [sp, 0x48] | __asm ("str.w r8, [var_48h]");
0x000a05e6 str r2, [sp, 0x44] | var_44h = r2;
0x000a05e8 b 0xa02da | goto label_11;
| label_50:
0x000a05ea mov.w sl, 0x14 | sl = 0x14;
0x000a05ee b 0xa0278 | goto label_12;
| label_43:
0x000a05f0 mov r8, sb | r8 = sb;
0x000a05f2 str.w sb, [sp, 0x44] | __asm ("str.w sb, [var_44h]");
0x000a05f6 b 0xa00c2 | goto label_13;
| label_75:
0x000a05f8 ldr r3, [r4] | r3 = *(r4);
0x000a05fa ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000a05fc lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000a05fe itt pl |
| if (r3 < r3) {
0x000a0600 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000a0602 strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x000a0604 b 0xa0570 | goto label_14;
| label_59:
0x000a0606 movs r3, 0 | r3 = 0;
0x000a0608 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a060a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a060c movs r1, 0x8f | r1 = 0x8f;
0x000a060e str r3, [sp] | *(sp) = r3;
0x000a0610 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a0614 b 0xa0326 | goto label_15;
| label_23:
0x000a0616 str.w sl, [sp, 0x48] | __asm ("str.w sl, [var_48h]");
| label_63:
0x000a061a add.w r2, sb, 2 | r2 = sb + 2;
0x000a061e mov r0, r7 | r0 = r7;
0x000a0620 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a0622 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x000a0626 mov r3, r0 | r3 = r0;
0x000a0628 str r0, [sp, 0x4c] | var_4ch = r0;
0x000a062a cmp r0, 0 |
| if (r0 == 0) {
0x000a062c beq.w 0xa08fc | goto label_77;
| }
0x000a0630 add.w r2, sb, 1 | r2 = sb + 1;
0x000a0634 movs r1, 1 | r1 = 1;
0x000a0636 blx 0x62ec | fcn_000062ec ();
0x000a063a ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000a063c movs r2, 0 | r2 = 0;
0x000a063e add sb, r1 | sb += r1;
0x000a0640 strb.w r2, [sb, 1] | *((sb + 1)) = r2;
0x000a0644 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000a0646 cmp r3, r2 |
0x000a0648 ittt ge |
| if (r3 < r2) {
0x000a064a ldrge r0, [sp, 0x30] | r0 = var_30h;
| }
| if (r3 < r2) {
0x000a064c subge r3, r3, r0 | r3 -= r0;
| }
| if (r3 < r2) {
0x000a064e strbge r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x000a0650 ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x000a0652 cmp r3, 0 |
| if (r3 >= 0) {
0x000a0654 blt 0xa0660 |
0x000a0656 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a0658 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000a065a subs r3, r3, r2 | r3 -= r2;
0x000a065c movs r2, 0 | r2 = 0;
0x000a065e strb r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x000a0660 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000a0662 cmp r3, 0 |
| if (r3 != 0) {
0x000a0664 bne.w 0xa089c | goto label_78;
| }
| label_30:
0x000a0668 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000a066a add.w sb, r3, -1 | sb = r3 + -1;
0x000a066e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a0670 str.w sb, [r4, 0x38] | __asm ("str.w sb, [r4, 0x38]");
0x000a0674 cmp r3, 2 |
| if (r3 == 2) {
0x000a0676 beq.w 0xa0878 | goto label_32;
| }
0x000a067a ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a067c cmp r3, 2 |
| if (r3 == 2) {
0x000a067e beq.w 0xa083e | goto label_79;
| }
0x000a0682 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a0684 movs r2, 0x71 | r2 = 0x71;
0x000a0686 mov r1, r5 | r1 = r5;
0x000a0688 mov r0, r4 | r0 = r4;
0x000a068a str r3, [sp, 4] | var_4h = r3;
0x000a068c ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a068e str r3, [sp] | *(sp) = r3;
0x000a0690 add r3, sp, 0x70 | r3 += var_70h;
0x000a0692 str r3, [sp, 0xc] | var_ch = r3;
0x000a0694 add r3, sp, 0x6c | r3 += var_6ch;
0x000a0696 str r3, [sp, 8] | var_8h = r3;
0x000a0698 movs r3, 8 | r3 = 8;
0x000a069a bl 0x4f62c | fcn_0004f62c (r0, r1, r2, r3, r4, r5, r6);
0x000a069e ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a06a0 ldr.w sl, [sp, 0x48] | sl = var_48h;
0x000a06a4 cmp r3, 0 |
| if (r3 == 0) {
0x000a06a6 beq.w 0xa03f8 | goto label_16;
| }
| label_29:
0x000a06aa ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000a06ae cmp r3, 1 |
| if (r3 == 1) {
0x000a06b0 beq.w 0xa0806 | goto label_80;
| }
0x000a06b4 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a06b6 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a06b8 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000a06ba subs r2, r3, r2 | r2 = r3 - r2;
0x000a06bc ldrb r2, [r1, r2] | r2 = *((r1 + r2));
0x000a06be cmp r2, 0 |
| if (r2 != 0) {
0x000a06c0 bne.w 0xa087e | goto label_81;
| }
| label_21:
0x000a06c4 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000a06c6 mov r1, r5 | r1 = r5;
0x000a06c8 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000a06ca strd sl, r2, [sp, 4] | __asm ("strd sl, r2, [var_8h]");
0x000a06ce str r0, [sp, 0x14] | var_14h = r0;
0x000a06d0 ldrb r0, [r4, 0x12] | r0 = *((r4 + 0x12));
0x000a06d2 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a06d4 clz r0, r0 | r0 &= r0;
0x000a06d8 lsrs r0, r0, 5 | r0 >>= 5;
0x000a06da str r0, [sp, 0xc] | var_ch = r0;
0x000a06dc ldr r0, [sp, 0xa0] | r0 = var_a0h;
0x000a06de str r0, [sp, 0x18] | var_18h = r0;
0x000a06e0 ldr r0, [sp, 0x70] | r0 = var_70h;
0x000a06e2 str r0, [sp] | *(sp) = r0;
0x000a06e4 movs r0, 0xb | r0 = 0xb;
0x000a06e6 str r0, [sp, 0x10] | var_10h = r0;
0x000a06e8 mov r0, r4 | r0 = r4;
0x000a06ea bl 0x9cbf8 | fcn_0009cbf8 (r0, r1, r2, r3, r4, r5, r6);
0x000a06ee b 0xa04b4 | goto label_17;
| label_22:
0x000a06f0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a06f2 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x000a06f6 ldr r3, [r0, 0x68] | r3 = *((r0 + 0x68));
0x000a06f8 add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
0x000a06fc b 0xa0500 | goto label_18;
| label_69:
0x000a06fe movs r3, 0 | r3 = 0;
0x000a0700 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a0702 str r3, [sp] | *(sp) = r3;
0x000a0704 movs r1, 0x7a | r1 = 0x7a;
0x000a0706 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0708 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a070c ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000a070e cmp r3, 0 |
| if (r3 == 0) {
0x000a0710 beq.w 0xa092e | goto label_82;
| }
| label_34:
0x000a0714 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x000a0716 mvn r3, 0xa | r3 = ~0xa;
0x000a071a str r3, [sp, 8] | var_8h = r3;
0x000a071c movs r2, 0 | r2 = 0;
0x000a071e movs r3, 1 | r3 = 1;
0x000a0720 movs r1, 7 | r1 = 7;
0x000a0722 mov r0, r5 | r0 = r5;
0x000a0724 strd sl, sb, [sp] | __asm ("strd sl, sb, [sp]");
0x000a0728 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x000a072c ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000a072e cmp r3, 0 |
| if (r3 > 0) {
0x000a0730 bgt.w 0xa049a | goto label_19;
| }
0x000a0734 ldr.w sb, [sp, 0x34] | sb = var_34h;
| label_70:
0x000a0738 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a073a mvn.w r2, sb | r2 = ~sb;
0x000a073e ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000a0740 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000a0744 cmn r1, r3 |
| if (r1 < r3) {
0x000a0746 bmi.w 0xa08d6 | goto label_83;
| }
0x000a074a ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a074c ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000a074e ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x000a0750 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_31:
0x000a0754 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a0756 bl 0x8248c | fcn_0008248c (r0, r1);
0x000a075a ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000a075c b 0xa0504 | goto label_20;
| label_65:
0x000a075e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a0760 ldr.w sb, [sp, 0x34] | sb = var_34h;
0x000a0764 str r3, [sp, 0x34] | var_34h = r3;
0x000a0766 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a0768 b 0xa06c4 | goto label_21;
| label_51:
0x000a076a ldr r3, [sp, 0x94] | r3 = var_94h;
0x000a076c eor r3, r3, 0x40 | r3 ^= 0x40;
0x000a0770 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x000a0774 lsls r3, r3, 3 | r3 <<= 3;
0x000a0776 orr sl, r3, 0x14 | sl = r3 | 0x14;
0x000a077a b 0xa0278 | goto label_12;
| label_54:
0x000a077c ldr r7, [sp, 0x28] | r7 = var_28h;
| label_53:
0x000a077e movs r5, 0 | r5 = 0;
0x000a0780 b 0xa0504 | goto label_20;
| label_71:
0x000a0782 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x000a0786 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x000a0788 mov r1, r8 | r1 = r8;
0x000a078a mov r0, r5 | r0 = r5;
0x000a078c bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x000a0790 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x000a0792 mov r3, r8 | r3 = r8;
0x000a0794 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0796 cmp r3, 0 |
0x000a0798 itt lt |
| if (r3 >= 0) {
0x000a079a addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r3 < 0) {
0x000a079e str r3, [sp, 0x34] | var_34h = r3;
| }
0x000a07a0 ldr r3, [r0] | r3 = *(r0);
0x000a07a2 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a07a6 cmp r3, 0 |
| if (r3 == 0) {
0x000a07a8 beq 0xa06f0 | goto label_22;
| }
0x000a07aa ldr r3, [pc, 0x1a4] |
0x000a07ac add r3, pc | r3 = 0x141102;
0x000a07ae adds r3, 4 | r3 += 4;
0x000a07b0 b 0xa0500 | goto label_18;
| label_61:
0x000a07b2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a07b6 movs r1, 0x87 | r1 = 0x87;
0x000a07b8 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000a07ba ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a07bc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a07be add.w sl, r3, 1 | sl = r3 + 1;
0x000a07c2 mov r3, sl | r3 = sl;
0x000a07c4 str.w sl, [r4, 0x2c] | __asm ("str.w sl, [r4, 0x2c]");
0x000a07c8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a07cc ldr r1, [pc, 0x184] |
0x000a07ce ldr r2, [r5] | r2 = *(r5);
0x000a07d0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a07d2 add r1, pc | r1 = 0x14112a;
0x000a07d4 bl 0x4eeac | fcn_0004eeac (r0, r1, r2);
0x000a07d8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a07da cmp r3, 0 |
| if (r3 != 0) {
0x000a07dc bne.w 0xa0616 | goto label_23;
| }
0x000a07e0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a07e2 movs r1, 0x9c | r1 = 0x9c;
0x000a07e4 ldr r2, [sp, 0x60] | r2 = var_60h;
0x000a07e6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a07e8 str r3, [sp] | *(sp) = r3;
0x000a07ea mov r3, sl | r3 = sl;
0x000a07ec bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a07f0 movs r3, 1 | r3 = 1;
0x000a07f2 str r3, [sp, 0x44] | var_44h = r3;
0x000a07f4 b 0xa03c4 | goto label_24;
| label_72:
0x000a07f6 ldr r3, [r4, 0x70] | r3 = *((r4 + 0x70));
0x000a07f8 cmp r3, 0 |
| if (r3 == 0) {
0x000a07fa beq.w 0xa0510 | goto label_25;
| }
0x000a07fe mov r0, r4 | r0 = r4;
0x000a0800 bl 0x4f4d8 | fcn_0004f4d8 (r0, r1);
0x000a0804 b 0xa0510 | goto label_25;
| label_80:
0x000a0806 movs r3, 0 | r3 = 0;
0x000a0808 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x000a080c str r3, [sp, 0x24] | var_24h = r3;
0x000a080e b 0xa0448 | goto label_26;
| label_64:
0x000a0810 ldr r2, [sp, 0x60] | r2 = var_60h;
0x000a0812 mov r3, r8 | r3 = r8;
0x000a0814 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0816 movs r1, 0x2d | r1 = 0x2d;
0x000a0818 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a081c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a0820 str r0, [sp, 0x24] | var_24h = r0;
0x000a0822 b 0xa043e | goto label_27;
| label_76:
0x000a0824 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x000a0826 subs.w sl, r3, 0 | sl = r3 - 0;
0x000a082a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a082c it ne |
| if (sl == r3) {
0x000a082e movne sl, 1 | sl = 1;
| }
0x000a0832 str r3, [sp, 0x24] | var_24h = r3;
0x000a0834 b 0xa0046 | goto label_5;
| label_55:
0x000a0836 ldr r3, [pc, 0x120] |
0x000a0838 add r3, pc | r3 = 0x141196;
0x000a083a adds r3, 4 | r3 += 4;
0x000a083c b 0xa025c | goto label_28;
| label_79:
0x000a083e movs r3, 0 | r3 = 0;
0x000a0840 movs r1, 0xe | r1 = 0xe;
0x000a0842 mov r2, r3 | r2 = r3;
0x000a0844 str r3, [sp] | *(sp) = r3;
0x000a0846 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0848 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000a084c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a084e mov sl, r0 | sl = r0;
0x000a0850 movs r2, 0x71 | r2 = 0x71;
0x000a0852 mov r1, r5 | r1 = r5;
0x000a0854 mov r0, r4 | r0 = r4;
0x000a0856 str r3, [sp, 4] | var_4h = r3;
0x000a0858 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a085a str r3, [sp] | *(sp) = r3;
0x000a085c add r3, sp, 0x70 | r3 += var_70h;
0x000a085e str r3, [sp, 0xc] | var_ch = r3;
0x000a0860 add r3, sp, 0x6c | r3 += var_6ch;
0x000a0862 str r3, [sp, 8] | var_8h = r3;
0x000a0864 movs r3, 8 | r3 = 8;
0x000a0866 bl 0x4f62c | fcn_0004f62c (r0, r1, r2, r3, r4, r5, r6);
0x000a086a ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a086c ldr r3, [r1, 0x6c] | r3 = *((r1 + 0x6c));
0x000a086e subs r2, r3, 1 | r2 = r3 - 1;
0x000a0870 cmp sl, r2 |
| if (sl != r2) {
0x000a0872 bne 0xa08de | goto label_84;
| }
0x000a0874 str.w sl, [r1, 0x6c] | __asm ("str.w sl, [r1, 0x6c]");
| label_32:
0x000a0878 ldr.w sl, [sp, 0x48] | sl = var_48h;
0x000a087c b 0xa06aa | goto label_29;
| label_81:
0x000a087e ldr r2, [sp, 0x48] | r2 = var_48h;
0x000a0880 movs r1, 0x1b | r1 = 0x1b;
0x000a0882 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a0884 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x000a0888 str r2, [sp] | *(sp) = r2;
0x000a088a mov r2, r3 | r2 = r3;
0x000a088c ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a088e str r3, [sp, 4] | var_4h = r3;
0x000a0890 mov r3, sb | r3 = sb;
0x000a0892 bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
0x000a0896 movs r3, 0 | r3 = 0;
0x000a0898 str r3, [sp, 0x24] | var_24h = r3;
0x000a089a b 0xa043e | goto label_27;
| label_78:
0x000a089c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000a089e ldr r0, [r2] | r0 = *(r2);
0x000a08a0 ldrb.w sl, [r0, 0x57] | sl = *((r0 + 0x57));
0x000a08a4 cmp.w sl, 0 |
| if (sl != 0) {
0x000a08a8 bne.w 0xa0668 | goto label_30;
| }
0x000a08ac add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000a08b0 ldr r1, [r2, 0x68] | r1 = *((r2 + 0x68));
0x000a08b2 lsls r3, r3, 3 | r3 <<= 3;
0x000a08b4 str r1, [sp, 0x54] | var_54h = r1;
0x000a08b6 add.w sb, r1, r3 | sb = r1 + r3;
0x000a08ba str r3, [sp, 0x58] | var_58h = r3;
0x000a08bc ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x000a08c0 ldrsb.w r1, [sb, 1] | r1 = *((sb + 1));
0x000a08c4 bl 0x32c3c | fcn_00032c3c (r0, r1, r2);
0x000a08c8 ldrd r1, r3, [sp, 0x54] | __asm ("ldrd r1, r3, [var_54h]");
0x000a08cc movs r2, 0xb8 | r2 = 0xb8;
0x000a08ce str.w sl, [sb, 0x10] | __asm ("str.w sl, [sb, 0x10]");
0x000a08d2 strh r2, [r1, r3] | *((r1 + r3)) = r2;
0x000a08d4 b 0xa0668 | goto label_30;
| label_83:
0x000a08d6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a08d8 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x000a08dc b 0xa0754 | goto label_31;
| label_84:
0x000a08de ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a08e0 bics.w sl, sl, sl, asr 32 | __asm ("bics.w sl, sl, sl, asr 32");
0x000a08e4 it hs |
| if (r2 < 0xb8) {
0x000a08e6 movhs sl, r2 | sl = r2;
| }
0x000a08e8 ldr r2, [r1] | r2 = *(r1);
0x000a08ea ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
| if (r2 != 0) {
0x000a08ee cbnz r2, 0xa090e | goto label_85;
| }
0x000a08f0 ldr r2, [r1, 0x68] | r2 = *((r1 + 0x68));
0x000a08f2 movs r1, 0x18 | r1 = 0x18;
0x000a08f4 mla r2, r1, sl, r2 | __asm ("mla r2, r1, sl, r2");
| do {
0x000a08f8 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x000a08fa b 0xa0878 | goto label_32;
| label_77:
0x000a08fc ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a08fe mov r5, r3 | r5 = r3;
0x000a0900 bl 0x8248c | fcn_0008248c (r0, r1);
0x000a0904 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000a0906 b.w 0xa0054 | goto label_3;
| label_40:
0x000a090a ldr r3, [r4] | r3 = *(r4);
0x000a090c b 0xa0546 | goto label_33;
| label_85:
0x000a090e ldr r2, [pc, 0x4c] |
0x000a0910 add r2, pc | r2 = 0x141272;
0x000a0912 adds r2, 4 | r2 += 4;
0x000a0914 b 0xa08f8 |
| } while (1);
| label_42:
0x000a0916 movs r3, 0 | r3 = 0;
0x000a0918 mov.w r8, 0x8000 | r8 = 0x8000;
0x000a091c movt r3, 0xfff8 | r3 = (r3 & 0xFFFF) | 0xfff80000;
0x000a0920 sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x000a0924 movt r8, 0xffff | r8 = (r8 & 0xFFFF) | 0xffff0000;
0x000a0928 str r3, [sp, 0x44] | var_44h = r3;
0x000a092a b.w 0xa00c2 | goto label_13;
| label_82:
0x000a092e strb r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000a0930 b 0xa0714 | goto label_34;
| label_36:
0x000a0932 blx 0x6430 | fcn_00006430 ();
| label_58:
0x000a0936 movs r3, 0 | r3 = 0;
0x000a0938 ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x000a093a udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xa0b10 */
| #include <stdint.h>
|
; (fcn) fcn.000a0b10 () | void fcn_000a0b10 (int16_t arg_80h, int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_30h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x000a0b10 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000a0b14 sub sp, 0x5c |
0x000a0b16 mov r6, r0 | r6 = r0;
0x000a0b18 add r0, sp, 0x30 | r0 += var_30h;
0x000a0b1a mov r4, r1 | r4 = r1;
0x000a0b1c stm.w r0, {r2, r3} | *(r0) = r2;
| *((r0 + 4)) = r3;
0x000a0b20 ldr.w r2, [pc, 0xaf4] |
0x000a0b24 ldr.w r3, [pc, 0xaf4] | r3 = *(0xa161c);
0x000a0b28 ldr.w r8, [sp, 0x80] | r8 = *(arg_80h);
0x000a0b2c add r2, pc | r2 = 0x142148;
0x000a0b2e ldr r5, [r6] | r5 = *(r6);
0x000a0b30 ldr r3, [r2, r3] |
0x000a0b32 ldr r3, [r3] | r3 = imp.atan;
0x000a0b34 str r3, [sp, 0x54] | var_54h = r3;
0x000a0b36 mov.w r3, 0 | r3 = 0;
0x000a0b3a movw r3, 0x155 | r3 = 0x155;
0x000a0b3e cmp r1, r3 |
| if (r1 > r3) {
0x000a0b40 bhi.w 0xa0df8 | goto label_0;
| }
| /* switch table (1 cases) at 0xa0b48 */
0x000a0b44 tbh [pc, r1, lsl 1] | __asm ("tbh [pc, r1, lsl 1]");
| do {
| label_0:
0x000a0df8 ldr.w r2, [pc, 0x824] |
0x000a0dfc ldr.w r1, [pc, 0x824] |
0x000a0e00 add r2, pc | r2 = 0x142424;
0x000a0e02 add r1, pc | r1 = 0x14242a;
0x000a0e04 add.w r1, r1, r4, lsl 1 | r1 += (r4 << 1);
0x000a0e08 add r4, r2 | r4 += r2;
0x000a0e0a ldrsb.w r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000a0e0e ldrh.w r4, [r1, 0xdd8] | r4 = *((r1 + 0xdd8));
0x000a0e12 ldr.w r1, [pc, 0x814] |
0x000a0e16 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000a0e1a add r1, pc | r1 = 0x142448;
0x000a0e1c ldrh.w r0, [r5, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((r5 + offset_0));
0x000a0e20 lsls r3, r3, 2 | r3 <<= 2;
0x000a0e22 adds r3, 0xc | r3 += 0xc;
0x000a0e24 add.w r2, r2, r0, lsl 1 | r2 += (r0 << 1);
0x000a0e28 ldrsh.w r0, [r2, 0x1a8] | r0 = *((r2 + 0x1a8));
0x000a0e2c adds r2, r5, r3 | r2 = r5 + r3;
0x000a0e2e str r2, [r6] | *(r6) = r2;
0x000a0e30 add r0, r4 | r0 += r4;
0x000a0e32 ldrh.w r0, [r1, r0, lsl 1] | offset_1 = r0 << 1;
| r0 = *((r1 + offset_1));
0x000a0e36 strh r0, [r5, r3] | *((r5 + r3)) = r0;
0x000a0e38 strh r4, [r2, 2] | *((r2 + 2)) = r4;
0x000a0e3a ldr.w r2, [pc, 0x7f0] |
0x000a0e3e ldr.w r3, [pc, 0x7dc] | r3 = *(0xa161e);
0x000a0e42 add r2, pc | r2 = 0x142474;
0x000a0e44 ldr r3, [r2, r3] | r3 = imp.atan;
0x000a0e46 ldr r2, [r3] | r2 = imp.atan;
0x000a0e48 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000a0e4a eors r2, r3 | r2 ^= r3;
0x000a0e4c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a0e50 bne.w 0xa3660 | goto label_5;
| }
0x000a0e54 add sp, 0x5c |
0x000a0e56 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000a2272 ldr r3, [r5, -0x20] | r3 = *((r5 - 0x20));
0x000a2276 cmp r3, 0 |
0x000a2278 beq.w 0xa0df8 |
| } while (r3 == 0);
0x000a227c ldr r2, [r5, -0x2c] | r2 = *((r5 - 0x2c));
0x000a2280 movs r3, 0 | r3 = 0;
0x000a2282 mov r0, r8 | r0 = r8;
0x000a2284 movs r1, 0x13 | r1 = 0x13;
0x000a2286 bl 0x48c80 | fcn_00048c80 (r0, r1, r2, r3);
0x000a228a str r0, [r5, -0x2c] | *((r5 - 0x2c)) = r0;
0x000a228e b.w 0xa0df8 | goto label_0;
0x000a289a movs r3, 1 | r3 = 1;
0x000a289c strb.w r3, [r8, 0xcf] | *((r8 + 0xcf)) = r3;
0x000a28a0 b.w 0xa0df8 | goto label_0;
| label_2:
0x000a3558 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x000a355c b.w 0xa2272 | goto label_1;
| label_5:
0x000a3660 blx 0x6430 | fcn_00006430 ();
0x000a3664 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a3666 ldr r3, [r3] | r3 = *(r3);
0x000a3668 str r3, [sp, 0x24] | var_24h = r3;
0x000a366a ldr.w r3, [fp] | r3 = *(fp);
0x000a366e cmp r3, 0 |
| if (r3 <= 0) {
0x000a3670 ble 0xa376e | goto label_6;
| }
0x000a3672 mov.w sb, 0 | sb = 0;
0x000a3676 strd r5, r6, [sp, 0x28] | __asm ("strd r5, r6, [var_28h]");
0x000a367a mov sl, sb | sl = sb;
0x000a367c mov r7, sb | r7 = sb;
0x000a367e mov r6, fp | r6 = fp;
| do {
0x000a3680 ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x000a3682 ldrb r3, [r5] | r3 = *(r5);
0x000a3684 cmp r3, 0xb1 |
0x000a3686 itet eq |
| if (r3 != 0xb1) {
0x000a3688 ldreq r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| }
| if (r3 == 0xb1) {
0x000a368a movne r2, 1 | r2 = 1;
| }
| if (r3 != 0xb1) {
0x000a368c ldreq r2, [r3] | r2 = *(r3);
| }
0x000a368e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a3690 cmp r3, r2 |
| if (r3 != r2) {
0x000a3692 bne 0xa3752 | goto label_7;
| }
0x000a3694 mov.w r3, 0x200 | r3 = 0x200;
0x000a3698 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x000a369a strd r7, r3, [sp, 8] | __asm ("strd r7, r3, [var_8h]");
0x000a369e movs r3, 0 | r3 = 0;
0x000a36a0 mov r2, r3 | r2 = r3;
0x000a36a2 mov r0, r8 | r0 = r8;
0x000a36a4 str r7, [sp, 0x10] | var_10h = r7;
0x000a36a6 strd r7, r7, [sp] | __asm ("strd r7, r7, [sp]");
0x000a36aa bl 0x3af54 | fcn_0003af54 (r0, r1, r2, r3, r4, r5, r6);
0x000a36ae str r7, [r5, 0x14] | *((r5 + 0x14)) = r7;
| if (r0 != 0) {
0x000a36b0 cbz r0, 0xa36c2 |
0x000a36b2 cmp.w sb, 0 |
| if (sb != 0) {
0x000a36b6 beq 0xa36c0 |
0x000a36b8 movs r3, 0x87 | r3 = 0x87;
0x000a36ba str.w sb, [r0, 0x34] | __asm ("str.w sb, [r0, 0x34]");
0x000a36be strb r3, [r0] | *(r0) = r3;
| }
0x000a36c0 mov sb, r0 | sb = r0;
| }
0x000a36c2 ldr.w r3, [fp] | r3 = *(fp);
0x000a36c6 add.w sl, sl, 1 | sl++;
0x000a36ca adds r6, 0x10 | r6 += 0x10;
0x000a36cc cmp sl, r3 |
0x000a36ce blt 0xa3680 |
| } while (sl < r3);
0x000a36d0 ldrd r5, r6, [sp, 0x28] | __asm ("ldrd r5, r6, [var_28h]");
| do {
0x000a36d4 ldr.w r0, [r8] | r0 = *(r8);
0x000a36d8 cmp.w sb, 0 |
| if (sb == 0) {
0x000a36dc beq 0xa376e | goto label_6;
| }
0x000a36de ldr.w r3, [sb, 0x34] | r3 = *((sb + 0x34));
0x000a36e2 mov r1, fp | r1 = fp;
0x000a36e4 cmp r3, 0 |
| if (r3 == 0) {
0x000a36e6 beq 0xa377c | goto label_8;
| }
0x000a36e8 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000a36ec orr r3, r3, 0x400 | r3 |= 0x400;
0x000a36f0 str.w r3, [sb, 4] | __asm ("str.w r3, [sb, 4]");
0x000a36f4 bl 0x30cbc | fcn_00030cbc (r0, r1);
| label_4:
0x000a36f8 ldr.w r3, [sb, 0x34] | r3 = *((sb + 0x34));
| if (r3 != 0) {
0x000a36fc cbz r3, 0xa3706 |
0x000a36fe mov r1, sb | r1 = sb;
0x000a3700 mov r0, r8 | r0 = r8;
0x000a3702 bl 0x456f0 | fcn_000456f0 (r0, r1);
| }
0x000a3706 ldr r1, [r5, -0x2c] | r1 = *((r5 - 0x2c));
0x000a370a mov r2, sb | r2 = sb;
0x000a370c mov r0, r8 | r0 = r8;
0x000a370e bl 0x48c2c | fcn_00048c2c (r0, r1, r2);
0x000a3712 b.w 0xa2272 | goto label_1;
| label_7:
0x000a3752 cmp r2, 1 |
0x000a3754 ldrd r5, r6, [sp, 0x28] | __asm ("ldrd r5, r6, [var_28h]");
| if (r2 <= 1) {
0x000a3758 ble 0xa3776 | goto label_9;
| }
0x000a375a ldr r3, [pc, 0x54] |
0x000a375c add r3, pc | r3 = 0x146f12;
| label_3:
0x000a375e ldr r1, [sp, 0x24] | r1 = var_24h;
0x000a3760 mov r0, r8 | r0 = r8;
0x000a3762 str r1, [sp] | *(sp) = r1;
0x000a3764 ldr r1, [pc, 0x4c] |
0x000a3766 add r1, pc | r1 = 0x146f1e;
0x000a3768 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000a376c b 0xa36d4 |
| } while (1);
| label_6:
0x000a376e ldr.w r0, [r8] | r0 = *(r8);
0x000a3772 mov r1, fp | r1 = fp;
0x000a3774 b 0xa3558 | goto label_2;
| label_9:
0x000a3776 ldr r3, [pc, 0x40] |
0x000a3778 add r3, pc | r3 = 0x146f36;
0x000a377a b 0xa375e | goto label_3;
| label_8:
0x000a377c bl 0x30cbc | fcn_00030cbc (r0, r1);
0x000a3780 b 0xa36f8 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xa3cf4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a3cf4 () | void fcn_000a3cf4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_4;
| int16_t var_4h_3;
| int16_t var_8h_2;
| int16_t var_ch_4;
| int16_t var_14h_3;
| int16_t var_18h_3;
| int16_t var_cch;
| int16_t var_d8h;
| int16_t var_f8h;
| int16_t var_c4h;
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a3cf4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a3cf8 mov r8, r2 | r8 = r2;
0x000a3cfa ldr.w r2, [pc, 0x470] |
0x000a3cfe mov sb, r3 | sb = r3;
0x000a3d00 sub sp, 0x12c |
0x000a3d02 mov r6, r0 | r6 = r0;
0x000a3d04 ldr.w r3, [pc, 0x468] | r3 = *(0xa4170);
0x000a3d08 add r0, sp, 0x18 | r0 += var_18h_3;
0x000a3d0a add r2, pc | r2 = 0x147e7c;
0x000a3d0c str r1, [sp] | *(sp) = r1;
0x000a3d0e movs r1, 0 | r1 = 0;
0x000a3d10 ldr r5, [sp, 0x150] | r5 = var_0h;
0x000a3d12 ldr r3, [r2, r3] |
0x000a3d14 movs r2, 0x94 | r2 = 0x94;
0x000a3d16 ldr r4, [sp, 0x158] | r4 = var_8h;
0x000a3d18 add r7, sp, 0x14 | r7 += var_14h_3;
0x000a3d1a ldr r3, [r3] | r3 = imp.atan;
0x000a3d1c str r3, [sp, 0x124] | var_c4h = r3;
0x000a3d1e mov.w r3, 0 | r3 = 0;
0x000a3d22 ldr r3, [sp, 0x154] | r3 = var_4h_2;
0x000a3d24 str r3, [sp, 4] | var_4h_3 = r3;
0x000a3d26 blx 0x62ec | fcn_000062ec ();
0x000a3d2a movs r2, 0x4c | r2 = 0x4c;
0x000a3d2c movs r1, 0 | r1 = 0;
0x000a3d2e add r0, sp, 0xd8 | r0 += var_d8h;
0x000a3d30 blx 0x62ec | fcn_000062ec ();
0x000a3d34 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x000a3d38 ldr.w r2, [r6, 0x108] | r2 = *((r6 + 0x108));
0x000a3d3c str r5, [sp, 0xf8] | var_f8h = r5;
0x000a3d3e str.w r7, [r6, 0x108] | __asm ("str.w r7, [r6, 0x108]");
0x000a3d42 str r2, [sp, 0xcc] | var_cch = r2;
0x000a3d44 str r6, [r7] | *(r7) = r6;
0x000a3d46 cmp r3, 0 |
| if (r3 != 0) {
0x000a3d48 bne.w 0xa3f78 | goto label_5;
| }
| label_3:
0x000a3d4c tst.w sb, 1 |
| if ((sb & 1) != 0) {
0x000a3d50 beq 0xa3d68 |
0x000a3d52 ldrb r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000a3d54 adds r3, 1 | r3++;
0x000a3d56 strb r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000a3d58 ldr.w r3, [r6, 0x130] | r3 = *((r6 + 0x130));
0x000a3d5c adds r3, 1 | r3++;
0x000a3d5e str.w r3, [r6, 0x130] | __asm ("str.w r3, [r6, 0x130]");
0x000a3d62 movs r3, 0 | r3 = 0;
0x000a3d64 strh.w r3, [r6, 0x134] | *((r6 + 0x134)) = r3;
| }
0x000a3d68 ldrb.w r5, [r6, 0x5f] | r5 = *((r6 + 0x5f));
0x000a3d6c ubfx r3, sb, 2, 1 | r3 = (sb >> 2) & ((1 << 1) - 1);
0x000a3d70 strb r3, [r7, 0x19] | *((r7 + 0x19)) = r3;
| if (r5 != 0) {
0x000a3d72 cbnz r5, 0xa3dcc | goto label_6;
| }
0x000a3d74 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x000a3d76 cmp r1, 0 |
| if (r1 <= 0) {
0x000a3d78 ble 0xa3dcc | goto label_6;
| }
0x000a3d7a mov sl, r5 | sl = r5;
0x000a3d7c str r4, [sp, 8] | var_8h_2 = r4;
| do {
0x000a3d7e ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000a3d80 lsl.w fp, sl, 4 |
0x000a3d84 add r3, fp | r3 += fp;
0x000a3d86 ldr r5, [r3, 4] | r5 = *((r3 + 4));
| if (r5 != 0) {
0x000a3d88 cbz r5, 0xa3dc2 |
0x000a3d8a ldrb r3, [r5, 9] | r3 = *((r5 + 9));
| if (r3 != 0) {
0x000a3d8c cbz r3, 0xa3d9e |
0x000a3d8e ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000a3d90 adds r3, 1 | r3++;
0x000a3d92 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000a3d94 ldrb r3, [r5, 0xa] | r3 = *((r5 + 0xa));
| if (r3 != 0) {
0x000a3d96 cbnz r3, 0xa3d9e | goto label_7;
| }
0x000a3d98 mov r0, r5 | r0 = r5;
0x000a3d9a bl 0x2adac | fcn_0002adac (r0);
0x000a3d9c invalid |
| }
| label_7:
0x000a3d9e movs r2, 1 | r2 = 1;
0x000a3da0 mov r0, r5 | r0 = r5;
0x000a3da2 mov r1, r2 | r1 = r2;
0x000a3da4 bl 0x22974 | fcn_00022974 (r0, r1, r2);
0x000a3da8 ldrb r2, [r5, 9] | r2 = *((r5 + 9));
0x000a3daa mov r4, r0 | r4 = r0;
| if (r2 != 0) {
0x000a3dac cbz r2, 0xa3dba |
0x000a3dae ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000a3db0 subs r2, 1 | r2--;
0x000a3db2 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x000a3db4 cmp r2, 0 |
| if (r2 == 0) {
0x000a3db6 beq.w 0xa3f04 | goto label_8;
| }
| }
0x000a3dba cmp r4, 0 |
| if (r4 != 0) {
0x000a3dbc bne.w 0xa3f10 | goto label_9;
| }
| label_0:
0x000a3dc0 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
| }
0x000a3dc2 add.w sl, sl, 1 | sl++;
0x000a3dc6 cmp r1, sl |
0x000a3dc8 bgt 0xa3d7e |
| } while (r1 > sl);
0x000a3dca ldr r4, [sp, 8] | r4 = var_8h_2;
| label_6:
0x000a3dcc str r0, [r2, 0x54] | *((r2 + 0x54)) = r0;
0x000a3dce movs r5, r1 | r5 = r1;
0x000a3dd0 movs r1, r0 | r1 = r0;
0x000a3dd2 movs r0, r0 |
0x000a3dd4 movs r2, 0 | r2 = 0;
0x000a3dd6 str.w r2, [r6, 0x198] | __asm ("str.w r2, [r6, 0x198]");
| if (r3 == 0) {
0x000a3dda cbz r3, 0xa3df0 | goto label_10;
| }
0x000a3ddc movs r1, 1 | r1 = 1;
| do {
0x000a3dde ldrb.w r2, [r3, 0x96] | r2 = *((r3 + 0x96));
0x000a3de2 bfi r2, r1, 0, 2 | value_0 = BIT_MASK (0, 2);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x000a3de6 strb.w r2, [r3, 0x96] | *((r3 + 0x96)) = r2;
0x000a3dea ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000a3dec cmp r3, 0 |
0x000a3dee bne 0xa3dde |
| } while (r3 != 0);
| label_10:
0x000a3df0 str r4, [sp, 0xc] | var_ch_4 = r4;
| do {
| label_1:
0x000a3df2 mov sl, r5 | sl = r5;
0x000a3df4 ldr r5, [r5, 0x18] | r5 = *((r5 + 0x18));
0x000a3df6 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000a3dfa ldr.w fp, [sl] | fp = *(sl);
0x000a3dfe subs r3, 1 | r3--;
0x000a3e00 str.w r3, [sl, 0xc] | __asm ("str.w r3, [sl, 0xc]");
0x000a3e04 cmp r3, 0 |
| if (r3 == 0) {
0x000a3e06 beq.w 0xa3f28 | goto label_11;
| }
0x000a3e0a cmp r5, 0 |
0x000a3e0c bne 0xa3df2 |
| } while (r5 != 0);
0x000a3e0e ldr r4, [sp, 0xc] | r4 = var_ch_4;
0x000a3e10 cmp.w r8, 0 |
| if (r8 < 0) {
0x000a3e14 blt.w 0xa3f6e | goto label_12;
| }
| if (r8 != 0) {
0x000a3e18 bne.w 0xa3f60 | goto label_13;
| }
| label_2:
0x000a3e1c ldr r3, [r6, 0x7c] | r3 = *((r6 + 0x7c));
0x000a3e1e cmp r8, r3 |
| if (r8 > r3) {
0x000a3e20 bgt.w 0xa401a | goto label_14;
| }
0x000a3e24 ldr r3, [sp] | r3 = *(sp);
0x000a3e26 cmp r3, 0 |
| if (r3 == 0) {
0x000a3e28 beq.w 0xa4010 | void (*0xa4010)() ();
| }
| if (r4 != 0) {
0x000a3e74 cbz r4, 0xa3e7c |
0x000a3e76 ldr.w r3, [r7, 0xe8] | r3 = *((r7 + 0xe8));
0x000a3e7a str r3, [r4] | *(r4) = r3;
| }
0x000a3e7c ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
0x000a3e80 cmp r3, 0 |
| if (r3 == 0) {
0x000a3e82 beq.w 0xa3fb8 | goto label_15;
| }
| label_4:
0x000a3e86 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x000a3e8a cmp r3, 0 |
| if (r3 == 0) {
0x000a3e8c beq 0xa3f84 | void (*0xa3f84)() ();
| }
| label_8:
0x000a3f04 mov r0, r5 | r0 = r5;
0x000a3f06 bl 0x22944 | fcn_00022944 (r0);
0x000a3f0a cmp r4, 0 |
| if (r4 == 0) {
0x000a3f0c beq.w 0xa3dc0 | goto label_0;
| }
| label_9:
0x000a3f10 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000a3f12 mov sl, fp | sl = fp;
0x000a3f14 mov r0, r6 | r0 = r6;
0x000a3f16 mov r1, r4 | r1 = r4;
0x000a3f18 mov fp, r4 |
0x000a3f1a ldr.w r3, [r2, sl] | r3 = *((r2 + sl));
0x000a3f1e ldr r2, [pc, 0x25c] |
0x000a3f20 add r2, pc | r2 = 0x1480a2;
0x000a3f22 bl 0x4a1f0 | fcn_0004a1f0 (r0, r1, r2);
0x000a3f26 b 0xa3ee0 | void (*0xa3ee0)() ();
| label_11:
0x000a3f28 ldrd r1, r4, [sl, 4] | __asm ("ldrd r1, r4, [sl, 4]");
0x000a3f2c ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x000a3f2e subs r3, 1 | r3--;
0x000a3f30 str r3, [r1, 8] | *((r1 + 8)) = r3;
| if (r3 == 0) {
0x000a3f32 cbnz r3, 0xa3f46 |
0x000a3f34 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
| if (r3 != 0) {
0x000a3f36 cbz r3, 0xa3f40 |
0x000a3f38 ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x000a3f3a str r1, [sp, 8] | var_8h_2 = r1;
0x000a3f3c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
0x000a3f3e ldr r1, [sp, 8] | r1 = var_8h_2;
| }
0x000a3f40 mov r0, fp | r0 = fp;
0x000a3f42 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
| if (r4 != 0) {
0x000a3f46 cbz r4, 0xa3f50 |
0x000a3f48 ldr r3, [r4] | r3 = *(r4);
0x000a3f4a mov r0, r4 | r0 = r4;
0x000a3f4c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a3f4e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x000a3f50 mov r1, sl | r1 = sl;
0x000a3f52 mov r0, fp | r0 = fp;
0x000a3f54 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000a3f58 cmp r5, 0 |
| if (r5 != 0) {
0x000a3f5a bne.w 0xa3df2 | goto label_1;
| }
| label_13:
0x000a3f60 ldr r3, [sp] | r3 = *(sp);
0x000a3f62 add r3, r8 | r3 += r8;
0x000a3f64 ldrb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x000a3f68 cmp r3, 0 |
| if (r3 != 0) {
0x000a3f6a bne.w 0xa3e1c | goto label_2;
| }
| label_12:
0x000a3f6e ldr r1, [sp] | r1 = *(sp);
0x000a3f70 mov r0, r7 | r0 = r7;
0x000a3f72 bl 0xa37bc | fcn_000a37bc (r0, r1, r2, r3, r4, r5);
0x000a3f74 stc2 p7, c14, [r3], -0x1f4 | __asm ("stc2 p7, c14, [r3], -0x1f4");
| label_5:
0x000a3f78 ldr r1, [pc, 0x204] |
0x000a3f7a mov r0, r7 | r0 = r7;
0x000a3f7c add r1, pc | r1 = 0x148100;
0x000a3f7e bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000a3f82 b 0xa3d4c | goto label_3;
| label_15:
0x000a3fb8 ldr r5, [r7, 8] | r5 = *((r7 + 8));
0x000a3fba uxtb.w r2, sb | r2 = (int8_t) sb;
0x000a3fbe cmp r5, 0 |
| if (r5 == 0) {
0x000a3fc0 beq.w 0xa3e86 | goto label_4;
| }
| label_14:
0x000a401a ldr r2, [pc, 0x168] |
0x000a401c movs r1, 0x12 | r1 = 0x12;
0x000a401e mov r0, r6 | r0 = r6;
0x000a4020 add r2, pc | r2 = 0x1481aa;
0x000a4022 bl 0x4a1f0 | fcn_0004a1f0 (r0, r1, r2);
0x000a4026 movs r1, 0x12 | r1 = 0x12;
0x000a4028 mov r0, r6 | r0 = r6;
0x000a402a bl 0x2e764 | r0 = fcn_0002e764 (r0, r1);
0x000a402e mov fp, r0 |
0x000a4030 b 0xa3ee0 | return void (*0xa3ee0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xa47a4 */
| #include <stdint.h>
|
; (fcn) fcn.000a47a4 () | void fcn_000a47a4 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| r0 = arg1;
0x000a47a4 ldr r3, [r0, 0xc] | r3 = *(var_0hxc);
0x000a47a6 push {r4, r5, r6, r7, lr} |
0x000a47a8 sub sp, 0x14 |
0x000a47aa cbz r3, 0xa47b4 |
| while (1) {
0x000a47ac movs r5, 0 | r5 = 0;
| label_0:
0x000a47ae mov r0, r5 | r0 = r5;
0x000a47b0 add sp, 0x14 |
0x000a47b2 pop {r4, r5, r6, r7, pc} |
0x000a47b4 ldr r6, [r0] | r6 = *(r0);
0x000a47b6 mov r4, r0 | r4 = r0;
0x000a47b8 ldr.w r5, [r6, 0xdc] | r5 = *((r6 + 0xdc));
| if (r5 == 0) {
0x000a47bc cbz r5, 0xa47ca | goto label_2;
| }
0x000a47be str r5, [r0, 0xc] | *(var_0hxc) = r5;
0x000a47c0 str.w r3, [r6, 0xdc] | __asm ("str.w r3, [r6, 0xdc]");
| label_1:
0x000a47c4 movs r3, 1 | r3 = 1;
0x000a47c6 strb r3, [r4, 8] | *((r4 + 8)) = r3;
0x000a47c8 b 0xa47ac |
| }
| label_2:
0x000a47ca ldr r0, [pc, 0x44] |
0x000a47cc ldr.w r1, [r6, 0xe0] | r1 = *((r6 + 0xe0));
0x000a47d0 add r0, pc | r0 = 0x148fe6;
0x000a47d2 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000a47d6 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x000a47d8 cbz r0, 0xa480c | goto label_3;
| }
0x000a47da ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x000a47dc add.w r2, r4, 0xc | r2 = r4 + 0xc;
0x000a47e0 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000a47e2 mov r1, r7 | r1 = r7;
0x000a47e4 adds r3, 1 | r3++;
0x000a47e6 str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
0x000a47e8 movs r3, 0x81 | r3 = 0x81;
0x000a47ea str r5, [sp, 8] | var_8h = r5;
0x000a47ec str r5, [sp] | *(sp) = r5;
0x000a47ee str r2, [sp, 4] | var_4h = r2;
0x000a47f0 mov.w r2, -1 | r2 = -1;
0x000a47f4 bl 0xa4188 | fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x000a47f8 ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x000a47fa mov r5, r0 | r5 = r0;
0x000a47fc mov r0, r7 | r0 = r7;
0x000a47fe subs r3, 1 | r3--;
0x000a4800 str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
0x000a4802 bl 0x26dbc | fcn_00026dbc (r0);
0x000a4806 cmp r5, 0 |
| if (r5 != 0) {
0x000a4808 bne 0xa47ae | goto label_0;
| }
0x000a480a b 0xa47c4 | goto label_1;
| label_3:
0x000a480c movs r5, 7 | r5 = 7;
0x000a480e b 0xa47ae | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xa4c18 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a4c18 () | void fcn_000a4c18 (int16_t arg_0h, int16_t arg_ch, int16_t arg_10h, int16_t arg_48h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_4;
| int16_t var_4h_4;
| int16_t var_8h_3;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_25h;
| int16_t var_2ch;
| int16_t var_58h;
| int16_t var_4h_5;
| int16_t var_8h_4;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000a4c18 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a4c1c mov r8, r2 | r8 = r2;
0x000a4c1e ldr r2, [pc, 0x150] |
0x000a4c20 mov r4, r0 | r4 = r0;
0x000a4c22 sub sp, 0x1c |
0x000a4c24 mov r5, r1 | r5 = r1;
0x000a4c26 ldr r3, [pc, 0x14c] | r3 = *(0xa4d76);
0x000a4c28 add r2, pc | r2 = 0x14999e;
0x000a4c2a ldr r0, [r0, 0xc] | r0 = *(arg_0hxc);
0x000a4c2c ldrd fp, sl, [sp, 0x48] | __asm ("ldrd fp, sl, [arg_48h]");
0x000a4c30 ldr r3, [r2, r3] |
0x000a4c32 ldr r3, [r3] | r3 = imp.atan;
0x000a4c34 str r3, [sp, 0x14] | var_14h = r3;
0x000a4c36 mov.w r3, 0 | r3 = 0;
0x000a4c3a movs r3, 0 | r3 = 0;
0x000a4c3c str r3, [sp, 0x10] | var_10h = r3;
| if (r0 != 0) {
0x000a4c3e cbz r0, 0xa4c48 |
0x000a4c40 ldr r3, [pc, 0x134] |
0x000a4c42 add r3, pc |
0x000a4c44 ldr r3, [r3, 0x50] | r3 = imp.atan;
0x000a4c46 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000a4c48 cmp r5, 0 |
| if (r5 == 0) {
0x000a4c4a beq 0xa4cf6 | goto label_9;
| }
| label_1:
0x000a4c4c mov r1, r5 | r1 = r5;
0x000a4c4e mov r0, r4 | r0 = r4;
0x000a4c50 bl 0x303b4 | r0 = fcn_000303b4 (r0, r1, r2);
0x000a4c54 cmp r0, 1 |
0x000a4c56 mov r6, r0 | r6 = r0;
0x000a4c58 ite gt |
| if (r0 <= 1) {
0x000a4c5a movgt sb, 0 | sb = 0;
| }
| if (r0 <= 1) {
0x000a4c5e mov.w sb, 1 | sb = 1;
| }
0x000a4c62 cmp r0, 0 |
0x000a4c64 mov.w r7, 0 | r7 = 0;
0x000a4c68 it eq |
| if (r0 != 0) {
0x000a4c6a moveq sb, 0 | sb = 0;
| }
0x000a4c6e cmp.w sb, 0 |
| if (sb == 0) {
0x000a4c72 beq 0xa4cba | goto label_10;
| }
| label_2:
0x000a4c74 mov.w sb, 1 | sb = 1;
| label_0:
0x000a4c78 mov r0, r7 | r0 = r7;
0x000a4c7a bl 0x7a5dc | fcn_0007a5dc (r0);
0x000a4c7e cmp.w r8, 0 |
| if (r8 == 0) {
0x000a4c82 beq 0xa4c8a | goto label_3;
| }
0x000a4c84 ldr r3, [sp, 0x50] | r3 = *(arg_10h);
0x000a4c86 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x000a4c88 bmi 0xa4cb2 |
| while (1) {
| label_3:
0x000a4c8a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 != 0) {
0x000a4c8c cbz r0, 0xa4c96 |
0x000a4c8e ldr r3, [pc, 0xec] |
0x000a4c90 add r3, pc |
0x000a4c92 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000a4c94 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000a4c96 ldr r2, [pc, 0xe8] |
0x000a4c98 ldr r3, [pc, 0xd8] | r3 = *(0xa4d74);
0x000a4c9a add r2, pc | r2 = 0x149a20;
0x000a4c9c ldr r3, [r2, r3] | r3 = imp.atan;
0x000a4c9e ldr r2, [r3] | r2 = imp.atan;
0x000a4ca0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a4ca2 eors r2, r3 | r2 ^= r3;
0x000a4ca4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a4ca8 bne 0xa4d6c | goto label_11;
| }
0x000a4caa mov r0, sb | r0 = sb;
0x000a4cac add sp, 0x1c |
0x000a4cae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000a4cb2 mov r0, r8 | r0 = r8;
0x000a4cb4 bl 0x26dbc | fcn_00026dbc (r0);
0x000a4cb8 b 0xa4c8a |
| }
| label_10:
0x000a4cba ldr r0, [pc, 0xc8] |
0x000a4cbc mov r1, r5 | r1 = r5;
0x000a4cbe add r0, pc | r0 = 0x149a48;
0x000a4cc0 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000a4cc4 mov r7, r0 | r7 = r0;
0x000a4cc6 cmp r0, 0 |
| if (r0 == 0) {
0x000a4cc8 beq 0xa4d66 | goto label_12;
| }
0x000a4cca add r3, sp, 0x10 | r3 += var_10h;
0x000a4ccc mov r1, r0 | r1 = r0;
0x000a4cce str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h_4]");
0x000a4cd2 mov.w r2, -1 | r2 = -1;
0x000a4cd6 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a4cda mov r0, r4 | r0 = r4;
0x000a4cdc str r3, [sp, 4] | var_4h_5 = r3;
0x000a4cde movs r3, 0x80 | r3 = 0x80;
0x000a4ce0 bl 0xa4188 | r0 = fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x000a4ce4 mov sb, r0 | sb = r0;
0x000a4ce6 mov r0, r7 | r0 = r7;
0x000a4ce8 bl 0x26dbc | fcn_00026dbc (r0);
0x000a4cec cmp.w sb, 0 |
| if (sb != 0) {
0x000a4cf0 beq 0xa4cfc |
0x000a4cf2 ldr r7, [sp, 0x10] | r7 = var_10h;
0x000a4cf4 b 0xa4c78 | goto label_0;
| label_9:
0x000a4cf6 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000a4cf8 ldr r5, [r3] | r5 = *(r3);
0x000a4cfa b 0xa4c4c | goto label_1;
| }
0x000a4cfc ldrb.w r3, [r4, 0xb2] | r3 = *((r4 + 0xb2));
0x000a4d00 ldr r7, [sp, 0x10] | r7 = var_10h;
0x000a4d02 strb.w r6, [r4, 0xb0] | *((r4 + 0xb0)) = r6;
0x000a4d06 orr r3, r3, 4 | r3 |= 4;
0x000a4d0a strb.w r3, [r4, 0xb2] | *((r4 + 0xb2)) = r3;
0x000a4d0e mov r0, r7 | r0 = r7;
0x000a4d10 bl 0x96a64 | fcn_00096a64 (r0);
0x000a4d14 ldrb.w r3, [r4, 0xb2] | r3 = *((r4 + 0xb2));
0x000a4d18 cmp r0, 0x65 |
0x000a4d1a bfi r3, sb, 2, 1 | value_0 = BIT_MASK (2, 1);
| value_1 = sb & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x000a4d1e strb.w r3, [r4, 0xb2] | *((r4 + 0xb2)) = r3;
| if (r0 != 0x65) {
0x000a4d22 bne 0xa4c74 | goto label_2;
| }
0x000a4d24 mov r1, r5 | r1 = r5;
0x000a4d26 mov r0, r4 | r0 = r4;
0x000a4d28 bl 0x3490c | r0 = fcn_0003490c (r0, r1);
0x000a4d2c cmp r0, 0 |
| if (r0 == 0) {
0x000a4d2e beq 0xa4c74 | goto label_2;
| }
0x000a4d30 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000a4d32 ldrd r1, r2, [sp, 0x40] | __asm ("ldrd r1, r2, [arg_0h]");
0x000a4d36 str.w r8, [r3, 0x18] | __asm ("str.w r8, [r3, 0x18]");
0x000a4d3a strd r1, r2, [r3] | __asm ("strd r1, r2, [r3]");
0x000a4d3e ldr r2, [pc, 0x48] |
0x000a4d40 strd fp, sl, [r3, 8] | __asm ("strd fp, sl, [r3, 8]");
0x000a4d44 add r2, pc | r2 = 0x149ad2;
0x000a4d46 ldrd r1, r2, [r2, 0xf8] | __asm ("ldrd r1, r2, [r2, 0xf8]");
0x000a4d4a cmp r1, fp |
0x000a4d4c sbcs.w r0, r2, sl | __asm ("sbcs.w r0, r2, sl");
0x000a4d50 mov r0, r7 | r0 = r7;
0x000a4d52 itt lt |
| if (r1 >= fp) {
0x000a4d54 movlt r2, sl | r2 = sl;
| }
| if (r1 >= fp) {
0x000a4d56 movlt r1, fp | r1 = fp;
| }
0x000a4d58 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x000a4d5a ldr r2, [sp, 0x50] | r2 = *(arg_10h);
0x000a4d5c str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x000a4d5e str r2, [r3, 0x24] | *((r3 + 0x24)) = r2;
0x000a4d60 bl 0x7a5dc | fcn_0007a5dc (r0);
0x000a4d64 b 0xa4c8a | goto label_3;
| label_12:
0x000a4d66 mov.w sb, 7 | sb = 7;
0x000a4d6a b 0xa4c78 | goto label_0;
| label_11:
0x000a4d6c blx 0x6430 | fcn_00006430 ();
0x000a4d70 str r0, [r6, r5] | *((r6 + r5)) = r0;
0x000a4d72 movs r4, r0 | r4 = r0;
0x000a4d74 lsls r4, r6, 8 | r4 = r6 << 8;
0x000a4d76 movs r0, r0 |
0x000a4d78 ldrsb r2, [r2, r1] | r2 = *((r2 + r1));
0x000a4d7a movs r4, r0 | r4 = r0;
0x000a4d7c ldrsb r4, [r0, r0] | r4 = *((r0 + r0));
0x000a4d7e movs r4, r0 | r4 = r0;
0x000a4d80 str r6, [r7, r3] | *((r7 + r3)) = r6;
0x000a4d82 movs r4, r0 | r4 = r0;
0x000a4d84 subs r6, r4, r0 | r6 = r4 - r0;
0x000a4d86 movs r3, r0 | r3 = r0;
0x000a4d88 strb r0, [r2, r5] | *((r2 + r5)) = r0;
0x000a4d8a movs r4, r0 | r4 = r0;
0x000a4d8c ldr r2, [pc, 0x1a8] |
0x000a4d8e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a4d92 mov r6, r3 | r6 = r3;
0x000a4d94 ldr r3, [pc, 0x1a4] | r3 = *(0xa4f3c);
0x000a4d96 mov r7, r0 | r7 = r0;
0x000a4d98 add r2, pc | r2 = 0x149cd4;
0x000a4d9a sub sp, 0x34 |
0x000a4d9c movs r4, 0 | r4 = 0;
0x000a4d9e ldrd fp, r0, [r0] | __asm ("ldrd fp, r0, [r0]");
0x000a4da2 ldr r3, [r2, r3] |
0x000a4da4 ldr r5, [sp, 0x58] | r5 = var_58h;
0x000a4da6 ldr r3, [r3] | r3 = imp.atan;
0x000a4da8 str r3, [sp, 0x2c] | var_2ch = r3;
0x000a4daa mov.w r3, 0 | r3 = 0;
0x000a4dae bl 0x7a5dc | fcn_0007a5dc (r0);
0x000a4db2 ldr r0, [r7, 0x10] | r0 = *((r7 + 0x10));
0x000a4db4 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x000a4db6 bl 0x26dbc | fcn_00026dbc (r0);
0x000a4dba str r4, [r7, 0x10] | *((r7 + 0x10)) = r4;
0x000a4dbc ldr r0, [r7, 0x14] | r0 = *((r7 + 0x14));
0x000a4dbe bl 0x26dbc | fcn_00026dbc (r0);
0x000a4dc2 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000a4dc6 cmp r6, 0 |
0x000a4dc8 str r4, [r7, 0x14] | *((r7 + 0x14)) = r4;
0x000a4dca ldrb r4, [r3, 5] | r4 = *((r3 + 5));
0x000a4dcc eor r4, r4, 0x20 | r4 ^= 0x20;
0x000a4dd0 ubfx r4, r4, 5, 1 | r4 = (r4 >> 5) & ((1 << 1) - 1);
| if (r6 <= 0) {
0x000a4dd4 ble 0xa4e18 | goto label_13;
| }
0x000a4dd6 ldr.w sl, [pc, 0x168] |
0x000a4dda subs r5, 4 | r5 -= 4;
0x000a4ddc add r6, r4 | r6 += r4;
0x000a4dde movw r8, 0x202 | r8 = 0x202;
0x000a4de2 add.w sb, r7, 0x10 | sb = r7 + 0x10;
0x000a4de6 add sl, pc | sl = 0x149d2c;
| do {
0x000a4de8 ldr r0, [r5, 4]! | r0 = *((r5 += 4));
| if (r0 != 0) {
0x000a4dec cbz r0, 0xa4e12 |
0x000a4dee ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000a4df0 bics.w r2, r8, r3 | __asm ("bics.w r2, r8, r3");
0x000a4df2 lsls r3, r0, 8 | r3 = r0 << 8;
| if (r3 == r0) {
0x000a4df4 beq 0xa4eee | goto label_14;
| }
| label_4:
0x000a4df6 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 < r3) {
0x000a4df8 bmi 0xa4e12 | goto label_15;
| }
0x000a4dfa movs r1, 1 | r1 = 1;
0x000a4dfc bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x000a4e00 mov r1, r0 | r1 = r0;
| if (r1 == 0) {
| label_5:
0x000a4e02 cbz r1, 0xa4e12 | goto label_15;
| }
0x000a4e04 mov r0, sl | r0 = sl;
0x000a4e06 bl 0x5cb60 | fcn_0005cb60 ();
0x000a4e0a str.w r0, [sb, r4, lsl 2] | __asm ("str.w r0, [sb, r4, lsl 2]");
0x000a4e0e cmp r0, 0 |
| if (r0 == 0) {
0x000a4e10 beq 0xa4f0c | goto label_16;
| }
| }
| label_15:
0x000a4e12 adds r4, 1 | r4++;
0x000a4e14 cmp r4, r6 |
0x000a4e16 bne 0xa4de8 |
| } while (r4 != r6);
| label_13:
0x000a4e18 ldr.w r2, [fp, 0xc] | r2 = *(arg_ch);
0x000a4e1c add r5, sp, 0x10 | r5 += var_10h_2;
0x000a4e1e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a4e22 movs r3, 0 | r3 = 0;
0x000a4e24 mov r0, r5 | r0 = r5;
0x000a4e26 str r3, [sp, 0x18] | var_18h = r3;
0x000a4e28 ldr r1, [r2, 0x7c] | r1 = *((r2 + 0x7c));
0x000a4e2a movs r2, 7 | r2 = 7;
0x000a4e2c str r3, [sp, 0x20] | var_20h = r3;
0x000a4e2e vstr d16, [sp, 0x10] | __asm ("vstr d16, [sp, 0x10]");
0x000a4e32 str r1, [sp, 0x1c] | var_1ch = r1;
0x000a4e34 ldr r1, [pc, 0x10c] |
0x000a4e36 strh.w r3, [sp, 0x24] | var_24h = r3;
0x000a4e3a add r1, pc | r1 = 0x149d82;
0x000a4e3c bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x000a4e40 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
| if (r2 != 0) {
0x000a4e42 cbz r2, 0xa4e4e |
0x000a4e44 ldr r1, [pc, 0x100] |
0x000a4e46 mov r0, r5 | r0 = r5;
0x000a4e48 add r1, pc | r1 = 0x149d94;
0x000a4e4a bl 0x37e84 | fcn_00037e84 ();
| }
0x000a4e4e ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000a4e52 ldr r6, [sp, 0x20] | r6 = var_20h;
0x000a4e54 ldr.w r8, [sp, 0x18] | r8 = var_18h;
0x000a4e58 ldr r4, [r3] | r4 = *(r3);
0x000a4e5a cmp r4, 0 |
| if (r4 == 0) {
0x000a4e5c beq 0xa4efc | goto label_17;
| }
0x000a4e5e mov r0, r4 | r0 = r4;
0x000a4e60 blx 0x65dc | r0 = strcmp (r0, r1);
0x000a4e64 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a4e68 adds r3, r6, r2 | r3 = r6 + r2;
0x000a4e6a cmp r8, r3 |
| if (r8 < r3) {
0x000a4e6c bls 0xa4f02 | goto label_18;
| }
| if (r2 != 0) {
0x000a4e6e cbz r2, 0xa4e7c |
0x000a4e70 ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x000a4e72 mov r1, r4 | r1 = r4;
0x000a4e74 str r3, [sp, 0x20] | var_20h = r3;
0x000a4e76 add r0, r6 | r0 += r6;
0x000a4e78 blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
| label_6:
0x000a4e7c ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
| if (r2 != 0) {
0x000a4e7e cbz r2, 0xa4e8a |
0x000a4e80 ldr r1, [pc, 0xc8] |
0x000a4e82 mov r0, r5 | r0 = r5;
0x000a4e84 add r1, pc | r1 = 0x149dd4;
0x000a4e86 bl 0x37e84 | fcn_00037e84 ();
| }
0x000a4e8a ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000a4e8c cmp r3, 0 |
| if (r3 == 0) {
0x000a4e8e beq 0xa4f0c | goto label_16;
| }
0x000a4e90 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000a4e92 movs r1, 0 | r1 = 0;
0x000a4e94 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x000a4e96 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x000a4e98 cbz r3, 0xa4ea2 |
0x000a4e9a ldrb.w r3, [sp, 0x25] | r3 = var_25h;
0x000a4e9e lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x000a4ea0 bpl 0xa4f28 | goto label_19;
| }
| }
0x000a4ea2 ldr r5, [sp, 0x14] | r5 = var_14h_2;
| if (r5 == 0) {
| label_8:
0x000a4ea4 cbz r5, 0xa4f0c | goto label_16;
| }
0x000a4ea6 movs r3, 0 | r3 = 0;
0x000a4ea8 adds r2, r7, 4 | r2 = r7 + 4;
0x000a4eaa ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x000a4eae mov r1, r5 | r1 = r5;
0x000a4eb0 str r3, [sp, 8] | var_8h_3 = r3;
0x000a4eb2 str r3, [sp] | *(sp) = r3;
0x000a4eb4 movs r3, 0x80 | r3 = 0x80;
0x000a4eb6 str r2, [sp, 4] | var_4h_4 = r2;
0x000a4eb8 mov.w r2, -1 | r2 = -1;
0x000a4ebc bl 0xa4188 | r0 = fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x000a4ec0 mov r4, r0 | r4 = r0;
0x000a4ec2 mov r0, r5 | r0 = r5;
0x000a4ec4 bl 0x26dbc | fcn_00026dbc (r0);
| if (r4 != 0) {
0x000a4ec8 cbnz r4, 0xa4f10 | goto label_20;
| }
0x000a4eca mov r0, r7 | r0 = r7;
0x000a4ecc bl 0x97248 | fcn_00097248 (r0, r1);
0x000a4ece ldrsh.w r4, [ip, 0x604] | r4 = *((ip + 0x604));
| label_7:
0x000a4ed2 ldr r2, [pc, 0x7c] |
0x000a4ed4 ldr r3, [pc, 0x64] | r3 = *(0xa4f3c);
0x000a4ed6 add r2, pc | r2 = 0x149e2c;
0x000a4ed8 ldr r3, [r2, r3] | r3 = imp.atan;
0x000a4eda ldr r2, [r3] | r2 = imp.atan;
0x000a4edc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a4ede eors r2, r3 | r2 ^= r3;
0x000a4ee0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a4ee4 bne 0xa4f32 | goto label_21;
| }
0x000a4ee6 mov r0, r4 | r0 = r4;
0x000a4ee8 add sp, 0x34 |
0x000a4eea pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x000a4eee ldrb r2, [r0, 0x12] | r2 = *((r0 + 0x12));
0x000a4ef0 cmp r2, 1 |
0x000a4ef2 it eq |
| if (r2 == 1) {
0x000a4ef4 ldreq r1, [r0, 8] | r1 = *((r0 + 8));
| goto label_22;
| }
| if (r2 != 1) {
| label_22:
0x000a4ef6 bne.w 0xa4df6 | goto label_4;
| }
0x000a4efa b 0xa4e02 | goto label_5;
| label_17:
0x000a4efc cmp r6, r8 |
| if (r6 <= r8) {
0x000a4efe blo 0xa4e7c | goto label_6;
| }
0x000a4f00 mov r2, r4 | r2 = r4;
| label_18:
0x000a4f02 mov r1, r4 | r1 = r4;
0x000a4f04 mov r0, r5 | r0 = r5;
0x000a4f06 bl 0x3bedc | fcn_0003bedc (r0, r1, r2, r3, r4, r5, r6);
0x000a4f0a b 0xa4e7c | goto label_6;
| label_16:
0x000a4f0c movs r4, 7 | r4 = 7;
0x000a4f0e b 0xa4ed2 | goto label_7;
| label_20:
0x000a4f10 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x000a4f14 bl 0x54630 | r0 = fcn_00054630 (r0);
0x000a4f18 mov r1, r0 | r1 = r0;
0x000a4f1a ldr r0, [pc, 0x38] |
0x000a4f1c add r0, pc | r0 = 0x149e76;
0x000a4f1e bl 0x5cb60 | fcn_0005cb60 ();
0x000a4f22 str.w r0, [fp, 8] | __asm ("str.w r0, [arg_48h]");
0x000a4f26 b 0xa4ed2 | goto label_7;
| label_19:
0x000a4f28 mov r0, r5 | r0 = r5;
0x000a4f2a bl 0x39478 | r0 = fcn_00039478 (r0);
0x000a4f2e mov r5, r0 | r5 = r0;
0x000a4f30 b 0xa4ea4 | goto label_8;
| label_21:
0x000a4f32 blx 0x6430 | fcn_00006430 ();
0x000a4f36 nop |
0x000a4f38 str r0, [r0, r0] | *((r0 + r0)) = r0;
0x000a4f3a movs r4, r0 | r4 = r0;
0x000a4f3c lsls r4, r6, 8 | r4 = r6 << 8;
0x000a4f3e movs r0, r0 |
0x000a4f40 movs r3, 0x8a | r3 = 0x8a;
0x000a4f42 movs r2, r0 | r2 = r0;
0x000a4f44 adds r2, r7, r2 | r2 = r7 + r2;
0x000a4f46 movs r3, r0 | r3 = r0;
0x000a4f48 adds r4, r6, r2 | r4 = r6 + r2;
0x000a4f4a movs r3, r0 | r3 = r0;
0x000a4f4c ldrsh r0, [r1, r4] | r0 = *((r1 + r4));
0x000a4f4e movs r2, r0 | r2 = r0;
0x000a4f50 ldr r6, [pc, 0x308] | r6 = *(0xa525c);
0x000a4f52 movs r4, r0 | r4 = r0;
0x000a4f54 movs r2, 0x54 | r2 = 0x54;
0x000a4f56 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xa50ec */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a50ec () | void fcn_000a50ec (int16_t arg_0h, int16_t arg_4h, int16_t arg_9h, int16_t arg_ah, int16_t arg_ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h_4;
| int16_t var_14h_4;
| int16_t var_18h_3;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_2ch_2;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_40h;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a50ec svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000a50f0 mov r8, r2 | r8 = r2;
0x000a50f2 ldr.w r2, [pc, 0x5b0] |
0x000a50f6 mov r6, r3 | r6 = r3;
0x000a50f8 mov r4, r1 | r4 = r1;
0x000a50fa mov r5, r0 | r5 = r0;
0x000a50fc ldr.w r3, [pc, 0x5a8] | r3 = *(0xa56a8);
0x000a5100 vpush {d8, d9} | __asm ("vpush {d8, d9}");
0x000a5104 add r2, pc | r2 = 0x14a7ae;
0x000a5106 ldrb.w r1, [r1, 0x55] | r1 = *((r1 + 0x55));
0x000a510a sub sp, 0x6c |
0x000a510c ldr r3, [r2, r3] |
0x000a510e ldr r3, [r3] | r3 = imp.atan;
0x000a5110 str r3, [sp, 0x64] | var_64h = r3;
0x000a5112 mov.w r3, 0 | r3 = 0;
| if (r1 == 0) {
0x000a5116 cbz r1, 0xa5188 | goto label_17;
| }
0x000a5118 ldr.w r3, [r4, 0xb8] | r3 = *((r4 + 0xb8));
0x000a511c cmp r3, 1 |
| if (r3 > 1) {
0x000a511e bgt 0xa5180 | goto label_18;
| }
0x000a5120 ldr.w fp, [r4, 0x3c] | fp = *((r4 + 0x3c));
| if (r6 == 0) {
0x000a5124 cbz r6, 0xa5190 | goto label_19;
| }
0x000a5126 ldrh r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000a5128 ldr.w r3, [pc, 0x580] |
0x000a512c and r1, r2, 0x3f | r1 = r2 & 0x3f;
0x000a5130 add r3, pc | r3 = 0x14a7e0;
0x000a5132 add r3, r1 | r3 += r1;
0x000a5134 ldrb.w r3, [r3, 0x258] | r3 = *((r3 + 0x258));
0x000a5138 cmp r3, 3 |
| if (r3 == 3) {
0x000a513a beq.w 0xa5412 | goto label_20;
| }
0x000a513e ldr.w r1, [pc, 0x570] |
0x000a5142 add r1, pc | r1 = 0x14a7f8;
| do {
| label_0:
0x000a5144 mov r0, r4 | r0 = r4;
0x000a5146 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x000a514a ldr r1, [r5] | r1 = *(r5);
0x000a514c mov r6, r0 | r6 = r0;
| if (r1 != 0) {
0x000a514e cbz r1, 0xa5156 |
0x000a5150 mov r0, r4 | r0 = r4;
0x000a5152 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000a5156 movs r7, 1 | r7 = 1;
0x000a5158 str r6, [r5] | *(r5) = r6;
| label_1:
0x000a515a ldr.w r2, [pc, 0x558] |
0x000a515e ldr.w r3, [pc, 0x548] | r3 = *(0xa56aa);
0x000a5162 add r2, pc | r2 = 0x14a81c;
0x000a5164 ldr r3, [r2, r3] | r3 = imp.atan;
0x000a5166 ldr r2, [r3] | r2 = imp.atan;
0x000a5168 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000a516a eors r2, r3 | r2 ^= r3;
0x000a516c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a5170 bne.w 0xa54da | goto label_21;
| }
0x000a5174 mov r0, r7 | r0 = r7;
0x000a5176 add sp, 0x6c |
0x000a5178 vpop {d8, d9} | __asm ("vpop {d8, d9}");
0x000a517c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x000a5180 ldr.w r1, [pc, 0x534] |
0x000a5184 add r1, pc | r1 = 0x14a840;
0x000a5186 b 0xa5144 |
| } while (1);
| label_17:
0x000a5188 ldr.w r1, [pc, 0x530] |
0x000a518c add r1, pc | r1 = 0x14a84c;
0x000a518e b 0xa5144 | goto label_0;
| label_19:
0x000a5190 ldr.w r3, [pc, 0x52c] |
0x000a5194 add r3, pc | r3 = 0x14a858;
| label_3:
0x000a5196 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000a5198 lsl.w sl, r8, 4 | sl = r8 << 4;
0x000a519c movs r1, 0 | r1 = 0;
0x000a519e ldrb.w r0, [r4, 0x5e] | r0 = *((r4 + 0x5e));
0x000a51a2 strb.w r1, [r4, 0x5e] | *((r4 + 0x5e)) = r1;
0x000a51a6 add.w r1, r2, sl | r1 = r2 + sl;
0x000a51aa ldr.w r2, [r2, sl] | r2 = *((r2 + sl));
0x000a51ae ldr.w sb, [r1, 4] | sb = *((r1 + 4));
0x000a51b2 str r0, [sp, 0xc] | *(arg_ch) = r0;
0x000a51b4 str r2, [sp, 0x20] | var_20h_2 = r2;
0x000a51b6 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x000a51b8 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x000a51ba ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x000a51bc str r2, [sp, 4] | *(arg_4h) = r2;
0x000a51be ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x000a51c2 mov r7, r1 | r7 = r1;
0x000a51c4 str r1, [sp, 8] | var_8h_2 = r1;
0x000a51c6 vldr d8, [r4, 0x68] | __asm ("vldr d8, [r4, 0x68]");
0x000a51ca vldr d9, [r4, 0x70] | __asm ("vldr d9, [r4, 0x70]");
0x000a51ce ldr r1, [r2] | r1 = *(r2);
0x000a51d0 bic r2, r0, 0x10000000 | r2 = BIT_MASK (r0, 0x10000000);
0x000a51d4 bic r2, r2, 0x5000 | r2 = BIT_MASK (r2, 0x5000);
0x000a51d8 str r0, [sp, 0x10] | var_10h_4 = r0;
0x000a51da orr r2, r2, 0x200 | r2 |= 0x200;
0x000a51de orr r2, r2, 1 | r2 |= 1;
0x000a51e2 str r2, [r4, 0x20] | *((r4 + 0x20)) = r2;
0x000a51e4 orr r2, r7, 6 | r2 = r7 | 6;
0x000a51e8 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x000a51ea ldr r2, [sp, 4] | r2 = *(arg_4h);
0x000a51ec bic r2, r2, 1 | r2 = BIT_MASK (r2, 1);
0x000a51f0 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x000a51f2 ldrb r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x000a51f4 cmp r2, 0 |
| if (r2 != 0) {
0x000a51f6 bne.w 0xa540c | goto label_22;
| }
0x000a51fa ldrb r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x000a51fc subs r2, 0 |
0x000a51fe it ne |
| if (r2 == 0) {
0x000a5200 movne r2, 1 | r2 = 1;
| }
0x000a5202 str r2, [sp, 0x1c] | var_1ch_2 = r2;
| label_2:
0x000a5204 ldr.w r2, [pc, 0x4bc] |
0x000a5208 mov r1, r5 | r1 = r5;
0x000a520a ldr r7, [r4, 0x14] | r7 = *((r4 + 0x14));
0x000a520c mov r0, r4 | r0 = r4;
0x000a520e add r2, pc | r2 = 0x14a8d6;
0x000a5210 str r7, [sp, 0x14] | var_14h_4 = r7;
0x000a5212 bl 0xa5078 | fcn_000a5078 (r0, r1);
0x000a5216 str.w fp, [r4, 0x3c] | __asm ("str.w fp, [r4, 0x3c]");
0x000a521a mov r7, r0 | r7 = r0;
0x000a521c cmp r0, 0 |
| if (r0 != 0) {
0x000a521e bne.w 0xa5436 | goto label_23;
| }
0x000a5222 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000a5224 ldr r7, [sp, 0x14] | r7 = var_14h_4;
0x000a5226 add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x000a522a ldr.w fp, [r3, 4] | fp = *((r3 + 4));
0x000a522e str r3, [sp, 0x18] | var_18h_3 = r3;
| if (r6 != 0) {
0x000a5230 cbz r6, 0xa5268 |
0x000a5232 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000a5236 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a523a ldr r3, [r3] | r3 = *(r3);
0x000a523c ldr r0, [r3, 0x40] | r0 = *((r3 + 0x40));
0x000a523e vstr d16, [sp, 0x30] | __asm ("vstr d16, [sp, 0x30]");
0x000a5242 ldr r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x000a5244 cbz r3, 0xa5260 |
0x000a5246 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000a5248 add r1, sp, 0x30 | r1 += var_30h;
0x000a524a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x000a524c cmp r0, 0 |
| if (r0 != 0) {
0x000a524e bne.w 0xa546a | goto label_24;
| }
0x000a5252 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [var_30h]");
0x000a5256 cmp r2, 1 |
0x000a5258 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 >= 1) {
0x000a525c bge.w 0xa546a | goto label_24;
| }
| }
0x000a5260 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000a5262 orr r3, r3, 8 | r3 |= 8;
0x000a5266 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| }
0x000a5268 mov r0, sb | r0 = sb;
0x000a526a bl 0x2f638 | fcn_0002f638 (r0, r1);
0x000a526e ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x000a5270 str r0, [sp, 0x24] | var_24h_2 = r0;
0x000a5272 cmp r3, 0 |
| if (r3 != 0) {
0x000a5274 bne.w 0xa5492 | goto label_25;
| }
| label_7:
0x000a5278 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000a527a mov r0, fp | r0 = fp;
0x000a527c add r3, sl | r3 += sl;
0x000a527e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a5280 ldr r1, [r3, 0x50] | r1 = *((r3 + 0x50));
0x000a5282 bl 0x30538 | fcn_00030538 (r0, r1);
0x000a5286 movs r1, 0 | r1 = 0;
0x000a5288 mov r0, sb | r0 = sb;
0x000a528a bl 0x30678 | r0 = fcn_00030678 (r0, r1);
0x000a528e mov r1, r0 | r1 = r0;
0x000a5290 mov r0, fp | r0 = fp;
0x000a5292 bl 0x30678 | fcn_00030678 (r0, r1);
0x000a5296 movs r1, 0x21 | r1 = 0x21;
0x000a5298 mov r0, fp | r0 = fp;
0x000a529a bl 0x31788 | fcn_00031788 (r0, r1);
0x000a529e ldr.w r2, [pc, 0x428] |
0x000a52a2 mov r1, r5 | r1 = r5;
0x000a52a4 mov r0, r4 | r0 = r4;
0x000a52a6 add r2, pc | r2 = 0x14a974;
0x000a52a8 bl 0xa4f58 | r0 = fcn_000a4f58 (r0, r1, r2);
0x000a52ac mov r7, r0 | r7 = r0;
0x000a52ae cmp r0, 0 |
| if (r0 != 0) {
0x000a52b0 bne.w 0xa53c4 | goto label_4;
| }
0x000a52b4 clz r8, r6 | r8 &= r6;
0x000a52b8 mov r2, r0 | r2 = r0;
0x000a52ba lsr.w r8, r8, 5 | r8 >>= 5;
0x000a52be mov r0, sb | r0 = sb;
0x000a52c0 lsl.w r1, r8, 1 | r1 = r8 << 1;
0x000a52c4 bl 0x76d50 | r0 = fcn_00076d50 (r0, r1, r2, r3);
0x000a52c8 mov r7, r0 | r7 = r0;
0x000a52ca cmp r0, 0 |
| if (r0 != 0) {
0x000a52cc bne 0xa53c4 | goto label_4;
| }
0x000a52ce ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x000a52d2 ldr r3, [r2] | r3 = *(r2);
0x000a52d4 ldrb r1, [r3, 5] | r1 = *((r3 + 5));
0x000a52d6 cmp r1, 5 |
0x000a52d8 ite ne |
| if (r1 == 5) {
0x000a52da movne r3, 0 | r3 = 0;
| }
| if (r1 != 5) {
0x000a52dc andeq r3, r8, 1 | r3 = r8 & 1;
| }
0x000a52e0 cmp r3, 0 |
| if (r3 != 0) {
0x000a52e2 bne.w 0xa54c8 | goto label_26;
| }
| label_9:
0x000a52e6 ldr r1, [r2, 0x24] | r1 = *((r2 + 0x24));
0x000a52e8 movs r3, 0 | r3 = 0;
0x000a52ea ldr r2, [sp, 0x24] | r2 = var_24h_2;
0x000a52ec mov r0, fp | r0 = fp;
0x000a52ee bl 0x3474c | r0 = fcn_0003474c (r0, r1, r2, r3);
0x000a52f2 cmp r0, 0 |
| if (r0 != 0) {
0x000a52f4 bne.w 0xa54c4 | goto label_27;
| }
0x000a52f8 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x000a52fa cmp r3, 0 |
| if (r3 == 0) {
0x000a52fc beq.w 0xa54b2 | goto label_28;
| }
| label_8:
0x000a5300 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x000a5304 cmp r3, 0 |
| if (r3 != 0) {
0x000a5306 bne.w 0xa54c4 | goto label_27;
| }
0x000a530a ldrsb.w r1, [r4, 0x5a] | r1 = *((r4 + 0x5a));
0x000a530e cmp r1, 0 |
| if (r1 < 0) {
0x000a5310 blt.w 0xa54cc | goto label_29;
| }
| label_10:
0x000a5314 mov r0, fp | r0 = fp;
0x000a5316 bl 0x30130 | fcn_00030130 (r0, r1);
0x000a531a ldr r3, [sp, 0x14] | r3 = var_14h_4;
0x000a531c mov r1, r5 | r1 = r5;
0x000a531e ldr.w r8, [sp, 0x20] | r8 = var_20h_2;
0x000a5322 mov r0, r4 | r0 = r4;
0x000a5324 ldr r2, [pc, 0x3a4] |
0x000a5326 strb.w r3, [r4, 0xb0] | *((r4 + 0xb0)) = r3;
0x000a532a mov r3, r8 | r3 = r8;
0x000a532c add r2, pc | r2 = 0x14a9fc;
0x000a532e bl 0xa5078 | r0 = fcn_000a5078 (r0, r1);
0x000a5332 mov r7, r0 | r7 = r0;
0x000a5334 cmp r0, 0 |
| if (r0 != 0) {
0x000a5336 bne 0xa53c4 | goto label_4;
| }
0x000a5338 ldr r2, [pc, 0x394] |
0x000a533a mov r3, r8 | r3 = r8;
0x000a533c mov r1, r5 | r1 = r5;
0x000a533e mov r0, r4 | r0 = r4;
0x000a5340 add r2, pc | r2 = 0x14aa14;
0x000a5342 bl 0xa5078 | r0 = fcn_000a5078 (r0, r1);
0x000a5346 mov r7, r0 | r7 = r0;
0x000a5348 cmp r0, 0 |
| if (r0 != 0) {
0x000a534a bne 0xa53c4 | goto label_4;
| }
0x000a534c ldr r2, [pc, 0x384] |
0x000a534e mov r3, r8 | r3 = r8;
0x000a5350 strb.w r0, [r4, 0xb0] | *((r4 + 0xb0)) = r0;
0x000a5354 mov r1, r5 | r1 = r5;
0x000a5356 mov r0, r4 | r0 = r4;
0x000a5358 add r2, pc | r2 = 0x14aa30;
0x000a535a bl 0xa5078 | fcn_000a5078 (r0, r1);
0x000a535e ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000a5360 mov r7, r0 | r7 = r0;
0x000a5362 bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x000a5366 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r0 != 0) {
0x000a5368 cbnz r0, 0xa53c4 | goto label_4;
| }
0x000a536a ldr r2, [pc, 0x36c] |
0x000a536c mov r3, r8 | r3 = r8;
0x000a536e mov r1, r5 | r1 = r5;
0x000a5370 mov r0, r4 | r0 = r4;
0x000a5372 add r2, pc | r2 = 0x14aa50;
0x000a5374 bl 0xa5078 | r0 = fcn_000a5078 (r0, r1);
0x000a5378 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000a537a cbnz r0, 0xa53c4 | goto label_4;
| }
0x000a537c ldr r3, [pc, 0x35c] |
0x000a537e add r5, sp, 0x2c | r5 += var_2ch_2;
0x000a5380 add r3, pc | r3 = 0x14aa60;
0x000a5382 add.w sl, r3, 0xde0 | sl = r3 + 0xde0;
0x000a5386 addw r8, r3, 0xdea | __asm ("addw r8, r3, 0xdea");
| do {
0x000a538a ldrb.w r7, [sl] | r7 = *(sl);
0x000a538e mov r2, r5 | r2 = r5;
0x000a5390 mov r0, sb | r0 = sb;
0x000a5392 mov r1, r7 | r1 = r7;
0x000a5394 bl 0x30360 | fcn_00030360 (r0, r1, r2);
0x000a5398 ldrb.w r2, [sl, 1] | r2 = *((sl + 1));
0x000a539c mov r1, r7 | r1 = r7;
0x000a539e ldr r3, [sp, 0x2c] | r3 = var_2ch_2;
0x000a53a0 mov r0, fp | r0 = fp;
0x000a53a2 add r2, r3 | r2 += r3;
0x000a53a4 bl 0x66b5c | r0 = fcn_00066b5c (r0, r1, r2);
0x000a53a8 cmp r0, 0 |
| if (r0 != 0) {
0x000a53aa bne.w 0xa54d6 | goto label_30;
| }
0x000a53ae add.w sl, sl, 2 | sl += 2;
0x000a53b2 cmp r8, sl |
0x000a53b4 bne 0xa538a |
| } while (r8 != sl);
0x000a53b6 cmp r6, 0 |
| if (r6 == 0) {
0x000a53b8 beq.w 0xa54de | goto label_31;
| }
0x000a53bc mov r0, fp | r0 = fp;
0x000a53be bl 0x767d0 | r0 = fcn_000767d0 (r0, r1);
0x000a53c2 mov r7, r0 | r7 = r0;
| label_4:
0x000a53c4 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000a53c6 movs r5, 0 | r5 = 0;
0x000a53c8 mov r2, r5 | r2 = r5;
0x000a53ca mov.w r1, -1 | r1 = -1;
0x000a53ce mov r0, sb | r0 = sb;
0x000a53d0 vstr d8, [r4, 0x68] | __asm ("vstr d8, [r4, 0x68]");
0x000a53d4 vstr d9, [r4, 0x70] | __asm ("vstr d9, [r4, 0x70]");
0x000a53d8 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000a53da ldr r3, [sp, 0x10] | r3 = var_10h_4;
0x000a53dc strb.w r5, [r4, 0xb0] | *((r4 + 0xb0)) = r5;
0x000a53e0 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x000a53e2 ldr r3, [sp, 4] | r3 = *(arg_4h);
0x000a53e4 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000a53e6 ldr r3, [sp, 0xc] | r3 = *(arg_ch);
0x000a53e8 strb.w r3, [r4, 0x5e] | *((r4 + 0x5e)) = r3;
0x000a53ec movs r3, 1 | r3 = 1;
0x000a53ee bl 0x3474c | fcn_0003474c (r0, r1, r2, r3);
0x000a53f2 ldr r6, [sp, 0x18] | r6 = var_18h_3;
0x000a53f4 movs r3, 1 | r3 = 1;
0x000a53f6 strb.w r3, [r4, 0x55] | *((r4 + 0x55)) = r3;
0x000a53fa ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000a53fc bl 0x78bf0 | fcn_00078bf0 (r0);
0x000a5400 str r5, [r6, 4] | *((r6 + 4)) = r5;
0x000a5402 str r5, [r6, 0xc] | *((r6 + 0xc)) = r5;
| do {
0x000a5404 mov r0, r4 | r0 = r4;
0x000a5406 bl 0x31440 | fcn_00031440 (r0);
0x000a540a b 0xa515a | goto label_1;
| label_22:
0x000a540c movs r2, 1 | r2 = 1;
0x000a540e str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x000a5410 b 0xa5204 | goto label_2;
| label_20:
0x000a5412 movw r3, 0x202 | r3 = 0x202;
0x000a5416 bics r3, r2 | __asm ("bics r3, r2");
| if (r2 == 1) {
0x000a5418 beq 0xa5486 | goto label_32;
| }
| label_5:
0x000a541a lsls r3, r2, 0x1f | r3 = r2 << 0x1f;
| if (r3 < r2) {
0x000a541c bmi 0xa54ac | goto label_33;
| }
0x000a541e movs r1, 1 | r1 = 1;
0x000a5420 mov r0, r6 | r0 = r6;
0x000a5422 bl 0x3da00 | fcn_0003da00 (r0, r1);
0x000a5426 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x000a5428 mov r3, r0 | r3 = r0;
| label_6:
0x000a542a bic r2, r2, 1 | r2 = BIT_MASK (r2, 1);
0x000a542e orr r2, r2, 6 | r2 |= 6;
0x000a5432 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x000a5434 b 0xa5196 | goto label_3;
| label_23:
0x000a5436 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000a5438 mov r0, sb | r0 = sb;
0x000a543a ldr r2, [sp, 0xc] | r2 = *(arg_ch);
0x000a543c mov.w r1, -1 | r1 = -1;
0x000a5440 vstr d8, [r4, 0x68] | __asm ("vstr d8, [r4, 0x68]");
0x000a5444 vstr d9, [r4, 0x70] | __asm ("vstr d9, [r4, 0x70]");
0x000a5448 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x000a544a ldr r3, [sp, 0x10] | r3 = var_10h_4;
0x000a544c strb.w r2, [r4, 0x5e] | *((r4 + 0x5e)) = r2;
0x000a5450 movs r2, 0 | r2 = 0;
0x000a5452 strb.w r2, [r4, 0xb0] | *((r4 + 0xb0)) = r2;
0x000a5456 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x000a5458 ldr r3, [sp, 4] | r3 = *(arg_4h);
0x000a545a str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000a545c movs r3, 1 | r3 = 1;
0x000a545e bl 0x3474c | fcn_0003474c (r0, r1, r2, r3);
0x000a5462 movs r3, 1 | r3 = 1;
0x000a5464 strb.w r3, [r4, 0x55] | *((r4 + 0x55)) = r3;
0x000a5468 b 0xa5404 |
| } while (1);
| label_24:
0x000a546a ldr r1, [pc, 0x274] |
0x000a546c mov r0, r4 | r0 = r4;
0x000a546e add r1, pc | r1 = 0x14ab54;
0x000a5470 bl 0x392f0 | fcn_000392f0 (r0, r1);
0x000a5474 ldr r1, [r5] | r1 = *(r5);
0x000a5476 mov r6, r0 | r6 = r0;
| if (r1 != 0) {
0x000a5478 cbz r1, 0xa5480 |
0x000a547a mov r0, r4 | r0 = r4;
0x000a547c bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000a5480 movs r7, 1 | r7 = 1;
0x000a5482 str r6, [r5] | *(r5) = r6;
0x000a5484 b 0xa53c4 | goto label_4;
| label_32:
0x000a5486 ldrb r3, [r6, 0x12] | r3 = *((r6 + 0x12));
0x000a5488 cmp r3, 1 |
| if (r3 != 1) {
0x000a548a bne 0xa541a | goto label_5;
| }
0x000a548c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000a548e mov r2, fp | r2 = fp;
0x000a5490 b 0xa542a | goto label_6;
| label_25:
0x000a5492 add r3, sp, 0x2c | r3 += var_2ch_2;
0x000a5494 mov r1, r8 | r1 = r8;
0x000a5496 add r2, sp, 0x30 | r2 += var_30h;
0x000a5498 mov r0, r4 | r0 = r4;
0x000a549a bl 0x57ba8 | fcn_00057ba8 (r0, r1, r2, r3);
0x000a549e ldr r3, [sp, 0x2c] | r3 = var_2ch_2;
0x000a54a0 cmp r3, 0 |
| if (r3 == 0) {
0x000a54a2 beq.w 0xa5278 | goto label_7;
| }
0x000a54a6 movs r3, 0 | r3 = 0;
0x000a54a8 str r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x000a54aa b 0xa5278 | goto label_7;
| label_33:
0x000a54ac mov r2, fp | r2 = fp;
0x000a54ae movs r3, 0 | r3 = 0;
0x000a54b0 b 0xa542a | goto label_6;
| label_28:
0x000a54b2 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x000a54b4 mov r0, fp | r0 = fp;
0x000a54b6 ldr r2, [sp, 0x24] | r2 = var_24h_2;
0x000a54b8 ldr r1, [r4, 0x64] | r1 = *((r4 + 0x64));
0x000a54ba bl 0x3474c | r0 = fcn_0003474c (r0, r1, r2, r3);
0x000a54be cmp r0, 0 |
| if (r0 == 0) {
0x000a54c0 beq.w 0xa5300 | goto label_8;
| }
| label_27:
0x000a54c4 movs r7, 7 | r7 = 7;
0x000a54c6 b 0xa53c4 | goto label_4;
| label_26:
0x000a54c8 str r0, [r4, 0x64] | *((r4 + 0x64)) = r0;
0x000a54ca b 0xa52e6 | goto label_9;
| label_29:
0x000a54cc mov r0, sb | r0 = sb;
0x000a54ce bl 0x2f6a4 | r0 = fcn_0002f6a4 (r0);
0x000a54d2 mov r1, r0 | r1 = r0;
0x000a54d4 b 0xa5314 | goto label_10;
| label_30:
0x000a54d6 mov r7, r0 | r7 = r0;
0x000a54d8 b 0xa53c4 | goto label_4;
| label_21:
0x000a54da blx 0x6430 | fcn_00006430 ();
| label_31:
0x000a54de ldrb.w r3, [sb, 9] | r3 = *((sb + 9));
| if (r3 != 0) {
0x000a54e2 cbz r3, 0xa54fa |
0x000a54e4 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000a54e8 adds r3, 1 | r3++;
0x000a54ea str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
0x000a54ee ldrb.w r3, [sb, 0xa] | r3 = *((sb + 0xa));
| if (r3 != 0) {
0x000a54f2 cbnz r3, 0xa54fa | goto label_34;
| }
0x000a54f4 mov r0, sb | r0 = sb;
0x000a54f6 bl 0x2adac | fcn_0002adac (r0);
| }
| label_34:
0x000a54fa ldrb.w r3, [fp, 9] | r3 = *(arg_9h);
| if (r3 != 0) {
0x000a54fe cbz r3, 0xa5516 |
0x000a5500 ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x000a5504 adds r3, 1 | r3++;
0x000a5506 str.w r3, [fp, 0xc] | __asm ("str.w r3, [arg_ch]");
0x000a550a ldrb.w r3, [fp, 0xa] | r3 = *(arg_ah);
| if (r3 != 0) {
0x000a550e cbnz r3, 0xa5516 | goto label_35;
| }
0x000a5510 mov r0, fp | r0 = fp;
0x000a5512 bl 0x2adac | fcn_0002adac (r0);
| }
| label_35:
0x000a5516 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000a551a ldr r3, [r3] | r3 = *(r3);
0x000a551c ldr r0, [r3, 0x40] | r0 = *((r3 + 0x40));
0x000a551e ldr r3, [r0] | r3 = *(r0);
0x000a5520 cmp r3, 0 |
| if (r3 == 0) {
0x000a5522 beq.w 0xa565a | goto label_36;
| }
0x000a5526 ldr.w r6, [fp, 4] | r6 = *(arg_4h);
0x000a552a add r5, sp, 0x30 | r5 += var_30h;
0x000a552c ldr.w r8, [r3, 0x28] | r8 = *((r3 + 0x28));
0x000a5530 mov r2, r5 | r2 = r5;
0x000a5532 movs r1, 0xb | r1 = 0xb;
0x000a5534 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000a5536 ldr r6, [r6, 0x30] | r6 = *((r6 + 0x30));
0x000a5538 asrs r7, r3, 0x1f | r7 = r3 >> 0x1f;
0x000a553a umull ip, r3, r3, r6 | ip:r3 = r3 * r6;
0x000a553e mla r3, r6, r7, r3 | __asm ("mla r3, r6, r7, r3");
0x000a5542 strd ip, r3, [sp, 0x30] | __asm ("strd ip, r3, [sp, 0x30]");
0x000a5546 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x000a5548 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000a554a cbz r0, 0xa5550 |
0x000a554c cmp r0, 0xc |
| if (r0 != 0xc) {
0x000a554e bne 0xa5604 | goto label_14;
| }
| }
| label_13:
0x000a5550 movs r2, 0x30 | r2 = 0x30;
0x000a5552 movs r1, 0 | r1 = 0;
0x000a5554 mov r0, r5 | r0 = r5;
0x000a5556 blx 0x62ec | fcn_000062ec ();
0x000a555a ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000a555e movs r1, 1 | r1 = 1;
0x000a5560 ldr r0, [r3] | r0 = *(r3);
0x000a5562 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000a5566 ldr r3, [r3] | r3 = *(r3);
0x000a5568 ldrsh.w r2, [r3, 0x96] | r2 = *((r3 + 0x96));
0x000a556c ldr.w r3, [fp] | r3 = *(fp);
0x000a5570 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x000a5574 strd r3, fp, [sp, 0x44] | __asm ("strd r3, fp, [arg_0hx44]");
0x000a5578 ldrsh.w r3, [r0, 0x96] | r3 = *((r0 + 0x96));
0x000a557c str r1, [sp, 0x40] | var_40h = r1;
0x000a557e cmp r3, r2 |
| if (r3 != r2) {
0x000a5580 beq 0xa5596 |
0x000a5582 ldr.w r3, [r0, 0xe4] | r3 = *((r0 + 0xe4));
0x000a5586 strh.w r2, [r0, 0x96] | *((r0 + 0x96)) = r2;
| if (r3 == 0) {
0x000a558a cbz r3, 0xa5596 | goto label_37;
| }
0x000a558c ldr.w r1, [r0, 0xa8] | r1 = *((r0 + 0xa8));
0x000a5590 ldr.w r0, [r0, 0xec] | r0 = *((r0 + 0xec));
0x000a5594 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
| }
| label_37:
0x000a5596 mvn r1, 0x80000000 | r1 = ~0x80000000;
0x000a559a mov r0, r5 | r0 = r5;
0x000a559c bl 0x77800 | fcn_00077800 (r0, r1);
0x000a55a0 mov r0, r5 | r0 = r5;
0x000a55a2 bl 0x7a2f8 | r0 = fcn_0007a2f8 (r0);
0x000a55a6 mov r7, r0 | r7 = r0;
0x000a55a8 cmp r0, 0 |
| if (r0 != 0) {
0x000a55aa bne 0xa565e | goto label_38;
| }
0x000a55ac ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x000a55b0 ldrh r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x000a55b2 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x000a55b6 strh r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
0x000a55b8 ldrb.w r3, [fp, 9] | r3 = *(arg_9h);
| if (r3 != 0) {
0x000a55bc cbnz r3, 0xa562c | goto label_39;
| }
0x000a55be ldrb.w r3, [sb, 9] | r3 = *((sb + 9));
0x000a55c2 cmp r3, 0 |
| if (r3 != 0) {
0x000a55c4 bne 0xa567e | goto label_40;
| }
| label_11:
0x000a55c6 mov r0, fp | r0 = fp;
0x000a55c8 bl 0x767d0 | r0 = fcn_000767d0 (r0, r1);
0x000a55cc mov r7, r0 | r7 = r0;
0x000a55ce cmp r0, 0 |
| if (r0 != 0) {
0x000a55d0 bne.w 0xa53c4 | goto label_4;
| }
0x000a55d4 mov r0, fp | r0 = fp;
0x000a55d6 bl 0x2f6a4 | r0 = fcn_0002f6a4 (r0);
0x000a55da mov r1, r0 | r1 = r0;
0x000a55dc mov r0, sb | r0 = sb;
0x000a55de bl 0x30130 | fcn_00030130 (r0, r1);
0x000a55e2 mov r0, fp | r0 = fp;
0x000a55e4 bl 0x2f638 | fcn_0002f638 (r0, r1);
0x000a55e8 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000a55ec mov r2, r0 | r2 = r0;
0x000a55ee mov r0, sb | r0 = sb;
0x000a55f0 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x000a55f2 movs r3, 1 | r3 = 1;
0x000a55f4 bl 0x3474c | r0 = fcn_0003474c (r0, r1, r2, r3);
0x000a55f8 mov r7, r0 | r7 = r0;
0x000a55fa b 0xa53c4 | goto label_4;
| label_15:
0x000a55fc ldr.w r0, [r3, 0xf4] | r0 = *((r3 + 0xf4));
0x000a5600 bl 0x2d040 | fcn_0002d040 (r0, r1);
| label_14:
0x000a5604 ldrb.w r3, [fp, 9] | r3 = *(arg_9h);
| if (r3 != 0) {
0x000a5608 cbnz r3, 0xa562c | goto label_39;
| }
0x000a560a ldrb.w r3, [sb, 9] | r3 = *((sb + 9));
0x000a560e cmp r3, 0 |
| if (r3 == 0) {
0x000a5610 beq.w 0xa53c4 | goto label_4;
| }
0x000a5614 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000a5618 subs r3, 1 | r3--;
0x000a561a str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
0x000a561e cmp r3, 0 |
| if (r3 != 0) {
0x000a5620 bne.w 0xa53c4 | goto label_4;
| }
0x000a5624 mov r0, sb | r0 = sb;
0x000a5626 bl 0x22944 | fcn_00022944 (r0);
0x000a562a b 0xa53c4 | goto label_4;
| label_39:
0x000a562c ldr.w r3, [fp, 0xc] | r3 = *(arg_ch);
0x000a5630 subs r3, 1 | r3--;
0x000a5632 str.w r3, [fp, 0xc] | __asm ("str.w r3, [arg_ch]");
| if (r3 == 0) {
0x000a5636 cbz r3, 0xa5652 | goto label_41;
| }
| label_12:
0x000a5638 ldrb.w r3, [sb, 9] | r3 = *((sb + 9));
| if (r3 != 0) {
0x000a563c cbz r3, 0xa564a |
0x000a563e ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000a5642 subs r3, 1 | r3--;
0x000a5644 str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
| if (r3 == 0) {
0x000a5648 cbz r3, 0xa5694 | goto label_42;
| }
| }
0x000a564a cmp r7, 0 |
| if (r7 != 0) {
0x000a564c bne.w 0xa53c4 | goto label_4;
| }
0x000a5650 b 0xa55c6 | goto label_11;
| label_41:
0x000a5652 mov r0, fp | r0 = fp;
0x000a5654 bl 0x22944 | fcn_00022944 (r0);
0x000a5658 b 0xa5638 | goto label_12;
| label_36:
0x000a565a add r5, sp, 0x30 | r5 += var_30h;
0x000a565c b 0xa5550 | goto label_13;
| label_38:
0x000a565e ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a5660 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5662 ldr r3, [r3] | r3 = *(r3);
0x000a5664 ldrb r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000a5666 cmp r2, 0 |
| if (r2 != 0) {
0x000a5668 bne 0xa5604 | goto label_14;
| }
0x000a566a ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x000a566c ldr r1, [r3, 0x60] | r1 = *((r3 + 0x60));
0x000a566e adds r2, 1 | r2++;
0x000a5670 str r2, [r3, 0x6c] | *((r3 + 0x6c)) = r2;
0x000a5672 movs r2, 1 | r2 = 1;
| label_16:
0x000a5674 cmp r1, 0 |
| if (r1 == 0) {
0x000a5676 beq 0xa55fc | goto label_15;
| }
0x000a5678 str r2, [r1, 0x10] | *((r1 + 0x10)) = r2;
0x000a567a ldr r1, [r1, 0x2c] | r1 = *((r1 + 0x2c));
0x000a567c b 0xa5674 | goto label_16;
| label_40:
0x000a567e ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000a5682 subs r3, 1 | r3--;
0x000a5684 str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
0x000a5688 cmp r3, 0 |
| if (r3 != 0) {
0x000a568a bne 0xa55c6 | goto label_11;
| }
0x000a568c mov r0, sb | r0 = sb;
0x000a568e bl 0x22944 | fcn_00022944 (r0);
0x000a5692 b 0xa55c6 | goto label_11;
| label_42:
0x000a5694 mov r0, sb | r0 = sb;
0x000a5696 bl 0x22944 | fcn_00022944 (r0);
0x000a569a cmp r7, 0 |
| if (r7 != 0) {
0x000a569c bne.w 0xa53c4 | goto label_4;
| }
0x000a56a0 b 0xa55c6 | goto label_11;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xa5ee0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a5ee0 () | void fcn_000a5ee0 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| char * s1;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
0x000a5ee0 ldr.w r2, [pc, 0x5c0] |
0x000a5ee4 ldr.w r3, [pc, 0x5c0] | r3 = *(0xa64a8);
0x000a5ee8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a5eec sub sp, 0x3c |
0x000a5eee add r2, pc | r2 = 0x14c396;
0x000a5ef0 ldr.w r1, [pc, 0x5b8] |
0x000a5ef4 mov r4, r0 | r4 = r0;
0x000a5ef6 ldr r3, [r2, r3] |
0x000a5ef8 add r1, pc | r1 = 0x14c3a8;
0x000a5efa ldr r3, [r3] | r3 = imp.atan;
0x000a5efc str r3, [sp, 0x34] | var_34h = r3;
0x000a5efe mov.w r3, 0 | r3 = 0;
0x000a5f02 ldr r3, [r0, 0x50] | r3 = *((r0 + 0x50));
0x000a5f04 ldr r7, [r3] | r7 = *(r3);
0x000a5f06 mov r0, r7 | r0 = r7;
0x000a5f08 bl 0x303b4 | r0 = fcn_000303b4 (r0, r1, r2);
0x000a5f0c cmp r0, 0 |
| if (r0 < 0) {
0x000a5f0e blt.w 0xa603a | goto label_4;
| }
0x000a5f12 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000a5f14 add.w r3, r3, r0, lsl 4 | r3 += (r0 << 4);
0x000a5f18 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5f1a cmp r3, 0 |
| if (r3 == 0) {
0x000a5f1c beq.w 0xa603a | goto label_4;
| }
0x000a5f20 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5f22 ldr r3, [r3] | r3 = *(r3);
0x000a5f24 ldrb r5, [r3, 0xf] | r5 = *((r3 + 0xf));
0x000a5f26 cmp r5, 0 |
| if (r5 != 0) {
0x000a5f28 bne.w 0xa603a | goto label_4;
| }
0x000a5f2c ldr.w sb, [r3, 0xb8] | sb = *((r3 + 0xb8));
0x000a5f30 strd r5, r5, [sp, 0x2c] | __asm ("strd r5, r5, [var_30h]");
0x000a5f34 strd r5, r5, [sp, 0x20] | __asm ("strd r5, r5, [var_24h]");
0x000a5f38 cmp.w sb, 0 |
| if (sb == 0) {
0x000a5f3c beq 0xa603a | goto label_4;
| }
0x000a5f3e mov r0, sb | r0 = sb;
0x000a5f40 blx 0x65dc | r0 = strcmp (r0, r1);
0x000a5f44 bics r3, r0, 0xc0000000 | __asm ("bics r3, r0, 0xc0000000");
| if (sb == 0) {
0x000a5f48 beq 0xa603a | goto label_4;
| }
0x000a5f4a ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x000a5f4c add.w sl, sp, 0x30 | sl += var_30h;
0x000a5f50 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x000a5f52 add r3, sp, 0x24 | r3 += var_24h;
0x000a5f54 str r3, [sp, 8] | s1 = r3;
0x000a5f56 add.w r8, r6, 1 | r8 = r6 + 1;
0x000a5f5a asr.w r1, r8, 0x1f | r1 = r8 >> 0x1f;
0x000a5f5e mov r0, r8 | r0 = r8;
0x000a5f60 bl 0x58538 | fcn_00058538 (r0, r1);
0x000a5f64 mov r2, r8 | r2 = r8;
0x000a5f66 mov r1, r5 | r1 = r5;
0x000a5f68 mov fp, r0 |
0x000a5f6a blx 0x62ec | fcn_000062ec ();
0x000a5f6e ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x000a5f70 mov r2, r6 | r2 = r6;
0x000a5f72 mov r0, fp | r0 = fp;
0x000a5f74 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000a5f76 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000a5f7a ldr r3, [sp, 8] | r3 = s1;
0x000a5f7c mov r2, r6 | r2 = r6;
0x000a5f7e mov r1, fp | r1 = fp;
0x000a5f80 mov r0, sb | r0 = sb;
0x000a5f82 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x000a5f86 str r3, [sp] | *(sp) = r3;
0x000a5f88 ldr.w r3, [pc, 0x524] |
0x000a5f8c add r3, pc | r3 = 0x14c440;
0x000a5f8e bl 0xa5d98 | r0 = fcn_000a5d98 (r0, r1, r2, r3, r4, r5, r6);
0x000a5f92 mov r8, r0 | r8 = r0;
0x000a5f94 cmp r0, 0 |
| if (r0 == 0) {
0x000a5f96 beq 0xa6060 | goto label_5;
| }
0x000a5f98 ldr.w r3, [pc, 0x518] |
0x000a5f9c mov.w r8, 3 | r8 = 3;
0x000a5fa0 add r3, pc | r3 = 0x14c458;
0x000a5fa2 str r3, [sp, 0xc] | var_ch = r3;
0x000a5fa4 mov r3, sl | r3 = sl;
0x000a5fa6 mov sl, r7 | sl = r7;
0x000a5fa8 mov r7, r3 | r7 = r3;
| do {
0x000a5faa mov r1, r8 | r1 = r8;
0x000a5fac ldr r0, [sp, 0xc] | r0 = var_ch;
0x000a5fae bl 0x5cb60 | fcn_0005cb60 ();
0x000a5fb2 ldr r3, [sp, 8] | r3 = s1;
0x000a5fb4 mov r5, r0 | r5 = r0;
0x000a5fb6 mov r2, r6 | r2 = r6;
0x000a5fb8 mov r1, fp | r1 = fp;
0x000a5fba str r7, [sp, 4] | var_4h = r7;
0x000a5fbc str r3, [sp] | *(sp) = r3;
0x000a5fbe mov r3, r0 | r3 = r0;
0x000a5fc0 mov r0, sb | r0 = sb;
0x000a5fc2 bl 0xa5d98 | r0 = fcn_000a5d98 (r0, r1, r2, r3, r4, r5, r6);
0x000a5fc6 mov r4, r0 | r4 = r0;
0x000a5fc8 cmp r0, 0 |
| if (r0 == 0) {
0x000a5fca beq 0xa606e | goto label_6;
| }
| if (r5 != 0) {
0x000a5fcc cbz r5, 0xa5fe0 |
0x000a5fce mov r0, r5 | r0 = r5;
0x000a5fd0 blx 0x65dc | strcmp (r0, r1);
0x000a5fd4 movs r3, 0 | r3 = 0;
0x000a5fd6 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a5fda mov r0, r5 | r0 = r5;
0x000a5fdc bl 0x581fc | fcn_000581fc (r0, r1, r2);
| }
0x000a5fe0 subs.w r8, r8, 1 | r8--;
0x000a5fe4 bne 0xa5faa |
| } while (r8 != r8);
0x000a5fe6 ldr.w r1, [pc, 0x4d0] |
0x000a5fea movs r0, 1 | r0 = 1;
0x000a5fec mov r8, r4 | r8 = r4;
0x000a5fee add r1, pc | r1 = 0x14c4ac;
0x000a5ff0 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a5ff4 ldr.w r1, [pc, 0x4c4] |
0x000a5ff6 asrs r4, r0, 0x13 | r4 = r0 >> 0x13;
0x000a5ff8 mov r2, r4 | r2 = r4;
0x000a5ffa movs r0, 1 | r0 = 1;
0x000a5ffc add r1, pc | r1 = 0x14c4bc;
0x000a5ffe bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
| do {
0x000a6002 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x000a6004 mov r2, r6 | r2 = r6;
0x000a6006 mov r0, fp | r0 = fp;
0x000a6008 bl 0x581fc | fcn_000581fc (r0, r1, r2);
0x000a600c ldr r5, [sp, 0x30] | r5 = var_30h;
0x000a600e movs r4, 0 | r4 = 0;
| if (r5 != 0) {
| label_0:
0x000a6010 cbz r5, 0xa6024 |
0x000a6012 mov r0, r5 | r0 = r5;
0x000a6014 blx 0x65dc | strcmp (r0, r1);
0x000a6018 movs r3, 0 | r3 = 0;
0x000a601a bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a601e mov r0, r5 | r0 = r5;
0x000a6020 bl 0x581fc | fcn_000581fc (r0, r1, r2);
| }
| if (r4 != 0) {
0x000a6024 cbz r4, 0xa603e |
0x000a6026 mov r0, r4 | r0 = r4;
0x000a6028 blx 0x65dc | strcmp (r0, r1);
0x000a602c movs r3, 0 | r3 = 0;
0x000a602e bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a6032 mov r0, r4 | r0 = r4;
0x000a6034 bl 0x581fc | fcn_000581fc (r0, r1, r2);
0x000a6038 b 0xa603e | goto label_7;
| label_4:
0x000a603a mov.w r8, 0 | r8 = 0;
| }
| label_7:
0x000a603e ldr.w r2, [pc, 0x480] |
0x000a6042 ldr.w r3, [pc, 0x464] | r3 = *(0xa64aa);
0x000a6046 add r2, pc | r2 = 0x14c50c;
0x000a6048 ldr r3, [r2, r3] | r3 = imp.atan;
0x000a604a ldr r2, [r3] | r2 = imp.atan;
0x000a604c ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a604e eors r2, r3 | r2 ^= r3;
0x000a6050 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a6054 bne.w 0xa6492 | goto label_8;
| }
0x000a6058 mov r0, r8 | r0 = r8;
0x000a605a add sp, 0x3c |
0x000a605c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000a6060 ldr.w r1, [pc, 0x460] |
0x000a6064 movs r0, 8 | r0 = 8;
0x000a6066 add r1, pc | r1 = 0x14c52e;
0x000a6068 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a606c b 0xa6002 |
| } while (1);
| label_6:
0x000a606e ldr.w r1, [pc, 0x458] |
0x000a6072 mov r2, r8 | r2 = r8;
0x000a6074 mov r4, r5 | r4 = r5;
0x000a6076 mov r5, r0 | r5 = r0;
0x000a6078 movs r0, 8 | r0 = 8;
0x000a607a mov r7, sl | r7 = sl;
0x000a607c add r1, pc | r1 = 0x14c54a;
0x000a607e bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6082 ldr.w r0, [pc, 0x448] |
0x000a6086 mov r1, sb | r1 = sb;
0x000a6088 add r0, pc | r0 = 0x14c55a;
0x000a608a bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000a608e mov r8, r0 | r8 = r0;
0x000a6090 cmp r0, 0 |
| if (r0 == 0) {
0x000a6092 beq.w 0xa641a | goto label_9;
| }
0x000a6096 blx 0x65dc | r0 = strcmp (r0, r1);
0x000a609a bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x000a609e movs r1, 0 | r1 = 0;
0x000a60a0 adds r0, 2 | r0 += 2;
0x000a60a2 bl 0x58538 | fcn_00058538 (r0, r1);
0x000a60a6 str r0, [sp, 8] | s1 = r0;
0x000a60a8 mov r0, r8 | r0 = r8;
0x000a60aa blx 0x65dc | r0 = strcmp (r0, r1);
0x000a60ae bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
| label_2:
0x000a60b2 ldr.w sl, [sp, 8] | sl = s1;
0x000a60b6 mov r1, r8 | r1 = r8;
0x000a60b8 mov r0, sl | r0 = sl;
0x000a60ba blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000a60be mov r0, r8 | r0 = r8;
0x000a60c0 blx 0x65dc | strcmp (r0, r1);
0x000a60c4 movs r3, 0 | r3 = 0;
0x000a60c6 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a60ca mov r0, r8 | r0 = r8;
0x000a60cc bl 0x581fc | fcn_000581fc (r0, r1, r2);
0x000a60d0 ldr r0, [pc, 0x3fc] |
0x000a60d2 mov r2, fp | r2 = fp;
0x000a60d4 mov r1, sl | r1 = sl;
0x000a60d6 add r0, pc | r0 = 0x14c5aa;
0x000a60d8 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000a60dc mov sl, r0 | sl = r0;
0x000a60de ldr r0, [pc, 0x3f4] |
0x000a60e0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000a60e2 add r0, pc | r0 = 0x14c5bc;
0x000a60e4 bl 0x5cb60 | fcn_0005cb60 ();
0x000a60e8 movs r3, 0 | r3 = 0;
0x000a60ea str r0, [sp, 0xc] | var_ch = r0;
0x000a60ec mov r2, r3 | r2 = r3;
0x000a60ee mov r1, r4 | r1 = r4;
0x000a60f0 mov r0, r7 | r0 = r7;
0x000a60f2 str r3, [sp] | *(sp) = r3;
0x000a60f4 bl 0x97290 | r0 = fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a60f8 mov r8, r0 | r8 = r0;
0x000a60fa cmp r0, 0 |
| if (r0 != 0) {
0x000a60fc bne.w 0xa63f6 | goto label_10;
| }
0x000a6100 ldr r1, [pc, 0x3d4] |
0x000a6102 mov r3, r0 | r3 = r0;
0x000a6104 mov r2, r0 | r2 = r0;
0x000a6106 str r0, [sp] | *(sp) = r0;
0x000a6108 str r0, [sp, 0x10] | var_10h = r0;
0x000a610a mov r0, r7 | r0 = r7;
0x000a610c add r1, pc | r1 = 0x14c5e8;
0x000a610e bl 0x97290 | r0 = fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a6112 mov r8, r0 | r8 = r0;
0x000a6114 cmp r0, 0 |
| if (r0 != 0) {
0x000a6116 bne.w 0xa6408 | goto label_11;
| }
0x000a611a mov r3, r0 | r3 = r0;
0x000a611c mov r2, r0 | r2 = r0;
0x000a611e str r0, [sp] | *(sp) = r0;
0x000a6120 mov r1, sl | r1 = sl;
0x000a6122 str r0, [sp, 0x14] | var_14h = r0;
0x000a6124 mov r0, r7 | r0 = r7;
0x000a6126 bl 0x97290 | r0 = fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a612a mov r8, r0 | r8 = r0;
0x000a612c cmp r0, 0 |
| if (r0 != 0) {
0x000a612e bne.w 0xa6428 | goto label_12;
| }
0x000a6132 ldr r1, [pc, 0x3a8] |
0x000a6134 mov r3, r6 | r3 = r6;
0x000a6136 mov r2, fp | r2 = fp;
0x000a6138 mov r0, r7 | r0 = r7;
0x000a613a add r1, pc | r1 = 0x14c61c;
0x000a613c bl 0x62484 | r0 = fcn_00062484 (r0, r1, r2, r3);
0x000a6140 mov r8, r0 | r8 = r0;
0x000a6142 cmp r0, 0 |
| if (r0 != 0) {
0x000a6144 bne.w 0xa643a | goto label_13;
| }
0x000a6148 ldr r1, [pc, 0x394] |
0x000a614a mov r3, r0 | r3 = r0;
0x000a614c mov r2, r0 | r2 = r0;
0x000a614e str r0, [sp] | *(sp) = r0;
0x000a6150 str r0, [sp, 0x14] | var_14h = r0;
0x000a6152 mov r0, r7 | r0 = r7;
0x000a6154 add r1, pc | r1 = 0x14c638;
0x000a6156 bl 0x97290 | r0 = fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a615a mov r8, r0 | r8 = r0;
0x000a615c cmp r0, 0 |
| if (r0 != 0) {
0x000a615e bne.w 0xa644c | goto label_14;
| }
0x000a6162 mov r3, r0 | r3 = r0;
0x000a6164 mov r2, r0 | r2 = r0;
0x000a6166 str r0, [sp] | *(sp) = r0;
0x000a6168 str r0, [sp, 0x10] | var_10h = r0;
0x000a616a mov r0, r7 | r0 = r7;
0x000a616c ldr r1, [sp, 0xc] | r1 = var_ch;
0x000a616e bl 0x97290 | r0 = fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a6172 mov r8, r0 | r8 = r0;
0x000a6174 cmp r0, 0 |
| if (r0 != 0) {
0x000a6176 bne.w 0xa646e | goto label_15;
| }
0x000a617a ldrb.w r3, [r7, 0x55] | r3 = *((r7 + 0x55));
0x000a617e cmp r3, 0 |
| if (r3 == 0) {
0x000a6180 beq.w 0xa6480 | goto label_16;
| }
0x000a6184 ldr.w r3, [r7, 0xb8] | r3 = *((r7 + 0xb8));
0x000a6188 cmp r3, 1 |
| if (r3 > 1) {
0x000a618a bgt.w 0xa645e | goto label_17;
| }
0x000a618e ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x000a6192 ldr r1, [pc, 0x350] |
0x000a6194 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x000a6198 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a619a add r1, pc |
0x000a619c ldr r3, [r3, -0xc] | r3 = *((r3 - 0xc));
0x000a61a0 str r2, [sp, 0x14] | var_14h = r2;
0x000a61a2 mov r0, r3 | r0 = r3;
0x000a61a4 strd r3, r1, [sp, 0x18] | __asm ("strd r3, r1, [var_1ch]");
0x000a61a8 bl 0x2f638 | fcn_0002f638 (r0, r1);
0x000a61ac ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a61ae mov r2, r0 | r2 = r0;
0x000a61b0 mov r3, r8 | r3 = r8;
0x000a61b2 ldr.w ip, [r1, 4] | ip = imp.atan;
0x000a61b6 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000a61b8 str r2, [sp, 0x1c] | var_1ch = r2;
0x000a61ba ldrh.w r0, [ip, 0x18] | r0 = *((ip + 0x18));
0x000a61be mov r8, r1 | r8 = r1;
0x000a61c0 ldr.w r1, [r1, 0x178] | r1 = imp.atan;
0x000a61c2 asrs r0, r7, 5 | r0 = r7 >> 5;
0x000a61c4 bic r0, r0, 2 | r0 = BIT_MASK (r0, 2);
0x000a61c8 strh.w r0, [ip, 0x18] | *((ip + 0x18)) = r0;
0x000a61cc ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a61ce bl 0x3474c | fcn_0003474c (r0, r1, r2, r3);
0x000a61d2 ldr.w r1, [r8, 0x178] | r1 = *((r8 + 0x178));
0x000a61d6 mov r8, r0 | r8 = r0;
0x000a61d8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000a61da str r0, [sp] | *(sp) = r0;
0x000a61dc movs r0, 8 | r0 = 8;
0x000a61de mov r3, r2 | r3 = r2;
0x000a61e0 mov r2, r1 | r2 = r1;
0x000a61e2 ldr r1, [pc, 0x304] |
0x000a61e4 add r1, pc | r1 = 0x14c6d2;
0x000a61e6 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a61ea cmp.w r8, 0 |
| if (r8 != 0) {
0x000a61ee bne.w 0xa6468 | goto label_3;
| }
0x000a61f2 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000a61f4 add r3, sp, 0x20 | r3 += var_20h;
0x000a61f6 add r2, sp, 0x2c | r2 += var_2ch;
0x000a61f8 mov r0, r7 | r0 = r7;
0x000a61fa subs r1, 1 | r1--;
0x000a61fc bl 0x57ba8 | fcn_00057ba8 (r0, r1, r2, r3);
0x000a6200 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a6202 mov r1, r8 | r1 = r8;
0x000a6204 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000a6206 mov r0, r7 | r0 = r7;
0x000a6208 bl 0x62278 | fcn_00062278 (r0, r1, r2, r3);
0x000a620c ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a620e ldr r2, [sp, 0x14] | r2 = var_14h;
0x000a6210 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a6212 ldr r3, [r3] | r3 = *(r3);
0x000a6214 ldr r1, [r3, 0x40] | r1 = *((r3 + 0x40));
0x000a6216 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000a6218 str r1, [sp, 0x1c] | var_1ch = r1;
0x000a621a ldr r3, [r3] | r3 = *(r3);
0x000a621c ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000a621e str r3, [sp, 0x10] | var_10h = r3;
0x000a6220 ldr r3, [r1] | r3 = *(r1);
| if (r3 != 0) {
0x000a6222 cbz r3, 0xa6232 |
0x000a6224 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a6226 mov r0, r1 | r0 = r1;
0x000a6228 mov r8, r1 | r8 = r1;
0x000a622a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a622c movs r3, 0 | r3 = 0;
0x000a622e str.w r3, [r8] | __asm ("str.w r3, [r8]");
| }
0x000a6232 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000a6234 ldr r3, [r2] | r3 = *(r2);
| if (r3 != 0) {
0x000a6236 cbz r3, 0xa6246 |
0x000a6238 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a623a mov r0, r2 | r0 = r2;
0x000a623c mov r8, r2 | r8 = r2;
0x000a623e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a6240 movs r3, 0 | r3 = 0;
0x000a6242 str.w r3, [r8] | __asm ("str.w r3, [r8]");
| }
0x000a6246 ldr r1, [pc, 0x2a4] |
0x000a6248 movs r0, 8 | r0 = 8;
0x000a624a add r1, pc | r1 = 0x14c73c;
0x000a624c bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6250 ldr r0, [sp, 8] | r0 = s1;
0x000a6252 mov r1, sb | r1 = sb;
0x000a6254 blx 0x6718 | r0 = fcn_00006718 ();
0x000a6258 mov r8, r0 | r8 = r0;
0x000a625a cmp r0, 0 |
| if (r0 != 0) {
0x000a625c bne.w 0xa6496 | goto label_18;
| }
0x000a6260 ldr.w r8, [sp, 8] | r8 = s1;
0x000a6264 mov r3, sb | r3 = sb;
0x000a6266 ldr r1, [pc, 0x288] |
0x000a6268 str r0, [sp] | *(sp) = r0;
0x000a626a mov r2, r8 | r2 = r8;
0x000a626c str r0, [sp, 0x18] | var_18h = r0;
0x000a626e add r1, pc | r1 = 0x14c764;
0x000a6270 movs r0, 8 | r0 = 8;
0x000a6272 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6274 stc2 p8, c6, [r5], -0xe0 | __asm ("stc2 p8, c6, [r5], -0xe0");
0x000a6278 add r3, sp, 0x28 | r3 += var_28h;
0x000a627a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000a627c mov r1, r8 | r1 = r8;
0x000a627e str r3, [sp] | *(sp) = r3;
0x000a6280 str r3, [sp, 0x1c] | var_1ch = r3;
0x000a6282 mov.w r3, 0x106 | r3 = 0x106;
0x000a6286 ldr.w r8, [r0, 0x18] | r8 = *((r0 + 0x18));
0x000a628a blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x000a628c ldr r1, [pc, 0x264] |
0x000a628e mov r8, r0 | r8 = r0;
0x000a6290 mov r2, r0 | r2 = r0;
0x000a6292 movs r0, 8 | r0 = 8;
0x000a6294 add r1, pc | r1 = 0x14c78c;
0x000a6296 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a629a cmp.w r8, 0 |
| if (r8 != 0) {
0x000a629e bne.w 0xa648c | goto label_19;
| }
0x000a62a2 ldr r0, [r7] | r0 = *(r7);
0x000a62a4 mov r1, sb | r1 = sb;
0x000a62a6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a62a8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000a62aa str r3, [sp] | *(sp) = r3;
0x000a62ac mov.w r3, 0x106 | r3 = 0x106;
0x000a62b0 ldr.w r8, [r0, 0x18] | r8 = *((r0 + 0x18));
0x000a62b4 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000a62b6 ldr r1, [pc, 0x240] |
0x000a62b8 mov r8, r0 | r8 = r0;
0x000a62ba mov r2, r0 | r2 = r0;
0x000a62bc movs r0, 8 | r0 = 8;
0x000a62be add r1, pc | r1 = 0x14c7bc;
0x000a62c0 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a62c4 cmp.w r8, 0 |
| if (r8 != 0) {
0x000a62c8 bne.w 0xa648c | goto label_19;
| }
0x000a62cc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a62ce ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a62d0 ldr r2, [r3] | r2 = *(r3);
0x000a62d2 ldr r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
0x000a62d4 adds r3, 1 | r3++;
0x000a62d6 str r3, [r2, 0x6c] | *((r2 + 0x6c)) = r3;
0x000a62d8 ldr r3, [r2, 0x60] | r3 = *((r2 + 0x60));
| if (r3 == 0) {
0x000a62da cbz r3, 0xa62e6 | goto label_20;
| }
0x000a62dc movs r1, 1 | r1 = 1;
| do {
0x000a62de str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x000a62e0 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x000a62e2 cmp r3, 0 |
0x000a62e4 bne 0xa62de |
| } while (r3 != 0);
| label_20:
0x000a62e6 ldr.w r0, [r2, 0xf4] | r0 = *((r2 + 0xf4));
0x000a62ea movs r1, 0 | r1 = 0;
0x000a62ec bl 0x2d040 | fcn_0002d040 (r0, r1);
0x000a62f0 ldr r1, [pc, 0x208] |
0x000a62f2 movs r0, 8 | r0 = 8;
0x000a62f4 mov.w sb, 0 | sb = 0;
0x000a62f8 add r1, pc | r1 = 0x14c7f8;
0x000a62fa bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a62fe ldr r1, [pc, 0x200] |
0x000a6300 mov r2, sb | r2 = sb;
0x000a6302 mov r3, sb | r3 = sb;
0x000a6304 mov r0, r7 | r0 = r7;
0x000a6306 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a630a add r1, pc | r1 = 0x14c810;
0x000a630c bl 0x97290 | fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a6310 ldr r1, [pc, 0x1f0] |
0x000a6312 mov r8, r0 | r8 = r0;
0x000a6314 mov r2, r0 | r2 = r0;
0x000a6316 movs r0, 8 | r0 = 8;
0x000a6318 add r1, pc | r1 = 0x14c820;
0x000a631a bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a631e cmp.w r8, 0 |
| if (r8 == 0) {
0x000a6322 bne 0xa6372 |
0x000a6324 mov r0, r7 | r0 = r7;
0x000a6326 bl 0x31440 | fcn_00031440 (r0);
0x000a632a ldr r1, [pc, 0x1dc] |
0x000a632c movs r0, 8 | r0 = 8;
0x000a632e add r1, pc | r1 = 0x14c83c;
0x000a6330 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6334 ldr r0, [pc, 0x1d4] |
0x000a6336 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a6338 add r0, pc | r0 = 0x14c848;
0x000a633a bl 0x5cb60 | fcn_0005cb60 ();
0x000a633e mov r3, r8 | r3 = r8;
0x000a6340 mov r2, r8 | r2 = r8;
0x000a6342 mov r1, r0 | r1 = r0;
0x000a6344 mov sb, r0 | sb = r0;
0x000a6346 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a634a mov r0, r7 | r0 = r7;
0x000a634c bl 0x97290 | fcn_00097290 (r0, r1, r2, r3, r4, r5, r6);
0x000a6350 ldr r1, [pc, 0x1bc] |
0x000a6352 mov r8, r0 | r8 = r0;
0x000a6354 mov r3, r0 | r3 = r0;
0x000a6356 mov r2, sb | r2 = sb;
0x000a6358 movs r0, 8 | r0 = 8;
0x000a635a add r1, pc | r1 = 0x14c86e;
0x000a635c bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6360 cmp.w r8, 0 |
| if (r8 == 0) {
0x000a6364 beq 0xa6372 | goto label_21;
| }
| label_1:
0x000a6366 ldr r1, [pc, 0x1ac] |
0x000a6368 mov r2, r8 | r2 = r8;
0x000a636a movs r0, 1 | r0 = 1;
0x000a636c add r1, pc | r1 = 0x14c886;
0x000a636e bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
| }
| label_21:
0x000a6372 ldr r0, [r7] | r0 = *(r7);
0x000a6374 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
| if (r3 != 0) {
0x000a6376 cbz r3, 0xa6380 |
0x000a6378 ldr r1, [sp, 8] | r1 = s1;
0x000a637a movs r2, 0 | r2 = 0;
0x000a637c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r2);
0x000a637e mov r5, r0 | r5 = r0;
| }
0x000a6380 ldr r1, [pc, 0x194] |
0x000a6382 mov r2, r5 | r2 = r5;
0x000a6384 movs r0, 8 | r0 = 8;
0x000a6386 add r1, pc | r1 = 0x14c8a2;
0x000a6388 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a638c asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x000a638e mov r2, r6 | r2 = r6;
0x000a6390 mov r0, fp | r0 = fp;
0x000a6392 bl 0x581fc | fcn_000581fc (r0, r1, r2);
0x000a6394 vbif d15, d19, d26 | __asm ("vbif d15, d19, d26");
0x000a6398 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000a639a beq 0xa63ae |
0x000a639c mov r0, sl | r0 = sl;
0x000a639e blx 0x65dc | strcmp (r0, r1);
0x000a63a2 movs r3, 0 | r3 = 0;
0x000a63a4 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a63a8 mov r0, sl | r0 = sl;
0x000a63aa bl 0x581fc | fcn_000581fc (r0, r1, r2);
| }
0x000a63ae ldr r5, [sp, 8] | r5 = s1;
0x000a63b0 mov r0, r5 | r0 = r5;
0x000a63b2 blx 0x65dc | strcmp (r0, r1);
0x000a63b6 movs r3, 0 | r3 = 0;
0x000a63b8 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a63bc mov r0, r5 | r0 = r5;
0x000a63be bl 0x581fc | fcn_000581fc (r0, r1, r2);
0x000a63c2 ldr r6, [sp, 0xc] | r6 = var_ch;
0x000a63c4 ldr r5, [sp, 0x30] | r5 = var_30h;
| if (r6 != 0) {
0x000a63c6 cbz r6, 0xa63da |
0x000a63c8 mov r0, r6 | r0 = r6;
0x000a63ca blx 0x65dc | strcmp (r0, r1);
0x000a63ce movs r3, 0 | r3 = 0;
0x000a63d0 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a63d4 mov r0, r6 | r0 = r6;
0x000a63d6 bl 0x581fc | fcn_000581fc (r0, r1, r2);
| }
0x000a63da cmp.w sb, 0 |
| if (sb == 0) {
0x000a63de beq.w 0xa6010 | goto label_0;
| }
0x000a63e2 mov r0, sb | r0 = sb;
0x000a63e4 blx 0x65dc | strcmp (r0, r1);
0x000a63e8 movs r3, 0 | r3 = 0;
0x000a63ea bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a63ee mov r0, sb | r0 = sb;
0x000a63f0 bl 0x581fc | fcn_000581fc (r0, r1, r2);
0x000a63f4 b 0xa6010 | goto label_0;
| label_10:
0x000a63f6 ldr r1, [pc, 0x124] |
0x000a63f8 mov r2, r0 | r2 = r0;
0x000a63fa movs r0, 1 | r0 = 1;
0x000a63fc mov.w sb, 0 | sb = 0;
0x000a6400 add r1, pc | r1 = 0x14c922;
0x000a6402 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6406 b 0xa6366 | goto label_1;
| label_11:
0x000a6408 ldr r1, [pc, 0x114] |
0x000a640a mov r2, r0 | r2 = r0;
0x000a640c movs r0, 1 | r0 = 1;
0x000a640e mov.w sb, 0 | sb = 0;
0x000a6412 add r1, pc | r1 = 0x14c936;
0x000a6414 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6418 b 0xa6366 | goto label_1;
| label_9:
0x000a641a movs r0, 2 | r0 = 2;
0x000a641c movs r1, 0 | r1 = 0;
0x000a641e bl 0x58538 | fcn_00058538 (r0, r1);
0x000a6422 mov r2, r8 | r2 = r8;
0x000a6424 str r0, [sp, 8] | s1 = r0;
0x000a6426 b 0xa60b2 | goto label_2;
| label_12:
0x000a6428 ldr r1, [pc, 0xf8] |
0x000a642a mov r2, r0 | r2 = r0;
0x000a642c movs r0, 1 | r0 = 1;
0x000a642e ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000a6432 add r1, pc | r1 = 0x14c95a;
0x000a6434 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6438 b 0xa6366 | goto label_1;
| label_13:
0x000a643a ldr r1, [pc, 0xec] |
0x000a643c mov r2, r0 | r2 = r0;
0x000a643e movs r0, 1 | r0 = 1;
0x000a6440 ldr.w sb, [sp, 0x14] | sb = var_14h;
0x000a6444 add r1, pc | r1 = 0x14c972;
0x000a6446 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a644a b 0xa6366 | goto label_1;
| label_14:
0x000a644c ldr r1, [pc, 0xdc] |
0x000a644e mov r2, r0 | r2 = r0;
0x000a6450 movs r0, 1 | r0 = 1;
0x000a6452 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000a6456 add r1, pc | r1 = 0x14c986;
0x000a6458 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a645c b 0xa6366 | goto label_1;
| label_17:
0x000a645e ldr r1, [pc, 0xd0] |
0x000a6460 movs r0, 1 | r0 = 1;
0x000a6462 add r1, pc | r1 = 0x14c998;
0x000a6464 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a6466 invalid |
| do {
| label_3:
0x000a6468 mov.w sb, 0 | sb = 0;
0x000a646c b 0xa6366 | goto label_1;
| label_15:
0x000a646e ldr r1, [pc, 0xc4] |
0x000a6470 mov r2, r0 | r2 = r0;
0x000a6472 movs r0, 1 | r0 = 1;
0x000a6474 ldr.w sb, [sp, 0x14] | sb = var_14h;
0x000a6478 add r1, pc | r1 = 0x14c9b2;
0x000a647a bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a647e b 0xa6366 | goto label_1;
| label_16:
0x000a6480 ldr r1, [pc, 0xb4] |
0x000a6482 movs r0, 1 | r0 = 1;
0x000a6484 add r1, pc | r1 = 0x14c9c0;
0x000a6486 bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a648a b 0xa6468 |
| } while (1);
| label_19:
0x000a648c ldr.w sb, [sp, 0x18] | sb = var_18h;
0x000a6490 b 0xa6366 | goto label_1;
| label_8:
0x000a6492 blx 0x6430 | fcn_00006430 ();
| label_18:
0x000a6496 ldr r1, [pc, 0xa4] |
0x000a6498 mov r2, r0 | r2 = r0;
0x000a649a movs r0, 1 | r0 = 1;
0x000a649c add r1, pc | r1 = 0x14c9de;
0x000a649e bl 0x57ac0 | fcn_00057ac0 (r0, r1, r2);
0x000a64a2 b 0xa6468 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xab630 */
| #include <stdint.h>
|
; (fcn) fcn.000ab630 () | void fcn_000ab630 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x000ab630 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000ab634 mov r6, r1 | r6 = r1;
0x000ab636 ldr r5, [r1, 0x14] | r5 = *((r1 + 0x14));
0x000ab638 sub sp, 0xc |
0x000ab63a mov r7, r0 | r7 = r0;
0x000ab63c ldr.w r8, [r0] | r8 = *(r0);
0x000ab640 cmp r5, 0 |
| if (r5 == 0) {
0x000ab642 beq.w 0xab76e | goto label_4;
| }
0x000ab646 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000ab64a ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000ab64c cmp r5, r2 |
| if (r5 == r2) {
0x000ab64e beq 0xab748 | goto label_5;
| }
0x000ab650 adds r3, 0x10 | r3 += 0x10;
0x000ab652 movs r4, 0 | r4 = 0;
| do {
0x000ab654 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000ab656 mov sb, r3 | sb = r3;
0x000ab658 adds r4, 1 | r4++;
0x000ab65a adds r3, 0x10 | r3 += 0x10;
0x000ab65c cmp r5, r2 |
0x000ab65e bne 0xab654 |
| } while (r5 != r2);
0x000ab660 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000ab662 movs r2, 0 | r2 = 0;
0x000ab664 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x000ab666 adds r0, 8 | r0 += 8;
0x000ab668 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x000ab66c ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x000ab66e cbz r3, 0xab6a2 |
0x000ab670 cmp r4, 1 |
0x000ab672 ldr.w r5, [sb] | r5 = *(sb);
| if (r4 == 1) {
0x000ab676 beq 0xab730 | goto label_6;
| }
0x000ab678 ldr.w sb, [pc, 0xfc] |
0x000ab67c movs r1, 0x10 | r1 = 0x10;
0x000ab67e add sb, pc | sb = 0x156dfa;
| label_0:
0x000ab680 ldr r3, [r3] | r3 = *(r3);
0x000ab682 mov r0, r7 | r0 = r7;
0x000ab684 str r5, [sp] | *(sp) = r5;
0x000ab686 ldr r2, [r6] | r2 = *(r6);
0x000ab688 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000ab68a invalid |
| if (r1 != 0x10) {
0x000ab68e bne 0xab72a | goto label_7;
| }
0x000ab690 mov r3, r0 | r3 = r0;
0x000ab692 mov r2, sb | r2 = sb;
0x000ab694 movs r1, 9 | r1 = 9;
0x000ab696 mov r0, r7 | r0 = r7;
0x000ab698 str r5, [sp] | *(sp) = r5;
0x000ab69a bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000ab69e cmp r0, 0 |
| if (r0 != 0) {
0x000ab6a0 bne 0xab72a | goto label_7;
| }
| }
| label_2:
0x000ab6a2 ldr r5, [r7, 8] | r5 = *((r7 + 8));
0x000ab6a4 cmp r5, 0 |
0x000ab6a6 beq 0xab71a |
| while (r0 != 0) {
0x000ab6a8 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000ab6ac lsl.w r8, r4, 4 | r8 = r4 << 4;
0x000ab6b0 ldr r1, [pc, 0xc8] |
0x000ab6b2 mov r0, r7 | r0 = r7;
0x000ab6b4 ldr.w r2, [r3, r8] | r2 = *((r3 + r8));
0x000ab6b8 add r1, pc | r1 = 0x156e38;
0x000ab6ba ldr r3, [r6] | r3 = *(r6);
0x000ab6bc bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000ab6c0 ldr r3, [r7] | r3 = *(r7);
0x000ab6c2 mov r2, r4 | r2 = r4;
0x000ab6c4 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x000ab6c6 movs r1, 0x64 | r1 = 0x64;
0x000ab6c8 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000ab6ca add r3, r8 | r3 += r8;
0x000ab6cc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000ab6ce ldr r3, [r3] | r3 = *(r3);
0x000ab6d0 adds r3, 1 | r3++;
0x000ab6d2 str r3, [sp] | *(sp) = r3;
0x000ab6d4 movs r3, 1 | r3 = 1;
0x000ab6d6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ab6da movs r3, 0 | r3 = 0;
0x000ab6dc mov r2, r4 | r2 = r4;
0x000ab6de str r3, [sp] | *(sp) = r3;
0x000ab6e0 movs r1, 0x9a | r1 = 0x9a;
0x000ab6e2 mov r0, r5 | r0 = r5;
0x000ab6e4 ldr r4, [r6] | r4 = *(r6);
0x000ab6e6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ab6ea ldr r3, [r5] | r3 = *(r5);
0x000ab6ec ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x000ab6f0 cbnz r3, 0xab72a | goto label_7;
| }
0x000ab6f2 cmp r0, 0 |
0x000ab6f4 ldr r6, [r5, 0x68] | r6 = *((r5 + 0x68));
0x000ab6f6 it lt |
| if (r0 >= 0) {
0x000ab6f8 ldrlt r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
| }
0x000ab6fa mov.w r3, 0 | r3 = 0;
0x000ab6fe mov r2, r4 | r2 = r4;
0x000ab700 it lt |
| if (r0 >= 0) {
0x000ab702 addlt r0, r0, -1 | r0 += -1;
| }
0x000ab706 add.w r1, r0, r0, lsl 1 | r1 = r0 + (r0 << 1);
0x000ab70a mov r0, r5 | r0 = r5;
0x000ab70c add.w r1, r6, r1, lsl 3 | r1 = r6 + (r1 << 3);
0x000ab710 add sp, 0xc |
0x000ab712 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000ab716 b.w 0x3952c | void (*0x3952c)() ();
0x000ab71a ldr r3, [r7, 0x74] | r3 = *((r7 + 0x74));
| if (r3 == 0) {
0x000ab71c cbz r3, 0xab73a | goto label_8;
| }
| label_1:
0x000ab71e mov r0, r7 | r0 = r7;
0x000ab720 bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000ab724 mov r5, r0 | r5 = r0;
0x000ab726 cmp r0, 0 |
0x000ab728 bne 0xab6a8 |
| }
| label_7:
0x000ab72a add sp, 0xc |
0x000ab72c pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_6:
0x000ab730 ldr.w sb, [pc, 0x4c] |
0x000ab734 movs r1, 0xe | r1 = 0xe;
0x000ab736 add sb, pc | sb = 0x156eba;
0x000ab738 b 0xab680 | goto label_0;
| label_8:
0x000ab73a ldr r3, [r7] | r3 = *(r7);
0x000ab73c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000ab73e lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000ab740 itt pl |
| if (r3 < r3) {
0x000ab742 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000ab744 strbpl r3, [r7, 0x17] | *((r7 + 0x17)) = r3;
| }
0x000ab746 b 0xab71e | goto label_1;
| label_5:
0x000ab748 movs r4, 0 | r4 = 0;
| label_3:
0x000ab74a ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000ab74c movs r2, 0 | r2 = 0;
0x000ab74e ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x000ab750 adds r0, 8 | r0 += 8;
0x000ab752 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x000ab756 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000ab758 cmp r3, 0 |
| if (r3 == 0) {
0x000ab75a beq 0xab6a2 | goto label_2;
| }
0x000ab75c ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x000ab760 lsls r2, r4, 4 | r2 = r4 << 4;
0x000ab762 ldr.w sb, [pc, 0x20] |
0x000ab766 ldr r5, [r1, r2] | r5 = *((r1 + r2));
0x000ab768 movs r1, 0x10 | r1 = 0x10;
0x000ab76a add sb, pc | sb = 0x156ef4;
0x000ab76c b 0xab680 | goto label_0;
| label_4:
0x000ab76e mov.w r4, 0x8000 |
0x000ab772 movt r4, 0xffff | r4 = 0x-8000;
0x000ab776 b 0xab74a | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xab984 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000ab984 () | void fcn_000ab984 (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000ab984 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab988 mov r6, r3 | r6 = r3;
0x000ab98a ldr.w sb, [r0] | sb = *(r0);
0x000ab98e sub sp, 0x24 |
0x000ab990 mov r7, r1 | r7 = r1;
0x000ab992 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
0x000ab996 cbz r3, 0xab9a6 |
| while (r0 != 0) {
| label_0:
0x000ab998 mov r1, r7 | r1 = r7;
0x000ab99a mov r0, sb | r0 = sb;
0x000ab99c add sp, 0x24 |
0x000ab99e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab9a2 b.w 0x30a7c | void (*0x30a7c)() ();
0x000ab9a6 mov r5, r0 | r5 = r0;
0x000ab9a8 mov r8, r2 | r8 = r2;
0x000ab9aa bl 0x97d18 | r0 = fcn_00097d18 (r0);
0x000ab9ae mov r4, r0 | r4 = r0;
0x000ab9b0 cmp r0, 0 |
0x000ab9b2 bne 0xab998 |
| }
0x000ab9b4 add.w r2, r7, 8 | r2 = r7 + 8;
0x000ab9b8 cmp r6, 0 |
| if (r6 != 0) {
0x000ab9ba bne.w 0xabc3e | goto label_28;
| }
0x000ab9be mov r1, r8 | r1 = r8;
0x000ab9c0 mov r0, r5 | r0 = r5;
0x000ab9c2 bl 0x98544 | r0 = fcn_00098544 (r0, r1, r2);
0x000ab9c6 mov sl, r0 | sl = r0;
0x000ab9c8 cmp r0, 0 |
| if (r0 == 0) {
0x000ab9ca beq 0xab998 | goto label_0;
| }
| label_2:
0x000ab9cc ldr.w r1, [sl, 0x3c] | r1 = *((sl + 0x3c));
0x000ab9d0 ldrb.w lr, [sl, 0x2b] |
0x000ab9d4 cmp r1, 0 |
| if (r1 == 0) {
0x000ab9d6 beq.w 0xabf98 | goto label_29;
| }
0x000ab9da ldr.w ip, [sb, 0x10] | ip = *((sb + 0x10));
0x000ab9de ldr.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x000ab9e2 cmp r1, r3 |
| if (r1 == r3) {
0x000ab9e4 beq.w 0xabca8 | goto label_30;
| }
0x000ab9e8 movs r3, 0x10 | r3 = 0x10;
0x000ab9ea sub.w r0, ip, 4 | r0 = ip - 4;
| do {
0x000ab9ee mov r6, r3 | r6 = r3;
0x000ab9f0 adds r3, 0x10 | r3 += 0x10;
0x000ab9f2 ldr r2, [r0, r3] | r2 = *((r0 + r3));
0x000ab9f4 adds r4, 1 | r4++;
0x000ab9f6 cmp r1, r2 |
0x000ab9f8 bne 0xab9ee |
| } while (r1 != r2);
0x000ab9fa cmp.w lr, 1 |
| if (lr == 1) {
0x000ab9fe beq.w 0xabc94 | goto label_31;
| }
| label_5:
0x000aba02 cmp r4, 1 |
0x000aba04 it ne |
| if (r4 == 1) {
0x000aba06 addne ip, r6 |
| }
| if (r4 == 1) {
0x000aba08 beq.w 0xabc72 | goto label_32;
| }
| label_6:
0x000aba0c ldr.w r2, [pc, 0x6d0] |
0x000aba10 add r2, pc | r2 = 0x157af4;
| label_3:
0x000aba12 ldr.w fp, [ip] | fp = *(ip);
0x000aba16 movs r3, 0 | r3 = 0;
0x000aba18 movs r1, 9 | r1 = 9;
0x000aba1a mov r0, r5 | r0 = r5;
0x000aba1c str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000aba20 bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000aba24 cmp r0, 0 |
| if (r0 != 0) {
0x000aba26 bne 0xab998 | goto label_0;
| }
0x000aba28 cmp.w r8, 0 |
| if (r8 == 0) {
0x000aba2c beq.w 0xabc80 | goto label_33;
| }
0x000aba30 cmp r4, 1 |
0x000aba32 mov r3, r0 | r3 = r0;
0x000aba34 ite eq |
| if (r4 != 1) {
0x000aba36 moveq r1, 0xf | r1 = 0xf;
| }
| if (r4 == 1) {
0x000aba38 movne r1, 0x11 | r1 = 0x11;
| }
| label_4:
0x000aba3a ldr.w r2, [sl] | r2 = *(sl);
0x000aba3e mov r0, r5 | r0 = r5;
0x000aba40 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000aba42 add sp, 0 |
0x000aba44 bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000aba48 cmp r0, 0 |
| if (r0 != 0) {
0x000aba4a bne 0xab998 | goto label_0;
| }
0x000aba4c ldr.w r2, [sl] | r2 = *(sl);
0x000aba50 mov r3, r0 | r3 = r0;
0x000aba52 movs r1, 9 | r1 = 9;
0x000aba54 mov r0, r5 | r0 = r5;
0x000aba56 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000aba5a bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000aba5e str r0, [sp, 0x14] | var_14h = r0;
0x000aba60 cmp r0, 0 |
| if (r0 != 0) {
0x000aba62 bne 0xab998 | goto label_0;
| }
0x000aba64 ldr.w r3, [sl] | r3 = *(sl);
| if (r3 == 0) {
0x000aba68 cbz r3, 0xabad0 | goto label_34;
| }
0x000aba6a ldr.w r1, [pc, 0x678] |
0x000aba6e mov r2, r3 | r2 = r3;
0x000aba70 ldr.w lr, [pc, 0x674] |
0x000aba74 movs r0, 6 | r0 = 6;
0x000aba76 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x000aba7a add r1, pc | r1 = 0x157b64;
0x000aba7c str r4, [sp, 0x18] | var_18h = r4;
0x000aba7e add lr, pc | lr = 0x157b6a;
0x000aba80 b 0xaba9e |
| while (r4 != 0) {
0x000aba82 add r4, lr | r4 += lr;
0x000aba84 adds r1, 1 | r1++;
0x000aba86 ldrb.w sb, [r4, 0x140] | sb = *((r4 + 0x140));
0x000aba8a ldrb.w r4, [ip] | r4 = *(ip);
0x000aba8c ands r0, r0 | r0 &= r0;
0x000aba8e add r4, lr | r4 += lr;
0x000aba90 ldrb.w r4, [r4, 0x140] | r4 = *((r4 + 0x140));
0x000aba94 cmp sb, r4 |
| if (sb != r4) {
0x000aba96 bne 0xabaaa | goto label_35;
| }
0x000aba98 subs r0, 1 | r0--;
| if (r0 <= 1) {
0x000aba9a blo.w 0xabcf8 | goto label_36;
| }
0x000aba9e mov fp, r2 |
0x000abaa0 ldrb r4, [r2], 1 | r4 = *(r2);
| r2++;
0x000abaa4 mov ip, r1 |
0x000abaa6 cmp r4, 0 |
0x000abaa8 bne 0xaba82 |
| }
| label_35:
0x000abaaa ldr.w r2, [pc, 0x640] |
0x000abaae ldrb.w r1, [fp] | r1 = *(fp);
0x000abab2 ldrb.w r0, [ip] | r0 = *(ip);
0x000abab6 add r2, pc | r2 = 0x157ba8;
0x000abab8 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000ababa str r0, [sp, 0x40] | *((sp + 0x40)) = r0;
0x000ababc add r1, r2 | r1 += r2;
0x000ababe ldr r4, [sp, 0x18] | r4 = var_18h;
0x000abac0 add r2, r0 | r2 += r0;
0x000abac2 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000abac6 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000abaca cmp r1, r2 |
| if (r1 == r2) {
0x000abacc beq.w 0xabcfe | goto label_37;
| }
| label_34:
0x000abad0 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x000abad4 lsls r0, r2, 0x13 | r0 = r2 << 0x13;
| if (r0 < r2) {
0x000abad6 bpl 0xabaea |
0x000abad8 ldr.w r1, [sb, 0x20] | r1 = *((sb + 0x20));
0x000abadc lsls r1, r1, 3 | r1 <<= 3;
| if (r1 >= r1) {
0x000abade bpl 0xabaea | goto label_22;
| }
0x000abae0 ldr.w r1, [sb, 0x190] | r1 = *((sb + 0x190));
0x000abae4 cmp r1, 0 |
| if (r1 == 0) {
0x000abae6 beq.w 0xabf78 | goto label_38;
| }
| }
| label_22:
0x000abaea lsls r0, r2, 0x10 | r0 = r2 << 0x10;
| if (r0 < r2) {
0x000abaec bmi.w 0xabdc0 | goto label_23;
| }
0x000abaee strh r0, [r5, 0xa] | *((r5 + 0xa)) = r0;
| label_9:
0x000abaf0 ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
0x000abaf4 cmp.w r8, 0 |
| if (r8 == 0) {
0x000abaf8 beq.w 0xabdce | goto label_39;
| }
0x000abafc cmp r2, 2 |
| if (r2 != 2) {
0x000abafe bne.w 0xabec6 | goto label_40;
| }
0x000abb02 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000abb04 cmp r3, 0 |
| if (r3 == 0) {
0x000abb06 beq.w 0xabe76 | goto label_41;
| }
0x000abb0a mov r2, r4 | r2 = r4;
0x000abb0c movs r1, 1 | r1 = 1;
0x000abb0e mov r0, r5 | r0 = r5;
0x000abb10 bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000abb14 ldr r3, [r5] | r3 = *(r5);
0x000abb16 str r3, [sp, 0x10] | var_10h = r3;
| label_10:
0x000abb18 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000abb1a ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000abb1c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000abb1e str r2, [sp, 0x14] | var_14h = r2;
0x000abb20 add r3, r6 | r3 += r6;
0x000abb22 str r3, [sp, 0x18] | var_18h = r3;
0x000abb24 cmp r2, 0 |
| if (r2 == 0) {
0x000abb26 beq.w 0xabe9a | goto label_42;
| }
| label_13:
0x000abb2a mov r2, r4 | r2 = r4;
0x000abb2c movs r1, 1 | r1 = 1;
0x000abb2e mov r0, r5 | r0 = r5;
0x000abb30 bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000abb34 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000abb38 cmp r3, 1 |
| if (r3 == 1) {
0x000abb3a beq.w 0xabf4c | goto label_43;
| }
| label_19:
0x000abb3e ldr r0, [r5] | r0 = *(r5);
0x000abb40 mov r1, sl | r1 = sl;
0x000abb42 bl 0x3186c | r0 = fcn_0003186c (r0, r1, r2);
| if (r0 == 0) {
0x000abb46 cbz r0, 0xabb5c | goto label_44;
| }
0x000abb48 mov fp, r4 |
0x000abb4a mov r4, r0 | r4 = r0;
| do {
0x000abb4c mov r1, r4 | r1 = r4;
0x000abb4e mov r0, r5 | r0 = r5;
0x000abb50 bl 0xab630 | fcn_000ab630 (r0, r1);
0x000abb54 ldr r4, [r4, 0x20] | r4 = *((r4 + 0x20));
0x000abb56 cmp r4, 0 |
0x000abb58 bne 0xabb4c |
| } while (r4 != 0);
0x000abb5a mov r4, fp | r4 = fp;
| label_44:
0x000abb5c ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000abb60 lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
| if (r0 < r3) {
0x000abb62 bmi.w 0xabeb2 | goto label_45;
| }
| label_14:
0x000abb66 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000abb68 mov r0, r5 | r0 = r5;
0x000abb6a ldr.w r1, [pc, 0x584] |
0x000abb6e ldr r2, [r3] | r2 = *(r3);
0x000abb70 add r1, pc | r1 = 0x157c66;
0x000abb72 ldr.w r3, [sl] | r3 = *(sl);
0x000abb76 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000abb7a cmp.w r8, 0 |
0x000abb7c lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000abb7e bne.w 0xabcec | goto label_46;
| }
0x000abb82 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000abb86 cmp r3, 1 |
| if (r3 != 1) {
0x000abb88 bne.w 0xabed4 | goto label_47;
| }
| label_8:
0x000abb8c movs r3, 0 | r3 = 0;
0x000abb8e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000abb90 str r3, [sp, 8] | var_8h = r3;
0x000abb92 movs r1, 0xac | r1 = 0xac;
0x000abb94 ldr.w r2, [sl] | r2 = *(sl);
0x000abb98 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000abb9c mov r2, r4 | r2 = r4;
0x000abb9e bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x000abba0 invalid |
0x000abba4 movs r2, 1 | r2 = 1;
0x000abba6 cmp r3, 0 |
0x000abba8 it eq |
| if (r3 != 0) {
0x000abbaa moveq r3, r5 | r3 = r5;
| }
0x000abbac strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
| label_7:
0x000abbae ldr.w r8, [sl] | r8 = *(sl);
0x000abbb2 movs r3, 0 | r3 = 0;
0x000abbb4 ldr.w sl, [sp, 0x14] | sl = var_14h;
0x000abbb8 mov r2, r4 | r2 = r4;
0x000abbba str r3, [sp] | *(sp) = r3;
0x000abbbc movs r1, 0x97 | r1 = 0x97;
0x000abbbe mov r0, sl | r0 = sl;
0x000abbc0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000abbc4 ldr.w r3, [sl] | r3 = *(sl);
0x000abbc8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000abbcc cbnz r3, 0xabbf2 |
0x000abbce ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abbd0 cmp r0, 0 |
0x000abbd2 it lt |
| if (r0 >= 0) {
0x000abbd4 ldrlt r0, [sl, 0x6c] | r0 = *((sl + 0x6c));
| }
0x000abbd6 lsls r4, r5, 1 | r4 = r5 << 1;
0x000abbd8 mov r2, r8 | r2 = r8;
0x000abbda ldr r1, [r3, 0x68] | r1 = *((r3 + 0x68));
0x000abbdc it lt |
| if (r4 >= r5) {
0x000abbde addlt r0, r0, -1 | r0 += -1;
| }
0x000abbe2 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000abbe6 add.w r1, r1, r0, lsl 3 | r1 += (r0 << 3);
0x000abbe8 lsls r0, r0, 7 | r0 <<= 7;
0x000abbea mov r0, r3 | r0 = r3;
0x000abbec movs r3, 0 | r3 = 0;
0x000abbee bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
| }
0x000abbf2 ldr r3, [r5] | r3 = *(r5);
0x000abbf4 mov r2, r4 | r2 = r4;
0x000abbf6 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x000abbf8 movs r1, 0x64 | r1 = 0x64;
0x000abbfa ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000abbfc add r3, r6 | r3 += r6;
0x000abbfe ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000abc00 ldr r3, [r3] | r3 = *(r3);
0x000abc02 adds r3, 1 | r3++;
0x000abc04 str r3, [sp] | *(sp) = r3;
0x000abc06 movs r3, 1 | r3 = 1;
0x000abc08 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000abc0c ldr r3, [sp, 0x10] | r3 = var_10h;
0x000abc0e ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000abc10 add r3, r6 | r3 += r6;
0x000abc12 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000abc14 ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
0x000abc18 lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 >= r3) {
0x000abc1a bpl.w 0xab998 | goto label_0;
| }
0x000abc1e ldr r4, [r2, 0x10] | r4 = *((r2 + 0x10));
| if (r4 != 0) {
0x000abc20 cbnz r4, 0xabc2c | goto label_48;
| }
0x000abc22 b 0xabe6c | goto label_49;
| do {
| label_1:
0x000abc24 ldr r4, [r4] | r4 = *(r4);
0x000abc26 cmp r4, 0 |
| if (r4 == 0) {
0x000abc28 beq.w 0xabe60 | goto label_50;
| }
| label_48:
0x000abc2c ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000abc2e ldrb.w r3, [r1, 0x2b] | r3 = *((r1 + 0x2b));
0x000abc32 cmp r3, 2 |
0x000abc34 bne 0xabc24 |
| } while (r3 != 2);
0x000abc36 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000abc38 bl 0x30cfc | fcn_00030cfc (r0, r1);
0x000abc3c b 0xabc24 | goto label_1;
| label_28:
0x000abc3e ldrb.w r3, [sb, 0x5b] | r3 = *((sb + 0x5b));
0x000abc42 mov r1, r8 | r1 = r8;
0x000abc44 mov r0, r5 | r0 = r5;
0x000abc46 adds r3, 1 | r3++;
0x000abc48 strb.w r3, [sb, 0x5b] | *((sb + 0x5b)) = r3;
0x000abc4c bl 0x98544 | fcn_00098544 (r0, r1, r2);
0x000abc50 ldrb.w r3, [sb, 0x5b] | r3 = *((sb + 0x5b));
0x000abc54 mov sl, r0 | sl = r0;
0x000abc56 subs r3, 1 | r3--;
0x000abc58 strb.w r3, [sb, 0x5b] | *((sb + 0x5b)) = r3;
0x000abc5a adds r0, 0x5b | r0 += 0x5b;
0x000abc5c cmp r0, 0 |
| if (r0 != 0) {
0x000abc5e bne.w 0xab9cc | goto label_2;
| }
0x000abc62 mov r0, r5 | r0 = r5;
0x000abc64 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x000abc66 bl 0x7c8e0 | fcn_0007c8e0 (r0, r1);
0x000abc6a mov r0, r5 | r0 = r5;
0x000abc6c bl 0x41b2c | fcn_00041b2c (r0, r1);
0x000abc70 b 0xab998 | goto label_0;
| label_32:
0x000abc72 ldr.w r2, [pc, 0x480] |
0x000abc76 add.w ip, ip, 0x10 |
0x000abc7a movs r6, 0x10 | r6 = 0x10;
0x000abc7c add r2, pc | r2 = 0x157d76;
0x000abc7e b 0xaba12 | goto label_3;
| label_33:
0x000abc80 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000abc84 cmp r3, 1 |
| if (r3 == 1) {
0x000abc86 beq 0xabccc | goto label_51;
| }
0x000abc88 cmp r4, 1 |
0x000abc8a mov r3, r8 | r3 = r8;
0x000abc8c ite eq |
| if (r4 != 1) {
0x000abc8e moveq r1, 0xd | r1 = 0xd;
| }
| if (r4 == 1) {
0x000abc90 movne r1, 0xb | r1 = 0xb;
| }
0x000abc92 b 0xaba3a | goto label_4;
| label_31:
0x000abc94 mov r1, sl | r1 = sl;
0x000abc96 mov r0, r5 | r0 = r5;
0x000abc98 bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x000abc9c cmp r0, 0 |
| if (r0 != 0) {
0x000abc9e bne.w 0xab998 | goto label_0;
| }
0x000abca2 ldr.w ip, [sb, 0x10] | ip = *((sb + 0x10));
0x000abca6 b 0xaba02 | goto label_5;
| label_30:
0x000abca8 cmp.w lr, 1 |
0x000abcac it ne |
| if (lr != 1) {
0x000abcae movne r6, 0 | r6 = 0;
| goto label_52;
| }
| if (lr != 1) {
| label_52:
0x000abcb0 bne.w 0xaba0c | goto label_6;
| }
0x000abcb4 mov r1, sl | r1 = sl;
0x000abcb6 mov r0, r5 | r0 = r5;
0x000abcb8 bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x000abcbc mov r4, r0 | r4 = r0;
0x000abcbe cmp r0, 0 |
| if (r0 != 0) {
0x000abcc0 bne.w 0xab998 | goto label_0;
| }
0x000abcc4 ldr.w ip, [sb, 0x10] | ip = *((sb + 0x10));
0x000abcc8 mov r6, r0 | r6 = r0;
0x000abcca b 0xaba0c | goto label_6;
| label_51:
0x000abccc ldr.w r3, [sl, 0x34] | r3 = *((sl + 0x34));
| if (r3 != 0) {
0x000abcd0 cbnz r3, 0xabcdc | goto label_53;
| }
0x000abcd2 b 0xac0d8 | goto label_54;
| do {
0x000abcd4 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000abcd6 cmp r3, 0 |
| if (r3 == 0) {
0x000abcd8 beq.w 0xac0d8 | goto label_54;
| }
| label_53:
0x000abcdc ldr r2, [r3] | r2 = *(r3);
0x000abcde cmp sb, r2 |
0x000abce0 bne 0xabcd4 |
| } while (sb != r2);
0x000abce2 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000abce4 movs r1, 0x1e | r1 = 0x1e;
0x000abce6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000abce8 b 0xaba3a | goto label_4;
| label_15:
0x000abcea mov r4, fp | r4 = fp;
| label_46:
0x000abcec ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000abcf0 cmp r3, 1 |
| if (r3 != 1) {
0x000abcf2 bne.w 0xabbae | goto label_7;
| }
0x000abcf6 b 0xabb8c | goto label_8;
| label_36:
0x000abcf8 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000abcfc ldr r4, [sp, 0x18] | r4 = var_18h;
| label_37:
0x000abcfe ldr r1, [pc, 0x3f8] |
0x000abd00 add.w fp, r3, 7 |
0x000abd04 ldr.w lr, [pc, 0x3f4] |
0x000abd08 mov r2, fp | r2 = fp;
0x000abd0a movs r0, 3 | r0 = 3;
0x000abd0c str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x000abd10 add r1, pc | r1 = 0x157e0e;
0x000abd12 strd r4, fp, [sp, 0x18] | __asm ("strd r4, fp, [var_0hx18]");
0x000abd16 add lr, pc | lr = 0x157e16;
0x000abd18 b 0xabd36 |
| while (r4 != 0) {
0x000abd1a add r4, lr | r4 += lr;
0x000abd1c adds r1, 1 | r1++;
0x000abd1e ldrb.w sb, [r4, 0x140] | sb = *((r4 + 0x140));
0x000abd22 ldrb.w r4, [ip] | r4 = *(ip);
0x000abd26 add r4, lr | r4 += lr;
0x000abd28 ldrb.w r4, [r4, 0x140] | r4 = *((r4 + 0x140));
0x000abd2c cmp sb, r4 |
| if (sb != r4) {
0x000abd2e bne 0xabd42 | goto label_55;
| }
0x000abd30 subs r0, 1 | r0--;
| if (r0 <= 1) {
0x000abd32 blo.w 0xabeaa | goto label_56;
| }
0x000abd36 mov fp, r2 |
0x000abd38 ldrb r4, [r2], 1 | r4 = *(r2);
| r2++;
0x000abd3c mov ip, r1 |
0x000abd3e cmp r4, 0 |
0x000abd40 bne 0xabd1a |
| }
| label_55:
0x000abd42 mov r2, fp | r2 = fp;
0x000abd44 ldrb.w r0, [ip] | r0 = *(ip);
0x000abd48 ldrb r1, [r2] | r1 = *(r2);
0x000abd4a ldr r2, [pc, 0x3b4] |
0x000abd4c ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000abd50 ldr r4, [sp, 0x18] | r4 = var_18h;
0x000abd52 add r2, pc | r2 = 0x157e58;
0x000abd54 ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x000abd58 add r1, r2 | r1 += r2;
0x000abd5a add r2, r0 | r2 += r0;
0x000abd5c ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000abd60 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000abd64 cmp r1, r2 |
| if (r1 == r2) {
0x000abd66 beq.w 0xabaf0 | goto label_9;
| }
0x000abd6a ldr r2, [pc, 0x398] |
0x000abd6c movs r1, 9 | r1 = 9;
0x000abd6e ldr.w ip, [pc, 0x398] |
0x000abd72 add r2, pc | r2 = 0x157e7c;
0x000abd74 add ip, pc | ip = 0x157e82;
0x000abd76 b 0xabd92 |
| while (r4 != 0) {
0x000abd78 add r4, ip | r4 += ip;
0x000abd7a adds r2, 1 | r2++;
0x000abd7c ldrb.w lr, [r4, 0x140] |
0x000abd80 ldrb r4, [r0] | r4 = *(r0);
0x000abd82 add r4, ip | r4 += ip;
0x000abd84 ldrb.w r4, [r4, 0x140] | r4 = *((r4 + 0x140));
0x000abd88 cmp lr, r4 |
| if (lr != r4) {
0x000abd8a bne 0xabd9e | goto label_57;
| }
0x000abd8c subs r1, 1 | r1--;
| if (r1 <= 1) {
0x000abd8e blo.w 0xabeaa | goto label_56;
| }
0x000abd92 mov sb, fp | sb = fp;
0x000abd94 ldrb r4, [fp], 1 | r4 = *(fp);
| fp++;
0x000abd98 mov r0, r2 | r0 = r2;
0x000abd9a cmp r4, 0 |
0x000abd9c bne 0xabd78 |
| }
| label_57:
0x000abd9e mov r2, sb | r2 = sb;
0x000abda0 ldrb r0, [r0] | r0 = *(r0);
0x000abda2 ldrb r1, [r2] | r1 = *(r2);
0x000abda4 ldr r2, [pc, 0x364] |
0x000abda6 ldr r4, [sp, 0x18] | r4 = var_18h;
0x000abda8 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000abdaa str r0, [sp, 0x40] | *((sp + 0x40)) = r0;
0x000abdac add r2, pc | r2 = 0x157ebc;
0x000abdae add r1, r2 | r1 += r2;
0x000abdb0 add r2, r0 | r2 += r0;
0x000abdb2 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000abdb6 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000abdba cmp r1, r2 |
| if (r1 == r2) {
0x000abdbc beq.w 0xabaf0 | goto label_9;
| }
0x000abdbe add r6, sp, 0x260 | r6 = sp + 0x260;
| label_23:
0x000abdc0 ldr r1, [pc, 0x34c] |
0x000abdc2 mov r2, r3 | r2 = r3;
0x000abdc4 mov r0, r5 | r0 = r5;
0x000abdc6 add r1, pc | r1 = 0x157eda;
0x000abdc8 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000abdcc b 0xab998 | goto label_0;
| label_39:
0x000abdce cmp r2, 2 |
| if (r2 == 2) {
0x000abdd0 beq.w 0xabfba | goto label_58;
| }
0x000abdd4 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000abdd6 cmp r3, 0 |
| if (r3 == 0) {
0x000abdd8 beq 0xabe76 | goto label_41;
| }
0x000abdda mov r2, r4 | r2 = r4;
0x000abddc movs r1, 1 | r1 = 1;
0x000abdde mov r0, r5 | r0 = r5;
0x000abde0 bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000abde2 invalid |
| label_12:
0x000abde4 ldr r2, [pc, 0x32c] |
0x000abde6 mov r1, r4 | r1 = r4;
0x000abde8 ldr.w r3, [sl] | r3 = *(sl);
0x000abdec mov r0, r5 | r0 = r5;
0x000abdee add r2, pc | r2 = 0x157f06;
0x000abdf0 bl 0xab59c | fcn_000ab59c (r0, r1, r2, r3);
0x000abdf4 ldr r3, [r5] | r3 = *(r5);
0x000abdf6 str r3, [sp, 0x10] | var_10h = r3;
0x000abdf8 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000abdfa lsls r2, r3, 0x11 | r2 = r3 << 0x11;
| if (r2 >= r3) {
0x000abdfc bpl.w 0xabb18 | goto label_10;
| }
0x000abe00 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000abe04 cmp r3, 0 |
| if (r3 != 0) {
0x000abe06 bne.w 0xabb18 | goto label_10;
| }
0x000abe0a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000abe0c str r3, [sp, 0x18] | var_18h = r3;
0x000abe0e cmp r3, 0 |
| if (r3 == 0) {
0x000abe10 beq.w 0xac04e | goto label_59;
| }
| label_25:
0x000abe14 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x000abe18 movs r2, 0 | r2 = 0;
0x000abe1a ldr.w r1, [sl] | r1 = *(sl);
0x000abe1e adds r0, 0x38 | r0 += 0x38;
0x000abe20 bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x000abe24 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000abe26 cmp r3, 0 |
| if (r3 == 0) {
0x000abe28 beq.w 0xabfc8 | goto label_60;
| }
0x000abe2c ldr.w fp, [sp, 0x10] | fp = var_10h;
0x000abe30 movs r3, 1 | r3 = 1;
0x000abe32 strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000abe36 movs r2, 0 | r2 = 0;
0x000abe38 mov r1, r7 | r1 = r7;
0x000abe3a mov r0, fp | r0 = fp;
0x000abe3c bl 0x3a874 | fcn_0003a874 (r0, r1, r2);
0x000abe40 movs r2, 0 | r2 = 0;
0x000abe42 mov r1, r0 | r1 = r0;
0x000abe44 mov r0, r5 | r0 = r5;
0x000abe46 bl 0x9ffa4 | fcn_0009ffa4 (r0, r1, r2, r3);
0x000abe4a movs r3, 0 | r3 = 0;
0x000abe4c strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000abe50 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x000abe54 lsls r2, r3, 0xc | r2 = r3 << 0xc;
| if (r2 >= r3) {
0x000abe56 bpl.w 0xac05e | goto label_61;
| }
| label_11:
0x000abe5a ldr r3, [r5] | r3 = *(r5);
0x000abe5c str r3, [sp, 0x10] | var_10h = r3;
0x000abe5e b 0xabb18 | goto label_10;
| label_50:
0x000abe60 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000abe62 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000abe64 add r3, r6 | r3 += r6;
0x000abe66 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000abe68 ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
| label_49:
0x000abe6c bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x000abe70 strh.w r3, [r2, 0x4e] | *((r2 + 0x4e)) = r3;
0x000abe74 b 0xab998 | goto label_0;
| label_41:
0x000abe76 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000abe78 cmp r3, 0 |
| if (r3 == 0) {
0x000abe7a beq 0xabf5c | goto label_62;
| }
| label_20:
0x000abe7c mov r0, r5 | r0 = r5;
0x000abe7e bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000abe82 cmp r0, 0 |
| if (r0 == 0) {
0x000abe84 beq.w 0xab998 | goto label_0;
| }
0x000abe88 mov r2, r4 | r2 = r4;
0x000abe8a movs r1, 1 | r1 = 1;
0x000abe8c mov r0, r5 | r0 = r5;
0x000abe8e bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000abe92 cmp.w r8, 0 |
0x000abe94 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000abe96 bne 0xabe5a | goto label_11;
| }
0x000abe98 b 0xabde4 | goto label_12;
| label_42:
0x000abe9a ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000abe9c cmp r3, 0 |
| if (r3 == 0) {
0x000abe9e beq 0xabf6a | goto label_63;
| }
| label_21:
0x000abea0 mov r0, r5 | r0 = r5;
0x000abea2 bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x000abea6 str r0, [sp, 0x14] | var_14h = r0;
0x000abea8 b 0xabb2a | goto label_13;
| label_56:
0x000abeaa ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000abeae ldr r4, [sp, 0x18] | r4 = var_18h;
0x000abeb0 b 0xabaf0 | goto label_9;
| label_45:
0x000abeb2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000abeb4 mov r0, r5 | r0 = r5;
0x000abeb6 ldr r1, [pc, 0x260] |
0x000abeb8 ldr.w r3, [sl] | r3 = *(sl);
0x000abebc ldr r2, [r2] | r2 = *(r2);
0x000abebe add r1, pc | r1 = 0x157fdc;
0x000abec0 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000abec4 b 0xabb66 | goto label_14;
| label_40:
0x000abec6 ldr r1, [pc, 0x254] |
0x000abec8 mov r2, r3 | r2 = r3;
0x000abeca mov r0, r5 | r0 = r5;
0x000abecc add r1, pc | r1 = 0x157fee;
0x000abece bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000abed2 b 0xab998 | goto label_0;
| label_47:
0x000abed4 mov ip, r8 |
0x000abed6 ldr.w r8, [sl, 0x14] | r8 = *((sl + 0x14));
0x000abeda mov fp, r4 |
| label_16:
0x000abedc clz r0, ip | r0 &= ip;
0x000abee0 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000abee4 lsrs r0, r0, 5 | r0 >>= 5;
0x000abee6 cmp r8, ip |
0x000abee8 ite hs |
| if (r8 < ip) {
0x000abeea movhs r4, r0 | r4 = r0;
| }
| if (r8 >= ip) {
0x000abeec orrlo r4, r0, 1 | r4 = r0 | 1;
| }
| if (r4 != 0) {
0x000abef0 cbnz r4, 0xabf44 | goto label_64;
| }
0x000abef2 cmp r3, 0 |
| if (r3 == 0) {
0x000abef4 beq.w 0xabcea | goto label_15;
| }
| do {
| label_17:
0x000abef8 ldr r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x000abefa cmp ip, r2 |
0x000abefc ite ls |
| if (ip > r2) {
0x000abefe movls r1, r0 | r1 = r0;
| }
| if (ip <= r2) {
0x000abf00 orrhi r1, r0, 1 | r1 = r0 | 1;
| }
| if (r1 != 0) {
0x000abf04 cbz r1, 0xabf0c |
0x000abf06 cmp r4, r2 |
0x000abf08 it lo |
| if (r4 < r2) {
0x000abf0a movlo r4, r2 | r4 = r2;
| goto label_65;
| }
| }
| label_65:
0x000abf0c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000abf0e cmp r3, 0 |
0x000abf10 bne 0xabef8 |
| } while (r3 != 0);
| label_18:
0x000abf12 cmp r4, 0 |
| if (r4 == 0) {
0x000abf14 beq.w 0xabcea | goto label_15;
| }
0x000abf18 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x000abf1c ldr r3, [r5] | r3 = *(r5);
0x000abf1e cmp r0, 0 |
| if (r0 == 0) {
0x000abf20 beq.w 0xac08e | goto label_66;
| }
0x000abf24 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000abf26 movs r2, 0 | r2 = 0;
0x000abf28 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x000abf2a cmp r3, r0 |
| if (r3 == r0) {
0x000abf2c beq 0xabf38 | goto label_26;
| }
| do {
0x000abf2e ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x000abf30 adds r1, 0x10 | r1 += 0x10;
0x000abf32 adds r2, 1 | r2++;
0x000abf34 cmp r0, r3 |
0x000abf36 bne 0xabf2e |
| } while (r0 != r3);
| label_26:
0x000abf38 mov r1, r4 | r1 = r4;
0x000abf3a mov r0, r5 | r0 = r5;
0x000abf3c bl 0xab8cc | fcn_000ab8cc (r0, r1, r2);
0x000abf40 mov ip, r4 |
0x000abf42 b 0xabedc | goto label_16;
| label_64:
0x000abf44 mov r4, r8 | r4 = r8;
0x000abf46 cmp r3, 0 |
| if (r3 != 0) {
0x000abf48 bne 0xabef8 | goto label_17;
| }
0x000abf4a b 0xabf12 | goto label_18;
| label_43:
0x000abf4c movs r3, 0 | r3 = 0;
0x000abf4e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000abf50 mov r2, r3 | r2 = r3;
0x000abf52 movs r1, 0xaa | r1 = 0xaa;
0x000abf54 str r3, [sp] | *(sp) = r3;
0x000abf56 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000abf5a b 0xabb3e | goto label_19;
| label_62:
0x000abf5c ldr r3, [r5] | r3 = *(r5);
0x000abf5e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000abf60 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x000abf62 itt pl |
| if (r1 < r3) {
0x000abf64 movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x000abf66 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000abf68 b 0xabe7c | goto label_20;
| label_63:
0x000abf6a ldr r3, [sp, 0x10] | r3 = var_10h;
0x000abf6c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000abf6e lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000abf70 itt pl |
| if (r3 < r3) {
0x000abf72 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000abf74 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000abf76 b 0xabea0 | goto label_21;
| label_38:
0x000abf78 ldr.w r1, [sb, 0xc4] | r1 = *((sb + 0xc4));
0x000abf7c cmp r1, 0 |
| if (r1 != 0) {
0x000abf7e bne.w 0xabaea | goto label_22;
| }
0x000abf82 ldr.w r1, [sb, 0x17c] | r1 = *((sb + 0x17c));
0x000abf86 cmp r1, 0 |
| if (r1 <= 0) {
0x000abf88 ble.w 0xabdc0 | goto label_23;
| }
0x000abf8c ldr.w r1, [sb, 0x194] | r1 = *((sb + 0x194));
0x000abf90 cmp r1, 0 |
| if (r1 != 0) {
0x000abf92 bne.w 0xabdc0 | goto label_23;
| }
0x000abf96 b 0xabaea | goto label_22;
| label_29:
0x000abf98 cmp.w lr, 1 |
| if (lr == 1) {
0x000abf9c beq 0xac098 | goto label_67;
| }
0x000abf9e ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000abfa2 movs r6, 0 | r6 = 0;
0x000abfa4 ldr r2, [pc, 0x178] |
0x000abfa6 mov.w r4, 0x8000 | r4 = 0x8000;
0x000abfaa movt r6, 0xfff8 | r6 = (r6 & 0xFFFF) | 0xfff80000;
0x000abfae movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000abfb2 sub.w ip, r3, 0x80000 |
0x000abfb6 add r2, pc | r2 = 0x1580da;
0x000abfb8 b 0xaba12 | goto label_3;
| label_58:
0x000abfba ldr r1, [pc, 0x168] |
0x000abfbc mov r2, r3 | r2 = r3;
0x000abfbe mov r0, r5 | r0 = r5;
0x000abfc0 add r1, pc | r1 = 0x1580ea;
0x000abfc2 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000abfc6 b 0xab998 | goto label_0;
| label_60:
0x000abfc8 ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x000abfcc ldr r1, [sp, 0x10] | r1 = var_10h;
| if (r3 != 0) {
0x000abfce cbnz r3, 0xabfe0 | goto label_68;
| }
0x000abfd0 b 0xabe5a | goto label_11;
| label_24:
0x000abfd2 ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x000abfd4 lsls r0, r2, 0xc | r0 = r2 << 0xc;
| if (r0 < r2) {
0x000abfd6 bmi 0xabfe6 | goto label_69;
| }
0x000abfd8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000abfda cmp r3, 0 |
| if (r3 == 0) {
0x000abfdc beq.w 0xabe5a | goto label_11;
| }
| label_68:
0x000abfe0 ldrb r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x000abfe2 cmp r2, 0 |
| if (r2 == 0) {
0x000abfe4 beq 0xabfd2 | goto label_24;
| }
| label_69:
0x000abfe6 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000abfe8 movs r2, 0 | r2 = 0;
0x000abfea movs r1, 0x30 | r1 = 0x30;
0x000abfec ldr r0, [sp, 0x18] | r0 = var_18h;
0x000abfee subs r3, 1 | r3--;
0x000abff0 str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x000abff2 str r2, [sp] | *(sp) = r2;
0x000abff4 movs r2, 1 | r2 = 1;
0x000abff6 str r3, [sp, 0x14] | var_14h = r3;
0x000abff8 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000abffc ldr.w fp, [sp, 0x10] | fp = var_10h;
0x000ac000 movs r3, 1 | r3 = 1;
0x000ac002 strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000ac006 movs r2, 0 | r2 = 0;
0x000ac008 mov r1, r7 | r1 = r7;
0x000ac00a mov r0, fp | r0 = fp;
0x000ac00c bl 0x3a874 | fcn_0003a874 (r0, r1, r2);
0x000ac010 movs r2, 0 | r2 = 0;
0x000ac012 mov r1, r0 | r1 = r0;
0x000ac014 mov r0, r5 | r0 = r5;
0x000ac016 bl 0x9ffa4 | fcn_0009ffa4 (r0, r1, r2, r3);
0x000ac01a mov.w r3, 0 | r3 = 0;
0x000ac01e strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000ac022 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x000ac026 lsls r3, r3, 0xc | r3 <<= 0xc;
| if (r3 >= r3) {
0x000ac028 bpl 0xac05e | goto label_61;
| }
0x000ac02a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac02c cmp r3, 0 |
| if (r3 == 0) {
0x000ac02e beq.w 0xabe5a | goto label_11;
| }
0x000ac032 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac034 mvns r2, r3 | r2 = ~r3;
0x000ac036 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ac038 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000ac03a ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000ac03e cmn r1, r3 |
| if (r1 < r3) {
0x000ac040 bmi 0xac0be | goto label_70;
| }
0x000ac042 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ac044 ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x000ac046 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000ac048 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x000ac04c b 0xabe5a | goto label_11;
| label_59:
0x000ac04e ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000ac050 cmp r3, 0 |
| if (r3 == 0) {
0x000ac052 beq 0xac0ca | goto label_71;
| }
| label_27:
0x000ac054 mov r0, r5 | r0 = r5;
0x000ac056 bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x000ac05a str r0, [sp, 0x18] | var_18h = r0;
0x000ac05c b 0xabe14 | goto label_25;
| label_61:
0x000ac05e ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac060 mov.w fp, 0 |
0x000ac064 mov r2, fp | r2 = fp;
0x000ac066 movs r1, 0x30 | r1 = 0x30;
0x000ac068 ldr r3, [r0, 0x6c] | r3 = *((r0 + 0x6c));
0x000ac06a str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000ac06e adds r3, 2 | r3 += 2;
0x000ac070 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ac074 mov.w r2, -1 | r2 = -1;
0x000ac078 movs r1, 4 | r1 = 4;
0x000ac07a strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x000ac07e mov r3, fp | r3 = fp;
0x000ac080 movs r2, 2 | r2 = 2;
0x000ac082 movw r1, 0x313 | r1 = 0x313;
0x000ac086 mov r0, r5 | r0 = r5;
0x000ac088 bl 0x41ebc | fcn_00041ebc (r0, r1, r2, r3, r4, r5);
0x000ac08a invalid |
| label_66:
0x000ac08e mov.w r2, 0x8000 |
0x000ac092 movt r2, 0xffff | r2 = 0x-8000;
0x000ac096 b 0xabf38 | goto label_26;
| label_67:
0x000ac098 mov r1, sl | r1 = sl;
0x000ac09a mov r0, r5 | r0 = r5;
0x000ac09c bl 0x6340c | r0 = fcn_0006340c (r0, r1);
0x000ac0a0 cmp r0, 0 |
| if (r0 != 0) {
0x000ac0a2 bne.w 0xab998 | goto label_0;
| }
0x000ac0a6 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000ac0aa movs r6, 0 | r6 = 0;
0x000ac0ac mov.w r4, 0x8000 | r4 = 0x8000;
0x000ac0b0 movt r6, 0xfff8 | r6 = (r6 & 0xFFFF) | 0xfff80000;
0x000ac0b4 movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000ac0b8 sub.w ip, r3, 0x80000 |
0x000ac0bc b 0xaba0c | goto label_6;
| label_70:
0x000ac0be ldr r1, [sp, 0x18] | r1 = var_18h;
0x000ac0c0 bl 0x430c8 | fcn_000430c8 (r0, r1, r2);
0x000ac0c4 ldr r3, [r5] | r3 = *(r5);
0x000ac0c6 str r3, [sp, 0x10] | var_10h = r3;
0x000ac0c8 b 0xabb18 | goto label_10;
| label_71:
0x000ac0ca ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac0cc ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000ac0ce lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000ac0d0 itt pl |
| if (r3 < r3) {
0x000ac0d2 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000ac0d4 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000ac0d6 b 0xac054 | goto label_27;
| label_54:
0x000ac0d8 movs r3, 0 | r3 = 0;
0x000ac0da ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000ac0dc udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xac128 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000ac128 () | void fcn_000ac128 (int16_t arg_100h, int16_t arg_104h, int16_t arg_108h, int16_t arg_10ch, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_88h;
| int16_t var_a8h;
| int16_t var_d4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000ac128 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ac12c mov r8, r2 | r8 = r2;
0x000ac12e sub sp, 0xdc |
0x000ac130 ldr.w r2, [pc, 0xb5c] |
0x000ac134 mov sb, r1 | sb = r1;
0x000ac136 str r3, [sp, 0x14] | var_14h = r3;
0x000ac138 ldr.w r3, [pc, 0xb58] | r3 = *(0xacc94);
0x000ac13c add r2, pc | r2 = 0x158dd0;
0x000ac13e str r0, [sp, 0x10] | var_10h = r0;
0x000ac140 ldr r6, [sp, 0x100] | r6 = *(arg_100h);
0x000ac142 ldr r3, [r2, r3] |
0x000ac144 ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
0x000ac146 ldr r4, [sp, 0x10c] | r4 = *(arg_10ch);
0x000ac148 ldr r3, [r3] | r3 = imp.atan;
0x000ac14a str r3, [sp, 0xd4] | var_d4h = r3;
0x000ac14c mov.w r3, 0 | r3 = 0;
0x000ac150 movs r3, 0 | r3 = 0;
0x000ac152 strd r3, r3, [sp, 0x40] | __asm ("strd r3, r3, [var_40h]");
0x000ac156 ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x000ac158 ldr r7, [r0] | r7 = *(r0);
0x000ac15a str r3, [sp, 0x1c] | var_1ch = r3;
0x000ac15c ldrb.w r3, [sp, 0x118] | r3 = *(arg_118h);
0x000ac160 str r3, [sp, 0x18] | var_18h = r3;
0x000ac162 cmp r2, 0 |
| if (r2 != 0) {
0x000ac164 bne 0xac212 | goto label_1;
| }
0x000ac166 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac168 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000ac16a ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000ac16e cmp r2, 2 |
0x000ac170 sub.w r3, r3, 1 | r3--;
0x000ac174 clz r3, r3 | r3 &= r3;
0x000ac176 invalid |
0x000ac17a asrs r3, r2, 0xd | r3 = r2 >> 0xd;
0x000ac17c it eq |
| if (r2 != 2) {
0x000ac17e moveq r3, 0 | r3 = 0;
| }
0x000ac180 cmp r3, 0 |
| if (r3 != 0) {
0x000ac182 bne 0xac212 | goto label_1;
| }
0x000ac184 bl 0x97d18 | r0 = fcn_00097d18 (r0);
0x000ac188 cmp r0, 0 |
| if (r0 != 0) {
0x000ac18a bne 0xac212 | goto label_1;
| }
0x000ac18c cmp r6, 0 |
| if (r6 == 0) {
0x000ac18e beq 0xac22e | goto label_58;
| }
0x000ac190 ldr r2, [r6] | r2 = *(r6);
0x000ac192 cmp r2, 0 |
| if (r2 > 0) {
0x000ac194 bgt 0xac19c | goto label_59;
| }
0x000ac196 b 0xac22e | goto label_58;
| do {
0x000ac198 cmp r0, r2 |
| if (r0 == r2) {
0x000ac19a beq 0xac22e | goto label_58;
| }
| label_59:
0x000ac19c adds r0, 1 | r0++;
0x000ac19e lsls r3, r0, 4 | r3 = r0 << 4;
0x000ac1a0 adds r1, r6, r3 | r1 = r6 + r3;
0x000ac1a2 ldrb r1, [r1, 1] | r1 = *((r1 + 1));
0x000ac1a4 lsls r1, r1, 0x1a | r1 <<= 0x1a;
0x000ac1a6 bpl 0xac198 |
| } while (r1 >= r1);
0x000ac1a8 ldrb r3, [r6, r3] | r3 = *((r6 + r3));
0x000ac1aa cmp r3, 3 |
0x000ac1ac it ne |
| if (r3 != 3) {
0x000ac1ae cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != 3) {
0x000ac1b0 bne.w 0xac58a | goto label_60;
| }
0x000ac1b4 ldr.w r2, [pc, 0xae0] |
0x000ac1b8 add r2, pc | r2 = 0x158e54;
| label_12:
0x000ac1ba ldr.w r1, [pc, 0xae0] |
0x000ac1be ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac1c0 add r1, pc | r1 = 0x158e62;
0x000ac1c2 bl 0x37f78 | fcn_00037f78 (r0, r1);
| if (r4 != 0) {
0x000ac1c6 cbz r4, 0xac1d0 |
0x000ac1c8 mov r1, r4 | r1 = r4;
0x000ac1ca mov r0, r7 | r0 = r7;
0x000ac1cc bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
0x000ac1d0 mov r1, r6 | r1 = r6;
0x000ac1d2 mov r0, r7 | r0 = r7;
0x000ac1d4 mov.w fp, 0 |
0x000ac1d8 bl 0x30cbc | fcn_00030cbc (r0, r1);
| do {
| label_0:
0x000ac1dc ldr r1, [sp, 0x14] | r1 = var_14h;
0x000ac1de mov r0, r7 | r0 = r7;
0x000ac1e0 bl 0x30a7c | fcn_00030a7c (r0, r1);
0x000ac1e2 mcrr2 p1, 0xb, pc, ip, c11 | __asm ("mcrr2 p1, 0xb, pc, ip, c11");
0x000ac1e6 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000ac1e8 beq 0xac1f2 |
| label_57:
0x000ac1ea mov r1, fp | r1 = fp;
0x000ac1ec mov r0, r7 | r0 = r7;
0x000ac1ee bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000ac1f2 ldr.w r2, [pc, 0xaac] |
0x000ac1f6 ldr.w r3, [pc, 0xa9c] | r3 = *(0xacc96);
0x000ac1fa add r2, pc | r2 = 0x158ea0;
0x000ac1fc ldr r3, [r2, r3] | r3 = imp.atan;
0x000ac1fe ldr r2, [r3] | r2 = imp.atan;
0x000ac200 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x000ac202 eors r2, r3 | r2 ^= r3;
0x000ac204 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ac208 bne.w 0xacee2 | goto label_61;
| }
0x000ac20c add sp, 0xdc |
0x000ac20e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000ac212 mov.w fp, 0 |
| if (r4 != 0) {
| label_3:
0x000ac216 cbz r4, 0xac220 |
| label_5:
0x000ac218 mov r1, r4 | r1 = r4;
0x000ac21a mov r0, r7 | r0 = r7;
0x000ac21c bl 0x30c30 | fcn_00030c30 (r0, r1);
| }
| label_6:
0x000ac220 cmp r6, 0 |
0x000ac222 beq 0xac1dc |
| } while (r6 == 0);
0x000ac224 mov r1, r6 | r1 = r6;
0x000ac226 mov r0, r7 | r0 = r7;
0x000ac228 bl 0x30cbc | fcn_00030cbc (r0, r1);
0x000ac22c b 0xac1dc | goto label_0;
| label_58:
0x000ac22e ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac230 cmp r3, 0 |
| if (r3 == 0) {
0x000ac232 beq 0xac324 | goto label_62;
| }
0x000ac234 mov r2, r8 | r2 = r8;
0x000ac236 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac238 mov r1, sb | r1 = sb;
0x000ac23a add r3, sp, 0x40 | r3 += var_40h;
0x000ac23c bl 0x43f60 | r0 = fcn_00043f60 (r0, r1, r2, r3);
0x000ac240 subs r2, r0, 0 | r2 = r0 - 0;
0x000ac242 str r2, [sp, 0x28] | var_28h = r2;
| if (r2 < r0) {
0x000ac244 blt 0xac212 | goto label_1;
| }
0x000ac246 ldrb.w r3, [r7, 0xb1] | r3 = *((r7 + 0xb1));
0x000ac24a cmp r3, 0 |
| if (r3 == 0) {
0x000ac24c beq.w 0xac5ec | goto label_63;
| }
0x000ac250 mov r3, r2 | r3 = r2;
| label_14:
0x000ac252 sub.w lr, r3, 1 | lr = r3 - 1;
0x000ac256 lsls r2, r3, 4 | r2 = r3 << 4;
0x000ac258 clz lr, lr | lr &= lr;
0x000ac25c lsr.w lr, lr, 5 | lr >>= 5;
0x000ac260 str r2, [sp, 0x24] | var_24h = r2;
| label_27:
0x000ac262 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000ac264 mov.w fp, 0 |
0x000ac268 ldr.w r1, [pc, 0xa38] |
0x000ac26c ldr.w r0, [pc, 0xa38] | r0 = *(0x000acca8);
0x000ac26e lsrs r0, r7, 8 | r0 = r7 >> 8;
0x000ac270 ldr r3, [r5] | r3 = *(r5);
0x000ac272 vdup.32 d16, r5 | __asm ("vdup.32 d16, r5");
0x000ac276 add r1, pc | r1 = 0x158f1e;
0x000ac278 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000ac27a add r0, pc | r0 += pc;
0x000ac27c ldr.w ip, [r3, 0x10] | ip = *((r3 + 0x10));
0x000ac280 ldr.w r3, [pc, 0xa28] | r3 = *(0x000accac);
0x000ac284 ldr.w r2, [pc, 0xa28] | r2 = *(0x000accb0);
0x000ac288 add.w r8, ip, r5 | r8 = ip + r5;
0x000ac28c ldr.w r5, [ip, r5] | r5 = *((ip + r5));
0x000ac290 add r3, pc | r3 += pc;
0x000ac292 str r0, [sp, 0x58] | var_58h = r0;
0x000ac294 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x000ac298 add r2, pc | r2 += pc;
0x000ac29a str r1, [sp, 0x7c] | var_7ch = r1;
0x000ac29c ldr r1, [sp, 0x40] | r1 = var_40h;
0x000ac29e str r3, [sp, 0x60] | var_60h = r3;
0x000ac2a0 add r3, sp, 0x50 | r3 += var_50h;
0x000ac2a2 str r3, [sp, 0x6c] | var_6ch = r3;
0x000ac2a4 add r3, sp, 0x88 | r3 += var_88h;
0x000ac2a6 str r1, [sp, 0x80] | var_80h = r1;
0x000ac2a8 mov r1, fp | r1 = fp;
0x000ac2aa str r2, [sp, 0x5c] | var_5ch = r2;
0x000ac2ac movs r2, 0x4c | r2 = 0x4c;
0x000ac2ae str r0, [sp, 0x70] | var_70h = r0;
0x000ac2b0 mov r0, r3 | r0 = r3;
0x000ac2b2 strb.w lr, [sp, 0x74] | var_74h = lr;
0x000ac2b6 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x000ac2ba str r5, [sp, 0x78] | var_78h = r5;
0x000ac2bc str.w fp, [sp, 0x64] | __asm ("str.w fp, [var_64h]");
0x000ac2c0 strh.w fp, [sp, 0x68] | var_68h = fp;
0x000ac2c4 blx 0x62ec | fcn_000062ec ();
0x000ac2c8 ldr r5, [sp, 0x14] | r5 = var_14h;
0x000ac2ca mov r1, r0 | r1 = r0;
0x000ac2cc add r0, sp, 0x54 | r0 += var_54h;
0x000ac2ce str r5, [sp, 0xa8] | var_a8h = r5;
0x000ac2d0 bl 0x35ff0 | fcn_00035ff0 (r0, r1, r2, r3, r4, r5);
0x000ac2d4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac2d6 add.w r2, r5, 8 | r2 = r5 + 8;
0x000ac2da mov r1, fp | r1 = fp;
0x000ac2dc bl 0x98544 | r0 = fcn_00098544 (r0, r1, r2);
0x000ac2e0 mov sl, r0 | sl = r0;
0x000ac2e2 cmp r0, 0 |
| if (r0 == 0) {
0x000ac2e4 beq 0xac212 | goto label_1;
| }
0x000ac2e6 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000ac2e8 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000ac2ea ldr r2, [r0] | r2 = *(r0);
0x000ac2ec cmp r1, 1 |
| if (r1 == 1) {
0x000ac2ee beq.w 0xac8fa | goto label_64;
| }
| label_23:
0x000ac2f2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ac2f4 add r3, r2 | r3 += r2;
0x000ac2f6 str r3, [sp, 0x20] | var_20h = r3;
0x000ac2f8 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000ac2fc ands r8, r3, 0x80 | r8 = r3 & 0x80;
| if (r8 == r3) {
0x000ac300 beq 0xac36a | goto label_28;
| }
0x000ac302 ldr.w r8, [sl, 8] | r8 = *((sl + 8));
0x000ac306 mov r2, r8 | r2 = r8;
0x000ac308 cmp.w r8, 0 |
| if (r8 != 0) {
0x000ac30c bne 0xac314 | goto label_65;
| }
0x000ac30e b 0xac36a | goto label_28;
| do {
0x000ac310 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| if (r2 == 0) {
0x000ac312 cbz r2, 0xac320 | goto label_66;
| }
| label_65:
0x000ac314 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000ac318 and r3, r3, 3 | r3 &= 3;
0x000ac31c cmp r3, 2 |
0x000ac31e bne 0xac310 |
| } while (r3 != 2);
| label_66:
0x000ac320 mov r8, r2 | r8 = r2;
0x000ac322 b 0xac36a | goto label_28;
| label_62:
0x000ac324 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac326 ldr.w sl, [r3, 0xec] | sl = *((r3 + 0xec));
0x000ac32a cmp.w sl, 0 |
| if (sl == 0) {
0x000ac32e beq.w 0xac212 | goto label_1;
| }
0x000ac332 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000ac334 ldr.w r8, [sl, 0x3c] | r8 = *((sl + 0x3c));
0x000ac338 str r3, [sp, 0x20] | var_20h = r3;
0x000ac33a cmp.w r8, 0 |
| if (r8 == 0) {
0x000ac33e beq.w 0xace82 | goto label_67;
| }
0x000ac342 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ac344 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000ac346 cmp r8, r3 |
| if (r8 == r3) {
0x000ac348 beq.w 0xac9ac | goto label_68;
| }
0x000ac34c mov r3, r2 | r3 = r2;
0x000ac34e ldr r2, [sp, 0x14] | r2 = var_14h;
0x000ac350 adds r3, 0x10 | r3 += 0x10;
| do {
0x000ac352 mov r1, r3 | r1 = r3;
0x000ac354 adds r2, 1 | r2++;
0x000ac356 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000ac358 adds r3, 0x10 | r3 += 0x10;
0x000ac35a cmp r8, r0 |
0x000ac35c bne 0xac352 |
| } while (r8 != r0);
0x000ac35e lsls r3, r2, 4 | r3 = r2 << 4;
0x000ac360 mov.w r8, 0 | r8 = 0;
0x000ac364 str r2, [sp, 0x28] | var_28h = r2;
0x000ac366 str r1, [sp, 0x20] | var_20h = r1;
0x000ac368 str r3, [sp, 0x24] | var_24h = r3;
| label_28:
0x000ac36a ldr.w r2, [sl] | r2 = *(sl);
| if (r2 == 0) {
0x000ac36e cbz r2, 0xac3ce | goto label_8;
| }
0x000ac370 ldr.w r0, [pc, 0x940] |
0x000ac374 mov r1, r2 | r1 = r2;
0x000ac376 ldr.w sb, [pc, 0x940] |
0x000ac37a mov.w ip, 6 |
0x000ac37e add r0, pc | r0 = 0x159036;
0x000ac380 add sb, pc | sb = 0x15903e;
0x000ac382 b 0xac3a2 |
| while (r3 != 0) {
0x000ac384 add r3, sb | r3 += sb;
0x000ac386 adds r0, 1 | r0++;
0x000ac388 ldrb.w r5, [r3, 0x140] | r5 = *((r3 + 0x140));
0x000ac38c ldrb.w r3, [lr] | r3 = *(lr);
0x000ac390 add r3, sb | r3 += sb;
0x000ac392 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000ac396 cmp r5, r3 |
| if (r5 != r3) {
0x000ac398 bne 0xac3ae | goto label_69;
| }
0x000ac39a subs.w ip, ip, 1 |
| if (ip <= ip) {
0x000ac39e blo.w 0xac4e4 | goto label_70;
| }
0x000ac3a2 mov fp, r1 |
0x000ac3a4 ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x000ac3a8 mov lr, r0 | lr = r0;
0x000ac3aa cmp r3, 0 |
0x000ac3ac bne 0xac384 |
| }
| label_69:
0x000ac3ae ldr.w r3, [pc, 0x90c] |
0x000ac3b2 ldrb.w r1, [fp] | r1 = *(fp);
0x000ac3b6 ldrb.w r0, [lr] | r0 = *(lr);
0x000ac3ba add r3, pc | r3 = 0x15907c;
0x000ac3bc add r1, r3 | r1 += r3;
0x000ac3be add r3, r0 | r3 += r0;
0x000ac3c0 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000ac3c4 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000ac3c8 cmp r1, r3 |
| if (r1 == r3) {
0x000ac3ca beq.w 0xac4e4 | goto label_70;
| }
| label_8:
0x000ac3ce ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000ac3d2 cmp r3, 2 |
| if (r3 == 2) {
0x000ac3d4 beq.w 0xac91a | goto label_71;
| }
0x000ac3d8 cmp r3, 1 |
| if (r3 == 1) {
0x000ac3da beq.w 0xac92a | goto label_72;
| }
0x000ac3de ldr r1, [sp, 0x40] | r1 = var_40h;
0x000ac3e0 str r1, [sp, 0x2c] | var_2ch = r1;
0x000ac3e2 cmp r1, 0 |
| if (r1 == 0) {
0x000ac3e4 beq.w 0xac50e | goto label_73;
| }
0x000ac3e8 mov r0, r7 | r0 = r7;
0x000ac3ea bl 0x39394 | r0 = fcn_00039394 (r0, r1);
0x000ac3ee mov fp, r0 |
0x000ac3f0 cmp r0, 0 |
| if (r0 == 0) {
0x000ac3f2 beq 0xac490 | goto label_9;
| }
0x000ac3f4 ldr.w r2, [pc, 0x8c8] |
0x000ac3f8 mov r1, r0 | r1 = r0;
0x000ac3fa ldr r5, [sp, 0x10] | r5 = var_10h;
0x000ac3fc ldr.w r3, [sl] | r3 = *(sl);
0x000ac400 add r2, pc | r2 = 0x1590c4;
0x000ac402 mov r0, r5 | r0 = r5;
0x000ac404 bl 0x57278 | r0 = fcn_00057278 (r0, r1, r2, r3);
0x000ac408 cmp r0, 0 |
| if (r0 != 0) {
0x000ac40a bne 0xac490 | goto label_9;
| }
0x000ac40c ldrb.w r3, [r5, 0xd0] | r3 = *((r5 + 0xd0));
0x000ac410 cmp r3, 1 |
| if (r3 < 1) {
0x000ac412 bls.w 0xac592 | goto label_74;
| }
| label_11:
0x000ac416 cmp r6, 0 |
| if (r6 == 0) {
0x000ac418 beq.w 0xac936 | goto label_75;
| }
0x000ac41c ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac41e ldr r3, [r3] | r3 = *(r3);
0x000ac420 ldr.w r2, [r3, 0x80] | r2 = *((r3 + 0x80));
0x000ac424 ldr r3, [r6] | r3 = *(r6);
0x000ac426 cmp r2, r3 |
| if (r2 < r3) {
0x000ac428 blt.w 0xac9d2 | goto label_76;
| }
| label_30:
0x000ac42c ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac42e ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
| if (r3 != 0) {
0x000ac430 cbnz r3, 0xac490 | goto label_9;
| }
0x000ac432 ldr r3, [r6] | r3 = *(r6);
| label_25:
0x000ac434 cmp r3, 0 |
0x000ac436 mov.w r2, 0 | r2 = 0;
| if (r3 <= 0) {
0x000ac43a ble.w 0xacac4 | goto label_77;
| }
0x000ac43e mov r5, r6 | r5 = r6;
0x000ac440 str r6, [sp, 0x30] | var_30h = r6;
0x000ac442 str r4, [sp, 0x34] | var_34h = r4;
0x000ac444 mov sb, r2 | sb = r2;
0x000ac446 mov r6, r2 | r6 = r2;
0x000ac448 mov r4, r3 | r4 = r3;
0x000ac44a b 0xac456 |
| while (r0 != 0x71) {
| label_2:
0x000ac44c adds r6, 1 | r6++;
0x000ac44e adds r5, 0x10 | r5 += 0x10;
0x000ac450 cmp r4, r6 |
| if (r4 == r6) {
0x000ac452 beq.w 0xac610 | goto label_78;
| }
0x000ac456 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x000ac458 ldrb r0, [r1] | r0 = *(r1);
0x000ac45a cmp r0, 0x71 |
0x000ac45c bne 0xac44c |
| }
0x000ac45e ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x000ac460 movs r1, 1 | r1 = 1;
| if (r0 != 0) {
0x000ac462 cbz r0, 0xac46e |
0x000ac464 blx 0x65dc | r0 = strcmp (r0, r1);
0x000ac468 bic r1, r0, 0xc0000000 | r1 = BIT_MASK (r0, 0xc0000000);
0x000ac46c adds r1, 1 | r1++;
| }
0x000ac46e add sb, r1 | sb += r1;
0x000ac470 b 0xac44c | goto label_2;
| label_16:
0x000ac472 mov r1, r4 | r1 = r4;
0x000ac474 mov r0, r8 | r0 = r8;
0x000ac476 bl 0x45e44 | r0 = fcn_00045e44 (r0, r1);
0x000ac47a cmp r0, 0 |
| if (r0 != 0) {
0x000ac47c bne.w 0xac7a0 | goto label_79;
| }
| label_15:
0x000ac480 ldr.w fp, [sp, 0x38] | fp = var_38h;
| label_36:
0x000ac484 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000ac486 movs r4, 0 | r4 = 0;
| label_24:
0x000ac488 mov r1, sb | r1 = sb;
0x000ac48a mov r0, r7 | r0 = r7;
0x000ac48c bl 0x30f98 | fcn_00030f98 (r0, r1);
| label_9:
0x000ac490 ldr.w sb, [sl, 8] | sb = *((sl + 8));
0x000ac494 add.w r2, sl, 8 | r2 = sl + 8;
0x000ac498 cmp.w sb, 0 |
| if (sb == 0) {
0x000ac49c beq.w 0xac216 | goto label_3;
| }
| label_7:
0x000ac4a0 ldrb.w r1, [sb, 0x36] | r1 = *((sb + 0x36));
0x000ac4a4 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x000ac4a8 cmp r1, 5 |
| if (r1 != 5) {
0x000ac4aa bne 0xac4d6 | goto label_80;
| }
0x000ac4ac mov r1, sb | r1 = sb;
| if (r3 != 0) {
0x000ac4ae cbnz r3, 0xac4c6 | goto label_81;
| }
0x000ac4b0 b 0xac216 | goto label_3;
| label_4:
0x000ac4b2 str r3, [r2] | *(r2) = r3;
0x000ac4b4 mov r2, r3 | r2 = r3;
0x000ac4b6 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x000ac4b8 str r0, [r1, 0x14] | *((r1 + 0x14)) = r0;
0x000ac4ba str r1, [r2, 0x14]! | *((r2 += 0x14)) = r1;
0x000ac4be ldr r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x000ac4c0 cmp r3, 0 |
| if (r3 == 0) {
0x000ac4c2 beq.w 0xac216 | goto label_3;
| }
| label_81:
0x000ac4c6 ldrb.w r0, [r3, 0x36] | r0 = *((r3 + 0x36));
0x000ac4ca cmp r0, 5 |
| if (r0 != 5) {
0x000ac4cc bne 0xac4b2 | goto label_4;
| }
0x000ac4ce cmp r4, 0 |
| if (r4 != 0) {
0x000ac4d0 bne.w 0xac218 | goto label_5;
| }
0x000ac4d4 b 0xac220 | goto label_6;
| label_80:
0x000ac4d6 add.w r2, sb, 0x14 | r2 = sb + 0x14;
0x000ac4da cmp r3, 0 |
| if (r3 == 0) {
0x000ac4dc beq.w 0xac216 | goto label_3;
| }
0x000ac4e0 mov sb, r3 | sb = r3;
0x000ac4e2 b 0xac4a0 | goto label_7;
| label_70:
0x000ac4e4 ldrb.w r3, [r7, 0xb1] | r3 = *((r7 + 0xb1));
0x000ac4e8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000ac4ea clz r3, r3 | r3 &= r3;
0x000ac4ee lsrs r3, r3, 5 | r3 >>= 5;
0x000ac4f0 cmp r1, 0 |
0x000ac4f2 it eq |
| if (r1 != 0) {
0x000ac4f4 moveq r3, 0 | r3 = 0;
| }
0x000ac4f6 cmp r3, 0 |
| if (r3 == 0) {
0x000ac4f8 beq.w 0xac3ce | goto label_8;
| }
0x000ac4fc ldr.w r1, [pc, 0x7c4] |
0x000ac500 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac502 add r1, pc | r1 = 0x1591ca;
0x000ac504 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_10:
0x000ac508 mov.w fp, 0 |
0x000ac50c b 0xac490 | goto label_9;
| label_73:
0x000ac50e ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x000ac512 movs r3, 1 | r3 = 1;
| if (r1 == 0) {
0x000ac514 cbz r1, 0xac51e | goto label_82;
| }
| do {
0x000ac516 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x000ac518 adds r3, 1 | r3++;
0x000ac51a cmp r1, 0 |
0x000ac51c bne 0xac516 |
| } while (r1 != 0);
| label_82:
0x000ac51e ldr.w r1, [pc, 0x7a8] |
0x000ac522 mov r0, r7 | r0 = r7;
0x000ac524 add r1, pc | r1 = 0x1591f2;
0x000ac526 bl 0x4a320 | r0 = fcn_0004a320 (r0);
0x000ac52a mov fp, r0 |
0x000ac52c cmp r0, 0 |
| if (r0 == 0) {
0x000ac52e beq 0xac508 | goto label_10;
| }
0x000ac530 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac532 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
| if (r3 == 0) {
0x000ac536 cbz r3, 0xac54a | goto label_83;
| }
0x000ac538 ldrb r3, [r0, 7] | r3 = *((r0 + 7));
0x000ac53a adds r3, 1 | r3++;
0x000ac53c strb r3, [r0, 7] | *((r0 + 7)) = r3;
0x000ac53e ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac540 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000ac544 cmp r3, 1 |
| if (r3 > 1) {
0x000ac546 bhi.w 0xac416 | goto label_11;
| }
| label_83:
0x000ac54a ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ac54c ldr.w sb, [r3] | sb = *(r3);
| label_13:
0x000ac550 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000ac552 cmp r3, 1 |
| if (r3 == 1) {
0x000ac554 beq.w 0xac9b6 | goto label_84;
| }
0x000ac558 ldr.w r2, [pc, 0x770] |
0x000ac55c movs r1, 0x12 | r1 = 0x12;
0x000ac55e ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac560 movs r3, 0 | r3 = 0;
0x000ac562 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ac566 add r2, pc | r2 = 0x159236;
0x000ac568 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000ac56c movs r1, 1 | r1 = 1;
0x000ac56e cmp r0, 0 |
| if (r0 != 0) {
0x000ac570 bne 0xac490 | goto label_9;
| }
| label_29:
0x000ac572 ldr.w r3, [sl] | r3 = *(sl);
0x000ac576 mov r2, fp | r2 = fp;
0x000ac578 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac57a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ac57c str r0, [sp] | *(sp) = r0;
0x000ac57e bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000ac582 cmp r0, 0 |
| if (r0 == 0) {
0x000ac584 beq.w 0xac416 | goto label_11;
| }
0x000ac588 b 0xac490 | goto label_9;
| label_60:
0x000ac58a ldr.w r2, [pc, 0x744] |
0x000ac58e add r2, pc | r2 = 0x159264;
0x000ac590 b 0xac1ba | goto label_12;
| label_74:
0x000ac592 ldrb.w r2, [r7, 0xb1] | r2 = *((r7 + 0xb1));
| if (r2 == 0) {
0x000ac596 cbnz r2, 0xac5a6 |
0x000ac598 mov r1, fp | r1 = fp;
0x000ac59a mov r0, r7 | r0 = r7;
0x000ac59c bl 0x56ec0 | r0 = fcn_00056ec0 (r0, r1, r2, r3);
0x000ac5a0 cmp r0, 0 |
| if (r0 != 0) {
0x000ac5a2 bne.w 0xacadc | goto label_85;
| }
| }
0x000ac5a6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ac5a8 mov r1, fp | r1 = fp;
0x000ac5aa mov r0, r7 | r0 = r7;
0x000ac5ac ldr.w sb, [r3] | sb = *(r3);
0x000ac5b0 mov r2, sb | r2 = sb;
0x000ac5b2 bl 0x32fc4 | r0 = fcn_00032fc4 (r0, r1, r2, r3);
0x000ac5b6 cmp r0, 0 |
| if (r0 == 0) {
0x000ac5b8 beq 0xac550 | goto label_13;
| }
0x000ac5ba ldr r3, [sp, 0x114] | r3 = *(arg_114h);
0x000ac5bc cmp r3, 0 |
| if (r3 == 0) {
0x000ac5be beq.w 0xacc74 | goto label_86;
| }
0x000ac5c2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac5c4 movs r2, 1 | r2 = 1;
0x000ac5c6 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000ac5c8 ldr r0, [r3, 0x74] | r0 = *((r3 + 0x74));
0x000ac5ca lsls r2, r1 | r2 <<= r1;
0x000ac5cc cmp r0, 0 |
0x000ac5ce it eq |
| if (r0 != 0) {
0x000ac5d0 moveq r0, r3 | r0 = r3;
| }
0x000ac5d2 ldr r3, [r0, 0x54] | r3 = *((r0 + 0x54));
0x000ac5d4 tst r3, r2 |
| if ((r3 & r2) == 0) {
0x000ac5d6 bne 0xac5e4 |
0x000ac5d8 cmp r1, 1 |
0x000ac5da orr.w r3, r3, r2 | r3 |= r2;
0x000ac5de str r3, [r0, 0x54] | *((r0 + 0x54)) = r3;
| if (r1 == 1) {
0x000ac5e0 beq.w 0xacebc | goto label_87;
| }
| }
| label_54:
0x000ac5e4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac5e6 bl 0x41b2c | fcn_00041b2c (r0, r1);
0x000ac5ea b 0xac490 | goto label_9;
| label_63:
0x000ac5ec ldrd r0, r1, [sp, 0x10] | __asm ("ldrd r0, r1, [var_14h]");
0x000ac5f0 bl 0x9975c | fcn_0009975c (r0, r1);
0x000ac5f4 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000ac5f8 cmp r0, 0 |
0x000ac5fa clz r3, r3 | r3 &= r3;
0x000ac5fe lsr.w r3, r3, 5 | r3 >>= 5;
0x000ac602 it eq |
| if (r0 != 0) {
0x000ac604 moveq r3, 0 | r3 = 0;
| }
0x000ac606 cmp r3, 0 |
| if (r3 != 0) {
0x000ac608 bne.w 0xac994 | goto label_88;
| }
| label_26:
0x000ac60c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000ac60e b 0xac252 | goto label_14;
| label_78:
0x000ac610 mov r3, r4 | r3 = r4;
0x000ac612 ldrd r6, r4, [sp, 0x30] | __asm ("ldrd r6, r4, [var_30h]");
| label_34:
0x000ac616 mov r0, fp | r0 = fp;
0x000ac618 str r3, [sp, 0x30] | var_30h = r3;
0x000ac61a blx 0x65dc | strcmp (r0, r1);
0x000ac61e ldr r3, [sp, 0x30] | r3 = var_30h;
0x000ac620 bic r5, r0, 0xc0000000 | r5 = BIT_MASK (r0, 0xc0000000);
0x000ac624 movs r1, 1 | r1 = 1;
0x000ac626 cmp.w r8, 0 |
| if (r8 != 0) {
0x000ac62a beq 0xac630 |
0x000ac62c ldrh.w r1, [r8, 0x32] | r1 = *((r8 + 0x32));
| }
0x000ac630 mov r2, sb | r2 = sb;
0x000ac632 add r1, r3 | r1 += r3;
0x000ac634 add r2, r5 | r2 += r5;
0x000ac636 add r3, sp, 0x44 | r3 += var_44h;
0x000ac638 sxth r1, r1 | __asm ("sxth r1, r1");
0x000ac63a adds r2, 1 | r2++;
0x000ac63c mov r0, r7 | r0 = r7;
0x000ac63e bl 0x39abc | fcn_00039abc (r0, r1, r2, r3);
0x000ac642 ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x000ac646 mov sb, r0 | sb = r0;
0x000ac648 str r3, [sp, 0x30] | var_30h = r3;
0x000ac64a cmp r3, 0 |
| if (r3 != 0) {
0x000ac64c bne.w 0xac912 | goto label_89;
| }
0x000ac650 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000ac652 adds r2, r5, 1 | r2 = r5 + 1;
0x000ac654 adds r1, r0, r2 | r1 = r0 + r2;
0x000ac656 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x000ac65a str r1, [sp, 0x44] | var_44h = r1;
0x000ac65c mov r1, fp | r1 = fp;
0x000ac65e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000ac662 ldr r3, [sp, 0x104] | r3 = *(arg_104h);
0x000ac664 ldrb.w r1, [sb, 0x37] | r1 = *((sb + 0x37));
0x000ac668 str.w sl, [sb, 0xc] | __asm ("str.w sl, [sb, 0xc]");
0x000ac66c strb.w r3, [sb, 0x36] | *((sb + 0x36)) = r3;
0x000ac670 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000ac672 bic r1, r1, 0xb | r1 = BIT_MASK (r1, 0xb);
0x000ac676 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ac678 add r2, r3 | r2 += r3;
0x000ac67a ldr r3, [sp, 0x104] | r3 = *(arg_104h);
0x000ac67c ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000ac67e str.w r2, [sb, 0x18] | __asm ("str.w r2, [sb, 0x18]");
0x000ac680 movs r0, 0x18 | r0 = 0x18;
0x000ac682 subs r2, r3, 0 | r2 = r3 - 0;
0x000ac684 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ac686 it ne |
| if (r2 == r3) {
0x000ac688 movne r2, 1 | r2 = 1;
| }
0x000ac68a orr.w r2, r3, r2, lsl 3 | r2 = r3 | (r2 << 3);
0x000ac68e and r2, r2, 0xb | r2 &= 0xb;
0x000ac692 orrs r2, r1 | r2 |= r1;
0x000ac694 strb.w r2, [sb, 0x37] | *((sb + 0x37)) = r2;
0x000ac698 ldrh r2, [r6] | r2 = *(r6);
0x000ac69a strh.w r2, [sb, 0x32] | *((sb + 0x32)) = r2;
0x000ac69c movs r0, 0x32 | r0 = 0x32;
| if (r4 != 0) {
0x000ac69e cbz r4, 0xac6b8 |
0x000ac6a0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000ac6a2 movs r2, 2 | r2 = 2;
0x000ac6a4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac6a6 mov r1, sl | r1 = sl;
0x000ac6a8 str r3, [sp] | *(sp) = r3;
0x000ac6aa mov r3, r4 | r3 = r4;
0x000ac6ac bl 0x48b84 | fcn_00048b84 (r0, r1, r2, r3);
0x000ac6b0 ldrh.w r2, [sb, 0x32] | r2 = *((sb + 0x32));
0x000ac6b4 str.w r4, [sb, 0x24] | __asm ("str.w r4, [sb, 0x24]");
0x000ac6b6 ands r4, r4 | r4 &= r4;
| }
0x000ac6b8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ac6ba ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000ac6bc ldrb.w r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x000ac6c0 cmp r3, 3 |
0x000ac6c2 mov.w r3, -1 | r3 = -1;
0x000ac6c4 adds r3, 0xff | r3 += 0xff;
0x000ac6c6 it ls |
| if (r3 > 0xff) {
0x000ac6c8 movls r3, 0 | r3 = 0;
| }
0x000ac6ca mov r1, r3 | r1 = r3;
0x000ac6cc ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac6ce ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000ac6d2 cmp r3, 1 |
0x000ac6d4 it ls |
| if (r3 > 1) {
0x000ac6d6 strls r6, [sp, 0x30] | var_30h = r6;
| }
| if (r3 >= 1) {
0x000ac6d8 bls 0xac6e2 |
0x000ac6da movs r3, 0 | r3 = 0;
0x000ac6dc str.w r6, [sb, 0x28] | __asm ("str.w r6, [sb, 0x28]");
0x000ac6e0 str r3, [sp, 0x30] | var_30h = r3;
| }
0x000ac6e2 cmp r2, 0 |
| if (r2 == 0) {
0x000ac6e4 beq.w 0xace7e | goto label_90;
| }
0x000ac6e8 ldr.w r3, [pc, 0x5e8] |
0x000ac6ec add.w r5, r6, 0x18 | r5 = r6 + 0x18;
0x000ac6f0 strd fp, r8, [sp, 0x38] | __asm ("strd fp, r8, [var_38h]");
0x000ac6f4 movs r6, 0 | r6 = 0;
0x000ac6f6 ldr.w r8, [sp, 0x10] | r8 = var_10h;
0x000ac6fa mov fp, r1 |
0x000ac6fc add r3, pc |
0x000ac6fe add.w r3, r3, 0x780 | r3 = 0x159b54;
0x000ac702 str r3, [sp, 0x34] | var_34h = r3;
| label_17:
0x000ac704 ldr r3, [r5, -0x10] | r3 = *((r5 - 0x10));
0x000ac708 ldrb r2, [r3] | r2 = *(r3);
0x000ac70a cmp r2, 0x75 |
0x000ac70c itt eq |
| if (r2 != 0x75) {
0x000ac70e moveq r2, 0x3b | r2 = 0x3b;
| }
| if (r2 != 0x75) {
0x000ac710 strbeq r2, [r3] | *(r3) = r2;
| }
| if (r2 != 0x75) {
0x000ac712 beq 0xac724 |
0x000ac714 cmp r2, 0x71 |
| if (r2 != 0x71) {
0x000ac716 bne 0xac724 | goto label_91;
| }
0x000ac718 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000ac71a ldrb r1, [r2] | r1 = *(r2);
0x000ac71c cmp r1, 0x75 |
0x000ac71e itt eq |
| if (r1 != 0x75) {
0x000ac720 moveq r1, 0x3b | r1 = 0x3b;
| }
| if (r1 == 0x75) {
0x000ac722 strbeq r1, [r2] | *(r2) = r1;
| goto label_91;
| }
| }
| label_91:
0x000ac724 movs r2, 0 | r2 = 0;
0x000ac726 mov r1, sl | r1 = sl;
0x000ac728 str r2, [sp] | *(sp) = r2;
0x000ac72a mov r0, r8 | r0 = r8;
0x000ac72c movs r2, 0x20 | r2 = 0x20;
0x000ac72e bl 0x48b84 | fcn_00048b84 (r0, r1, r2, r3);
0x000ac732 ldr.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x000ac736 cmp r3, 0 |
| if (r3 != 0) {
0x000ac738 bne.w 0xac480 | goto label_15;
| }
0x000ac73c ldr r3, [r5, -0x10] | r3 = *((r5 - 0x10));
0x000ac740 cmp r3, 0 |
| if (r3 == 0) {
0x000ac742 beq.w 0xacf68 | goto label_92;
| }
0x000ac746 mov r2, r3 | r2 = r3;
0x000ac748 b 0xac752 |
| while (r1 != r1) {
0x000ac74a ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000ac74c cmp r2, 0 |
| if (r2 == 0) {
0x000ac74e beq.w 0xacf68 | goto label_92;
| }
0x000ac752 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000ac754 ands r1, r1, 0x2000 | r1 &= 0x2000;
0x000ac758 bne 0xac74a |
| }
0x000ac75a ldrb r0, [r2] | r0 = *(r2);
0x000ac75c cmp r0, 0xa7 |
| if (r0 == 0xa7) {
0x000ac75e beq 0xac834 | goto label_93;
| }
0x000ac760 ldr.w r2, [r8, 0xec] | r2 = *((r8 + 0xec));
0x000ac764 cmp r2, sl |
| if (r2 == sl) {
0x000ac766 beq.w 0xacac8 | goto label_94;
| }
0x000ac76a ldr.w r2, [sb, 0x28] | r2 = *((sb + 0x28));
0x000ac76e cmp r2, 0 |
| if (r2 == 0) {
0x000ac770 beq.w 0xac8d4 | goto label_95;
| }
| label_22:
0x000ac774 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x000ac778 movw r1, 0xfffe | r1 = 0xfffe;
0x000ac77a strb r6, [r7, 7] | *((r7 + 7)) = r6;
0x000ac77c strh.w r1, [r2, r6, lsl 1] | offset_0 = r6 << 1;
| *((r2 + offset_0)) = r1;
0x000ac780 ldrb.w r2, [sb, 0x37] | r2 = *((sb + 0x37));
0x000ac784 bfc r2, 3, 1 | value_1 = BIT_MASK (1, );
| value_1 = ~value_1;
| r2 &= value_1;
0x000ac788 strb.w r2, [sb, 0x37] | *((sb + 0x37)) = r2;
0x000ac78c ldrb r2, [r3] | r2 = *(r3);
0x000ac78e cmp r2, 0x71 |
| if (r2 == 0x71) {
0x000ac790 beq.w 0xac8ae | goto label_96;
| }
0x000ac794 ldr r4, [sp, 0x34] | r4 = var_34h;
| label_19:
0x000ac796 ldrb.w r3, [r7, 0xb1] | r3 = *((r7 + 0xb1));
0x000ac79a cmp r3, 0 |
| if (r3 == 0) {
0x000ac79c beq.w 0xac472 | goto label_16;
| }
0x000ac79e add r6, sp, 0x1a4 | r6 = sp + 0x1a4;
| label_79:
0x000ac7a0 ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000ac7a4 adds r5, 0x10 | r5 += 0x10;
0x000ac7a6 ldr.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x000ac7aa str.w r4, [r3, r6, lsl 2] | __asm ("str.w r4, [r3, r6, lsl 2]");
0x000ac7ae ldrb r3, [r5, -0x18] | r3 = *((r5 - 0x18));
0x000ac7b2 and.w r3, r3, fp | r3 &= fp;
0x000ac7b6 strb r3, [r2, r6] | *((r2 + r6)) = r3;
0x000ac7b8 adds r6, 1 | r6++;
0x000ac7ba ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x000ac7be cmp r3, r6 |
| if (r3 > r6) {
0x000ac7c0 bgt 0xac704 | goto label_17;
| }
0x000ac7c2 ldrd fp, r8, [sp, 0x38] | __asm ("ldrd fp, r8, [var_38h]");
| label_50:
0x000ac7c6 cmp.w r8, 0 |
| if (r8 == 0) {
0x000ac7ca beq.w 0xac9f0 | goto label_97;
| }
0x000ac7ce ldrh.w r3, [r8, 0x32] | r3 = *((r8 + 0x32));
0x000ac7d2 cmp r3, 0 |
| if (r3 == 0) {
0x000ac7d4 beq.w 0xaca0c | goto label_98;
| }
0x000ac7d8 movs r4, 0 | r4 = 0;
0x000ac7da b 0xac7f2 |
| while (r0 != 0) {
0x000ac7dc ldrh.w r3, [sb, 0x34] | r3 = *((sb + 0x34));
0x000ac7e0 subs r3, 1 | r3--;
0x000ac7e2 strh.w r3, [sb, 0x34] | *((sb + 0x34)) = r3;
| label_18:
0x000ac7e6 ldrh.w r3, [r8, 0x32] | r3 = *((r8 + 0x32));
0x000ac7ea adds r4, 1 | r4++;
0x000ac7ec cmp r3, r4 |
| if (r3 <= r4) {
0x000ac7ee ble.w 0xaca0c | goto label_98;
| }
0x000ac7f2 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000ac7f6 mov r2, r8 | r2 = r8;
0x000ac7f8 ldrh.w r1, [sb, 0x32] | r1 = *((sb + 0x32));
0x000ac7fc mov r0, sb | r0 = sb;
0x000ac7fe ldrsh.w r5, [r3, r4, lsl 1] | offset_2 = r4 << 1;
| r5 = *((r3 + offset_2));
0x000ac802 mov r3, r4 | r3 = r4;
0x000ac804 bl 0x2f508 | r0 = fcn_0002f508 (r0, r1, r2, r3, r4);
0x000ac808 cmp r0, 0 |
0x000ac80a bne 0xac7dc |
| }
0x000ac80c ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000ac810 ldr.w r2, [r3, r4, lsl 2] | offset_3 = r4 << 2;
| r2 = *((r3 + offset_3));
0x000ac814 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000ac818 strh.w r5, [r3, r6, lsl 1] | offset_4 = r6 << 1;
| *((r3 + offset_4)) = r5;
0x000ac81c ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000ac820 str.w r2, [r3, r6, lsl 2] | __asm ("str.w r2, [r3, r6, lsl 2]");
0x000ac824 ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x000ac828 ldrb r2, [r3, r4] | r2 = *((r3 + r4));
0x000ac82a ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x000ac82c adds r0, 0x1c | r0 += 0x1c;
0x000ac82e strb r2, [r3, r6] | *((r3 + r6)) = r2;
0x000ac830 adds r6, 1 | r6++;
0x000ac832 b 0xac7e6 | goto label_18;
| label_93:
0x000ac834 ldrsh.w r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x000ac838 lsl.w ip, r6, 1 |
0x000ac83c ldr.w r4, [sb, 4] | r4 = *((sb + 4));
0x000ac840 cmp r1, 0 |
| if (r1 < 0) {
0x000ac842 blt 0xac8de | goto label_99;
| }
0x000ac844 ldr.w r0, [sl, 4] | r0 = *((sl + 4));
0x000ac848 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x000ac84c add.w r2, r0, r2, lsl 2 | r2 = r0 + (r2 << 2);
0x000ac84e lsls r2, r0, 0xa | r2 = r0 << 0xa;
0x000ac850 ldrb r0, [r2, 4] | r0 = *((r2 + 4));
0x000ac852 ands r0, r0, 0xf | r0 &= 0xf;
0x000ac856 ittt eq |
| if (r0 != r0) {
0x000ac858 ldrbeq lr, [sb, 0x37] |
| }
| if (r0 == r0) {
0x000ac85c bfieq lr, r0, 3, 1 | __asm ("bfieq lr, r0, 3, 1");
| }
| if (r0 == r0) {
0x000ac860 strb.w lr, [sb, 0x37] |
| }
0x000ac864 ldrh r0, [r2, 0xa] | r0 = *((r2 + 0xa));
0x000ac866 lsls r0, r0, 0x1a | r0 <<= 0x1a;
| if (r0 < r0) {
0x000ac868 bpl 0xac876 |
0x000ac86a ldrb.w r0, [sb, 0x38] | r0 = *((sb + 0x38));
0x000ac86e orr r0, r0, 4 | r0 |= 4;
0x000ac872 strb.w r0, [sb, 0x38] | *((sb + 0x38)) = r0;
| }
0x000ac876 strh.w r1, [r4, ip] | *((r4 + ip)) = r1;
0x000ac87a ldrb r1, [r3] | r1 = *(r3);
0x000ac87c cmp r1, 0x71 |
| if (r1 == 0x71) {
0x000ac87e beq 0xac8ae | goto label_96;
| }
| label_31:
0x000ac880 ldrh r1, [r2, 0xa] | r1 = *((r2 + 0xa));
0x000ac882 ldr r4, [r2] | r4 = *(r2);
0x000ac884 lsls r0, r1, 0x16 | r0 = r1 << 0x16;
| if (r0 >= r1) {
0x000ac886 bpl 0xac8f0 | goto label_100;
| }
0x000ac888 ldrb r2, [r4] | r2 = *(r4);
| if (r2 == 0) {
0x000ac88a cbz r2, 0xac894 | goto label_101;
| }
| do {
0x000ac88c ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x000ac890 cmp r3, 0 |
0x000ac892 bne 0xac88c |
| } while (r3 != 0);
| label_101:
0x000ac894 lsls r2, r1, 0x1d | r2 = r1 << 0x1d;
0x000ac896 bmi 0xac89c |
| while (r3 == 0) {
| label_21:
0x000ac898 adds r4, 1 | r4++;
0x000ac89a b 0xac796 | goto label_19;
| label_20:
0x000ac89c ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x000ac8a0 cmp r3, 0 |
0x000ac8a2 beq 0xac898 |
| }
0x000ac8a4 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x000ac8a8 cmp r3, 0 |
| if (r3 != 0) {
0x000ac8aa bne 0xac89c | goto label_20;
| }
0x000ac8ac b 0xac898 | goto label_21;
| do {
| label_96:
0x000ac8ae ldr r4, [r3, 8] | r4 = *((r3 + 8));
0x000ac8b0 movs r2, 1 | r2 = 1;
| if (r4 != 0) {
0x000ac8b2 cbz r4, 0xac8c0 |
0x000ac8b4 mov r0, r4 | r0 = r4;
0x000ac8b6 blx 0x65dc | r0 = strcmp (r0, r1);
0x000ac8ba bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000ac8be adds r2, 1 | r2++;
| }
0x000ac8c0 mov r1, r4 | r1 = r4;
0x000ac8c2 ldr r4, [sp, 0x44] | r4 = var_44h;
0x000ac8c4 str r2, [sp, 0x20] | var_20h = r2;
0x000ac8c6 mov r0, r4 | r0 = r4;
0x000ac8c8 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000ac8cc ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ac8ce add r2, r4 | r2 += r4;
0x000ac8d0 str r2, [sp, 0x44] | var_44h = r2;
0x000ac8d2 b 0xac796 | goto label_19;
| label_95:
0x000ac8d4 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000ac8d6 str r2, [sp, 0x30] | var_30h = r2;
0x000ac8d8 str.w r1, [sb, 0x28] | __asm ("str.w r1, [sb, 0x28]");
0x000ac8dc b 0xac774 | goto label_22;
| label_99:
0x000ac8de ldrsh.w r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x000ac8e2 strh.w r2, [r4, r6, lsl 1] | offset_5 = r6 << 1;
| *((r4 + offset_5)) = r2;
0x000ac8e4 movs r0, 0x16 | r0 = 0x16;
0x000ac8e6 ldrb r1, [r3] | r1 = *(r3);
0x000ac8e8 cmp r1, 0x71 |
0x000ac8ea beq 0xac8ae |
| } while (r1 == 0x71);
0x000ac8ec cmp r2, 0 |
| if (r2 >= 0) {
0x000ac8ee bge 0xac9e2 | goto label_102;
| }
| label_100:
0x000ac8f0 ldr r3, [pc, 0x3e4] |
0x000ac8f2 add r3, pc | r3 = 0x1595ce;
0x000ac8f4 add.w r4, r3, 0x780 | r4 = r3 + 0x780;
0x000ac8f8 b 0xac796 | goto label_19;
| label_64:
0x000ac8fa ldr r0, [r3, 0x1c] | r0 = *((r3 + 0x1c));
0x000ac8fc ldr.w r1, [sl, 0x3c] | r1 = *((sl + 0x3c));
0x000ac900 cmp r0, r1 |
| if (r0 == r1) {
0x000ac902 beq.w 0xac2f2 | goto label_23;
| }
0x000ac906 ldr r1, [pc, 0x3d4] |
0x000ac908 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac90a add r1, pc | r1 = 0x1595ec;
0x000ac90c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000ac90e invalid |
0x000ac910 b 0xac490 | goto label_9;
| label_89:
0x000ac912 cmp r0, 0 |
| if (r0 != 0) {
0x000ac914 bne.w 0xac488 | goto label_24;
| }
0x000ac918 b 0xac490 | goto label_9;
| label_71:
0x000ac91a ldr r1, [pc, 0x3c4] |
0x000ac91c mov.w fp, 0 |
0x000ac920 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac922 add r1, pc | r1 = 0x159608;
0x000ac924 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000ac928 b 0xac490 | goto label_9;
| label_72:
0x000ac92a ldr r1, [pc, 0x3b8] |
0x000ac92c ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac92e add r1, pc | r1 = 0x159618;
0x000ac930 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000ac934 b 0xac508 | goto label_10;
| label_75:
0x000ac936 ldrh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x000ac93a movs r1, 0xc | r1 = 0xc;
0x000ac93c mvn r2, 0xb | r2 = ~0xb;
0x000ac940 smlabb r3, r3, r1, r2 | __asm ("smlabb r3, r3, r1, r2");
0x000ac942 movs r3, 1 | r3 = 1;
0x000ac944 ldr.w r1, [sl, 4] | r1 = *((sl + 4));
0x000ac948 adds r2, r1, r3 | r2 = r1 + r3;
0x000ac94a ldr r0, [r1, r3] | r0 = *((r1 + r3));
0x000ac94c ldrh r3, [r2, 0xa] | r3 = *((r2 + 0xa));
0x000ac94e str r0, [sp, 0x48] | var_48h = r0;
0x000ac950 orr r3, r3, 8 | r3 |= 8;
0x000ac954 strh r3, [r2, 0xa] | *((r2 + 0xa)) = r3;
| if (r0 != 0) {
0x000ac956 cbz r0, 0xac960 |
0x000ac958 blx 0x65dc | r0 = strcmp (r0, r1);
0x000ac95c bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
| }
0x000ac960 movs r3, 0 | r3 = 0;
0x000ac962 add r2, sp, 0x48 | r2 += var_48h;
0x000ac964 movs r1, 0x3b | r1 = 0x3b;
0x000ac966 mov r0, r7 | r0 = r7;
0x000ac968 str r6, [sp, 0x4c] | var_4ch = r6;
0x000ac96a bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000ac96e ldr r3, [sp, 0x10] | r3 = var_10h;
0x000ac970 mov r1, r0 | r1 = r0;
0x000ac972 ldr r0, [r3] | r0 = *(r3);
0x000ac974 bl 0x384f8 | r0 = fcn_000384f8 (r0, r1);
0x000ac978 mov r6, r0 | r6 = r0;
0x000ac97a cmp r0, 0 |
| if (r0 == 0) {
0x000ac97c beq.w 0xac490 | goto label_9;
| }
0x000ac980 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x000ac982 adds r5, r3, 1 | r5 = r3 + 1;
0x000ac984 it eq |
| if (r5 != r3) {
0x000ac986 moveq r3, 0 | r3 = 0;
| }
0x000ac988 str r3, [sp, 0x110] | *(arg_110h) = r3;
0x000ac98a ldr r3, [r0] | r3 = *(r0);
0x000ac98c ldr r1, [sp, 0x110] | r1 = *(arg_110h);
0x000ac98e lsls r2, r3, 4 | r2 = r3 << 4;
0x000ac990 strb r1, [r0, r2] | *((r0 + r2)) = r1;
0x000ac992 b 0xac434 | goto label_25;
| label_88:
0x000ac994 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000ac996 ldr r2, [r0, 0x3c] | r2 = *((r0 + 0x3c));
0x000ac998 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000ac99a cmp r2, r3 |
| if (r2 != r3) {
0x000ac99c bne.w 0xac60c | goto label_26;
| }
0x000ac9a0 mov.w lr, 1 | lr = 1;
0x000ac9a4 movs r3, 0x10 | r3 = 0x10;
0x000ac9a6 strd r3, lr, [sp, 0x24] | __asm ("strd r3, lr, [var_24h]");
0x000ac9aa b 0xac262 | goto label_27;
| label_68:
0x000ac9ac ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac9ae mov r8, r3 | r8 = r3;
0x000ac9b0 strd r3, r3, [sp, 0x24] | __asm ("strd r3, r3, [var_24h]");
0x000ac9b4 b 0xac36a | goto label_28;
| label_84:
0x000ac9b6 ldr r2, [pc, 0x330] |
0x000ac9b8 movs r1, 0x12 | r1 = 0x12;
0x000ac9ba ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac9bc movs r3, 0 | r3 = 0;
0x000ac9be str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ac9c2 add r2, pc | r2 = 0x1596b0;
0x000ac9c4 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000ac9c8 movs r1, 3 | r1 = 3;
0x000ac9ca cmp r0, 0 |
| if (r0 == 0) {
0x000ac9cc beq.w 0xac572 | goto label_29;
| }
0x000ac9d0 b 0xac490 | goto label_9;
| label_76:
0x000ac9d2 ldr r2, [pc, 0x318] |
0x000ac9d4 ldr r1, [pc, 0x318] |
0x000ac9d6 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ac9d8 add r2, pc | r2 = 0x1596ca;
0x000ac9da add r1, pc | r1 = 0x1596ce;
0x000ac9dc bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000ac9e0 b 0xac42c | goto label_30;
| label_102:
0x000ac9e2 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000ac9e6 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000ac9ea add.w r2, r3, r2, lsl 2 | r2 = r3 + (r2 << 2);
0x000ac9ee b 0xac880 | goto label_31;
| label_97:
0x000ac9f0 ldr r3, [pc, 0x300] |
0x000ac9f2 movw r0, 0xffff | r0 = 0xffff;
0x000ac9f6 ldr.w r1, [sb, 4] | r1 = *((sb + 4));
0x000ac9fa ldr.w r2, [sb, 0x20] | r2 = *((sb + 0x20));
0x000ac9fe add r3, pc |
0x000aca00 add.w r3, r3, 0x780 | r3 = 0x159e76;
0x000aca02 str r0, [r6, 0x3c] | *((r6 + 0x3c)) = r0;
0x000aca04 strh.w r0, [r1, r6, lsl 1] | offset_6 = r6 << 1;
| *((r1 + offset_6)) = r0;
0x000aca08 str.w r3, [r2, r6, lsl 2] | __asm ("str.w r3, [r2, r6, lsl 2]");
| label_98:
0x000aca0c mov r0, sb | r0 = sb;
0x000aca0e bl 0x25968 | fcn_00025968 (r0);
0x000aca12 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000aca14 mov r0, sb | r0 = sb;
0x000aca16 ldr.w r4, [r3, 0xec] | r4 = *((r3 + 0xec));
0x000aca1a cmp r4, 0 |
| if (r4 == 0) {
0x000aca1c beq.w 0xace3c | goto label_103;
| }
0x000aca20 bl 0x234a0 | fcn_000234a0 (r0);
0x000aca24 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x000aca26 cbz r3, 0xaca8a | goto label_43;
| }
0x000aca28 ldrh.w ip, [sb, 0x34] | ip = *((sb + 0x34));
0x000aca2c ldrsh.w lr, [sl, 0x22] |
0x000aca30 cmp ip, lr |
| if (ip < lr) {
0x000aca32 blt 0xaca8a | goto label_43;
| }
0x000aca34 ldrb.w r3, [sb, 0x37] | r3 = *((sb + 0x37));
0x000aca38 cmp.w lr, 0 |
0x000aca3c orr r3, r3, 0x20 | r3 |= 0x20;
0x000aca40 strb.w r3, [sb, 0x37] | *((sb + 0x37)) = r3;
| if (lr <= 0) {
0x000aca44 ble 0xaca8a | goto label_43;
| }
| label_48:
0x000aca46 ldrsh.w r8, [sl, 0x20] | r8 = *((sl + 0x20));
0x000aca4a movs r2, 0 | r2 = 0;
| label_33:
0x000aca4c cmp r8, r2 |
| if (r8 == r2) {
0x000aca4e beq 0xaca84 | goto label_104;
| }
0x000aca50 cmp.w ip, 0 |
| if (ip == 0) {
0x000aca54 beq.w 0xacc82 | goto label_105;
| }
0x000aca58 ldr.w r6, [sb, 4] | r6 = *((sb + 4));
| label_32:
0x000aca5c sxth r5, r2 | __asm ("sxth r5, r2");
0x000aca5e subs r1, r6, 2 | r1 = r6 - 2;
0x000aca60 movs r3, 0 | r3 = 0;
0x000aca62 b 0xaca6c |
| while (r0 != r5) {
0x000aca64 adds r3, 1 | r3++;
0x000aca66 cmp r3, ip |
| if (r3 == ip) {
0x000aca68 beq.w 0xacc82 | goto label_105;
| }
0x000aca6c ldrsh r0, [r1, 2]! | r0 = *((r1 += 2));
0x000aca70 cmp r0, r5 |
0x000aca72 bne 0xaca64 |
| }
0x000aca74 lsls r3, r3, 0x10 | r3 <<= 0x10;
| if (r3 < r3) {
0x000aca76 bmi.w 0xacc82 | goto label_105;
| }
0x000aca7a adds r2, 1 | r2++;
0x000aca7c cmp r2, lr |
| if (r2 == lr) {
0x000aca7e beq 0xaca8a | goto label_43;
| }
0x000aca80 cmp r8, r2 |
| if (r8 != r2) {
0x000aca82 bne 0xaca5c | goto label_32;
| }
| label_104:
0x000aca84 adds r2, 1 | r2++;
0x000aca86 cmp r2, lr |
| if (r2 != lr) {
0x000aca88 bne 0xaca4c | goto label_33;
| }
| label_43:
0x000aca8a cmp r4, sl |
| if (r4 == sl) {
0x000aca8c beq 0xacb8e | goto label_106;
| }
| label_37:
0x000aca8e ldr r3, [sp, 0x10] | r3 = var_10h;
0x000aca90 ldrb.w r2, [r7, 0xb1] | r2 = *((r7 + 0xb1));
0x000aca94 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000aca98 cmp r3, 1 |
| if (r3 >= 1) {
0x000aca9a bls 0xacaea |
| label_44:
0x000aca9c ldr r3, [sp, 0x14] | r3 = var_14h;
0x000aca9e clz r3, r3 | r3 &= r3;
0x000acaa2 lsrs r3, r3, 5 | r3 >>= 5;
0x000acaa4 cmp r2, 0 |
0x000acaa6 it ne |
| if (r2 == 0) {
0x000acaa8 orrne r3, r3, 1 | r3 |= 1;
| }
0x000acaac cmp r3, 0 |
| if (r3 == 0) {
0x000acaae beq 0xacb72 | goto label_107;
| }
| label_35:
0x000acab0 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000acab4 mov r2, sl | r2 = sl;
0x000acab6 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000acab8 movs r4, 0 | r4 = 0;
0x000acaba str.w r3, [sb, 0x14] | __asm ("str.w r3, [sb, 0x14]");
0x000acabe str sb, [r2, 8]! | *((r2 += 8)) = sb;
0x000acac2 b 0xac4a0 | goto label_7;
| label_77:
0x000acac4 mov sb, r2 | sb = r2;
0x000acac6 b 0xac616 | goto label_34;
| label_94:
0x000acac8 mov r4, r1 | r4 = r1;
0x000acaca ldr r1, [pc, 0x22c] |
0x000acacc ldr r0, [sp, 0x10] | r0 = var_10h;
0x000acace ldr.w fp, [sp, 0x38] | fp = var_38h;
0x000acad2 add r1, pc | r1 = 0x1597d0;
0x000acad4 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000acad6 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000acada b 0xac488 | goto label_24;
| label_85:
0x000acadc ldr r1, [pc, 0x21c] |
0x000acade mov r2, fp | r2 = fp;
0x000acae0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000acae2 add r1, pc | r1 = 0x1597e2;
0x000acae4 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000acae8 b 0xac490 | goto label_9;
| }
0x000acaea cmp r2, 0 |
| if (r2 == 0) {
0x000acaec beq.w 0xacd22 | goto label_52;
| }
0x000acaf0 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x000acaf2 cbz r3, 0xacb30 | goto label_51;
| }
| label_45:
0x000acaf4 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000acaf8 ldr.w r2, [r7, 0xac] | r2 = *((r7 + 0xac));
0x000acafc ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000acafe str.w r2, [sb, 0x2c] | __asm ("str.w r2, [sb, 0x2c]");
| if (r3 == 0) {
0x000acb02 cbz r3, 0xacb30 | goto label_51;
| }
0x000acb04 ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x000acb06 cmp r1, r2 |
| if (r1 != r2) {
0x000acb08 bne 0xacb2a | goto label_108;
| }
0x000acb0a cmp sb, r3 |
| if (sb == r3) {
0x000acb0c beq 0xacb2a | goto label_108;
| }
0x000acb0e b 0xacf12 | goto label_109;
| do {
0x000acb10 ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x000acb12 cmp sb, r3 |
0x000acb14 sub.w r1, r1, r2 | r1 -= r2;
0x000acb18 clz r1, r1 | r1 &= r1;
0x000acb1c lsr.w r1, r1, 5 | r1 >>= 5;
0x000acb20 it eq |
| if (sb != r3) {
0x000acb22 moveq r1, 0 | r1 = 0;
| }
0x000acb24 cmp r1, 0 |
| if (r1 != 0) {
0x000acb26 bne.w 0xacf12 | goto label_109;
| }
| label_108:
0x000acb2a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000acb2c cmp r3, 0 |
0x000acb2e bne 0xacb10 |
| } while (r3 != 0);
| label_51:
0x000acb30 ldr.w r0, [sb, 0x18] | r0 = *((sb + 0x18));
0x000acb34 mov r2, sb | r2 = sb;
0x000acb36 ldr.w r1, [sb] | r1 = *(sb);
0x000acb3a adds r0, 0x18 | r0 += 0x18;
0x000acb3c bl 0x2df94 | r0 = fcn_0002df94 (r0, r1, r2, r3, r4);
0x000acb40 cmp r0, 0 |
| if (r0 != 0) {
0x000acb42 bne.w 0xacec4 | goto label_110;
| }
0x000acb46 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000acb48 orr r3, r3, 1 | r3 |= 1;
0x000acb4c str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
| label_46:
0x000acb4e ldr r3, [sp, 0x14] | r3 = var_14h;
0x000acb50 ldrb.w r2, [r7, 0xb1] | r2 = *((r7 + 0xb1));
0x000acb54 clz r3, r3 | r3 &= r3;
0x000acb58 lsrs r3, r3, 5 | r3 >>= 5;
0x000acb5a cmp r2, 0 |
0x000acb5c it ne |
| if (r2 == 0) {
0x000acb5e orrne r3, r3, 1 | r3 |= 1;
| }
0x000acb62 cmp r3, 0 |
| if (r3 != 0) {
0x000acb64 bne 0xacab0 | goto label_35;
| }
0x000acb66 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000acb68 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000acb6c cmp r3, 1 |
| if (r3 < 1) {
0x000acb6e bls.w 0xac484 | goto label_36;
| }
| label_107:
0x000acb72 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000acb74 str.w sb, [r3, 0xf0] | __asm ("str.w sb, [r3, 0xf0]");
0x000acb78 ldr.w sb, [sl, 8] | sb = *((sl + 8));
| label_39:
0x000acb7c add.w r2, sl, 8 | r2 = sl + 8;
0x000acb80 cmp.w sb, 0 |
| if (sb == 0) {
0x000acb84 beq.w 0xacf44 | goto label_111;
| }
0x000acb88 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000acb8a movs r4, 0 | r4 = 0;
0x000acb8c b 0xac4a0 | goto label_7;
| label_106:
0x000acb8e ldr.w r8, [sl, 8] | r8 = *((sl + 8));
0x000acb92 cmp.w r8, 0 |
| if (r8 == 0) {
0x000acb96 beq.w 0xaca8e | goto label_37;
| }
0x000acb9a ldr r1, [pc, 0x164] |
0x000acb9c mov r4, r8 | r4 = r8;
0x000acb9e ldrh.w r5, [sb, 0x32] | r5 = *((sb + 0x32));
0x000acba2 add r1, pc | r1 = 0x1598a8;
0x000acba4 b 0xacbae | goto label_112;
| label_38:
0x000acba6 ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x000acba8 cmp r4, 0 |
| if (r4 == 0) {
0x000acbaa beq.w 0xaca8e | goto label_37;
| }
| label_112:
0x000acbae ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x000acbb0 cmp r3, r5 |
| if (r3 != r5) {
0x000acbb2 bne 0xacba6 | goto label_38;
| }
| if (r5 == 0) {
0x000acbb4 cbz r5, 0xacc06 | goto label_42;
| }
0x000acbb6 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x000acbb8 movs r0, 0 | r0 = 0;
0x000acbba ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000acbbe subs r6, 2 | r6 -= 2;
0x000acbc0 sub.w ip, r3, 2 |
| label_41:
0x000acbc4 ldrsh r2, [r6, 2]! | r2 = *((r6 += 2));
0x000acbc8 ldrsh r3, [ip, 2]! | r3 = *((ip += 2));
0x000acbcc cmp r2, r3 |
| if (r2 != r3) {
0x000acbce bne 0xacc02 | goto label_113;
| }
0x000acbd0 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000acbd2 ldr.w r3, [r3, r0, lsl 2] | offset_7 = r0 << 2;
| r3 = *((r3 + offset_7));
0x000acbd6 add.w lr, r3, -1 | lr = r3 + -1;
0x000acbda ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000acbde ldr.w r3, [r3, r0, lsl 2] | offset_8 = r0 << 2;
| r3 = *((r3 + offset_8));
0x000acbe2 add.w r8, r3, -1 | r8 = r3 + -1;
| do {
| label_40:
0x000acbe6 ldrb r3, [lr, 1]! | r3 = *((lr += 1));
0x000acbea ldrb r2, [r8, 1]! | r2 = *((r8 += 1));
0x000acbee cmp r3, r2 |
| if (r3 == r2) {
0x000acbf0 beq 0xacc68 | goto label_114;
| }
0x000acbf2 add r3, r1 | r3 += r1;
0x000acbf4 add r2, r1 | r2 += r1;
0x000acbf6 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000acbfa ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000acbfe cmp r3, r2 |
0x000acc00 beq 0xacbe6 |
| } while (r3 == r2);
| label_113:
0x000acc02 cmp r5, r0 |
| if (r5 != r0) {
0x000acc04 bne 0xacba6 | goto label_38;
| }
| label_42:
0x000acc06 ldrb.w r3, [r4, 0x36] | r3 = *((r4 + 0x36));
0x000acc0a mov r8, r4 | r8 = r4;
0x000acc0c ldrb.w r2, [sb, 0x36] | r2 = *((sb + 0x36));
0x000acc10 cmp r3, r2 |
| if (r3 != r2) {
0x000acc12 beq 0xacc34 |
0x000acc14 cmp r3, 0xb |
| if (r3 == 0xb) {
0x000acc16 beq.w 0xacf08 | goto label_115;
| }
0x000acc1a cmp r2, 0xb |
| if (r2 != 0xb) {
0x000acc1c beq 0xacc2e |
0x000acc1e ldr r1, [pc, 0xe4] |
0x000acc20 movs r2, 0 | r2 = 0;
0x000acc22 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000acc24 add r1, pc | r1 = 0x15992e;
0x000acc26 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000acc2a ldrb.w r3, [r4, 0x36] | r3 = *((r4 + 0x36));
| }
0x000acc2e cmp r3, 0xb |
| if (r3 == 0xb) {
0x000acc30 beq.w 0xacf08 | goto label_115;
| }
| }
| label_56:
0x000acc34 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000acc36 cmp r3, 2 |
0x000acc38 itttt eq |
| if (r3 != 2) {
0x000acc3a ldrbeq r3, [r8, 0x37] | r3 = *((r8 + 0x37));
| }
| if (r3 != 2) {
0x000acc3e ldreq r2, [sp, 0x18] | r2 = var_18h;
| }
| if (r3 == 2) {
0x000acc40 bfieq r3, r2, 0, 2 | __asm ("bfieq r3, r2, 0, 2");
| }
| if (r3 == 2) {
0x000acc44 strb.w r3, [r8, 0x37] | *((r8 + 0x37)) = r3;
| }
0x000acc48 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000acc4a ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000acc4e cmp r3, 1 |
| if (r3 < 1) {
0x000acc50 bls.w 0xac484 | goto label_36;
| }
0x000acc54 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000acc56 ldr.w r3, [r2, 0xf0] | r3 = *((r2 + 0xf0));
0x000acc5a str.w r3, [sb, 0x14] | __asm ("str.w r3, [sb, 0x14]");
0x000acc5e str.w sb, [r2, 0xf0] | __asm ("str.w sb, [r2, 0xf0]");
0x000acc62 ldr.w sb, [sl, 8] | sb = *((sl + 8));
0x000acc66 b 0xacb7c | goto label_39;
| label_114:
0x000acc68 cmp r3, 0 |
| if (r3 != 0) {
0x000acc6a bne 0xacbe6 | goto label_40;
| }
0x000acc6c adds r0, 1 | r0++;
0x000acc6e cmp r5, r0 |
| if (r5 != r0) {
0x000acc70 bne 0xacbc4 | goto label_41;
| }
0x000acc72 b 0xacc06 | goto label_42;
| label_86:
0x000acc74 ldr r1, [pc, 0x90] |
0x000acc76 mov r2, fp | r2 = fp;
0x000acc78 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000acc7a add r1, pc | r1 = 0x159986;
0x000acc7c bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000acc80 b 0xac490 | goto label_9;
| label_105:
0x000acc82 ldrb.w r3, [sb, 0x37] | r3 = *((sb + 0x37));
0x000acc86 bfc r3, 5, 1 | value_9 = BIT_MASK (1, );
| value_9 = ~value_9;
| r3 &= value_9;
0x000acc8a strb.w r3, [sb, 0x37] | *((sb + 0x37)) = r3;
0x000acc8e b 0xaca8a | goto label_43;
| label_47:
0x000acd0c ldr r3, [sp, 0x10] | r3 = var_10h;
0x000acd0e ldrb.w r2, [r7, 0xb1] | r2 = *((r7 + 0xb1));
0x000acd12 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000acd16 cmp r3, 1 |
| if (r3 > 1) {
0x000acd18 bhi.w 0xaca9c | goto label_44;
| }
0x000acd1c cmp r2, 0 |
| if (r2 != 0) {
0x000acd1e bne.w 0xacaf4 | goto label_45;
| }
| label_52:
0x000acd22 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000acd26 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000acd28 eor r3, r3, 0x80 | r3 ^= 0x80;
0x000acd2c ubfx r3, r3, 7, 1 | r3 = (r3 >> 7) & ((1 << 1) - 1);
0x000acd30 cmp r2, 0 |
0x000acd32 it ne |
| if (r2 == 0) {
0x000acd34 orrne r3, r3, 1 | r3 |= 1;
| }
0x000acd38 cmp r3, 0 |
| if (r3 == 0) {
0x000acd3a beq.w 0xacab0 | goto label_35;
| }
0x000acd3e ldr r2, [sp, 0x10] | r2 = var_10h;
0x000acd40 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000acd42 ldr r4, [r2, 8] | r4 = *((r2 + 8));
0x000acd44 add.w r8, r3, 1 | r8 = r3 + 1;
0x000acd48 str.w r8, [r2, 0x2c] | __asm ("str.w r8, [r2, 0x2c]");
0x000acd4a strh r4, [r5] | *(r5) = r4;
0x000acd4c cmp r4, 0 |
| if (r4 == 0) {
0x000acd4e beq.w 0xace6c | goto label_116;
| }
| label_49:
0x000acd52 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000acd54 movs r1, 1 | r1 = 1;
0x000acd56 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000acd58 mov r2, r6 | r2 = r6;
0x000acd5a mov r0, r5 | r0 = r5;
0x000acd5c bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000acd60 movs r3, 0 | r3 = 0;
0x000acd62 movs r1, 0xb8 | r1 = 0xb8;
0x000acd64 mov r2, r3 | r2 = r3;
0x000acd66 str r3, [sp] | *(sp) = r3;
0x000acd68 mov r0, r4 | r0 = r4;
0x000acd6a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000acd6e movs r3, 2 | r3 = 2;
0x000acd70 str.w r0, [sb, 0x2c] | __asm ("str.w r0, [sb, 0x2c]");
0x000acd74 mov r2, r6 | r2 = r6;
0x000acd76 str r3, [sp] | *(sp) = r3;
0x000acd78 movs r1, 0x93 | r1 = 0x93;
0x000acd7a mov r3, r8 | r3 = r8;
0x000acd7c mov r0, r4 | r0 = r4;
0x000acd7e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000acd82 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000acd84 cmp r3, 0 |
| if (r3 == 0) {
0x000acd86 beq.w 0xacee6 | goto label_117;
| }
0x000acd8a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000acd8c ldr.w r2, [r5, 0xc8] | r2 = *((r5 + 0xc8));
0x000acd90 ldr r1, [r3] | r1 = *(r3);
0x000acd92 ldr.w r3, [r5, 0xc4] | r3 = *((r5 + 0xc4));
0x000acd96 subs r3, r3, r1 | r3 -= r1;
0x000acd98 add r3, r2 | r3 += r2;
0x000acd9a adds r2, r1, r3 | r2 = r1 + r3;
0x000acd9c ldrb r2, [r2, -0x1] | r2 = *((r2 - 0x1));
0x000acda0 cmp r2, 0x3b |
0x000acda2 ldr r2, [sp, 0x104] | r2 = *(arg_104h);
0x000acda4 it eq |
| if (r2 != 0x3b) {
0x000acda6 addeq r3, r3, -1 | r3 += -1;
| }
0x000acdaa cmp r2, 0 |
| if (r2 != 0) {
0x000acdac bne.w 0xaceb6 | goto label_118;
| }
0x000acdb0 ldr r2, [pc, 0x1bc] |
0x000acdb2 add r2, pc | r2 = 0x159d26;
| label_53:
0x000acdb4 str r1, [sp] | *(sp) = r1;
0x000acdb6 mov r0, r7 | r0 = r7;
0x000acdb8 ldr r1, [pc, 0x1b8] |
0x000acdba add r1, pc | r1 = 0x159d32;
0x000acdbc bl 0x4a320 | fcn_0004a320 (r0);
0x000acdc0 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000acdc2 mov r6, r0 | r6 = r0;
0x000acdc4 strd r8, r0, [sp, 4] | __asm ("strd r8, r0, [var_4h]");
0x000acdc8 ldr.w r2, [sl] | r2 = *(sl);
0x000acdcc ldr r1, [pc, 0x1a8] |
0x000acdce ldr r0, [sp, 0x10] | r0 = var_10h;
0x000acdd0 str r2, [sp] | *(sp) = r2;
0x000acdd2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000acdd4 add r1, pc | r1 = 0x159d50;
0x000acdd6 ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x000acdd8 ldr.w r3, [sb] | r3 = *(sb);
0x000acdda adds r0, 0 | r0 += 0;
0x000acddc bl 0xab4d8 | fcn_000ab4d8 (r0);
| if (r6 != 0) {
0x000acde0 cbz r6, 0xacdea |
0x000acde2 mov r1, r6 | r1 = r6;
0x000acde4 mov r0, r7 | r0 = r7;
0x000acde6 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
| label_55:
0x000acdea ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 != 0) {
0x000acdec cbz r3, 0xace2e |
0x000acdee ldr r6, [sp, 0x10] | r6 = var_10h;
0x000acdf0 mov r2, r8 | r2 = r8;
0x000acdf2 mov r1, sb | r1 = sb;
0x000acdf4 mov r0, r6 | r0 = r6;
0x000acdf6 bl 0x7e234 | fcn_0007e234 (r0, r1, r2, r3);
0x000acdfa ldr r5, [sp, 0x28] | r5 = var_28h;
0x000acdfc ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x000acdfe ldr r0, [r6] | r0 = *(r6);
0x000ace00 mov r2, r5 | r2 = r5;
0x000ace02 bl 0x42f2c | fcn_00042f2c (r0, r1, r2);
0x000ace06 ldr r1, [pc, 0x174] |
0x000ace08 mov r0, r7 | r0 = r7;
0x000ace0a ldr.w r2, [sb] | r2 = *(sb);
0x000ace0e add r1, pc | r1 = 0x159d90;
0x000ace10 bl 0x4a320 | fcn_0004a320 (r0);
0x000ace14 mov r1, r5 | r1 = r5;
0x000ace16 mov r2, r0 | r2 = r0;
0x000ace18 movs r3, 0 | r3 = 0;
0x000ace1a mov r0, r4 | r0 = r4;
0x000ace1c bl 0x42354 | fcn_00042354 (r0, r1, r2, r3);
0x000ace20 movs r2, 0 | r2 = 0;
0x000ace22 movs r3, 1 | r3 = 1;
0x000ace24 movs r1, 0xa6 | r1 = 0xa6;
0x000ace26 mov r0, r4 | r0 = r4;
0x000ace28 str r2, [sp] | *(sp) = r2;
0x000ace2a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| }
0x000ace2e ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x000ace30 mov r0, r4 | r0 = r4;
0x000ace32 ldr.w r1, [sb, 0x2c] | r1 = *((sb + 0x2c));
0x000ace36 bl 0x22d10 | fcn_00022d10 (r0, r1, r2);
0x000ace3a b 0xacb4e | goto label_46;
| label_103:
0x000ace3c bl 0x30218 | r0 = fcn_00030218 (r0);
0x000ace40 bl 0x234a0 | fcn_000234a0 (r0);
0x000ace42 smlad fp, lr, r5, sb | __asm ("smlad fp, lr, r5, sb");
| if (r3 == 0) {
0x000ace46 cbz r3, 0xace9e | goto label_119;
| }
0x000ace48 ldrh.w ip, [sb, 0x34] | ip = *((sb + 0x34));
0x000ace4c ldrsh.w lr, [sl, 0x22] |
0x000ace50 cmp ip, lr |
| if (ip < lr) {
0x000ace52 blt.w 0xacd0c | goto label_47;
| }
0x000ace56 ldrb.w r3, [sb, 0x37] | r3 = *((sb + 0x37));
0x000ace5a cmp.w lr, 0 |
0x000ace5e orr r3, r3, 0x20 | r3 |= 0x20;
0x000ace62 strb.w r3, [sb, 0x37] | *((sb + 0x37)) = r3;
| if (lr > 0) {
0x000ace66 bgt.w 0xaca46 | goto label_48;
| }
0x000ace6a b 0xaca8e | goto label_37;
| label_116:
0x000ace6c mov r0, r2 | r0 = r2;
0x000ace6e bl 0x41b18 | r0 = fcn_00041b18 (r0, r1);
0x000ace72 mov r4, r0 | r4 = r0;
0x000ace74 cmp r0, 0 |
| if (r0 != 0) {
0x000ace76 bne.w 0xacd52 | goto label_49;
| }
0x000ace7a b.w 0xac484 | goto label_36;
| label_90:
0x000ace7e mov r6, r2 | r6 = r2;
0x000ace80 b 0xac7c6 | goto label_50;
| label_67:
0x000ace82 sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x000ace86 str r3, [sp, 0x20] | var_20h = r3;
0x000ace88 movs r3, 0 |
0x000ace8a movt r3, 0xfff8 | r3 = 0x-80000;
0x000ace8e str r3, [sp, 0x24] | var_24h = r3;
0x000ace90 mov.w r3, 0x8000 |
0x000ace94 movt r3, 0xffff | r3 = 0x-8000;
0x000ace98 str r3, [sp, 0x28] | var_28h = r3;
0x000ace9a b.w 0xac36a | goto label_28;
| label_119:
0x000ace9e ldr r3, [sp, 0x10] | r3 = var_10h;
0x000acea0 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000acea4 cmp r3, 1 |
| if (r3 > 1) {
0x000acea6 bhi.w 0xacab0 | goto label_35;
| }
0x000aceaa ldrb.w r3, [r7, 0xb1] | r3 = *((r7 + 0xb1));
0x000aceae cmp r3, 0 |
| if (r3 != 0) {
0x000aceb0 bne.w 0xacb30 | goto label_51;
| }
0x000aceb4 b 0xacd22 | goto label_52;
| label_118:
0x000aceb6 ldr r2, [pc, 0xc8] |
0x000aceb8 add r2, pc | r2 = 0x159e3e;
0x000aceba b 0xacdb4 | goto label_53;
| label_87:
0x000acebc bl 0x7c594 | fcn_0007c594 (r0);
0x000acec0 b.w 0xac5e4 | goto label_54;
| label_110:
0x000acec4 ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x000acec8 cmp r3, 0 |
| if (r3 != 0) {
0x000aceca bne.w 0xac484 | goto label_36;
| }
0x000acece ldrb.w r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x000aced2 cmp r3, 0 |
| if (r3 != 0) {
0x000aced4 bne.w 0xac484 | goto label_36;
| }
0x000aced8 mov r0, r7 | r0 = r7;
0x000aceda bl 0x38024 | fcn_00038024 (r0);
0x000acede b.w 0xac484 | goto label_36;
| label_61:
0x000acee2 blx 0x6430 | fcn_00006430 ();
| label_117:
0x000acee6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000acee8 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000aceea ldr r1, [pc, 0x98] |
0x000aceec strd r8, r2, [sp, 4] | __asm ("strd r8, r2, [var_4h]");
0x000acef0 ldr.w r2, [sl] | r2 = *(sl);
0x000acef4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000acef6 add r1, pc | r1 = 0x159e80;
0x000acef8 str r2, [sp] | *(sp) = r2;
0x000acefa ldr r2, [sp, 0x24] | r2 = var_24h;
0x000acefc ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x000acefe ldr.w r3, [sb] | r3 = *(sb);
0x000acf02 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000acf06 b 0xacdea | goto label_55;
| label_115:
0x000acf08 ldrb.w r3, [sb, 0x36] | r3 = *((sb + 0x36));
0x000acf0c strb.w r3, [r8, 0x36] | *((r8 + 0x36)) = r3;
0x000acf10 b 0xacc34 | goto label_56;
| label_109:
0x000acf12 ldr r4, [sp, 0x10] | r4 = var_10h;
0x000acf14 ldr r1, [pc, 0x70] |
0x000acf16 mov r0, r4 | r0 = r4;
0x000acf18 add r1, pc | r1 = 0x159ea4;
0x000acf1a bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000acf1e ldr r3, [pc, 0x6c] |
0x000acf20 movs r0, 0xb | r0 = 0xb;
0x000acf22 ldr r2, [pc, 0x6c] |
0x000acf24 ldr r1, [pc, 0x6c] |
0x000acf26 add r3, pc | r3 = 0x159eb8;
0x000acf28 adds r3, 0x14 | r3 += 0x14;
0x000acf2a add r2, pc | r2 = 0x159ec0;
0x000acf2c str r3, [sp] | *(sp) = r3;
0x000acf2e movw r3, 0xe75d |
0x000acf32 movt r3, 1 | r3 = 0x1e75d;
0x000acf36 add r1, pc | r1 = 0x159ece;
0x000acf38 bl 0x50814 | fcn_00050814 (r0, r1, r2);
0x000acf3c movs r3, 0xb | r3 = 0xb;
0x000acf3e str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x000acf40 b.w 0xac484 | goto label_36;
| label_111:
0x000acf44 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x000acf46 cbz r3, 0xacf5c |
0x000acf48 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000acf4a mov r0, r7 | r0 = r7;
0x000acf4c bl 0x30cbc | fcn_00030cbc (r0, r1);
0x000acf50 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000acf52 mov r0, r7 | r0 = r7;
0x000acf54 bl 0x30a7c | fcn_00030a7c (r0, r1);
0x000acf58 b.w 0xac1ea | goto label_57;
| }
0x000acf5c ldr r1, [sp, 0x14] | r1 = var_14h;
0x000acf5e mov r0, r7 | r0 = r7;
0x000acf60 bl 0x30a7c | fcn_00030a7c (r0, r1);
0x000acf64 b.w 0xac1ea | goto label_57;
| label_92:
0x000acf68 movs r3, 0 | r3 = 0;
0x000acf6a ldrb r3, [r3] | r3 = *(r3);
0x000acf6c udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xad264 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000ad264 () | void fcn_000ad264 (int16_t arg_a0h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| arithmetic var_24h;
| arithmetic x;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int32_t var_48h_2;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int32_t var_64h_2;
| int16_t var_6ch;
| int16_t var_74h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000ad264 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ad268 sub sp, 0x7c |
0x000ad26a str r0, [sp, 0x28] | x = r0;
0x000ad26c mov r5, r0 | r5 = r0;
0x000ad26e mov r4, r2 | r4 = r2;
0x000ad270 ldr.w r0, [pc, 0xb90] |
0x000ad272 lsrs r0, r2, 0xe | r0 = r2 >> 0xe;
0x000ad274 str r2, [sp, 0x34] | var_34h = r2;
0x000ad276 ldr.w r2, [pc, 0xb90] | r2 = *(0xade0a);
0x000ad27a add r0, pc | r0 = 0x15b082;
0x000ad27c ldr.w fp, [sp, 0xa0] | fp = *(arg_a0h);
0x000ad280 ldr.w sl, [r5] | sl = *(r5);
0x000ad284 ldr r2, [r0, r2] |
0x000ad286 ldr r2, [r2] | r2 = imp.atan;
0x000ad288 str r2, [sp, 0x74] | var_74h = r2;
0x000ad28a mov.w r2, 0 | r2 = 0;
0x000ad28e strd r3, r1, [sp, 0x2c] | __asm ("strd r3, r1, [var_2ch]");
0x000ad292 mov r3, r4 | r3 = r4;
0x000ad294 orrs.w r3, r3, fp | r3 |= fp;
| if (r3 != r3) {
0x000ad298 beq.w 0xad3b4 |
0x000ad29c ldr.w r3, [r5, 0xec] | r3 = *((r5 + 0xec));
0x000ad2a0 str r3, [sp, 0x24] | var_24h = r3;
0x000ad2a2 cmp r3, 0 |
| if (r3 == 0) {
0x000ad2a4 beq.w 0xad3b4 | goto label_6;
| }
0x000ad2a8 cmp.w fp, 0 |
| if (fp == 0) {
0x000ad2ac beq.w 0xadc02 | goto label_41;
| }
0x000ad2b0 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x000ad2b4 cmp r3, 0 |
| if (r3 == 0) {
0x000ad2b6 beq.w 0xad3e4 | goto label_9;
| }
| label_11:
0x000ad2ba ldr.w r2, [pc, 0xb50] |
0x000ad2be ldr.w r3, [pc, 0xb48] | r3 = *(0xade0a);
0x000ad2c2 add r2, pc | r2 = 0x15b0d4;
0x000ad2c4 ldr r3, [r2, r3] | r3 = imp.atan;
0x000ad2c6 ldr r2, [r3] | r2 = imp.atan;
0x000ad2c8 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000ad2ca eors r2, r3 | r2 ^= r3;
0x000ad2cc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ad2d0 bne.w 0xae03e | goto label_42;
| }
0x000ad2d4 ldr.w r1, [pc, 0xb38] |
0x000ad2d8 add r1, pc | r1 = 0x15b0ec;
| label_18:
0x000ad2da ldr r0, [sp, 0x28] | r0 = x;
0x000ad2dc add sp, 0x7c |
0x000ad2de pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ad2e2 b.w 0x37f78 | void (*0x37f78)() ();
| label_5:
0x000ad2e6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ad2e8 cmp r3, 0 |
| if (r3 == 0) {
0x000ad2ea beq.w 0xadf50 | goto label_43;
| }
0x000ad2ee ldr r3, [sp, 0x28] | r3 = x;
0x000ad2f0 add.w r1, r3, 0xc4 | r1 = r3 + 0xc4;
| label_25:
0x000ad2f4 ldr r3, [r1] | r3 = *(r1);
0x000ad2f6 ldr r0, [sp, 0x28] | r0 = x;
0x000ad2f8 ldr.w ip, [r0, 0xbc] | ip = *((r0 + 0xbc));
0x000ad2fc ldrb r0, [r3] | r0 = *(r3);
0x000ad2fe sub.w r3, r3, ip | r3 -= ip;
0x000ad302 cmp r0, 0x3b |
0x000ad304 mov r0, sl | r0 = sl;
0x000ad306 it ne |
| if (r0 == 0x3b) {
0x000ad308 ldrne r1, [r1, 4] | r1 = *((r1 + 4));
| }
0x000ad30a str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000ad30e it ne |
| if (r0 == 0x3b) {
0x000ad310 addne r3, r3, r1 | r3 += r1;
| }
0x000ad312 ldr.w r1, [pc, 0xb00] |
0x000ad316 add r1, pc | r1 = 0x15b130;
0x000ad318 bl 0x4a320 | r0 = fcn_0004a320 (r0);
0x000ad31c mov sb, r0 | sb = r0;
| label_31:
0x000ad31e ldr r1, [sp, 0x24] | r1 = var_24h;
0x000ad320 lsl.w r8, r7, 4 | r8 = r7 << 4;
0x000ad324 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x000ad328 ldr r0, [sp, 0x28] | r0 = x;
0x000ad32a ldr r1, [r1] | r1 = *(r1);
0x000ad32c ldr.w r2, [r2, r8] | r2 = *((r2 + r8));
0x000ad330 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
0x000ad334 strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x000ad338 ldr r1, [r0, 0x58] | r1 = *((r0 + 0x58));
0x000ad33a ldr r3, [sp, 0x38] | r3 = var_38h;
0x000ad33c str r1, [sp, 0x10] | var_10h = r1;
0x000ad33e ldr r1, [r0, 0x5c] | r1 = *((r0 + 0x5c));
0x000ad340 str r1, [sp, 8] | var_8h = r1;
0x000ad342 ldr.w r1, [pc, 0xad4] |
0x000ad346 add r1, pc | r1 = 0x15b164;
0x000ad348 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000ad34c cmp.w sb, 0 |
| if (sb != 0) {
0x000ad350 beq 0xad35a |
0x000ad352 mov r1, sb | r1 = sb;
0x000ad354 mov r0, sl | r0 = sl;
0x000ad356 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000ad35a ldr r4, [sp, 0x28] | r4 = x;
0x000ad35c mov r2, r7 | r2 = r7;
0x000ad35e ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000ad360 ldr r0, [r4] | r0 = *(r4);
0x000ad362 bl 0x42f2c | fcn_00042f2c (r0, r1, r2);
0x000ad366 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad368 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000ad36a lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
| if (r1 < r3) {
0x000ad36c bpl 0xad386 |
0x000ad36e ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
| if (r3 != 0) {
0x000ad372 cbnz r3, 0xad386 | goto label_38;
| }
0x000ad374 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000ad378 add.w r2, r3, r8 | r2 = r3 + r8;
0x000ad37c ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000ad37e ldr r2, [r2, 0x48] | r2 = *((r2 + 0x48));
0x000ad380 cmp r2, 0 |
| if (r2 == 0) {
0x000ad382 beq.w 0xadfea | goto label_44;
| }
| }
| label_38:
0x000ad386 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad388 mov r0, sl | r0 = sl;
0x000ad38a ldr.w r1, [pc, 0xa90] |
0x000ad38e ldr r2, [r3] | r2 = *(r3);
0x000ad390 add r1, pc | r1 = 0x15b1b2;
0x000ad392 bl 0x4a320 | fcn_0004a320 (r0);
0x000ad396 movs r3, 0 | r3 = 0;
0x000ad398 mov r2, r0 | r2 = r0;
0x000ad39a mov r1, r7 | r1 = r7;
0x000ad39c mov r0, r6 | r0 = r6;
0x000ad39e bl 0x42354 | fcn_00042354 (r0, r1, r2, r3);
0x000ad3a2 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x000ad3a6 cmp r3, 0 |
| if (r3 != 0) {
0x000ad3a8 bne.w 0xadc7e | goto label_45;
| }
0x000ad3aa strh r1, [r5, 0x22] | *((r5 + 0x22)) = r1;
| label_14:
0x000ad3ac cmp.w fp, 0 |
| if (fp == 0) {
0x000ad3b0 beq.w 0xadd1a | goto label_46;
| }
| }
| label_6:
0x000ad3b4 ldr.w r2, [pc, 0xa68] |
0x000ad3b8 ldr.w r3, [pc, 0xa4c] | r3 = *(0xade08);
0x000ad3bc add r2, pc | r2 = 0x15b1e0;
0x000ad3be ldr r3, [r2, r3] | r3 = imp.atan;
0x000ad3c0 ldr r2, [r3] | r2 = imp.atan;
0x000ad3c2 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000ad3c4 eors r2, r3 | r2 ^= r3;
0x000ad3c6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ad3ca bne.w 0xae03e | goto label_42;
| }
0x000ad3ce add sp, 0x7c |
0x000ad3d0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x000ad3d4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad3d6 cmp r3, 1 |
0x000ad3d8 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x000ad3da ittt eq |
| if (r3 != 1) {
0x000ad3dc ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 != 1) {
0x000ad3de orreq r3, r3, 1 | r3 |= 1;
| }
| if (r3 == 1) {
0x000ad3e2 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
| }
| label_9:
0x000ad3e4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ad3e6 lsls r7, r3, 0xf | r7 = r3 << 0xf;
| if (r7 >= r3) {
0x000ad3e8 bpl 0xad48a | goto label_47;
| }
0x000ad3ea ldr r5, [sp, 0x24] | r5 = var_24h;
0x000ad3ec ldrsh.w r0, [r5, 0x22] | r0 = *((r5 + 0x22));
0x000ad3f0 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000ad3f2 cmp r0, 0 |
0x000ad3f4 orr r3, r3, 0x10000 | r3 |= 0x10000;
0x000ad3f8 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| if (r0 <= 0) {
0x000ad3fa ble 0xad48a | goto label_47;
| }
0x000ad3fc ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000ad3fe movs r2, 0 | r2 = 0;
0x000ad400 movs r6, 0x41 | r6 = 0x41;
0x000ad402 movs r7, 2 | r7 = 2;
0x000ad404 b 0xad436 |
| while (r1 > 0xf) {
0x000ad406 cmp r4, 0x10 |
0x000ad408 ldrh r4, [r3, 0xa] | r4 = *((r3 + 0xa));
0x000ad40a it eq |
| if (r4 != 0x10) {
0x000ad40c strbeq r6, [r3, 5] | *((r3 + 5)) = r6;
| }
0x000ad40e lsls r4, r4, 0x1f | r4 <<= 0x1f;
| if (r4 < r4) {
0x000ad410 bpl 0xad42e |
0x000ad412 ldrsh.w r4, [r5, 0x20] | r4 = *((r5 + 0x20));
0x000ad416 cmp r4, r2 |
| if (r4 == r2) {
0x000ad418 beq 0xad42e | goto label_48;
| }
0x000ad41a lsls r1, r1, 0x1c | r1 <<= 0x1c;
| if (r1 != r1) {
0x000ad41c bne 0xad42e | goto label_48;
| }
0x000ad41e ldrb r1, [r3, 4] | r1 = *((r3 + 4));
0x000ad420 bfi r1, r7, 0, 4 | value_0 = BIT_MASK (0, 4);
| value_1 = r7 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x000ad422 lsls r3, r0, 4 | r3 = r0 << 4;
0x000ad424 strb r1, [r3, 4] | *((r3 + 4)) = r1;
0x000ad426 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x000ad428 orr r1, r1, 0x800 | r1 |= 0x800;
0x000ad42c str r1, [r5, 0x1c] | *((r5 + 0x1c)) = r1;
| }
| label_48:
0x000ad42e adds r2, 1 | r2++;
0x000ad430 adds r3, 0xc | r3 += 0xc;
0x000ad432 cmp r2, r0 |
| if (r2 == r0) {
0x000ad434 beq 0xad48a | goto label_47;
| }
0x000ad436 ldrb r1, [r3, 4] | r1 = *((r3 + 4));
0x000ad438 cmp r1, 0xf |
0x000ad43a and r4, r1, 0xf0 | r4 = r1 & 0xf0;
0x000ad43e bhi 0xad406 |
| }
0x000ad440 ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x000ad442 ldr r6, [r3] | r6 = *(r3);
0x000ad444 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad446 lsls r5, r2, 0x1d | r5 = r2 << 0x1d;
0x000ad448 ldr r7, [r3] | r7 = *(r3);
| if (r5 >= r2) {
0x000ad44a bpl.w 0xadce4 | goto label_49;
| }
0x000ad44e mov r0, r6 | r0 = r6;
0x000ad450 blx 0x65dc | strcmp (r0, r1);
0x000ad454 ldr.w r2, [pc, 0x9cc] |
0x000ad458 ldr.w r3, [pc, 0x9ac] | r3 = *(0xade08);
0x000ad45c add r2, pc | r2 = 0x15b284;
0x000ad45e ldr r3, [r2, r3] | r3 = imp.atan;
0x000ad460 ldr r2, [r3] | r2 = imp.atan;
0x000ad462 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000ad464 eors r2, r3 | r2 ^= r3;
0x000ad466 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ad46a bne.w 0xae03e | goto label_42;
| }
0x000ad46e ldr.w r1, [pc, 0x9b8] |
0x000ad472 adds r4, r0, 1 | r4 = r0 + 1;
0x000ad474 add r4, r6 | r4 += r6;
0x000ad476 ldr r0, [sp, 0x28] | r0 = x;
0x000ad478 mov r3, r6 | r3 = r6;
0x000ad47a mov r2, r7 | r2 = r7;
0x000ad47c add r1, pc | r1 = 0x15b2aa;
0x000ad47e str r4, [sp, 0xa0] | *(arg_a0h) = r4;
0x000ad480 add sp, 0x7c |
0x000ad482 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ad486 b.w 0x37f78 | void (*0x37f78)() ();
| label_47:
0x000ad48a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ad48c lsls r6, r3, 0x18 | r6 = r3 << 0x18;
| if (r6 >= r3) {
0x000ad48e bpl.w 0xad76c | goto label_19;
| }
0x000ad492 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad494 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x000ad496 ands r5, r2, 8 | r5 = r2 & 8;
| if (r5 != r2) {
0x000ad49a bne.w 0xade96 | goto label_50;
| }
0x000ad49e lsls r4, r2, 0x1d | r4 = r2 << 0x1d;
| if (r4 >= r2) {
0x000ad4a0 bpl.w 0xade6c | goto label_51;
| }
0x000ad4a4 ldr r1, [sp, 0x28] | r1 = x;
0x000ad4a6 orr r3, r2, 0x280 | r3 = r2 | 0x280;
0x000ad4aa ldr r6, [sp, 0x24] | r6 = var_24h;
0x000ad4ac ldr r0, [r1] | r0 = *(r1);
0x000ad4ae ldr r4, [r1, 8] | r4 = *((r1 + 8));
0x000ad4b0 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x000ad4b2 ldrb.w r1, [r0, 0xb2] | r1 = *((r0 + 0xb2));
0x000ad4b6 str r0, [sp, 0x38] | var_38h = r0;
0x000ad4b8 ands r1, r1, 2 | r1 &= 2;
| if (r1 != r1) {
0x000ad4bc bne 0xad4f4 | goto label_52;
| }
0x000ad4be ldrsh.w r6, [r6, 0x22] | r6 = *((r6 + 0x22));
0x000ad4c2 cmp r6, 0 |
| if (r6 <= 0) {
0x000ad4c4 ble 0xad4ec | goto label_53;
| }
0x000ad4c6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad4c8 movs r0, 0xc | r0 = 0xc;
0x000ad4ca movs r7, 2 | r7 = 2;
0x000ad4cc ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000ad4ce smlabb r6, r6, r0, r3 | __asm ("smlabb r6, r6, r0, r3");
| do {
0x000ad4d2 ldrh r0, [r3, 0xa] | r0 = *((r3 + 0xa));
0x000ad4d4 lsls r0, r0, 0x1f | r0 <<= 0x1f;
| if (r0 < r0) {
0x000ad4d6 bpl 0xad4e6 |
0x000ad4d8 ldrb r0, [r3, 4] | r0 = *((r3 + 4));
0x000ad4da tst.w r0, 0xf |
0x000ad4de itt eq |
| if ((r0 & 0xf) == 0) {
0x000ad4e0 bfieq r0, r7, 0, 4 | __asm ("bfieq r0, r7, 0, 4");
| }
| if ((r0 & 0xf) != 0) {
0x000ad4e4 strb r0, [r3, 4] | *((r3 + 4)) = r0;
| goto label_54;
| }
| }
| label_54:
0x000ad4e6 adds r3, 0xc | r3 += 0xc;
0x000ad4e8 cmp r6, r3 |
0x000ad4ea bne 0xad4d2 |
| } while (r6 != r3);
| label_53:
0x000ad4ec ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad4ee orr r2, r2, 0xa80 | r2 |= 0xa80;
0x000ad4f2 str r2, [r3, 0x1c] | *((r3 + 0x1c)) = r2;
| label_52:
0x000ad4f4 ldr r3, [sp, 0x28] | r3 = x;
0x000ad4f6 ldr.w r3, [r3, 0x84] | r3 = *((r3 + 0x84));
0x000ad4fa cmp r3, 0 |
| if (r3 != 0) {
0x000ad4fc bne.w 0xadeb4 | goto label_55;
| }
| label_23:
0x000ad500 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad502 ldrsh.w r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000ad506 cmp r3, 0 |
| if (r3 >= 0) {
0x000ad508 bge 0xad582 | goto label_56;
| }
0x000ad50a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad50c ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x000ad510 mov r6, sb | r6 = sb;
0x000ad512 cmp.w sb, 0 |
| if (sb != 0) {
0x000ad516 bne 0xad524 | goto label_57;
| }
0x000ad518 b.w 0xae042 | goto label_58;
| do {
0x000ad51c ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x000ad51e cmp r6, 0 |
| if (r6 == 0) {
0x000ad520 beq.w 0xae042 | goto label_58;
| }
0x000ad522 strh r7, [r1, 0x2c] | *((r1 + 0x2c)) = r7;
| label_57:
0x000ad524 ldrb.w r3, [r6, 0x37] | r3 = *((r6 + 0x37));
0x000ad528 and r3, r3, 3 | r3 &= 3;
0x000ad52c cmp r3, 2 |
0x000ad52e bne 0xad51c |
| } while (r3 != 2);
0x000ad530 ldrh r2, [r6, 0x32] | r2 = *((r6 + 0x32));
0x000ad532 cmp r2, 1 |
| if (r2 < 1) {
0x000ad534 bls.w 0xadfd4 | goto label_59;
| }
0x000ad538 mov.w r8, 1 | r8 = 1;
0x000ad53c mov r7, r8 | r7 = r8;
0x000ad53e b 0xad552 |
| while (r0 != 0) {
0x000ad540 ldrh r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000ad542 subs r3, 1 | r3--;
0x000ad544 strh r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
| label_0:
0x000ad546 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x000ad548 add.w r8, r8, 1 | r8++;
0x000ad54c cmp r8, r3 |
| if (r8 >= r3) {
0x000ad54e bge.w 0xaddea | goto label_60;
| }
0x000ad552 mov r3, r8 | r3 = r8;
0x000ad554 mov r2, r6 | r2 = r6;
0x000ad556 mov r1, r7 | r1 = r7;
0x000ad558 mov r0, r6 | r0 = r6;
0x000ad55a bl 0x2f508 | r0 = fcn_0002f508 (r0, r1, r2, r3, r4);
0x000ad55e cmp r0, 0 |
0x000ad560 bne 0xad540 |
| }
0x000ad562 ldrd r1, r0, [r6, 0x1c] | __asm ("ldrd r1, r0, [r6, 0x1c]");
0x000ad566 ldr.w r2, [r0, r8, lsl 2] | offset_2 = r8 << 2;
| r2 = *((r0 + offset_2));
0x000ad56a str.w r2, [r0, r7, lsl 2] | __asm ("str.w r2, [r0, r7, lsl 2]");
0x000ad56e ldrb.w r2, [r1, r8] | r2 = *((r1 + r8));
0x000ad572 strb r2, [r1, r7] | *((r1 + r7)) = r2;
0x000ad574 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000ad576 ldrsh.w r1, [r2, r8, lsl 1] | offset_3 = r8 << 1;
| r1 = *((r2 + offset_3));
0x000ad57a strh.w r1, [r2, r7, lsl 1] | offset_4 = r7 << 1;
| *((r2 + offset_4)) = r1;
0x000ad57e adds r7, 1 | r7++;
0x000ad580 b 0xad546 | goto label_0;
| label_56:
0x000ad582 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000ad584 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000ad588 ldr.w r0, [r2, r3, lsl 2] | offset_5 = r3 << 2;
| r0 = *((r2 + offset_5));
0x000ad58c str r0, [sp, 0x58] | var_58h = r0;
| if (r0 != 0) {
0x000ad58e cbz r0, 0xad598 |
0x000ad590 blx 0x65dc | r0 = strcmp (r0, r1);
0x000ad594 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x000ad598 movs r3, 0 | r3 = 0;
0x000ad59a movs r1, 0x3b | r1 = 0x3b;
0x000ad59c str r0, [sp, 0x5c] | var_5ch = r0;
0x000ad59e add r2, sp, 0x58 | r2 += var_58h;
0x000ad5a0 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000ad5a2 bl 0x38538 | fcn_00038538 (r0, r1, r2, r3);
0x000ad5a4 invalid |
0x000ad5a8 mov r1, r0 | r1 = r0;
0x000ad5aa ldr r0, [r3] | r0 = *(r3);
0x000ad5ac bl 0x384f8 | r0 = fcn_000384f8 (r0, r1);
0x000ad5b0 cmp r0, 0 |
| if (r0 == 0) {
0x000ad5b2 beq.w 0xadf42 | goto label_61;
| }
0x000ad5b6 ldr r2, [sp, 0x28] | r2 = x;
0x000ad5b8 ldrb.w r3, [r2, 0xd0] | r3 = *((r2 + 0xd0));
0x000ad5bc cmp r3, 1 |
| if (r3 < 1) {
0x000ad5be bls 0xad5dc | goto label_62;
| }
0x000ad5c0 ldr.w r3, [r2, 0x10c] | r3 = *((r2 + 0x10c));
0x000ad5c4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad5c6 add.w r1, r2, 0x20 | r1 = r2 + 0x20;
| if (r3 != 0) {
0x000ad5ca cbnz r3, 0xad5d2 | goto label_63;
| }
0x000ad5cc b 0xad5dc | goto label_62;
| do {
0x000ad5ce ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| if (r3 == 0) {
0x000ad5d0 cbz r3, 0xad5dc | goto label_62;
| }
| label_63:
0x000ad5d2 ldr r2, [r3] | r2 = *(r3);
0x000ad5d4 cmp r1, r2 |
0x000ad5d6 bne 0xad5ce |
| } while (r1 != r2);
0x000ad5d8 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x000ad5da str r2, [r3] | *(r3) = r2;
| label_62:
0x000ad5dc ldr r6, [sp, 0x28] | r6 = x;
0x000ad5de movw r2, 0xffff | r2 = 0xffff;
0x000ad5e2 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000ad5e4 ldrb.w r3, [r6, 0xce] | r3 = *((r6 + 0xce));
0x000ad5e8 strb r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000ad5ea movs r3, 0 | r3 = 0;
0x000ad5ec strh r2, [r1, 0x20] | *((r1 + 0x20)) = r2;
0x000ad5ee movs r2, 2 | r2 = 2;
0x000ad5f0 strd r3, r3, [sp, 0x10] | __asm ("strd r3, r3, [var_10h]");
0x000ad5f4 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_ch]");
0x000ad5f8 str r2, [sp, 0x18] | var_18h = r2;
0x000ad5fa ldrb.w r2, [r1, 0x2a] | r2 = *((r1 + 0x2a));
0x000ad5fe mov r1, r3 | r1 = r3;
0x000ad600 strd r0, r2, [sp] | __asm ("strd r0, r2, [sp]");
0x000ad604 mov r2, r3 | r2 = r3;
0x000ad606 mov r0, r6 | r0 = r6;
0x000ad608 bl 0xac128 | fcn_000ac128 (r0, r1, r2, r3, r4, r5, r6);
0x000ad60c ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000ad60e cmp r3, 0 |
| if (r3 != 0) {
0x000ad610 bne.w 0xadf42 | goto label_61;
| }
0x000ad614 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad616 ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x000ad61a mov r6, sb | r6 = sb;
0x000ad61c cmp.w sb, 0 |
| if (sb != 0) {
0x000ad620 bne 0xad628 | goto label_64;
| }
0x000ad622 b 0xad634 | goto label_65;
| do {
0x000ad624 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
| if (r6 == 0) {
0x000ad626 cbz r6, 0xad634 | goto label_65;
| }
| label_64:
0x000ad628 ldrb.w r3, [r6, 0x37] | r3 = *((r6 + 0x37));
0x000ad62c and r3, r3, 3 | r3 &= 3;
0x000ad630 cmp r3, 2 |
0x000ad632 bne 0xad624 |
| } while (r3 != 2);
| label_65:
0x000ad634 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000ad636 ldrh r0, [r6, 0x32] | r0 = *((r6 + 0x32));
0x000ad638 ldrb.w r1, [r3, 0xb2] | r1 = *((r3 + 0xb2));
0x000ad63c mov r7, r0 | r7 = r0;
0x000ad63e and r1, r1, 2 | r1 &= 2;
| label_22:
0x000ad642 ldrb.w r2, [r6, 0x37] | r2 = *((r6 + 0x37));
0x000ad646 orr r2, r2, 0x20 | r2 |= 0x20;
0x000ad64a strb.w r2, [r6, 0x37] | *((r6 + 0x37)) = r2;
| if (r1 == 0) {
0x000ad64e cbnz r1, 0xad65a |
0x000ad650 uxtb r2, r2 | r2 = (int8_t) r2;
0x000ad652 orr r2, r2, 8 | r2 |= 8;
0x000ad656 strb.w r2, [r6, 0x37] | *((r6 + 0x37)) = r2;
| }
0x000ad65a strh r0, [r6, 0x34] | *((r6 + 0x34)) = r0;
| if (r4 != 0) {
0x000ad65c cbz r4, 0xad666 |
0x000ad65e ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x000ad660 cmp r2, 0 |
| if (r2 != 0) {
0x000ad662 bne.w 0xadf1e | goto label_66;
| }
| }
| label_24:
0x000ad666 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad668 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000ad66a str r2, [r6, 0x2c] | *((r6 + 0x2c)) = r2;
0x000ad66c cmp.w sb, 0 |
| if (sb == 0) {
0x000ad670 beq 0xad6ba | goto label_67;
| }
0x000ad672 str r5, [sp, 0x3c] | var_3ch = r5;
0x000ad674 mov r5, sb | r5 = sb;
| label_1:
0x000ad676 ldrb.w r3, [r5, 0x37] | r3 = *((r5 + 0x37));
0x000ad67a and r3, r3, 3 | r3 &= 3;
0x000ad67e cmp r3, 2 |
| if (r3 == 2) {
0x000ad680 beq 0xad6b2 | goto label_20;
| }
0x000ad682 ldrh.w sb, [r5, 0x32] | sb = *((r5 + 0x32));
| if (r7 == 0) {
0x000ad686 cbz r7, 0xad6ae | goto label_68;
| }
0x000ad688 mov.w r8, 0 | r8 = 0;
0x000ad68c mov r4, r8 | r4 = r8;
| do {
0x000ad68e mov r3, r4 | r3 = r4;
0x000ad690 mov r2, r6 | r2 = r6;
0x000ad692 mov r1, sb | r1 = sb;
0x000ad694 mov r0, r5 | r0 = r5;
0x000ad696 bl 0x2f508 | r0 = fcn_0002f508 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x000ad69a cbnz r0, 0xad6a0 |
0x000ad69c add.w r8, r8, 1 | r8++;
| }
0x000ad6a0 adds r4, 1 | r4++;
0x000ad6a2 cmp r4, r7 |
0x000ad6a4 bne 0xad68e |
| } while (r4 != r7);
0x000ad6a6 cmp.w r8, 0 |
| if (r8 != 0) {
0x000ad6aa bne.w 0xadd70 | goto label_69;
| }
| label_68:
0x000ad6ae strh.w sb, [r5, 0x34] | *((r5 + 0x34)) = sb;
| label_20:
0x000ad6b2 ldr r5, [r5, 0x14] | r5 = *((r5 + 0x14));
0x000ad6b4 cmp r5, 0 |
| if (r5 != 0) {
0x000ad6b6 bne 0xad676 | goto label_1;
| }
0x000ad6b8 ldr r5, [sp, 0x3c] | r5 = var_3ch;
| label_67:
0x000ad6ba ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad6bc ldrsh.w ip, [r3, 0x22] | ip = *((r3 + 0x22));
0x000ad6c0 cmp.w ip, 0 |
0x000ad6c2 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
0x000ad6c4 it le |
| if (r0 > r0) {
0x000ad6c6 movle r2, r7 | r2 = r7;
| }
| if (r0 <= r0) {
0x000ad6c8 ble 0xad704 | goto label_70;
| }
0x000ad6ca ldr.w lr, [r6, 4] |
0x000ad6ce movs r0, 0 | r0 = 0;
0x000ad6d0 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000ad6d2 mov r8, r0 | r8 = r0;
0x000ad6d4 mov r2, r0 | r2 = r0;
0x000ad6d6 add.w r1, lr, r7, lsl 1 | r1 = lr + (r7 << 1);
| label_2:
0x000ad6da mov r3, lr | r3 = lr;
0x000ad6dc b 0xad6e6 |
| while (r3 != r1) {
0x000ad6de ldrsh sb, [r3], 2 | sb = *(r3);
| r3 += 2;
0x000ad6e2 cmp sb, r2 |
| if (sb == r2) {
0x000ad6e4 beq 0xad6f8 | goto label_71;
| }
0x000ad6e6 cmp r3, r1 |
0x000ad6e8 bne 0xad6de |
| }
0x000ad6ea ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000ad6ec add r3, r0 | r3 += r0;
0x000ad6ee ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000ad6f0 lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x000ad6f2 it pl |
| if (r3 < r3) {
0x000ad6f4 addpl r8, r8, 1 | r8++;
| }
| label_71:
0x000ad6f8 adds r2, 1 | r2++;
0x000ad6fa adds r0, 0xc | r0 += 0xc;
0x000ad6fc cmp ip, r2 |
| if (ip != r2) {
0x000ad6fe bne 0xad6da | goto label_2;
| }
0x000ad700 add.w r2, r8, r7 | r2 = r8 + r7;
| label_70:
0x000ad704 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000ad706 mov r1, r6 | r1 = r6;
0x000ad708 bl 0x3ad74 | r0 = fcn_0003ad74 (r0, r1, r2);
| if (r0 != 0) {
0x000ad70c cbnz r0, 0xad76c | goto label_19;
| }
0x000ad70e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad710 ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
0x000ad714 cmp r1, 0 |
| if (r1 <= 0) {
0x000ad716 ble 0xad766 | goto label_72;
| }
0x000ad718 ldr.w r3, [pc, 0x710] |
0x000ad71c ldr.w ip, [r6, 4] | ip = *((r6 + 4));
0x000ad720 ldr.w lr, [sp, 0x24] | lr = var_24h;
0x000ad724 add r3, pc | r3 = 0x15b554;
0x000ad726 add.w r8, r3, 0x780 | r8 = r3 + 0x780;
0x000ad72a mov r3, r8 | r3 = r8;
0x000ad72c mov r8, r1 | r8 = r1;
0x000ad72e mov r1, r3 | r1 = r3;
| label_3:
0x000ad730 add.w r4, ip, r7, lsl 1 | r4 = ip + (r7 << 1);
0x000ad734 mov r3, ip | r3 = ip;
0x000ad736 b 0xad740 |
| while (r3 != r4) {
0x000ad738 ldrsh r2, [r3], 2 | r2 = *(r3);
| r3 += 2;
0x000ad73c cmp r2, r0 |
| if (r2 == r0) {
0x000ad73e beq 0xad75e | goto label_73;
| }
0x000ad740 cmp r3, r4 |
0x000ad742 bne 0xad738 |
| }
0x000ad744 ldr.w r2, [lr, 4] | r2 = *((lr + 4));
0x000ad748 add r2, r5 | r2 += r5;
0x000ad74a ldrh r2, [r2, 0xa] | r2 = *((r2 + 0xa));
0x000ad74c lsls r2, r2, 0x1a | r2 <<= 0x1a;
| if (r2 >= r2) {
0x000ad74e bmi 0xad75e |
0x000ad750 strh r0, [r3] | *(r3) = r0;
0x000ad752 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x000ad754 ldrsh.w r8, [lr, 0x22] | r8 = *((lr + 0x22));
0x000ad758 str.w r1, [r3, r7, lsl 2] | __asm ("str.w r1, [r3, r7, lsl 2]");
0x000ad75c adds r7, 1 | r7++;
| }
| label_73:
0x000ad75e adds r0, 1 | r0++;
0x000ad760 adds r5, 0xc | r5 += 0xc;
0x000ad762 cmp r0, r8 |
| if (r0 < r8) {
0x000ad764 blt 0xad730 | goto label_3;
| }
| label_72:
0x000ad766 mov r0, r6 | r0 = r6;
0x000ad768 bl 0x234a0 | fcn_000234a0 (r0);
| label_19:
0x000ad76c ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad76e ldr r1, [r3, 0x3c] | r1 = *((r3 + 0x3c));
0x000ad770 cmp r1, 0 |
| if (r1 == 0) {
0x000ad772 beq.w 0xadfda | goto label_74;
| }
0x000ad776 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000ad77a movs r7, 0 | r7 = 0;
0x000ad77c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000ad77e cmp r1, r2 |
| if (r1 == r2) {
0x000ad780 beq 0xad78c | goto label_37;
| }
| do {
0x000ad782 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x000ad784 adds r3, 0x10 | r3 += 0x10;
0x000ad786 adds r7, 1 | r7++;
0x000ad788 cmp r1, r2 |
0x000ad78a bne 0xad782 |
| } while (r1 != r2);
| label_37:
0x000ad78c ldr r5, [sp, 0x24] | r5 = var_24h;
0x000ad78e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000ad790 mov r1, r5 | r1 = r5;
| if (r3 != 0) {
0x000ad792 cbz r3, 0xad7b6 |
0x000ad794 ldr r4, [sp, 0x28] | r4 = x;
0x000ad796 movs r2, 4 | r2 = 4;
0x000ad798 str r3, [sp] | *(sp) = r3;
0x000ad79a movs r3, 0 | r3 = 0;
0x000ad79c mov r0, r4 | r0 = r4;
0x000ad79e bl 0x48b84 | fcn_00048b84 (r0, r1, r2, r3);
0x000ad7a0 invalid |
| if (r3 == 0) {
0x000ad7a4 cbz r3, 0xad7b6 | goto label_75;
| }
0x000ad7a6 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
| if (r1 != 0) {
0x000ad7a8 cbz r1, 0xad7b0 |
0x000ad7aa mov r0, sl | r0 = sl;
0x000ad7ac bl 0x30cbc | fcn_00030cbc (r0, r1);
| }
0x000ad7b0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad7b2 movs r3, 0 | r3 = 0;
0x000ad7b4 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| }
| label_75:
0x000ad7b6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad7b8 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000ad7ba ldrsh.w r1, [r2, 0x22] | r1 = *((r2 + 0x22));
0x000ad7be tst.w r3, 0x60 |
| if ((r3 & 0x60) == 0) {
0x000ad7c2 beq 0xad844 | goto label_76;
| }
0x000ad7c4 cmp r1, 0 |
| if (r1 <= 0) {
0x000ad7c6 ble.w 0xadd52 | goto label_77;
| }
0x000ad7ca movs r6, 0 | r6 = 0;
0x000ad7cc ldr r4, [sp, 0x24] | r4 = var_24h;
0x000ad7ce mov sb, r6 | sb = r6;
0x000ad7d0 mov r8, r6 | r8 = r6;
0x000ad7d2 mov r5, r6 | r5 = r6;
0x000ad7d4 b 0xad7e6 |
| while (r2 == 0) {
0x000ad7d6 add.w r8, r8, 1 | r8++;
0x000ad7da add.w sb, sb, 1 | sb++;
0x000ad7de cmp r1, r8 |
0x000ad7e0 add.w r6, r6, 0xc | r6 += 0xc;
| if (r1 <= r8) {
0x000ad7e4 ble 0xad83c | goto label_78;
| }
| label_4:
0x000ad7e6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000ad7e8 add r3, r6 | r3 += r6;
0x000ad7ea ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x000ad7ec and r2, r2, 0x60 | r2 &= 0x60;
0x000ad7f0 cmp r2, 0 |
0x000ad7f2 beq 0xad7d6 |
| }
0x000ad7f4 ldrh r2, [r3, 8] | r2 = *((r3 + 8));
0x000ad7f6 cmp r2, 0 |
| if (r2 == 0) {
0x000ad7f8 beq.w 0xadc7a | goto label_79;
| }
0x000ad7fc ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
0x000ad800 cmp r1, 0 |
| if (r1 != 0) {
0x000ad802 bne.w 0xadc7a | goto label_79;
| }
0x000ad806 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x000ad808 cbz r3, 0xad81c |
0x000ad80a ldr r0, [r3] | r0 = *(r3);
0x000ad80c cmp r0, r2 |
0x000ad80e it lt |
| if (r0 >= r2) {
0x000ad810 movlt r3, r1 | r3 = r1;
| }
| if (r0 < r2) {
0x000ad812 blt 0xad81c | goto label_13;
| }
0x000ad814 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x000ad818 ldr r3, [r3, -0x8] | r3 = *((r3 - 0x8));
| }
| label_13:
0x000ad81c ldr r0, [sp, 0x28] | r0 = x;
0x000ad81e movs r2, 8 | r2 = 8;
0x000ad820 mov r1, r4 | r1 = r4;
0x000ad822 str r5, [sp] | *(sp) = r5;
0x000ad824 bl 0x48b84 | fcn_00048b84 (r0, r1, r2, r3);
0x000ad826 vld1.32 {d2[0]}, [lr], r0 | __asm ("vld1.32 {d2[0]}, [lr], r0");
| if (r2 != 8) {
0x000ad82a bne.w 0xadc3e | goto label_80;
| }
| label_12:
0x000ad82e ldrsh.w r1, [r4, 0x22] | r1 = *((r4 + 0x22));
0x000ad832 add.w r8, r8, 1 | r8++;
0x000ad836 adds r6, 0xc | r6 += 0xc;
0x000ad838 cmp r1, r8 |
| if (r1 > r8) {
0x000ad83a bgt 0xad7e6 | goto label_4;
| }
| label_78:
0x000ad83c cmp.w sb, 0 |
| if (sb == 0) {
0x000ad840 beq.w 0xadd52 | goto label_77;
| }
| label_76:
0x000ad844 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad846 cmp r1, 0 |
0x000ad848 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000ad84a ldrsh.w r0, [r2, 0x20] | r0 = *((r2 + 0x20));
| if (r1 <= 0) {
0x000ad84e ble.w 0xadd42 | goto label_81;
| }
0x000ad850 strh r0, [r7, 0x12] | *((r7 + 0x12)) = r0;
0x000ad852 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000ad856 movs r2, 0 | r2 = 0;
0x000ad858 add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
| do {
0x000ad85c ldrb r4, [r3, 6] | r4 = *((r3 + 6));
0x000ad85e adds r3, 0xc | r3 += 0xc;
0x000ad860 cmp r3, r1 |
0x000ad862 add r2, r4 | r2 += r4;
0x000ad864 bne 0xad85c |
| } while (r3 != r1);
0x000ad866 cmp r0, 0 |
0x000ad868 mov.w r3, 0 | r3 = 0;
0x000ad86a lsls r0, r0, 0xc | r0 <<= 0xc;
0x000ad86c it lt |
| if (r0 >= r0) {
0x000ad86e addlt r2, 1 | r2++;
| }
0x000ad870 lsls r2, r2, 2 | r2 <<= 2;
0x000ad872 cmp r2, 7 |
| if (r2 < 7) {
0x000ad874 bls.w 0xadcc4 | goto label_82;
| }
0x000ad876 strh r6, [r4, 0x10] | *((r4 + 0x10)) = r6;
0x000ad878 clz r3, r2 | r3 &= r2;
0x000ad87c rsb.w r3, r3, 0x1c | r3 = 0x1c - r3;
0x000ad880 lsrs r2, r3 | r2 >>= r3;
0x000ad882 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000ad886 lsls r3, r3, 1 | r3 <<= 1;
0x000ad888 adds r3, 0x28 | r3 += 0x28;
0x000ad88a uxth r3, r3 | r3 = (int16_t) r3;
| label_16:
0x000ad88c ldr.w r1, [pc, 0x5a0] |
0x000ad890 and r2, r2, 7 | r2 &= 7;
0x000ad894 subs r3, 0xa | r3 -= 0xa;
0x000ad896 add r1, pc | r1 = 0x15b6ca;
0x000ad898 add.w r2, r1, r2, lsl 1 | r2 = r1 + (r2 << 1);
0x000ad89a lsls r2, r0, 9 | r2 = r0 << 9;
0x000ad89c ldrh.w r2, [r2, 0x408] | r2 = *((r2 + 0x408));
0x000ad8a0 add r3, r2 | r3 += r2;
0x000ad8a2 sxth r3, r3 | __asm ("sxth r3, r3");
| label_15:
0x000ad8a4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000ad8a6 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x000ad8a8 strh r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
| if (r0 == 0) {
0x000ad8aa cbz r0, 0xad8b6 | goto label_83;
| }
| do {
0x000ad8ac bl 0x30218 | fcn_00030218 (r0);
0x000ad8b0 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x000ad8b2 cmp r0, 0 |
0x000ad8b4 bne 0xad8ac |
| } while (r0 != 0);
| label_83:
0x000ad8b6 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x000ad8ba cmp r3, 0 |
| if (r3 != 0) {
0x000ad8bc bne.w 0xadc7e | goto label_45;
| }
0x000ad8c0 ldr r3, [sp, 0x28] | r3 = x;
0x000ad8c2 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000ad8c4 cmp r6, 0 |
| if (r6 == 0) {
0x000ad8c6 beq.w 0xaddd0 | goto label_84;
| }
| label_21:
0x000ad8ca movs r3, 0 | r3 = 0;
0x000ad8cc movs r1, 0x7a | r1 = 0x7a;
0x000ad8ce mov r2, r3 | r2 = r3;
0x000ad8d0 str r3, [sp] | *(sp) = r3;
0x000ad8d2 mov r0, r6 | r0 = r6;
0x000ad8d4 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ad8d8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad8da ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x000ad8de cmp r3, 0 |
| if (r3 != 0) {
0x000ad8e0 bne.w 0xadd0e | goto label_85;
| }
0x000ad8e4 ldr.w r2, [pc, 0x54c] |
0x000ad8e8 ldr.w r3, [pc, 0x54c] |
0x000ad8ec add r2, pc | r2 = 0x15b724;
0x000ad8ee add r3, pc | r3 = 0x15b72a;
0x000ad8f0 str r3, [sp, 0x38] | var_38h = r3;
| label_17:
0x000ad8f2 cmp.w fp, 0 |
| if (fp == 0) {
0x000ad8f6 beq.w 0xad2e6 | goto label_5;
| }
0x000ad8fa ldr r3, [sp, 0x28] | r3 = x;
0x000ad8fc ldr r1, [sp, 0x28] | r1 = x;
0x000ad8fe ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000ad902 cmp r3, 0 |
| if (r3 != 0) {
0x000ad904 bne.w 0xadeda | goto label_86;
| }
0x000ad908 ldr.w sb, [r1, 0x2c] | sb = *((r1 + 0x2c));
0x000ad90c movs r2, 1 | r2 = 1;
0x000ad90e ldr r3, [r1, 0x74] | r3 = *((r1 + 0x74));
0x000ad910 mov r0, r6 | r0 = r6;
0x000ad912 add.w r5, sb, 3 | r5 = sb + 3;
0x000ad916 add.w r4, sb, 1 | r4 = sb + 1;
0x000ad91a cmp r3, 0 |
0x000ad91c it eq |
| if (r3 != 0) {
0x000ad91e moveq r3, r1 | r3 = r1;
| }
0x000ad920 str r5, [r1, 0x2c] | *((r1 + 0x2c)) = r5;
0x000ad922 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x000ad924 str r7, [sp] | *(sp) = r7;
0x000ad926 ldr r3, [r1, 0x5c] | r3 = *((r1 + 0x5c));
0x000ad928 movs r1, 0x71 | r1 = 0x71;
0x000ad92a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ad92e ldr.w r8, [r6, 0x6c] | r8 = *((r6 + 0x6c));
0x000ad932 cmp.w r8, 0 |
| if (r8 > 0) {
0x000ad936 ble 0xad948 |
0x000ad938 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x000ad93a add.w r2, r8, r8, lsl 1 | r2 = r8 + (r8 << 1);
0x000ad93e add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x000ad942 movs r2, 0x10 | r2 = 0x10;
0x000ad944 strh r2, [r3, -0x16] | *((r3 - 0x16)) = r2;
| }
0x000ad948 ldr r0, [sp, 0x28] | r0 = x;
0x000ad94a movs r3, 2 | r3 = 2;
0x000ad94c mov r2, r4 | r2 = r4;
0x000ad94e movs r1, 0xa | r1 = 0xa;
0x000ad950 str r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
0x000ad952 add.w r3, r8, 1 | r3 = r8 + 1;
0x000ad956 str r3, [sp] | *(sp) = r3;
0x000ad958 mov r0, r6 | r0 = r6;
0x000ad95a movs r3, 0 | r3 = 0;
0x000ad95c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ad960 ldr r0, [sp, 0x28] | r0 = x;
0x000ad962 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x000ad964 str r3, [sp, 0x2c] | var_2ch = r3;
0x000ad966 cmp r3, 0 |
| if (r3 != 0) {
0x000ad968 bne.w 0xad3b4 | goto label_6;
| }
0x000ad96c mov r1, fp | r1 = fp;
0x000ad96e movs r2, 0x41 | r2 = 0x41;
0x000ad970 bl 0x62e24 | r0 = fcn_00062e24 (r0, r1, r2);
0x000ad974 mov r1, r0 | r1 = r0;
0x000ad976 cmp r0, 0 |
| if (r0 == 0) {
0x000ad978 beq.w 0xad3b4 | goto label_6;
| }
0x000ad97a add r5, sp, 0x70 | r5 = sp + 0x70;
0x000ad97c ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x000ad97e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ad980 ldrsh.w r0, [r0, 0x22] | r0 = *((r0 + 0x22));
0x000ad984 ldr.w ip, [sl, 0x210] | ip = *((sl + 0x210));
0x000ad986 stm r2!, {r4} | *(r2!) = r4;
0x000ad988 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000ad98a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ad98c mov r2, r3 | r2 = r3;
0x000ad98e bfi r2, r0, 0, 0x10 | value_6 = BIT_MASK (0, 0x10);
| value_7 = r0 & value_6;
| value_6 = ~value_6;
| r2 &= value_6;
| r2 |= value_7;
0x000ad992 bfi r2, r0, 0x10, 0x10 | value_8 = BIT_MASK (0x10, 0x10);
| value_9 = r0 & value_8;
| value_8 = ~value_8;
| r2 &= value_8;
| r2 |= value_9;
0x000ad996 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000ad998 str.w r2, [r0, 0x22] | __asm ("str.w r2, [r0, 0x22]");
0x000ad99c strh r3, [r1, 0x22] | *((r1 + 0x22)) = r3;
0x000ad99e str r3, [r1, 4] | *((r1 + 4)) = r3;
0x000ad9a0 cmp.w ip, 0 |
| if (ip == 0) {
0x000ad9a4 beq.w 0xadf7a | goto label_87;
| }
| label_29:
0x000ad9a8 mov r0, sl | r0 = sl;
0x000ad9aa bl 0x310dc | fcn_000310dc (r0, r1);
| label_30:
0x000ad9ae movs r3, 0 | r3 = 0;
0x000ad9b0 add r2, sp, 0x58 | r2 += var_58h;
0x000ad9b2 str r3, [sp, 0x60] | var_60h = r3;
0x000ad9b4 mov r1, fp | r1 = fp;
0x000ad9b6 str r3, [sp, 0x6c] | var_6ch = r3;
0x000ad9b8 strd r3, r3, [sp, 0x64] | __asm ("strd r3, r3, [var_64h]");
0x000ad9bc movs r3, 0xd | r3 = 0xd;
0x000ad9be ldr r0, [sp, 0x28] | r0 = x;
0x000ad9c0 strb.w r3, [sp, 0x58] | var_58h = r3;
0x000ad9c4 str r4, [sp, 0x5c] | var_5ch = r4;
0x000ad9c6 str r2, [sp, 0x2c] | var_2ch = r2;
0x000ad9c8 bl 0x82d20 | fcn_00082d20 (r0, r1, r2, r3, r4, r5, r6);
0x000ad9cc ldr r3, [sp, 0x28] | r3 = x;
0x000ad9ce ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000ad9d0 cmp r3, 0 |
| if (r3 != 0) {
0x000ad9d2 bne.w 0xad3b4 | goto label_6;
| }
0x000ad9d6 mov r1, r4 | r1 = r4;
0x000ad9d8 mov r0, r6 | r0 = r6;
0x000ad9da bl 0x42e6c | fcn_00042e6c (r0, r1, r2);
0x000ad9dc invalid |
0x000ad9e0 cmp.w r8, 0 |
0x000ad9e4 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x000ad9e6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000ad9ea it lt |
| if (r8 >= 0) {
0x000ad9ec addlt r8, r2, -1 | r8 = r2 + -1;
| }
0x000ad9f0 cmp r3, 0 |
| if (r3 != 0) {
0x000ad9f2 bne.w 0xadfba | goto label_88;
| }
0x000ad9f6 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x000ad9f8 add.w r8, r8, r8, lsl 1 | r8 += (r8 << 1);
0x000ad9fc add.w r3, r3, r8, lsl 3 | r3 += (r8 << 3);
| label_34:
0x000ada00 add.w r4, sb, 2 | r4 = sb + 2;
0x000ada04 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000ada06 mov.w sb, 0 | sb = 0;
0x000ada0a ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000ada0c mov r3, sb | r3 = sb;
0x000ada0e movs r1, 0xb | r1 = 0xb;
0x000ada10 mov r0, r6 | r0 = r6;
0x000ada12 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ada16 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ada1a ldrd r2, r3, [sp, 0x64] | __asm ("ldrd r2, r3, [var_64h]");
0x000ada1e mov r8, r0 | r8 = r0;
0x000ada20 movs r1, 0x61 | r1 = 0x61;
0x000ada22 mov r0, r6 | r0 = r6;
0x000ada24 str r4, [sp] | *(sp) = r4;
0x000ada26 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ada28 strh sb, [sb], -9 | *(sb) = sb;
| sb += -9;
0x000ada2c mov r2, sb | r2 = sb;
0x000ada2e mov r0, r6 | r0 = r6;
0x000ada30 bl 0x438fc | fcn_000438fc (r0, r1, r2);
0x000ada34 mov r3, r5 | r3 = r5;
0x000ada36 movs r2, 1 | r2 = 1;
0x000ada38 movs r1, 0x7f | r1 = 0x7f;
0x000ada3a mov r0, r6 | r0 = r6;
0x000ada3c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ada40 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ada44 mov r3, r4 | r3 = r4;
0x000ada46 movs r2, 1 | r2 = 1;
0x000ada48 movs r1, 0x80 | r1 = 0x80;
0x000ada4a mov r0, r6 | r0 = r6;
0x000ada4c str r5, [sp] | *(sp) = r5;
0x000ada4e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ada52 mov r1, r8 | r1 = r8;
0x000ada54 mov r0, r6 | r0 = r6;
0x000ada56 bl 0x42960 | fcn_00042960 (r0, r1, r2);
0x000ada5a ldr r3, [r6] | r3 = *(r6);
0x000ada5c cmp r8, sb |
0x000ada5e ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x000ada60 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000ada64 it lt |
| if (r8 >= sb) {
0x000ada66 addlt r8, r2, -1 | r8 = r2 + -1;
| }
0x000ada6a cmp r3, 0 |
| if (r3 != 0) {
0x000ada6c bne.w 0xadfb2 | goto label_89;
| }
0x000ada70 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x000ada72 add.w r8, r8, r8, lsl 1 | r8 += (r8 << 1);
0x000ada76 add.w r3, r3, r8, lsl 3 | r3 += (r8 << 3);
| label_33:
0x000ada7a mov.w r8, 0 | r8 = 0;
0x000ada7e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000ada80 movs r1, 0x7a | r1 = 0x7a;
0x000ada82 mov r3, r8 | r3 = r8;
0x000ada84 movs r2, 1 | r2 = 1;
0x000ada86 mov r0, r6 | r0 = r6;
0x000ada88 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000ada8c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ada90 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ada92 ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
0x000ada96 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000ada98 cmp r1, r8 |
| if (r1 <= r8) {
0x000ada9a ble.w 0xadffc | goto label_90;
| }
0x000ada9e add.w ip, r3, 0xc |
0x000adaa2 movs r3, 0xc | r3 = 0xc;
0x000adaa4 smlabb lr, r1, r3, ip | __asm ("smlabb lr, r1, r3, ip");
| label_7:
0x000adaa8 ldr r0, [ip, -0xc] | r0 = *((ip - 0xc));
0x000adaac ldrb r3, [r0] | r3 = *(r0);
0x000adaae cmp r3, 0 |
| if (r3 == 0) {
0x000adab0 beq.w 0xadf76 | goto label_91;
| }
0x000adab4 movs r4, 0 | r4 = 0;
| do {
0x000adab6 cmp r3, 0x22 |
0x000adab8 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000adabc ite eq |
| if (r3 != 0x22) {
0x000adabe addeq r2, r4, 1 | r2 = r4 + 1;
| }
| if (r3 == 0x22) {
0x000adac0 movne r2, r4 | r2 = r4;
| }
0x000adac2 adds r4, r2, 1 | r4 = r2 + 1;
0x000adac4 cmp r3, 0 |
0x000adac6 bne 0xadab6 |
| } while (r3 != 0);
0x000adac8 adds r2, 8 | r2 += 8;
| label_28:
0x000adaca add.w ip, ip, 0xc |
0x000adace add r8, r2 | r8 += r2;
0x000adad0 cmp ip, lr |
| if (ip != lr) {
0x000adad2 bne 0xadaa8 | goto label_7;
| }
0x000adad4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000adad6 ldr r0, [r3] | r0 = *(r3);
0x000adad8 ldrb r2, [r0] | r2 = *(r0);
0x000adada cmp r2, 0 |
| if (r2 == 0) {
0x000adadc beq.w 0xae03a | goto label_92;
| }
| label_39:
0x000adae0 movs r3, 0 | r3 = 0;
| do {
0x000adae2 cmp r2, 0x22 |
0x000adae4 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x000adae8 it eq |
| if (r2 != 0x22) {
0x000adaea addeq r3, 1 | r3++;
| }
0x000adaec adds r3, 1 | r3++;
0x000adaee cmp r2, 0 |
0x000adaf0 bne 0xadae2 |
| } while (r2 != 0);
| label_40:
0x000adaf2 adds r3, 2 | r3 += 2;
0x000adaf4 add.w r2, r3, r8 | r2 = r3 + r8;
0x000adaf8 cmp r2, 0x31 |
| if (r2 <= 0x31) {
0x000adafa ble.w 0xadfc2 | goto label_93;
| }
0x000adafe ldr r3, [pc, 0x33c] |
0x000adb00 add r3, pc | r3 = 0x15b942;
0x000adb02 str r3, [sp, 0x44] | var_44h = r3;
0x000adb04 ldr r3, [pc, 0x338] |
0x000adb06 add r3, pc | r3 = 0x15b94a;
0x000adb08 str r3, [sp, 0x3c] | var_3ch = r3;
0x000adb0a ldr r3, [pc, 0x338] |
0x000adb0c add r3, pc | r3 = 0x15b956;
| label_35:
0x000adb0e movs r0, 6 | r0 = 6;
0x000adb10 str r3, [sp, 0x48] | var_48h = r3;
0x000adb12 mla r2, r1, r0, r2 | __asm ("mla r2, r1, r0, r2");
0x000adb16 add.w r3, r2, 0x23 | r3 = r2 + 0x23;
0x000adb1a asrs r1, r3, 0x1f | r1 = r3 >> 0x1f;
0x000adb1c mov r0, r3 | r0 = r3;
0x000adb1e str r3, [sp, 0x40] | var_40h = r3;
0x000adb20 bl 0x28c3c | fcn_00028c3c (r0);
0x000adb24 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000adb26 mov sb, r0 | sb = r0;
0x000adb28 cmp r0, 0 |
| if (r0 == 0) {
0x000adb2a beq.w 0xae01c | goto label_94;
| }
0x000adb2e ldr r2, [pc, 0x318] |
0x000adb30 mov r1, r0 | r1 = r0;
0x000adb32 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000adb34 str r3, [sp, 0x54] | var_54h = r3;
0x000adb36 add r2, pc | r2 = 0x15b984;
0x000adb38 bl 0x56488 | fcn_00056488 (r0, r1);
0x000adb3c mov r0, sb | r0 = sb;
0x000adb3e blx 0x65dc | strcmp (r0, r1);
0x000adb42 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000adb44 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x000adb48 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000adb4a str r0, [sp, 0x58] | var_58h = r0;
0x000adb4c mov r0, sb | r0 = sb;
0x000adb4e ldr r2, [r4] | r2 = *(r4);
0x000adb50 bl 0x28928 | fcn_00028928 (r0, r1, r2);
0x000adb54 ldr r2, [sp, 0x58] | r2 = var_58h;
0x000adb56 movs r1, 0x28 | r1 = 0x28;
0x000adb58 mov r3, r4 | r3 = r4;
0x000adb5a strb.w r1, [sb, r2] | *((sb + r2)) = r1;
0x000adb5e add.w r8, r2, 1 | r8 = r2 + 1;
0x000adb60 lsrs r1, r0, 0x20 | r1 = r0 >> 0x20;
0x000adb62 ldrsh.w r1, [r4, 0x22] | r1 = *((r4 + 0x22));
0x000adb64 asrs r2, r4, 0x20 | r2 = r4 >> 0x20;
0x000adb66 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000adb68 str.w r8, [sp, 0x58] | __asm ("str.w r8, [var_58h]");
0x000adb6c cmp r1, 0 |
| if (r1 <= 0) {
0x000adb6e ble.w 0xadf94 | goto label_95;
| }
0x000adb70 strh r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
0x000adb72 ldr r1, [pc, 0x2d8] |
0x000adb74 add.w r5, r2, 0xc | r5 = r2 + 0xc;
0x000adb78 strd sl, r6, [sp, 0x48] | __asm ("strd sl, r6, [var_48h]");
0x000adb7c mov r6, r3 | r6 = r3;
0x000adb7e ldr r3, [sp, 0x54] | r3 = var_54h;
0x000adb80 movs r4, 0 | r4 = 0;
0x000adb82 add r1, pc | r1 = 0x15b9d4;
0x000adb84 str r7, [sp, 0x50] | var_50h = r7;
0x000adb86 str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x000adb8a mov sl, r1 | sl = r1;
0x000adb8c ldr r7, [sp, 0x40] | r7 = var_40h;
0x000adb8e mov r2, r3 | r2 = r3;
0x000adb90 mov fp, r8 |
0x000adb92 b 0xadbc2 |
| while (fp != 0) {
0x000adb94 mov r0, fp | r0 = fp;
0x000adb96 blx 0x65dc | strcmp (r0, r1);
0x000adb98 stc p0, c15, [r2, -0x80]! | __asm ("stc p0, c15, [r2, -0x80]!");
0x000adb9a bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000adb9e mov r3, r2 | r3 = r2;
| label_8:
0x000adba0 ldr r0, [sp, 0x58] | r0 = var_58h;
0x000adba2 mov r1, fp | r1 = fp;
0x000adba4 adds r4, 1 | r4++;
0x000adba6 adds r5, 0xc | r5 += 0xc;
0x000adba8 add.w fp, r0, r3 |
0x000adbac add r0, sb | r0 += sb;
0x000adbae blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000adbb2 ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x000adbb6 str.w fp, [sp, 0x58] | __asm ("str.w fp, [var_58h]");
0x000adbba cmp r4, r2 |
| if (r4 >= r2) {
0x000adbbc bge.w 0xadf88 | goto label_96;
| }
0x000adbc0 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000adbc2 add.w r8, sb, fp | r8 = sb + fp;
0x000adbc6 sub.w r0, r7, fp | r0 = r7 - fp;
0x000adbca mov r1, r8 | r1 = r8;
0x000adbcc bl 0x56488 | fcn_00056488 (r0, r1);
0x000adbd0 mov r0, r8 | r0 = r8;
0x000adbd2 blx 0x65dc | r0 = strcmp (r0, r1);
0x000adbd6 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000adbda ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000adbdc add r2, fp | r2 += fp;
0x000adbde mov r0, sb | r0 = sb;
0x000adbe0 str r2, [sp, 0x58] | var_58h = r2;
0x000adbe2 ldr r2, [r5, -0xc] | r2 = *((r5 - 0xc));
0x000adbe6 bl 0x28928 | fcn_00028928 (r0, r1, r2);
0x000adbea ldrb r3, [r5, -0x7] | r3 = *((r5 - 0x7));
0x000adbee add.w r3, sl, r3, lsl 2 | r3 = sl + (r3 << 2);
0x000adbf2 ldr.w fp, [r3, 0x22c] | fp = *((r3 + 0x22c));
0x000adbf6 cmp.w fp, 0 |
0x000adbfa bne 0xadb94 |
| }
0x000adbfc mov r3, fp | r3 = fp;
0x000adbfe mov r2, fp | r2 = fp;
0x000adc00 b 0xadba0 | goto label_8;
| label_41:
0x000adc02 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000adc04 mov r0, sl | r0 = sl;
0x000adc06 ldr r1, [r4] | r1 = *(r4);
0x000adc08 bl 0x57238 | r0 = fcn_00057238 (r0, r1);
| if (r0 != 0) {
0x000adc0c cbz r0, 0xadc16 |
0x000adc0e ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000adc10 orr r3, r3, 0x1000 | r3 |= 0x1000;
0x000adc14 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| }
0x000adc16 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x000adc1a cmp r3, 0 |
| if (r3 == 0) {
0x000adc1c beq.w 0xad3e4 | goto label_9;
| }
0x000adc20 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000adc22 ldrb.w r2, [r3, 0x2b] | r2 = *((r3 + 0x2b));
0x000adc26 ldr.w r3, [sl, 0xac] | r3 = *((sl + 0xac));
0x000adc2a cmp r2, 0 |
| if (r2 == 0) {
0x000adc2c beq.w 0xad3d4 | goto label_10;
| }
0x000adc2e add r3, sp, 0x348 | r3 = sp + 0x348;
0x000adc30 cmp r3, 0 |
| if (r3 != 0) {
0x000adc32 bne.w 0xad2ba | goto label_11;
| }
0x000adc36 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000adc38 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x000adc3a b.w 0xad3e4 | goto label_9;
| label_80:
0x000adc3e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000adc40 mov r0, sl | r0 = sl;
0x000adc42 movs r2, 0x34 | r2 = 0x34;
0x000adc44 add r3, r6 | r3 += r6;
0x000adc46 str r3, [sp, 0x38] | var_38h = r3;
0x000adc48 movs r3, 0 | r3 = 0;
0x000adc4a bl 0x380e8 | fcn_000380e8 (r0, r1, r2);
0x000adc4c invalid |
| if (r0 != 0) {
0x000adc50 cbz r0, 0xadc6e |
0x000adc52 movs r2, 0x33 | r2 = 0x33;
0x000adc54 movs r1, 0 | r1 = 0;
0x000adc56 adds r0, 1 | r0++;
0x000adc58 str r3, [sp, 0x3c] | var_3ch = r3;
0x000adc5a blx 0x62ec | fcn_000062ec ();
0x000adc5e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000adc60 movs r2, 0x79 | r2 = 0x79;
0x000adc62 strb r2, [r3] | *(r3) = r2;
0x000adc64 movw r2, 0xffff | r2 = 0xffff;
0x000adc68 strh r2, [r3, 0x22] | *((r3 + 0x22)) = r2;
0x000adc6a movs r2, 1 | r2 = 1;
0x000adc6c str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| }
0x000adc6e ldr r2, [sp, 0x38] | r2 = var_38h;
0x000adc70 mov r1, r4 | r1 = r4;
0x000adc72 ldr r0, [sp, 0x28] | r0 = x;
0x000adc74 bl 0x4354c | fcn_0004354c (r0, r1, r2, r3);
0x000adc78 b 0xad82e | goto label_12;
| label_79:
0x000adc7a movs r3, 0 | r3 = 0;
0x000adc7c b 0xad81c | goto label_13;
| label_45:
0x000adc7e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000adc80 ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x000adc82 mov r2, r3 | r2 = r3;
0x000adc84 ldr r1, [r3] | r1 = *(r3);
0x000adc86 adds r0, 8 | r0 += 8;
0x000adc88 bl 0x2df94 | r0 = fcn_0002df94 (r0, r1, r2, r3, r4);
0x000adc8c cmp r0, 0 |
| if (r0 != 0) {
0x000adc8e bne.w 0xadee8 | goto label_97;
| }
0x000adc92 ldr r3, [sp, 0x28] | r3 = x;
0x000adc94 ldr r1, [pc, 0x1b8] |
0x000adc96 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000adc98 str.w r0, [r3, 0xec] | __asm ("str.w r0, [r3, 0xec]");
0x000adc9c ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x000adca0 add r1, pc | r1 = 0x15baf4;
0x000adca2 ldr r0, [r4] | r0 = *(r4);
0x000adca4 orr r3, r3, 1 | r3 |= 1;
0x000adca8 str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
0x000adcac blx 0x6634 | r0 = fcn_00006634 ();
0x000adcb0 cmp r0, 0 |
| if (r0 != 0) {
0x000adcb2 bne.w 0xad3ac | goto label_14;
| }
0x000adcb4 add r3, sp, 0x1ec | r3 = sp + 0x1ec;
0x000adcb6 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000adcb8 str r4, [r3, 0x48] | *((r3 + 0x48)) = r4;
0x000adcba cmp.w fp, 0 |
| if (fp != 0) {
0x000adcbe bne.w 0xad3b4 | goto label_6;
| }
0x000adcc2 b 0xadd1a | goto label_46;
| label_82:
0x000adcc4 cmp r2, 2 |
0x000adcc6 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 2) {
0x000adcca blo.w 0xad8a4 | goto label_15;
| }
0x000adcce adds r2, r2, r2 | r2 += r2;
0x000adcd0 adc.w r1, r3, r3 | __asm ("adc.w r1, r3, r3");
0x000adcd4 cmp r2, 8 |
0x000adcd6 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r2 >= 8) {
0x000adcda bhs.w 0xadfe6 | goto label_98;
| }
0x000adcde mov r2, r3 | r2 = r3;
0x000adce0 movs r3, 0x14 | r3 = 0x14;
0x000adce2 b 0xad88c | goto label_16;
| label_49:
0x000adce4 ldr r2, [pc, 0x16c] |
0x000adce6 ldr r3, [pc, 0x120] | r3 = *(0xade0a);
0x000adce8 add r2, pc | r2 = 0x15bb40;
0x000adcea ldr r3, [r2, r3] | r3 = imp.atan;
0x000adcec ldr r2, [r3] | r2 = imp.atan;
0x000adcee ldr r3, [sp, 0x74] | r3 = var_74h;
0x000adcf0 eors r2, r3 | r2 ^= r3;
0x000adcf2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000adcf6 bne.w 0xae03e | goto label_42;
| }
0x000adcfa ldr r1, [pc, 0x15c] |
0x000adcfc mov r3, r6 | r3 = r6;
0x000adcfe ldr r0, [sp, 0x28] | r0 = x;
0x000add00 mov r2, r7 | r2 = r7;
0x000add02 add r1, pc | r1 = 0x15bb60;
0x000add04 add sp, 0x7c |
0x000add06 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000add0a b.w 0x37f78 | void (*0x37f78)() ();
| label_85:
0x000add0e ldr r3, [pc, 0x14c] |
0x000add10 ldr r2, [pc, 0x14c] |
0x000add12 add r3, pc | r3 = 0x15bb74;
0x000add14 add r2, pc | r2 = 0x15bb78;
0x000add16 str r3, [sp, 0x38] | var_38h = r3;
0x000add18 b 0xad8f2 | goto label_17;
| label_46:
0x000add1a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000add1c ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x000add20 cmp r3, 0 |
| if (r3 != 0) {
0x000add22 bne.w 0xad3b4 | goto label_6;
| }
0x000add26 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000add28 ldr r3, [r3] | r3 = *(r3);
0x000add2a cmp r3, 0 |
| if (r3 == 0) {
0x000add2c beq.w 0xadfac | goto label_99;
| }
| label_32:
0x000add30 ldr r2, [sp, 0x28] | r2 = x;
0x000add32 ldr.w r2, [r2, 0xbc] | r2 = *((r2 + 0xbc));
0x000add36 subs r3, r3, r2 | r3 -= r2;
0x000add38 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000add3a adds r3, 0xd | r3 += 0xd;
0x000add3c str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000add3e b.w 0xad3b4 | goto label_6;
| label_81:
0x000add42 cmp r0, 0 |
0x000add44 it ge |
| if (r0 >= 0) {
0x000add46 movge r3, 0 | r3 = 0;
| goto label_100;
| }
| if (r0 >= 0) {
| label_100:
0x000add48 bge.w 0xad8a4 | goto label_15;
| }
0x000add4c movs r3, 0x1e | r3 = 0x1e;
0x000add4e movs r2, 8 | r2 = 8;
0x000add50 b 0xad88c | goto label_16;
| label_77:
0x000add52 ldr r2, [pc, 0x110] |
0x000add54 ldr r3, [pc, 0xb0] | r3 = *(0xade08);
0x000add56 add r2, pc | r2 = 0x15bbc0;
0x000add58 ldr r3, [r2, r3] | r3 = imp.atan;
0x000add5a ldr r2, [r3] | r2 = imp.atan;
0x000add5c ldr r3, [sp, 0x74] | r3 = var_74h;
0x000add5e eors r2, r3 | r2 ^= r3;
0x000add60 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000add64 bne.w 0xae03e | goto label_42;
| }
0x000add66 strh r3, [r5, 0xa] | *((r5 + 0xa)) = r3;
0x000add68 ldr r1, [pc, 0xfc] |
0x000add6a add r1, pc | r1 = 0x15bbd6;
0x000add6c b.w 0xad2da | goto label_18;
| label_69:
0x000add70 add.w r2, sb, r8 | r2 = sb + r8;
0x000add74 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000add76 mov r1, r5 | r1 = r5;
0x000add78 bl 0x3ad74 | r0 = fcn_0003ad74 (r0, r1, r2);
0x000add7c mov r8, r0 | r8 = r0;
0x000add7e cmp r0, 0 |
| if (r0 != 0) {
0x000add80 bne.w 0xad76c | goto label_19;
| }
0x000add84 ldrh r1, [r5, 0x32] | r1 = *((r5 + 0x32));
0x000add86 mov r4, r1 | r4 = r1;
0x000add88 b 0xadd8c |
| while (r8 != r7) {
0x000add8a ldrh r1, [r5, 0x32] | r1 = *((r5 + 0x32));
0x000add8c mov r3, r8 | r3 = r8;
0x000add8e mov r2, r6 | r2 = r6;
0x000add90 mov r0, r5 | r0 = r5;
0x000add92 bl 0x2f508 | r0 = fcn_0002f508 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x000add96 cbnz r0, 0xaddc6 |
0x000add98 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000add9a ldrsh.w r1, [r3, r8, lsl 1] | offset_10 = r8 << 1;
| r1 = *((r3 + offset_10));
0x000add9e ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x000adda0 ldr.w r2, [r3, r8, lsl 2] | offset_11 = r8 << 2;
| r2 = *((r3 + offset_11));
0x000adda4 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000adda6 strh.w r1, [r3, r4, lsl 1] | offset_12 = r4 << 1;
| *((r3 + offset_12)) = r1;
0x000addaa ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000addac str.w r2, [r3, r4, lsl 2] | __asm ("str.w r2, [r3, r4, lsl 2]");
0x000addae movs r0, 0x24 | r0 = 0x24;
0x000addb0 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000addb2 ldrb.w r3, [r3, r8] | r3 = *((r3 + r8));
| if (r3 != 0) {
0x000addb6 cbz r3, 0xaddc4 |
0x000addb8 ldrb.w r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000addbc orr r3, r3, 2 | r3 |= 2;
0x000addc0 strb.w r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
| }
0x000addc4 adds r4, 1 | r4++;
| }
0x000addc6 add.w r8, r8, 1 | r8++;
0x000addca cmp r8, r7 |
0x000addcc bne 0xadd8a |
| }
0x000addce b 0xad6b2 | goto label_20;
| label_84:
0x000addd0 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x000addd2 cmp r3, 0 |
| if (r3 == 0) {
0x000addd4 beq.w 0xadf56 | goto label_101;
| }
| label_26:
0x000addd8 ldr r0, [sp, 0x28] | r0 = x;
0x000addda bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000addde mov r6, r0 | r6 = r0;
0x000adde0 cmp r0, 0 |
| if (r0 != 0) {
0x000adde2 bne.w 0xad8ca | goto label_21;
| }
0x000adde6 b.w 0xad3b4 | goto label_6;
| label_60:
0x000addea ldr r3, [sp, 0x38] | r3 = var_38h;
0x000addec uxth r0, r7 | r0 = (int16_t) r7;
0x000addee mov r7, r0 | r7 = r0;
0x000addf0 ldrb.w r1, [r3, 0xb2] | r1 = *((r3 + 0xb2));
0x000addf4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000addf6 and r1, r1, 2 | r1 &= 2;
0x000addfa ldr.w sb, [r3, 8] | sb = *((r3 + 8));
| label_36:
0x000addfe strh r0, [r6, 0x32] | *((r6 + 0x32)) = r0;
0x000ade00 b 0xad642 | goto label_22;
| label_51:
0x000ade6c ldr r2, [pc, 0x1d8] |
0x000ade6e ldr r3, [pc, 0x1dc] | r3 = *(0xae04e);
0x000ade70 add r2, pc | r2 = 0x15bebc;
0x000ade72 ldr r3, [r2, r3] | r3 = imp.atan;
0x000ade74 ldr r2, [r3] | r2 = imp.atan;
0x000ade76 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000ade78 eors r2, r3 | r2 ^= r3;
0x000ade7a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ade7e bne.w 0xae03e | goto label_42;
| }
0x000ade82 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ade84 ldr r1, [pc, 0x1c8] |
0x000ade86 ldr r0, [sp, 0x28] | r0 = x;
0x000ade88 ldr r2, [r3] | r2 = *(r3);
0x000ade8a add r1, pc | r1 = 0x15bede;
0x000ade8c add sp, 0x7c |
0x000ade8e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ade92 b.w 0x37f78 | void (*0x37f78)() ();
| label_50:
0x000ade96 ldr r2, [pc, 0x1bc] |
0x000ade98 ldr r3, [pc, 0x1b0] | r3 = *(0xae04c);
0x000ade9a add r2, pc | r2 = 0x15bef4;
0x000ade9c ldr r3, [r2, r3] | r3 = imp.atan;
0x000ade9e ldr r2, [r3] | r2 = imp.atan;
0x000adea0 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000adea2 eors r2, r3 | r2 ^= r3;
0x000adea4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000adea8 bne.w 0xae03e | goto label_42;
| }
0x000adeac ldr r1, [pc, 0x1a8] |
0x000adeae add r1, pc | r1 = 0x15bf0a;
0x000adeb0 b.w 0xad2da | goto label_18;
| label_55:
0x000adeb4 ldr r2, [r4] | r2 = *(r4);
0x000adeb6 it lt |
| if (r2 >= r3) {
0x000adeb8 ldrlt r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
| }
0x000adeba ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x000adebe it lt |
| if (r2 >= r3) {
0x000adec0 addlt r3, r3, -1 | r3 += -1;
| }
0x000adec4 cmp r2, 0 |
| if (r2 != 0) {
0x000adec6 bne 0xadf66 | goto label_102;
| }
0x000adec8 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x000adeca add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000adece add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
| label_27:
0x000aded2 movs r2, 2 | r2 = 2;
0x000aded4 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000aded6 b.w 0xad500 | goto label_23;
| label_86:
0x000adeda ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x000adedc movs r2, 1 | r2 = 1;
0x000adede str r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
0x000adee0 add r3, r2 | r3 += r2;
0x000adee2 str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
0x000adee4 b.w 0xad3b4 | goto label_6;
0x000adee6 rev16 r6, r4 | __asm ("rev16 r6, r4");
| label_97:
0x000adee8 ldrb.w r3, [sl, 0x57] | r3 = *((sl + 0x57));
0x000adeec cmp r3, 0 |
| if (r3 != 0) {
0x000adeee bne.w 0xad3b4 | goto label_6;
| }
0x000adef2 ldrb.w r3, [sl, 0x58] | r3 = *((sl + 0x58));
0x000adef6 cmp r3, 0 |
| if (r3 != 0) {
0x000adef8 bne.w 0xad3b4 | goto label_6;
| }
0x000adefc ldr r2, [pc, 0x15c] |
0x000adefe ldr r3, [pc, 0x14c] | r3 = *(0xae04e);
0x000adf00 add r2, pc | r2 = 0x15bf60;
0x000adf02 ldr r3, [r2, r3] | r3 = imp.atan;
0x000adf04 ldr r2, [r3] | r2 = imp.atan;
0x000adf06 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000adf08 eors r2, r3 | r2 ^= r3;
0x000adf0a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000adf0e bne.w 0xae03e | goto label_42;
| }
0x000adf12 mov r0, sl | r0 = sl;
0x000adf14 add sp, 0x7c |
0x000adf16 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000adf1a b.w 0x38024 | void (*0x38024)() ();
| label_66:
0x000adf1e ldr r1, [r4] | r1 = *(r4);
0x000adf20 it lt |
| if (r2 >= r3) {
0x000adf22 ldrlt r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
| }
0x000adf24 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x000adf28 it lt |
| if (r2 >= r3) {
0x000adf2a addlt r2, r2, -1 | r2 += -1;
| }
0x000adf2c adds r2, 0xff | r2 += 0xff;
| if (r1 != 0) {
0x000adf2e cbnz r1, 0xadf6e | goto label_103;
| }
0x000adf30 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x000adf32 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000adf36 add.w r2, r1, r2, lsl 3 | r2 = r1 + (r2 << 3);
| do {
0x000adf3a movs r1, 8 | r1 = 8;
0x000adf3c strb r1, [r2] | *(r2) = r1;
0x000adf3e b.w 0xad666 | goto label_24;
| label_61:
0x000adf42 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000adf44 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000adf46 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000adf48 bic r3, r3, 0x80 | r3 = BIT_MASK (r3, 0x80);
0x000adf4c str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x000adf4e b 0xad76c | goto label_19;
| label_43:
0x000adf50 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000adf52 b.w 0xad2f4 | goto label_25;
| label_101:
0x000adf56 ldr r2, [sp, 0x28] | r2 = x;
0x000adf58 ldr r3, [r2] | r3 = *(r2);
0x000adf5a ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000adf5c lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
0x000adf5e itt pl |
| if (r0 < r3) {
0x000adf60 movpl r3, 1 | r3 = 1;
| }
| if (r0 < r3) {
0x000adf62 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x000adf64 b 0xaddd8 | goto label_26;
| label_102:
0x000adf66 ldr r3, [pc, 0xf8] |
0x000adf68 add r3, pc | r3 = 0x15bfce;
0x000adf6a adds r3, 4 | r3 += 4;
0x000adf6c b 0xaded2 | goto label_27;
| label_103:
0x000adf6e ldr r2, [pc, 0xf4] |
0x000adf70 add r2, pc | r2 = 0x15bfda;
0x000adf72 adds r2, 4 | r2 += 4;
0x000adf74 b 0xadf3a |
| } while (1);
| label_91:
0x000adf76 movs r2, 7 | r2 = 7;
0x000adf78 b 0xadaca | goto label_28;
| label_87:
0x000adf7a ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x000adf7c subs r3, 1 | r3--;
0x000adf7e str r3, [r1, 0x18] | *((r1 + 0x18)) = r3;
0x000adf80 cmp r3, 0 |
| if (r3 == 0) {
0x000adf82 beq.w 0xad9a8 | goto label_29;
| }
0x000adf86 b 0xad9ae | goto label_30;
| label_96:
0x000adf88 mov r8, fp | r8 = fp;
0x000adf8a ldrd sl, r6, [sp, 0x48] | __asm ("ldrd sl, r6, [var_48h]");
0x000adf8e ldr r7, [sp, 0x50] | r7 = var_50h;
0x000adf90 ldr.w fp, [sp, 0x54] | fp = var_54h;
| label_95:
0x000adf94 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_44h]");
0x000adf98 add.w r1, sb, r8 | r1 = sb + r8;
0x000adf9c sub.w r0, r2, r8 | r0 = r2 - r8;
0x000adfa0 ldr r2, [pc, 0xc4] |
0x000adfa2 add r2, pc | r2 = 0x15c00e;
0x000adfa4 bl 0x56488 | fcn_00056488 (r0, r1);
0x000adfa8 b.w 0xad31e | goto label_31;
| label_99:
0x000adfac ldr r3, [sp, 0x34] | r3 = var_34h;
0x000adfae ldr r3, [r3] | r3 = *(r3);
0x000adfb0 b 0xadd30 | goto label_32;
| label_89:
0x000adfb2 ldr r3, [pc, 0xb8] |
0x000adfb4 add r3, pc | r3 = 0x15c026;
0x000adfb6 adds r3, 4 | r3 += 4;
0x000adfb8 b 0xada7a | goto label_33;
| label_88:
0x000adfba ldr r3, [pc, 0xb4] |
0x000adfbc add r3, pc | r3 = 0x15c032;
0x000adfbe adds r3, 4 | r3 += 4;
0x000adfc0 b 0xada00 | goto label_34;
| label_93:
0x000adfc2 ldr r3, [pc, 0xb0] |
0x000adfc4 add r3, pc | r3 = 0x15c03e;
0x000adfc6 str r3, [sp, 0x44] | var_44h = r3;
0x000adfc8 ldr r3, [pc, 0xac] |
0x000adfca add r3, pc | r3 = 0x15c046;
0x000adfcc str r3, [sp, 0x3c] | var_3ch = r3;
0x000adfce ldr r3, [pc, 0xac] |
0x000adfd0 add r3, pc | r3 = 0x15c052;
0x000adfd2 b 0xadb0e | goto label_35;
| label_59:
0x000adfd4 movs r7, 1 | r7 = 1;
0x000adfd6 mov r0, r7 | r0 = r7;
0x000adfd8 b 0xaddfe | goto label_36;
| label_74:
0x000adfda mov.w r7, 0x8000 |
0x000adfde movt r7, 0xffff | r7 = 0x-8000;
0x000adfe2 b.w 0xad78c | goto label_37;
| label_98:
0x000adfe6 movs r3, 0x1e | r3 = 0x1e;
0x000adfe8 b 0xad88c | goto label_16;
| label_44:
0x000adfea ldr r1, [pc, 0x94] |
0x000adfec ldr.w r2, [r3, r8] | r2 = *((r3 + r8));
0x000adfee movs r0, 8 | r0 = 8;
0x000adff0 ldr r0, [sp, 0x28] | r0 = x;
0x000adff2 add r1, pc | r1 = 0x15c078;
0x000adff4 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000adff8 b.w 0xad386 | goto label_38;
| label_90:
0x000adffc ldr r3, [sp, 0x24] | r3 = var_24h;
0x000adffe ldr r0, [r3] | r0 = *(r3);
0x000ae000 ldrb r2, [r0] | r2 = *(r0);
0x000ae002 cmp r2, 0 |
| if (r2 != 0) {
0x000ae004 bne.w 0xadae0 | goto label_39;
| }
0x000ae008 ldr r3, [pc, 0x78] |
0x000ae00a movs r2, 2 | r2 = 2;
0x000ae00c add r3, pc | r3 = 0x15c094;
0x000ae00e str r3, [sp, 0x44] | var_44h = r3;
0x000ae010 ldr r3, [pc, 0x74] |
0x000ae012 add r3, pc | r3 = 0x15c09e;
0x000ae014 str r3, [sp, 0x3c] | var_3ch = r3;
0x000ae016 ldr r3, [pc, 0x74] |
0x000ae018 add r3, pc | r3 = 0x15c0aa;
0x000ae01a b 0xadb0e | goto label_35;
| label_94:
0x000ae01c ldrb.w r3, [sl, 0x57] | r3 = *((sl + 0x57));
0x000ae020 cmp r3, 0 |
| if (r3 != 0) {
0x000ae022 bne.w 0xad31e | goto label_31;
| }
0x000ae026 ldrb.w r3, [sl, 0x58] | r3 = *((sl + 0x58));
0x000ae02a cmp r3, 0 |
| if (r3 != 0) {
0x000ae02c bne.w 0xad31e | goto label_31;
| }
0x000ae030 mov r0, sl | r0 = sl;
0x000ae032 bl 0x38024 | fcn_00038024 (r0);
0x000ae036 b.w 0xad31e | goto label_31;
| label_92:
0x000ae03a mov r3, r2 | r3 = r2;
0x000ae03c b 0xadaf2 | goto label_40;
| label_42:
0x000ae03e blx 0x6430 | fcn_00006430 ();
| label_58:
0x000ae042 movs r3, 0 | r3 = 0;
0x000ae044 ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x000ae046 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xae2dc */
| #include <stdint.h>
|
; (fcn) fcn.000ae2dc () | void fcn_000ae2dc (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000ae2dc svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000ae2e0 mov r6, r1 | r6 = r1;
0x000ae2e2 ldr r7, [r0] | r7 = *(r0);
0x000ae2e4 sub sp, 0x14 |
0x000ae2e6 ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x000ae2e8 adds r0, 0x57 | r0 += 0x57;
0x000ae2ea cbz r3, 0xae2fa |
| while (r0 != 0) {
| label_0:
0x000ae2ec mov r1, r6 | r1 = r6;
0x000ae2ee mov r0, r7 | r0 = r7;
0x000ae2f0 add sp, 0x14 |
0x000ae2f2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ae2f6 b.w 0x30a7c | void (*0x30a7c)() ();
0x000ae2fa mov r5, r0 | r5 = r0;
0x000ae2fc mov sb, r2 | sb = r2;
0x000ae2fe bl 0x97d18 | r0 = fcn_00097d18 (r0);
0x000ae302 mov r4, r0 | r4 = r0;
0x000ae304 cmp r0, 0 |
0x000ae306 bne 0xae2ec |
| }
0x000ae308 ldrd sl, r1, [r6, 0xc] | __asm ("ldrd sl, r1, [r6, 0xc]");
0x000ae30c mov r0, r7 | r0 = r7;
0x000ae30e mov r2, sl | r2 = sl;
0x000ae310 bl 0x32fc4 | r0 = fcn_00032fc4 (r0, r1, r2, r3);
0x000ae314 mov r8, r0 | r8 = r0;
0x000ae316 cmp r0, 0 |
| if (r0 == 0) {
0x000ae318 beq 0xae412 | goto label_6;
| }
0x000ae31a ldrb.w r3, [r0, 0x37] | r3 = *((r0 + 0x37));
0x000ae31e lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 != r3) {
0x000ae320 bne.w 0xae43e | goto label_7;
| }
0x000ae324 ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x000ae326 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000ae328 ldr.w sb, [r0, 0xc] | sb = *((r0 + 0xc));
0x000ae32c cmp r1, 0 |
| if (r1 == 0) {
0x000ae32e beq.w 0xae472 | goto label_8;
| }
0x000ae332 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000ae334 cmp r1, r2 |
| if (r1 == r2) {
0x000ae336 beq.w 0xae45c | goto label_9;
| }
0x000ae33a adds r3, 0x10 | r3 += 0x10;
| do {
0x000ae33c mov r0, r3 | r0 = r3;
0x000ae33e adds r4, 1 | r4++;
0x000ae340 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000ae342 adds r3, 0x10 | r3 += 0x10;
0x000ae344 cmp r1, r2 |
0x000ae346 bne 0xae33c |
| } while (r1 != r2);
0x000ae348 cmp r4, 1 |
0x000ae34a ldr.w sl, [r0] | sl = *(r0);
0x000ae34e lsl.w fp, r4, 4 |
| if (r4 == 1) {
0x000ae352 beq 0xae3f8 | goto label_10;
| }
| label_4:
0x000ae354 ldr r2, [pc, 0x150] |
0x000ae356 movs r1, 9 | r1 = 9;
0x000ae358 movs r3, 0 | r3 = 0;
0x000ae35a mov r0, r5 | r0 = r5;
0x000ae35c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000ae360 add r2, pc | r2 = 0x15c80c;
0x000ae362 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000ae366 movs r1, 0xa | r1 = 0xa;
0x000ae368 cmp r0, 0 |
| if (r0 != 0) {
0x000ae36a bne 0xae2ec | goto label_0;
| }
| label_1:
0x000ae36c ldr.w r3, [sb] | r3 = *(sb);
0x000ae370 mov r0, r5 | r0 = r5;
0x000ae372 ldr.w r2, [r8] | r2 = *(r8);
0x000ae376 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000ae37a bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000ae37e cmp r0, 0 |
| if (r0 != 0) {
0x000ae380 bne 0xae2ec | goto label_0;
| }
0x000ae382 ldr.w sb, [r5, 8] | sb = *((r5 + 8));
0x000ae386 cmp.w sb, 0 |
| if (sb == 0) {
0x000ae38a beq 0xae42c | goto label_11;
| }
| label_2:
0x000ae38c mov r2, r4 | r2 = r4;
0x000ae38e mov r0, r5 | r0 = r5;
0x000ae390 movs r1, 1 | r1 = 1;
0x000ae392 bl 0x7c974 | fcn_0007c974 (r0, r1, r2);
0x000ae396 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000ae398 mov r0, r5 | r0 = r5;
0x000ae39a ldr r1, [pc, 0x110] |
0x000ae39c ldr.w r2, [r3, fp] | r2 = *((r3 + fp));
0x000ae3a0 add r1, pc | r1 = 0x15c852;
0x000ae3a2 ldr.w r3, [r8] | r3 = *(r8);
0x000ae3a6 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000ae3aa ldr r2, [pc, 0x104] |
0x000ae3ac mov r1, r4 | r1 = r4;
0x000ae3ae ldr.w r3, [r8] | r3 = *(r8);
0x000ae3b2 mov r0, r5 | r0 = r5;
0x000ae3b4 add r2, pc | r2 = 0x15c86a;
0x000ae3b6 bl 0xab59c | fcn_000ab59c (r0, r1, r2, r3);
0x000ae3ba ldr r3, [r5] | r3 = *(r5);
0x000ae3bc mov r2, r4 | r2 = r4;
0x000ae3be movs r1, 0x64 | r1 = 0x64;
0x000ae3c0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000ae3c2 add r3, fp | r3 += fp;
0x000ae3c4 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000ae3c6 ldr r3, [r3] | r3 = *(r3);
0x000ae3c8 adds r3, 1 | r3++;
0x000ae3ca str r3, [sp] | *(sp) = r3;
0x000ae3cc movs r3, 1 | r3 = 1;
0x000ae3ce ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x000ae3d0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ae3d4 ldr.w r1, [r8, 0x2c] | r1 = *((r8 + 0x2c));
0x000ae3d8 mov r2, r4 | r2 = r4;
0x000ae3da mov r0, r5 | r0 = r5;
0x000ae3dc bl 0xab8cc | fcn_000ab8cc (r0, r1, r2);
0x000ae3e0 movs r3, 0 | r3 = 0;
0x000ae3e2 mov r2, r4 | r2 = r4;
0x000ae3e4 str r3, [sp, 8] | var_8h = r3;
0x000ae3e6 mov r0, sb | r0 = sb;
0x000ae3e8 ldr.w r1, [r8] | r1 = *(r8);
0x000ae3ec strd r3, r1, [sp] | __asm ("strd r3, r1, [sp]");
0x000ae3f0 movs r1, 0x98 | r1 = 0x98;
0x000ae3f2 bl 0x429f8 | fcn_000429f8 (r0, r1, r2, r3, r4, r5);
0x000ae3f6 b 0xae2ec | goto label_0;
| label_10:
0x000ae3f8 ldr r2, [pc, 0xb8] |
0x000ae3fa movs r1, 9 | r1 = 9;
0x000ae3fc movs r3, 0 | r3 = 0;
0x000ae3fe mov r0, r5 | r0 = r5;
0x000ae400 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000ae404 add r2, pc | r2 = 0x15c8bc;
0x000ae406 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000ae40a movs r1, 0xc | r1 = 0xc;
0x000ae40c cmp r0, 0 |
| if (r0 == 0) {
0x000ae40e beq 0xae36c | goto label_1;
| }
0x000ae410 b 0xae2ec | goto label_0;
| label_6:
0x000ae412 cmp.w sb, 0 |
| if (sb != 0) {
0x000ae416 bne 0xae44c | goto label_12;
| }
0x000ae418 ldr r1, [pc, 0x9c] |
0x000ae41a add.w r2, r6, 8 | r2 = r6 + 8;
0x000ae41e mov r0, r5 | r0 = r5;
0x000ae420 add r1, pc | r1 = 0x15c8dc;
0x000ae422 bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_3:
0x000ae426 movs r3, 1 | r3 = 1;
0x000ae428 strb r3, [r5, 0x11] | *((r5 + 0x11)) = r3;
0x000ae42a b 0xae2ec | goto label_0;
| label_11:
0x000ae42c ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
| if (r3 == 0) {
0x000ae42e cbz r3, 0xae464 | goto label_13;
| }
| label_5:
0x000ae430 mov r0, r5 | r0 = r5;
0x000ae432 bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000ae436 mov sb, r0 | sb = r0;
0x000ae438 cmp r0, 0 |
| if (r0 != 0) {
0x000ae43a bne 0xae38c | goto label_2;
| }
0x000ae43c b 0xae2ec | goto label_0;
| label_7:
0x000ae43e ldr r1, [pc, 0x7c] |
0x000ae440 mov r2, r4 | r2 = r4;
0x000ae442 mov r0, r5 | r0 = r5;
0x000ae444 add r1, pc | r1 = 0x15c906;
0x000ae446 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000ae44a b 0xae2ec | goto label_0;
| label_12:
0x000ae44c mov r0, r5 | r0 = r5;
0x000ae44e mov r1, sl | r1 = sl;
0x000ae450 bl 0x7c8e0 | fcn_0007c8e0 (r0, r1);
0x000ae454 mov r0, r5 | r0 = r5;
0x000ae456 bl 0x41b2c | fcn_00041b2c (r0, r1);
0x000ae45a b 0xae426 | goto label_3;
| label_9:
0x000ae45c ldr.w sl, [r3] | sl = *(r3);
0x000ae460 mov fp, r4 |
0x000ae462 b 0xae354 | goto label_4;
| label_13:
0x000ae464 ldr r3, [r5] | r3 = *(r5);
0x000ae466 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000ae468 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000ae46a itt pl |
| if (r3 < r3) {
0x000ae46c movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000ae46e strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000ae470 b 0xae430 | goto label_5;
| label_8:
0x000ae472 sub.w r2, r3, 0x80000 | r2 = r3 - 0x80000;
0x000ae476 movs r1, 9 | r1 = 9;
0x000ae478 ldr.w sl, [r2] | sl = *(r2);
0x000ae47c mov r3, r4 | r3 = r4;
0x000ae47e ldr r2, [pc, 0x40] |
0x000ae480 mov r0, r5 | r0 = r5;
0x000ae482 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000ae486 add r2, pc | r2 = 0x15c94c;
0x000ae488 bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000ae48c cmp r0, 0 |
| if (r0 != 0) {
0x000ae48e bne.w 0xae2ec | goto label_0;
| }
0x000ae492 mov.w fp, 0 |
0x000ae496 mov.w r4, 0x8000 | r4 = 0x8000;
0x000ae498 add r0, r0 | r0 += r0;
0x000ae49a movt fp, 0xfff8 |
0x000ae49e movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000ae4a2 movs r1, 0xa | r1 = 0xa;
0x000ae4a4 b 0xae36c | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xae908 */
| #include <stdint.h>
|
; (fcn) fcn.000ae908 () | void fcn_000ae908 (int16_t arg_10h, int16_t arg_50h, arithmetic x, int16_t arg_1f8h, int16_t arg_208h, int16_t arg_248h, int16_t arg_270h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000ae908 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ae90c mov sb, r2 | sb = r2;
0x000ae90e sub sp, 0x44 |
0x000ae910 ldr r2, [pc, 0x194] |
0x000ae912 mov r6, r0 | r6 = r0;
0x000ae914 mov r7, r1 | r7 = r1;
0x000ae916 str r3, [sp, 0x10] | var_10h = r3;
0x000ae918 ldr r0, [sp, 0x68] | r0 = *(x);
0x000ae91a add r2, pc | r2 = 0x15d3c6;
0x000ae91c ldr r3, [pc, 0x18c] | r3 = *(0xaeaac);
0x000ae91e ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x000ae920 str r0, [sp, 0x1c] | var_1ch = r0;
0x000ae922 ldr r3, [r2, r3] |
0x000ae924 ldr.w fp, [r6] | fp = *(r6);
0x000ae928 ldr r3, [r3] | r3 = imp.atan;
0x000ae92a str r3, [sp, 0x3c] | var_3ch = r3;
0x000ae92c mov.w r3, 0 | r3 = 0;
0x000ae930 cmp r5, 0 |
| if (r5 == 0) {
0x000ae932 beq.w 0xaea58 | goto label_5;
| }
| label_3:
0x000ae936 ldr.w sl, [pc, 0x178] |
0x000ae93a movs r4, 0 | r4 = 0;
0x000ae93c ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000ae940 str r5, [sp, 0x18] | var_18h = r5;
0x000ae942 add sl, pc | sl = 0x15d3f8;
0x000ae944 add.w r2, sl, 0x344 | r2 = sl + 0x344;
0x000ae948 mov sl, r6 | sl = r6;
0x000ae94a str r2, [sp, 8] | var_8h = r2;
0x000ae94c lsls r2, r7, 4 | r2 = r7 << 4;
0x000ae94e add.w r8, r3, r2 | r8 = r3 + r2;
0x000ae952 ldr r3, [pc, 0x160] |
0x000ae954 str r2, [sp, 0x14] | var_14h = r2;
0x000ae956 add r3, pc | r3 = 0x15d410;
0x000ae958 str r3, [sp, 0x20] | var_20h = r3;
0x000ae95a add r3, sp, 0x38 | r3 += var_38h;
0x000ae95c str r3, [sp, 0xc] | var_ch = r3;
| do {
| label_1:
0x000ae95e ldr r3, [sp, 0xc] | r3 = var_ch;
0x000ae960 mov.w r2, 0 | r2 = 0;
0x000ae964 ldr.w r5, [r8] | r5 = *(r8);
0x000ae968 mov r0, fp | r0 = fp;
0x000ae96a strb r2, [r3, r4] | *((r3 + r4)) = r2;
0x000ae96c ldr r3, [sp, 8] | r3 = var_8h;
0x000ae96e mov r2, r5 | r2 = r5;
0x000ae970 ldr.w r6, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| r6 = *((r3 + offset_0));
0x000ae974 mov r1, r6 | r1 = r6;
0x000ae976 bl 0x56ec0 | r0 = fcn_00056ec0 (r0, r1, r2, r3);
0x000ae97a cmp r0, 0 |
| if (r0 == 0) {
0x000ae97c beq 0xaea1e | goto label_6;
| }
0x000ae97e ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000ae980 cmp r7, 1 |
0x000ae982 add r3, sp, 0x2c | r3 += var_2ch;
0x000ae984 str.w r2, [r3, r4, lsl 2] | __asm ("str.w r2, [r3, r4, lsl 2]");
0x000ae986 movs r0, 0x24 | r0 = 0x24;
| if (r0 != 0x24) {
0x000ae988 beq 0xae9aa |
0x000ae98a ldr.w r3, [sl] | r3 = *(sl);
0x000ae98e ldr r1, [sp, 0x14] | r1 = var_14h;
0x000ae990 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000ae992 add r3, r1 | r3 += r1;
0x000ae994 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000ae996 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000ae998 cbz r3, 0xae9aa | goto label_7;
| }
0x000ae99a movs r3, 1 | r3 = 1;
0x000ae99c mov r1, r7 | r1 = r7;
0x000ae99e mov r0, sl | r0 = sl;
0x000ae9a0 str r6, [sp] | *(sp) = r6;
0x000ae9a2 str r2, [sp, 0x24] | var_24h = r2;
0x000ae9a4 bl 0x42ffc | fcn_00042ffc (r0, r1, r2, r3, r4);
0x000ae9a8 ldr r2, [sp, 0x24] | r2 = var_24h;
| }
| label_7:
0x000ae9aa ldr r1, [sp, 0x10] | r1 = var_10h;
0x000ae9ac cmp r1, 0 |
| if (r1 == 0) {
0x000ae9ae beq 0xaea84 | goto label_8;
| }
0x000ae9b0 ldr.w r2, [r8] | r2 = *(r8);
0x000ae9b4 mov r3, r6 | r3 = r6;
0x000ae9b6 str r1, [sp, 4] | var_4h = r1;
0x000ae9b8 mov r0, sl | r0 = sl;
0x000ae9ba ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000ae9bc str r1, [sp] | *(sp) = r1;
0x000ae9be ldr r1, [sp, 0x20] | r1 = var_20h;
0x000ae9c0 bl 0xab4d8 | fcn_000ab4d8 (r0);
| label_0:
0x000ae9c4 adds r4, 1 | r4++;
0x000ae9c6 cmp r4, 3 |
0x000ae9c8 bne 0xae95e |
| } while (r4 != 3);
0x000ae9ca ldr r5, [sp, 0x18] | r5 = var_18h;
0x000ae9cc mov r2, sb | r2 = sb;
0x000ae9ce ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ae9d0 movs r1, 0x71 | r1 = 0x71;
0x000ae9d2 str r7, [sp] | *(sp) = r7;
0x000ae9d4 mov r0, r5 | r0 = r5;
0x000ae9d6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000ae9d8 invalid |
0x000ae9dc ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000ae9e0 cbz r3, 0xaea46 | goto label_9;
| }
| label_2:
0x000ae9e2 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000ae9e4 cmp r3, 0 |
| if (r3 > 0) {
0x000ae9e6 ble 0xae9fa |
0x000ae9e8 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x000ae9ea add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000ae9ee ldrb.w r1, [sp, 0x38] | r1 = var_38h;
0x000ae9f2 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000ae9f6 strh r1, [r2, -0x16] | *((r2 - 0x16)) = r1;
| }
0x000ae9fa ldr r2, [pc, 0xbc] |
0x000ae9fc ldr r3, [pc, 0xac] | r3 = *(0xaeaac);
0x000ae9fe add r2, pc | r2 = 0x15d4bc;
0x000aea00 ldr r3, [r2, r3] | r3 = imp.atan;
0x000aea02 ldr r2, [r3] | r2 = imp.atan;
0x000aea04 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000aea06 eors r2, r3 | r2 ^= r3;
0x000aea08 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000aea0c bne 0xaeaa2 | goto label_10;
| }
0x000aea0e ldr r1, [pc, 0xac] |
0x000aea10 mov r0, r5 | r0 = r5;
0x000aea12 add r1, pc | r1 = 0x15d4d4;
0x000aea14 add sp, 0x44 |
0x000aea16 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000aea1a b.w 0x4eeac | void (*0x4eeac)() ();
| label_6:
0x000aea1e cmp r4, 0 |
| if (r4 != 0) {
0x000aea20 bne 0xae9c4 | goto label_0;
| }
0x000aea22 ldr r1, [pc, 0x9c] |
0x000aea24 mov r3, r6 | r3 = r6;
0x000aea26 mov r2, r5 | r2 = r5;
0x000aea28 mov r0, sl | r0 = sl;
0x000aea2a movs r4, 1 | r4 = 1;
0x000aea2c add r1, pc | r1 = 0x15d4f2;
0x000aea2e str r1, [sp] | *(sp) = r1;
0x000aea30 ldr r1, [pc, 0x90] |
0x000aea32 add r1, pc | r1 = 0x15d4fa;
0x000aea34 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000aea38 ldr.w r3, [sl, 0x5c] | r3 = *((sl + 0x5c));
0x000aea3a adds r0, 0x5c | r0 += 0x5c;
0x000aea3c str r3, [sp, 0x2c] | var_2ch = r3;
0x000aea3e movs r3, 0x10 | r3 = 0x10;
0x000aea40 strb.w r3, [sp, 0x38] | var_38h = r3;
0x000aea44 b 0xae95e | goto label_1;
| label_9:
0x000aea46 ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x000aea48 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000aea4c movs r2, 0xfd | r2 = 0xfd;
0x000aea4e add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
0x000aea52 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x000aea54 str r4, [r3, 0x10] | *((r3 + 0x10)) = r4;
0x000aea56 b 0xae9e2 | goto label_2;
| label_5:
0x000aea58 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
| if (r3 == 0) {
0x000aea5a cbz r3, 0xaea94 | goto label_11;
| }
| label_4:
0x000aea5c mov r0, r6 | r0 = r6;
0x000aea5e bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000aea62 mov r5, r0 | r5 = r0;
0x000aea64 cmp r0, 0 |
| if (r0 != 0) {
0x000aea66 bne.w 0xae936 | goto label_3;
| }
0x000aea6a ldr r2, [pc, 0x5c] |
0x000aea6c ldr r3, [pc, 0x3c] | r3 = *(0xaeaac);
0x000aea6e add r2, pc | r2 = 0x15d53c;
0x000aea70 ldr r3, [r2, r3] | r3 = imp.atan;
0x000aea72 ldr r2, [r3] | r2 = imp.atan;
0x000aea74 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000aea76 eors r2, r3 | r2 ^= r3;
0x000aea78 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000aea7c bne 0xaeaa2 |
0x000aea7e add sp, 0x44 |
0x000aea80 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x000aea84 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000aea86 movs r1, 0x91 | r1 = 0x91;
0x000aea88 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000aea8a str r3, [sp] | *(sp) = r3;
0x000aea8c mov r3, r7 | r3 = r7;
0x000aea8e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000aea92 b 0xae9c4 | goto label_0;
| label_11:
0x000aea94 ldr.w r3, [fp, 0x50] | r3 = *(arg_50h);
0x000aea98 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000aea9a itt pl |
| if (r3 < r3) {
0x000aea9c movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000aea9e strbpl r3, [r6, 0x17] | *((r6 + 0x17)) = r3;
| }
0x000aeaa0 b 0xaea5c | goto label_4;
| }
| label_10:
0x000aeaa2 blx 0x6430 | fcn_00006430 ();
0x000aeaa6 nop |
0x000aeaa8 push {r1, r2, r3, r4, r5, r6} |
0x000aeaaa movs r3, r0 | r3 = r0;
0x000aeaac lsls r4, r6, 8 | r4 = r6 << 8;
0x000aeaae movs r0, r0 |
0x000aeab0 add r7, sp, 0x208 | r7 += arg_208h;
0x000aeab2 movs r3, r0 | r3 = r0;
0x000aeab4 str r1, [sp, 0x248] | *(arg_248h) = r1;
0x000aeab6 movs r2, r0 | r2 = r0;
| if (r2 == 0) {
0x000aeab8 cbz r2, 0xaeb22 | void (*0xaeb22)() ();
| }
0x000aeaba movs r3, r0 | r3 = r0;
0x000aeabc strb r2, [r5, 4] | *((r5 + 4)) = r2;
0x000aeabe movs r2, r0 | r2 = r0;
0x000aeac0 str r7, [sp, 0x270] | *(arg_270h) = r7;
0x000aeac2 movs r2, r0 | r2 = r0;
0x000aeac4 str r7, [sp, 0x1f8] | *(arg_1f8h) = r7;
0x000aeac6 movs r2, r0 | r2 = r0;
| if (r2 == 0) {
0x000aeac8 cbz r2, 0xaeb16 | void (*0xaeb16)() ();
| }
0x000aeaca movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xaf550 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000af550 () | void fcn_000af550 (int16_t arg_0h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x000af550 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000af554 sub sp, 0x1c |
0x000af556 ldr.w r5, [r0, 0xec] | r5 = *(arg_0hxec);
0x000af55a ldr r6, [r0] | r6 = *(r0);
0x000af55c cmp r5, 0 |
| if (r5 == 0) {
0x000af55e beq.w 0xaf6a4 | goto label_1;
| }
0x000af562 ldr.w sb, [r0, 0xfc] | sb = *(arg_0hxfc);
0x000af566 mov r4, r0 | r4 = r0;
0x000af568 mov r7, r1 | r7 = r1;
0x000af56a cmp.w sb, 0 |
| if (sb != 0) {
0x000af56e beq 0xaf5a2 |
0x000af570 ldr.w r8, [r0, 0x100] | r8 = *(arg_0hx100);
0x000af574 mov r0, r6 | r0 = r6;
0x000af576 adds.w r2, r8, 1 | r2 = r8 + 1;
0x000af57a asr.w r3, r8, 0x1f | r3 = r8 >> 0x1f;
0x000af57e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000af582 bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x000af586 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x000af588 cbz r0, 0xaf598 |
0x000af58a mov r1, sb | r1 = sb;
0x000af58c mov r2, r8 | r2 = r8;
0x000af58e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000af592 movs r3, 0 | r3 = 0;
0x000af594 strb.w r3, [sl, r8] | *((sl + r8)) = r3;
| }
0x000af598 mov r2, sl | r2 = sl;
0x000af59a mov r1, r5 | r1 = r5;
0x000af59c mov r0, r4 | r0 = r4;
0x000af59e bl 0x43fcc | fcn_00043fcc (r0, r1, r2);
| }
0x000af5a2 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x000af5a4 movs r2, 0 | r2 = 0;
0x000af5a6 str.w r2, [r4, 0xfc] | __asm ("str.w r2, [r4, 0xfc]");
0x000af5aa cmp r3, r2 |
| if (r3 <= r2) {
0x000af5ac ble 0xaf6a4 | goto label_1;
| }
0x000af5ae ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
0x000af5b2 cmp r3, 0 |
| if (r3 != 0) {
0x000af5b4 bne 0xaf6aa | goto label_6;
| }
0x000af5b6 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000af5b8 cmp r3, r2 |
0x000af5ba it eq |
| if (r3 != r2) {
0x000af5bc moveq r3, r4 | r3 = r4;
| }
0x000af5be movs r2, 1 | r2 = 1;
0x000af5c0 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
| if (r7 != 0) {
0x000af5c2 cbz r7, 0xaf5d4 |
0x000af5c4 ldrd r3, r2, [r7] | __asm ("ldrd r3, r2, [r7]");
0x000af5c8 ldr.w r1, [r4, 0xbc] | r1 = *((r4 + 0xbc));
0x000af5cc subs r3, r3, r1 | r3 -= r1;
0x000af5ce add r3, r2 | r3 += r2;
0x000af5d0 str.w r3, [r4, 0xc0] | __asm ("str.w r3, [r4, 0xc0]");
| }
0x000af5d4 ldr r1, [pc, 0x1e8] |
0x000af5d6 add.w r2, r4, 0xbc | r2 = r4 + 0xbc;
0x000af5da mov r0, r6 | r0 = r6;
0x000af5dc add r1, pc | r1 = 0x15eda0;
0x000af5de bl 0x4a320 | fcn_0004a320 (r0);
0x000af5e2 ldr r1, [r5, 0x3c] | r1 = *((r5 + 0x3c));
0x000af5e4 mov r7, r0 | r7 = r0;
0x000af5e6 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000af5e8 cmp r1, 0 |
| if (r1 == 0) {
0x000af5ea beq.w 0xaf7a8 | goto label_7;
| }
0x000af5ee ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000af5f0 cmp r1, r3 |
| if (r1 == r3) {
0x000af5f2 beq.w 0xaf7a0 | goto label_8;
| }
0x000af5f4 strh r5, [r2, 6] | *((r2 + 6)) = r5;
0x000af5f6 adds r2, 0x10 | r2 += 0x10;
0x000af5f8 mov.w r8, 0 | r8 = 0;
0x000af5fa lsrs r0, r0, 0x20 | r0 >>= 0x20;
| do {
0x000af5fc ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000af5fe mov ip, r2 |
0x000af600 add.w r8, r8, 1 | r8++;
0x000af604 adds r2, 0x10 | r2 += 0x10;
0x000af606 cmp r1, r3 |
0x000af608 bne 0xaf5fc |
| } while (r1 != r3);
0x000af60a lsl.w sl, r8, 4 | sl = r8 << 4;
0x000af60e mov r2, ip | r2 = ip;
| label_5:
0x000af610 ldr r3, [r5] | r3 = *(r5);
0x000af612 mov r0, r4 | r0 = r4;
0x000af614 ldr r2, [r2] | r2 = *(r2);
0x000af616 strd r3, r7, [sp] | __asm ("strd r3, r7, [sp]");
0x000af61a ldr r1, [r4, 0x58] | r1 = *((r4 + 0x58));
0x000af61c str r1, [sp, 8] | var_8h = r1;
0x000af61e ldr r1, [pc, 0x1a4] |
0x000af620 add r1, pc | r1 = 0x15edea;
0x000af622 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000af626 ldr.w sb, [r4, 8] | sb = *((r4 + 8));
0x000af62a mov r0, sb | r0 = sb;
0x000af62c cmp.w sb, 0 |
| if (sb == 0) {
0x000af630 beq.w 0xaf744 | goto label_9;
| }
| label_0:
0x000af634 ldr r3, [r4] | r3 = *(r4);
0x000af636 mov r2, r8 | r2 = r8;
0x000af638 movs r1, 0x64 | r1 = 0x64;
0x000af63a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000af63c add r3, sl | r3 += sl;
0x000af63e mov.w sl, 0 | sl = 0;
0x000af640 lsrs r0, r0, 8 | r0 >>= 8;
0x000af642 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000af644 ldr r3, [r3] | r3 = *(r3);
0x000af646 adds r3, 1 | r3++;
0x000af648 str r3, [sp] | *(sp) = r3;
0x000af64a movs r3, 1 | r3 = 1;
0x000af64c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000af650 mov r2, sl | r2 = sl;
0x000af652 movs r1, 0xa6 | r1 = 0xa6;
0x000af654 mov r3, sl | r3 = sl;
0x000af656 mov r0, sb | r0 = sb;
0x000af658 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000af65c bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000af660 ldr r1, [pc, 0x164] |
0x000af662 mov r3, r7 | r3 = r7;
0x000af664 ldr r2, [r5] | r2 = *(r5);
0x000af666 mov r0, r6 | r0 = r6;
0x000af668 add r1, pc | r1 = 0x15ee34;
0x000af66a bl 0x4a320 | fcn_0004a320 (r0);
0x000af66e mov r3, sl | r3 = sl;
0x000af670 mov r2, r0 | r2 = r0;
0x000af672 mov r1, r8 | r1 = r8;
0x000af674 mov r0, sb | r0 = sb;
0x000af676 bl 0x42354 | fcn_00042354 (r0, r1, r2, r3);
| if (r7 != 0) {
0x000af67a cbz r7, 0xaf684 |
0x000af67c mov r1, r7 | r1 = r7;
0x000af67e mov r0, r6 | r0 = r6;
0x000af680 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000af684 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000af686 mov r0, sb | r0 = sb;
0x000af688 ldr r2, [r5] | r2 = *(r5);
0x000af68a adds r5, r3, 1 | r5 = r3 + 1;
0x000af68c mov r1, r5 | r1 = r5;
0x000af68e str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x000af690 movs r4, 0 | r4 = 0;
0x000af692 bl 0x42f80 | fcn_00042f80 (r0, r1, r2);
0x000af696 mov r3, r5 | r3 = r5;
0x000af698 mov r2, r8 | r2 = r8;
0x000af69a movs r1, 0xab | r1 = 0xab;
0x000af69c mov r0, sb | r0 = sb;
0x000af69e str r4, [sp] | *(sp) = r4;
0x000af6a0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
| label_1:
0x000af6a4 add sp, 0x1c |
0x000af6a6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x000af6aa ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x000af6ac add.w r0, r6, 0x180 | r0 = r6 + 0x180;
0x000af6ae strb r0, [r0, 3] | *((r0 + 3)) = r0;
0x000af6b0 ldr.w sb, [r5, 0x3c] | sb = *((r5 + 0x3c));
0x000af6b4 ldr.w r8, [r5] | r8 = *(r5);
0x000af6b8 ldr r1, [r3] | r1 = *(r3);
0x000af6ba bl 0x2ded0 | fcn_0002ded0 (r0, r1, r2);
0x000af6bc invalid |
0x000af6c0 add sp, 0x20 |
0x000af6c2 cmp.w fp, 0 |
| if (fp == 0) {
0x000af6c6 beq 0xaf72c | goto label_10;
| }
0x000af6c8 ldr.w r3, [fp] | r3 = *(fp);
| if (r3 == 0) {
0x000af6cc cbz r3, 0xaf72c | goto label_10;
| }
0x000af6ce ldr r2, [r3] | r2 = *(r3);
0x000af6d0 cmp r2, 2 |
| if (r2 <= 2) {
0x000af6d2 ble 0xaf72c | goto label_10;
| }
0x000af6d4 ldr r3, [r3, 0x5c] | r3 = *((r3 + 0x5c));
| if (r3 == 0) {
0x000af6d6 cbz r3, 0xaf72c | goto label_10;
| }
0x000af6d8 mov r2, r8 | r2 = r8;
0x000af6da cmp.w r8, 0 |
| if (r8 != 0) {
0x000af6de beq 0xaf6ea |
0x000af6e0 mov r0, r8 | r0 = r8;
0x000af6e2 blx 0x65dc | r0 = strcmp (r0, r1);
0x000af6e6 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
| }
0x000af6ea ldr.w r7, [sb, 0x10] | r7 = *((sb + 0x10));
| if (r7 == 0) {
0x000af6ee cbz r7, 0xaf72c | goto label_10;
| }
0x000af6f0 strd r6, fp, [sp, 0x10] | __asm ("strd r6, fp, [var_0hx10]");
0x000af6f4 mov sl, r2 | sl = r2;
0x000af6f6 mov fp, r4 |
| do {
0x000af6f8 ldr r4, [r7, 8] | r4 = *((r7 + 8));
0x000af6fa ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
| if (r3 == 0) {
0x000af6fe cbnz r3, 0xaf722 |
0x000af700 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000af702 lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 < r3) {
0x000af704 bmi 0xaf722 | goto label_3;
| }
0x000af706 ldr r6, [r4] | r6 = *(r4);
0x000af708 ldr r1, [r5] | r1 = *(r5);
0x000af70a cmp r6, 0 |
| if (r6 == 0) {
0x000af70c beq 0xaf77e | goto label_11;
| }
| if (r1 == 0) {
0x000af70e cbz r1, 0xaf722 | goto label_3;
| }
0x000af710 mov r2, sl | r2 = sl;
0x000af712 mov r0, r6 | r0 = r6;
0x000af714 bl 0x27334 | r0 = fcn_00027334 (r0, r1, r2);
| if (r0 != 0) {
0x000af718 cbnz r0, 0xaf722 | goto label_3;
| }
| label_4:
0x000af71a ldrb.w r2, [r6, sl] | r2 = *((r6 + sl));
0x000af71e cmp r2, 0x5f |
| if (r2 == 0x5f) {
0x000af720 beq 0xaf784 | goto label_12;
| }
| }
| label_3:
0x000af722 ldr r7, [r7] | r7 = *(r7);
0x000af724 cmp r7, 0 |
0x000af726 bne 0xaf6f8 |
| } while (r7 != 0);
0x000af728 ldr r6, [sp, 0x10] | r6 = var_10h;
0x000af72a mov r4, fp | r4 = fp;
| label_10:
0x000af72c mov r2, r5 | r2 = r5;
0x000af72e mov r1, r8 | r1 = r8;
0x000af730 add.w r0, sb, 8 | r0 = sb + 8;
0x000af734 bl 0x2df94 | r0 = fcn_0002df94 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x000af738 cbnz r0, 0xaf754 |
0x000af73a str.w r0, [r4, 0xec] | __asm ("str.w r0, [r4, 0xec]");
0x000af73e add sp, 0x1c |
0x000af740 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x000af744 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
| if (r3 == 0) {
0x000af746 cbz r3, 0xaf770 | goto label_13;
| }
| label_2:
0x000af748 mov r0, r4 | r0 = r4;
0x000af74a bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000af74e mov sb, r0 | sb = r0;
0x000af750 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000af752 b 0xaf634 | goto label_0;
| }
0x000af754 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x000af758 cmp r3, 0 |
| if (r3 != 0) {
0x000af75a bne 0xaf6a4 | goto label_1;
| }
0x000af75c ldrb.w r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x000af760 cmp r3, 0 |
| if (r3 != 0) {
0x000af762 bne 0xaf6a4 | goto label_1;
| }
0x000af764 mov r0, r6 | r0 = r6;
0x000af766 add sp, 0x1c |
0x000af768 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000af76c b.w 0x38024 | void (*0x38024)() ();
| label_13:
0x000af770 ldr r3, [r4] | r3 = *(r4);
0x000af772 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000af774 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
0x000af776 itt pl |
| if (r2 < r3) {
0x000af778 movpl r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x000af77a strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x000af77c b 0xaf748 | goto label_2;
| label_11:
0x000af77e cmp r1, 0 |
| if (r1 != 0) {
0x000af780 bne 0xaf722 | goto label_3;
| }
0x000af782 b 0xaf71a | goto label_4;
| label_12:
0x000af784 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000af786 add.w r0, sl, 1 | r0 = sl + 1;
0x000af78a add r0, r6 | r0 += r6;
0x000af78c ldr r2, [r3] | r2 = *(r3);
0x000af78e ldr r2, [r2, 0x5c] | r2 = *((r2 + 0x5c));
0x000af790 blx r2 | r0 = uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x000af792 cmp r0, 0 |
| if (r0 == 0) {
0x000af794 beq 0xaf722 | goto label_3;
| }
0x000af796 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000af798 orr r3, r3, 0x1000 | r3 |= 0x1000;
0x000af79c str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x000af79e b 0xaf722 | goto label_3;
| label_8:
0x000af7a0 mov.w sl, 0 | sl = 0;
0x000af7a4 mov r8, sl | r8 = sl;
0x000af7a6 b 0xaf610 | goto label_5;
| label_7:
0x000af7a8 mov.w sl, 0 | sl = 0;
0x000af7ac mov.w r8, 0x8000 | r8 = 0x8000;
0x000af7b0 sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x000af7b4 movt sl, 0xfff8 | sl = (sl & 0xFFFF) | 0xfff80000;
0x000af7b8 movt r8, 0xffff | r8 = (r8 & 0xFFFF) | 0xffff0000;
0x000af7bc b 0xaf610 | goto label_5;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xafab4 */
| #include <stdint.h>
|
; (fcn) fcn.000afab4 () | void fcn_000afab4 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000afab4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000afab8 mov r5, r1 | r5 = r1;
0x000afaba ldr r6, [r0] | r6 = *(r0);
0x000afabc sub sp, 0x3c |
0x000afabe str r0, [sp, 0x10] | var_10h = r0;
0x000afac0 ldrb.w r1, [r6, 0x57] | r1 = *((r6 + 0x57));
0x000afac4 cbz r1, 0xafad4 |
| while (r0 == 0) {
| label_0:
0x000afac6 mov r1, r5 | r1 = r5;
0x000afac8 mov r0, r6 | r0 = r6;
0x000afaca add sp, 0x3c |
0x000afacc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000afad0 b.w 0x30a7c | void (*0x30a7c)() ();
0x000afad4 mov sb, r2 | sb = r2;
0x000afad6 add.w r2, r5, 8 | r2 = r5 + 8;
0x000afada mov r4, r0 | r4 = r0;
0x000afadc bl 0x98544 | r0 = fcn_00098544 (r0, r1, r2);
0x000afae0 mov r7, r0 | r7 = r0;
0x000afae2 cmp r0, 0 |
0x000afae4 beq 0xafac6 |
| }
0x000afae6 mov r1, r0 | r1 = r0;
0x000afae8 mov r0, r4 | r0 = r4;
0x000afaea bl 0x45844 | r0 = fcn_00045844 (r0, r1);
0x000afaee mov r8, r0 | r8 = r0;
0x000afaf0 cmp r0, 0 |
| if (r0 != 0) {
0x000afaf2 bne 0xafac6 | goto label_0;
| }
0x000afaf4 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x000afaf8 ldr r2, [r7] | r2 = *(r7);
0x000afafa cmp r3, 2 |
| if (r3 == 2) {
0x000afafc beq.w 0xafda0 | goto label_15;
| }
0x000afb00 cmp r3, 1 |
| if (r3 == 1) {
0x000afb02 beq.w 0xafdd8 | goto label_16;
| }
0x000afb06 mov r1, sb | r1 = sb;
0x000afb08 mov r0, r6 | r0 = r6;
0x000afb0a bl 0x39394 | r0 = fcn_00039394 (r0, r1);
0x000afb0e mov fp, r0 |
0x000afb10 cmp r0, 0 |
| if (r0 == 0) {
0x000afb12 beq 0xafac6 | goto label_0;
| }
0x000afb14 mov r1, r0 | r1 = r0;
0x000afb16 mov r0, r7 | r0 = r7;
0x000afb18 bl 0x2f37c | r0 = fcn_0002f37c (r0, r1);
0x000afb1c subs.w sl, r0, 0 | sl = r0 - 0;
| if (sl < r0) {
0x000afb20 blt.w 0xafdc2 | goto label_17;
| }
0x000afb22 strh r7, [r1, 0xa] | *((r1 + 0xa)) = r7;
0x000afb24 add.w sb, sl, sl, lsl 1 | sb = sl + (sl << 1);
0x000afb28 lsl.w r3, sb, 2 | r3 = sb << 2;
0x000afb2c mov r2, r3 | r2 = r3;
0x000afb2e str r3, [sp, 0x14] | var_14h = r3;
0x000afb30 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000afb32 add r3, r2 | r3 += r2;
0x000afb34 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000afb36 tst.w r3, 9 |
| if ((r3 & 9) != 0) {
0x000afb3a bne.w 0xafdde | goto label_18;
| }
0x000afb3e ldrsh.w r3, [r7, 0x22] | r3 = *((r7 + 0x22));
0x000afb42 cmp r3, 1 |
| if (r3 <= 1) {
0x000afb44 ble.w 0xafdfa | goto label_19;
| }
0x000afb48 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x000afb4a ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000afb4c cmp r1, 0 |
| if (r1 == 0) {
0x000afb4e beq.w 0xafe08 | goto label_20;
| }
0x000afb52 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000afb54 cmp r1, r2 |
| if (r1 == r2) {
0x000afb56 beq.w 0xafe14 | goto label_21;
| }
0x000afb5a adds r3, 0x10 | r3 += 0x10;
| do {
0x000afb5c mov r0, r3 | r0 = r3;
0x000afb5e add.w r8, r8, 1 | r8++;
0x000afb62 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000afb64 adds r3, 0x10 | r3 += 0x10;
0x000afb66 cmp r1, r2 |
0x000afb68 bne 0xafb5c |
| } while (r1 != r2);
0x000afb6a ldr.w sb, [r0] | sb = *(r0);
0x000afb6e movs r1, 0x1a | r1 = 0x1a;
0x000afb70 ldr r3, [r7] | r3 = *(r7);
0x000afb72 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afb74 mov r2, sb | r2 = sb;
0x000afb76 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000afb7a bl 0x43e6c | r0 = fcn_00043e6c (r0, r1);
0x000afb7e cmp r0, 0 |
| if (r0 != 0) {
0x000afb80 bne.w 0xafdce | goto label_4;
| }
0x000afb84 ldr.w r3, [pc, 0x4cc] |
0x000afb88 sub.w r4, r8, 1 | r4 = r8 - 1;
0x000afb8c str r0, [sp, 8] | var_8h = r0;
0x000afb8e clz r4, r4 | r4 &= r4;
0x000afb92 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afb94 lsrs r4, r4, 5 | r4 >>= 5;
0x000afb96 ldr.w r1, [pc, 0x4c0] |
0x000afb9a add r3, pc | r3 = 0x15fbf2;
0x000afb9c str r3, [sp, 4] | var_4h = r3;
0x000afb9e movs r3, 1 | r3 = 1;
0x000afba0 str r4, [sp] | *(sp) = r4;
0x000afba2 mov r2, sb | r2 = sb;
0x000afba4 add r1, pc | r1 = 0x15fc02;
0x000afba6 strb r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000afba8 mov r3, sb | r3 = sb;
0x000afbaa strd r4, r1, [sp, 0x18] | __asm ("strd r4, r1, [var_18h]");
0x000afbae bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afbb2 cmp.w r8, 1 |
| if (r8 != 1) {
0x000afbb6 bne.w 0xafe4c | goto label_22;
| }
0x000afbba ldr.w r1, [pc, 0x4a0] |
0x000afbbe mov r3, sb | r3 = sb;
0x000afbc0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afbc2 mov r2, sb | r2 = sb;
0x000afbc4 add r1, pc | r1 = 0x15fc26;
0x000afbc6 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afbca ldr r3, [r7] | r3 = *(r7);
0x000afbcc mov r2, sb | r2 = sb;
0x000afbce ldr.w r1, [pc, 0x490] |
0x000afbd2 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afbd4 strd sl, r3, [sp] | __asm ("strd sl, r3, [sp]");
0x000afbd8 mov r3, r8 | r3 = r8;
0x000afbda add r1, pc | r1 = 0x15fc40;
0x000afbdc bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afbe0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afbe2 mov r1, r8 | r1 = r8;
0x000afbe4 movs r2, 2 | r2 = 2;
0x000afbe6 bl 0x423dc | fcn_000423dc (r0, r1, r2);
0x000afbea ldr.w r3, [pc, 0x478] |
0x000afbee mov r2, sb | r2 = sb;
0x000afbf0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afbf2 str r4, [sp] | *(sp) = r4;
0x000afbf4 add r3, pc | r3 = 0x15fc5e;
0x000afbf6 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000afbf8 strb.w r8, [r0, 0x10] | *((r0 + 0x10)) = r8;
0x000afbfc str r3, [sp, 4] | var_4h = r3;
0x000afbfe mov r3, sb | r3 = sb;
0x000afc00 str.w r8, [sp, 8] | __asm ("str.w r8, [var_8h]");
0x000afc04 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afc06 invalid |
| label_5:
0x000afc08 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000afc0a ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000afc0c cmp r3, 0 |
| if (r3 != 0) {
0x000afc0e bne.w 0xafdce | goto label_4;
| }
0x000afc12 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000afc14 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000afc16 add r3, r1 | r3 += r1;
0x000afc18 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000afc1a lsls r1, r3, 0x1a | r1 = r3 << 0x1a;
| if (r1 < r3) {
0x000afc1c bmi.w 0xafdce | goto label_4;
| }
0x000afc20 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x000afc22 str r3, [sp, 0x14] | var_14h = r3;
0x000afc24 cmp r3, 0 |
| if (r3 == 0) {
0x000afc26 beq.w 0xaff84 | goto label_23;
| }
| label_9:
0x000afc2a ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afc2c movs r3, 0x71 | r3 = 0x71;
0x000afc2e mov r2, r8 | r2 = r8;
0x000afc30 ldr r4, [r0, 0x28] | r4 = *((r0 + 0x28));
0x000afc32 str r3, [sp] | *(sp) = r3;
0x000afc34 mov r3, r7 | r3 = r7;
0x000afc36 adds r1, r4, 1 | r1 = r4 + 1;
0x000afc38 mov r8, r4 | r8 = r4;
0x000afc3a str r1, [r0, 0x28] | *((r0 + 0x28)) = r1;
0x000afc3c mov r1, r4 | r1 = r4;
0x000afc3e str r4, [sp, 0x1c] | var_1ch = r4;
0x000afc40 mov r4, r0 | r4 = r0;
0x000afc42 bl 0x4ef30 | fcn_0004ef30 (r0, r1, r2, r3, r4);
0x000afc46 movs r3, 0 | r3 = 0;
0x000afc48 mov r2, r8 | r2 = r8;
0x000afc4a str r3, [sp] | *(sp) = r3;
0x000afc4c movs r1, 0x23 | r1 = 0x23;
0x000afc4e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000afc50 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000afc54 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000afc56 ldr.w r8, [r4, 0x2c] | r8 = *((r4 + 0x2c));
0x000afc5a str r0, [sp, 0x28] | var_28h = r0;
0x000afc5c ands sb, r3, 0x80 | sb = r3 & 0x80;
0x000afc60 add.w r2, r8, 1 | r2 = r8 + 1;
0x000afc64 str r2, [sp, 0x2c] | var_2ch = r2;
0x000afc66 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
| if (sb == r3) {
0x000afc68 beq.w 0xaff94 | goto label_24;
| }
0x000afc6c ldr.w sb, [r7, 8] | sb = *((r7 + 8));
0x000afc70 mov r2, sb | r2 = sb;
0x000afc72 cmp.w sb, 0 |
| if (sb != 0) {
0x000afc76 bne 0xafc82 | goto label_25;
| }
0x000afc78 b 0xb004e | goto label_26;
| do {
0x000afc7a ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000afc7c cmp r2, 0 |
| if (r2 == 0) {
0x000afc7e beq.w 0xb004e | goto label_26;
| }
| label_25:
0x000afc82 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000afc86 and r3, r3, 3 | r3 &= 3;
0x000afc8a cmp r3, 2 |
0x000afc8c bne 0xafc7a |
| } while (r3 != 2);
0x000afc8e ldrh r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x000afc90 mov sb, r2 | sb = r2;
0x000afc92 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000afc94 add r3, r2 | r3 += r2;
0x000afc96 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000afc98 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000afc9a ldrh.w r2, [sb, 0x32] | r2 = *((sb + 0x32));
0x000afc9e cmp r2, 0 |
| if (r2 == 0) {
0x000afca0 beq.w 0xb0028 | goto label_27;
| }
0x000afca4 str r6, [sp, 0x24] | var_24h = r6;
0x000afca6 add.w r3, r8, 2 | r3 = r8 + 2;
0x000afcaa ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000afcac mov.w r8, 0 | r8 = 0;
0x000afcb0 ldr r6, [sp, 0x14] | r6 = var_14h;
0x000afcb2 str r7, [sp, 0x30] | var_30h = r7;
0x000afcb4 mov r7, r3 | r7 = r3;
0x000afcb6 str r3, [sp, 0x18] | var_18h = r3;
| do {
0x000afcb8 add.w r3, r7, r8 | r3 = r7 + r8;
0x000afcbc mov r2, r4 | r2 = r4;
0x000afcbe str r3, [sp] | *(sp) = r3;
0x000afcc0 movs r1, 0x5e | r1 = 0x5e;
0x000afcc2 mov r3, r8 | r3 = r8;
0x000afcc4 mov r0, r6 | r0 = r6;
0x000afcc6 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000afcca ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x000afcce add.w r8, r8, 1 | r8++;
0x000afcd2 cmp r3, r8 |
0x000afcd4 bgt 0xafcb8 |
| } while (r3 > r8);
0x000afcd6 ldr r7, [sp, 0x30] | r7 = var_30h;
0x000afcd8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000afcda str r3, [sp, 0x20] | var_20h = r3;
0x000afcdc ldrsh.w ip, [r7, 0x22] | ip = *((r7 + 0x22));
0x000afce0 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000afce2 ldr r6, [sp, 0x24] | r6 = var_24h;
0x000afce4 cmp.w ip, 0 |
0x000afce8 add.w r3, r3, 1 | r3++;
0x000afcec str r3, [sp, 0x24] | var_24h = r3;
0x000afcee str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
| if (ip <= 0) {
0x000afcf0 ble.w 0xb0010 | goto label_28;
| }
| label_10:
0x000afcf4 mov r3, r5 | r3 = r5;
0x000afcf6 str r6, [sp, 0x30] | var_30h = r6;
0x000afcf8 mov r5, sb | r5 = sb;
0x000afcfa ldr r6, [sp, 0x20] | r6 = var_20h;
0x000afcfc sxth.w r4, sl | __asm ("sxth.w r4, sl");
0x000afd00 mov.w r8, 0 | r8 = 0;
0x000afd02 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x000afd04 mov sb, r3 | sb = r3;
0x000afd06 str.w fp, [sp, 0x34] | __asm ("str.w fp, [var_34h]");
0x000afd0a b 0xafd38 | goto label_29;
| label_2:
0x000afd0c ldr r3, [sp, 0x18] | r3 = var_18h;
0x000afd0e add r3, r6 | r3 += r6;
| label_3:
0x000afd10 ldrsh.w r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x000afd14 cmp r2, r8 |
| if (r2 == r8) {
0x000afd16 beq.w 0xaff62 | goto label_30;
| }
0x000afd1a str r3, [sp] | *(sp) = r3;
0x000afd1c mov r1, r7 | r1 = r7;
0x000afd1e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000afd20 mov r3, r8 | r3 = r8;
0x000afd22 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000afd24 bl 0x8771c | fcn_0008771c (r0, r1, r2, r3, r4);
| label_6:
0x000afd28 ldrsh.w ip, [r7, 0x22] | ip = *((r7 + 0x22));
0x000afd2c adds r6, 1 | r6++;
| do {
| label_1:
0x000afd2e add.w r8, r8, 1 | r8++;
0x000afd32 cmp ip, r8 |
| if (ip <= r8) {
0x000afd34 ble.w 0xafed0 | goto label_31;
| }
| label_29:
0x000afd38 cmp sl, r8 |
0x000afd3a beq 0xafd2e |
| } while (sl == r8);
0x000afd3c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000afd3e add.w r2, r8, r8, lsl 1 | r2 = r8 + (r8 << 1);
0x000afd42 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000afd46 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000afd48 ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 != r3) {
0x000afd4c bne 0xafd2e | goto label_1;
| }
0x000afd4e cmp r5, 0 |
| if (r5 == 0) {
0x000afd50 beq 0xafd0c | goto label_2;
| }
0x000afd52 ldrh r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x000afd54 cmp r1, 0 |
| if (r1 == 0) {
0x000afd56 beq 0xafd2e | goto label_1;
| }
0x000afd58 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000afd5a sxth.w fp, r8 | __asm ("sxth.w fp, r8");
0x000afd5e subs r2, 2 | r2 -= 2;
0x000afd60 mov r0, r2 | r0 = r2;
0x000afd62 b 0xafd6c |
| while (lr != fp) {
0x000afd64 adds r3, 1 | r3++;
0x000afd66 cmp r3, r1 |
| if (r3 == r1) {
0x000afd68 beq.w 0xaff76 | goto label_32;
| }
0x000afd6c ldrsh lr, [r0, 2]! |
0x000afd70 cmp lr, fp |
0x000afd72 bne 0xafd64 |
| }
0x000afd74 sxth.w lr, r3 | __asm ("sxth.w lr, r3");
| label_8:
0x000afd78 movs r0, 0 | r0 = 0;
0x000afd7a b 0xafd84 |
| while (r3 != r4) {
0x000afd7c adds r0, 1 | r0++;
0x000afd7e cmp r0, r1 |
| if (r0 == r1) {
0x000afd80 beq.w 0xaff70 | goto label_33;
| }
0x000afd84 ldrsh r3, [r2, 2]! | r3 = *((r2 += 2));
0x000afd88 cmp r3, r4 |
0x000afd8a bne 0xafd7c |
| }
0x000afd8c sxth r0, r0 | __asm ("sxth r0, r0");
| label_7:
0x000afd8e ldrh r3, [r5, 0x32] | r3 = *((r5 + 0x32));
0x000afd90 cmp r3, lr |
| if (r3 > lr) {
0x000afd92 bgt 0xafd2e | goto label_1;
| }
0x000afd94 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000afd96 add r3, lr | r3 += lr;
0x000afd98 cmp lr, r0 |
0x000afd9a it gt |
| if (lr <= r0) {
0x000afd9c subgt r3, 1 | r3--;
| }
0x000afd9e b 0xafd10 | goto label_3;
| label_15:
0x000afda0 ldr r3, [pc, 0x2c4] |
0x000afda2 add r3, pc | r3 = 0x15fe0e;
| do {
0x000afda4 str r2, [sp] | *(sp) = r2;
0x000afda6 ldr r1, [pc, 0x2c4] |
0x000afda8 ldr r2, [pc, 0x2c4] |
0x000afdaa ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afdac add r1, pc | r1 = 0x15fe1e;
0x000afdae add r2, pc | r2 = 0x15fe22;
0x000afdb0 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000afdb4 mov r1, r5 | r1 = r5;
0x000afdb6 mov r0, r6 | r0 = r6;
0x000afdb8 add sp, 0x3c |
0x000afdba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000afdbe b.w 0x30a7c | void (*0x30a7c)() ();
| label_17:
0x000afdc2 ldr r1, [pc, 0x2b0] |
0x000afdc4 mov r2, sb | r2 = sb;
0x000afdc6 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afdc8 add r1, pc | r1 = 0x15fe42;
0x000afdca bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_4:
0x000afdce mov r1, fp | r1 = fp;
0x000afdd0 mov r0, r6 | r0 = r6;
0x000afdd2 bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000afdd6 b 0xafac6 | goto label_0;
| label_16:
0x000afdd8 ldr r3, [pc, 0x29c] |
0x000afdda add r3, pc | r3 = 0x15fe56;
0x000afddc b 0xafda4 |
| } while (1);
| label_18:
0x000afdde lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 >= r3) {
0x000afde0 bpl 0xafdf4 | goto label_34;
| }
0x000afde2 ldr r2, [pc, 0x298] |
0x000afde4 add r2, pc | r2 = 0x15fe66;
| do {
0x000afde6 ldr r1, [pc, 0x298] |
0x000afde8 mov r3, fp | r3 = fp;
0x000afdea ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afdec add r1, pc | r1 = 0x15fe72;
0x000afdee bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000afdf2 b 0xafdce | goto label_4;
| label_34:
0x000afdf4 ldr r2, [pc, 0x28c] |
0x000afdf6 add r2, pc | r2 = 0x15fe7e;
0x000afdf8 b 0xafde6 |
| } while (1);
| label_19:
0x000afdfa ldr r1, [pc, 0x28c] |
0x000afdfc mov r2, fp | r2 = fp;
0x000afdfe ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afe00 add r1, pc | r1 = 0x15fe8e;
0x000afe02 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000afe06 b 0xafdce | goto label_4;
| label_20:
0x000afe08 mov.w r8, 0x8000 | r8 = 0x8000;
0x000afe0c sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x000afe10 movt r8, 0xffff | r8 = (r8 & 0xFFFF) | 0xffff0000;
| label_21:
0x000afe14 ldr.w sb, [r3] | sb = *(r3);
0x000afe18 movs r1, 0x1a | r1 = 0x1a;
0x000afe1a ldr r3, [r7] | r3 = *(r7);
0x000afe1c ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afe1e mov r2, sb | r2 = sb;
0x000afe20 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000afe24 bl 0x43e6c | fcn_00043e6c (r0, r1);
0x000afe28 str r0, [sp, 0x18] | var_18h = r0;
0x000afe2a cmp r0, 0 |
| if (r0 != 0) {
0x000afe2c bne 0xafdce | goto label_4;
| }
0x000afe2e ldr r3, [sp, 0x18] | r3 = var_18h;
0x000afe30 mov r2, sb | r2 = sb;
0x000afe32 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afe34 ldr r1, [pc, 0x254] |
0x000afe36 str r3, [sp, 8] | var_8h = r3;
0x000afe38 str r3, [sp] | *(sp) = r3;
0x000afe3a ldr r3, [pc, 0x254] |
0x000afe3c add r1, pc | r1 = 0x15fecc;
0x000afe3e add r3, pc | r3 = 0x15fed4;
0x000afe40 str r3, [sp, 4] | var_4h = r3;
0x000afe42 movs r3, 1 | r3 = 1;
0x000afe44 strb r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000afe46 mov r3, sb | r3 = sb;
0x000afe48 bl 0xab4d8 | fcn_000ab4d8 (r0);
| label_22:
0x000afe4c movs r3, 0 | r3 = 0;
0x000afe4e ldr r4, [sp, 0x10] | r4 = var_10h;
0x000afe50 str r3, [sp] | *(sp) = r3;
0x000afe52 mov r2, sb | r2 = sb;
0x000afe54 ldr r1, [pc, 0x23c] |
0x000afe56 ldr r3, [pc, 0x240] |
0x000afe58 mov r0, r4 | r0 = r4;
0x000afe5a add r1, pc | r1 = 0x15fef2;
0x000afe5c add r3, pc | r3 = 0x15fefa;
0x000afe5e str r1, [sp, 0x1c] | var_1ch = r1;
0x000afe60 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afe64 ldr r1, [pc, 0x234] |
0x000afe66 mov r3, sb | r3 = sb;
0x000afe68 mov r2, sb | r2 = sb;
0x000afe6a mov r0, r4 | r0 = r4;
0x000afe6c add r1, pc | r1 = 0x15ff0c;
0x000afe6e bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afe72 ldr r1, [pc, 0x22c] |
0x000afe74 mov r0, r4 | r0 = r4;
0x000afe76 str r4, [sp, 0x10] | var_10h = r4;
0x000afe78 ldr r4, [pc, 0x228] |
0x000afe7a add r1, pc | r1 = 0x15ff20;
0x000afe7c bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afe80 ldr r3, [r7] | r3 = *(r7);
0x000afe82 mov r2, sb | r2 = sb;
0x000afe84 ldr r1, [pc, 0x220] |
0x000afe86 add r4, pc | r4 = 0x15ff2e;
0x000afe88 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afe8a strd sl, r3, [sp] | __asm ("strd sl, r3, [sp]");
0x000afe8e mov r3, r8 | r3 = r8;
0x000afe90 add r1, pc | r1 = 0x15ff3c;
0x000afe92 bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afe96 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afe98 mov r1, r8 | r1 = r8;
0x000afe9a movs r2, 2 | r2 = 2;
0x000afe9c bl 0x423dc | fcn_000423dc (r0, r1, r2);
0x000afea0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000afea2 mov r2, sb | r2 = sb;
0x000afea4 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afea6 ldr r1, [pc, 0x204] |
0x000afea8 str r3, [sp] | *(sp) = r3;
0x000afeaa mov.w r3, 1 | r3 = 1;
0x000afeae strb r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000afeb0 movs r3, 1 | r3 = 1;
0x000afeb2 strd r4, r3, [sp, 4] | __asm ("strd r4, r3, [var_8h]");
0x000afeb6 add r1, pc | r1 = 0x15ff68;
0x000afeb8 mov r3, sb | r3 = sb;
0x000afeba bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afebe movs r3, 1 | r3 = 1;
0x000afec0 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000afec2 str r3, [sp] | *(sp) = r3;
0x000afec4 mov r2, sb | r2 = sb;
0x000afec6 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000afec8 mov r3, r4 | r3 = r4;
0x000afeca bl 0xab4d8 | fcn_000ab4d8 (r0);
0x000afece b 0xafc08 | goto label_5;
| label_31:
0x000afed0 mov r3, r6 | r3 = r6;
0x000afed2 mov r2, sb | r2 = sb;
0x000afed4 str r6, [sp, 0x20] | var_20h = r6;
0x000afed6 mov sb, r5 | sb = r5;
0x000afed8 ldrd r6, fp, [sp, 0x30] | __asm ("ldrd r6, fp, [var_30h]");
0x000afedc mov r5, r2 | r5 = r2;
0x000afede cmp r3, 0 |
| if (r3 == 0) {
0x000afee0 beq 0xaffd2 | goto label_35;
| }
| label_11:
0x000afee2 ldrd r3, r2, [sp, 0x20] | __asm ("ldrd r3, r2, [var_24h]");
0x000afee6 movs r1, 0x61 | r1 = 0x61;
0x000afee8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000afeea str r2, [sp] | *(sp) = r2;
0x000afeec ldr r2, [sp, 0x18] | r2 = var_18h;
0x000afeee bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000afef2 cmp.w sb, 0 |
| if (sb == 0) {
0x000afef6 beq 0xafff0 | goto label_36;
| }
| label_14:
0x000afef8 ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x000afefc movs r1, 0x8a | r1 = 0x8a;
0x000afefe ldr r2, [sp, 0x18] | r2 = var_18h;
0x000aff00 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000aff02 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000aff06 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000aff08 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000aff0a bl 0x42ebc | fcn_00042ebc (r0, r1, r2, r3, r4);
| label_12:
0x000aff0e ldr r2, [sp, 0x14] | r2 = var_14h;
0x000aff10 ldr r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
0x000aff12 cmp r3, 0 |
| if (r3 > 0) {
0x000aff14 ble 0xaff26 |
0x000aff16 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x000aff18 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000aff1c add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000aff20 movs r3, 2 | r3 = 2;
0x000aff22 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x000aff26 ldr r7, [sp, 0x14] | r7 = var_14h;
0x000aff28 movs r3, 0 | r3 = 0;
0x000aff2a ldr r4, [sp, 0x28] | r4 = var_28h;
0x000aff2c movs r1, 0x26 | r1 = 0x26;
0x000aff2e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000aff30 str r3, [sp] | *(sp) = r3;
0x000aff32 mov r0, r7 | r0 = r7;
0x000aff34 adds r3, r4, 1 | r3 = r4 + 1;
0x000aff36 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000aff3a ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000aff3c cmp r4, 0 |
0x000aff3e ldr r1, [sp, 0x14] | r1 = var_14h;
0x000aff40 mov r3, r7 | r3 = r7;
0x000aff42 itt lt |
| if (r4 >= 0) {
0x000aff44 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r4 < 0) {
0x000aff48 str r3, [sp, 0x28] | var_28h = r3;
| }
0x000aff4a ldr r3, [r1] | r3 = *(r1);
0x000aff4c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x000aff50 cbnz r3, 0xaff7c | goto label_37;
| }
0x000aff52 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x000aff54 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000aff56 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000aff5a add.w r3, r3, r1, lsl 3 | r3 += (r1 << 3);
| do {
0x000aff5e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000aff60 b 0xafdce | goto label_4;
| label_30:
0x000aff62 movs r2, 0 | r2 = 0;
0x000aff64 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000aff66 movs r1, 0x4b | r1 = 0x4b;
0x000aff68 str r2, [sp] | *(sp) = r2;
0x000aff6a bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000aff6e b 0xafd28 | goto label_6;
| label_33:
0x000aff70 mov.w r0, -1 | r0 = -1;
0x000aff74 b 0xafd8e | goto label_7;
| label_32:
0x000aff76 mov.w lr, -1 | lr = -1;
0x000aff7a b 0xafd78 | goto label_8;
| label_37:
0x000aff7c ldr r3, [pc, 0x130] |
0x000aff7e add r3, pc | r3 = 0x160032;
0x000aff80 adds r3, 4 | r3 += 4;
0x000aff82 b 0xaff5e |
| } while (1);
| label_23:
0x000aff84 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x000aff86 cmp r3, 0 |
0x000aff88 beq 0xb0002 |
| while (1) {
0x000aff8a ldr r0, [sp, 0x10] | r0 = var_10h;
0x000aff8c bl 0x41ad0 | fcn_00041ad0 (r0, r1);
0x000aff90 str r0, [sp, 0x14] | var_14h = r0;
0x000aff92 b 0xafc2a | goto label_9;
| label_24:
0x000aff94 mov r3, r2 | r3 = r2;
0x000aff96 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000aff98 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000aff9a movs r1, 0x87 | r1 = 0x87;
0x000aff9c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000affa0 bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000affa4 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000affa6 ldrsh.w ip, [r7, 0x22] | ip = *((r7 + 0x22));
0x000affaa ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000affac cmp.w ip, 0 |
0x000affb0 add r3, ip | r3 += ip;
0x000affb2 add.w r3, r3, 1 | r3++;
0x000affb6 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000affb8 it le |
| if (ip > 0) {
0x000affba addle r2, r8, 2 | r2 = r8 + 2;
| }
0x000affbe str r3, [sp, 0x24] | var_24h = r3;
0x000affc0 it le |
| if (ip > 0) {
0x000affc2 strle r2, [sp, 0x18] | var_18h = r2;
| }
| if (ip > 0) {
0x000affc4 ble 0xaffd6 |
0x000affc6 add.w r3, r8, 2 | r3 = r8 + 2;
0x000affca str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x000affce str r3, [sp, 0x18] | var_18h = r3;
0x000affd0 b 0xafcf4 | goto label_10;
| label_35:
0x000affd2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000affd4 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
| }
| label_13:
0x000affd6 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000affd8 adds r3, 1 | r3++;
0x000affda ldr r0, [sp, 0x14] | r0 = var_14h;
0x000affdc movs r1, 0x4b | r1 = 0x4b;
0x000affde str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000affe0 movs r2, 0 | r2 = 0;
0x000affe2 movs r3, 1 | r3 = 1;
0x000affe4 str r2, [sp] | *(sp) = r2;
0x000affe6 str r3, [sp, 0x20] | var_20h = r3;
0x000affe8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000affea bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000affee b 0xafee2 | goto label_11;
| label_36:
0x000afff0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000afff2 movs r1, 0x80 | r1 = 0x80;
0x000afff4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000afff6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000afff8 str r3, [sp] | *(sp) = r3;
0x000afffa ldr r3, [sp, 0x24] | r3 = var_24h;
0x000afffc bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000afffe ldc2 p7, c14, [lr, -0x214]! | __asm ("ldc2 p7, c14, [lr, -0x214]!");
0x000b0000 b 0xaff0e | goto label_12;
0x000b0002 ldr r3, [r2] | r3 = *(r2);
0x000b0004 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000b0006 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000b0008 itt pl |
| if (r3 < r3) {
0x000b000a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000b000c strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x000b000e b 0xaff8a |
| }
| label_28:
0x000b0010 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000b0012 cmp r2, 0 |
| if (r2 == 0) {
0x000b0014 beq 0xaffd6 | goto label_13;
| }
0x000b0016 ldrd r3, r2, [sp, 0x20] | __asm ("ldrd r3, r2, [var_24h]");
0x000b001a movs r1, 0x61 | r1 = 0x61;
0x000b001c ldr r0, [sp, 0x14] | r0 = var_14h;
0x000b001e str r0, [r0, 0x50] | *((r0 + 0x50)) = r0;
0x000b0020 asrs r6, r7, 0x1d | r6 = r7 >> 0x1d;
0x000b0022 bl 0x19a7c | void (*0x19a7c)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
0x000b0026 b 0xafef8 | goto label_14;
| label_27:
0x000b0028 ldrsh.w ip, [r7, 0x22] | ip = *((r7 + 0x22));
0x000b002c adds r3, 1 | r3++;
0x000b002e ldr r1, [sp, 0x10] | r1 = var_10h;
0x000b0030 str r3, [sp, 0x24] | var_24h = r3;
0x000b0032 cmp.w ip, 0 |
0x000b0036 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
| if (ip > 0) {
0x000b0038 ble 0xb0044 |
0x000b003a add.w r3, r8, 2 | r3 = r8 + 2;
0x000b003e str r2, [sp, 0x20] | var_20h = r2;
0x000b0040 str r3, [sp, 0x18] | var_18h = r3;
0x000b0042 b 0xafcf4 | goto label_10;
| }
0x000b0044 add.w r3, r8, 2 | r3 = r8 + 2;
0x000b0048 str r3, [sp, 0x18] | var_18h = r3;
0x000b004a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b004c b 0xaffd6 | goto label_13;
| label_26:
0x000b004e movs r3, 0 | r3 = 0;
0x000b0050 ldrh r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x000b0052 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb2938 */
| #include <stdint.h>
|
; (fcn) fcn.000b2938 () | void fcn_000b2938 (int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_208h, int16_t arg1, int16_t arg2, arithmetic arg3, arithmetic arg4) {
| int16_t var_0h_2;
| int32_t var_4h_2;
| int32_t var_4h_3;
| int32_t var_ch_2;
| int32_t var_ch_3;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000b2938 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b293c sub sp, 0x34 |
0x000b293e strd r2, r3, [sp, 0x14] | __asm ("strd r2, r3, [var_14h]");
0x000b2942 mov r4, r0 | r4 = r0;
0x000b2944 mov r5, r1 | r5 = r1;
0x000b2946 ldr r2, [pc, 0x30c] |
0x000b2948 ldr r0, [sp, 0x58] | r0 = *(arg_58h);
0x000b294a ldr r3, [pc, 0x30c] | r3 = *(0xb2c5a);
0x000b294c add r2, pc | r2 = 0x1655a6;
0x000b294e str r0, [sp] | *(sp) = r0;
0x000b2950 ldr r3, [r2, r3] |
0x000b2952 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000b2954 ldr r3, [r3] | r3 = imp.atan;
0x000b2956 str r3, [sp, 0x2c] | var_2ch = r3;
0x000b2958 mov.w r3, 0 | r3 = 0;
0x000b295c movs r3, 0 | r3 = 0;
0x000b295e str r3, [sp, 0x28] | var_28h = r3;
0x000b2960 ldr r3, [sp, 0x5c] | r3 = *(arg_5ch);
0x000b2962 str r3, [sp, 4] | var_4h = r3;
0x000b2964 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x000b2966 str r3, [sp, 8] | var_8h = r3;
0x000b2968 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x000b296a str r3, [sp, 0xc] | var_ch = r3;
0x000b296c ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x000b296e str r3, [sp, 0x10] | var_10h = r3;
| if (r0 != 0) {
0x000b2970 cbz r0, 0xb297a |
0x000b2972 ldr r3, [pc, 0x2e8] |
0x000b2974 add r3, pc |
0x000b2976 ldr r3, [r3, 0x50] | r3 = imp.atan;
0x000b2978 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000b297a ldrb.w r3, [r4, 0x5f] | r3 = *((r4 + 0x5f));
0x000b297e cmp r3, 0 |
| if (r3 == 0) {
0x000b2980 beq.w 0xb2b78 | goto label_10;
| }
| label_5:
0x000b2984 add r1, sp, 0x28 | r1 += var_28h;
0x000b2986 mov r0, r4 | r0 = r4;
0x000b2988 bl 0x97cac | r0 = fcn_00097cac (r0, r1);
0x000b298c mov r6, r0 | r6 = r0;
0x000b298e cmp r0, 0 |
| if (r0 == 0) {
0x000b2990 beq 0xb2a58 | goto label_11;
| }
| label_1:
0x000b2992 movs r7, 0 | r7 = 0;
0x000b2994 mov sl, r7 | sl = r7;
0x000b2996 mov sb, r7 | sb = r7;
0x000b2998 mov r5, r7 | r5 = r7;
0x000b299a mov fp, r7 |
0x000b299c mov r8, r7 | r8 = r7;
| label_2:
0x000b299e ldrb.w r3, [r4, 0x5f] | r3 = *((r4 + 0x5f));
0x000b29a2 cmp r3, 0 |
| if (r3 == 0) {
0x000b29a4 beq.w 0xb2b80 | goto label_12;
| }
| label_6:
0x000b29a8 ldr r3, [sp] | r3 = *(sp);
| if (r3 != 0) {
0x000b29aa cbz r3, 0xb29b0 |
0x000b29ac str.w fp, [r3] | __asm ("str.w fp, [r3]");
| }
0x000b29b0 ldr r3, [sp, 4] | r3 = var_4h;
| if (r3 != 0) {
0x000b29b2 cbz r3, 0xb29b6 |
0x000b29b4 str r5, [r3] | *(r3) = r5;
| }
0x000b29b6 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x000b29b8 cbz r3, 0xb29be |
0x000b29ba str.w sb, [r3] | __asm ("str.w sb, [r3]");
| }
0x000b29be ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x000b29c0 cbz r3, 0xb29c6 |
0x000b29c2 str.w sl, [r3] | __asm ("str.w sl, [r3]");
| }
0x000b29c6 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x000b29c8 cbz r3, 0xb29cc |
0x000b29ca str r7, [r3] | *(r3) = r7;
| }
0x000b29cc orrs.w r8, r8, r6 | r8 |= r6;
0x000b29d0 ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r8 == r8) {
0x000b29d2 beq 0xb2a36 | goto label_13;
| }
0x000b29d4 subs r5, r6, 0 | r5 = r6 - 0;
0x000b29d6 it ne |
0x000b29d8 movne r5, 1 | r5 = 1;
| while (1) {
0x000b29da mov r2, r3 | r2 = r3;
| if (r3 != 0) {
0x000b29dc cbz r3, 0xb29e2 |
0x000b29de ldr r2, [pc, 0x280] |
0x000b29e0 add r2, pc | r2 = 0x165646;
| }
0x000b29e2 mov r1, r6 | r1 = r6;
0x000b29e4 mov r0, r4 | r0 = r4;
0x000b29e6 bl 0x4a1f0 | fcn_0004a1f0 (r0, r1, r2);
0x000b29ea ldr r1, [sp, 0x28] | r1 = var_28h;
| if (r1 != 0) {
0x000b29ec cbz r1, 0xb29f4 |
0x000b29ee mov r0, r4 | r0 = r4;
0x000b29f0 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000b29f4 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x000b29f8 cmp r3, 0 |
0x000b29fa it ne |
| if (r3 == 0) {
0x000b29fc orrne r5, r5, 1 | r5 |= 1;
| }
| if (r5 != 0) {
0x000b2a00 cbz r5, 0xb2a0c |
0x000b2a02 mov r1, r6 | r1 = r6;
0x000b2a04 mov r0, r4 | r0 = r4;
0x000b2a06 bl 0x2e764 | r0 = fcn_0002e764 (r0, r1);
0x000b2a0a mov r5, r0 | r5 = r0;
| }
0x000b2a0c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 != 0) {
0x000b2a0e cbz r0, 0xb2a18 |
0x000b2a10 ldr r3, [pc, 0x250] |
0x000b2a12 add r3, pc |
0x000b2a14 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000b2a16 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000b2a18 ldr r2, [pc, 0x24c] |
0x000b2a1a ldr r3, [pc, 0x23c] | r3 = *(0xb2c5a);
0x000b2a1c add r2, pc | r2 = 0x165688;
0x000b2a1e ldr r3, [r2, r3] | r3 = imp.atan;
0x000b2a20 ldr r2, [r3] | r2 = imp.atan;
0x000b2a22 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b2a24 eors r2, r3 | r2 ^= r3;
0x000b2a26 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b2a2a bne.w 0xb2c4e | goto label_14;
| }
0x000b2a2e mov r0, r5 | r0 = r5;
0x000b2a30 add sp, 0x34 |
0x000b2a32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| if (r3 != 0) {
| label_13:
0x000b2a36 cbz r3, 0xb2a40 |
0x000b2a38 mov r1, r3 | r1 = r3;
0x000b2a3a mov r0, r4 | r0 = r4;
0x000b2a3c bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000b2a40 ldr r1, [pc, 0x228] |
0x000b2a42 mov r0, r4 | r0 = r4;
0x000b2a44 ldrd r2, r3, [sp, 0x14] | __asm ("ldrd r2, r3, [var_14h]");
0x000b2a48 movs r5, 1 | r5 = 1;
0x000b2a4a mov r6, r5 | r6 = r5;
0x000b2a4c add r1, pc | r1 = 0x1656bc;
0x000b2a4e bl 0x4a320 | r0 = fcn_0004a320 (r0);
0x000b2a52 mov r3, r0 | r3 = r0;
0x000b2a54 str r0, [sp, 0x28] | var_28h = r0;
0x000b2a56 b 0xb29da |
| }
| label_11:
0x000b2a58 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000b2a5a mov r2, r5 | r2 = r5;
0x000b2a5c mov r0, r4 | r0 = r4;
0x000b2a5e bl 0x56ec0 | r0 = fcn_00056ec0 (r0, r1, r2, r3);
0x000b2a62 mov r8, r0 | r8 = r0;
0x000b2a64 cmp r0, 0 |
| if (r0 == 0) {
0x000b2a66 beq.w 0xb2ba2 | goto label_15;
| }
0x000b2a6a ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x000b2a6e cmp r3, 2 |
| if (r3 == 2) {
0x000b2a70 beq.w 0xb2bae | goto label_16;
| }
0x000b2a74 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000b2a76 cmp r3, 0 |
| if (r3 == 0) {
0x000b2a78 beq.w 0xb2b88 | goto label_17;
| }
0x000b2a7c ldrsh.w sb, [r0, 0x22] | sb = *((r0 + 0x22));
0x000b2a80 cmp.w sb, 0 |
| if (sb <= 0) {
0x000b2a84 ble.w 0xb2c0a | goto label_18;
| }
0x000b2a88 ldr r1, [pc, 0x1e4] |
0x000b2a8a mov r7, r6 | r7 = r6;
0x000b2a8c ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000b2a8e add.w fp, r3, -1 |
0x000b2a92 add r1, pc | r1 = 0x165706;
| label_0:
0x000b2a94 ldr r5, [r0] | r5 = *(r0);
0x000b2a96 mov sl, r0 | sl = r0;
0x000b2a98 mov lr, fp | lr = fp;
0x000b2a9a add.w ip, r5, -1 |
| do {
| label_3:
0x000b2a9e ldrb r3, [ip, 1]! | r3 = *((ip += 1));
0x000b2aa2 ldrb r2, [lr, 1]! | r2 = *((lr += 1));
0x000b2aa6 cmp r3, r2 |
| if (r3 == r2) {
0x000b2aa8 beq 0xb2b12 | goto label_19;
| }
0x000b2aaa add r3, r1 | r3 += r1;
0x000b2aac add r2, r1 | r2 += r1;
0x000b2aae ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b2ab2 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000b2ab6 cmp r3, r2 |
0x000b2ab8 beq 0xb2a9e |
| } while (r3 == r2);
0x000b2aba adds r7, 1 | r7++;
0x000b2abc adds r0, 0xc | r0 += 0xc;
0x000b2abe cmp sb, r7 |
| if (sb != r7) {
0x000b2ac0 bne 0xb2a94 | goto label_0;
| }
| label_4:
0x000b2ac2 ldr.w r5, [r8, 0x1c] | r5 = *((r8 + 0x1c));
0x000b2ac6 ands r5, r5, 0x80 | r5 &= 0x80;
| if (r5 != r5) {
0x000b2aca bne.w 0xb2992 | goto label_1;
| }
0x000b2ace ldr r0, [sp, 0x18] | r0 = var_18h;
0x000b2ad0 bl 0x34f9c | r0 = fcn_00034f9c (r0);
0x000b2ad4 mov sb, r0 | sb = r0;
0x000b2ad6 cmp r0, 0 |
| if (r0 == 0) {
0x000b2ad8 beq.w 0xb2bfe | goto label_20;
| }
0x000b2ada strh r1, [r2, 4] | *((r2 + 4)) = r1;
0x000b2adc ldrsh.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000b2ae0 cmp r3, 0 |
0x000b2ae2 mov r7, r3 | r7 = r3;
| if (r3 < 0) {
0x000b2ae4 blt.w 0xb2c26 | goto label_21;
| }
0x000b2ae8 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000b2aec ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x000b2af0 lsls r2, r2, 2 | r2 <<= 2;
0x000b2af2 adds.w sl, r1, r2 | sl = r1 + r2;
| if (sl != r1) {
0x000b2af6 bne.w 0xb2c4a | goto label_22;
| }
0x000b2afa ldr r5, [pc, 0x178] |
0x000b2afc mov r7, sl | r7 = sl;
0x000b2afe ldr.w fp, [pc, 0x178] |
0x000b2b02 mov sb, sl | sb = sl;
0x000b2b04 mov.w sl, 1 | sl = 1;
0x000b2b08 add r5, pc |
0x000b2b0a add.w r5, r5, 0x780 | r5 = 0x165f02;
0x000b2b0e add fp, pc | fp = 0x16578c;
0x000b2b10 b 0xb299e | goto label_2;
| label_19:
0x000b2b12 cmp r3, 0 |
| if (r3 != 0) {
0x000b2b14 bne 0xb2a9e | goto label_3;
| }
0x000b2b16 cmp sb, r7 |
| if (sb == r7) {
0x000b2b18 beq 0xb2ac2 | goto label_4;
| }
0x000b2b1a ldrsh.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
| label_8:
0x000b2b1e ldrh.w r2, [sl, 0xa] | r2 = *((sl + 0xa));
0x000b2b22 ldrb.w sb, [sl, 4] | sb = *((sl + 4));
0x000b2b26 ands r1, r2, 4 | r1 = r2 & 4;
| if (r1 != r2) {
0x000b2b2a bne 0xb2bce | goto label_23;
| }
0x000b2b2c cmp.w sb, 0xf |
0x000b2b30 it ls |
| if (sb > 0xf) {
0x000b2b32 movls fp, r1 |
| }
| if (sb > 0xf) {
0x000b2b34 bhi 0xb2bbc | goto label_24;
| }
| label_7:
0x000b2b36 ands sb, sb, 0xf | sb &= 0xf;
0x000b2b3a and sl, r2, 1 | sl = r2 & 1;
0x000b2b3e it ne |
| if (sb == sb) {
0x000b2b40 movne sb, 1 | sb = 1;
| }
0x000b2b44 ands r2, r2, 0x200 | r2 &= 0x200;
| if (r2 == r2) {
0x000b2b48 beq 0xb2be8 | goto label_25;
| }
0x000b2b4a ldrb r2, [r5] | r2 = *(r5);
| if (r2 == 0) {
0x000b2b4c cbz r2, 0xb2b56 | goto label_26;
| }
| do {
0x000b2b4e ldrb r2, [r5, 1]! | r2 = *((r5 += 1));
0x000b2b52 cmp r2, 0 |
0x000b2b54 bne 0xb2b4e |
| } while (r2 != 0);
| if (r1 == 0) {
| label_26:
0x000b2b56 cbz r1, 0xb2b60 | goto label_27;
| }
| do {
0x000b2b58 ldrb r2, [r5, 1]! | r2 = *((r5 += 1));
0x000b2b5c cmp r2, 0 |
0x000b2b5e bne 0xb2b58 |
| } while (r2 != 0);
| label_27:
0x000b2b60 cmp r3, r7 |
0x000b2b62 add.w r5, r5, 1 | r5++;
0x000b2b66 it ne |
| if (r3 != r7) {
0x000b2b68 movne r7, 0 | r7 = 0;
| goto label_28;
| }
| if (r3 != r7) {
| label_28:
0x000b2b6a bne.w 0xb299e | goto label_2;
| }
0x000b2b6e ldr.w r7, [r8, 0x1c] | r7 = *((r8 + 0x1c));
0x000b2b72 ubfx r7, r7, 3, 1 | r7 = (r7 >> 3) & ((1 << 1) - 1);
0x000b2b76 b 0xb299e | goto label_2;
| label_10:
0x000b2b78 mov r0, r4 | r0 = r4;
0x000b2b7a bl 0x2dd38 | fcn_0002dd38 (r0);
0x000b2b7e b 0xb2984 | goto label_5;
| label_12:
0x000b2b80 mov r0, r4 | r0 = r4;
0x000b2b82 bl 0x2cd4c | fcn_0002cd4c (r0);
0x000b2b86 b 0xb29a8 | goto label_6;
| label_17:
0x000b2b88 ldr r5, [pc, 0xf0] |
0x000b2b8a mov.w sl, 1 | sl = 1;
0x000b2b8e ldr.w fp, [pc, 0xf0] |
0x000b2b92 ldr.w sb, [sp, 0x18] | sb = var_18h;
0x000b2b96 add r5, pc |
0x000b2b98 add.w r5, r5, 0x780 | r5 = 0x165f96;
0x000b2b9c add fp, pc | fp = 0x165822;
0x000b2b9e mov r7, sb | r7 = sb;
0x000b2ba0 b 0xb299e | goto label_2;
| label_15:
0x000b2ba2 mov r7, r0 | r7 = r0;
0x000b2ba4 mov sl, r0 | sl = r0;
0x000b2ba6 mov sb, r0 | sb = r0;
0x000b2ba8 mov r5, r0 | r5 = r0;
0x000b2baa mov fp, r0 |
0x000b2bac b 0xb299e | goto label_2;
| label_16:
0x000b2bae mov r7, r6 | r7 = r6;
0x000b2bb0 mov sl, r6 | sl = r6;
0x000b2bb2 mov sb, r6 | sb = r6;
0x000b2bb4 mov r5, r6 | r5 = r6;
0x000b2bb6 mov fp, r6 |
0x000b2bb8 mov r8, r6 | r8 = r6;
0x000b2bba b 0xb299e | goto label_2;
| label_24:
0x000b2bbc ldr r0, [pc, 0xc4] |
0x000b2bbe lsr.w ip, sb, 4 |
0x000b2bc2 add.w ip, ip, -1 |
0x000b2bc4 subs r4, 0xff | r4 -= 0xff;
0x000b2bc6 add r0, pc | r0 = 0x16584e;
0x000b2bc8 ldr.w fp, [r0, ip, lsl 2] | fp = imp.atan;
0x000b2bca add sp, 0xb0 |
0x000b2bcc b 0xb2b36 | goto label_7;
| label_23:
0x000b2bce mov r0, r5 | r0 = r5;
0x000b2bd0 strd r1, r3, [sp, 0x20] | __asm ("strd r1, r3, [var_24h]");
0x000b2bd4 str r2, [sp, 0x1c] | var_1ch = r2;
0x000b2bd6 blx 0x65dc | strcmp (r0, r1);
0x000b2bda adds r0, 1 | r0++;
0x000b2bdc ldrd r2, r1, [sp, 0x1c] | __asm ("ldrd r2, r1, [var_1ch]");
0x000b2be0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b2be2 add.w fp, r5, r0 |
0x000b2be6 b 0xb2b36 | goto label_7;
| label_25:
0x000b2be8 cmp r3, r7 |
| if (r3 != r7) {
0x000b2bea bne 0xb2c3e | goto label_29;
| }
0x000b2bec ldr r5, [pc, 0x98] |
0x000b2bee ldr.w r7, [r8, 0x1c] | r7 = *((r8 + 0x1c));
0x000b2bf2 add r5, pc |
0x000b2bf4 ubfx r7, r7, 3, 1 | r7 = (r7 >> 3) & ((1 << 1) - 1);
0x000b2bf8 add.w r5, r5, 0x780 | r5 = 0x165ffe;
0x000b2bfc b 0xb299e | goto label_2;
| label_20:
0x000b2bfe mov r7, r0 | r7 = r0;
0x000b2c00 mov sl, r0 | sl = r0;
0x000b2c02 mov r5, r0 | r5 = r0;
0x000b2c04 mov fp, r0 |
0x000b2c06 mov r8, r0 | r8 = r0;
0x000b2c08 b 0xb299e | goto label_2;
| if (r3 == r7) {
| label_18:
0x000b2c0a beq.w 0xb2ac2 | goto label_4;
| }
0x000b2c0e ldr r5, [pc, 0x7c] |
0x000b2c10 mov r7, r6 | r7 = r6;
0x000b2c12 ldr.w fp, [pc, 0x7c] |
0x000b2c16 mov sb, r6 | sb = r6;
0x000b2c18 mov.w sl, 1 | sl = 1;
0x000b2c1c add r5, pc |
0x000b2c1e add.w r5, r5, 0x780 | r5 = 0x16602e;
0x000b2c22 add fp, pc | fp = 0x1658b8;
0x000b2c24 b 0xb299e | goto label_2;
| label_21:
0x000b2c26 mov r7, r5 | r7 = r5;
0x000b2c28 ldr r5, [pc, 0x68] |
0x000b2c2a ldr.w fp, [pc, 0x6c] |
0x000b2c2e mov sb, r7 | sb = r7;
0x000b2c30 mov.w sl, 1 | sl = 1;
0x000b2c34 add r5, pc |
0x000b2c36 add.w r5, r5, 0x780 | r5 = 0x16604c;
0x000b2c3a add fp, pc | fp = 0x1658d8;
0x000b2c3c b 0xb299e | goto label_2;
| label_29:
0x000b2c3e ldr r5, [pc, 0x5c] |
0x000b2c40 mov r7, r2 | r7 = r2;
0x000b2c42 add r5, pc |
0x000b2c44 add.w r5, r5, 0x780 | r5 = 0x166064;
0x000b2c48 b 0xb299e | goto label_2;
| label_22:
0x000b2c4a ldr r5, [r1, r2] | r5 = *((r1 + r2));
0x000b2c4c b 0xb2b1e | goto label_8;
| label_14:
0x000b2c4e blx 0x6430 | fcn_00006430 ();
0x000b2c52 nop |
0x000b2c54 strb r4, [r1, 0x11] | *((r1 + 0x11)) = r4;
0x000b2c56 movs r3, r0 | r3 = r0;
0x000b2c58 lsls r4, r6, 8 | r4 = r6 << 8;
0x000b2c5a movs r0, r0 |
0x000b2c5c ldrb r0, [r4, 4] | r0 = *((r4 + 4));
0x000b2c5e movs r3, r0 | r3 = r0;
0x000b2c60 blx r2 | r0 = uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
0x000b2c62 movs r1, r0 | r1 = r0;
0x000b2c64 ldrb r2, [r0, 2] | r2 = *((r0 + 2));
0x000b2c66 movs r3, r0 | r3 = r0;
0x000b2c68 strb r4, [r7, 0xd] | *((r7 + 0xd)) = r4;
0x000b2c6a movs r3, r0 | r3 = r0;
0x000b2c6c str r0, [r3, 0x68] | *((r3 + 0x68)) = r0;
0x000b2c6e movs r2, r0 | r2 = r0;
0x000b2c70 str r3, [sp, 0x208] | *(arg_208h) = r3;
0x000b2c72 movs r2, r0 | r2 = r0;
0x000b2c74 adr r4, 0x10 | r4 = 0x10;
0x000b2c76 movs r2, r0 | r2 = r0;
0x000b2c78 ldrsb r6, [r1, r0] | r6 = *((r1 + r0));
0x000b2c7a movs r1, r0 | r1 = r0;
0x000b2c7c adr r3, 0x1d8 | r3 = 0x1d8;
0x000b2c7e movs r2, r0 | r2 = r0;
0x000b2c80 strb r0, [r0, r6] | *((r0 + r6)) = r0;
0x000b2c82 movs r1, r0 | r1 = r0;
0x000b2c84 ldrh r6, [r0, 0x18] | r6 = *((r0 + 0x18));
0x000b2c86 movs r3, r0 | r3 = r0;
0x000b2c88 adr r3, 0x68 | r3 = 0x68;
0x000b2c8a movs r2, r0 | r2 = r0;
0x000b2c8c adr r2, 0x3c0 | r2 = 0x3c0;
0x000b2c8e movs r2, r0 | r2 = r0;
0x000b2c90 strb r2, [r7, r3] | *((r7 + r3)) = r2;
0x000b2c92 movs r1, r0 | r1 = r0;
0x000b2c94 adr r2, 0x360 | r2 = 0x360;
0x000b2c96 movs r2, r0 | r2 = r0;
0x000b2c98 strb r2, [r4, r3] | *((r4 + r3)) = r2;
0x000b2c9a movs r1, r0 | r1 = r0;
0x000b2c9c adr r2, 0x328 | r2 = 0x328;
0x000b2c9e movs r2, r0 | r2 = r0;
0x000b2ca0 push {r4, r5, r6, lr} |
0x000b2ca2 movs r5, 0 | r5 = 0;
0x000b2ca4 ldrb.w r3, [r0, 0xed] | r3 = *((r0 + 0xed));
0x000b2ca8 sub sp, 0x18 |
0x000b2caa str r5, [r0, 0x34] | *((r0 + 0x34)) = r5;
0x000b2cac cmp r3, 2 |
| if (r3 == 2) {
0x000b2cae beq 0xb2cb6 | goto label_30;
| }
| label_9:
0x000b2cb0 movs r0, 0 | r0 = 0;
| do {
0x000b2cb2 add sp, 0x18 |
0x000b2cb4 pop {r4, r5, r6, pc} |
| label_30:
0x000b2cb6 ldr r1, [r0, 0x14] | r1 = *((r0 + 0x14));
0x000b2cb8 mov r4, r0 | r4 = r0;
0x000b2cba ldr r0, [pc, 0x38] |
0x000b2cbc add r0, pc | r0 = 0x1659b6;
0x000b2cbe bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b2cc2 mov r6, r0 | r6 = r0;
0x000b2cc4 movs r0, 7 | r0 = 7;
0x000b2cc6 cmp r6, 0 |
0x000b2cc8 beq 0xb2cb2 |
| } while (r6 == 0);
0x000b2cca mov r3, r5 | r3 = r5;
0x000b2ccc strd r5, r5, [sp, 0xc] | __asm ("strd r5, r5, [var_ch_2]");
0x000b2cd0 strd r5, r5, [sp, 4] | __asm ("strd r5, r5, [var_4h_2]");
0x000b2cd4 mov r2, r6 | r2 = r6;
0x000b2cd6 str r5, [sp] | *(sp) = r5;
0x000b2cd8 ldrd r0, r1, [r4, 0xc] | __asm ("ldrd r0, r1, [r4, 0xc]");
0x000b2cdc bl 0xb2938 | r0 = fcn_000b2938 (r0, r1, r2, r3, r4, r5, r6);
0x000b2ce0 mov r5, r0 | r5 = r0;
0x000b2ce2 mov r0, r6 | r0 = r6;
0x000b2ce4 bl 0x26dbc | r0 = fcn_00026dbc (r0);
0x000b2ce8 clz r0, r5 | r0 &= r5;
0x000b2cec lsrs r0, r0, 5 | r0 >>= 5;
0x000b2cee strb.w r0, [r4, 0xed] | *((r4 + 0xed)) = r0;
0x000b2cf2 b 0xb2cb0 | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb4218 */
| #include <stdint.h>
|
; (fcn) fcn.000b4218 () | void fcn_000b4218 (int16_t arg1) {
| r0 = arg1;
0x000b4218 push {r3, r4, r5, r6, r7, lr} |
0x000b421a mov r6, r0 | r6 = r0;
0x000b421c ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x000b421e ldr r7, [r6] | r7 = *(r6);
| if (r0 == 0) {
0x000b4220 cbz r0, 0xb4256 | goto label_0;
| }
0x000b4222 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x000b4224 cmp r2, 0 |
| if (r2 <= 0) {
0x000b4226 ble 0xb424e | goto label_1;
| }
0x000b4228 movs r4, 0 | r4 = 0;
| do {
0x000b422a add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x000b422e adds r4, 1 | r4++;
0x000b4230 add.w r3, r0, r3, lsl 3 | r3 = r0 + (r3 << 3);
0x000b4234 ldr r5, [r3, 0x10] | r5 = *((r3 + 0x10));
| if (r5 != 0) {
0x000b4236 cbz r5, 0xb424a |
0x000b4238 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| if (r3 != 0) {
0x000b423a cbz r3, 0xb4240 |
0x000b423c ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000b423e blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x000b4240 mov r0, r5 | r0 = r5;
0x000b4242 bl 0x26dbc | r0 = fcn_00026dbc (r0);
0x000b4246 ldrd r2, r0, [r6, 0xc] | __asm ("ldrd r2, r0, [r6, 0xc]");
| }
0x000b424a cmp r2, r4 |
0x000b424c bgt 0xb422a |
| } while (r2 > r4);
| label_1:
0x000b424e bl 0x26dbc | fcn_00026dbc (r0);
0x000b4252 movs r3, 0 | r3 = 0;
0x000b4254 str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
| label_0:
0x000b4256 add.w r4, r6, 0x3c | r4 = r6 + 0x3c;
0x000b425a add.w r5, r6, 0x50 | r5 = r6 + 0x50;
| do {
0x000b425e ldr r1, [r4, 4]! | r1 = *((r4 += 4));
| if (r1 != 0) {
0x000b4262 cbz r1, 0xb4272 |
0x000b4264 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b4266 mov r0, r7 | r0 = r7;
0x000b4268 subs r3, 1 | r3--;
0x000b426a str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 != 0) {
0x000b426c cbnz r3, 0xb4272 | goto label_2;
| }
0x000b426e bl 0xb4180 | fcn_000b4180 (r0, r1);
| }
| label_2:
0x000b4272 cmp r4, r5 |
0x000b4274 bne 0xb425e |
| } while (r4 != r5);
0x000b4276 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x000b4278 bl 0x26dbc | fcn_00026dbc (r0);
0x000b427a stc2 p10, c6, [r0, 0x1d0]! | __asm ("stc2 p10, c6, [r0, 0x1d0]!");
0x000b427e movs r2, 0xf4 | r2 = 0xf4;
0x000b4280 movs r1, 0 | r1 = 0;
0x000b4282 adds r0, r6, 4 | r0 = r6 + 4;
0x000b4284 blx 0x62ec | fcn_000062ec ();
0x000b4288 str r7, [r6] | *(r6) = r7;
0x000b428a str r4, [r6, 0x24] | *((r6 + 0x24)) = r4;
0x000b428c pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb42cc */
| #include <stdint.h>
|
; (fcn) fcn.000b42cc () | void fcn_000b42cc (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000b42cc push {r0, r1, sb, fp, sp, lr} |
0x000b42d0 blx lr | lr (r0);
0x000b42d2 add.w lr, r1, r1, lsl 1 | lr = r1 + (r1 << 1);
0x000b42d6 mov r7, r2 | r7 = r2;
0x000b42d8 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000b42dc mov r5, r1 | r5 = r1;
0x000b42de add.w lr, r3, lr, lsl 3 | lr = r3 + (lr << 3);
0x000b42e2 add.w ip, r3, r2, lsl 3 |
0x000b42e6 mov sl, lr | sl = lr;
0x000b42e8 mov r6, r0 | r6 = r0;
0x000b42ea ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000b42ee sub sp, 0x18 |
0x000b42f0 mov r4, sp | r4 = sp;
0x000b42f2 mov r8, ip | r8 = ip;
0x000b42f4 mov sb, sp | sb = sp;
0x000b42f6 cmp r5, 3 |
0x000b42f8 stm r4!, {r0, r1, r2, r3} | *(r4!) = r0;
| *((r4! + 4)) = r1;
| *((r4! + 8)) = r2;
| *((r4! + 12)) = r3;
0x000b42fa ldm.w lr, {r0, r1} | r0 = *(lr);
| r1 = *((lr + 4));
0x000b42fe stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
0x000b4302 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000b4306 stm.w sl!, {r0, r1, r2, r3} | *(sl!) = r0;
| *((sl! + 4)) = r1;
| *((sl! + 8)) = r2;
| *((sl! + 12)) = r3;
0x000b430a ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x000b430e stm.w lr, {r0, r1} | *(lr) = r0;
| *((lr + 4)) = r1;
0x000b4312 ldm.w sb!, {r0, r1, r2, r3} | r0 = *(sb!);
| r1 = *((sb! + 4));
| r2 = *((sb! + 8));
| r3 = *((sb! + 12));
0x000b4316 stm.w r8!, {r0, r1, r2, r3} | *(r8!) = r0;
| *((r8! + 4)) = r1;
| *((r8! + 8)) = r2;
| *((r8! + 12)) = r3;
0x000b431a ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x000b431e stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
| if (r5 <= 3) {
0x000b4322 bgt 0xb4338 |
0x000b4324 add.w r5, r6, r5, lsl 2 | r5 = r6 + (r5 << 2);
0x000b4328 cmp r7, 3 |
0x000b432a ldr r1, [r5, 0x44] | r1 = *((r5 + 0x44));
| if (r7 > 3) {
0x000b432c bgt 0xb433e | goto label_0;
| }
0x000b432e add.w r6, r6, r7, lsl 2 | r6 += (r7 << 2);
0x000b4332 ldr r3, [r6, 0x44] | r3 = *((r6 + 0x44));
0x000b4334 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x000b4336 str r1, [r6, 0x44] | *((r6 + 0x44)) = r1;
| }
0x000b4338 add sp, 0x18 |
0x000b433a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x000b433e ldr r0, [r6] | r0 = *(r6);
| if (r1 != 0) {
0x000b4340 cbz r1, 0xb434e |
0x000b4342 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b4344 subs r3, 1 | r3--;
0x000b4346 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 != 0) {
0x000b4348 cbnz r3, 0xb434e | goto label_1;
| }
0x000b434a bl 0xb4180 | fcn_000b4180 (r0, r1);
| }
| label_1:
0x000b434e movs r3, 0 | r3 = 0;
0x000b4350 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x000b4352 add sp, 0x18 |
0x000b4354 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb4430 */
| #include <stdint.h>
|
; (fcn) fcn.000b4430 () | void fcn_000b4430 (int16_t arg1) {
| r0 = arg1;
0x000b4430 push.w {r4, r5, r6, r7, r8, lr} |
0x000b4434 mov r5, r0 | r5 = r0;
0x000b4436 ldrb.w ip, [r0, 5] | ip = *((r0 + 5));
0x000b443a rsb.w r4, ip, 1 | r4 = 1 - ip;
0x000b443e add.w r4, r0, r4, lsl 2 | r4 = r0 + (r4 << 2);
0x000b4442 ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
| if (r1 != 0) {
0x000b4444 cbz r1, 0xb445c |
0x000b4446 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b4448 ldr r0, [r0] | r0 = *(r0);
0x000b444a subs r3, 1 | r3--;
0x000b444c str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 == 0) {
0x000b444e cbnz r3, 0xb4458 |
0x000b4450 bl 0xb4180 | fcn_000b4180 (r0, r1);
0x000b4454 ldrb.w ip, [r5, 5] | ip = *((r5 + 5));
| }
0x000b4458 movs r3, 0 | r3 = 0;
0x000b445a str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| }
0x000b445c cmp.w ip, 0 |
| if (ip == 0) {
0x000b4460 beq 0xb4478 | goto label_5;
| }
0x000b4462 ldrb.w r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000b4466 movs r1, 0 | r1 = 0;
0x000b4468 add.w r3, r5, r3, lsl 2 | r3 = r5 + (r3 << 2);
0x000b446c ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x000b446e subs r2, 1 | r2--;
0x000b4470 str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x000b4472 strb r1, [r5, 5] | *((r5 + 5)) = r1;
| do {
| label_0:
0x000b4474 pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x000b4478 ldr.w r8, [r5, 0x18] | r8 = *((r5 + 0x18));
0x000b447c cmp.w r8, 0 |
0x000b4480 beq 0xb4474 |
| } while (r8 == 0);
0x000b4482 ldr r7, [r5, 0x20] | r7 = *((r5 + 0x20));
0x000b4484 add.w r6, r8, -1 | r6 = r8 + -1;
0x000b4488 add.w r4, r6, r6, lsl 1 | r4 = r6 + (r6 << 1);
0x000b448c cmp r6, 3 |
0x000b448e ldrb r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000b4490 mov lr, r7 | lr = r7;
0x000b4492 add.w r4, r7, r4, lsl 3 | r4 = r7 + (r4 << 3);
0x000b4496 add.w r3, r5, r3, lsl 2 | r3 = r5 + (r3 << 2);
0x000b449a ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x000b449c add.w r2, r2, -1 | r2 += -1;
0x000b44a0 str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x000b44a2 ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x000b44a4 str r6, [r5, 0x18] | *((r5 + 0x18)) = r6;
0x000b44a6 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000b44aa ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x000b44ae stm.w lr, {r0, r1} | *(lr) = r0;
| *((lr + 4)) = r1;
| if (r6 <= 3) {
0x000b44b2 ble 0xb4558 | goto label_6;
| }
| label_4:
0x000b44b4 movs r1, 0 | r1 = 0;
0x000b44b6 movs r4, 1 | r4 = 1;
0x000b44b8 mov r3, r1 | r3 = r1;
0x000b44ba b 0xb44fe | goto label_7;
| if (r4 >= 1) {
| label_2:
0x000b44bc bmi 0xb44ca |
0x000b44be ldrb.w r0, [ip, 0x10] | r0 = *((ip + 0x10));
0x000b44c2 ldrb.w r2, [lr, 0x10] | r2 = *((lr + 0x10));
0x000b44c6 cmp r0, r2 |
| if (r0 <= r2) {
0x000b44c8 blo 0xb452c | goto label_8;
| }
| }
| label_1:
0x000b44ca add r3, r1 | r3 += r1;
0x000b44cc add.w r3, r7, r3, lsl 3 | r3 = r7 + (r3 << 3);
0x000b44d0 vldr d17, [r3] | __asm ("vldr d17, [r3]");
0x000b44d4 vcmpe.f64 d16, d17 | __asm ("vcmpe.f64 d16, d17");
0x000b44d8 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 < r2) {
0x000b44dc bmi 0xb44ea | goto label_9;
| }
| if (r0 > r2) {
0x000b44de bgt 0xb4474 | goto label_0;
| }
0x000b44e0 ldrb.w r2, [lr, 0x10] | r2 = *((lr + 0x10));
0x000b44e4 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000b44e6 cmp r2, r3 |
| if (r2 >= r3) {
0x000b44e8 bhs 0xb4474 | goto label_0;
| }
| label_9:
0x000b44ea mov r2, r4 | r2 = r4;
0x000b44ec mov r0, r5 | r0 = r5;
0x000b44ee bl 0xb42cc | fcn_000b42cc (r0, r1, r2);
0x000b44f2 mov r1, r4 | r1 = r4;
| label_3:
0x000b44f4 lsls r3, r1, 1 | r3 = r1 << 1;
0x000b44f6 adds r4, r3, 1 | r4 = r3 + 1;
0x000b44f8 cmp r6, r4 |
| if (r6 <= r4) {
0x000b44fa ble 0xb4474 | goto label_0;
| }
0x000b44fc ldr r7, [r5, 0x20] | r7 = *((r5 + 0x20));
| label_7:
0x000b44fe add.w ip, r1, 1 |
0x000b4502 add.w lr, r4, r4, lsl 1 | lr = r4 + (r4 << 1);
0x000b4506 lsl.w r8, ip, 1 | r8 = ip << 1;
0x000b450a add.w lr, r7, lr, lsl 3 | lr = r7 + (lr << 3);
0x000b450e cmp r6, r8 |
0x000b4510 vldr d16, [lr] | __asm ("vldr d16, [lr]");
| if (r6 <= r8) {
0x000b4514 ble 0xb44ca | goto label_1;
| }
0x000b4516 add.w ip, r8, ip, lsl 2 |
0x000b451a add.w ip, r7, ip, lsl 3 |
0x000b451e vldr d17, [ip] | __asm ("vldr d17, [ip]");
0x000b4522 vcmpe.f64 d16, d17 | __asm ("vcmpe.f64 d16, d17");
0x000b4526 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r6 <= r8) {
0x000b452a ble 0xb44bc | goto label_2;
| }
| label_8:
0x000b452c add r3, r1 | r3 += r1;
0x000b452e add.w r3, r7, r3, lsl 3 | r3 = r7 + (r3 << 3);
0x000b4532 vldr d16, [r3] | __asm ("vldr d16, [r3]");
0x000b4536 vcmpe.f64 d17, d16 | __asm ("vcmpe.f64 d17, d16");
0x000b453a vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r6 < r8) {
0x000b453e bmi 0xb454c | goto label_10;
| }
| if (r6 > r8) {
0x000b4540 bgt 0xb4474 | goto label_0;
| }
0x000b4542 ldrb.w r2, [ip, 0x10] | r2 = *((ip + 0x10));
0x000b4546 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000b4548 cmp r2, r3 |
| if (r2 >= r3) {
0x000b454a bhs 0xb4474 | goto label_0;
| }
| label_10:
0x000b454c mov r2, r8 | r2 = r8;
0x000b454e mov r0, r5 | r0 = r5;
0x000b4550 bl 0xb42cc | fcn_000b42cc (r0, r1, r2);
0x000b4554 mov r1, r8 | r1 = r8;
0x000b4556 b 0xb44f4 | goto label_3;
| label_6:
0x000b4558 add.w r8, r5, r8, lsl 2 | r8 = r5 + (r8 << 2);
0x000b455c cmp r6, 1 |
0x000b455e ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x000b4562 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x000b4564 str.w ip, [r8, 0x40] | __asm ("str.w ip, [r8, 0x40]");
| if (r6 > 1) {
0x000b4568 bgt 0xb44b4 | goto label_4;
| }
0x000b456a b 0xb4474 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb456c */
| #include <stdint.h>
|
; (fcn) fcn.000b456c () | void fcn_000b456c (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000b456c add.w r2, r0, r1, lsl 2 | r2 = r0 + (r1 << 2);
0x000b4570 push {r4, r5, r6, lr} |
0x000b4572 mov r6, r1 | r6 = r1;
0x000b4574 vpush {d8} | __asm ("vpush {d8}");
0x000b4578 mov r4, r0 | r4 = r0;
0x000b457a ldrb r1, [r0, 5] | r1 = *((r0 + 5));
0x000b457c ldr r3, [r2, 0x54] | r3 = *((r2 + 0x54));
0x000b457e vmov.f64 d8, d0 | __asm ("vmov.f64 d8, d0");
0x000b4582 adds r3, 1 | r3++;
| if (r1 == 0) {
0x000b4584 cbz r1, 0xb45f4 | goto label_5;
| }
0x000b4586 str r3, [r2, 0x54] | *((r2 + 0x54)) = r3;
0x000b4588 vldr d16, [r0, 0x28] | __asm ("vldr d16, [r0, 0x28]");
0x000b458a lsrs r2, r1, 0xc | r2 = r1 >> 0xc;
0x000b458c vcmpe.f64 d0, d16 | __asm ("vcmpe.f64 d0, d16");
0x000b4590 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r2 >= r1) {
0x000b4594 bpl 0xb4604 | goto label_6;
| }
| label_0:
0x000b4596 mov r1, r6 | r1 = r6;
0x000b4598 vmov.f64 d0, d8 | __asm ("vmov.f64 d0, d8");
0x000b459c mov r0, r4 | r0 = r4;
0x000b459e bl 0xb4358 | r0 = fcn_000b4358 (r0, r1, r2);
0x000b45a2 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000b45a4 cbz r0, 0xb45ec | goto label_7;
| }
0x000b45a6 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000b45a8 movw r2, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000b45ac movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x000b45b0 subs r3, r0, r3 | r3 = r0 - r3;
0x000b45b2 asrs r3, r3, 3 | r3 >>= 3;
0x000b45b4 mul r3, r2, r3 | r3 = r2 * r3;
0x000b45b8 adds r2, r3, 1 | r2 = r3 + 1;
0x000b45ba cmp r2, 4 |
| if (r2 > 4) {
0x000b45bc bgt 0xb4650 | goto label_8;
| }
0x000b45be ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x000b45c0 adds r3, 0x11 | r3 += 0x11;
0x000b45c2 str.w r2, [r4, r3, lsl 2] | __asm ("str.w r2, [r4, r3, lsl 2]");
| label_4:
0x000b45c6 add.w lr, r4, 0x28 | lr = r4 + 0x28;
0x000b45ca movs r3, 0 | r3 = 0;
0x000b45cc mov ip, lr |
0x000b45ce str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x000b45d0 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000b45d4 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x000b45d6 ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x000b45da stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
| do {
| label_1:
0x000b45de mov r5, lr | r5 = lr;
0x000b45e0 movs r3, 1 | r3 = 1;
0x000b45e2 vstr d8, [r4, 0x28] | __asm ("vstr d8, [r4, 0x28]");
0x000b45e6 strb.w r6, [r4, 0x38] | *((r4 + 0x38)) = r6;
0x000b45ea strb r3, [r4, 5] | *((r4 + 5)) = r3;
| label_7:
0x000b45ec vpop {d8} | __asm ("vpop {d8}");
0x000b45f0 mov r0, r5 | r0 = r5;
0x000b45f2 pop {r4, r5, r6, pc} |
| label_5:
0x000b45f4 ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
| if (r1 == 0) {
0x000b45f6 cbz r1, 0xb4628 | goto label_9;
| }
0x000b45f8 ldr r1, [r0, 0x20] | r1 = *((r0 + 0x20));
0x000b45fa str r3, [r2, 0x54] | *((r2 + 0x54)) = r3;
| if (r1 != 0) {
0x000b45fc cbnz r1, 0xb4630 | goto label_10;
| }
| label_2:
0x000b45fe add.w lr, r4, 0x28 | lr = r4 + 0x28;
0x000b4602 b 0xb45de |
| } while (1);
| label_6:
0x000b4604 vcmp.f64 d0, d16 | __asm ("vcmp.f64 d0, d16");
0x000b4608 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r1 != 0) {
0x000b460c bne 0xb4616 | goto label_3;
| }
0x000b460e ldrb.w r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x000b4612 cmp r3, r6 |
| if (r3 > r6) {
0x000b4614 bhi 0xb4596 | goto label_0;
| }
| label_3:
0x000b4616 vmov.f64 d0, d8 | __asm ("vmov.f64 d0, d8");
0x000b461a mov r1, r6 | r1 = r6;
0x000b461c vpop {d8} | __asm ("vpop {d8}");
0x000b4620 mov r0, r4 | r0 = r4;
0x000b4622 pop.w {r4, r5, r6, lr} |
0x000b4626 b 0xb4358 | void (*0xb4358)() ();
| label_9:
0x000b4628 add.w lr, r0, 0x28 | lr = r0 + 0x28;
0x000b462c str r3, [r2, 0x54] | *((r2 + 0x54)) = r3;
0x000b462e b 0xb45de | goto label_1;
| label_10:
0x000b4630 vldr d16, [r1] | __asm ("vldr d16, [r1]");
0x000b4634 vcmpe.f64 d0, d16 | __asm ("vcmpe.f64 d0, d16");
0x000b4638 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 < r6) {
0x000b463c bmi 0xb45fe | goto label_2;
| }
0x000b463e vcmp.f64 d8, d16 | __asm ("vcmp.f64 d8, d16");
0x000b4642 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 != r6) {
0x000b4646 bne 0xb4616 | goto label_3;
| }
0x000b4648 ldrb r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b464a cmp r3, r6 |
| if (r3 > r6) {
0x000b464c bhi 0xb45fe | goto label_2;
| }
0x000b464e b 0xb4616 | goto label_3;
| label_8:
0x000b4650 ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
0x000b4652 ldr r0, [r4] | r0 = *(r4);
0x000b4654 cmp r1, 0 |
| if (r1 == 0) {
0x000b4656 beq 0xb45c6 | goto label_4;
| }
0x000b4658 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b465a subs r3, 1 | r3--;
0x000b465c str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x000b465e cmp r3, 0 |
| if (r3 != 0) {
0x000b4660 bne 0xb45c6 | goto label_4;
| }
0x000b4662 bl 0xb4180 | fcn_000b4180 (r0, r1);
0x000b4666 b 0xb45c6 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb5138 */
| #include <stdint.h>
|
; (fcn) fcn.000b5138 () | void fcn_000b5138 (int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_18h;
| int32_t var_18h_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000b5138 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b513c mov r7, r2 | r7 = r2;
0x000b513e ldr r2, [pc, 0x100] |
0x000b5140 mov r6, r3 | r6 = r3;
0x000b5142 sub sp, 0x34 |
0x000b5144 mov r5, r1 | r5 = r1;
0x000b5146 ldr r3, [pc, 0xfc] | r3 = *(0xb5246);
0x000b5148 mov r4, r0 | r4 = r0;
0x000b514a add r2, pc | r2 = 0x16a390;
0x000b514c ldrd sl, sb, [sp, 0x58] | __asm ("ldrd sl, sb, [arg_58h]");
0x000b5150 ldr r3, [r2, r3] |
0x000b5152 ldr r2, [pc, 0xf4] |
0x000b5154 ldr r3, [r3] | r3 = imp.atan;
0x000b5156 str r3, [sp, 0x2c] | var_2ch = r3;
0x000b5158 mov.w r3, 0 | r3 = 0;
0x000b515c lsls r3, r1, 2 | r3 = r1 << 2;
0x000b515e add r2, pc | r2 = 0x16a3ac;
0x000b5160 ldr r1, [pc, 0xe8] |
0x000b5162 add.w r8, r0, r3 | r8 = r0 + r3;
0x000b5166 str r2, [sp, 0x24] | var_24h = r2;
0x000b5168 ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000b516c add r1, pc | r1 = 0x16a3bc;
0x000b516e str r1, [sp, 0x28] | var_28h = r1;
| if (r2 == 0) {
0x000b5170 cbz r2, 0xb51c4 | goto label_3;
| }
| label_1:
0x000b5172 ldr.w fp, [r4, 0x28] | fp = *((r4 + 0x28));
0x000b5176 cmp.w fp, 0 |
0x000b517a beq 0xb5196 |
| while (r3 != 0) {
| label_0:
0x000b517c ldr r2, [pc, 0xd0] |
0x000b517e ldr r3, [pc, 0xc4] | r3 = *(0xb5246);
0x000b5180 add r2, pc | r2 = 0x16a3d4;
0x000b5182 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b5184 ldr r2, [r3] | r2 = imp.atan;
0x000b5186 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b5188 eors r2, r3 | r2 ^= r3;
0x000b518a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b518e bne 0xb523a | goto label_4;
| }
0x000b5190 add sp, 0x34 |
0x000b5192 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000b5196 ldr.w r8, [r8, 0x18] | r8 = *((r8 + 0x18));
0x000b519a mov r2, r7 | r2 = r7;
0x000b519c mov r3, r6 | r3 = r6;
0x000b519e movs r1, 1 | r1 = 1;
0x000b51a0 mov r0, r8 | r0 = r8;
0x000b51a2 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b51a6 mov r0, r8 | r0 = r8;
0x000b51a8 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000b51ac cmp r0, 0x65 |
| if (r0 == 0x65) {
0x000b51ae beq 0xb51da | goto label_5;
| }
0x000b51b0 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000b51b2 beq 0xb5200 | goto label_6;
| }
| label_2:
0x000b51b4 mov r0, r8 | r0 = r8;
0x000b51b6 bl 0x79b80 | fcn_00079b80 (r0);
0x000b51ba ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x000b51bc cmp r3, 0 |
0x000b51be bne 0xb517c |
| }
0x000b51c0 str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x000b51c2 b 0xb517c | goto label_0;
| label_3:
0x000b51c4 adds r3, 0x30 | r3 += 0x30;
0x000b51c6 add r3, sp, r3 | r3 = sp + r3;
0x000b51c8 ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
0x000b51cc ldrd r2, r3, [r0, 4] | __asm ("ldrd r2, r3, [r0, 4]");
0x000b51d0 bl 0xa4528 | fcn_000a4528 (r0);
0x000b51d4 str.w r0, [r8, 0x18] | __asm ("str.w r0, [r8, 0x18]");
0x000b51d8 b 0xb5172 | goto label_1;
| if (r5 == 0) {
| label_5:
0x000b51da cbz r5, 0xb51fa | goto label_7;
| }
0x000b51dc ldr r3, [pc, 0x74] |
0x000b51de add r3, pc | r3 = 0x16a436;
| do {
0x000b51e0 ldr r1, [pc, 0x74] |
0x000b51e2 mov r2, r7 | r2 = r7;
0x000b51e4 str r3, [sp, 8] | var_8h = r3;
0x000b51e6 mov r0, r4 | r0 = r4;
0x000b51e8 mov r3, r6 | r3 = r6;
0x000b51ea str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000b51ee add r1, pc | r1 = 0x16a44a;
0x000b51f0 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x000b51f4 bl 0x60cb0 | fcn_00060cb0 (r0, r1, r2);
0x000b51f8 b 0xb51b4 | goto label_2;
| label_7:
0x000b51fa ldr r3, [pc, 0x60] |
0x000b51fc add r3, pc | r3 = 0x16a45e;
0x000b51fe b 0xb51e0 |
| } while (1);
| label_6:
0x000b5200 mov r1, fp | r1 = fp;
0x000b5202 mov r0, r8 | r0 = r8;
0x000b5204 bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000b5208 cmp r1, sb |
0x000b520a it eq |
| if (r1 != sb) {
0x000b520c cmpeq r0, sl | __asm ("cmpeq r0, sl");
| goto label_8;
| }
| if (r1 == sb) {
| label_8:
0x000b520e beq 0xb51b4 | goto label_2;
| }
| if (r5 == 0) {
0x000b5210 cbz r5, 0xb5234 | goto label_9;
| }
0x000b5212 ldr r3, [pc, 0x4c] |
0x000b5214 add r3, pc | r3 = 0x16a47a;
| do {
0x000b5216 str r1, [sp, 4] | var_4h = r1;
0x000b5218 mov r2, r7 | r2 = r7;
0x000b521a ldr r1, [pc, 0x48] |
0x000b521c str r3, [sp, 8] | var_8h = r3;
0x000b521e mov r3, r6 | r3 = r6;
0x000b5220 str r0, [sp] | *(sp) = r0;
0x000b5222 mov r0, r4 | r0 = r4;
0x000b5224 add r1, pc | r1 = 0x16a48e;
0x000b5226 strd sl, sb, [sp, 0x18] | __asm ("strd sl, sb, [var_18h]");
0x000b522a str r7, [sp, 0x10] | var_10h = r7;
0x000b522c str r6, [sp, 0x14] | var_14h = r6;
0x000b522e bl 0x60cb0 | fcn_00060cb0 (r0, r1, r2);
0x000b5232 b 0xb51b4 | goto label_2;
| label_9:
0x000b5234 ldr r3, [pc, 0x30] |
0x000b5236 add r3, pc | r3 = 0x16a4a2;
0x000b5238 b 0xb5216 |
| } while (1);
| label_4:
0x000b523a blx 0x6430 | fcn_00006430 ();
0x000b523e nop |
0x000b5240 ldr r4, [pc, 0x138] | r4 = *(0xb537c);
0x000b5242 movs r3, r0 | r3 = r0;
0x000b5244 lsls r4, r6, 8 | r4 = r6 << 8;
0x000b5246 movs r0, r0 |
0x000b5248 cmp r2, r7 |
0x000b524a movs r2, r0 | r2 = r0;
0x000b524c cmp r4, ip |
0x000b524e movs r2, r0 | r2 = r0;
0x000b5250 ldr r4, [pc, 0x60] | r4 = *(0xb52b4);
0x000b5252 movs r3, r0 | r3 = r0;
0x000b5254 add lr, r4 | lr += r4;
0x000b5256 movs r2, r0 | r2 = r0;
0x000b5258 cmp r2, r2 |
0x000b525a movs r2, r0 | r2 = r0;
0x000b525c add r8, r2 | r8 += r2;
0x000b525e movs r2, r0 | r2 = r0;
0x000b5260 add r0, lr | r0 += lr;
0x000b5262 movs r2, r0 | r2 = r0;
0x000b5264 cmp r4, r1 |
0x000b5266 movs r2, r0 | r2 = r0;
0x000b5268 add r6, sl | r6 += sl;
0x000b526a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb5418 */
| #include <stdint.h>
|
; (fcn) fcn.000b5418 () | void fcn_000b5418 (int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_0h;
| int16_t var_40h;
| int16_t var_48h;
| int16_t var_50h;
| int16_t var_58h;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000b5418 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, 0xb4000");
0x000b541c mov r8, r2 | r8 = r2;
0x000b541e ldr r2, [pc, 0x108] |
0x000b5420 mov r5, r3 | r5 = r3;
0x000b5422 sub sp, 0x1c |
0x000b5424 movs r1, 0xb | r1 = 0xb;
0x000b5426 ldr r3, [pc, 0x104] | r3 = *(0xb552e);
0x000b5428 add r2, pc | r2 = 0x16a956;
0x000b542a ldrd r7, r6, [sp, 0x58] | __asm ("ldrd r7, r6, [var_58h]");
0x000b542e ldr.w sb, [sp, 0x60] | sb = var_10h;
0x000b5432 ldr r3, [r2, r3] |
0x000b5434 add r2, sp, 0x10 | r2 += var_10h_2;
0x000b5436 ldr r3, [r3] | r3 = imp.atan;
0x000b5438 str r3, [sp, 0x14] | var_14h_2 = r3;
0x000b543a mov.w r3, 0 | r3 = 0;
0x000b543e movs r3, 0 | r3 = 0;
0x000b5440 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000b5444 mov r4, r0 | r4 = r0;
0x000b5446 cbz r0, 0xb5464 |
| while (r0 == 0) {
| label_0:
0x000b5448 ldr r2, [pc, 0xe4] |
0x000b544a ldr r3, [pc, 0xe0] | r3 = *(0xb552e);
0x000b544c add r2, pc | r2 = 0x16a980;
0x000b544e ldr r3, [r2, r3] | r3 = imp.atan;
0x000b5450 ldr r2, [r3] | r2 = imp.atan;
0x000b5452 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000b5454 eors r2, r3 | r2 ^= r3;
0x000b5456 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b545a bne 0xb5522 | goto label_2;
| }
0x000b545c mov r0, r4 | r0 = r4;
0x000b545e add sp, 0x1c |
0x000b5460 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x000b5464 mov r3, r5 | r3 = r5;
0x000b5466 ldr r5, [sp, 0x10] | r5 = var_10h_2;
0x000b5468 mov r2, r8 | r2 = r8;
0x000b546a movs r1, 1 | r1 = 1;
0x000b546c mov r0, r5 | r0 = r5;
0x000b546e bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b5472 ldr r2, [sp, 0x38] | r2 = var_0h;
0x000b5474 movs r1, 2 | r1 = 2;
0x000b5476 mov r0, r5 | r0 = r5;
0x000b5478 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000b547a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b547e ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x000b5482 movs r1, 3 | r1 = 3;
0x000b5484 mov r0, r5 | r0 = r5;
0x000b5486 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b548a ldrd r2, r3, [sp, 0x48] | __asm ("ldrd r2, r3, [var_48h]");
0x000b548e movs r1, 4 | r1 = 4;
0x000b5490 mov r0, r5 | r0 = r5;
0x000b5492 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b5496 orrs.w r3, r7, r6 | r3 = r7 | r6;
| if (r3 == r7) {
0x000b549a beq 0xb5514 | goto label_3;
| }
0x000b549c ldr r0, [pc, 0x94] |
0x000b549e movs r4, 7 | r4 = 7;
0x000b54a0 ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_50h]");
0x000b54a4 strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x000b54a8 add r0, pc | r0 = 0x16a9e0;
0x000b54aa bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b54ae mov r2, r0 | r2 = r0;
0x000b54b0 cmp r0, 0 |
0x000b54b2 beq 0xb5448 |
| }
0x000b54b4 ldr r3, [pc, 0x80] |
0x000b54b6 movs r1, 1 | r1 = 1;
0x000b54b8 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x000b54bc mov r0, r5 | r0 = r5;
0x000b54be str r1, [sp, 0xc] | var_ch = r1;
0x000b54c0 movs r1, 5 | r1 = 5;
0x000b54c2 add r3, pc | r3 = 0x16a9fe;
0x000b54c4 str r3, [sp, 8] | var_8h = r3;
0x000b54c6 vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x000b54ca bl 0x53bf8 | fcn_00053bf8 (r0, r1, r2, r3, r4, r5);
| label_1:
0x000b54ce ldr r3, [sp, 0x64] | r3 = var_14h;
0x000b54d0 movs r1, 6 | r1 = 6;
0x000b54d2 mov r2, sb | r2 = sb;
0x000b54d4 asrs r0, r3, 0x1f | r0 = r3 >> 0x1f;
0x000b54d6 movs r3, 0 | r3 = 0;
0x000b54d8 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [sp, 8]");
0x000b54dc ldr r3, [sp, 0x64] | r3 = var_14h;
0x000b54de strd r3, r0, [sp] | __asm ("strd r3, r0, [sp]");
0x000b54e2 mov r0, r5 | r0 = r5;
0x000b54e4 bl 0x53bf8 | fcn_00053bf8 (r0, r1, r2, r3, r4, r5);
0x000b54e8 mov r0, r5 | r0 = r5;
0x000b54ea bl 0x96a64 | fcn_00096a64 (r0);
0x000b54ee mov r0, r5 | r0 = r5;
0x000b54f0 bl 0x79b80 | fcn_00079b80 (r0);
0x000b54f4 movs r1, 6 | r1 = 6;
0x000b54f6 mov r4, r0 | r4 = r0;
0x000b54f8 mov r0, r5 | r0 = r5;
0x000b54fa bl 0x53aa0 | r0 = fcn_00053aa0 (r0, r1);
0x000b54fe cmp r0, 0 |
| if (r0 != 0) {
0x000b5500 bne 0xb5448 | goto label_0;
| }
0x000b5502 ldr r3, [r5] | r3 = *(r5);
0x000b5504 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000b5506 cmp r0, 0 |
| if (r0 == 0) {
0x000b5508 beq 0xb5448 | goto label_0;
| }
0x000b550a ldr r3, [pc, 0x30] |
0x000b550c add r3, pc |
0x000b550e ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000b5510 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000b5512 b 0xb5448 | goto label_0;
| label_3:
0x000b5514 ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_50h]");
0x000b5518 movs r1, 5 | r1 = 5;
0x000b551a mov r0, r5 | r0 = r5;
0x000b551c bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b5520 b 0xb54ce | goto label_1;
| label_2:
0x000b5522 blx 0x6430 | fcn_00006430 ();
0x000b5526 nop |
0x000b5528 ldr r1, [pc, 0x1c0] | r1 = *(0xb56ec);
0x000b552a movs r3, r0 | r3 = r0;
0x000b552c lsls r4, r6, 8 | r4 = r6 << 8;
0x000b552e movs r0, r0 |
0x000b5530 ldr r1, [pc, 0x130] | r1 = *(0xb5664);
0x000b5532 movs r3, r0 | r3 = r0;
0x000b5534 orrs r0, r5 | r0 |= r5;
0x000b5536 movs r2, r0 | r2 = r0;
0x000b5538 adds r7, r6, r3 | r7 = r6 + r3;
0x000b553a invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb5540 */
| #include <stdint.h>
|
; (fcn) fcn.000b5540 () | void fcn_000b5540 (int16_t arg_58h, int16_t arg_5ch, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_24h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000b5540 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000b5544 mov r8, r2 | r8 = r2;
0x000b5546 ldr r2, [pc, 0x204] |
0x000b5548 mov sb, r3 | sb = r3;
0x000b554a movs r1, 0x25 | r1 = 0x25;
0x000b554c ldr r3, [pc, 0x200] | r3 = *(0xb5750);
0x000b554e vpush {d8} | __asm ("vpush {d8}");
0x000b5552 add r2, pc | r2 = 0x16aca4;
0x000b5554 sub sp, 0x2c |
0x000b5556 str r0, [sp, 4] | var_4h = r0;
0x000b5558 ldr r3, [r2, r3] |
0x000b555a add r2, sp, 0xc | r2 += var_ch;
0x000b555c ldr r4, [sp, 0x58] | r4 = *(arg_58h);
0x000b555e ldr r6, [sp, 0x5c] | r6 = *(arg_5ch);
0x000b5560 ldr r3, [r3] | r3 = imp.atan;
0x000b5562 str r3, [sp, 0x24] | var_24h = r3;
0x000b5564 mov.w r3, 0 | r3 = 0;
0x000b5568 movs r3, 0 | r3 = 0;
0x000b556a bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000b556e mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x000b5570 cbz r0, 0xb5594 |
| label_0:
0x000b5572 ldr r2, [pc, 0x1e0] |
0x000b5574 ldr r3, [pc, 0x1d8] | r3 = *(0xb5750);
0x000b5576 add r2, pc | r2 = 0x16acd0;
0x000b5578 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b557a ldr r2, [r3] | r2 = imp.atan;
0x000b557c ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b557e eors r2, r3 | r2 ^= r3;
0x000b5580 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b5584 bne.w 0xb573e | goto label_3;
| }
0x000b5586 strh r3, [r3, 6] | *((r3 + 6)) = r3;
0x000b5588 mov r0, r5 | r0 = r5;
0x000b558a add sp, 0x2c |
0x000b558c vpop {d8} | __asm ("vpop {d8}");
0x000b5590 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000b5594 adds r3, r4, r4 | r3 = r4 + r4;
0x000b5596 mov.w r1, 1 | r1 = 1;
0x000b559a adc.w r2, r6, r6 | __asm ("adc.w r2, r6, r6");
0x000b559e adds r3, r3, r4 | r3 += r4;
0x000b55a0 adc.w r6, r6, r2 | __asm ("adc.w r6, r6, r2");
0x000b55a4 ldr r4, [sp, 0xc] | r4 = var_ch;
0x000b55a6 lsrs r7, r6, 0x1f | r7 = r6 >> 0x1f;
0x000b55a8 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000b55ac add.w fp, sp, 0x10 |
0x000b55b0 adds r7, r7, r3 | r7 += r3;
0x000b55b2 mov r0, r4 | r0 = r4;
0x000b55b4 adc r6, r6, 0 | __asm ("adc r6, var_ch");
0x000b55b8 adds.w r2, r8, 1 | r2 = r8 + 1;
0x000b55bc adc r3, sb, 0 | __asm ("adc r3, sb, 0");
0x000b55c0 lsrs r7, r7, 1 | r7 >>= 1;
0x000b55c2 add.w sl, sp, 0x18 | sl += var_18h;
0x000b55c6 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b55ca asr.w r2, sb, 0x1f | r2 = sb >> 0x1f;
0x000b55ce movs r1, 2 | r1 = 2;
0x000b55d0 mov r0, r4 | r0 = r4;
0x000b55d2 orr.w r7, r7, r6, lsl 31 | r7 |= (r6 << 31);
0x000b55d6 ubfx r2, r2, 0, 0xa | r2 = (r2 >> 0) & ((1 << 0xa) - 1);
0x000b55da asrs r6, r6, 1 | r6 >>= var_ch;
0x000b55dc adds.w r2, r2, r8 | r2 += r8;
0x000b55e0 lsr.w r2, r2, 0xa | r2 >>= 0xa;
0x000b55e4 adc r3, sb, 0 | __asm ("adc r3, sb, 0");
0x000b55e8 orr.w r2, r2, r3, lsl 22 | r2 |= (r3 << 22);
0x000b55ec asrs r3, r3, 0xa | r3 >>= 0xa;
0x000b55ee adds r2, 1 | r2++;
0x000b55f0 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000b55f4 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000b55f6 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000b55fa lsls r2, r2, 0xa | r2 <<= 0xa;
0x000b55fc subs r2, 1 | r2--;
0x000b55fe sbc r3, r3, 0 | __asm ("sbc r3, r3, 0");
0x000b5602 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b5606 b 0xb560a |
| while (r3 == 0) {
0x000b5608 movs r5, 1 | r5 = 1;
0x000b560a mov r0, r4 | r0 = r4;
0x000b560c bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000b5610 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000b5612 bne 0xb5668 | goto label_4;
| }
0x000b5614 mov r3, fp | r3 = fp;
0x000b5616 mov r2, sl | r2 = sl;
0x000b5618 movs r1, 2 | r1 = 2;
0x000b561a mov r0, r4 | r0 = r4;
0x000b561c vstr d8, [sp, 0x10] | __asm ("vstr d8, [sp, 0x10]");
0x000b5620 bl 0x3ddb8 | fcn_0003ddb8 (r0, r1, r2, r3);
0x000b5624 ldrd r1, r2, [sp, 0x10] | __asm ("ldrd r1, r2, [var_10h]");
0x000b5628 cmp r7, r1 |
0x000b562a sbcs.w r3, r6, r2 | __asm ("sbcs.w r3, r6, r2");
0x000b562e ite lt |
| if (r7 >= r1) {
0x000b5630 movlt r3, 1 | r3 = 1;
| }
| if (r7 < r1) {
0x000b5632 movge r3, 0 | r3 = 0;
| }
0x000b5634 cmp r1, 1 |
0x000b5636 sbcs r2, r2, 0 | __asm ("sbcs r2, r2, 0");
0x000b563a it lt |
| if (r1 >= 1) {
0x000b563c orrlt r3, r3, 1 | r3 |= 1;
| }
0x000b5640 cmp r3, 0 |
0x000b5642 beq 0xb5608 |
| }
0x000b5644 ldr r2, [pc, 0x110] |
0x000b5646 ldr r3, [pc, 0x108] | r3 = *(0xb5752);
0x000b5648 add r2, pc | r2 = 0x16ada4;
0x000b564a ldr r3, [r2, r3] | r3 = imp.atan;
0x000b564c ldr r2, [r3] | r2 = imp.atan;
0x000b564e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b5650 eors r2, r3 | r2 ^= r3;
0x000b5652 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b5656 bne 0xb573e | goto label_3;
| }
| label_2:
0x000b5658 mov r0, r4 | r0 = r4;
0x000b565a add sp, 0x2c |
0x000b565c vpop {d8} | __asm ("vpop {d8}");
0x000b5660 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b5664 b.w 0x79b80 | void (*0x79b80)() ();
| label_4:
0x000b5668 mov r0, r4 | r0 = r4;
0x000b566a bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000b566e mov r6, r0 | r6 = r0;
| if (r5 == 0) {
0x000b5670 cbz r5, 0xb567a | goto label_1;
| }
0x000b5672 movs r3, 0 | r3 = 0;
0x000b5674 str r3, [sp, 0x10] | var_10h = r3;
0x000b5676 str r3, [sp, 0x18] | var_18h = r3;
0x000b5678 cbz r0, 0xb567e |
| while (r0 != 0) {
| label_1:
0x000b567a mov r5, r6 | r5 = r6;
0x000b567c b 0xb5572 | goto label_0;
0x000b567e mov r3, r0 | r3 = r0;
0x000b5680 add r2, sp, 0x10 | r2 += var_10h;
0x000b5682 ldr r0, [sp, 4] | r0 = var_4h;
0x000b5684 movs r1, 0x26 | r1 = 0x26;
0x000b5686 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000b568a mov r6, r0 | r6 = r0;
0x000b568c cmp r0, 0 |
0x000b568e bne 0xb567a |
| }
0x000b5690 mov r3, r0 | r3 = r0;
0x000b5692 add r2, sp, 0x18 | r2 += var_18h;
0x000b5694 ldr r0, [sp, 4] | r0 = var_4h;
0x000b5696 movs r1, 0x27 | r1 = 0x27;
0x000b5698 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000b569c mov r6, r0 | r6 = r0;
0x000b569e cmp r0, 0 |
| if (r0 != 0) {
0x000b56a0 bne 0xb567a | goto label_1;
| }
0x000b56a2 mov r2, r8 | r2 = r8;
0x000b56a4 mov r5, r0 | r5 = r0;
0x000b56a6 mov r3, sb | r3 = sb;
0x000b56a8 movs r1, 1 | r1 = 1;
0x000b56aa mov r0, r4 | r0 = r4;
0x000b56ac mov r7, r6 | r7 = r6;
0x000b56ae bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b56b2 b 0xb5700 |
| while (r0 == 0x64) {
0x000b56b4 ldr r6, [sp, 0x10] | r6 = var_10h;
0x000b56b6 mov r2, r5 | r2 = r5;
0x000b56b8 mov r3, r7 | r3 = r7;
0x000b56ba movs r1, 1 | r1 = 1;
0x000b56bc mov r0, r6 | r0 = r6;
0x000b56be bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b56c2 movs r1, 0 | r1 = 0;
0x000b56c4 mov r0, r4 | r0 = r4;
0x000b56c6 bl 0x32f84 | fcn_00032f84 (r0, r1);
0x000b56ca movs r1, 2 | r1 = 2;
0x000b56cc asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x000b56ce mov r2, r0 | r2 = r0;
0x000b56d0 mov r0, r6 | r0 = r6;
0x000b56d2 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b56d6 movs r1, 1 | r1 = 1;
0x000b56d8 mov r0, r4 | r0 = r4;
0x000b56da bl 0x32f84 | fcn_00032f84 (r0, r1);
0x000b56de movs r1, 3 | r1 = 3;
0x000b56e0 asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x000b56e2 mov r2, r0 | r2 = r0;
0x000b56e4 mov r0, r6 | r0 = r6;
0x000b56e6 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b56ea mov r0, r6 | r0 = r6;
0x000b56ec bl 0x96a64 | fcn_00096a64 (r0);
0x000b56f0 mov r0, r6 | r0 = r6;
0x000b56f2 bl 0x79b80 | fcn_00079b80 (r0);
0x000b56f6 adds r5, 1 | r5++;
0x000b56f8 mov r6, r0 | r6 = r0;
0x000b56fa adc r7, r7, 0 | __asm ("adc r7, r7, 0");
| if (r0 != 0) {
0x000b56fe cbnz r0, 0xb5742 | goto label_5;
| }
0x000b5700 mov r0, r4 | r0 = r4;
0x000b5702 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000b5706 cmp r0, 0x64 |
0x000b5708 beq 0xb56b4 |
| }
0x000b570a mov r0, r4 | r0 = r4;
0x000b570c bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000b5710 mov r6, r0 | r6 = r0;
0x000b5712 cmp r0, 0 |
| if (r0 != 0) {
0x000b5714 bne 0xb567a | goto label_1;
| }
0x000b5716 ldr r4, [sp, 0x18] | r4 = var_18h;
0x000b5718 mov r2, r8 | r2 = r8;
0x000b571a mov r3, sb | r3 = sb;
0x000b571c movs r1, 1 | r1 = 1;
0x000b571e mov r0, r4 | r0 = r4;
0x000b5720 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b5724 mov r0, r4 | r0 = r4;
0x000b5726 bl 0x96a64 | fcn_00096a64 (r0);
0x000b572a ldr r2, [pc, 0x30] |
0x000b572c ldr r3, [pc, 0x20] | r3 = *(0xb5750);
0x000b572e add r2, pc | r2 = 0x16ae90;
0x000b5730 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b5732 ldr r2, [r3] | r2 = imp.atan;
0x000b5734 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b5736 eors r2, r3 | r2 ^= r3;
0x000b5738 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000b573c beq 0xb5658 | goto label_2;
| }
| label_3:
0x000b573e blx 0x6430 | fcn_00006430 ();
| label_5:
0x000b5742 mov r0, r4 | r0 = r4;
0x000b5744 mov r5, r6 | r5 = r6;
0x000b5746 bl 0x79b80 | fcn_00079b80 (r0);
0x000b574a b 0xb5572 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb5910 */
| #include <stdint.h>
|
; (fcn) fcn.000b5910 () | void fcn_000b5910 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000b5910 push {r3, r4, r5, r6, r7, lr} |
0x000b5912 ldrb r3, [r1, 7] | r3 = *((r1 + 7));
| if (r3 != 0) {
0x000b5914 cbnz r3, 0xb591c | goto label_4;
| }
| label_1:
0x000b5916 movs r5, 0 | r5 = 0;
| do {
| label_3:
0x000b5918 mov r0, r5 | r0 = r5;
0x000b591a pop {r3, r4, r5, r6, r7, pc} |
| label_4:
0x000b591c mov r6, r0 | r6 = r0;
0x000b591e mov r0, r1 | r0 = r1;
0x000b5920 mov r4, r1 | r4 = r1;
0x000b5922 bl 0xa47a4 | r0 = fcn_000a47a4 (r0);
0x000b5926 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000b5928 cbz r0, 0xb593a | goto label_5;
| }
| label_0:
0x000b592a cmp r6, 0 |
0x000b592c beq 0xb5918 |
| } while (r6 == 0);
| label_2:
0x000b592e mov r0, r6 | r0 = r6;
0x000b5930 mov r1, r5 | r1 = r5;
0x000b5932 bl 0x4004c | fcn_0004004c (r0, r1);
0x000b5936 mov r0, r5 | r0 = r5;
0x000b5938 pop {r3, r4, r5, r6, r7, pc} |
| label_5:
0x000b593a ldr r7, [r4] | r7 = *(r4);
0x000b593c movs r1, 1 | r1 = 1;
0x000b593e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000b5940 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000b5942 adds r3, 1 | r3++;
0x000b5944 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000b5946 ldrd r2, r3, [r4, 0x20] | __asm ("ldrd r2, r3, [r4, 0x20]");
0x000b5948 movs r3, 8 | r3 = 8;
0x000b594a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b594e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000b5950 strb r5, [r4, 7] | *((r4 + 7)) = r5;
0x000b5952 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000b5956 cmp r0, 0x64 |
0x000b5958 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
| if (r0 == 0x64) {
0x000b595a beq 0xb5982 | goto label_6;
| }
0x000b595c subs r3, 1 | r3--;
0x000b595e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000b5960 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000b5962 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000b5966 mov r5, r0 | r5 = r0;
0x000b5968 cmp r0, 0 |
| if (r0 != 0) {
0x000b596a bne 0xb592a | goto label_0;
| }
0x000b596c ldr r3, [r4] | r3 = *(r4);
0x000b596e ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000b5970 cmp r3, 0 |
| if (r3 != 0) {
0x000b5972 bne 0xb5916 | goto label_1;
| }
0x000b5974 movs r3, 1 | r3 = 1;
0x000b5976 movw r5, 0x10b | r5 = 0x10b;
0x000b597a strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x000b597c cmp r6, 0 |
| if (r6 != 0) {
0x000b597e bne 0xb592e | goto label_2;
| }
0x000b5980 b 0xb5918 | goto label_3;
| label_6:
0x000b5982 subs r3, 1 | r3--;
0x000b5984 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000b5986 b 0xb5916 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb5988 */
| #include <stdint.h>
|
; (fcn) fcn.000b5988 () | void fcn_000b5988 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int32_t var_30h_2;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
0x000b5988 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b598c mov r7, r1 | r7 = r1;
0x000b598e mov sl, r0 | sl = r0;
0x000b5990 ldr r0, [r1] | r0 = *(r1);
0x000b5992 sub sp, 0x74 |
0x000b5994 ldr r1, [pc, 0x24c] |
0x000b5996 ldr r2, [pc, 0x250] | r2 = *(0xb5bea);
0x000b5998 add r1, pc | r1 = 0x16b580;
0x000b599a ldr r2, [r1, r2] |
0x000b599c ldr r2, [r2] | r2 = imp.atan;
0x000b599e str r2, [sp, 0x6c] | var_6ch = r2;
0x000b59a0 mov.w r2, 0 | r2 = 0;
0x000b59a4 str r0, [sp, 0x4c] | var_4ch = r0;
| if (r0 != 0) {
0x000b59a6 cbnz r0, 0xb5a06 | goto label_12;
| }
0x000b59a8 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
| if (r2 != 0) {
0x000b59ac cbz r2, 0xb59ba |
0x000b59ae mov r1, sl | r1 = sl;
0x000b59b0 bl 0xb5910 | r0 = fcn_000b5910 (r0, r1);
0x000b59b4 mov r6, r0 | r6 = r0;
0x000b59b6 str r0, [sp, 0x4c] | var_4ch = r0;
| if (r0 == 0) {
0x000b59b8 cbz r0, 0xb5a0a | goto label_13;
| }
| }
| label_0:
0x000b59ba ldr.w r1, [sl, 0x10] | r1 = *((sl + 0x10));
0x000b59be add r2, sp, 0x4c | r2 += var_4ch;
0x000b59c0 mov r0, sl | r0 = sl;
0x000b59c2 bl 0x71b60 | fcn_00071b60 (r0, r1, r2);
0x000b59c6 ldr.w r4, [sl, 0x1c] | r4 = *((sl + 0x1c));
0x000b59ca mov r6, r0 | r6 = r0;
| if (r4 == 0) {
0x000b59cc cbz r4, 0xb59de | goto label_14;
| }
0x000b59ce movs r5, 0 | r5 = 0;
| do {
0x000b59d0 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000b59d2 bl 0x26dbc | fcn_00026dbc (r0);
0x000b59d6 str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000b59d8 ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x000b59da cmp r4, 0 |
0x000b59dc bne 0xb59d0 |
| } while (r4 != 0);
| label_14:
0x000b59de ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000b59e0 orrs r6, r3 | r6 |= r3;
0x000b59e2 str r3, [r7] | *(r7) = r3;
0x000b59e4 ite eq |
| if (r6 != r3) {
0x000b59e6 moveq r0, 1 | r0 = 1;
| }
0x000b59e8 movne r0, 0 | r0 = 0;
| while (1) {
0x000b59ea ldr r2, [pc, 0x200] |
0x000b59ec ldr r3, [pc, 0x1f8] | r3 = *(0xb5be8);
0x000b59ee add r2, pc | r2 = 0x16b5e0;
0x000b59f0 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b59f2 ldr r2, [r3] | r2 = imp.atan;
0x000b59f4 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000b59f6 eors r2, r3 | r2 ^= r3;
0x000b59f8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b59fc bne.w 0xb5be0 | goto label_15;
| }
0x000b5a00 add sp, 0x74 |
0x000b5a02 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x000b5a06 movs r0, 0 | r0 = 0;
0x000b5a08 b 0xb59ea |
| }
| label_13:
0x000b5a0a ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x000b5a0e str r0, [sp, 0x50] | var_50h = r0;
0x000b5a10 cmp r2, 0 |
| if (r2 == 0) {
0x000b5a12 beq 0xb5a7a | goto label_16;
| }
0x000b5a14 ldr.w r5, [sl] | r5 = *(sl);
0x000b5a18 mov r1, r6 | r1 = r6;
0x000b5a1a ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000b5a1e ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x000b5a20 ldr.w sb, [r3] | sb = *(r3);
0x000b5a24 str r3, [sp, 0x3c] | var_3ch = r3;
0x000b5a26 bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000b5a2a strd r0, r1, [sp, 0x30] | __asm ("strd r0, r1, [var_30h]");
0x000b5a2e ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x000b5a30 cmp r1, 0 |
| if (r1 <= 0) {
0x000b5a32 ble 0xb5a56 | goto label_8;
| }
0x000b5a34 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x000b5a36 mov r4, r6 | r4 = r6;
0x000b5a38 mov r8, r6 | r8 = r6;
0x000b5a3a add r3, sp, 0x50 | r3 += var_50h;
0x000b5a3c str r6, [sp, 0x1c] | var_1ch = r6;
0x000b5a3e str r3, [sp, 0x38] | var_38h = r3;
0x000b5a40 str r7, [sp, 0x44] | var_44h = r7;
| do {
| label_4:
0x000b5a42 ldrb r3, [r0, r4] | r3 = *((r0 + r4));
| if (r3 == 0) {
0x000b5a44 cbz r3, 0xb5a7e | goto label_17;
| }
0x000b5a46 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b5a48 adds r4, 1 | r4++;
0x000b5a4a adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000b5a4e cmp r1, r4 |
0x000b5a50 str r3, [sp, 0x1c] | var_1ch = r3;
0x000b5a52 bgt 0xb5a42 |
| } while (r1 > r4);
| label_5:
0x000b5a54 ldr r7, [sp, 0x44] | r7 = var_44h;
| label_8:
0x000b5a56 ldr.w r4, [sl, 0x1c] | r4 = *((sl + 0x1c));
0x000b5a5a mov r0, r6 | r0 = r6;
| if (r4 == 0) {
0x000b5a5c cbz r4, 0xb5a7a | goto label_16;
| }
| if (r0 != 0) {
| do {
0x000b5a5e cbnz r0, 0xb5a78 | goto label_18;
| }
0x000b5a60 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x000b5a62 cbz r3, 0xb5a72 |
0x000b5a64 movs r2, 0 | r2 = 0;
0x000b5a66 movs r3, 0 | r3 = 0;
0x000b5a68 add.w r0, r4, 0xc | r0 = r4 + 0xc;
0x000b5a6c bl 0x70fe8 | fcn_00070fe8 (r0, r1, r2, r3);
0x000b5a70 str r0, [sp, 0x50] | var_50h = r0;
| }
0x000b5a72 ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x000b5a74 cmp r4, 0 |
0x000b5a76 bne 0xb5a5e |
| } while (r4 != 0);
| label_18:
0x000b5a78 mov r6, r0 | r6 = r0;
| label_16:
0x000b5a7a str r6, [sp, 0x4c] | var_4ch = r6;
0x000b5a7c b 0xb59ba | goto label_0;
| label_17:
0x000b5a7e ldr.w fp, [sl, 0xc] | fp = *((sl + 0xc));
0x000b5a82 adds r1, r4, 1 | r1 = r4 + 1;
0x000b5a84 mov r0, fp | r0 = fp;
0x000b5a86 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000b5a8a mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000b5a8c cbz r0, 0xb5aac |
0x000b5a8e ldrh r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x000b5a90 movw r2, 0x202 | r2 = 0x202;
0x000b5a94 bics r2, r1 | __asm ("bics r2, r1");
| if (r0 == 0) {
0x000b5a96 beq.w 0xb5bcc | goto label_19;
| }
| label_6:
0x000b5a9a lsls r3, r1, 0x1f | r3 = r1 << 0x1f;
0x000b5a9c it mi |
| if (r3 >= r1) {
0x000b5a9e movmi r7, 0 | r7 = 0;
| }
| if (r3 < r1) {
0x000b5aa0 bmi 0xb5aac | goto label_7;
| }
0x000b5aa2 mov r0, r7 | r0 = r7;
0x000b5aa4 movs r1, 1 | r1 = 1;
0x000b5aa6 bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x000b5aaa mov r7, r0 | r7 = r0;
| }
| label_7:
0x000b5aac cmp.w fp, 0 |
| if (fp != 0) {
0x000b5ab0 beq 0xb5ab8 |
0x000b5ab2 mov r0, fp | r0 = fp;
0x000b5ab4 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000b5ab8 add r3, sp, 0x54 | r3 += var_54h;
0x000b5aba ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000b5abc str r3, [sp] | *(sp) = r3;
0x000b5abe mov r2, r7 | r2 = r7;
0x000b5ac0 ldr.w r1, [sl, 0x14] | r1 = *((sl + 0x14));
0x000b5ac4 mov.w r3, -1 | r3 = -1;
0x000b5ac8 str.w r8, [sp, 0x54] | __asm ("str.w r8, [var_54h]");
0x000b5aca strh r4, [r2, 2] | *((r2 + 2)) = r4;
0x000b5acc bl 0x245f0 | fcn_000245f0 (r0, r1, r2, r3, r4);
0x000b5ad0 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000b5ad2 mov r3, r0 | r3 = r0;
0x000b5ad4 str r0, [sp, 0x50] | var_50h = r0;
0x000b5ad6 cmp r0, 0 |
| if (r0 != 0) {
0x000b5ad8 bne 0xb5b8a | goto label_20;
| }
0x000b5ada add r3, sp, 0x60 | r3 += var_60h;
0x000b5adc add.w fp, sp, 0x68 |
0x000b5ae0 str r3, [sp, 0x28] | var_28h = r3;
0x000b5ae2 add r7, sp, 0x64 | r7 += var_64h;
0x000b5ae4 add r3, sp, 0x5c | r3 += var_5ch;
0x000b5ae6 str.w fp, [sp, 0x2c] | __asm ("str.w fp, [var_2ch]");
0x000b5aea mov fp, r1 |
0x000b5aec str r3, [sp, 0x24] | var_24h = r3;
0x000b5aee add r3, sp, 0x58 | r3 += var_58h;
0x000b5af0 str r6, [sp, 0x40] | var_40h = r6;
0x000b5af2 str r3, [sp, 0x20] | var_20h = r3;
| label_3:
0x000b5af4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b5af6 mov r0, fp | r0 = fp;
0x000b5af8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000b5afa strd r8, r8, [sp, 0x5c] | __asm ("strd r8, r8, [var_60h]");
0x000b5afe strd r7, r3, [sp] | __asm ("strd r7, r3, [sp]");
0x000b5b02 strd r8, r8, [sp, 0x64] | __asm ("strd r8, r8, [var_64h]");
0x000b5b06 ldr.w r6, [sb, 0x14] | r6 = *((sb + 0x14));
0x000b5b0a ldrd r2, r3, [sp, 0x24] | __asm ("ldrd r2, r3, [var_28h]");
0x000b5b0e blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000b5b10 ldr.w r6, [sl, 0x1c] | r6 = *((sl + 0x1c));
0x000b5b14 str r0, [sp, 0x50] | var_50h = r0;
0x000b5b16 b 0xb5b26 | goto label_21;
| label_2:
0x000b5b18 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x000b5b1a cmp r0, 0 |
0x000b5b1c it ne |
| if (r0 != 0) {
0x000b5b1e cmpne r2, r1 | __asm ("cmpne r2, r1");
| }
| if (r0 < 0) {
0x000b5b20 blt 0xb5b54 | goto label_22;
| }
| do {
| label_1:
0x000b5b22 ldr r6, [r6, 8] | r6 = *((r6 + 8));
0x000b5b24 ldr r0, [sp, 0x50] | r0 = var_50h;
| label_21:
0x000b5b26 subs r3, r6, 0 | r3 = r6 - 0;
0x000b5b28 it ne |
| if (r3 == r6) {
0x000b5b2a movne r3, 1 | r3 = 1;
| }
0x000b5b2c cmp r0, 0 |
0x000b5b2e it ne |
| if (r0 == 0) {
0x000b5b30 movne r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000b5b32 cbz r3, 0xb5b80 | goto label_23;
| }
0x000b5b34 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000b5b36 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x000b5b38 cmp r3, r4 |
0x000b5b3a it ne |
| if (r3 != r4) {
0x000b5b3c cmpne r3, r2 | __asm ("cmpne r3, r2");
| }
0x000b5b3e blt 0xb5b22 |
| } while (r3 < r4);
0x000b5b40 ldr r3, [r6] | r3 = *(r6);
0x000b5b42 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| if (r2 == 0) {
0x000b5b44 cbz r2, 0xb5b4c | goto label_24;
| }
0x000b5b46 ldr r2, [sp, 0x68] | r2 = var_68h;
0x000b5b48 cmp r2, 0 |
| if (r2 != 0) {
0x000b5b4a bne 0xb5b22 | goto label_1;
| }
| label_24:
0x000b5b4c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000b5b4e ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x000b5b50 cmp r2, r1 |
| if (r2 != r1) {
0x000b5b52 bne 0xb5b18 | goto label_2;
| }
| label_22:
0x000b5b54 ldr r1, [r3] | r1 = *(r3);
0x000b5b56 ldr r0, [sp, 0x58] | r0 = var_58h;
0x000b5b58 blx 0x66a8 | loc_imp_gmon_start_ ();
0x000b5b5a stc p8, c2, [r6, 0]! | __asm ("stc p8, c2, [r6, 0]!");
| if (r2 != r1) {
0x000b5b5e bne 0xb5b22 | goto label_1;
| }
0x000b5b60 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000b5b62 add.w r0, r6, 0xc | r0 = r6 + 0xc;
0x000b5b66 str r4, [sp] | *(sp) = r4;
0x000b5b68 str r3, [sp, 0x10] | var_10h = r3;
0x000b5b6a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b5b6c str r3, [sp, 4] | var_4h = r3;
0x000b5b6e ldr r3, [sp, 0x68] | r3 = var_68h;
0x000b5b70 str r3, [sp, 8] | var_8h = r3;
0x000b5b72 asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000b5b74 str r3, [sp, 0xc] | var_ch = r3;
0x000b5b76 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [var_30h]");
0x000b5b7a bl 0x710e0 | fcn_000710e0 (r0, r1, r2, r3, r4, r5);
0x000b5b7e b 0xb5b22 | goto label_1;
| label_23:
0x000b5b80 cmp r0, 0 |
| if (r0 == 0) {
0x000b5b82 beq 0xb5af4 | goto label_3;
| }
0x000b5b84 ldr r6, [sp, 0x40] | r6 = var_40h;
0x000b5b86 mov r3, r0 | r3 = r0;
0x000b5b88 mov r1, fp | r1 = fp;
| if (r1 != 0) {
| label_20:
0x000b5b8a cbz r1, 0xb5b98 |
0x000b5b8c ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x000b5b90 mov r0, r1 | r0 = r1;
0x000b5b92 str r3, [sp, 0x20] | var_20h = r3;
0x000b5b94 blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x000b5b96 ldr r3, [sp, 0x20] | r3 = var_20h;
| }
0x000b5b98 cmp r3, 0x65 |
| if (r3 == 0x65) {
0x000b5b9a beq 0xb5bb4 | goto label_25;
| }
0x000b5b9c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b5b9e adds r4, 1 | r4++;
0x000b5ba0 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x000b5ba2 ldr r2, [sp, 0x50] | r2 = var_50h;
0x000b5ba4 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000b5ba8 cmp r1, r4 |
0x000b5baa str r3, [sp, 0x1c] | var_1ch = r3;
| if (r1 <= r4) {
0x000b5bac ble 0xb5bda | goto label_26;
| }
| if (r2 != 0) {
0x000b5bae cbnz r2, 0xb5bda | goto label_26;
| }
| do {
0x000b5bb0 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x000b5bb2 b 0xb5a42 | goto label_4;
| label_25:
0x000b5bb4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b5bb6 adds r4, 1 | r4++;
0x000b5bb8 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x000b5bba adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000b5bbe cmp r1, r4 |
0x000b5bc0 str r3, [sp, 0x1c] | var_1ch = r3;
0x000b5bc2 mov.w r3, 0 | r3 = 0;
0x000b5bc6 str r3, [sp, 0x50] | var_50h = r3;
0x000b5bc8 bgt 0xb5bb0 |
| } while (r1 > r4);
0x000b5bca b 0xb5a54 | goto label_5;
| label_19:
0x000b5bcc ldrb r2, [r0, 0x12] | r2 = *((r0 + 0x12));
0x000b5bce cmp r2, 1 |
0x000b5bd0 it eq |
| if (r2 == 1) {
0x000b5bd2 ldreq r7, [r0, 8] | r7 = *((r0 + 8));
| goto label_27;
| }
| if (r2 != 1) {
| label_27:
0x000b5bd4 bne.w 0xb5a9a | goto label_6;
| }
0x000b5bd8 b 0xb5aac | goto label_7;
| label_26:
0x000b5bda ldr r7, [sp, 0x44] | r7 = var_44h;
0x000b5bdc mov r6, r2 | r6 = r2;
0x000b5bde b 0xb5a56 | goto label_8;
| label_15:
0x000b5be0 blx 0x6430 | r0 = fcn_00006430 ();
0x000b5be4 add r0, r0 | r0 += r0;
0x000b5be6 movs r3, r0 | r3 = r0;
0x000b5be8 lsls r4, r6, 8 | r4 = r6 << 8;
0x000b5bea movs r0, r0 |
0x000b5bec bics r2, r5 | __asm ("bics r2, r5");
0x000b5bee movs r3, r0 | r3 = r0;
0x000b5bf0 push {r4, r5, r6, lr} |
0x000b5bf2 mov r5, r2 | r5 = r2;
0x000b5bf4 ldr r2, [r0] | r2 = *(r0);
0x000b5bf6 mov r4, r0 | r4 = r0;
0x000b5bf8 mov r6, r1 | r6 = r1;
0x000b5bfa ldr r0, [r2, 0x18] | r0 = *((r2 + 0x18));
0x000b5bfc subs r3, r5, r0 | r3 = r5 - r0;
0x000b5bfe cmp r3, 1 |
| if (r3 == 1) {
0x000b5c00 beq 0xb5c80 | goto label_28;
| }
0x000b5c02 cmp r3, 2 |
| if (r3 == 2) {
0x000b5c04 beq 0xb5c64 | goto label_29;
| }
| if (r3 == 0) {
0x000b5c06 cbz r3, 0xb5c2c | goto label_30;
| }
| label_10:
0x000b5c08 mov r1, r4 | r1 = r4;
0x000b5c0a movs r0, 0 | r0 = 0;
0x000b5c0c bl 0xb5910 | r0 = fcn_000b5910 (r0, r1);
| if (r0 != 0) {
0x000b5c10 cbnz r0, 0xb5c2a | goto label_31;
| }
0x000b5c12 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x000b5c14 cmp r4, 0 |
| if (r4 == 0) {
0x000b5c16 beq 0xb5cee | goto label_32;
| }
0x000b5c18 ldr r3, [r4, 0x78] | r3 = *((r4 + 0x78));
0x000b5c1a cmp r3, 0 |
| if (r3 == 0) {
0x000b5c1c beq 0xb5cee | goto label_32;
| }
0x000b5c1e ldrh.w r3, [r4, 0x90] | r3 = *((r4 + 0x90));
0x000b5c22 subs r3, 1 | r3--;
| label_11:
0x000b5c24 cmp r5, r3 |
| if (r5 < r3) {
0x000b5c26 blt 0xb5cc2 | goto label_33;
| }
| do {
| label_9:
0x000b5c28 movs r0, 0 | r0 = 0;
| label_31:
0x000b5c2a pop {r4, r5, r6, pc} |
| label_30:
0x000b5c2c ldr r5, [r1] | r5 = *(r1);
0x000b5c2e ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b5c30 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x000b5c34 bne 0xb5c3a |
0x000b5c36 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 == 0) {
0x000b5c38 cbz r3, 0xb5c40 | goto label_34;
| }
| }
0x000b5c3a mov r0, r5 | r0 = r5;
0x000b5c3c bl 0x2d36c | fcn_0002d36c (r0);
| label_34:
0x000b5c40 movs r3, 1 | r3 = 1;
0x000b5c42 mov r0, r5 | r0 = r5;
0x000b5c44 strh r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000b5c46 bl 0x2d36c | fcn_0002d36c (r0);
0x000b5c4a ldr r2, [pc, 0xb4] |
0x000b5c4c movw r0, 0x1a01 | r0 = 0x1a01;
0x000b5c50 ldr r3, [pc, 0xb0] |
0x000b5c52 movs r1, 0x70 | r1 = 0x70;
0x000b5c54 str r4, [r5, 8] | *((r5 + 8)) = r4;
0x000b5c56 add r2, pc | r2 = 0x16b95c;
0x000b5c58 strh r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
0x000b5c5a add r3, pc | r3 = 0x16b962;
0x000b5c5c str r2, [r5] | *(r5) = r2;
0x000b5c5e strb r1, [r5, 0x13] | *((r5 + 0x13)) = r1;
0x000b5c60 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x000b5c62 b 0xb5c28 |
| } while (1);
| label_29:
0x000b5c64 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| if (r3 == 0) {
0x000b5c66 cbz r3, 0xb5ca2 | goto label_35;
| }
0x000b5c68 ldr r0, [r1] | r0 = *(r1);
0x000b5c6a ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000b5c6c ldrh r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x000b5c6e asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000b5c70 tst.w r1, 0x9000 |
| if ((r1 & 0x9000) != 0) {
0x000b5c74 bne 0xb5cf8 | goto label_36;
| }
0x000b5c76 movs r1, 4 | r1 = 4;
0x000b5c78 strd r2, r3, [r0] | __asm ("strd r2, r3, [r0]");
0x000b5c7c strh r1, [r0, 0x10] | *((r0 + 0x10)) = r1;
0x000b5c7e b 0xb5c28 | goto label_9;
| label_28:
0x000b5c80 ldr r0, [r1] | r0 = *(r1);
0x000b5c82 ldrd r4, r5, [r4, 0x20] | __asm ("ldrd r4, r5, [r4, 0x20]");
0x000b5c86 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000b5c88 tst.w r3, 0x9000 |
0x000b5c8c ittt eq |
| if ((r3 & 0x9000) != 0) {
0x000b5c8e moveq r3, 4 | r3 = 4;
| }
| if ((r3 & 0x9000) == 0) {
0x000b5c90 strdeq r4, r5, [r0] | __asm ("strdeq r4, r5, [r0]");
| }
| if ((r3 & 0x9000) != 0) {
0x000b5c94 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| goto label_37;
| }
| if ((r3 & 0x9000) == 0) {
| label_37:
0x000b5c96 beq 0xb5c28 | goto label_9;
| }
0x000b5c98 mov r2, r4 | r2 = r4;
0x000b5c9a mov r3, r5 | r3 = r5;
0x000b5c9c bl 0x2d2d8 | fcn_0002d2d8 (r0, r1, r2, r3, r4, r5, r6);
0x000b5ca0 b 0xb5c28 | goto label_9;
| label_35:
0x000b5ca2 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000b5ca4 mov r5, r0 | r5 = r0;
0x000b5ca6 cmp r3, 0 |
| if (r3 != 0) {
0x000b5ca8 bne 0xb5c08 | goto label_10;
| }
0x000b5caa ldr r0, [r1] | r0 = *(r1);
0x000b5cac ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000b5cae tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x000b5cb2 bne 0xb5cf4 |
0x000b5cb4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000b5cb8 movs r3, 4 | r3 = 4;
0x000b5cba strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000b5cbc vstr d16, [r0] | __asm ("vstr d16, [r0]");
0x000b5cc0 b 0xb5c28 | goto label_9;
| label_33:
0x000b5cc2 adds r1, r5, 1 | r1 = r5 + 1;
0x000b5cc4 mov r0, r4 | r0 = r4;
0x000b5cc6 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000b5cca ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000b5ccc mov r5, r0 | r5 = r0;
0x000b5cce lsls r2, r3, 0x12 | r2 = r3 << 0x12;
0x000b5cd0 ittt mi |
| if (r2 < r3) {
0x000b5cd2 bicmi r3, r3, 0x2000 | __asm ("bicmi r3, r3, 0x2000");
| }
| if (r2 >= r3) {
0x000b5cd6 orrmi r3, r3, 0x4000 | r3 |= 0x4000;
| }
| if (r2 < r3) {
0x000b5cd8 bics r0, r0 | __asm ("bics r0, r0");
| }
0x000b5cda strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| if (r4 != 0) {
0x000b5cdc cbz r4, 0xb5ce4 |
0x000b5cde mov r0, r4 | r0 = r4;
0x000b5ce0 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000b5ce4 mov r1, r5 | r1 = r5;
0x000b5ce6 mov r0, r6 | r0 = r6;
0x000b5ce8 bl 0x3f0f8 | fcn_0003f0f8 (r0);
0x000b5cec b 0xb5c28 | goto label_9;
| label_32:
0x000b5cee mov.w r3, -1 | r3 = -1;
0x000b5cf2 b 0xb5c24 | goto label_11;
| }
0x000b5cf4 movs r2, 0 | r2 = 0;
0x000b5cf6 movs r3, 0 | r3 = 0;
| label_36:
0x000b5cf8 bl 0x2d2d8 | fcn_0002d2d8 (r0, r1, r2, r3, r4, r5, r6);
0x000b5cfc b 0xb5c28 | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb5e3c */
| #include <stdint.h>
|
; (fcn) fcn.000b5e3c () | void fcn_000b5e3c (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000b5e3c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b5e40 mov sb, r2 | sb = r2;
0x000b5e42 ldr r2, [pc, 0x10c] |
0x000b5e44 sub sp, 0x1c |
0x000b5e46 ldr r3, [pc, 0x10c] | r3 = *(0xb5f56);
0x000b5e48 add r2, pc | r2 = 0x16bd9e;
0x000b5e4a ldr r4, [r0] | r4 = *(r0);
0x000b5e4c ldr r3, [r2, r3] |
0x000b5e4e ldr r3, [r3] | r3 = imp.atan;
0x000b5e50 str r3, [sp, 0x14] | var_14h = r3;
0x000b5e52 mov.w r3, 0 | r3 = 0;
| if (r4 != 0) {
0x000b5e56 cbz r4, 0xb5e72 |
| label_1:
0x000b5e58 ldr r2, [pc, 0xfc] |
0x000b5e5a ldr r3, [pc, 0xf8] | r3 = *(0xb5f56);
0x000b5e5c add r2, pc | r2 = 0x16bdb8;
0x000b5e5e ldr r3, [r2, r3] | r3 = imp.atan;
0x000b5e60 ldr r2, [r3] | r2 = imp.atan;
0x000b5e62 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b5e64 eors r2, r3 | r2 ^= r3;
0x000b5e66 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b5e6a bne 0xb5f4a | goto label_3;
| }
0x000b5e6c add sp, 0x1c |
0x000b5e6e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000b5e72 ldr r3, [pc, 0xe8] |
0x000b5e74 mov r5, r0 | r5 = r0;
0x000b5e76 ldr r6, [r1, 0x18] | r6 = *((r1 + 0x18));
0x000b5e78 mov r7, r1 | r7 = r1;
0x000b5e7a add r3, pc |
0x000b5e7c ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b5e80 cmp r3, 0 |
| if (r3 != 0) {
0x000b5e82 bne 0xb5f38 | goto label_4;
| }
0x000b5e84 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b5e88 cmp r0, 0 |
| if (r0 != 0) {
0x000b5e8a bne 0xb5f32 | goto label_5;
| }
0x000b5e8c bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b5e90 cmp r0, 0 |
| if (r0 != 0) {
0x000b5e92 bne 0xb5f32 | goto label_5;
| }
| label_2:
0x000b5e94 movs r1, 0xa | r1 = 0xa;
0x000b5e96 smull r0, r1, r6, r1 | r0:r1 = r6 * r1;
0x000b5e9a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000b5e9e mov r6, r0 | r6 = r0;
0x000b5ea0 cmp r0, 0 |
| if (r0 == 0) {
0x000b5ea2 beq 0xb5f32 | goto label_5;
| }
0x000b5ea4 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000b5ea6 cmp r3, 0 |
| if (r3 <= 0) {
0x000b5ea8 ble 0xb5ee8 | goto label_6;
| }
0x000b5eaa add.w sl, sb, r3, lsl 2 | sl = sb + (r3 << 2);
| label_0:
0x000b5eae ldr r3, [sb], 4 | r3 = *(sb);
| sb += 4;
0x000b5eb2 add.w fp, r6, r4 |
0x000b5eb6 mov.w ip, 0 |
0x000b5eba mov lr, fp | lr = fp;
| do {
0x000b5ebc lsrs r0, r3, 7 | r0 = r3 >> 7;
0x000b5ebe orn r1, r3, 0x7f | r1 = r3 | 0x7f;
| r1 = ~r1;
0x000b5ec2 uxtb.w r8, r3 | r8 = (int8_t) r3;
0x000b5ec6 mov r2, lr | r2 = lr;
0x000b5ec8 orr.w r3, r0, ip, lsl 25 | r3 = r0 | (ip << 25);
0x000b5ecc lsr.w ip, ip, 7 |
0x000b5ed0 strb r1, [lr], 1 | *(lr) = r1;
| lr++;
0x000b5ed4 orrs.w r1, r3, ip | r1 = r3 | ip;
0x000b5ed8 bne 0xb5ebc |
| } while (r1 != r3);
0x000b5eda cmp sl, sb |
0x000b5edc sub.w lr, lr, fp | lr -= fp;
0x000b5ee0 add r4, lr | r4 += lr;
0x000b5ee2 strb.w r8, [r2] | *(r2) = r8;
| if (sl != sb) {
0x000b5ee6 bne 0xb5eae | goto label_0;
| }
| label_6:
0x000b5ee8 movs r3, 0 | r3 = 0;
0x000b5eea add r2, sp, 0x10 | r2 += var_10h;
0x000b5eec movs r1, 0x14 | r1 = 0x14;
0x000b5eee mov r0, r7 | r0 = r7;
0x000b5ef0 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000b5ef4 mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x000b5ef6 cbnz r0, 0xb5f3e |
0x000b5ef8 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000b5efc movs r1, 1 | r1 = 1;
0x000b5efe ldrd r2, r3, [r7, 0x110] | __asm ("ldrd r2, r3, [r7, 0x110]");
0x000b5f02 mov r0, sb | r0 = sb;
0x000b5f04 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b5f08 ldr r3, [pc, 0x54] |
0x000b5f0a mov r2, r6 | r2 = r6;
0x000b5f0c str r4, [sp] | *(sp) = r4;
0x000b5f0e asrs r4, r4, 0x1f | r4 >>= 0x1f;
0x000b5f10 movs r1, 2 | r1 = 2;
0x000b5f12 str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch]");
0x000b5f16 add r3, pc | r3 = 0x16be7a;
0x000b5f18 mov r0, sb | r0 = sb;
0x000b5f1a str r3, [sp, 8] | var_8h = r3;
0x000b5f1c str r4, [sp, 4] | var_4h_2 = r4;
0x000b5f1e bl 0x53bf8 | fcn_00053bf8 (r0, r1, r2, r3, r4, r5);
0x000b5f22 mov r0, sb | r0 = sb;
0x000b5f24 bl 0x96a64 | fcn_00096a64 (r0);
0x000b5f28 mov r0, sb | r0 = sb;
0x000b5f2a bl 0x79b80 | fcn_00079b80 (r0);
0x000b5f2e str r0, [r5] | *(r5) = r0;
0x000b5f30 b 0xb5e58 | goto label_1;
| label_5:
0x000b5f32 movs r3, 7 | r3 = 7;
0x000b5f34 str r3, [r5] | *(r5) = r3;
0x000b5f36 b 0xb5e58 | goto label_1;
| label_4:
0x000b5f38 dmb ish | __asm ("dmb ish");
0x000b5f3c b 0xb5e94 | goto label_2;
| }
0x000b5f3e mov r0, r6 | r0 = r6;
0x000b5f40 bl 0x26dbc | fcn_00026dbc (r0);
0x000b5f44 str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x000b5f48 b 0xb5e58 | goto label_1;
| label_3:
0x000b5f4a blx 0x6430 | fcn_00006430 ();
0x000b5f4e nop |
0x000b5f50 subs r7, 0x50 | r7 -= 0x50;
0x000b5f52 movs r3, r0 | r3 = r0;
0x000b5f54 lsls r4, r6, 8 | r4 = r6 << 8;
0x000b5f56 movs r0, r0 |
0x000b5f58 subs r7, 0x3c | r7 -= 0x3c;
0x000b5f5a movs r3, r0 | r3 = r0;
0x000b5f5c add r2, r3 | r2 += r3;
0x000b5f5e movs r3, r0 | r3 = r0;
0x000b5f60 lsrs r3, r4, 0x1a | r3 = r4 >> 0x1a;
0x000b5f62 vtbl.8 d30, {d7, d8}, d29 | __asm ("vtbl.8 d30, {d7, d8}, d29");
0x000b5f64 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb632c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000b632c () | void fcn_000b632c (int16_t arg_e8h, int16_t arg_ech, int16_t arg_f0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| char * var_20h;
| int16_t var_24h;
| char * var_28h;
| arithmetic var_2ch;
| arithmetic var_30h;
| char * var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| char * s1;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| arithmetic x;
| int16_t var_78h;
| int16_t var_7ch;
| int32_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_bch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000b632c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000b6330 sub sp, 0xc4 |
0x000b6332 str r2, [sp, 0x48] | var_48h = r2;
0x000b6334 mov sl, r1 | sl = r1;
0x000b6336 ldr.w r2, [pc, 0x670] |
0x000b633a ldr r4, [sp, 0xe8] | r4 = *(arg_e8h);
0x000b633c str r3, [sp, 0x14] | var_14h = r3;
0x000b633e ldr.w r3, [pc, 0x66c] | r3 = *(0xb69ae);
0x000b6342 add r2, pc | r2 = 0x16ccf0;
0x000b6344 str r0, [sp, 0x54] | var_54h = r0;
0x000b6346 str r4, [sp, 0x40] | var_40h = r4;
0x000b6348 ldr r3, [r2, r3] |
0x000b634a ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000b634c ldr r3, [r3] | r3 = imp.atan;
0x000b634e str r3, [sp, 0xbc] | var_bch = r3;
0x000b6350 mov.w r3, 0 | r3 = 0;
0x000b6352 lsls r0, r0, 0xc | r0 <<= 0xc;
0x000b6354 ldr r3, [r4] | r3 = *(r4);
0x000b6356 ldrb r3, [r3, 3] | r3 = *((r3 + 3));
0x000b6358 str r3, [sp, 0x18] | var_18h = r3;
0x000b635a movs r3, 0 | r3 = 0;
0x000b635c strd r3, r3, [sp, 0x70] | __asm ("strd r3, r3, [var_70h]");
0x000b635e adds r3, 0x1c | r3 += 0x1c;
0x000b6360 blx 0x65dc | strcmp (r0, r1);
0x000b6364 str r0, [sp, 0x4c] | var_4ch = r0;
0x000b6366 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000b6368 blx 0x65dc | strcmp (r0, r1);
0x000b636c ldr.w r3, [pc, 0x640] |
0x000b636e adds r6, 0x40 | r6 += 0x40;
0x000b6370 ldr r2, [sp, 0xec] | r2 = *(arg_ech);
0x000b6372 str r0, [sp, 0x50] | var_50h = r0;
0x000b6374 add r3, pc |
0x000b6376 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b637a str r2, [sp, 0x3c] | var_3ch = r2;
0x000b637c ldr r2, [sp, 0xf0] | r2 = *(arg_f0h);
0x000b637e str r2, [sp, 0x38] | var_38h = r2;
0x000b6380 cmp r3, 0 |
| if (r3 != 0) {
0x000b6382 bne.w 0xb6a06 | goto label_46;
| }
0x000b6386 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b638a cmp r0, 0 |
| if (r0 != 0) {
0x000b638c bne.w 0xb6842 | goto label_47;
| }
0x000b6390 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b6394 cmp r0, 0 |
| if (r0 != 0) {
0x000b6396 bne.w 0xb6842 | goto label_47;
| }
| label_11:
0x000b639a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b639c movs r1, 0 | r1 = 0;
0x000b639e subs r4, r3, 2 | r4 = r3 - 2;
0x000b63a0 lsls r4, r4, 2 | r4 <<= 2;
0x000b63a2 mov r0, r4 | r0 = r4;
0x000b63a4 bl 0x28c3c | fcn_00028c3c (r0);
0x000b63a8 str r0, [sp, 0x10] | var_10h = r0;
0x000b63aa cmp r0, 0 |
| if (r0 == 0) {
0x000b63ac beq.w 0xb6842 | goto label_47;
| }
0x000b63b0 mov r2, r4 | r2 = r4;
0x000b63b2 movs r1, 0 | r1 = 0;
0x000b63b4 blx 0x62ec | fcn_000062ec ();
0x000b63b8 ldr.w r3, [pc, 0x5f8] |
0x000b63bc add r3, pc |
0x000b63be ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b63c2 cmp r3, 0 |
| if (r3 != 0) {
0x000b63c4 bne.w 0xb6bde | goto label_48;
| }
0x000b63c8 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b63cc cmp r0, 0 |
| if (r0 != 0) {
0x000b63ce bne.w 0xb6846 | goto label_49;
| }
0x000b63d2 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b63d6 cmp r0, 0 |
| if (r0 != 0) {
0x000b63d8 bne.w 0xb6846 | goto label_49;
| }
| label_18:
0x000b63dc mov r0, r4 | r0 = r4;
0x000b63de movs r1, 0 | r1 = 0;
0x000b63e0 bl 0x28c3c | fcn_00028c3c (r0);
0x000b63e4 str r0, [sp, 0x1c] | var_1ch = r0;
0x000b63e6 cmp r0, 0 |
| if (r0 == 0) {
0x000b63e8 beq.w 0xb6846 | goto label_49;
| }
0x000b63ec mov r2, r4 | r2 = r4;
0x000b63ee movs r1, 0 | r1 = 0;
0x000b63f0 blx 0x62ec | fcn_000062ec ();
0x000b63f4 ldr.w r8, [sp, 0x70] | r8 = var_70h;
0x000b63f6 strh r0, [r6, 2] | *((r6 + 2)) = r0;
0x000b63f8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000b63fa clz r3, r8 | r3 &= r8;
0x000b63fe lsrs r3, r3, 5 | r3 >>= 5;
0x000b6400 cmp r2, 3 |
0x000b6402 it le |
| if (r2 > 3) {
0x000b6404 movle r3, 0 | r3 = 0;
| }
0x000b6406 cmp r3, 0 |
| if (r3 == 0) {
0x000b6408 beq.w 0xb7002 | goto label_50;
| }
0x000b640c ldr.w r3, [pc, 0x5a8] |
0x000b6410 mov.w sb, 0 | sb = 0;
0x000b6414 ldr.w r6, [pc, 0x5a4] |
0x000b6418 movs r5, 4 | r5 = 4;
0x000b641a str.w sl, [sp, 0x58] | __asm ("str.w sl, [var_58h]");
0x000b641e mov sl, sb | sl = sb;
0x000b6420 add r3, pc | r3 = 0x16cddc;
0x000b6422 str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x000b6426 str r3, [sp, 0x60] | var_60h = r3;
0x000b6428 add r6, pc | r6 = 0x16cde8;
0x000b642a ldr r3, [sp, 0x40] | r3 = var_40h;
0x000b642c str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x000b6430 str.w sb, [sp, 0x28] | __asm ("str.w sb, [var_28h]");
0x000b6434 add.w r7, r3, 8 | r7 = r3 + 8;
0x000b6438 strd sb, sb, [sp, 0x2c] | __asm ("strd sb, sb, [var_2ch]");
0x000b643c str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x000b6440 strd sb, sb, [sp, 0x68] | __asm ("strd sb, sb, [var_68h]");
0x000b6444 b 0xb6482 |
| while (r3 != 0) {
| label_0:
0x000b6446 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000b6448 cmp r3, 0x34 |
| if (r3 == 0x34) {
0x000b644a beq.w 0xb68da | goto label_51;
| }
| label_6:
0x000b644e mov r0, r4 | r0 = r4;
0x000b6450 blx 0x65dc | strcmp (r0, r1);
0x000b6454 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000b6456 str.w r4, [r3, sb, lsl 2] | __asm ("str.w r4, [r3, sb, lsl 2]");
0x000b645a add.w r3, sl, 1 | r3 = sl + 1;
0x000b645e ldr r4, [sp, 0x70] | r4 = var_70h;
0x000b6460 add.w sl, r3, r0 | sl = r3 + r0;
0x000b6464 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b6466 add.w sb, sb, 1 | sb++;
0x000b646a clz fp, r4 |
0x000b646e lsr.w fp, fp, 5 |
0x000b6472 cmp r3, r5 |
0x000b6474 ite le |
| if (r3 > r5) {
0x000b6476 movle r3, 0 | r3 = 0;
| }
| if (r3 <= r5) {
0x000b6478 andgt r3, fp, 1 | r3 = fp & 1;
| }
| label_12:
0x000b647c adds r5, 1 | r5++;
0x000b647e cmp r3, 0 |
| if (r3 == 0) {
0x000b6480 beq 0xb6528 | goto label_52;
| }
| label_1:
0x000b6482 ldr r3, [sp, 0x74] | r3 = x;
0x000b6484 ldr r4, [r7, 4]! | r4 = *((r7 += 4));
0x000b6488 cmp r3, 0 |
0x000b648a bne 0xb6446 |
| }
0x000b648c mov r0, r4 | r0 = r4;
0x000b648e blx 0x65dc | r0 = strcmp (r0, r1);
0x000b6492 cmp r0, 8 |
| if (r0 < 8) {
0x000b6494 bls 0xb6446 | goto label_0;
| }
0x000b6496 ldr.w r1, [pc, 0x528] |
0x000b649a mov r2, r4 | r2 = r4;
0x000b649c movs r0, 7 | r0 = 7;
0x000b649e add r1, pc | r1 = 0x16ce64;
0x000b64a0 b 0xb64bc |
| while (r3 != 0) {
0x000b64a2 add r3, r6 | r3 += r6;
0x000b64a4 adds r1, 1 | r1++;
0x000b64a6 ldrb.w lr, [r3, 0x140] |
0x000b64aa ldrb.w r3, [ip] | r3 = *(ip);
0x000b64ae add r3, r6 | r3 += r6;
0x000b64b0 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b64b4 cmp lr, r3 |
| if (lr != r3) {
0x000b64b6 bne 0xb64c8 | goto label_53;
| }
0x000b64b8 subs r0, 1 | r0--;
| if (r0 <= 1) {
0x000b64ba blo 0xb64e6 | goto label_54;
| }
0x000b64bc mov r8, r2 | r8 = r2;
0x000b64be ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x000b64c2 mov ip, r1 |
0x000b64c4 cmp r3, 0 |
0x000b64c6 bne 0xb64a2 |
| }
| label_53:
0x000b64c8 ldr.w r3, [pc, 0x4f8] |
0x000b64cc ldrb.w r2, [r8] | r2 = *(r8);
0x000b64d0 ldrb.w r1, [ip] | r1 = *(ip);
0x000b64d4 add r3, pc | r3 = 0x16ce9c;
0x000b64d6 add r2, r3 | r2 += r3;
0x000b64d8 add r3, r1 | r3 += r1;
0x000b64da ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000b64de ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b64e2 cmp r2, r3 |
| if (r2 != r3) {
0x000b64e4 bne 0xb6446 | goto label_0;
| }
| label_54:
0x000b64e6 ldrb r3, [r4, 8] | r3 = *((r4 + 8));
0x000b64e8 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x000b64ea bmi 0xb6446 | goto label_0;
| }
0x000b64ec ldr.w r2, [pc, 0x4d8] |
0x000b64f0 add r2, pc | r2 = 0x16cebc;
0x000b64f2 add r3, r2 | r3 += r2;
0x000b64f4 ldrb.w r3, [r3, 0x750] | r3 = *((r3 + 0x750));
0x000b64f6 adds r7, 0x50 | r7 += 0x50;
0x000b64f8 cmp r3, 0 |
| if (r3 != 0) {
0x000b64fa bne 0xb6446 | goto label_0;
| }
0x000b64fc ldr r3, [sp, 0x38] | r3 = var_38h;
0x000b64fe add.w r1, r4, 9 | r1 = r4 + 9;
0x000b6502 ldr r0, [sp, 0x48] | r0 = var_48h;
0x000b6504 add r2, sp, 0x74 | r2 += x;
0x000b6506 bl 0x60d48 | fcn_00060d48 (r0, r1, r2, r3, r4);
0x000b650a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b650c clz fp, r0 |
0x000b6510 lsr.w fp, fp, 5 |
0x000b6514 mov r4, r0 | r4 = r0;
0x000b6516 str r0, [sp, 0x70] | var_70h = r0;
0x000b6518 cmp r3, r5 |
0x000b651a ite le |
| if (r3 > r5) {
0x000b651c movle r3, 0 | r3 = 0;
| }
| if (r3 <= r5) {
0x000b651e andgt r3, fp, 1 | r3 = fp & 1;
| }
0x000b6522 adds r5, 1 | r5++;
0x000b6524 cmp r3, 0 |
| if (r3 != 0) {
0x000b6526 bne 0xb6482 | goto label_1;
| }
| label_52:
0x000b6528 mov r8, r4 | r8 = r4;
0x000b652a mov r4, r3 | r4 = r3;
0x000b652c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000b652e str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x000b6532 ldr.w sl, [sp, 0x58] | sl = var_58h;
0x000b6536 cmp r3, 0 |
0x000b6538 ite eq |
| if (r3 != 0) {
0x000b653a moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000b653c andne r3, fp, 1 | r3 = fp & 1;
| }
0x000b6540 cmp r3, 0 |
| if (r3 != 0) {
0x000b6542 bne.w 0xb69e0 | goto label_55;
| }
0x000b6546 cmp.w r8, 0 |
| if (r8 != 0) {
0x000b654a bne.w 0xb6a26 | goto label_26;
| }
| label_15:
0x000b654e cmp.w sb, 0 |
| if (sb == 0) {
0x000b6552 bne 0xb6566 |
| label_43:
0x000b6554 ldr.w r3, [pc, 0x474] |
0x000b6558 mov.w sb, 1 | sb = 1;
0x000b655c ldr r2, [sp, 0x10] | r2 = var_10h;
0x000b655e add r3, pc | r3 = 0x16cf2e;
0x000b6560 str r3, [r2] | *(r2) = r3;
0x000b6562 movs r3, 8 | r3 = 8;
0x000b6564 str r3, [sp, 0x14] | var_14h = r3;
| }
| label_9:
0x000b6566 ldr r6, [sp, 0x74] | r6 = x;
0x000b6568 cmp r6, 0 |
| if (r6 == 0) {
0x000b656a beq.w 0xb6bec | goto label_56;
| }
0x000b656c strh r7, [r7, 0x18] | *((r7 + 0x18)) = r7;
| label_20:
0x000b656e ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x000b6570 cbz r3, 0xb657c |
0x000b6572 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000b6574 ldrb r3, [r2] | r3 = *(r2);
0x000b6576 cmp r3, 0 |
| if (r3 != 0) {
0x000b6578 bne.w 0xb6a2e | goto label_57;
| }
| }
0x000b657c movs r7, 0x18 | r7 = 0x18;
0x000b657e movs r4, 1 | r4 = 1;
0x000b6580 mov r6, r7 | r6 = r7;
0x000b6582 mov r5, r4 | r5 = r4;
| label_14:
0x000b6584 ldr.w r3, [pc, 0x448] |
0x000b6588 add r3, pc |
0x000b658a ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b658e cmp r3, 0 |
| if (r3 != 0) {
0x000b6590 bne.w 0xb6be6 | goto label_58;
| }
0x000b6594 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b6598 cmp r0, 0 |
| if (r0 != 0) {
0x000b659a bne.w 0xb6a4a | goto label_59;
| }
0x000b659e bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b65a2 cmp r0, 0 |
| if (r0 != 0) {
0x000b65a4 bne.w 0xb6a4a | goto label_59;
| }
| label_19:
0x000b65a8 mov r0, r7 | r0 = r7;
0x000b65aa movs r1, 0 | r1 = 0;
0x000b65ac bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000b65b0 mov fp, r0 |
0x000b65b2 cmp r0, 0 |
| if (r0 == 0) {
0x000b65b4 beq.w 0xb6a4a | goto label_59;
| }
0x000b65b8 mov r2, r6 | r2 = r6;
0x000b65ba movs r1, 0 | r1 = 0;
0x000b65bc blx 0x62ec | fcn_000062ec ();
0x000b65c0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000b65c2 cmp r3, 0 |
| if (r3 == 0) {
0x000b65c4 beq 0xb664c | goto label_60;
| }
0x000b65c6 cmp r5, 1 |
| if (r5 == 1) {
0x000b65c8 beq 0xb664c | goto label_60;
| }
0x000b65ca ldr.w ip, [sp, 0x20] | ip = var_20h;
0x000b65ce movw r8, 0x9680 |
0x000b65d2 movt r8, 0x98 | r8 = 0x989680;
0x000b65d6 mov.w lr, 1 | lr = 1;
| label_2:
0x000b65da ldrb.w r3, [ip] | r3 = *(ip);
0x000b65de subs r3, 0x30 | r3 -= 0x30;
0x000b65e0 uxtb r2, r3 | r2 = (int8_t) r3;
0x000b65e2 cmp r2, 9 |
| if (r2 > 9) {
0x000b65e4 bhi.w 0xb6dca | goto label_61;
| }
0x000b65e8 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x000b65ea add.w r4, ip, 1 | r4 = ip + 1;
0x000b65ee movs r6, 0 | r6 = 0;
0x000b65f0 b 0xb6616 |
| while (r0 < 9) {
0x000b65f2 lsls r0, r2, 2 | r0 = r2 << 2;
0x000b65f4 lsls r1, r3, 2 | r1 = r3 << 2;
0x000b65f6 orr.w r0, r0, r3, lsr 30 | r0 |= (r3 >> 30);
0x000b65fa adds r3, r1, r3 | r3 = r1 + r3;
0x000b65fc adc.w r0, r2, r0 | __asm ("adc.w r0, r2, r0");
0x000b6600 adds r3, r3, r3 | r3 += r3;
0x000b6602 adcs r0, r0 | __asm ("adcs r0, r0");
0x000b6604 adds r3, r7, r3 | r3 = r7 + r3;
0x000b6606 adc.w r2, r0, r7, asr 31 | __asm ("adc.w r2, r0, r7, asr 31");
0x000b660a cmp.w r3, -0x80000000 |
0x000b660e sbcs r1, r2, 0 | __asm ("sbcs r1, r2, 0");
| if (r3 >= -0x80000000) {
0x000b6612 bhs.w 0xb6bb2 | goto label_62;
| }
0x000b6616 ldrb r7, [r4] | r7 = *(r4);
0x000b6618 mov r1, r4 | r1 = r4;
0x000b661a adds r6, 1 | r6++;
0x000b661c adds r4, 1 | r4++;
0x000b661e subs r7, 0x30 | r7 -= 0x30;
0x000b6620 uxtb r0, r7 | r0 = (int8_t) r7;
0x000b6622 cmp r0, 9 |
0x000b6624 bls 0xb65f2 |
| }
0x000b6626 cmp r3, r8 |
| if (r3 > r8) {
0x000b6628 bgt.w 0xb6bb6 | goto label_63;
| }
0x000b662c add.w r1, ip, r6 | r1 = ip + r6;
0x000b6630 cmp r3, 0 |
| if (r3 == 0) {
0x000b6632 beq.w 0xb6bb6 | goto label_63;
| }
0x000b6636 add.w r2, lr, lr, lsl 1 | r2 = lr + (lr << 1);
0x000b663a add.w lr, lr, 1 | lr++;
0x000b663e str.w r3, [fp, r2, lsl 3] | __asm ("str.w r3, [fp, r2, lsl 3]");
| label_17:
0x000b6642 cmp r5, lr |
0x000b6644 add.w ip, r1, 1 |
| if (r5 > lr) {
0x000b6648 bgt 0xb65da | goto label_2;
| }
0x000b664a mov r4, r5 | r4 = r5;
| label_60:
0x000b664c movs r3, 0 | r3 = 0;
0x000b664e str r3, [sp, 0x70] | var_70h = r3;
0x000b6650 ldr r3, [pc, 0x380] |
0x000b6652 add r3, pc |
0x000b6654 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b6658 cmp r3, 0 |
| if (r3 != 0) {
0x000b665a bne.w 0xb6e4c | goto label_64;
| }
0x000b665e bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b6662 cmp r0, 0 |
| if (r0 != 0) {
0x000b6664 bne.w 0xb6e52 | goto label_65;
| }
0x000b6668 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b666c cmp r0, 0 |
| if (r0 != 0) {
0x000b666e bne.w 0xb6e52 | goto label_65;
| }
| label_21:
0x000b6672 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000b6674 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x000b6676 lsls r4, r0, 0x11 | r4 = r0 << 0x11;
0x000b6678 ldr r7, [sp, 0x50] | r7 = var_50h;
0x000b667a ldr r1, [sp, 0x14] | r1 = var_14h;
0x000b667c add.w r8, r3, 1 | r8 = r3 + 1;
0x000b6680 add.w r3, sb, 0x48 | r3 = sb + 0x48;
0x000b6684 adds r7, 1 | r7++;
0x000b6686 add.w r3, r3, r4, lsl 1 | r3 += (r4 << 1);
0x000b668a add.w r2, r7, r8 | r2 = r7 + r8;
0x000b668e add r2, sb | r2 += sb;
0x000b6690 add r2, r1 | r2 += r1;
0x000b6692 movs r1, 0 | r1 = 0;
0x000b6694 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x000b6698 mov r0, r2 | r0 = r2;
0x000b669a str r2, [sp, 0x14] | var_14h = r2;
0x000b669c bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000b66a0 mov r6, r0 | r6 = r0;
0x000b66a2 cmp r0, 0 |
| if (r0 == 0) {
0x000b66a4 beq.w 0xb6e52 | goto label_65;
| }
0x000b66a8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000b66aa movs r1, 0 | r1 = 0;
0x000b66ac blx 0x62ec | fcn_000062ec ();
0x000b66b0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000b66b2 add.w r0, r6, 0x120 | r0 = r6 + 0x120;
0x000b66b6 vldr d16, [pc, 0x2e8] | __asm ("vldr d16, [0x000b69a4]");
0x000b66ba lsls r4, r4, 3 | r4 <<= 3;
0x000b66bc str r0, [r6, 0x1c] | *((r6 + 0x1c)) = r0;
0x000b66be add.w r0, r0, sb, lsl 2 | r0 += (sb << 2);
0x000b66c2 str r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
0x000b66c4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000b66c6 str.w sl, [r6, 0xc] | __asm ("str.w sl, [r6, 0xc]");
0x000b66ca str.w sb, [r6, 0x18] | __asm ("str.w sb, [r6, 0x18]");
0x000b66ce str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x000b66d0 ldr r3, [sp, 0x68] | r3 = var_68h;
0x000b66d2 vstr d16, [r6, 0x108] | __asm ("vstr d16, [r6, 0x108]");
0x000b66d6 str.w r0, [r6, 0x104] | __asm ("str.w r0, [r6, 0x104]");
0x000b66da eor r2, r3, 1 | r2 = r3 ^ 1;
0x000b66de ldr r3, [sp, 0x18] | r3 = var_18h;
0x000b66e0 sub.w r1, r3, 0x34 | r1 = r3 - 0x34;
0x000b66e2 lsls r4, r6, 4 | r4 = r6 << 4;
0x000b66e4 movs r3, 0 | r3 = 0;
0x000b66e6 clz r1, r1 | r1 &= r1;
0x000b66e8 invalid |
0x000b66ec bfi r3, r1, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x000b66ee lsls r7, r0, 0xc | r7 = r0 << 0xc;
0x000b66f0 ands r2, r1 | r2 &= r1;
0x000b66f2 bfi r3, r1, 8, 8 | value_2 = BIT_MASK (8, 8);
| value_3 = r1 & value_2;
| value_2 = ~value_2;
| r3 &= value_2;
| r3 |= value_3;
0x000b66f6 mov r1, fp | r1 = fp;
0x000b66f8 bfi r3, r2, 0x10, 8 | value_4 = BIT_MASK (0x10, 8);
| value_5 = r2 & value_4;
| value_4 = ~value_4;
| r3 &= value_4;
| r3 |= value_5;
0x000b66fc ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x000b66fe bfi r3, r2, 0x18, 8 | value_6 = BIT_MASK (0x18, 8);
| value_7 = r2 & value_6;
| value_6 = ~value_6;
| r3 &= value_6;
| r3 |= value_7;
0x000b6700 str r7, [r3, 0x30] | *((r3 + 0x30)) = r7;
0x000b6702 mov r2, r4 | r2 = r4;
0x000b6704 str.w r3, [r6, 0xec] | __asm ("str.w r3, [r6, 0xec]");
0x000b6708 ldr r3, [sp, 0x74] | r3 = x;
0x000b670a str r3, [r6, 0x24] | *((r6 + 0x24)) = r3;
0x000b670c movs r3, 0xff | r3 = 0xff;
0x000b670e str r3, [r6, 0x30] | *((r6 + 0x30)) = r3;
0x000b6710 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000b6714 ldr.w r0, [r6, 0x104] | r0 = *((r6 + 0x104));
0x000b6718 movs r1, 0 | r1 = 0;
0x000b671a str.w r5, [r6, 0x100] | __asm ("str.w r5, [r6, 0x100]");
0x000b671e add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000b6722 mov r3, r0 | r3 = r0;
0x000b6724 add.w r2, r0, r5, lsl 3 | r2 = r0 + (r5 << 3);
0x000b6728 movw r5, 0x101 | r5 = 0x101;
| do {
0x000b672c strh r5, [r3, 4] | *((r3 + 4)) = r5;
0x000b672e strd r1, r1, [r3, 8] | __asm ("strd r1, r1, [r3, 8]");
0x000b6732 strd r1, r1, [r3, 0x10] | __asm ("strd r1, r1, [r3, 0x10]");
0x000b6736 adds r3, 0x18 | r3 += 0x18;
0x000b6738 cmp r2, r3 |
0x000b673a bne 0xb672c |
| } while (r2 != r3);
0x000b673c add r0, r4 | r0 += r4;
0x000b673e mov r2, r7 | r2 = r7;
0x000b6740 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x000b6742 add r0, sb | r0 += sb;
0x000b6744 adds r5, r0, r7 | r5 = r0 + r7;
0x000b6746 ldr r7, [sp, 0x40] | r7 = var_40h;
0x000b6748 str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x000b674a movs r4, 0 | r4 = 0;
0x000b674c mov sl, r4 | sl = r4;
0x000b674e ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x000b6750 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000b6754 str r5, [r6, 0x10] | *((r6 + 0x10)) = r5;
0x000b6756 mov r2, r8 | r2 = r8;
0x000b6758 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000b675a mov r0, r5 | r0 = r5;
0x000b675c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000b6760 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000b6762 add.w r7, r5, r8 | r7 = r5 + r8;
0x000b6766 str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
0x000b676a add r5, sp, 0x78 | r5 += var_78h;
0x000b676c mov fp, r7 |
0x000b676e sub.w r8, r3, 4 | r8 = r3 - 4;
| do {
0x000b6772 movs r3, 0 | r3 = 0;
0x000b6774 ldr r0, [r8, 4]! | r0 = *((r8 += 4));
0x000b6778 mov r1, r5 | r1 = r5;
0x000b677a str r3, [sp, 0x78] | var_78h = r3;
0x000b677c bl 0x2475c | fcn_0002475c (r0, r1);
0x000b6780 ldr r4, [sp, 0x78] | r4 = var_78h;
0x000b6782 lsl.w r7, sl, 2 | r7 = sl << 2;
0x000b6786 cmp r4, 0 |
| if (r4 > 0) {
0x000b6788 ble 0xb6794 |
0x000b678a mov r1, r0 | r1 = r0;
0x000b678c mov r2, r4 | r2 = r4;
0x000b678e mov r0, fp | r0 = fp;
0x000b6790 blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x000b6794 mov.w r3, 0 | r3 = 0;
0x000b6798 mov r0, fp | r0 = fp;
0x000b679a strb.w r3, [fp, r4] | *((fp + r4)) = r3;
0x000b679e add.w sl, sl, 1 | sl++;
0x000b67a2 bl 0x24264 | fcn_00024264 (r0);
0x000b67a6 ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x000b67a8 cmp sl, sb |
0x000b67aa add.w r4, r4, 1 | r4++;
0x000b67ae str.w fp, [r2, r7] | __asm ("str.w fp, [r2, r7]");
0x000b67b2 add fp, r4 |
0x000b67b4 bne 0xb6772 |
| } while (sl != sb);
0x000b67b6 str r5, [sp, 0x40] | var_40h = r5;
0x000b67b8 mov.w r8, 0 | r8 = 0;
0x000b67bc ldr r5, [sp, 0x24] | r5 = var_24h;
0x000b67be mov r3, r2 | r3 = r2;
0x000b67c0 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x000b67c4 str.w sb, [sp, 0x28] | __asm ("str.w sb, [var_28h]");
0x000b67c8 str.w fp, [sp, 0x34] | __asm ("str.w fp, [var_34h]");
| label_5:
0x000b67cc ldr.w r0, [r3, r8, lsl 2] | offset_8 = r8 << 2;
| r0 = *((r3 + offset_8));
0x000b67d0 lsl.w sb, r8, 2 | sb = r8 << 2;
0x000b67d4 blx 0x65dc | r0 = strcmp (r0, r1);
0x000b67d8 mov fp, r0 |
| if (r5 == 0) {
0x000b67da cbz r5, 0xb6832 | goto label_66;
| }
0x000b67dc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b67de movs r4, 0 | r4 = 0;
0x000b67e0 sub.w sl, r3, 4 | sl = r3 - 4;
0x000b67e4 b 0xb67ec |
| while (r7 == 0) {
| label_3:
0x000b67e6 adds r4, 1 | r4++;
0x000b67e8 cmp r4, r5 |
| if (r4 == r5) {
0x000b67ea beq 0xb6832 | goto label_66;
| }
| label_4:
0x000b67ec ldr r7, [sl, 4]! | r7 = *((sl += 4));
0x000b67f0 cmp r7, 0 |
0x000b67f2 beq 0xb67e6 |
| }
0x000b67f4 mov r0, r7 | r0 = r7;
0x000b67f6 blx 0x65dc | r0 = strcmp (r0, r1);
0x000b67fa cmp fp, r0 |
| if (fp != r0) {
0x000b67fc bne 0xb67e6 | goto label_3;
| }
0x000b67fe ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000b6800 ldr.w r0, [r3, sb] | r0 = *((r3 + sb));
0x000b6804 cmp r0, 0 |
| if (r0 == 0) {
0x000b6806 beq 0xb67e6 | goto label_3;
| }
0x000b6808 mov r2, fp | r2 = fp;
0x000b680a mov r1, r7 | r1 = r7;
0x000b680c bl 0x27334 | fcn_00027334 (r0, r1, r2);
0x000b6810 str r0, [sp, 0x14] | var_14h = r0;
0x000b6812 cmp r0, 0 |
| if (r0 != 0) {
0x000b6814 bne 0xb67e6 | goto label_3;
| }
0x000b6816 ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x000b6818 mov.w r3, 1 | r3 = 1;
0x000b681c mov r0, r7 | r0 = r7;
0x000b681e adds r4, 1 | r4++;
0x000b6820 strb.w r3, [r2, r8] | *((r2 + r8)) = r3;
0x000b6824 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6828 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b682a cmp r4, r5 |
0x000b682c str.w r3, [sl] | __asm ("str.w r3, [sl]");
| if (r4 != r5) {
0x000b6830 bne 0xb67ec | goto label_4;
| }
| label_66:
0x000b6832 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000b6834 add.w r8, r8, 1 | r8++;
0x000b6838 cmp r8, r3 |
| if (r8 == r3) {
0x000b683a beq.w 0xb6c0a | goto label_67;
| }
0x000b683e ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000b6840 b 0xb67cc | goto label_5;
| label_47:
0x000b6842 movs r3, 0 | r3 = 0;
0x000b6844 str r3, [sp, 0x10] | var_10h = r3;
| label_49:
0x000b6846 movs r6, 0 | r6 = 0;
0x000b6848 movs r3, 7 | r3 = 7;
0x000b684a mov r8, r3 | r8 = r3;
0x000b684c mov fp, r6 |
0x000b684e str r6, [sp, 0x1c] | var_1ch = r6;
0x000b6850 str r3, [sp, 0x70] | var_70h = r3;
0x000b6852 str r6, [sp, 0x24] | var_24h = r6;
0x000b6854 str r6, [sp, 0x34] | var_34h = r6;
0x000b6856 str r6, [sp, 0x28] | var_28h = r6;
0x000b6858 strd r6, r6, [sp, 0x2c] | __asm ("strd r6, r6, [var_2ch]");
0x000b685c str r6, [sp, 0x20] | var_20h = r6;
| label_13:
0x000b685e ldr r0, [sp, 0x20] | r0 = var_20h;
0x000b6860 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6864 mov r0, fp | r0 = fp;
0x000b6866 bl 0x26dbc | fcn_00026dbc (r0);
0x000b686a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000b686c bl 0x26dbc | fcn_00026dbc (r0);
0x000b6870 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000b6872 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6876 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000b6878 bl 0x26dbc | fcn_00026dbc (r0);
0x000b687c ldr r0, [sp, 0x34] | r0 = var_34h;
0x000b687e bl 0x26dbc | fcn_00026dbc (r0);
0x000b6882 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r3 == 0) {
0x000b6884 cbz r3, 0xb689c | goto label_68;
| }
0x000b6886 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b6888 movs r4, 0 | r4 = 0;
0x000b688a ldr r7, [sp, 0x24] | r7 = var_24h;
0x000b688c subs r5, r3, 4 | r5 = r3 - 4;
| do {
0x000b688e ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x000b6892 adds r4, 1 | r4++;
0x000b6894 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6898 cmp r7, r4 |
0x000b689a bne 0xb688e |
| } while (r7 != r4);
| label_68:
0x000b689c ldr r0, [sp, 0x10] | r0 = var_10h;
0x000b689e bl 0x26dbc | fcn_00026dbc (r0);
0x000b68a2 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000b68a4 bl 0x26dbc | fcn_00026dbc (r0);
0x000b68a8 cmp.w r8, 0 |
| if (r8 == 0) {
0x000b68ac beq.w 0xb6a00 | goto label_69;
| }
0x000b68b0 cmp r6, 0 |
| if (r6 == 0) {
0x000b68b2 beq.w 0xb6a16 | goto label_70;
| }
0x000b68b6 mov r0, r6 | r0 = r6;
0x000b68b8 bl 0x7b860 | fcn_0007b860 (r0);
| label_10:
0x000b68bc ldr r2, [pc, 0x118] |
0x000b68be ldr r3, [pc, 0xec] | r3 = *(0xb69ae);
0x000b68c0 add r2, pc | r2 = 0x16d29c;
0x000b68c2 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b68c4 ldr r2, [r3] | r2 = imp.atan;
0x000b68c6 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000b68c8 eors r2, r3 | r2 ^= r3;
0x000b68ca mov.w r3, 0 | r3 = 0;
0x000b68cc lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x000b68ce bne.w 0xb72be | goto label_71;
| }
0x000b68d2 mov r0, r8 | r0 = r8;
0x000b68d4 add sp, 0xc4 |
0x000b68d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_51:
0x000b68da ldrb r3, [r4] | r3 = *(r4);
0x000b68dc mov r1, r4 | r1 = r4;
0x000b68de cmp r3, 0x3d |
| if (r3 == 0x3d) {
0x000b68e0 beq.w 0xb6bac | goto label_72;
| }
| label_7:
0x000b68e4 cmp r3, 0 |
| if (r3 == 0) {
0x000b68e6 beq.w 0xb644e | goto label_6;
| }
0x000b68ea ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x000b68ee cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x000b68f0 bne 0xb68e4 | goto label_7;
| }
0x000b68f2 subs r3, r1, r4 | r3 = r1 - r4;
0x000b68f4 str r3, [sp, 0x5c] | var_5ch = r3;
| label_16:
0x000b68f6 ldr r0, [sp, 0x60] | r0 = var_60h;
0x000b68f8 adds r1, 1 | r1++;
0x000b68fa bl 0x5cb60 | fcn_0005cb60 ();
0x000b68fe str r0, [sp, 0x44] | s1 = r0;
0x000b6900 cmp r0, 0 |
| if (r0 == 0) {
0x000b6902 beq.w 0xb6a0c | goto label_73;
| }
0x000b6906 bl 0x24264 | fcn_00024264 (r0);
0x000b690a ldr.w ip, [pc, 0xd0] |
0x000b690e add.w lr, sp, 0x7c | lr += var_7ch;
0x000b6912 mov fp, lr |
0x000b6914 mov.w r8, 0 | r8 = 0;
0x000b6918 add ip, pc |
0x000b691a add.w ip, ip, 0x2d0 | ip = 0x16d5ca;
0x000b691e ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000b6922 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000b6926 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000b692a stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000b692c movs r7, r1 | r7 = r1;
0x000b692e ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000b6932 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000b6936 ldm.w ip, {r0, r1, r2, r3} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
| r3 = *((ip + 12));
0x000b693a stm.w lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x000b693e str r5, [sp, 0x64] | var_64h = r5;
0x000b6940 ldr r5, [sp, 0x5c] | r5 = var_5ch;
0x000b6942 b 0xb6954 |
| while (r3 != r5) {
| label_8:
0x000b6944 add.w r8, r8, 1 | r8++;
0x000b6948 add.w fp, fp, 8 |
0x000b694c cmp.w r8, 8 |
| if (r8 == 8) {
0x000b6950 beq.w 0xb6bba | goto label_74;
| }
0x000b6954 ldr.w r3, [fp, 4] | r3 = *(arg_ech);
0x000b6958 cmp r3, r5 |
0x000b695a bne 0xb6944 |
| }
0x000b695c ldr.w r1, [fp] | r1 = *(fp);
0x000b6960 cmp r1, 0 |
| if (r1 == 0) {
0x000b6962 beq 0xb6944 | goto label_8;
| }
0x000b6964 mov r2, r5 | r2 = r5;
0x000b6966 mov r0, r4 | r0 = r4;
0x000b6968 bl 0x27334 | r0 = fcn_00027334 (r0, r1, r2);
0x000b696c cmp r0, 0 |
| if (r0 != 0) {
0x000b696e bne 0xb6944 | goto label_8;
| }
0x000b6970 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b6972 add.w r8, r8, -1 | r8 += -1;
0x000b6976 ldr r5, [sp, 0x64] | r5 = var_64h;
0x000b6978 cmp r3, r5 |
0x000b697a ite le |
| if (r3 > r5) {
0x000b697c movle r3, 0 | r3 = 0;
| }
| if (r3 <= r5) {
0x000b697e movgt r3, 1 | r3 = 1;
| }
0x000b6980 str r3, [sp, 0x5c] | var_5ch = r3;
0x000b6982 cmp.w r8, 6 |
0x000b6984 lsrs r6, r0, 0x1c | r6 = r0 >> 0x1c;
| if (r6 > r0) {
0x000b6986 bhi.w 0xb72c2 | goto label_75;
| }
| /* switch table (8 cases) at 0xb698e */
0x000b698a tbh [pc, r8, lsl 1] | __asm ("tbh [pc, r8, lsl 1]");
| label_55:
0x000b69e0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000b69e2 bl 0x26dbc | fcn_00026dbc (r0);
0x000b69e6 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000b69e8 bl 0x26dbc | fcn_00026dbc (r0);
0x000b69ec cmp.w sb, 0 |
| if (sb == 0) {
0x000b69f0 beq 0xb6a58 | goto label_76;
| }
0x000b69f2 cmp.w r8, 0 |
| if (r8 != 0) {
0x000b69f6 bne.w 0xb6ff0 | goto label_77;
| }
0x000b69fa strd r8, r8, [sp, 0x2c] | __asm ("strd r8, r8, [var_2ch]");
0x000b69fe b 0xb6566 | goto label_9;
| label_69:
0x000b6a00 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000b6a02 str r6, [r3] | *(r3) = r6;
0x000b6a04 b 0xb68bc | goto label_10;
| label_46:
0x000b6a06 dmb ish | __asm ("dmb ish");
0x000b6a0a b 0xb639a | goto label_11;
| label_73:
0x000b6a0c ldr r3, [sp, 0x44] | r3 = s1;
0x000b6a0e movs r4, 7 | r4 = 7;
0x000b6a10 str r4, [sp, 0x70] | var_70h = r4;
0x000b6a12 mov fp, r3 |
0x000b6a14 b 0xb647c | goto label_12;
| label_70:
0x000b6a16 ldr r0, [sp, 0x74] | r0 = x;
0x000b6a18 cmp r0, 0 |
| if (r0 == 0) {
0x000b6a1a beq.w 0xb68bc | goto label_10;
| }
0x000b6a1e ldr r3, [r0] | r3 = *(r0);
0x000b6a20 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000b6a22 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000b6a24 b 0xb68bc | goto label_10;
| label_26:
0x000b6a26 mov.w fp, 0 |
0x000b6a2a mov r6, fp | r6 = fp;
0x000b6a2c b 0xb685e | goto label_13;
| label_57:
0x000b6a2e movs r5, 2 | r5 = 2;
| do {
0x000b6a30 cmp r3, 0x2c |
0x000b6a32 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x000b6a36 it eq |
| if (r3 != 0x2c) {
0x000b6a38 addeq r5, 1 | r5++;
| }
0x000b6a3a cmp r3, 0 |
0x000b6a3c bne 0xb6a30 |
| } while (r3 != 0);
0x000b6a3e add.w r6, r5, r5, lsl 1 | r6 = r5 + (r5 << 1);
0x000b6a42 mov r4, r5 | r4 = r5;
0x000b6a44 lsls r6, r6, 3 | r6 <<= 3;
0x000b6a46 mov r7, r6 | r7 = r6;
0x000b6a48 b 0xb6584 | goto label_14;
| label_59:
0x000b6a4a movs r3, 7 | r3 = 7;
0x000b6a4c mov.w fp, 0 |
0x000b6a50 mov r8, r3 | r8 = r3;
0x000b6a52 mov r6, fp | r6 = fp;
0x000b6a54 str r3, [sp, 0x70] | var_70h = r3;
0x000b6a56 b 0xb685e | goto label_13;
| label_76:
0x000b6a58 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000b6a5a bl 0x26dbc | fcn_00026dbc (r0);
0x000b6a5e ldr r3, [sp, 0x40] | r3 = var_40h;
0x000b6a60 ldr.w r0, [pc, 0x8e8] |
0x000b6a64 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000b6a66 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000b6a68 add r0, pc | r0 = 0x16ddb8;
0x000b6a6a bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b6a6e mov r4, r0 | r4 = r0;
0x000b6a70 cmp r0, 0 |
| if (r0 == 0) {
0x000b6a72 beq.w 0xb6fc6 | goto label_78;
| }
0x000b6a76 add r5, sp, 0x78 | r5 += var_78h;
0x000b6a78 mov r1, r0 | r1 = r0;
0x000b6a7a mov r3, sb | r3 = sb;
0x000b6a7c mov.w r2, -1 | r2 = -1;
0x000b6a80 mov r0, sl | r0 = sl;
0x000b6a82 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x000b6a86 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000b6a8a str r5, [sp, 4] | var_4h = r5;
0x000b6a8c bl 0xa4188 | fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x000b6a8e invalid |
0x000b6a92 cmp r0, 0 |
| if (r0 != 0) {
0x000b6a94 bne.w 0xb702a | goto label_79;
| }
0x000b6a98 mov r0, r4 | r0 = r4;
0x000b6a9a bl 0x26dbc | fcn_00026dbc (r0);
0x000b6a9e ldr r7, [sp, 0x78] | r7 = var_78h;
0x000b6aa0 cmp r7, 0 |
| if (r7 == 0) {
0x000b6aa2 beq.w 0xb707e | goto label_80;
| }
0x000b6aa6 ldrh.w r3, [r7, 0x90] | r3 = *((r7 + 0x90));
0x000b6aaa mov r5, r3 | r5 = r3;
0x000b6aac str r3, [sp, 0x14] | var_14h = r3;
0x000b6aae lsls r6, r3, 2 | r6 = r3 << 2;
0x000b6ab0 mov fp, r6 |
| if (r3 == 0) {
0x000b6ab2 cbz r3, 0xb6ae8 | goto label_33;
| }
0x000b6ab4 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x000b6ab8 mov r4, r8 | r4 = r8;
0x000b6aba mov r5, r8 | r5 = r8;
| do {
0x000b6abc movs r3, 0 | r3 = 0;
0x000b6abe mov r1, sb | r1 = sb;
0x000b6ac0 mov r2, r3 | r2 = r3;
0x000b6ac2 mov r0, r7 | r0 = r7;
0x000b6ac4 bl 0x3e494 | r0 = fcn_0003e494 (r0, r1, r2);
0x000b6ac8 blx 0x65dc | strcmp (r0, r1);
0x000b6acc adds r0, 1 | r0++;
0x000b6ace add.w sb, sb, 1 | sb++;
0x000b6ad2 adds r0, r0, r4 | r0 += r4;
0x000b6ad4 adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x000b6ad8 cmp fp, sb |
0x000b6ada mov r4, r0 | r4 = r0;
0x000b6adc bne 0xb6abc |
| } while (fp != sb);
0x000b6ade adds.w fp, r0, r6 |
0x000b6ae2 str r0, [sp, 0x14] | var_14h = r0;
0x000b6ae4 adc r5, r5, 0 | __asm ("adc r5, r5, 0");
| label_33:
0x000b6ae8 ldr.w r3, [pc, 0x864] |
0x000b6aec add r3, pc |
0x000b6aee ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b6af2 cmp r3, 0 |
| if (r3 != 0) {
0x000b6af4 bne.w 0xb704a | goto label_81;
| }
0x000b6af8 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b6afc cmp r0, 0 |
| if (r0 != 0) {
0x000b6afe bne.w 0xb708a | goto label_82;
| }
0x000b6b02 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b6b06 cmp r0, 0 |
| if (r0 != 0) {
0x000b6b08 bne.w 0xb708a | goto label_82;
| }
| label_31:
0x000b6b0c mov r0, fp | r0 = fp;
0x000b6b0e mov r1, r5 | r1 = r5;
0x000b6b10 bl 0x28c3c | fcn_00028c3c (r0);
0x000b6b12 ldrb.w sb, [r4, 4] | sb = *((r4 + 4));
0x000b6b16 cmp r0, 0 |
| if (r0 == 0) {
0x000b6b18 beq.w 0xb708a | goto label_82;
| }
0x000b6b1c adds r4, r0, r6 | r4 = r0 + r6;
0x000b6b1e cmp.w sb, 0 |
| if (sb == 0) {
0x000b6b22 beq.w 0xb726c | goto label_83;
| }
0x000b6b26 subs r6, r0, 4 | r6 = r0 - 4;
0x000b6b28 movs r5, 0 | r5 = 0;
| do {
0x000b6b2a movs r3, 0 | r3 = 0;
0x000b6b2c mov r1, r5 | r1 = r5;
0x000b6b2e mov r2, r3 | r2 = r3;
0x000b6b30 mov r0, r7 | r0 = r7;
0x000b6b32 bl 0x3e494 | fcn_0003e494 (r0, r1, r2);
0x000b6b34 stc2 p6, c4, [pc], 0x20c | __asm ("stc2 p6, c4, [pc], 0x20c");
0x000b6b38 adds r5, 1 | r5++;
0x000b6b3a blx 0x65dc | strcmp (r0, r1);
0x000b6b3e mov r1, fp | r1 = fp;
0x000b6b40 add.w fp, r0, 1 |
0x000b6b44 mov r2, fp | r2 = fp;
0x000b6b46 mov r0, r4 | r0 = r4;
0x000b6b48 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000b6b4c cmp r5, sb |
0x000b6b4e str r4, [r6, 4]! | *((r6 += 4)) = r4;
0x000b6b52 add r4, fp | r4 += fp;
0x000b6b54 bne 0xb6b2a |
| } while (r5 != sb);
0x000b6b56 mov r0, r7 | r0 = r7;
0x000b6b58 bl 0x7a5dc | fcn_0007a5dc (r0);
0x000b6b5c movs r3, 0 | r3 = 0;
0x000b6b5e str r3, [sp, 0x70] | var_70h = r3;
0x000b6b60 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000b6b62 cmp r3, 0 |
| if (r3 == 0) {
0x000b6b64 beq.w 0xb7020 | goto label_42;
| }
0x000b6b68 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000b6b6a mov r4, r3 | r4 = r3;
0x000b6b6c b 0xb6b78 |
| while (r0 != 0) {
0x000b6b6e add.w r8, r8, 1 | r8++;
0x000b6b72 cmp r8, sb |
| if (r8 == sb) {
0x000b6b74 beq.w 0xb7020 | goto label_42;
| }
0x000b6b78 ldr.w r1, [r5, r8, lsl 2] | offset_9 = r8 << 2;
| r1 = *((r5 + offset_9));
0x000b6b7c mov r0, r4 | r0 = r4;
0x000b6b7e bl 0x31abc | r0 = fcn_00031abc (r0, r1);
0x000b6b82 cmp r0, 0 |
0x000b6b84 bne 0xb6b6e |
| }
0x000b6b86 cmp sb, r8 |
| if (sb > r8) {
0x000b6b88 ble 0xb6ba0 |
0x000b6b8a ldr r3, [sp, 0x10] | r3 = var_10h;
0x000b6b8c lsl.w r0, r8, 2 | r0 = r8 << 2;
0x000b6b90 sub.w r2, sb, r8 | r2 = sb - r8;
0x000b6b94 adds r1, r0, 4 | r1 = r0 + 4;
0x000b6b96 lsls r2, r2, 2 | r2 <<= 2;
0x000b6b98 add r0, r3 | r0 += r3;
0x000b6b9a add r1, r3 | r1 += r3;
0x000b6b9c blx 0x6354 | realloc (r0, r1);
| }
0x000b6ba0 movs r3, 0 | r3 = 0;
0x000b6ba2 add.w sb, sb, -1 | sb += -1;
0x000b6ba6 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [var_2ch]");
0x000b6baa b 0xb654e | goto label_15;
| label_72:
0x000b6bac movs r3, 0 | r3 = 0;
0x000b6bae str r3, [sp, 0x5c] | var_5ch = r3;
0x000b6bb0 b 0xb68f6 | goto label_16;
| label_62:
0x000b6bb2 add.w r1, ip, -1 | r1 = ip + -1;
| label_63:
0x000b6bb6 subs r5, 1 | r5--;
0x000b6bb8 b 0xb6642 | goto label_17;
| label_74:
0x000b6bba ldr.w r1, [pc, 0x798] |
0x000b6bbe mov r2, r4 | r2 = r4;
0x000b6bc0 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000b6bc2 movs r4, 1 | r4 = 1;
0x000b6bc4 ldr r5, [sp, 0x64] | r5 = var_64h;
0x000b6bc6 add r1, pc | r1 = 0x16df20;
0x000b6bc8 bl 0x5b58c | r0 = fcn_0005b58c (r0);
0x000b6bca stc2l p3, c2, [r0], 0 | __asm ("stc2l p3, c2, [r0], 0");
0x000b6bce str r4, [sp, 0x70] | var_70h = r4;
0x000b6bd0 mov fp, r3 |
| label_24:
0x000b6bd2 ldr r0, [sp, 0x44] | r0 = s1;
0x000b6bd4 str r3, [sp, 0x5c] | var_5ch = r3;
0x000b6bd6 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6bd8 invalid |
0x000b6bdc b 0xb647c | goto label_12;
| label_48:
0x000b6bde dmb ish | __asm ("dmb ish");
0x000b6be2 b.w 0xb63dc | goto label_18;
| label_58:
0x000b6be6 dmb ish | __asm ("dmb ish");
0x000b6bea b 0xb65a8 | goto label_19;
| label_56:
0x000b6bec ldr.w r1, [pc, 0x768] |
0x000b6bf0 add r2, sp, 0x74 | r2 += x;
0x000b6bf2 ldr r0, [sp, 0x48] | r0 = var_48h;
0x000b6bf4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000b6bf6 add r1, pc | r1 = 0x16df52;
0x000b6bf8 bl 0x60d48 | r0 = fcn_00060d48 (r0, r1, r2, r3, r4);
0x000b6bfc mov r8, r0 | r8 = r0;
0x000b6bfe str r0, [sp, 0x70] | var_70h = r0;
0x000b6c00 cmp r0, 0 |
| if (r0 == 0) {
0x000b6c02 beq.w 0xb656e | goto label_20;
| }
0x000b6c06 mov fp, r6 |
0x000b6c08 b 0xb685e | goto label_13;
| label_67:
0x000b6c0a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b6c0c ldr.w fp, [sp, 0x34] | fp = var_34h;
0x000b6c10 ldr r5, [sp, 0x40] | r5 = var_40h;
| if (r3 == 0) {
0x000b6c12 cbz r3, 0xb6c4a | goto label_84;
| }
0x000b6c14 ldr.w r8, [pc, 0x744] |
0x000b6c18 movs r4, 0 | r4 = 0;
0x000b6c1a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000b6c1c movs r7, 1 | r7 = 1;
0x000b6c1e str r5, [sp, 0x14] | var_14h = r5;
0x000b6c20 add r8, pc | r8 = 0x16df80;
0x000b6c22 ldr.w sl, [sp, 0x24] | sl = var_24h;
0x000b6c26 sub.w sb, r3, 4 | sb = r3 - 4;
0x000b6c2a mov r5, sb | r5 = sb;
0x000b6c2c mov sb, r8 | sb = r8;
0x000b6c2e ldr.w r8, [sp, 0x38] | r8 = var_38h;
| do {
0x000b6c32 ldr r2, [r5, 4]! | r2 = *((r5 += 4));
| if (r2 != 0) {
0x000b6c36 cbz r2, 0xb6c42 |
0x000b6c38 mov r1, sb | r1 = sb;
0x000b6c3a mov r0, r8 | r0 = r8;
0x000b6c3c bl 0x5b58c | fcn_0005b58c (r0);
0x000b6c40 str r7, [sp, 0x70] | var_70h = r7;
| }
0x000b6c42 adds r4, 1 | r4++;
0x000b6c44 cmp r4, sl |
0x000b6c46 bne 0xb6c32 |
| } while (r4 != sl);
0x000b6c48 ldr r5, [sp, 0x14] | r5 = var_14h;
| label_84:
0x000b6c4a ldr r3, [sp, 0x70] | r3 = var_70h;
| if (r3 == 0) {
0x000b6c4c cbnz r3, 0xb6c7e |
0x000b6c4e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000b6c50 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000b6c52 clz r2, r1 | r2 &= r1;
0x000b6c56 clz r3, r3 | r3 &= r3;
0x000b6c5a lsrs r2, r2, 5 | r2 >>= 5;
0x000b6c5c lsrs r3, r3, 5 | r3 >>= 5;
0x000b6c5e cmp r2, r3 |
| if (r2 == r3) {
0x000b6c60 beq 0xb6c7e | goto label_85;
| }
0x000b6c62 cmp r1, 0 |
| if (r1 == 0) {
0x000b6c64 beq.w 0xb7044 | goto label_86;
| }
0x000b6c68 ldr.w r2, [pc, 0x6f4] |
0x000b6c6c add r2, pc | r2 = 0x16dfd0;
| label_30:
0x000b6c6e ldr.w r1, [pc, 0x6f4] |
0x000b6c72 movs r3, 1 | r3 = 1;
0x000b6c74 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000b6c76 str r3, [sp, 0x70] | var_70h = r3;
0x000b6c78 add r1, pc | r1 = 0x16dfe2;
0x000b6c7a bl 0x5b58c | fcn_0005b58c (r0);
0x000b6c7c invalid |
| }
| label_85:
0x000b6c7e ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x000b6c80 movs r4, 0 | r4 = 0;
0x000b6c82 str r4, [sp, 0x78] | var_78h = r4;
0x000b6c84 cmp r3, 0 |
| if (r3 == 0) {
0x000b6c86 beq.w 0xb6e68 | goto label_87;
| }
0x000b6c8a ldr.w r2, [pc, 0x6dc] |
0x000b6c8e add r7, sp, 0x70 | r7 += var_70h;
0x000b6c90 mov r1, r5 | r1 = r5;
0x000b6c92 mov r0, r7 | r0 = r7;
0x000b6c94 ldr.w r8, [pc, 0x6d4] |
0x000b6c96 strh r4, [r2, 0x36] | *((r2 + 0x36)) = r4;
0x000b6c98 add r2, pc | r2 = 0x16e006;
0x000b6c9a bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6c9e ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b6ca0 add r8, pc | r8 = 0x16e010;
0x000b6ca2 cmp r3, 0 |
| if (r3 <= 0) {
0x000b6ca4 ble 0xb6cbe | goto label_88;
| }
| do {
0x000b6ca6 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000b6ca8 mov r2, r8 | r2 = r8;
0x000b6caa mov r1, r5 | r1 = r5;
0x000b6cac mov r0, r7 | r0 = r7;
0x000b6cae ldr.w r3, [r3, r4, lsl 2] | offset_10 = r4 << 2;
| r3 = *((r3 + offset_10));
0x000b6cb2 adds r4, 1 | r4++;
0x000b6cb4 bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6cb8 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b6cba cmp r4, r3 |
0x000b6cbc blt 0xb6ca6 |
| } while (r4 < r3);
| label_88:
0x000b6cbe ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
| if (r3 != 0) {
0x000b6cc0 cbz r3, 0xb6cd0 |
0x000b6cc2 ldr.w r2, [pc, 0x6ac] |
0x000b6cc6 mov r1, r5 | r1 = r5;
0x000b6cc8 mov r0, r7 | r0 = r7;
0x000b6cca add r2, pc | r2 = 0x16e040;
0x000b6ccc bl 0x6cbbc | fcn_0006cbbc (r0, r1);
| }
| label_23:
0x000b6cd0 ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x000b6cd2 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000b6cd4 cmp r2, 0 |
| if (r2 == 0) {
0x000b6cd6 beq.w 0xb6ffa | goto label_89;
| }
0x000b6cda ldr.w r1, [pc, 0x698] |
0x000b6cde add r1, pc | r1 = 0x16e058;
| label_28:
0x000b6ce0 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x000b6ce4 mov r0, r7 | r0 = r7;
0x000b6ce6 ldr.w r2, [pc, 0x690] |
0x000b6cea mov r1, r5 | r1 = r5;
0x000b6cec add r2, pc | r2 = 0x16e06a;
0x000b6cee bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6cf2 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000b6cf4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000b6cf6 str.w r3, [r6, 0xe0] | __asm ("str.w r3, [r6, 0xe0]");
0x000b6cfa movs r3, 0 | r3 = 0;
0x000b6cfc str r3, [sp, 0x78] | var_78h = r3;
0x000b6cfe cmp r0, 0 |
| if (r0 == 0) {
0x000b6d00 beq.w 0xb6e5c | goto label_90;
| }
0x000b6d04 bl 0x5c928 | r0 = fcn_0005c928 (r0);
0x000b6d08 mov sl, r0 | sl = r0;
0x000b6d0a mov sb, r0 | sb = r0;
| label_22:
0x000b6d0c ldr.w r2, [pc, 0x66c] |
0x000b6d10 mov r1, r5 | r1 = r5;
0x000b6d12 mov r0, r7 | r0 = r7;
0x000b6d14 add r2, pc | r2 = 0x16e094;
0x000b6d16 bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6d1a ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b6d1c cmp r3, 0 |
| if (r3 <= 0) {
0x000b6d1e ble 0xb6d3c | goto label_91;
| }
0x000b6d20 ldr.w r8, [pc, 0x65c] |
0x000b6d24 movs r4, 0 | r4 = 0;
0x000b6d26 add r8, pc | r8 = 0x16e0aa;
| do {
0x000b6d28 mov r3, sb | r3 = sb;
0x000b6d2a mov r2, r8 | r2 = r8;
0x000b6d2c mov r1, r5 | r1 = r5;
0x000b6d2e mov r0, r7 | r0 = r7;
0x000b6d30 bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6d34 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b6d36 adds r4, 1 | r4++;
0x000b6d38 cmp r4, r3 |
0x000b6d3a blt 0xb6d28 |
| } while (r4 < r3);
| label_91:
0x000b6d3c ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
| if (r3 != 0) {
0x000b6d3e cbz r3, 0xb6d4e |
0x000b6d40 ldr.w r2, [pc, 0x640] |
0x000b6d44 mov r0, r7 | r0 = r7;
0x000b6d46 mov r1, r5 | r1 = r5;
0x000b6d48 add r2, pc | r2 = 0x16e0d0;
0x000b6d4a bl 0x6cbbc | fcn_0006cbbc (r0, r1);
| }
0x000b6d4e mov r0, sl | r0 = sl;
0x000b6d50 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6d54 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000b6d56 ldr.w r8, [sp, 0x70] | r8 = var_70h;
0x000b6d5a str.w r3, [r6, 0xe4] | __asm ("str.w r3, [r6, 0xe4]");
0x000b6d5e cmp.w r8, 0 |
| if (r8 != 0) {
0x000b6d62 bne 0xb6e44 | goto label_34;
| }
0x000b6d64 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000b6d66 cmp r3, 0 |
| if (r3 != 0) {
0x000b6d68 bne 0xb6de2 | goto label_92;
| }
0x000b6d6a ldr r3, [sp, 0x18] | r3 = var_18h;
0x000b6d6c cmp r3, 0x34 |
| if (r3 == 0x34) {
0x000b6d6e beq 0xb6d76 | goto label_39;
| }
0x000b6d70 movs r3, 2 | r3 = 2;
0x000b6d72 strb.w r3, [r6, 0xed] | *((r6 + 0xed)) = r3;
| do {
| label_39:
0x000b6d76 ldr.w r0, [pc, 0x610] |
0x000b6d7a ldr r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x000b6d7c add r0, pc | r0 = 0x16e10a;
0x000b6d7e bl 0x5cb60 | fcn_0005cb60 ();
0x000b6d82 str r0, [sp, 0x28] | var_28h = r0;
0x000b6d84 cmp r0, 0 |
| if (r0 == 0) {
0x000b6d86 beq.w 0xb7050 | goto label_93;
| }
0x000b6d8a movs r4, 0 | r4 = 0;
0x000b6d8c ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000b6d8e ldr r1, [sp, 0x28] | r1 = var_28h;
0x000b6d90 mov r3, r4 | r3 = r4;
0x000b6d92 mov.w r2, -1 | r2 = -1;
0x000b6d96 str r5, [sp, 4] | var_4h = r5;
0x000b6d98 str r4, [sp, 8] | var_8h = r4;
0x000b6d9a str r4, [sp] | *(sp) = r4;
0x000b6d9c bl 0xa4188 | r0 = fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x000b6da0 mov r8, r0 | r8 = r0;
0x000b6da2 cmp r0, 0 |
| if (r0 == 0) {
0x000b6da4 beq.w 0xb70a8 | goto label_94;
| }
0x000b6da6 strh r0, [r0, 0xc] | *((r0 + 0xc)) = r0;
0x000b6da8 cmp.w r8, 0x17 |
0x000b6dac ldr r0, [sp, 0x28] | r0 = var_28h;
| if (r8 == 0x17) {
0x000b6dae beq.w 0xb7286 | goto label_95;
| }
0x000b6db2 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6db6 ldr.w r3, [r6, 0xf4] | r3 = *((r6 + 0xf4));
0x000b6dba str r4, [sp, 0x28] | var_28h = r4;
0x000b6dbc str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x000b6dc0 subs r3, 0x23 | r3 -= 0x23;
0x000b6dc2 str r4, [sp, 0x34] | var_34h = r4;
0x000b6dc4 str.w r3, [r6, 0xe8] | __asm ("str.w r3, [r6, 0xe8]");
0x000b6dc8 b 0xb685e | goto label_13;
| label_61:
0x000b6dca ldr.w r1, [pc, 0x5c0] |
0x000b6dce movs r3, 1 | r3 = 1;
0x000b6dd0 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000b6dd2 mov r8, r3 | r8 = r3;
0x000b6dd4 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000b6dd6 movs r6, 0 | r6 = 0;
0x000b6dd8 add r1, pc | r1 = 0x16e16a;
0x000b6dda str r3, [sp, 0x70] | var_70h = r3;
0x000b6ddc bl 0x5b58c | fcn_0005b58c (r0);
0x000b6de0 b 0xb685e | goto label_13;
| label_92:
0x000b6de2 ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x000b6de4 ldr r7, [r6, 0xc] | r7 = *((r6 + 0xc));
0x000b6de6 str.w r8, [sp, 0x78] | __asm ("str.w r8, [var_78h]");
0x000b6dea cmp r3, 0 |
| if (r3 == 0) {
0x000b6dec beq.w 0xb7202 | goto label_96;
| }
| label_41:
0x000b6df0 ldrd r3, r2, [r6, 0x10] | __asm ("ldrd r3, r2, [r6, 0x10]");
0x000b6df4 mov r1, r7 | r1 = r7;
0x000b6df6 mov r0, r5 | r0 = r5;
0x000b6df8 str r2, [sp] | *(sp) = r2;
0x000b6dfa ldr.w r2, [pc, 0x594] |
0x000b6dfe add r2, pc | r2 = 0x16e194;
0x000b6e00 bl 0xb3288 | fcn_000b3288 (r0, r1);
0x000b6e04 ldrd r3, r2, [r6, 0x10] | __asm ("ldrd r3, r2, [r6, 0x10]");
0x000b6e08 mov r1, r7 | r1 = r7;
0x000b6e0a mov r0, r5 | r0 = r5;
0x000b6e0c str r2, [sp] | *(sp) = r2;
0x000b6e0e ldr.w r2, [pc, 0x584] |
0x000b6e12 add r2, pc | r2 = 0x16e1ac;
0x000b6e14 bl 0xb3288 | fcn_000b3288 (r0, r1);
0x000b6e18 ldrb.w r3, [r6, 0xee] | r3 = *((r6 + 0xee));
0x000b6e1c cmp r3, 0 |
| if (r3 != 0) {
0x000b6e1e bne.w 0xb71ee | goto label_97;
| }
| label_40:
0x000b6e22 ldrb.w r3, [r6, 0xed] | r3 = *((r6 + 0xed));
0x000b6e26 cmp r3, 0 |
| if (r3 != 0) {
0x000b6e28 bne.w 0xb71c4 | goto label_98;
| }
0x000b6e2c ldr.w r8, [sp, 0x78] | r8 = var_78h;
0x000b6e30 str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x000b6e34 cmp.w r8, 0 |
0x000b6e38 beq 0xb6d76 |
| } while (r8 == 0);
| label_38:
0x000b6e3a ldr.w r3, [r6, 0xf4] | r3 = *((r6 + 0xf4));
0x000b6e3e subs r3, 0x23 | r3 -= 0x23;
0x000b6e40 str.w r3, [r6, 0xe8] | __asm ("str.w r3, [r6, 0xe8]");
| label_34:
0x000b6e44 movs r3, 0 | r3 = 0;
0x000b6e46 str r3, [sp, 0x34] | var_34h = r3;
0x000b6e48 str r3, [sp, 0x28] | var_28h = r3;
0x000b6e4a b 0xb685e | goto label_13;
| label_64:
0x000b6e4c dmb ish | __asm ("dmb ish");
0x000b6e50 b 0xb6672 | goto label_21;
| label_65:
0x000b6e52 movs r3, 7 | r3 = 7;
0x000b6e54 movs r6, 0 | r6 = 0;
0x000b6e56 mov r8, r3 | r8 = r3;
0x000b6e58 str r3, [sp, 0x70] | var_70h = r3;
0x000b6e5a b 0xb685e | goto label_13;
| label_90:
0x000b6e5c ldr.w sb, [pc, 0x538] |
0x000b6e60 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000b6e64 add sb, pc | sb = 0x16e200;
0x000b6e66 b 0xb6d0c | goto label_22;
| label_87:
0x000b6e68 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000b6e6a cmp r0, 0 |
| if (r0 == 0) {
0x000b6e6c beq.w 0xb6fe4 | goto label_99;
| }
0x000b6e70 bl 0x5c928 | r0 = fcn_0005c928 (r0);
0x000b6e74 mov sl, r0 | sl = r0;
0x000b6e76 mov sb, r0 | sb = r0;
| label_27:
0x000b6e78 ldr.w r2, [pc, 0x520] |
0x000b6e7c add r7, sp, 0x70 | r7 += var_70h;
0x000b6e7e mov r1, r5 | r1 = r5;
0x000b6e80 mov r0, r7 | r0 = r7;
0x000b6e82 add r2, pc | r2 = 0x16e222;
0x000b6e84 bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6e88 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b6e8a cmp r3, 0 |
| if (r3 <= 0) {
0x000b6e8c ble 0xb6eb4 | goto label_100;
| }
0x000b6e8e ldr.w r8, [pc, 0x510] |
0x000b6e92 movs r4, 0 | r4 = 0;
0x000b6e94 add r8, pc | r8 = 0x16e23a;
| do {
0x000b6e96 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000b6e98 mov r2, r8 | r2 = r8;
0x000b6e9a mov r1, r5 | r1 = r5;
0x000b6e9c mov r0, r7 | r0 = r7;
0x000b6e9e ldr.w r3, [r3, r4, lsl 2] | offset_11 = r4 << 2;
| r3 = *((r3 + offset_11));
0x000b6ea2 strd r4, r3, [sp] | __asm ("strd r4, r3, [sp]");
0x000b6ea6 mov r3, sb | r3 = sb;
0x000b6ea8 bl 0x6cbbc | fcn_0006cbbc (r0, r1);
0x000b6eac ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b6eae adds r4, 1 | r4++;
0x000b6eb0 cmp r4, r3 |
0x000b6eb2 blt 0xb6e96 |
| } while (r4 < r3);
| label_100:
0x000b6eb4 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
| if (r3 != 0) {
0x000b6eb6 cbz r3, 0xb6ecc |
0x000b6eb8 ldr.w r3, [pc, 0x4e8] |
0x000b6ebc mov r1, r5 | r1 = r5;
0x000b6ebe ldr.w r2, [pc, 0x4e8] |
0x000b6ec2 mov r0, r7 | r0 = r7;
0x000b6ec4 add r3, pc | r3 = 0x16e26c;
0x000b6ec6 add r2, pc | r2 = 0x16e274;
0x000b6ec8 bl 0x6cbbc | fcn_0006cbbc (r0, r1);
| }
0x000b6ecc mov r0, sl | r0 = sl;
0x000b6ece bl 0x26dbc | fcn_00026dbc (r0);
0x000b6ed2 b 0xb6cd0 | goto label_23;
0x000b6ed4 ldr r0, [sp, 0x44] | r0 = s1;
0x000b6ed6 blx 0x65dc | r0 = strcmp (r0, r1);
0x000b6eda cmp r0, 3 |
| if (r0 == 3) {
0x000b6edc beq.w 0xb7182 | goto label_101;
| }
0x000b6ee0 cmp r0, 4 |
| if (r0 != 4) {
0x000b6ee2 bne 0xb6f3a | goto label_102;
| }
0x000b6ee4 ldr.w r0, [pc, 0x4c4] |
0x000b6ee8 movs r2, 3 | r2 = 3;
0x000b6eea ldr.w lr, [pc, 0x4c4] |
0x000b6eee ldr r1, [sp, 0x44] | r1 = s1;
0x000b6ef0 add r0, pc | r0 = 0x16e2a0;
0x000b6ef2 add lr, pc | lr = 0x16e2a8;
0x000b6ef4 b 0xb6f10 |
| while (r3 != 0) {
0x000b6ef6 add r3, lr | r3 += lr;
0x000b6ef8 adds r0, 1 | r0++;
0x000b6efa ldrb.w ip, [r3, 0x140] | ip = *((r3 + 0x140));
0x000b6efe ldrb r3, [r4] | r3 = *(r4);
0x000b6f00 add r3, lr | r3 += lr;
0x000b6f02 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b6f06 cmp ip, r3 |
| if (ip != r3) {
0x000b6f08 bne 0xb6f1c | goto label_103;
| }
0x000b6f0a subs r2, 1 | r2--;
| if (r2 <= 1) {
0x000b6f0c blo.w 0xb706c | goto label_35;
| }
0x000b6f10 mov r8, r1 | r8 = r1;
0x000b6f12 ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x000b6f16 mov r4, r0 | r4 = r0;
0x000b6f18 cmp r3, 0 |
0x000b6f1a bne 0xb6ef6 |
| }
| label_103:
0x000b6f1c ldr.w r3, [pc, 0x494] |
0x000b6f20 ldrb.w r2, [r8] | r2 = *(r8);
0x000b6f24 ldrb r1, [r4] | r1 = *(r4);
0x000b6f26 add r3, pc | r3 = 0x16e2de;
| label_37:
0x000b6f28 add r2, r3 | r2 += r3;
0x000b6f2a add r3, r1 | r3 += r1;
0x000b6f2c ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000b6f30 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b6f34 cmp r2, r3 |
| if (r2 == r3) {
0x000b6f36 beq.w 0xb706c | goto label_35;
| }
| label_102:
0x000b6f3a ldr.w r1, [pc, 0x47c] |
0x000b6f3e movs r4, 1 | r4 = 1;
0x000b6f40 ldr r2, [sp, 0x44] | r2 = s1;
0x000b6f42 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000b6f44 add r1, pc | r1 = 0x16e302;
0x000b6f46 bl 0x5b58c | fcn_0005b58c (r0);
0x000b6f4a movs r3, 0 | r3 = 0;
0x000b6f4c str r4, [sp, 0x70] | var_70h = r4;
0x000b6f4e mov fp, r3 |
| label_32:
0x000b6f50 ldr r2, [sp, 0x44] | r2 = s1;
0x000b6f52 ldrb r2, [r2] | r2 = *(r2);
0x000b6f54 and r2, r2, 0xdf | r2 &= 0xdf;
0x000b6f56 lsls r7, r3, 0xb | r7 = r3 << 0xb;
0x000b6f58 sub.w r2, r2, 0x44 | r2 -= 0x44;
0x000b6f5c clz r2, r2 | r2 &= r2;
0x000b6f60 lsrs r2, r2, 5 | r2 >>= 5;
0x000b6f62 str r2, [sp, 0x6c] | var_6ch = r2;
0x000b6f64 b 0xb6bd2 | goto label_24;
0x000b6f66 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000b6f68 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6f6c ldr r3, [sp, 0x44] | r3 = s1;
0x000b6f6e str r3, [sp, 0x28] | var_28h = r3;
| do {
| label_25:
0x000b6f70 ldr r4, [sp, 0x70] | r4 = var_70h;
0x000b6f72 movs r3, 0 | r3 = 0;
0x000b6f74 str r3, [sp, 0x44] | s1 = r3;
0x000b6f76 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000b6f78 clz fp, r4 |
0x000b6f7a invalid |
0x000b6f7e subs r3, r3, r5 | r3 -= r5;
0x000b6f80 and.w r3, fp, r3 | r3 = fp & r3;
0x000b6f84 b 0xb6bd2 | goto label_24;
0x000b6f86 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000b6f88 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6f8c ldr r3, [sp, 0x44] | r3 = s1;
0x000b6f8e str r3, [sp, 0x34] | var_34h = r3;
0x000b6f90 b 0xb6f70 |
| } while (1);
0x000b6f92 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b6f94 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000b6f96 ldr r1, [sp, 0x44] | r1 = s1;
0x000b6f98 str.w r1, [r2, r3, lsl 2] | __asm ("str.w r1, [r2, r3, lsl 2]");
0x000b6f9c adds r3, 1 | r3++;
0x000b6f9e str r3, [sp, 0x24] | var_24h = r3;
0x000b6fa0 b 0xb6f70 | goto label_25;
0x000b6fa2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000b6fa4 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6fa8 ldr r3, [sp, 0x44] | r3 = s1;
0x000b6faa str r3, [sp, 0x2c] | var_2ch = r3;
0x000b6fac b 0xb6f70 | goto label_25;
0x000b6fae ldr r0, [sp, 0x30] | r0 = var_30h;
0x000b6fb0 bl 0x26dbc | fcn_00026dbc (r0);
0x000b6fb4 ldr r3, [sp, 0x44] | r3 = s1;
0x000b6fb6 str r3, [sp, 0x30] | var_30h = r3;
0x000b6fb8 b 0xb6f70 | goto label_25;
0x000b6fba ldr r0, [sp, 0x20] | r0 = var_20h;
0x000b6fbc bl 0x26dbc | fcn_00026dbc (r0);
0x000b6fc0 ldr r3, [sp, 0x44] | r3 = s1;
0x000b6fc2 str r3, [sp, 0x20] | var_20h = r3;
0x000b6fc4 b 0xb6f70 | goto label_25;
| label_78:
0x000b6fc6 mov.w r8, 7 | r8 = 7;
0x000b6fca bl 0x26dbc | fcn_00026dbc (r0);
| label_29:
0x000b6fce movs r3, 0 | r3 = 0;
0x000b6fd0 str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x000b6fd4 str r3, [sp, 0x10] | var_10h = r3;
0x000b6fd6 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [var_2ch]");
0x000b6fda cmp.w r8, 0 |
| if (r8 == 0) {
0x000b6fde beq.w 0xb654e | goto label_15;
| }
0x000b6fe2 b 0xb6a26 | goto label_26;
| label_99:
0x000b6fe4 ldr.w sb, [pc, 0x3d4] |
0x000b6fe8 ldr.w sl, [sp, 0x30] | sl = var_30h;
0x000b6fec add sb, pc | sb = 0x16e3ac;
0x000b6fee b 0xb6e78 | goto label_27;
| label_77:
0x000b6ff0 mov r6, r4 | r6 = r4;
0x000b6ff2 mov fp, r4 |
0x000b6ff4 str r4, [sp, 0x30] | var_30h = r4;
0x000b6ff6 str r4, [sp, 0x2c] | var_2ch = r4;
0x000b6ff8 b 0xb685e | goto label_13;
| label_89:
0x000b6ffa ldr r1, [pc, 0x3c4] |
0x000b6ffc ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000b6ffe add r1, pc | r1 = 0x16e3c4;
0x000b7000 b 0xb6ce0 | goto label_28;
| label_50:
0x000b7002 mov sb, r3 | sb = r3;
0x000b7004 str r3, [sp, 0x34] | var_34h = r3;
0x000b7006 strd r3, r3, [sp, 0x20] | __asm ("strd r3, r3, [var_24h]");
0x000b700a str r3, [sp, 0x28] | var_28h = r3;
0x000b700c strd r3, r3, [sp, 0x68] | __asm ("strd r3, r3, [var_68h]");
0x000b7010 str r3, [sp, 0x14] | var_14h = r3;
0x000b7012 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [var_2ch]");
0x000b7016 cmp.w r8, 0 |
| if (r8 == 0) {
0x000b701a beq.w 0xb654e | goto label_15;
| }
0x000b701e b 0xb6a26 | goto label_26;
| label_42:
0x000b7020 movs r3, 0 | r3 = 0;
0x000b7022 strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [var_2ch]");
0x000b7026 b.w 0xb654e | goto label_15;
| label_79:
0x000b702a mov r0, sl | r0 = sl;
0x000b702c bl 0x54630 | fcn_00054630 (r0);
0x000b7030 ldr r1, [pc, 0x390] |
0x000b7032 mov r2, r0 | r2 = r0;
0x000b7034 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000b7036 add r1, pc | r1 = 0x16e3fe;
0x000b7038 bl 0x5b58c | fcn_0005b58c (r0);
0x000b703c mov r0, r4 | r0 = r4;
0x000b703e bl 0x26dbc | fcn_00026dbc (r0);
0x000b7042 b 0xb6fce | goto label_29;
| label_86:
0x000b7044 ldr r2, [pc, 0x380] |
0x000b7046 add r2, pc | r2 = 0x16e412;
0x000b7048 b 0xb6c6e | goto label_30;
| label_81:
0x000b704a dmb ish | __asm ("dmb ish");
0x000b704e b 0xb6b0c | goto label_31;
| label_93:
0x000b7050 bl 0x26dbc | fcn_00026dbc (r0);
0x000b7054 ldr.w r3, [r6, 0xf4] | r3 = *((r6 + 0xf4));
0x000b7058 subs r3, 0x23 | r3 -= 0x23;
0x000b705a str.w r3, [r6, 0xe8] | __asm ("str.w r3, [r6, 0xe8]");
0x000b705e movs r3, 7 | r3 = 7;
0x000b7060 mov r8, r3 | r8 = r3;
0x000b7062 str r3, [sp, 0x70] | var_70h = r3;
0x000b7064 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000b7066 str r3, [sp, 0x34] | var_34h = r3;
0x000b7068 b.w 0xb685e | goto label_13;
| label_35:
0x000b706c ldr r4, [sp, 0x70] | r4 = var_70h;
0x000b706e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000b7070 clz fp, r4 |
0x000b7074 lsr.w fp, fp, 5 |
0x000b7078 and.w r3, fp, r3 | r3 = fp & r3;
0x000b707c b 0xb6f50 | goto label_32;
| label_80:
0x000b707e mov fp, r8 |
0x000b7080 mov r5, r8 | r5 = r8;
0x000b7082 mov r6, r8 | r6 = r8;
0x000b7084 str.w r8, [sp, 0x14] | __asm ("str.w r8, [var_14h]");
0x000b7088 b 0xb6ae8 | goto label_33;
| label_82:
0x000b708a mov r0, r7 | r0 = r7;
0x000b708c mov.w fp, 0 |
0x000b7090 bl 0x7a5dc | fcn_0007a5dc (r0);
0x000b7094 movs r3, 7 | r3 = 7;
0x000b7096 mov r6, fp | r6 = fp;
0x000b7098 mov r8, r3 | r8 = r3;
0x000b709a str r3, [sp, 0x70] | var_70h = r3;
0x000b709c str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
0x000b70a0 strd fp, fp, [sp, 0x2c] | __asm ("strd fp, fp, [var_2ch]");
0x000b70a4 b.w 0xb685e | goto label_13;
| label_94:
0x000b70a8 ldr r5, [sp, 0x78] | r5 = var_78h;
0x000b70aa mov r0, r5 | r0 = r5;
0x000b70ac bl 0x96a64 | fcn_00096a64 (r0);
0x000b70b0 mov r1, r8 | r1 = r8;
0x000b70b2 mov r0, r5 | r0 = r5;
0x000b70b4 bl 0x32f84 | fcn_00032f84 (r0, r1);
0x000b70b8 str.w r0, [r6, 0xf4] | __asm ("str.w r0, [r6, 0xf4]");
0x000b70bc mov r0, r5 | r0 = r5;
0x000b70be bl 0x7a5dc | r0 = fcn_0007a5dc (r0);
0x000b70c2 mov r8, r0 | r8 = r0;
0x000b70c4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000b70c6 bl 0x26dbc | fcn_00026dbc (r0);
0x000b70ca ldr.w r3, [r6, 0xf4] | r3 = *((r6 + 0xf4));
0x000b70ce str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x000b70d2 subs r3, 0x23 | r3 -= 0x23;
0x000b70d4 str.w r3, [r6, 0xe8] | __asm ("str.w r3, [r6, 0xe8]");
0x000b70d8 cmp.w r8, 0 |
| if (r8 != 0) {
0x000b70dc bne.w 0xb6e44 | goto label_34;
| }
| label_44:
0x000b70e0 ldr.w r8, [r6, 0x2c] | r8 = *((r6 + 0x2c));
0x000b70e4 cmp.w r8, 0 |
0x000b70e8 beq 0xb717a |
| while (1) {
0x000b70ea movs r2, 1 | r2 = 1;
0x000b70ec ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000b70ee mov r1, r2 | r1 = r2;
0x000b70f0 bl 0x52298 | fcn_00052298 (r0, r1, r2);
0x000b70f4 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000b70f6 ldr r0, [pc, 0x2d4] |
0x000b70f8 ldr r1, [r3] | r1 = *(r3);
0x000b70fa add r0, pc | r0 = 0x16e4cc;
0x000b70fc bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b7100 mov r4, r0 | r4 = r0;
0x000b7102 cmp r0, 0 |
| if (r0 == 0) {
0x000b7104 beq.w 0xb72a8 | goto label_104;
| }
0x000b7108 ldr r7, [pc, 0x2c4] |
0x000b710a movs r5, 1 | r5 = 1;
0x000b710c mov r1, r0 | r1 = r0;
0x000b710e add r7, pc | r7 = 0x16e4e2;
0x000b7110 b 0xb7124 | void (*0xb7124)() ();
0x000b717a ldr.w r8, [pc, 0x260] |
0x000b717e add r8, pc | r8 = 0x16e560;
0x000b7180 b 0xb70ea |
| }
| label_101:
0x000b7182 ldr r0, [pc, 0x25c] |
0x000b7184 movs r2, 2 | r2 = 2;
0x000b7186 ldr.w lr, [pc, 0x25c] |
0x000b718a ldr r1, [sp, 0x44] | r1 = s1;
0x000b718c add r0, pc | r0 = 0x16e572;
0x000b718e add lr, pc | lr = 0x16e578;
0x000b7190 b 0xb71ac | goto label_105;
| label_36:
0x000b7192 add r3, lr | r3 += lr;
0x000b7194 adds r0, 1 | r0++;
0x000b7196 ldrb.w ip, [r3, 0x140] | ip = *((r3 + 0x140));
0x000b719a ldrb r3, [r4] | r3 = *(r4);
0x000b719c add r3, lr | r3 += lr;
0x000b719e ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b71a2 cmp ip, r3 |
| if (ip != r3) {
0x000b71a4 bne 0xb71b8 | goto label_106;
| }
0x000b71a6 subs r2, 1 | r2--;
| if (r2 <= 1) {
0x000b71a8 blo.w 0xb706c | goto label_35;
| }
| label_105:
0x000b71ac mov r8, r1 | r8 = r1;
0x000b71ae ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x000b71b2 mov r4, r0 | r4 = r0;
0x000b71b4 cmp r3, 0 |
| if (r3 != 0) {
0x000b71b6 bne 0xb7192 | goto label_36;
| }
| label_106:
0x000b71b8 ldr r3, [pc, 0x22c] |
0x000b71ba ldrb.w r2, [r8] | r2 = *(r8);
0x000b71be ldrb r1, [r4] | r1 = *(r4);
0x000b71c0 add r3, pc | r3 = 0x16e5ac;
0x000b71c2 b 0xb6f28 | goto label_37;
| label_98:
0x000b71c4 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000b71c6 mov r0, r5 | r0 = r5;
0x000b71c8 ldrd r1, r3, [r6, 0xc] | __asm ("ldrd r1, r3, [r6, 0xc]");
0x000b71cc str r2, [sp] | *(sp) = r2;
0x000b71ce ldr r2, [pc, 0x21c] |
0x000b71d0 add r2, pc | r2 = 0x16e5c2;
0x000b71d2 bl 0xb3288 | fcn_000b3288 (r0, r1);
0x000b71d6 ldr.w r8, [sp, 0x78] | r8 = var_78h;
0x000b71da str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
0x000b71de cmp.w r8, 0 |
| if (r8 != 0) {
0x000b71e2 bne.w 0xb6e3a | goto label_38;
| }
0x000b71e6 movs r3, 1 | r3 = 1;
0x000b71e8 strb.w r3, [r6, 0xed] | *((r6 + 0xed)) = r3;
0x000b71ec b 0xb6d76 | goto label_39;
| label_97:
0x000b71ee ldrd r3, r2, [r6, 0x10] | __asm ("ldrd r3, r2, [r6, 0x10]");
0x000b71f2 mov r1, r7 | r1 = r7;
0x000b71f4 mov r0, r5 | r0 = r5;
0x000b71f6 str r2, [sp] | *(sp) = r2;
0x000b71f8 ldr r2, [pc, 0x1f4] |
0x000b71fa add r2, pc | r2 = 0x16e5ee;
0x000b71fc bl 0xb3288 | fcn_000b3288 (r0, r1);
0x000b7200 b 0xb6e22 | goto label_40;
| label_96:
0x000b7202 ldr r0, [pc, 0x1f0] |
0x000b7204 ldr.w sl, [r6, 0x2c] | sl = *((r6 + 0x2c));
0x000b7208 add r0, pc | r0 = 0x16e602;
0x000b720a bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b720e cmp r0, 0 |
| if (r0 == 0) {
0x000b7210 beq 0xb72a0 | goto label_107;
| }
0x000b7212 ldr.w sb, [pc, 0x1e4] |
0x000b7216 mov r1, r0 | r1 = r0;
0x000b7218 add sb, pc | sb = 0x16e616;
0x000b721a b 0xb7234 |
| while (r3 > r8) {
0x000b721c ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000b721e mov r2, r8 | r2 = r8;
0x000b7220 mov r0, sb | r0 = sb;
0x000b7222 ldr.w r3, [r3, r8, lsl 2] | offset_12 = r8 << 2;
| r3 = *((r3 + offset_12));
0x000b7226 add.w r8, r8, 1 | r8++;
0x000b722a bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b722e mov r1, r0 | r1 = r0;
0x000b7230 cmp r0, 0 |
| if (r0 == 0) {
0x000b7232 beq 0xb72a0 | goto label_107;
| }
0x000b7234 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x000b7236 cmp r3, r8 |
0x000b7238 bgt 0xb721c |
| }
0x000b723a mov r4, r1 | r4 = r1;
0x000b723c cmp.w sl, 0 |
| if (sl != 0) {
0x000b7240 beq 0xb7250 |
0x000b7242 ldr r0, [pc, 0x1b8] |
0x000b7244 mov r2, sl | r2 = sl;
0x000b7246 add r0, pc | r0 = 0x16e648;
0x000b7248 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b724c mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000b724e cbz r0, 0xb72a0 | goto label_107;
| }
| }
| label_45:
0x000b7250 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000b7252 mov r0, r5 | r0 = r5;
0x000b7254 str r4, [sp, 4] | var_4h = r4;
0x000b7256 mov r1, r7 | r1 = r7;
0x000b7258 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000b725a str r2, [sp] | *(sp) = r2;
0x000b725c ldr r2, [pc, 0x1a0] |
0x000b725e add r2, pc | r2 = 0x16e662;
0x000b7260 bl 0xb3288 | fcn_000b3288 (r0, r1);
0x000b7264 mov r0, r4 | r0 = r4;
0x000b7266 bl 0x26dbc | fcn_00026dbc (r0);
0x000b726a b 0xb6df0 | goto label_41;
| label_83:
0x000b726c mov r0, r7 | r0 = r7;
0x000b726e bl 0x7a5dc | fcn_0007a5dc (r0);
0x000b7272 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000b7274 str.w sb, [sp, 0x70] | __asm ("str.w sb, [var_70h]");
0x000b7278 cmp r3, 0 |
| if (r3 == 0) {
0x000b727a beq.w 0xb7020 | goto label_42;
| }
0x000b727e strd sb, sb, [sp, 0x2c] | __asm ("strd sb, sb, [var_2ch]");
0x000b7282 b.w 0xb6554 | goto label_43;
| label_95:
0x000b7286 mov.w r3, 0x400 | r3 = 0x400;
0x000b728a str.w r3, [r6, 0xf4] | __asm ("str.w r3, [r6, 0xf4]");
0x000b728e bl 0x26dbc | fcn_00026dbc (r0);
0x000b7292 ldr.w r3, [r6, 0xf4] | r3 = *((r6 + 0xf4));
0x000b7296 str r4, [sp, 0x70] | var_70h = r4;
0x000b7298 subs r3, 0x23 | r3 -= 0x23;
0x000b729a str.w r3, [r6, 0xe8] | __asm ("str.w r3, [r6, 0xe8]");
0x000b729c adds r0, 0xe8 | r0 += 0xe8;
0x000b729e b 0xb70e0 | goto label_44;
| label_107:
0x000b72a0 movs r3, 7 | r3 = 7;
0x000b72a2 movs r4, 0 | r4 = 0;
0x000b72a4 str r3, [sp, 0x78] | var_78h = r3;
0x000b72a6 b 0xb7250 | goto label_45;
| label_104:
0x000b72a8 ldr r0, [pc, 0x158] |
0x000b72aa mov r3, r8 | r3 = r8;
0x000b72ac ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000b72ae mov r1, r4 | r1 = r4;
0x000b72b0 mov.w r8, 7 | r8 = 7;
0x000b72b4 add r0, pc | r0 = 0x16e6bc;
0x000b72b6 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b72ba mov r5, r0 | r5 = r0;
0x000b72bc b 0xb714a | void (*0xb714a)() ();
| label_71:
0x000b72be blx 0x6430 | fcn_00006430 ();
| label_75:
0x000b72c2 ldr r4, [sp, 0x44] | r4 = s1;
0x000b72c4 mov r0, r4 | r0 = r4;
0x000b72c6 blx 0x65dc | r0 = strcmp (r0, r1);
0x000b72ca cmp r0, 4 |
| if (r0 != 4) {
0x000b72cc bne 0xb7332 | goto label_108;
| }
0x000b72ce ldr r2, [pc, 0x138] |
0x000b72d0 mov r3, r4 | r3 = r4;
0x000b72d2 ldr.w lr, [pc, 0x138] |
0x000b72d6 mov.w ip, 3 |
0x000b72da add r2, pc | r2 = 0x16e6e8;
0x000b72dc add lr, pc | lr = 0x16e6ee;
| do {
0x000b72de mov r8, r3 | r8 = r3;
0x000b72e0 ldrb r1, [r3], 1 | r1 = *(r3);
| r3++;
0x000b72e4 mov r0, r2 | r0 = r2;
| if (r1 == 0) {
0x000b72e6 cbz r1, 0xb7318 | goto label_109;
| }
0x000b72e8 add r1, lr | r1 += lr;
0x000b72ea adds r2, 1 | r2++;
0x000b72ec ldrb.w r4, [r1, 0x140] | r4 = *((r1 + 0x140));
0x000b72f0 ldrb r1, [r0] | r1 = *(r0);
0x000b72f2 add r1, lr | r1 += lr;
0x000b72f4 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000b72f8 cmp r4, r1 |
| if (r4 != r1) {
0x000b72fa bne 0xb7318 | goto label_109;
| }
0x000b72fc subs.w ip, ip, 1 |
0x000b7300 bhs 0xb72de |
| } while (ip >= ip);
| do {
0x000b7302 ldr r4, [sp, 0x70] | r4 = var_70h;
0x000b7304 movs r3, 1 | r3 = 1;
0x000b7306 str r3, [sp, 0x68] | var_68h = r3;
0x000b7308 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000b730a clz fp, r4 |
0x000b730e lsr.w fp, fp, 5 |
0x000b7312 and.w r3, fp, r3 | r3 = fp & r3;
0x000b7316 b 0xb6bd2 | goto label_24;
| label_109:
0x000b7318 ldr r3, [pc, 0xf4] |
0x000b731a ldrb.w r2, [r8] | r2 = *(r8);
0x000b731e ldrb r1, [r0] | r1 = *(r0);
0x000b7320 add r3, pc | r3 = 0x16e734;
0x000b7322 add r2, r3 | r2 += r3;
0x000b7324 add r3, r1 | r3 += r1;
0x000b7326 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000b732a ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000b732e cmp r2, r3 |
0x000b7330 beq 0xb7302 |
| } while (r2 == r3);
| label_108:
0x000b7332 ldr r1, [pc, 0xe0] |
0x000b7334 movs r4, 1 | r4 = 1;
0x000b7336 ldr r2, [sp, 0x44] | r2 = s1;
0x000b7338 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000b733a add r1, pc | r1 = 0x16e754;
0x000b733c bl 0x5b58c | fcn_0005b58c (r0);
0x000b7340 movs r3, 0 | r3 = 0;
0x000b7342 str r4, [sp, 0x70] | var_70h = r4;
0x000b7344 mov fp, r3 |
0x000b7346 str r4, [sp, 0x68] | var_68h = r4;
0x000b7348 b 0xb6bd2 | goto label_24;
0x000d50ec movs r0, 0x79 | r0 = 0x79;
0x000d50ee ldr r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x000d50f0 ldr r7, [r4, 0x74] | r7 = *((r4 + 0x74));
0x000d50f2 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000d50f4 ldr r4, [r6, 4] | r4 = *((r6 + 4));
0x000d50f6 movs r0, 0x6d | r0 = 0x6d;
0x000d50f8 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d50fa strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d50fc ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000d50fe movs r0, r0 |
0x000d5100 ldr r1, [r5, 0x64] | r1 = *((r5 + 0x64));
0x000d5102 strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000d5104 ldr r4, [pc, 0x80] | r4 = *(0xd5188);
0x000d5106 mov r5, r8 | r5 = r8;
0x000d5108 movs r0, 0x54 | r0 = 0x54;
0x000d510a ldr r7, [pc, 0x128] | r7 = *(0xd5236);
0x000d510c ldr r6, [pc, 0x124] | r6 = *(0xd5234);
0x000d510e ldr r0, [r4, 0x60] | r0 = "next skip-scan on %s";
0x000d5110 cmp r5, 0x6f |
0x000d5112 str r5, [r5, 0x14] | *((r5 + 0x14)) = r5;
0x000d5114 str r4, [r6, 0x34] | *((r6 + 0x34)) = r4;
0x000d5116 movs r0, 0x68 | r0 = 0x68;
0x000d5118 ldr r6, [r4, 0x44] | r6 = *(0xd51cc);
0x000d511a str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d511c movs r0, r0 |
0x000d511e movs r0, r0 |
0x000d5120 str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x000d5122 ldr r2, [r6, 0x74] | r2 = *(0xd5240);
0x000d5124 ldr r7, [pc, 0x80] | r7 = imp.atan;
0x000d5126 mov r6, r8 | r6 = r8;
0x000d5128 cmp r3, sl |
0x000d512a movs r0, 0x54 | r0 = 0x54;
0x000d512c ldr r3, [r4, 0x74] | r3 = imp.atan;
0x000d512e ldr r5, [r6, 0x64] | r5 = *((r6 + 0x64));
0x000d5130 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d5132 lsls r2, r6, 1 | r2 = r6 << 1;
0x000d5134 ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x000d5136 movs r0, r0 |
0x000d5138 ldr r1, [pc, 0x130] | r1 = *(0xd526c);
0x000d513a cmp r3, sb |
0x000d513c ldr r0, [r4, 0x40] | r0 = *(0xd51c8);
0x000d513e ldr r7, [r5, 0x74] | r7 = *((r5 + 0x74));
0x000d5140 movs r0, 0x70 | r0 = 0x70;
0x000d5142 ldr r3, [r4, 0x74] | r3 = imp.atan;
0x000d5144 ldr r5, [r6, 0x64] | r5 = *((r6 + 0x64));
0x000d5146 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d5148 lsls r2, r6, 1 | r2 = r6 << 1;
0x000d514a movs r0, r0 |
0x000d514c strb r6, [r1, r5] | *((r1 + r5)) = r6;
0x000d514e ldr r4, [pc, 0x130] | r4 = *(0xd5282);
0x000d5150 strb r5, [r5, 0xc] | *((r5 + 0xc)) = r5;
0x000d5152 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d5154 movs r0, 0x6e | r0 = 0x6e;
0x000d5156 str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x000d5158 strb r3, [r6, 0xd] | *((r6 + 0xd)) = r3;
0x000d515a str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x000d515c strb r4, [r6, 9] | *((r6 + 9)) = r4;
0x000d515e movs r0, r0 |
0x000d5160 str r1, [r1, 0x64] | *((r1 + 0x64)) = r1;
0x000d5162 ldr r6, [pc, 0x80] | r6 = *(0xd51e6);
0x000d5164 ldr r4, [pc, 0x154] | r4 = *(0xd52bc);
0x000d5166 cmp r5, 0x4c |
0x000d5168 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000d516a ldr r1, [r4, 0x64] | r1 = *(0xd5320);
0x000d516c adds r2, 0x20 | r2 += 0x20;
0x000d516e str r6, [r5, 0x44] | *((r5 + 0x44)) = r6;
0x000d5170 strb r0, [r4] | *(r4) = r0;
0x000d5172 strb r1, [r4, 0xd] | *((r4 + 0xd)) = r1;
0x000d5174 lsls r3, r6, 1 | r3 = r6 << 1;
0x000d5176 movs r0, r0 |
0x000d5178 str r1, [r1, 0x64] | *((r1 + 0x64)) = r1;
0x000d517a ldr r6, [pc, 0x80] | r6 = *(0xd51fe);
0x000d517c ldr r4, [pc, 0x154] | r4 = *(0xd52d4);
0x000d517e cmp r5, 0x4c |
0x000d5180 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000d5182 ldr r1, [r4, 0x64] | r1 = *(0xd5338);
0x000d5184 adds r1, 0x20 | r1 += 0x20;
0x000d5186 strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000d5188 strb r0, [r4] | *(r4) = r0;
0x000d518a strb r1, [r4, 0xd] | *((r4 + 0xd)) = r1;
0x000d518c lsls r3, r6, 1 | r3 = r6 << 1;
0x000d518e movs r0, r0 |
0x000d5190 strb r5, [r1, r5] | *((r1 + r5)) = r5;
0x000d5192 strb r4, [r1, r1] | *((r1 + r1)) = r4;
0x000d5194 cmp r5, 0x49 |
0x000d5196 ldr r6, [pc, 0x124] | r6 = *(0xd52be);
0x000d5198 cmp r4, r8 |
0x000d519a movs r0, 0x58 | r0 = 0x58;
0x000d519c strh r7, [r1, r1] | *((r1 + r1)) = r7;
0x000d519e movs r0, r0 |
0x000d51a0 ldr r6, [pc, 0x124] | r6 = "call flush_partition";
0x000d51a2 cmp r4, r8 |
0x000d51a4 movs r0, 0x58 | r0 = 0x58;
0x000d51a6 str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d51a8 movs r0, r0 |
0x000d51aa movs r0, r0 |
0x000d51ac str r5, [r5, 0x14] | *((r5 + 0x14)) = r5;
0x000d51ae str r4, [r6, 0x34] | *((r6 + 0x34)) = r4;
0x000d51b0 movs r0, 0x68 | r0 = 0x68;
0x000d51b2 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d51b4 ldr r1, [r4, 0x14] | r1 = *(0xd52e8);
0x000d51b6 strb r6, [r5, 0xd] | *((r5 + 0xd)) = r6;
0x000d51b8 movs r0, 0x74 | r0 = 0x74;
0x000d51ba strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d51bc movs r0, r0 |
0x000d51be movs r0, r0 |
0x000d51c0 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d51c2 ldr r3, [r4, 0x74] | r3 = *(0xd5348);
0x000d51c4 str r2, [r6, 0x44] | *((r6 + 0x44)) = r2;
0x000d51c6 ldr r4, [pc, 0x80] | r4 = *(0xd524a);
0x000d51c8 mov r5, r8 | r5 = r8;
0x000d51ca movs r0, 0x54 | r0 = 0x54;
0x000d51cc ldr r7, [pc, 0x128] | r7 = *(0xd52f8);
0x000d51ce ldr r6, [pc, 0x124] | r6 = *(0xd52f6);
0x000d51d0 ldr r0, [r4] | r0 = *(0xd524a);
0x000d51d2 strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000d51d4 movs r0, r0 |
0x000d51d6 movs r0, r0 |
0x000d51d8 ldr r1, [pc, 0x148] | r1 = *(0xd5324);
0x000d51da ldr r0, [pc, 0x11c] | r0 = *(0xd52fa);
0x000d51dc cmp r5, 0x54 |
0x000d51de ldr r7, [pc, 0x128] | r7 = *(0xd530a);
0x000d51e0 ldr r6, [pc, 0x124] | r6 = *(0xd5308);
0x000d51e2 movs r5, 0x20 | r5 = 0x20;
0x000d51e4 lsls r3, r6, 1 | r3 = r6 << 1;
0x000d51e6 movs r0, r0 |
0x000d51e8 str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000d51ea strb r0, [r7, 0x11] | *((r7 + 0x11)) = r0;
0x000d51ec strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d51ee ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000d51f0 cmp r5, 0x70 |
0x000d51f2 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000d51f4 ldr r1, [r4, 0x64] | r1 = *(0xd52ae);
0x000d51f6 ldr r0, [r4, 0x70] | r0 = *(0xd52ba);
0x000d51f8 movs r0, 0x6e | r0 = 0x6e;
0x000d51fa strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d51fc movs r0, r0 |
0x000d51fe movs r0, r0 |
0x000d5200 ldr r1, [pc, 0x110] | r1 = imp.atan;
0x000d5202 strb r3, [r2, r1] | *((r2 + r1)) = r3;
0x000d5204 ldr r6, [pc, 0x124] | r6 = *(0xd532c);
0x000d5206 strb r3, [r0, r1] | *((r0 + r1)) = r3;
0x000d5208 movs r0, r0 |
0x000d520a movs r0, r0 |
0x000d520c strh r7, [r0, r1] | *((r0 + r1)) = r7;
0x000d520e strb r7, [r1, r5] | *((r1 + r5)) = r7;
0x000d5210 movs r0, 0x50 | r0 = 0x50;
0x000d5212 ldr r2, [r0, r5] | r2 = *(0xd52ba);
0x000d5214 movs r0, r0 |
0x000d5216 movs r0, r0 |
0x000d5218 ldr r1, [pc, 0x148] | r1 = "reset accumulator";
0x000d521a ldr r0, [pc, 0x11c] | r0 = *(0xd533a);
0x000d521c movs r0, 0x54 | r0 = 0x54;
0x000d521e adcs r0, r2 | __asm ("adcs r0, r2");
0x000d5220 strb r2, [r2, r1] | *((r2 + r1)) = r2;
0x000d5222 ldr r7, [pc, 0x80] | r7 = *(0xd52a6);
0x000d5224 movs r0, 0x46 | r0 = 0x46;
0x000d5226 strh r7, [r1, r1] | *((r1 + r1)) = r7;
0x000d5228 cmp r4, r8 |
0x000d522a movs r0, 0x52 | r0 = 0x52;
0x000d522c ldr r2, [r0, r5] | r2 = *(0xd533a);
0x000d522e movs r0, r0 |
0x000d5230 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000d5232 str r2, [r6, 0x74] | *((r6 + 0x74)) = r2;
0x000d5234 strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000d5236 ldr r0, [r4, 0x70] | r0 = *(0xd52ba);
0x000d5238 ldr r2, [r4, 0x24] | r2 = *(0xd526e);
0x000d523a str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x000d523c cmp r7, 0x74 |
0x000d523e ldr r1, [r4, 0x44] | r1 = *(0xd528e);
0x000d5240 str r1, [r5, 0x14] | *((r5 + 0x14)) = r1;
0x000d5242 movs r0, 0x73 | r0 = 0x73;
0x000d5244 str r5, [r5, 0x14] | *((r5 + 0x14)) = r5;
0x000d5246 movs r0, 0x79 | r0 = 0x79;
0x000d5248 ldr r6, [r5, 0x74] | r6 = *((r5 + 0x74));
0x000d524a movs r0, 0x74 | r0 = 0x74;
0x000d524c strb r1, [r4, 1] | *((r4 + 1)) = r1;
0x000d524e str r0, [r6, 0x54] | *((r6 + 0x54)) = r0;
0x000d5250 strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d5252 ldr r0, [r4, 0x10] | r0 = *(0xd525a);
0x000d5254 movs r0, 0x6e | r0 = 0x6e;
0x000d5256 strh r6, [r0, r1] | *((r0 + r1)) = r6;
0x000d5258 ldr r5, [pc, 0x13c] |
0x000d525a str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x000d525c str r4, [r5, 0x14] | *((r5 + 0x14)) = r4;
0x000d525e strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000d5260 subs r2, 0x65 | r2 -= 0x65;
0x000d5262 movs r5, 0x20 | r5 = 0x20;
0x000d5264 lsls r3, r6, 1 | r3 = r6 << 1;
0x000d5266 movs r0, r0 |
0x000d5268 ldrb r5, [r4, 1] | r5 = *((r4 + 1));
0x000d526a str r0, [r6, 0x54] | *((r6 + 0x54)) = r0;
0x000d526c strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x000d526e str r5, [r4, 0x44] | *((r4 + 0x44)) = r5;
0x000d5270 movs r5, 0x20 | r5 = 0x20;
0x000d5272 movs r0, 0x64 | r0 = 0x64;
0x000d5274 ldr r3, [r4, 0x74] | r3 = *(0xd52be);
0x000d5276 strb r4, [r5, 0x15] | *((r5 + 0x15)) = r4;
0x000d5278 ldr r5, [r5, 0x64] | r5 = *(0xd53fc);
0x000d527a movs r0, 0x73 | r0 = 0x73;
0x000d527c ldr r6, [r4, 0x74] | r6 = *(0xd52be);
0x000d527e movs r0, 0x72 | r0 = 0x72;
0x000d5280 movs r5, 0x27 | r5 = 0x27;
0x000d5282 movs r7, 0x73 | r7 = 0x73;
0x000d5284 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000d5286 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d5288 str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x000d528a strb r7, [r5, 0x11] | *((r5 + 0x11)) = r7;
0x000d528c movs r5, 0x20 | r5 = 0x20;
0x000d528e lsls r4, r4, 1 | r4 <<= 1;
0x000d5290 ldr r7, [pc, 0x10c] | r7 = *(0xd53a0);
0x000d5292 strh r5, [r5, r0] | *((r5 + r0)) = r5;
0x000d5294 strb r7, [r1, r5] | *((r1 + r5)) = r7;
0x000d5296 ldr r1, [pc, 0x150] | r1 = *(0xd53ea);
0x000d5298 cmp r6, sb |
0x000d529a movs r5, 0x20 | r5 = 0x20;
0x000d529c strh r1, [r4, r4] | *((r4 + r4)) = r1;
0x000d529e movs r0, r0 |
0x000d52a0 str r5, [r5, 0x14] | *((r5 + 0x14)) = r5;
0x000d52a2 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d52a4 ldr r2, [r6, 0x14] | r2 = *(0xd52d2);
0x000d52a6 ldr r1, [r4, 0x44] | r1 = *(0xd528e);
0x000d52a8 ldrb r1, [r5, 9] | r1 = *((r5 + 9));
0x000d52aa movs r0, 0x65 | r0 = 0x65;
0x000d52ac movs r1, 0x25 | r1 = 0x25;
0x000d52ae lsls r3, r2, 1 | r3 = r2 << 1;
0x000d52b0 adcs r5, r1 | __asm ("adcs r5, r1");
0x000d52b2 cmp r4, sl |
0x000d52b4 ldr r1, [pc, 0x148] | r1 = imp.atan;
0x000d52b6 ldr r4, [pc, 0x104] | r4 = *(0xd53be);
0x000d52b8 ldrh r1, [r1, r1] | r1 = *((r1 + r1));
0x000d52ba movs r0, 0x45 | r0 = 0x45;
0x000d52bc movs r1, 0x25 | r1 = 0x25;
0x000d52be lsls r3, r2, 1 | r3 = r2 << 1;
0x000d52c0 ldr r5, [r4, 0x64] | r5 = *(0xd5422);
0x000d52c2 movs r0, 0x64 | r0 = 0x64;
0x000d52c4 movs r1, 0x25 | r1 = 0x25;
0x000d52c6 lsls r3, r2, 1 | r3 = r2 << 1;
0x000d52c8 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d52ca ldr r4, [r5, 0x44] | r4 = *(0xd5466);
0x000d52cc str r0, [r4, 0x60] | *((r4 + 0x60)) = r0;
0x000d52ce strb r4, [r5, 0x15] | *((r5 + 0x15)) = r4;
0x000d52d0 ldr r3, [r6, 4] | r3 = *(0xd52c2);
0x000d52d2 strb r7, [r3, 1] | *((r3 + 1)) = r7;
0x000d52d4 strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d52d6 ldr r4, [r6, 0x14] | r4 = *(0xd52d2);
0x000d52d8 ldr r4, [r6, 0x14] | r4 = *(0xd52d2);
0x000d52da ldr r7, [r5, 0x64] | r7 = *(0xd5486);
0x000d52dc movs r0, r0 |
0x000d52de movs r0, r0 |
0x000d52e0 ldr r5, [r4, 0x64] |
0x000d52e2 movs r0, 0x64 | r0 = 0x64;
0x000d52e4 ldr r1, [r5, 0x64] | r1 = *(0xd539a);
0x000d52e6 str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000d52e8 cmp r5, 0x72 |
0x000d52ea ldr r4, [r5, 0x74] | r4 = *(0xd53aa);
0x000d52ec strb r7, [r5, 1] | *((r5 + 1)) = r7;
0x000d52ee strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d52f0 str r5, [r6, 0x24] | *((r6 + 0x24)) = r5;
0x000d52f2 ldr r2, [r6, 0x74] | r2 = *(0xd5332);
0x000d52f4 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d52f6 ldr r1, [r5, 0x64] | r1 = *(0xd539a);
0x000d52f8 lsls r5, r4, 1 | r5 = r4 << 1;
0x000d52fa movs r0, r0 |
0x000d52fc ldr r5, [r5, 0x14] | r5 = *(0xd534a);
0x000d52fe lsls r6, r5, 1 | r6 = r5 << 1;
0x000d5300 str r5, [r5, 0x14] | *((r5 + 0x14)) = r5;
0x000d5302 lsls r0, r7, 1 | r0 = r7 << 1;
0x000d5304 ldr r3, [r4, 0x44] | r3 = *(0xd53ee);
0x000d5306 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000d5308 movs r0, 0x72 | r0 = 0x72;
0x000d530a str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d530c strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d530e movs r0, 0x74 | r0 = 0x74;
0x000d5310 ldr r6, [r4, 0x44] | r6 = *(0xd53ee);
0x000d5312 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d5314 movs r0, r0 |
0x000d5316 movs r0, r0 |
0x000d5318 strh r5, [r2, r5] | *((r2 + r5)) = r5;
0x000d531a movs r0, 0x45 | r0 = 0x45;
0x000d531c cmp r4, sl |
0x000d531e str r5, [r1, r1] | *((r1 + r1)) = r5;
0x000d5320 tst r0, r4 |
0x000d5322 strb r5, [r5, r0] | *((r5 + r0)) = r5;
0x000d5324 cmp r2, sl |
0x000d5326 movs r0, 0x45 | r0 = 0x45;
0x000d5328 ldr r7, [pc, 0x118] | r7 = *(0xd5444);
0x000d532a movs r0, 0x52 | r0 = 0x52;
0x000d532c strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d532e movs r0, r0 |
0x000d5330 strh r7, [r0, r1] | *((r0 + r1)) = r7;
0x000d5332 strb r7, [r1, r5] | *((r1 + r5)) = r7;
0x000d5334 movs r0, 0x50 | r0 = 0x50;
0x000d5336 ldr r2, [r0, r5] |
0x000d5338 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d533a strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d533c lsls r4, r6, 1 | r4 = r6 << 1;
0x000d533e movs r0, r0 |
0x000d5340 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000d5342 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000d5344 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d5346 ldr r0, [r4, 0x70] | r0 = *(0xd541a);
0x000d5348 str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000d534a strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000d534c strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d534e movs r0, r0 |
0x000d5350 ldr r3, [r4, 4] | r3 = *(0xd53ae);
0x000d5352 str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x000d5354 movs r0, 0x6b | r0 = 0x6b;
0x000d5356 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d5358 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d535a movs r0, 0x74 | r0 = 0x74;
0x000d535c ldr r6, [r4, 0x44] | r6 = *(0xd53ee);
0x000d535e str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d5360 movs r0, r0 |
0x000d5362 movs r0, r0 |
0x000d5364 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d5366 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d5368 movs r0, 0x74 | r0 = 0x74;
0x000d536a str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x000d536c strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x000d536e strb r5, [r5, 0x15] | *((r5 + 0x15)) = r5;
0x000d5370 str r4, [r5, 0x14] | *((r5 + 0x14)) = r4;
0x000d5372 ldr r4, [r6, 0x74] |
0x000d5374 lsls r2, r6, 1 | r2 = r6 << 1;
0x000d5376 movs r0, r0 |
0x000d5378 ldr r1, [r5, 0x64] | r1 = *(0xd53ae);
0x000d537a ldr r4, [r4, 0x14] |
0x000d537c str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d537e str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d5380 str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000d5382 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d5384 movs r0, 0x61 | r0 = 0x61;
0x000d5386 ldr r1, [r5, 0x64] | r1 = *(0xd53ae);
0x000d5388 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d538a str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000d538c ldr r5, [r6, 0x54] | r5 = *(0xd5442);
0x000d538e ldr r5, [r6, 0x44] | r5 = *(0xd5432);
0x000d5390 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d5392 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d5394 movs r0, r0 |
0x000d5396 movs r0, r0 |
0x000d5398 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000d539a strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000d539c strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d539e str r0, [r4, 0x60] | *((r4 + 0x60)) = r0;
0x000d53a0 ldr r1, [r5, 0x64] | r1 = *(0xd5496);
0x000d53a2 ldr r1, [r4, 0x44] | r1 = *(0xd54ba);
0x000d53a4 strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000d53a6 strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d53a8 movs r0, r0 |
0x000d53aa movs r0, r0 |
0x000d53ac str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d53ae movs r0, 0x74 | r0 = 0x74;
0x000d53b0 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d53b2 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d53b4 movs r0, 0x74 | r0 = 0x74;
0x000d53b6 ldr r6, [r4, 0x44] | r6 = *(0xd54ba);
0x000d53b8 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d53ba movs r0, r0 |
0x000d53bc strb r7, [r0, 9] | *((r0 + 9)) = r7;
0x000d53be strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000d53c0 str r0, [r6, 0x24] | *((r6 + 0x24)) = r0;
0x000d53c2 movs r0, 0x79 | r0 = 0x79;
0x000d53c4 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d53c6 strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d53c8 strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000d53ca str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x000d53cc ldr r5, [r4, 0x64] | r5 = *(0xd54da);
0x000d53ce strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d53d0 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d53d2 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d53d4 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000d53d6 strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d53d8 ldrb r2, [r6, 5] | r2 = *((r6 + 5));
0x000d53da strb r0, [r4] | *(r4) = r0;
0x000d53dc ldr r7, [r5, 0x14] | r7 = *(0xd54ee);
0x000d53de strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d53e0 movs r0, r0 |
0x000d53e2 movs r0, r0 |
0x000d53e4 ldr r5, [r4, 0x64] | r5 = *(0xd54da);
0x000d53e6 movs r0, 0x64 | r0 = 0x64;
0x000d53e8 strb r7, [r4, 9] | *((r4 + 9)) = r7;
0x000d53ea strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000d53ec str r0, [r6, 0x24] | *((r6 + 0x24)) = r0;
0x000d53ee movs r0, 0x79 | r0 = 0x79;
0x000d53f0 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d53f2 strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d53f4 strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000d53f6 str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x000d53f8 ldr r5, [r4, 0x64] | r5 = *(0xd54da);
0x000d53fa strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d53fc strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d53fe strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d5400 movs r0, r0 |
0x000d5402 movs r0, r0 |
0x000d5404 ldr r1, [r5, 0x64] |
0x000d5406 ldr r4, [r4, 0x14] | r4 = *(0xd548a);
0x000d5408 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d540a str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d540c str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d540e str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000d5410 ldr r5, [r6, 0x54] | r5 = *(0xd550e);
0x000d5412 ldr r5, [r6, 0x44] |
0x000d5414 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d5416 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d5418 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000d541a strb r5, [r5, 1] | *((r5 + 1)) = r5;
0x000d541c ldrb r4, [r6, 5] | r4 = *((r6 + 5));
0x000d541e movs r0, r0 |
0x000d5420 muls r3, r2, r3 | r3 = r2 * r3;
0x000d5422 ldr r6, [pc, 0x104] | r6 = *(0xd552a);
0x000d5424 movs r5, 0x20 | r5 = 0x20;
0x000d5426 movs r5, 0x73 | r5 = 0x73;
0x000d5428 movs r5, 0x73 | r5 = 0x73;
0x000d542a lsls r3, r6, 1 | r3 = r6 << 1;
0x000d542c ldr r7, [pc, 0x10c] | r7 = *(0xd553c);
0x000d542e strh r2, [r2, r1] | *((r2 + r1)) = r2;
0x000d5430 ldr r4, [pc, 0x114] | r4 = "BLOOM FILTER ON %S (";
0x000d5432 strb r1, [r0, r1] | *((r0 + r1)) = r1;
0x000d5434 add r5, r8 | r5 += r8;
0x000d5436 movs r0, r4 | r0 = r4;
0x000d5438 cmp r2, sl |
0x000d543a strh r5, [r2, r5] | *((r2 + r5)) = r5;
0x000d543c movs r0, 0x45 | r0 = 0x45;
0x000d543e strb r3, [r2, r5] | *((r2 + r5)) = r3;
0x000d5440 str r2, [r0, r5] | *((r0 + r5)) = r2;
0x000d5442 cmp r5, sl |
0x000d5444 ldr r2, [r2, r5] | r2 = *(0xd525a);
0x000d5446 movs r5, 0x20 | r5 = 0x20;
0x000d5448 lsls r4, r4, 1 | r4 <<= 1;
0x000d544a movs r0, r0 |
0x000d544c strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d544e muls r3, r2, r3 | r3 = r2 * r3;
0x000d5450 ldr r4, [pc, 0x104] | r4 = *(0xd5558);
0x000d5452 strh r1, [r0, r1] | *((r0 + r1)) = r1;
0x000d5454 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000d5456 rsbs r5, r2, 0 | r5 = r2 - ;
0x000d5458 strb r1, [r2, r5] | *((r2 + r5)) = r1;
0x000d545a strh r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d545c movs r0, 0x59 | r0 = 0x59;
0x000d545e str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d5460 movs r0, r0 |
0x000d5462 movs r0, r0 |
0x000d5464 ldr r1, [r1, 0x64] |
0x000d5466 strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000d5468 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d546a str r5, [r6, 0x24] | *((r6 + 0x24)) = r5;
0x000d546c strb r1, [r6, 0x15] | *((r6 + 0x15)) = r1;
0x000d546e strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d5470 movs r0, 0x79 | r0 = 0x79;
0x000d5472 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d5474 strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d5476 strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000d5478 movs r0, r0 |
0x000d547a movs r0, r0 |
0x000d547c ldr r1, [r1, 0x64] | r1 = *(0xd5606);
0x000d547e strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000d5480 cmp r0, r4 |
0x000d5482 ldr r1, [pc, 0x160] | r1 = *(0xd55e6);
0x000d5484 strb r3, [r2, r1] | *((r2 + r1)) = r3;
0x000d5486 movs r0, 0x53 | r0 = 0x53;
0x000d5488 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d548a strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d548c strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000d548e movs r0, r0 |
0x000d5490 ldr r6, [r5, 0x74] | r6 = *(0xd5572);
0x000d5492 str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000d5494 movs r0, r0 |
0x000d5496 movs r0, r0 |
0x000d5498 str r7, [r4, 0x54] | *((r4 + 0x54)) = r7;
0x000d549a str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000d549c str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000d549e str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d54a0 movs r0, 0x64 | r0 = 0x64;
0x000d54a2 ldr r3, [r4, 0x74] | r3 = *(0xd55cc);
0x000d54a4 strb r4, [r5, 0x15] | *((r5 + 0x15)) = r4;
0x000d54a6 ldr r5, [r5, 0x64] |
0x000d54a8 ldr r0, [r4, 0x40] | r0 = *(0xd5598);
0x000d54aa ldr r7, [r5, 0x74] | r7 = *(0xd55d6);
0x000d54ac movs r0, 0x70 | r0 = 0x70;
0x000d54ae ldr r7, [r5, 0x64] | r7 = *(0xd55c6);
0x000d54b0 movs r2, 0x20 | r2 = 0x20;
0x000d54b2 strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d54b4 movs r2, r4 | r2 = r4;
0x000d54b6 movs r0, r0 |
0x000d54b8 ldr r5, [r5, 0x14] | r5 = *(0xd5576);
0x000d54ba strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d54bc str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d54be ldr r0, [r4, 0x70] | r0 = *(0xd55c8);
0x000d54c0 movs r0, 0x66 | r0 = 0x66;
0x000d54c2 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d54c4 strb r7, [r4, 9] | *((r4 + 9)) = r7;
0x000d54c6 str r5, [r4, 0x74] | *((r4 + 0x74)) = r5;
0x000d54c8 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d54ca subs r2, 0x65 | r2 -= 0x65;
0x000d54cc movs r5, 0x20 | r5 = 0x20;
0x000d54ce strb r3, [r4, r0] | *((r4 + r0)) = r3;
0x000d54d0 cmp r1, 0x28 |
0x000d54d2 movs r0, r0 |
0x000d54d4 ldr r5, [r6, 0x64] | r5 = *(0xd55d6);
0x000d54d6 ldr r3, [r5, 0x64] | r3 = *(0xd563a);
0x000d54d8 strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d54da movs r0, 0x6e | r0 = 0x6e;
0x000d54dc strb r6, [r4, 0x15] | *((r4 + 0x15)) = r6;
0x000d54de str r6, [r5, 0x34] | *((r5 + 0x34)) = r6;
0x000d54e0 ldr r4, [r6, 0x14] | r4 = *(0xd5586);
0x000d54e2 ldr r7, [r5, 0x64] | r7 = *(0xd563a);
0x000d54e4 movs r0, 0x3a | r0 = 0x3a;
0x000d54e6 movs r3, 0x25 | r3 = 0x25;
0x000d54e8 cmp r0, 0x54 |
0x000d54ea movs r1, r5 | r1 = r5;
0x000d54ec ldr r5, [r6, 0x64] | r5 = *(0xd55d6);
0x000d54ee ldr r3, [r5, 0x64] | r3 = *(0xd563a);
0x000d54f0 strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d54f2 lsls r6, r5, 1 | r6 = r5 << 1;
0x000d54f4 ldrh r2, [r6, r5] | r2 = *((r6 + r5));
0x000d54f6 str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d54f8 subs r5, 0x5d | r5 -= 0x5d;
0x000d54fa strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d54fc movs r5, 0x2e | r5 = 0x2e;
0x000d54fe lsls r3, r6, 1 | r3 = r6 << 1;
0x000d5500 adcs r2, r2 | __asm ("adcs r2, r2");
0x000d5502 strh r1, [r1, r5] | *((r1 + r5)) = r1;
0x000d5504 cmp r0, 0x45 |
0x000d5506 movs r0, 0x29 | r0 = 0x29;
0x000d5508 str r5, [r5, 0x14] | *((r5 + 0x14)) = r5;
0x000d550a movs r0, 0x79 | r0 = 0x79;
0x000d550c ldr r7, [r5, 0x64] | r7 = *(0xd563a);
0x000d550e ldrb r4, [r5, 5] | r4 = *((r5 + 5));
0x000d5510 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000d5512 movs r0, 0x65 | r0 = 0x65;
0x000d5514 strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000d5516 str r5, [r4, 0x44] | *((r4 + 0x44)) = r5;
0x000d5518 strb r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x000d551a strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000d551c ldr r0, [r5, 0x14] | r0 = *(0xd55ea);
0x000d551e movs r0, 0x6e | r0 = 0x6e;
0x000d5520 movs r0, 0x61 | r0 = 0x61;
0x000d5522 strb r4, [r6, 9] | *((r6 + 9)) = r4;
0x000d5524 str r1, [r5, 0x74] | *((r5 + 0x74)) = r1;
0x000d5526 str r7, [r4, 0x54] | *((r4 + 0x54)) = r7;
0x000d5528 cmp r5, 0x72 |
0x000d552a strb r0, [r6, 9] | *((r6 + 9)) = r0;
0x000d552c str r7, [r5, 0x74] | *((r5 + 0x74)) = r7;
0x000d552e str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000d5530 lsls r5, r5, 1 | r5 <<= 1;
0x000d5532 movs r0, r0 |
0x000d5534 strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000d5536 strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000d5538 strb r3, [r2, 0x11] | *((r2 + 0x11)) = r3;
0x000d553a strb r5, [r5, 0x11] | *((r5 + 0x11)) = r5;
0x000d553c ldr r2, [r1, 0x74] | r2 = *(0xd565a);
0x000d553e strb r5, [r6, 9] | *((r6 + 9)) = r5;
0x000d5540 str r6, [r5, 0x14] | *((r5 + 0x14)) = r6;
0x000d5542 subs r5, 0x6c | r5 -= 0x6c;
0x000d5544 str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d5546 movs r0, r0 |
0x000d5548 ldr r4, [pc, 0x108] | r4 = *(0xd5654);
0x000d554a ldr r7, [pc, 0x13c] | r7 = *(0xd568a);
0x000d554c movs r0, 0x4d | r0 = 0x4d;
0x000d554e ldr r1, [pc, 0x118] | r1 = *(0xd566a);
0x000d5550 strb r4, [r1, r1] | *((r1 + r1)) = r4;
0x000d5552 strh r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d5554 ldr r7, [pc, 0x80] | r7 = imp.atan;
0x000d5556 movs r0, 0x4e | r0 = 0x4e;
0x000d5558 strh r5, [r4, r4] | *((r4 + r4)) = r5;
0x000d555a cmp r0, 0x20 |
0x000d555c movs r0, r0 |
0x000d555e movs r0, r0 |
0x000d5560 ldr r1, [pc, 0x130] | r1 = *(0xd5694);
0x000d5562 ldr r1, [pc, 0x134] | r1 = *(0xd569a);
0x000d5564 movs r0, 0x54 | r0 = 0x54;
0x000d5566 ldr r3, [r4, 0x74] | r3 = *(0xd56c8);
0x000d5568 ldr r5, [r6, 0x64] | r5 = *(0xd55d6);
0x000d556a str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d556c lsls r2, r6, 1 | r2 = r6 << 1;
0x000d556e movs r0, r0 |
0x000d5570 mov r7, sb | r7 = sb;
0x000d5572 strh r6, [r0, r5] | *((r0 + r5)) = r6;
0x000d5574 strb r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d5576 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x000d5578 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000d557a strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d557c strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d557e movs r0, r0 |
0x000d5580 ldr r1, [pc, 0x130] | r1 = "SETUP";
0x000d5582 ldr r1, [pc, 0x134] | r1 = *(0xd56ba);
0x000d5584 cmp r3, 0x54 |
0x000d5586 mov r7, sb | r7 = sb;
0x000d5588 strh r6, [r0, r5] | *((r0 + r5)) = r6;
0x000d558a strb r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d558c movs r0, r0 |
0x000d558e movs r0, r0 |
0x000d5590 str r2, [r4, 0x54] | *((r4 + 0x54)) = r2;
0x000d5592 ldr r7, [r4, 0x14] | r7 = *(0xd5668);
0x000d5594 movs r0, 0x6e | r0 = 0x6e;
0x000d5596 ldr r3, [r6, 0x34] | r3 = *(0xd55a6);
0x000d5598 strb r1, [r5, 1] | *((r5 + 1)) = r1;
0x000d559a strb r5, [r5, 0xc] | *((r5 + 0xc)) = r5;
0x000d559c str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d559e movs r0, 0x6e | r0 = 0x6e;
0x000d55a0 ldr r7, [r5, 0x64] | r7 = *(0xd563a);
0x000d55a2 movs r5, 0x20 | r5 = 0x20;
0x000d55a4 lsls r3, r6, 1 | r3 = r6 << 1;
0x000d55a6 movs r0, r0 |
0x000d55a8 ldr r7, [pc, 0x138] | r7 = "LEFT";
0x000d55aa adcs r3, r0 | __asm ("adcs r3, r0");
0x000d55ac cmp r3, sl |
0x000d55ae movs r0, r0 |
0x000d55b0 ldr r6, [pc, 0x13c] | r6 = *(0xd56f0);
0x000d55b2 str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x000d55b4 str r4, [r5, 0x14] | *((r5 + 0x14)) = r4;
0x000d55b6 strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000d55b8 movs r0, 0x65 | r0 = 0x65;
0x000d55ba str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d55bc str r6, [r4, 0x54] | *((r4 + 0x54)) = r6;
0x000d55be str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d55c0 str r6, [r5, 0x34] | *((r5 + 0x34)) = r6;
0x000d55c2 strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000d55c4 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d55c6 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d55c8 str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d55ca movs r0, 0x73 | r0 = 0x73;
0x000d55cc ldr r4, [r6, 0x74] |
0x000d55ce ldr r0, [r4, 0x10] | r0 = *(0xd5774);
0x000d55d0 strb r4, [r6, 0xd] | *((r6 + 0xd)) = r4;
0x000d55d2 strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000d55d4 str r1, [r5, 0x74] | *((r5 + 0x74)) = r1;
0x000d55d6 strb r0, [r5, 0x11] | *((r5 + 0x11)) = r0;
0x000d55d8 movs r0, r0 |
0x000d55da movs r0, r0 |
0x000d55dc cmp r2, sl |
0x000d55de strh r5, [r2, r5] | *((r2 + r5)) = r5;
0x000d55e0 movs r0, 0x45 | r0 = 0x45;
0x000d55e2 ldr r1, [pc, 0x130] | r1 = *(0xd5716);
0x000d55e4 strb r3, [r2, r1] | *((r2 + r1)) = r3;
0x000d55e6 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000d55e8 rsbs r5, r2, 0 | r5 = r2 - ;
0x000d55ea strb r1, [r2, r5] | *((r2 + r5)) = r1;
0x000d55ec strh r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d55ee movs r0, 0x59 | r0 = 0x59;
0x000d55f0 str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d55f2 movs r0, r0 |
0x000d55f4 str r2, [r2, 0x54] | *((r2 + 0x54)) = r2;
0x000d55f6 strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d55f8 strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000d55fa ldr r0, [r4, 0x70] | r0 = *(0xd57d4);
0x000d55fc movs r0, 0x66 | r0 = 0x66;
0x000d55fe cmp r3, sl |
0x000d5600 cmp r4, sb |
0x000d5602 strb r3, [r0, r1] | *((r0 + r1)) = r3;
0x000d5604 movs r5, 0x20 | r5 = 0x20;
0x000d5606 lsls r5, r6, 1 | r5 = r6 << 1;
0x000d5608 ldr r0, [pc, 0x148] | r0 = *(0xd5754);
0x000d560a movs r0, 0x53 | r0 = 0x53;
0x000d560c str r7, [r5, 0x64] | *((r5 + 0x64)) = r7;
0x000d560e ldr r1, [pc, 0x80] | r1 = *(0xd5692);
0x000d5610 movs r0, 0x4e | r0 = 0x4e;
0x000d5612 strb r7, [r5, 1] | *((r5 + 1)) = r7;
0x000d5614 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d5616 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d5618 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d561a movs r0, r0 |
0x000d561c strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d561e ldr r1, [pc, 0x130] | r1 = *(0xd5752);
0x000d5620 strb r3, [r2, r1] | *((r2 + r1)) = r3;
0x000d5622 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000d5624 rsbs r5, r2, 0 | r5 = r2 - ;
0x000d5626 strb r1, [r2, r5] | *((r2 + r5)) = r1;
0x000d5628 strh r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d562a movs r0, 0x59 | r0 = 0x59;
0x000d562c str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d562e movs r0, r0 |
0x000d5630 muls r3, r2, r3 | r3 = r2 * r3;
0x000d5632 ldr r6, [pc, 0x104] | r6 = *(0xd573a);
0x000d5634 movs r5, 0x20 | r5 = 0x20;
0x000d5636 movs r0, 0x64 | r0 = 0x64;
0x000d5638 ldr r7, [pc, 0x10c] | r7 = "eof-B subroutine";
0x000d563a strh r6, [r1, r5] | *((r1 + r5)) = r6;
0x000d563c adcs r4, r2 | __asm ("adcs r4, r2");
0x000d563e strb r6, [r1, r1] | *((r1 + r1)) = r6;
0x000d5640 strh r0, [r4, r0] | *((r4 + r0)) = r0;
0x000d5642 ldrsb r7, [r1, r5] | r7 = *((r1 + r5));
0x000d5644 strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d5646 movs r0, r0 |
0x000d5648 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d564a ldr r6, [r5, 0x64] | r6 = *(0xd563a);
0x000d564c strb r7, [r5, 0x11] | *((r5 + 0x11)) = r7;
0x000d564e strb r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x000d5650 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d5652 strb r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x000d5654 ldr r1, [r5, 0x64] | r1 = *(0xd563a);
0x000d5656 ldr r4, [r4, 0x74] | r4 = "%s USING TEMP B-TREE";
0x000d5658 movs r0, 0x77 | r0 = 0x77;
0x000d565a strb r6, [r4, 0x15] | *((r4 + 0x15)) = r6;
0x000d565c str r6, [r5, 0x34] | *((r5 + 0x34)) = r6;
0x000d565e ldr r4, [r6, 0x14] | r4 = *(0xd564e);
0x000d5660 ldr r7, [r5, 0x64] | r7 = *(0xd563a);
0x000d5662 movs r0, 0x73 | r0 = 0x73;
0x000d5664 ldr r1, [r5, 0x64] | r1 = *(0xd563a);
0x000d5666 strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000d5668 str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x000d566a strb r5, [r6, 9] | *((r6 + 9)) = r5;
0x000d566c ldr r3, [r6, 0x14] | r3 = *(0xd564e);
0x000d566e str r6, [r6, 0x54] | *((r6 + 0x54)) = r6;
0x000d5670 strb r0, [r4, 4] | *((r4 + 4)) = r0;
0x000d5672 str r5, [r6, 0x54] | *((r6 + 0x54)) = r5;
0x000d5674 ldr r2, [r6, 0x14] | r2 = *(0xd564e);
0x000d5676 strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000d5678 movs r0, r0 |
0x000d567a movs r0, r0 |
0x000d567c strb r1, [r2, 0x15] | *((r2 + 0x15)) = r1;
0x000d567e strb r5, [r4, 0x15] | *((r4 + 0x15)) = r5;
0x000d5680 movs r0, 0x65 | r0 = 0x65;
0x000d5682 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000d5684 ldr r2, [r4, 0x44] | r2 = *(0xd5692);
0x000d5686 lsls r5, r4, 1 | r5 = r4 << 1;
0x000d5688 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d568a strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x000d568c strb r2, [r6, 0xd] | *((r6 + 0xd)) = r2;
0x000d568e strb r1, [r5, 0x19] | *((r5 + 0x19)) = r1;
0x000d5690 movs r0, 0x65 | r0 = 0x65;
0x000d5692 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d5694 strb r7, [r4, 9] | *((r4 + 9)) = r7;
0x000d5696 str r5, [r4, 0x74] | *((r4 + 0x74)) = r5;
0x000d5698 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d569a movs r0, 0x65 | r0 = 0x65;
0x000d569c strb r1, [r6, 0x15] | *((r6 + 0x15)) = r1;
0x000d569e strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d56a0 str r1, [r5, 0x54] | *((r5 + 0x54)) = r1;
0x000d56a2 movs r0, 0x73 | r0 = 0x73;
0x000d56a4 ldr r6, [r5, 0x74] | r6 = *(0xd564a);
0x000d56a6 movs r0, 0x74 | r0 = 0x74;
0x000d56a8 strb r3, [r6, 0x15] | *((r6 + 0x15)) = r3;
0x000d56aa strb r0, [r6, 1] | *((r6 + 1)) = r0;
0x000d56ac strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d56ae str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d56b0 lsls r4, r4, 1 | r4 <<= 1;
0x000d56b2 movs r0, r0 |
0x000d56b4 cmp r3, sl |
0x000d56b6 strb r4, [r2, r5] | *((r2 + r5)) = r4;
0x000d56b8 lsls r0, r2, 1 | r0 = r2 << 1;
0x000d56ba movs r0, r0 |
0x000d56bc cmp r2, sl |
0x000d56be strb r3, [r0, r5] | *((r0 + r5)) = r3;
0x000d56c0 strh r2, [r2, r5] | *((r2 + r5)) = r2;
0x000d56c2 ldrsb r1, [r1, r1] | r1 = *((r1 + r1));
0x000d56c4 movs r0, 0x45 | r0 = 0x45;
0x000d56c6 strb r3, [r2, r1] | *((r2 + r1)) = r3;
0x000d56c8 str r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d56ca movs r0, r0 |
0x000d56cc cmp r5, sb |
0x000d56ce bx sl | return uint32_t (*sl)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb7cc8 */
| #include <stdint.h>
|
; (fcn) fcn.000b7cc8 () | void fcn_000b7cc8 (int16_t arg_10h, int16_t arg_20h, int16_t arg_57h, int16_t arg_5fh, int16_t arg_180h, int16_t arg_188h, int16_t arg_18ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_154h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000b7cc8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b7ccc mov fp, r0 |
0x000b7cce ldr.w r4, [pc, 0x528] |
0x000b7cd2 sub sp, 0x15c |
0x000b7cd4 ldr.w r0, [pc, 0x524] | r0 = *(0xb81fc);
0x000b7cd8 add r4, pc | r4 = 0x16fed6;
0x000b7cda ldr r5, [sp, 0x18c] | r5 = *(arg_18ch);
0x000b7cdc ldr r0, [r4, r0] |
0x000b7cde ldr r0, [r0] | r0 = imp.atan;
0x000b7ce0 str r0, [sp, 0x154] | var_154h = r0;
0x000b7ce2 mov.w r0, 0 | r0 = 0;
0x000b7ce6 ldr.w r0, [fp, 0xc] | r0 = *(arg_18ch);
0x000b7ce8 movs r4, r1 | r4 = r1;
0x000b7cea str r2, [sp, 0x1c] | var_1ch = r2;
0x000b7cec add r2, sp, 0x3c | r2 += var_3ch;
0x000b7cee str r3, [sp, 0x28] | var_28h = r3;
0x000b7cf0 movs r3, 0 | r3 = 0;
0x000b7cf2 str r1, [sp, 0x24] | var_24h = r1;
0x000b7cf4 str r3, [r5] | *(r5) = r3;
0x000b7cf6 str r2, [sp, 0x14] | var_14h = r2;
0x000b7cf8 str r3, [sp, 0x3c] | var_3ch = r3;
| if (r0 != 0) {
0x000b7cfa cbz r0, 0xb7d06 |
0x000b7cfc ldr.w r3, [pc, 0x500] |
0x000b7d00 add r3, pc |
0x000b7d02 ldr r3, [r3, 0x50] | r3 = imp.atan;
0x000b7d04 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000b7d06 mov r0, fp | r0 = fp;
0x000b7d08 movs r2, 0x20 | r2 = 0x20;
0x000b7d0a movs r3, 0 | r3 = 0;
0x000b7d0c bl 0x380e8 | r0 = fcn_000380e8 (r0, r1, r2);
0x000b7d10 mov sl, r0 | sl = r0;
0x000b7d12 cmp r0, 0 |
| if (r0 == 0) {
0x000b7d14 beq.w 0xb8092 | goto label_23;
| }
0x000b7d18 ldr.w r3, [pc, 0x4e8] |
0x000b7d1c movs r7, 0 | r7 = 0;
0x000b7d1e movs r2, 0x20 | r2 = 0x20;
0x000b7d20 mov r1, r7 | r1 = r7;
0x000b7d22 ldr.w r4, [pc, 0x4e4] |
0x000b7d26 add r3, pc | r3 = 0x16ff2e;
0x000b7d28 str r3, [sp, 0x30] | var_30h = r3;
0x000b7d2a blx 0x62ec | fcn_000062ec ();
0x000b7d2e ldr r3, [sp, 0x188] | r3 = *(arg_188h);
0x000b7d30 add r4, pc | r4 = 0x16ff3e;
0x000b7d32 add r0, sp, 0x40 | r0 += var_40h;
0x000b7d34 mov r1, fp | r1 = fp;
0x000b7d36 str r0, [sp, 0xc] | var_ch = r0;
0x000b7d38 subs r3, r3, r7 | r3 -= r7;
0x000b7d3a str r7, [sp, 0x10] | var_10h = r7;
0x000b7d3c it ne |
| if (r3 == r3) {
0x000b7d3e movne r3, 1 | r3 = 1;
| }
0x000b7d40 str r7, [sp, 0x18] | var_18h = r7;
0x000b7d42 str r3, [sp, 0x2c] | var_2ch = r3;
0x000b7d44 bl 0x43cb0 | fcn_00043cb0 (r0, r1);
0x000b7d48 str r5, [sp, 0x34] | var_34h = r5;
| if (r7 != 0) {
| label_3:
0x000b7d4a cbz r7, 0xb7d54 |
0x000b7d4c mov r1, r7 | r1 = r7;
0x000b7d4e mov r0, fp | r0 = fp;
0x000b7d50 bl 0x2d144 | fcn_0002d144 (r0, r1);
| }
0x000b7d54 ldrb.w r3, [fp, 0x5f] | r3 = *(arg_5fh);
0x000b7d58 movs r2, 0 | r2 = 0;
0x000b7d5a ldr r1, [sp, 0x14] | r1 = var_14h;
0x000b7d5c str r2, [r1] | *(r1) = r2;
0x000b7d5e cmp r3, 0 |
| if (r3 == 0) {
0x000b7d60 beq.w 0xb7fc0 | goto label_24;
| }
| label_6:
0x000b7d64 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b7d66 movs r1, 0 | r1 = 0;
0x000b7d68 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000b7d6a ldr r0, [sp, 0xc] | r0 = var_ch;
0x000b7d6c bl 0x98284 | r0 = fcn_00098284 (r0, r1, r2, r3, r4, r5);
0x000b7d70 mov r8, r0 | r8 = r0;
0x000b7d72 cmp r0, 0 |
| if (r0 == 0) {
0x000b7d74 beq.w 0xb810e | goto label_19;
| }
0x000b7d78 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x000b7d7c cmp r3, 1 |
| if (r3 == 1) {
0x000b7d7e beq.w 0xb8102 | goto label_25;
| }
0x000b7d82 ldr r0, [r0, 0x1c] | r0 = *((r0 + 0x1c));
0x000b7d84 ands r0, r0, 0x80 | r0 &= 0x80;
| if (r0 != r0) {
0x000b7d88 bne.w 0xb81aa | goto label_26;
| }
0x000b7d8a strh r7, [r1, 0x10] | *((r1 + 0x10)) = r7;
0x000b7d8c cmp r3, 2 |
| if (r3 == 2) {
0x000b7d8e beq.w 0xb81b8 | goto label_27;
| }
0x000b7d92 ldr.w r5, [r8, 0x3c] | r5 = *((r8 + 0x3c));
0x000b7d96 ldr.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x000b7d9a str.w r8, [sl, 0x1c] | __asm ("str.w r8, [sl, 0x1c]");
0x000b7d9e cmp r5, 0 |
| if (r5 == 0) {
0x000b7da0 beq.w 0xb81c6 | goto label_28;
| }
0x000b7da2 strh r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
0x000b7da4 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000b7da6 cmp r5, r3 |
| if (r5 == r3) {
0x000b7da8 beq 0xb7dba | goto label_20;
| }
0x000b7daa add.w r3, r2, 0x10 | r3 = r2 + 0x10;
| do {
0x000b7dae mov r2, r3 | r2 = r3;
0x000b7db0 adds r3, 0x10 | r3 += 0x10;
0x000b7db2 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x000b7db6 cmp r5, r1 |
0x000b7db8 bne 0xb7dae |
| } while (r5 != r1);
| label_20:
0x000b7dba ldrsh.w r7, [r8, 0x22] | r7 = *((r8 + 0x22));
0x000b7dbe ldr r3, [r2] | r3 = *(r2);
0x000b7dc0 cmp r7, 0 |
0x000b7dc2 str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
| if (r7 <= 0) {
0x000b7dc6 ble.w 0xb8168 | goto label_29;
| }
0x000b7dca ldr r2, [sp, 0x28] | r2 = var_28h;
0x000b7dcc movs r5, 0 | r5 = 0;
0x000b7dce ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000b7dd2 add.w ip, r2, -1 |
| label_0:
0x000b7dd6 ldr.w r2, [r3, r0, lsl 2] | offset_0 = r0 << 2;
| r2 = *((r3 + offset_0));
0x000b7dda mov r6, ip | r6 = ip;
0x000b7ddc add.w lr, r2, -1 | lr = r2 + -1;
| do {
| label_1:
0x000b7de0 ldrb r2, [lr, 1]! | r2 = *((lr += 1));
0x000b7de4 ldrb r1, [r6, 1]! | r1 = *((r6 += 1));
0x000b7de8 cmp r2, r1 |
| if (r2 == r1) {
0x000b7dea beq 0xb7e28 | goto label_30;
| }
0x000b7dec add r2, r4 | r2 += r4;
0x000b7dee add r1, r4 | r1 += r4;
0x000b7df0 ldrb.w sb, [r2, 0x140] | sb = *((r2 + 0x140));
0x000b7df4 ldrb.w r2, [r1, 0x140] | r2 = *((r1 + 0x140));
0x000b7df8 cmp sb, r2 |
0x000b7dfa beq 0xb7de0 |
| } while (sb == r2);
0x000b7dfc adds r5, 1 | r5++;
0x000b7dfe adds r0, 3 | r0 += 3;
0x000b7e00 cmp r5, r7 |
| if (r5 != r7) {
0x000b7e02 bne 0xb7dd6 | goto label_0;
| }
| label_2:
0x000b7e04 ldr.w r1, [pc, 0x404] |
0x000b7e08 mov r0, fp | r0 = fp;
0x000b7e0a ldr r2, [sp, 0x28] | r2 = var_28h;
0x000b7e0c add r1, pc | r1 = 0x17001c;
0x000b7e0e bl 0x4a320 | fcn_0004a320 (r0);
0x000b7e12 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b7e14 mov r6, r0 | r6 = r0;
0x000b7e16 str r0, [r3] | *(r3) = r0;
0x000b7e18 ldrb.w r3, [fp, 0x5f] | r3 = *(arg_5fh);
0x000b7e1a adds r0, 0x5f | r0 += 0x5f;
0x000b7e1c cmp r3, 0 |
| if (r3 == 0) {
0x000b7e1e beq.w 0xb81cc | goto label_31;
| }
0x000b7e22 movs r4, 1 | r4 = 1;
0x000b7e24 str r4, [sp, 0x10] | var_10h = r4;
0x000b7e26 b 0xb812a | goto label_16;
| label_30:
0x000b7e28 cmp r2, 0 |
| if (r2 != 0) {
0x000b7e2a bne 0xb7de0 | goto label_1;
| }
| label_14:
0x000b7e2c cmp r5, r7 |
| if (r5 == r7) {
0x000b7e2e beq 0xb7e04 | goto label_2;
| }
0x000b7e30 ldr r3, [sp, 0x188] | r3 = *(arg_188h);
0x000b7e32 cmp r3, 0 |
| if (r3 != 0) {
0x000b7e34 bne.w 0xb7f5c | goto label_32;
| }
| label_4:
0x000b7e38 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000b7e3a bl 0x41ad0 | r0 = fcn_00041ad0 (r0, r1);
0x000b7e3e mov sb, r0 | sb = r0;
0x000b7e40 str.w r0, [sl, 0x10] | __asm ("str.w r0, [sl, 0x10]");
0x000b7e44 cmp r0, 0 |
| if (r0 == 0) {
0x000b7e46 beq 0xb7efe | goto label_8;
| }
0x000b7e48 ldr.w r1, [r8, 0x3c] | r1 = *((r8 + 0x3c));
0x000b7e4c cmp r1, 0 |
| if (r1 == 0) {
0x000b7e4e beq.w 0xb81dc | goto label_33;
| }
0x000b7e50 strh r5, [r0, 0xe] | *((r0 + 0xe)) = r5;
0x000b7e52 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000b7e56 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000b7e58 cmp r1, r2 |
| if (r1 == r2) {
0x000b7e5a beq.w 0xb8160 | goto label_34;
| }
0x000b7e5e movs r7, 0 | r7 = 0;
| do {
0x000b7e60 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x000b7e62 adds r3, 0x10 | r3 += 0x10;
0x000b7e64 adds r7, 1 | r7++;
0x000b7e66 cmp r1, r2 |
0x000b7e68 bne 0xb7e60 |
| } while (r1 != r2);
| label_22:
0x000b7e6a movs r3, 1 | r3 = 1;
0x000b7e6c lsls r3, r7 | r3 <<= r7;
0x000b7e6e str r3, [sp, 0x20] | var_20h = r3;
| label_13:
0x000b7e70 ldrd r3, r6, [r1] | __asm ("ldrd r3, r6, [r1]");
0x000b7e74 mov r2, r7 | r2 = r7;
0x000b7e76 movs r1, 2 | r1 = 2;
0x000b7e78 mov r0, sb | r0 = sb;
0x000b7e7a str r3, [sp] | *(sp) = r3;
0x000b7e7c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b7e7e bl 0x41a7c | fcn_00041a7c (r0, r1, r2, r3, r4);
0x000b7e82 ldr.w r3, [sb] | r3 = *(sb);
0x000b7e86 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000b7e8a cbnz r3, 0xb7e9e |
0x000b7e8c ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x000b7e90 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000b7e94 movs r2, 0xfd | r2 = 0xfd;
0x000b7e96 add.w r3, r3, r0, lsl 3 | r3 += (r0 << 3);
0x000b7e9a str r6, [r3, 0x10] | *((r3 + 0x10)) = r6;
0x000b7e9c strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x000b7e9e ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x000b7ea2 cmp r3, 0 |
| if (r3 > 0) {
0x000b7ea4 ble 0xb7eb8 |
0x000b7ea6 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x000b7eaa add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000b7eae add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000b7eb2 movs r3, 1 | r3 = 1;
0x000b7eb4 strh r3, [r2, -0x16] | *((r2 - 0x16)) = r3;
| }
0x000b7eb8 ldr r2, [pc, 0x354] |
0x000b7eba movs r1, 6 | r1 = 6;
0x000b7ebc mov r0, sb | r0 = sb;
0x000b7ebe add r2, pc | r2 = 0x1700d2;
0x000b7ec0 addw r2, r2, 0xf68 | __asm ("addw r2, r2, 0xf68");
0x000b7ec4 bl 0x41994 | fcn_00041994 (r0, r1, r2);
0x000b7ec8 ldr.w r3, [sb, 0x98] | r3 = *((sb + 0x98));
0x000b7ecc cmp r7, 1 |
0x000b7ece ldr r2, [sp, 0x20] | r2 = var_20h;
0x000b7ed0 mov r6, r0 | r6 = r0;
0x000b7ed2 orr.w r3, r3, r2 | r3 |= r2;
0x000b7ed6 str.w r3, [sb, 0x98] | __asm ("str.w r3, [sb, 0x98]");
| if (r7 != 1) {
0x000b7eda beq 0xb7ef6 |
0x000b7edc ldr.w r3, [sb] | r3 = *(sb);
0x000b7ee0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000b7ee2 add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x000b7ee6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000b7ee8 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000b7eea cbz r3, 0xb7ef6 | goto label_35;
| }
0x000b7eec ldr.w r3, [sb, 0x9c] | r3 = *((sb + 0x9c));
0x000b7ef0 orrs r3, r2 | r3 |= r2;
0x000b7ef2 str.w r3, [sb, 0x9c] | __asm ("str.w r3, [sb, 0x9c]");
| }
| label_35:
0x000b7ef6 ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b7efa cmp r3, 0 |
| if (r3 == 0) {
0x000b7efc beq 0xb7fdc | goto label_36;
| }
| label_8:
0x000b7efe strh.w r5, [sl, 8] | *((sl + 8)) = r5;
0x000b7f02 str.w fp, [sl, 0x14] | __asm ("str.w fp, [sl, 0x14]");
0x000b7f06 ldrb.w r3, [fp, 0x5f] | r3 = *(arg_5fh);
0x000b7f0a cmp r3, 0 |
| if (r3 == 0) {
0x000b7f0c beq 0xb7fc8 | goto label_37;
| }
0x000b7f0e ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b7f12 cmp r3, 0 |
| if (r3 != 0) {
0x000b7f14 bne 0xb7fd6 | goto label_38;
| }
| label_7:
0x000b7f16 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b7f18 mov r0, sl | r0 = sl;
0x000b7f1a ldr r5, [sp, 0x18] | r5 = var_18h;
0x000b7f1c str r3, [sp] | *(sp) = r3;
0x000b7f1e adds r5, 1 | r5++;
0x000b7f20 ldrd r2, r3, [sp, 0x180] | __asm ("ldrd r2, r3, [arg_180h]");
0x000b7f24 str r5, [sp, 0x18] | var_18h = r5;
0x000b7f26 bl 0xb7b8c | r0 = fcn_000b7b8c (r0, r1, r2, r3);
0x000b7f2a subs.w r3, r0, 0x11 | r3 = r0 - 0x11;
0x000b7f2e str r0, [sp, 0x10] | var_10h = r0;
0x000b7f30 it ne |
| if (r3 == r0) {
0x000b7f32 movne r3, 1 | r3 = 1;
| }
0x000b7f34 cmp r5, 0x32 |
0x000b7f36 it eq |
| if (r5 != 0x32) {
0x000b7f38 orreq r3, r3, 1 | r3 |= 1;
| }
0x000b7f3c cmp r3, 0 |
| if (r3 != 0) {
0x000b7f3e bne.w 0xb8174 | goto label_39;
| }
0x000b7f42 ldr r5, [sp, 0xc] | r5 = var_ch;
0x000b7f44 mov r0, r5 | r0 = r5;
0x000b7f46 bl 0x30db0 | fcn_00030db0 (r0);
0x000b7f4a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b7f4c mov r1, fp | r1 = fp;
0x000b7f4e mov r0, r5 | r0 = r5;
0x000b7f50 ldr r7, [r3] | r7 = *(r3);
0x000b7f52 bl 0x43cb0 | fcn_00043cb0 (r0, r1);
0x000b7f54 mcr2 p3, 5, r2, c13, c1, 0 | __asm ("mcr2 p3, 5, r2, c13, c1, 0");
0x000b7f58 str r3, [sp, 0x10] | var_10h = r3;
0x000b7f5a b 0xb7d4a | goto label_3;
| label_32:
0x000b7f5c ldr.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000b7f60 ldr.w r1, [r8, 8] | r1 = *((r8 + 8));
0x000b7f64 and r2, r2, 0x4000 | r2 &= 0x4000;
0x000b7f68 cmp r2, 0 |
| if (r2 != 0) {
0x000b7f6a bne 0xb8044 | goto label_40;
| }
0x000b7f6c cmp r1, 0 |
| if (r1 == 0) {
0x000b7f6e beq.w 0xb7e38 | goto label_4;
| }
| label_10:
0x000b7f72 ldr r7, [sp, 0x30] | r7 = var_30h;
| label_5:
0x000b7f74 ldrh r6, [r1, 0x32] | r6 = *((r1 + 0x32));
| if (r6 == 0) {
0x000b7f76 cbz r6, 0xb7f92 | goto label_41;
| }
0x000b7f78 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x000b7f7a add.w r6, r3, r6, lsl 1 | r6 = r3 + (r6 << 1);
| do {
0x000b7f7e ldrsh r0, [r3], 2 | r0 = *(r3);
| r3 += 2;
0x000b7f82 cmn.w r0, 2 |
0x000b7f86 it ne |
| if (r0 != 2) {
0x000b7f88 cmpne r0, r5 | __asm ("cmpne r0, r5");
| }
0x000b7f8a it eq |
| if (r0 != 2) {
0x000b7f8c moveq r2, r7 | r2 = r7;
| }
0x000b7f8e cmp r3, r6 |
0x000b7f90 bne 0xb7f7e |
| } while (r3 != r6);
| label_41:
0x000b7f92 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x000b7f94 cmp r1, 0 |
| if (r1 != 0) {
0x000b7f96 bne 0xb7f74 | goto label_5;
| }
0x000b7f98 cmp r2, 0 |
| if (r2 == 0) {
0x000b7f9a beq.w 0xb7e38 | goto label_4;
| }
| label_11:
0x000b7f9e ldr r1, [pc, 0x274] |
0x000b7fa0 mov r0, fp | r0 = fp;
0x000b7fa2 add r1, pc | r1 = 0x1701bc;
0x000b7fa4 bl 0x4a320 | fcn_0004a320 (r0);
0x000b7fa8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b7faa mov r6, r0 | r6 = r0;
0x000b7fac str r0, [r3] | *(r3) = r0;
0x000b7fae ldrb.w r3, [fp, 0x5f] | r3 = *(arg_5fh);
0x000b7fb2 cmp r3, 0 |
| if (r3 == 0) {
0x000b7fb4 beq.w 0xb81ea | goto label_42;
| }
0x000b7fb8 movs r3, 1 | r3 = 1;
0x000b7fba mov r4, r3 | r4 = r3;
0x000b7fbc str r3, [sp, 0x10] | var_10h = r3;
0x000b7fbe b 0xb812a | goto label_16;
| label_24:
0x000b7fc0 mov r0, fp | r0 = fp;
0x000b7fc2 bl 0x2dd38 | fcn_0002dd38 (r0);
0x000b7fc6 b 0xb7d64 | goto label_6;
| label_37:
0x000b7fc8 mov r0, fp | r0 = fp;
0x000b7fca bl 0x2cd4c | fcn_0002cd4c (r0);
0x000b7fce ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b7fd2 cmp r3, 0 |
| if (r3 == 0) {
0x000b7fd4 beq 0xb7f16 | goto label_7;
| }
| label_38:
0x000b7fd6 ldr r5, [sp, 0x34] | r5 = var_34h;
0x000b7fd8 movs r6, 0 | r6 = 0;
0x000b7fda b 0xb817a | goto label_43;
| label_36:
0x000b7fdc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b7fde ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x000b7fe2 str r7, [r6, 4] | *((r6 + 4)) = r7;
0x000b7fe4 ldr.w r2, [r8] | r2 = *(r8);
0x000b7fe8 strd r1, r3, [r6, 8] | __asm ("strd r1, r3, [r6, 8]");
0x000b7fec ldr.w r3, [sb] | r3 = *(sb);
0x000b7ff0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x000b7ff4 cbnz r3, 0xb8010 | goto label_44;
| }
0x000b7ff6 ldr.w r1, [sb, 0x68] | r1 = *((sb + 0x68));
0x000b7ffa mov r0, sb | r0 = sb;
0x000b7ffc adds r1, 0x30 | r1 += 0x30;
0x000b7ffe bl 0x3952c | fcn_0003952c (r0, r1, r2, r3);
0x000b8002 ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b8006 cmp r3, 0 |
| if (r3 != 0) {
0x000b8008 bne.w 0xb7efe | goto label_8;
| }
0x000b800c ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
| label_44:
0x000b8010 ldr r3, [sp, 0x188] | r3 = *(arg_188h);
| if (r3 != 0) {
0x000b8012 cbz r3, 0xb8018 |
0x000b8014 movs r3, 0x71 | r3 = 0x71;
0x000b8016 strb r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
| }
0x000b8018 movs r3, 0xfd | r3 = 0xfd;
0x000b801a ldr r2, [sp, 0xc] | r2 = var_ch;
0x000b801c strb r3, [r6, 0x19] | *((r6 + 0x19)) = r3;
0x000b801e mov r0, sb | r0 = sb;
0x000b8020 ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x000b8024 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x000b8028 strd r1, r7, [r6, 0x20] | __asm ("strd r1, r7, [r6, 0x20]");
0x000b802c mov r1, r2 | r1 = r2;
0x000b802e str r3, [r6, 0x50] | *((r6 + 0x50)) = r3;
0x000b8030 adds r3, 1 | r3++;
0x000b8032 str r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
0x000b8034 movs r3, 0 | r3 = 0;
0x000b8036 vstr d16, [sp, 0x68] | __asm ("vstr d16, [sp, 0x68]");
0x000b803a strh.w r3, [r2, 0xcc] | *((r2 + 0xcc)) = r3;
0x000b803e bl 0x3f48c | fcn_0003f48c (r0, r1, r2, r3, r4);
0x000b8042 b 0xb7efe | goto label_8;
| label_40:
0x000b8044 ldr.w lr, [r8, 0x30] |
0x000b8048 cmp.w lr, 0 |
| if (lr == 0) {
0x000b804c beq.w 0xb819e | goto label_45;
| }
0x000b8050 ldr.w ip, [pc, 0x1c4] |
0x000b8054 mov r3, r1 | r3 = r1;
0x000b8056 movs r2, 0 | r2 = 0;
0x000b8058 mov r1, lr | r1 = lr;
0x000b805a mov lr, r3 | lr = r3;
0x000b805c add ip, pc | ip = 0x170278;
| label_9:
0x000b805e ldr r6, [r1, 0x14] | r6 = *((r1 + 0x14));
0x000b8060 cmp r6, 0 |
0x000b8062 itt gt |
| if (r6 <= 0) {
0x000b8064 movgt r3, 0 | r3 = 0;
| }
| if (r6 <= 0) {
0x000b8066 addgt r7, r1, 0x24 | r7 = r1 + 0x24;
| }
| if (r6 <= 0) {
0x000b806a ble 0xb807c | goto label_46;
| }
| do {
0x000b806c ldr.w r0, [r7, r3, lsl 3] | offset_1 = r3 << 3;
| r0 = *((r7 + offset_1));
0x000b8070 adds r3, 1 | r3++;
0x000b8072 cmp r0, r5 |
0x000b8074 it eq |
| if (r0 != r5) {
0x000b8076 moveq r2, ip | r2 = ip;
| }
0x000b8078 cmp r6, r3 |
0x000b807a bne 0xb806c |
| } while (r6 != r3);
| label_46:
0x000b807c ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x000b807e cmp r1, 0 |
| if (r1 != 0) {
0x000b8080 bne 0xb805e | goto label_9;
| }
0x000b8082 mov r1, lr | r1 = lr;
0x000b8084 cmp r1, 0 |
| if (r1 != 0) {
0x000b8086 bne.w 0xb7f72 | goto label_10;
| }
0x000b808a cmp r2, 0 |
| if (r2 == 0) {
0x000b808c beq.w 0xb7e38 | goto label_4;
| }
0x000b8090 b 0xb7f9e | goto label_11;
| label_23:
0x000b8092 add r3, sp, 0x40 | r3 += var_40h;
0x000b8094 mov r1, fp | r1 = fp;
0x000b8096 mov r0, r3 | r0 = r3;
0x000b8098 str r3, [sp, 0xc] | var_ch = r3;
0x000b809a bl 0x43cb0 | fcn_00043cb0 (r0, r1);
0x000b809e ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b80a2 cmp r3, 0 |
| if (r3 == 0) {
0x000b80a4 beq.w 0xb81d8 | goto label_47;
| }
0x000b80a8 mov r4, sl | r4 = sl;
0x000b80aa str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
| do {
0x000b80ae movs r3, 0 | r3 = 0;
0x000b80b0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000b80b2 mov r2, r3 | r2 = r3;
0x000b80b4 mov r0, fp | r0 = fp;
0x000b80b6 bl 0x4a1f0 | fcn_0004a1f0 (r0, r1, r2);
| label_12:
0x000b80ba ldr r0, [sp, 0xc] | r0 = var_ch;
0x000b80bc bl 0x30db0 | fcn_00030db0 (r0);
0x000b80c0 ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b80c4 cmp r3, 0 |
0x000b80c6 it ne |
| if (r3 == 0) {
0x000b80c8 orrne r4, r4, 1 | r4 |= 1;
| }
| if (r4 != 0) {
0x000b80cc cbz r4, 0xb80d8 |
0x000b80ce ldr r1, [sp, 0x10] | r1 = var_10h;
0x000b80d0 mov r0, fp | r0 = fp;
0x000b80d2 bl 0x2e764 | r0 = fcn_0002e764 (r0, r1);
0x000b80d6 mov r4, r0 | r4 = r0;
| }
0x000b80d8 ldr.w r0, [fp, 0xc] | r0 = *(arg_18ch);
| if (r0 != 0) {
0x000b80dc cbz r0, 0xb80e6 |
0x000b80de ldr r3, [pc, 0x13c] |
0x000b80e0 add r3, pc |
0x000b80e2 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000b80e4 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000b80e6 ldr r2, [pc, 0x138] |
0x000b80e8 ldr r3, [pc, 0x110] | r3 = *(0xb81fc);
0x000b80ea add r2, pc | r2 = 0x170310;
0x000b80ec ldr r3, [r2, r3] | r3 = imp.atan;
0x000b80ee ldr r2, [r3] | r2 = imp.atan;
0x000b80f0 ldr r3, [sp, 0x154] | r3 = var_154h;
0x000b80f2 eors r2, r3 | r2 ^= r3;
0x000b80f4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b80f8 bne 0xb81e6 | goto label_48;
| }
0x000b80fa mov r0, r4 | r0 = r4;
0x000b80fc add sp, 0x15c |
0x000b80fe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_25:
0x000b8102 ldr r1, [pc, 0x120] |
0x000b8104 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000b8106 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000b8108 add r1, pc | r1 = 0x170332;
0x000b810a bl 0x37f78 | fcn_00037f78 (r0, r1);
| label_19:
0x000b810e ldr r2, [sp, 0xc] | r2 = var_ch;
0x000b8110 ldr r3, [r2, 4] | r3 = *((r2 + 4));
| if (r3 != 0) {
0x000b8112 cbz r3, 0xb811c |
0x000b8114 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000b8116 str r3, [r1] | *(r1) = r3;
0x000b8118 movs r3, 0 | r3 = 0;
0x000b811a str r3, [r2, 4] | *((r2 + 4)) = r3;
| }
0x000b811c ldrb.w r3, [fp, 0x5f] | r3 = *(arg_5fh);
| if (r3 == 0) {
0x000b8120 cbz r3, 0xb816c | goto label_49;
| }
| label_15:
0x000b8122 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b8124 movs r4, 1 | r4 = 1;
0x000b8126 str r4, [sp, 0x10] | var_10h = r4;
0x000b8128 ldr r6, [r3] | r6 = *(r3);
| label_16:
0x000b812a ldr.w r5, [sl, 0x10] | r5 = *((sl + 0x10));
| if (r5 != 0) {
0x000b812e cbz r5, 0xb813c |
0x000b8130 ldrb.w r3, [r5, 0x95] | r3 = *((r5 + 0x95));
| if (r3 != 0) {
0x000b8134 cbnz r3, 0xb8196 | goto label_50;
| }
| label_18:
0x000b8136 mov r0, r5 | r0 = r5;
0x000b8138 bl 0x32d2c | fcn_00032d2c (r0);
| }
0x000b813c mov r1, sl | r1 = sl;
0x000b813e mov r0, fp | r0 = fp;
0x000b8140 bl 0x2d144 | fcn_0002d144 (r0, r1);
| label_17:
0x000b8144 cmp r6, 0 |
0x000b8146 beq 0xb80ae |
| } while (r6 == 0);
0x000b8148 ldr r2, [pc, 0xdc] |
0x000b814a mov r0, fp | r0 = fp;
0x000b814c ldr r1, [sp, 0x10] | r1 = var_10h;
0x000b814e mov r3, r6 | r3 = r6;
0x000b8150 add r2, pc | r2 = 0x17037c;
0x000b8152 bl 0x4a1f0 | fcn_0004a1f0 (r0, r1, r2);
0x000b8156 mov r1, r6 | r1 = r6;
0x000b8158 mov r0, fp | r0 = fp;
0x000b815a bl 0x2d144 | fcn_0002d144 (r0, r1);
0x000b815e b 0xb80ba | goto label_12;
| label_34:
0x000b8160 movs r3, 1 | r3 = 1;
0x000b8162 movs r7, 0 | r7 = 0;
0x000b8164 str r3, [sp, 0x20] | var_20h = r3;
0x000b8166 b 0xb7e70 | goto label_13;
| label_29:
0x000b8168 movs r5, 0 | r5 = 0;
0x000b816a b 0xb7e2c | goto label_14;
| label_49:
0x000b816c mov r0, fp | r0 = fp;
0x000b816e bl 0x2cd4c | fcn_0002cd4c (r0);
0x000b8172 b 0xb8122 | goto label_15;
| label_39:
0x000b8174 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b8176 ldr r5, [sp, 0x34] | r5 = var_34h;
0x000b8178 ldr r6, [r3] | r6 = *(r3);
| label_43:
0x000b817a ldr r3, [sp, 0x10] | r3 = var_10h;
0x000b817c movs r4, 1 | r4 = 1;
0x000b817e cmp r3, 0 |
| if (r3 != 0) {
0x000b8180 bne 0xb812a | goto label_16;
| }
0x000b8182 ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x000b8186 ldr r4, [sp, 0x10] | r4 = var_10h;
0x000b8188 cmp r3, 0 |
| if (r3 != 0) {
0x000b818a bne 0xb812a | goto label_16;
| }
| label_21:
0x000b818c movs r4, 0 | r4 = 0;
0x000b818e str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x000b8192 str r4, [sp, 0x10] | var_10h = r4;
0x000b8194 b 0xb8144 | goto label_17;
| label_50:
0x000b8196 mov r0, r5 | r0 = r5;
0x000b8198 bl 0x799b0 | fcn_000799b0 (r0);
0x000b819c b 0xb8136 | goto label_18;
| label_45:
0x000b819e ldr r7, [sp, 0x30] | r7 = var_30h;
0x000b81a0 mov r2, lr | r2 = lr;
0x000b81a2 cmp r1, 0 |
| if (r1 != 0) {
0x000b81a4 bne.w 0xb7f74 | goto label_5;
| }
0x000b81a8 b 0xb7e38 | goto label_4;
| label_26:
0x000b81aa ldr r1, [pc, 0x80] |
0x000b81ac ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000b81ae ldr r0, [sp, 0xc] | r0 = var_ch;
0x000b81b0 add r1, pc | r1 = 0x1703e2;
0x000b81b2 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000b81b4 cdp2 p7, 0xe, c14, c1, c10, 5 | __asm ("cdp2 p7, 0xe, c14, c1, c10, 5");
| label_27:
0x000b81b8 ldr r1, [pc, 0x74] |
0x000b81ba ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000b81bc ldr r0, [sp, 0xc] | r0 = var_ch;
0x000b81be add r1, pc | r1 = 0x1703f2;
0x000b81c0 bl 0x37f78 | fcn_00037f78 (r0, r1);
0x000b81c4 b 0xb810e | goto label_19;
| label_28:
0x000b81c6 sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x000b81ca b 0xb7dba | goto label_20;
| label_31:
0x000b81cc mov r0, fp | r0 = fp;
0x000b81ce movs r4, 1 | r4 = 1;
0x000b81d0 bl 0x2cd4c | fcn_0002cd4c (r0);
0x000b81d4 str r4, [sp, 0x10] | var_10h = r4;
0x000b81d6 b 0xb812a | goto label_16;
| label_47:
0x000b81d8 mov r6, sl | r6 = sl;
0x000b81da b 0xb818c | goto label_21;
| label_33:
0x000b81dc mov.w r7, 0x8000 |
0x000b81e0 movt r7, 0xffff | r7 = 0x-8000;
0x000b81e4 b 0xb7e6a | goto label_22;
| label_48:
0x000b81e6 blx 0x6430 | fcn_00006430 ();
| label_42:
0x000b81ea mov r0, fp | r0 = fp;
0x000b81ec bl 0x2cd4c | fcn_0002cd4c (r0);
0x000b81f0 movs r3, 1 | r3 = 1;
0x000b81f2 mov r4, r3 | r4 = r3;
0x000b81f4 str r3, [sp, 0x10] | var_10h = r3;
0x000b81f6 b 0xb812a | goto label_16;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb8334 */
| #include <stdint.h>
|
; (fcn) fcn.000b8334 () | void fcn_000b8334 (int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_0h;
| int16_t var_34h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000b8334 movw r1, 0x7eaf |
0x000b8338 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000b833c movt r1, 0x51d0 | r1 = 0x51d07eaf;
0x000b8340 mov r4, r2 | r4 = r2;
0x000b8342 umull r2, r1, r1, r4 | r2:r1 = r1 * r4;
0x000b8346 mov r5, r3 | r5 = r3;
0x000b8348 sub sp, 0x10 |
0x000b834a mov r6, r0 | r6 = r0;
0x000b834c ldr r7, [sp, 0x30] | r7 = var_0h;
0x000b834e subs r3, r4, r1 | r3 = r4 - r1;
0x000b8350 add.w r1, r1, r3, lsr 1 | r1 += (r3 >> 1);
0x000b8352 lsls r3, r2, 5 | r3 = r2 << 5;
0x000b8354 lsrs r1, r1, 6 | r1 >>= 6;
0x000b8356 add.w r3, r1, r1, lsl 1 | r3 = r1 + (r1 << 1);
0x000b835a add.w r1, r1, r3, lsl 5 | r1 += (r3 << 5);
0x000b835e subs r1, r4, r1 | r1 = r4 - r1;
0x000b8360 add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x000b8364 ldr r1, [r1, 0x74] | r1 = *((r1 + 0x74));
| if (r1 != 0) {
0x000b8366 cbnz r1, 0xb836e | goto label_9;
| }
0x000b8368 b 0xb83a6 | goto label_10;
| do {
0x000b836a ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
| if (r1 == 0) {
0x000b836c cbz r1, 0xb83a6 | goto label_10;
| }
| label_9:
0x000b836e ldrd r2, r3, [r1, 8] | __asm ("ldrd r2, r3, [r1, 8]");
0x000b8372 cmp r5, r3 |
0x000b8374 it eq |
| if (r5 == r3) {
0x000b8376 cmpeq r4, r2 | __asm ("cmpeq r4, r2");
| }
0x000b8378 bne 0xb836a |
| } while (r5 != r3);
| if (r7 != 0) {
0x000b837a cbz r7, 0xb8390 |
0x000b837c ldr r3, [r1] | r3 = *(r1);
0x000b837e cmp r3, r7 |
0x000b8380 it ne |
| if (r3 != r7) {
0x000b8382 movwne r8, 0x10b | __asm ("movwne r8, 0x10b");
| }
| if (r3 == r7) {
0x000b8386 beq 0xb8390 | goto label_11;
| }
| label_5:
0x000b8388 mov r0, r8 | r0 = r8;
0x000b838a add sp, 0x10 |
0x000b838c pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
| label_11:
0x000b8390 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b8392 mov.w r8, 0 | r8 = 0;
0x000b8396 mov r0, r8 | r0 = r8;
0x000b8398 adds r3, 1 | r3++;
0x000b839a str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x000b839c ldr r3, [sp, 0x34] | r3 = var_34h;
0x000b839e str r1, [r3] | *(r3) = r1;
0x000b83a0 add sp, 0x10 |
0x000b83a2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_10:
0x000b83a6 ldr.w sb, [r6, 0x4c] | sb = *((r6 + 0x4c));
0x000b83aa cmp.w sb, 0 |
| if (sb == 0) {
0x000b83ae beq 0xb840a | goto label_12;
| }
0x000b83b0 movs r3, 0 | r3 = 0;
0x000b83b2 mov r2, r4 | r2 = r4;
0x000b83b4 str r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x000b83b6 mov r0, sb | r0 = sb;
0x000b83b8 mov r3, r5 | r3 = r5;
0x000b83ba bl 0xb8234 | fcn_000b8234 (r0, r1, r2);
0x000b83be str.w sb, [r6, 0x4c] | __asm ("str.w sb, [r6, 0x4c]");
0x000b83c2 mov r8, r0 | r8 = r0;
0x000b83c4 cmp r0, 0 |
| if (r0 != 0) {
0x000b83c6 bne.w 0xb855c | goto label_13;
| }
0x000b83ca ldr.w sl, [r6, 0x10] | sl = *((r6 + 0x10));
| label_0:
0x000b83ce ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000b83d2 mov r8, r3 | r8 = r3;
| if (r3 == 0) {
0x000b83d4 cbz r3, 0xb83da | goto label_14;
| }
0x000b83d6 ldr.w r8, [sb] | r8 = *(sb);
| do {
| label_14:
0x000b83da cmp sl, r8 |
0x000b83dc itt ne |
| if (sl == r8) {
0x000b83de movne sb, 0 | sb = 0;
| }
| if (sl != r8) {
0x000b83e2 movw r8, 0x10b | r8 = 0x10b;
| }
| if (sl == r8) {
0x000b83e6 beq 0xb847c | goto label_15;
| }
| label_1:
0x000b83e8 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000b83ea mov r0, r8 | r0 = r8;
0x000b83ec str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000b83f0 add sp, 0x10 |
0x000b83f2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x000b83f6 mov r0, sb | r0 = sb;
0x000b83f8 str r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x000b83fa bl 0x7a69c | fcn_0007a69c (r0);
0x000b83fe cmp.w r8, 7 |
| if (r8 == 7) {
0x000b8402 beq.w 0xb8574 | goto label_16;
| }
0x000b8406 ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
| if (r0 == 0) {
0x000b8408 cbnz r0, 0xb844a |
| label_12:
0x000b840a ldr r0, [pc, 0x188] |
0x000b840c ldr r1, [r6, 0x24] | r1 = *((r6 + 0x24));
0x000b840e add r0, pc | r0 = 0x1709a8;
0x000b8410 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000b8414 mov sb, r0 | sb = r0;
0x000b8416 cmp r0, 0 |
| if (r0 == 0) {
0x000b8418 beq.w 0xb8574 | goto label_16;
| }
0x000b841c add.w r3, r6, 0x4c | r3 = r6 + 0x4c;
0x000b8420 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x000b8424 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000b8426 movs r3, 0 | r3 = 0;
0x000b8428 str r3, [sp, 8] | var_8h = r3;
0x000b842a mov r2, sb | r2 = sb;
0x000b842c ldr r3, [pc, 0x168] |
0x000b842e ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x000b8430 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000b8432 add r3, pc | r3 = 0x1709ce;
0x000b8434 bl 0xb7cc8 | r0 = fcn_000b7cc8 (r0, r1, r2, r3, r4, r5, r6);
0x000b8438 mov r8, r0 | r8 = r0;
0x000b843a mov r0, sb | r0 = sb;
0x000b843c bl 0x26dbc | fcn_00026dbc (r0);
0x000b8440 cmp.w r8, 0 |
| if (r8 == 0) {
0x000b8444 beq 0xb846c | goto label_17;
| }
0x000b8446 ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
| if (r0 == 0) {
0x000b8448 cbz r0, 0xb8456 | goto label_8;
| }
| }
0x000b844a ldrb r3, [r6, 0x18] | r3 = *((r6 + 0x18));
| if (r3 == 0) {
| label_4:
0x000b844c cbnz r3, 0xb8456 |
0x000b844e ldr r2, [r6, 0x38] | r2 = *((r6 + 0x38));
0x000b8450 cmp r2, 0 |
| if (r2 == 0) {
0x000b8452 beq.w 0xb8586 | goto label_18;
| }
| }
| label_8:
0x000b8456 cmp.w r8, 1 |
| if (r8 == 1) {
0x000b845a beq.w 0xb858e | goto label_19;
| }
| label_7:
0x000b845e ldr r2, [sp, 0x34] | r2 = var_34h;
0x000b8460 movs r3, 0 | r3 = 0;
0x000b8462 mov r0, r8 | r0 = r8;
0x000b8464 str r3, [r2] | *(r2) = r3;
0x000b8466 add sp, 0x10 |
0x000b8468 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_17:
0x000b846c ldr.w sb, [r6, 0x4c] | sb = *((r6 + 0x4c));
0x000b8470 ldr.w sl, [r6, 0x10] | sl = *((r6 + 0x10));
0x000b8474 cmp.w sb, 0 |
0x000b8478 beq 0xb83da |
| } while (sb == 0);
0x000b847a b 0xb83ce | goto label_0;
| label_15:
0x000b847c ldr r3, [pc, 0x11c] |
0x000b847e add r3, pc |
0x000b8480 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b8484 cmp r3, 0 |
| if (r3 != 0) {
0x000b8486 bne 0xb857a | goto label_20;
| }
0x000b8488 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b848c cmp r0, 0 |
| if (r0 != 0) {
0x000b848e bne 0xb8580 | goto label_21;
| }
0x000b8490 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b8494 cmp r0, 0 |
| if (r0 != 0) {
0x000b8496 bne 0xb8580 | goto label_21;
| }
| label_6:
0x000b8498 mov.w r8, 0 | r8 = 0;
0x000b849c add.w r0, sl, 0x20 | r0 = sl + 0x20;
0x000b84a0 mov r1, r8 | r1 = r8;
0x000b84a2 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000b84a6 mov sb, r0 | sb = r0;
0x000b84a8 cmp r0, 0 |
| if (r0 == 0) {
0x000b84aa beq 0xb8580 | goto label_21;
| }
0x000b84ac ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000b84ae mov r1, r0 | r1 = r0;
0x000b84b0 str r7, [r1], 0x20 | *(r1) = r7;
| r1 += 0x20;
0x000b84b4 str r1, [r0, 0x18] | *((r0 + 0x18)) = r1;
0x000b84b6 movs r0, 1 | r0 = 1;
0x000b84b8 adds r2, r3, 1 | r2 = r3 + 1;
0x000b84ba ldr r3, [pc, 0xe4] |
0x000b84bc str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
0x000b84c0 str r2, [r6, 0x3c] | *((r6 + 0x3c)) = r2;
0x000b84c2 add r3, pc | r3 = 0x170a68;
0x000b84c4 str.w r8, [sb, 0x14] | __asm ("str.w r8, [sb, 0x14]");
0x000b84c8 str.w r8, [sb, 0x1c] | __asm ("str.w r8, [sb, 0x1c]");
0x000b84cc strd r4, r5, [sb, 8] | __asm ("strd r4, r5, [sb, 8]");
0x000b84d0 str r3, [sp] | *(sp) = r3;
0x000b84d2 mov r3, r8 | r3 = r8;
0x000b84d4 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000b84d6 ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
0x000b84d8 bl 0x79a00 | r0 = fcn_00079a00 (r0, r1, r2, r3, r4);
0x000b84dc mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x000b84de cbnz r0, 0xb8504 | goto label_22;
| }
0x000b84e0 subs r4, 1 | r4--;
0x000b84e2 ldr.w sl, [sb, 0x18] | sl = *((sb + 0x18));
0x000b84e6 orrs r4, r5 | r4 |= r5;
| if (r4 == r5) {
0x000b84e8 beq 0xb854c | goto label_23;
| }
| label_2:
0x000b84ea ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x000b84ec ldrb r1, [r6, 0x17] | r1 = *((r6 + 0x17));
0x000b84ee subs r0, 4 | r0 -= 4;
0x000b84f0 bl 0xc4780 | fcn_000c4780 (r0, r1);
0x000b84f4 ldrh.w r3, [sl, 2] | r3 = *((sl + 2));
0x000b84f8 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x000b84fa uxth r3, r3 | r3 = (int16_t) r3;
0x000b84fc cmp r0, r3 |
0x000b84fe bge 0xb8512 |
| while (r3 > 0x28) {
0x000b8500 movw r8, 0x10b | r8 = 0x10b;
| label_22:
0x000b8504 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000b8506 mov r0, sb | r0 = sb;
0x000b8508 subs r3, 1 | r3--;
0x000b850a str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x000b850c bl 0x26dbc | fcn_00026dbc (r0);
0x000b850e mrrc2 p7, 0xa, lr, r6, c5 | __asm ("mrrc2 p7, 0xa, lr, r6, c5");
| if (r7 != 0) {
0x000b8512 cbz r7, 0xb851a |
0x000b8514 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000b8516 adds r3, 1 | r3++;
0x000b8518 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| }
0x000b851a ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x000b851e movw r3, 0x7eaf |
0x000b8522 movt r3, 0x51d0 | r3 = 0x51d07eaf;
0x000b8526 umull r1, r3, r3, r2 | r1:r3 = r3 * r2;
0x000b852a subs r1, r2, r3 | r1 = r2 - r3;
0x000b852c add.w r3, r3, r1, lsr 1 | r3 += (r1 >> 1);
0x000b8530 lsrs r3, r3, 6 | r3 >>= 6;
0x000b8532 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x000b8536 add.w r3, r3, r1, lsl 5 | r3 += (r1 << 5);
0x000b853a subs r3, r2, r3 | r3 = r2 - r3;
0x000b853c add.w r3, r6, r3, lsl 2 | r3 = r6 + (r3 << 2);
0x000b8540 ldr r2, [r3, 0x74] | r2 = *((r3 + 0x74));
0x000b8542 str.w r2, [sb, 0x1c] | __asm ("str.w r2, [sb, 0x1c]");
0x000b8546 str.w sb, [r3, 0x74] | __asm ("str.w sb, [r3, 0x74]");
0x000b854a b 0xb83e8 | goto label_1;
| label_23:
0x000b854c ldrh.w r3, [sl] | r3 = *(sl);
0x000b8550 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x000b8552 uxth r3, r3 | r3 = (int16_t) r3;
0x000b8554 cmp r3, 0x28 |
0x000b8556 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x000b8558 bgt 0xb8500 |
| }
0x000b855a b 0xb84ea | goto label_2;
| label_13:
0x000b855c ldrb r3, [r6, 0x18] | r3 = *((r6 + 0x18));
| if (r3 != 0) {
0x000b855e cbnz r3, 0xb8568 | goto label_24;
| }
0x000b8560 ldr r2, [r6, 0x38] | r2 = *((r6 + 0x38));
0x000b8562 cmp r2, 0 |
| if (r2 == 0) {
0x000b8564 beq.w 0xb83f6 | goto label_3;
| }
| label_24:
0x000b8568 cmp.w r8, 7 |
0x000b856c it ne |
| if (r8 != 7) {
0x000b856e ldrne r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
| goto label_25;
| }
| if (r8 != 7) {
| label_25:
0x000b8570 bne.w 0xb844c | goto label_4;
| }
| label_16:
0x000b8574 mov.w r8, 7 | r8 = 7;
0x000b8578 b 0xb8388 | goto label_5;
| label_20:
0x000b857a dmb ish | __asm ("dmb ish");
0x000b857e b 0xb8498 | goto label_6;
| label_21:
0x000b8580 mov.w r8, 7 | r8 = 7;
0x000b8584 b 0xb845e | goto label_7;
| label_18:
0x000b8586 str r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x000b8588 bl 0x7a69c | fcn_0007a69c (r0);
0x000b858c b 0xb8456 | goto label_8;
| label_19:
0x000b858e movw r8, 0x10b | r8 = 0x10b;
0x000b8592 b 0xb845e | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb8a94 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.000b8a94 () | void fcn_000b8a94 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_2h;
| int16_t var_0h_4;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch_3;
| int16_t var_10h_3;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h_2;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h_2;
| int16_t var_48h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_bch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000b8a94 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b8a98 cmp r3, 0 |
0x000b8a9a ldr.w r5, [pc, 0xc00] |
0x000b8a9e ldr.w r4, [pc, 0xc00] | r4 = *(0xb96a2);
0x000b8aa2 add r5, pc | r5 = 0x172144;
0x000b8aa4 vpush {d8, d9, d10, d11, d12, d13, d14, d15} | __asm ("vpush {d8, d9, d10, d11, d12, d13, d14, d15}");
0x000b8aa8 sub sp, 0xc4 |
0x000b8aaa ldr r4, [r5, r4] |
0x000b8aac mov r5, r1 | r5 = r1;
0x000b8aae ldr r4, [r4] | r4 = imp.atan;
0x000b8ab0 str r4, [sp, 0xbc] | var_bch = r4;
0x000b8ab2 mov.w r4, 0 | r4 = 0;
0x000b8ab6 mov r4, r0 | r4 = r0;
0x000b8ab8 str r2, [sp, 0x28] | var_28h_2 = r2;
0x000b8aba str r3, [sp, 0x24] | var_24h = r3;
| if (r3 <= 0) {
0x000b8abc ble 0xb8b16 | goto label_32;
| }
0x000b8abe ldr r1, [r2] | r1 = *(r2);
0x000b8ac0 movw r3, 0x7eaf |
0x000b8ac4 movt r3, 0x51d0 | r3 = 0x51d07eaf;
0x000b8ac8 mov r0, r2 | r0 = r2;
0x000b8aca ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000b8acc umull r2, r3, r3, r1 | r2:r3 = r3 * r1;
0x000b8ad0 subs r2, r1, r3 | r2 = r1 - r3;
0x000b8ad2 add.w r3, r3, r2, lsr 1 | r3 += (r2 >> 1);
0x000b8ad6 lsrs r3, r3, 6 | r3 >>= 6;
0x000b8ad8 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000b8adc add.w r3, r3, r2, lsl 5 | r3 += (r2 << 5);
0x000b8ae0 subs r3, r1, r3 | r3 = r1 - r3;
0x000b8ae2 add.w r3, r4, r3, lsl 2 | r3 = r4 + (r3 << 2);
0x000b8ae6 ldr r6, [r3, 0x74] | r6 = *((r3 + 0x74));
| if (r6 != 0) {
0x000b8ae8 cbnz r6, 0xb8af0 | goto label_33;
| }
0x000b8aea b 0xb8b16 | goto label_32;
| do {
0x000b8aec ldr r6, [r6, 0x1c] | r6 = *((r6 + 0x1c));
| if (r6 == 0) {
0x000b8aee cbz r6, 0xb8b16 | goto label_32;
| }
| label_33:
0x000b8af0 ldrd r2, r3, [r6, 8] | __asm ("ldrd r2, r3, [r6, 8]");
0x000b8af4 cmp r0, r3 |
0x000b8af6 it eq |
| if (r0 == r3) {
0x000b8af8 cmpeq r1, r2 | __asm ("cmpeq r1, r2");
| }
0x000b8afa bne 0xb8aec |
| } while (r0 != r3);
0x000b8afc ldr r1, [r6] | r1 = *(r6);
| if (r1 != 0) {
0x000b8afe cbz r1, 0xb8b0c |
0x000b8b00 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000b8b02 subs r3, 1 | r3--;
0x000b8b04 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x000b8b06 cmp r3, 0 |
| if (r3 == 0) {
0x000b8b08 beq.w 0xb90ea | goto label_34;
| }
| }
| if (r5 != 0) {
| label_6:
0x000b8b0c cbz r5, 0xb8b14 |
0x000b8b0e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b8b10 adds r3, 1 | r3++;
0x000b8b12 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| }
0x000b8b14 str r5, [r6] | *(r6) = r5;
| label_32:
0x000b8b16 ldr r2, [sp, 0x28] | r2 = var_28h_2;
0x000b8b18 mov r1, r5 | r1 = r5;
0x000b8b1a mov r0, r4 | r0 = r4;
0x000b8b1c bl 0x29bcc | r0 = fcn_00029bcc (r0, r1, r2);
0x000b8b20 cmp r0, 0 |
| if (r0 == 0) {
0x000b8b22 beq.w 0xb904e | goto label_35;
| }
0x000b8b26 ldr.w r3, [pc, 0xb7c] |
0x000b8b2a ldr r2, [sp, 0x24] | r2 = var_24h;
0x000b8b2c add r3, pc | r3 = 0x1721d6;
0x000b8b2e ldr.w r6, [r3, 0xd0] | r6 = imp.atan;
0x000b8b32 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000b8b34 cmp r3, r2 |
| if (r3 >= r2) {
0x000b8b36 bge.w 0xb8ccc | goto label_36;
| }
0x000b8b3a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000b8b3c ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000b8b3e subs r3, 1 | r3--;
0x000b8b40 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x000b8b42 beq.w 0xb8ccc | goto label_36;
| }
0x000b8b46 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b8b48 add.w fp, sp, 0x88 |
0x000b8b4c movs r2, 0x28 | r2 = 0x28;
0x000b8b4e movs r1, 0 | r1 = 0;
0x000b8b50 mov r0, fp | r0 = fp;
0x000b8b52 str r3, [r4, 0x48] | *((r4 + 0x48)) = r3;
0x000b8b54 blx 0x62ec | fcn_000062ec ();
0x000b8b58 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000b8b5a ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x000b8b5c rev16 r3, r3 | __asm ("rev16 r3, r3");
0x000b8b5e uxth.w sl, r3 | sl = (int16_t) r3;
0x000b8b62 add.w r3, sl, 1 | r3 = sl + 1;
0x000b8b66 str r3, [sp, 8] | var_8h_2 = r3;
0x000b8b68 cmp r6, 0 |
| if (r6 != 0) {
0x000b8b6a bne.w 0xb90e4 | goto label_37;
| }
0x000b8b6e bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b8b72 cmp r0, 0 |
| if (r0 != 0) {
0x000b8b74 bne.w 0xb954a | goto label_38;
| }
0x000b8b78 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b8b7c cmp r0, 0 |
| if (r0 != 0) {
0x000b8b7e bne.w 0xb954a | goto label_38;
| }
| label_5:
0x000b8b82 add.w r6, sl, 2 | r6 = sl + 2;
0x000b8b86 movs r1, 0 | r1 = 0;
0x000b8b88 bic r6, r6, 1 | r6 = BIT_MASK (r6, 1);
0x000b8b8c lsls r0, r6, 6 | r0 = r6 << 6;
0x000b8b8e bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000b8b92 mov sb, r0 | sb = r0;
0x000b8b94 cmp r0, 0 |
| if (r0 == 0) {
0x000b8b96 beq.w 0xb954a | goto label_38;
| }
0x000b8b9a add.w r2, r6, r6, lsl 1 | r2 = r6 + (r6 << 1);
0x000b8b9e ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x000b8ba0 lsls r3, r6, 2 | r3 = r6 << 2;
0x000b8ba2 movs r7, 0 | r7 = 0;
0x000b8ba4 add.w r2, r0, r2, lsl 4 | r2 = r0 + (r2 << 4);
0x000b8ba8 mov r6, r0 | r6 = r0;
0x000b8baa adds r1, 0x30 | r1 += 0x30;
0x000b8bac str r1, [sp, 0x1c] | var_1ch_2 = r1;
0x000b8bae adds r1, r2, r3 | r1 = r2 + r3;
0x000b8bb0 add.w r8, r1, r3 | r8 = r1 + r3;
0x000b8bb4 subs r3, r2, 4 | r3 = r2 - 4;
0x000b8bb6 str r2, [sp, 0xc] | var_ch_3 = r2;
0x000b8bb8 str r1, [sp, 0x18] | var_18h = r1;
0x000b8bba strd r3, r3, [sp, 0x10] | __asm ("strd r3, r3, [sp, 0x10]");
| label_1:
0x000b8bbe cmp sl, r7 |
| if (sl == r7) {
0x000b8bc0 beq.w 0xb940a | goto label_39;
| }
0x000b8bc4 str r6, [sp] | *(sp) = r6;
0x000b8bc6 mov r3, r7 | r3 = r7;
0x000b8bc8 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x000b8bca ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x000b8bcc ldrb r0, [r4, 0x15] | r0 = *((r4 + 0x15));
0x000b8bce bl 0x29b34 | fcn_00029b34 (r0, r1, r2, r3);
| label_14:
0x000b8bd2 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000b8bd4 str r7, [r3, 4]! | *((r3 += 4)) = r7;
0x000b8bd8 ldrb.w ip, [r4, 0x14] | ip = *((r4 + 0x14));
0x000b8bdc str r3, [sp, 0x10] | var_10h_3 = r3;
0x000b8bde cmp.w ip, 0 |
| if (ip == 0) {
0x000b8be2 beq 0xb8c36 | goto label_40;
| }
0x000b8be4 movs r3, 8 | r3 = 8;
0x000b8be6 ldrb r1, [r4, 0x16] | r1 = *((r4 + 0x16));
0x000b8be8 smlabb r0, r3, ip, r6 | __asm ("smlabb r0, r3, ip, r6");
0x000b8bec mov r2, fp | r2 = fp;
0x000b8bee mov r3, r6 | r3 = r6;
0x000b8bf0 b 0xb8c0c |
| while (r1 == 0) {
0x000b8bf2 vcvt.f64.f32 d18, s15 | __asm ("vcvt.f64.f32 d18, s15");
0x000b8bf6 adds r3, 8 | r3 += 8;
0x000b8bf8 vcvt.f64.f32 d16, s14 | __asm ("vcvt.f64.f32 d16, s14");
0x000b8bfc cmp r0, r3 |
0x000b8bfe vadd.f64 d17, d18, d17 | __asm ("vadd.f64 d17, d18, d17");
0x000b8c02 vadd.f64 d16, d16, d17 | __asm ("vadd.f64 d16, d16, d17");
0x000b8c06 vstr d16, [r2, -8] | __asm ("vstr d16, [r2, -8]");
| if (r0 == r3) {
0x000b8c0a beq 0xb8c36 | goto label_40;
| }
| label_0:
0x000b8c0c vldmia r2!, {d17} | __asm ("vldmia r2!, {d17}");
0x000b8c10 vldr s15, [r3, 8] | __asm ("vldr s15, [r3, 8]");
0x000b8c14 vldr s14, [r3, 0xc] | __asm ("vldr s14, [r3, 0xc]");
0x000b8c18 cmp r1, 0 |
0x000b8c1a beq 0xb8bf2 |
| }
0x000b8c1c vcvt.f64.s32 d18, s15 | __asm ("vcvt.f64.s32 d18, s15");
0x000b8c20 adds r3, 8 | r3 += 8;
0x000b8c22 vcvt.f64.s32 d16, s14 | __asm ("vcvt.f64.s32 d16, s14");
0x000b8c26 cmp r0, r3 |
0x000b8c28 vadd.f64 d17, d18, d17 | __asm ("vadd.f64 d17, d18, d17");
0x000b8c2c vadd.f64 d16, d16, d17 | __asm ("vadd.f64 d16, d16, d17");
0x000b8c30 vstr d16, [r2, -8] | __asm ("vstr d16, [r2, -8]");
| if (r0 != r3) {
0x000b8c34 bne 0xb8c0c | goto label_0;
| }
| label_40:
0x000b8c36 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000b8c38 adds r7, 1 | r7++;
0x000b8c3a adds r6, 0x30 | r6 += 0x30;
0x000b8c3c cmp r7, r3 |
| if (r7 != r3) {
0x000b8c3e bne 0xb8bbe | goto label_1;
| }
0x000b8c40 mov r1, ip | r1 = ip;
| if (r1 == 0) {
0x000b8c42 cbz r1, 0xb8c6a | goto label_41;
| }
0x000b8c44 vldr s15, [sp, 8] | __asm ("vldr s15, [sp, 8]");
0x000b8c48 sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x000b8c4c add.w r2, fp, r1, lsl 3 | r2 = fp + (r1 << 3);
0x000b8c50 mov r3, fp | r3 = fp;
0x000b8c52 vcvt.f64.s32 d16, s15 | __asm ("vcvt.f64.s32 d16, s15");
0x000b8c56 vadd.f64 d16, d16, d16 | __asm ("vadd.f64 d16, d16, d16");
| do {
0x000b8c5a vldr d18, [r3] | __asm ("vldr d18, [r3]");
0x000b8c5e vdiv.f64 d17, d18, d16 | __asm ("vdiv.f64 d17, d18, d16");
0x000b8c62 vstmia r3!, {d17} | __asm ("vstmia r3!, {d17}");
0x000b8c66 cmp r2, r3 |
0x000b8c68 bne 0xb8c5a |
| } while (r2 != r3);
| label_41:
0x000b8c6a ldr r3, [sp, 8] | r3 = var_8h_2;
0x000b8c6c lsl.w ip, ip, 3 |
0x000b8c6e lsrs r4, r1, 0x13 | r4 = r1 >> 0x13;
0x000b8c70 vmov.i64 d20, 0 | __asm ("vmov.i64 d20, 0");
0x000b8c74 mov r7, r8 | r7 = r8;
0x000b8c76 add.w r0, sb, ip | r0 = sb + ip;
0x000b8c7a add.w lr, r8, r3, lsl 3 | lr = r8 + (r3 << 3);
| label_11:
0x000b8c7e vstmia r7!, {d20} | __asm ("vstmia r7!, {d20}");
0x000b8c82 cmp r1, 0 |
| if (r1 == 0) {
0x000b8c84 beq.w 0xb934a | goto label_42;
| }
0x000b8c88 ldrb r6, [r4, 0x16] | r6 = *((r4 + 0x16));
0x000b8c8a sub.w r3, r0, ip | r3 = r0 - ip;
0x000b8c8e vmov.i64 d18, 0 | __asm ("vmov.i64 d18, 0");
0x000b8c92 mov r2, fp | r2 = fp;
0x000b8c94 b 0xb8cb6 |
| while (r6 == 0) {
0x000b8c96 vcvt.f64.f32 d16, s15 | __asm ("vcvt.f64.f32 d16, s15");
0x000b8c9a vcvt.f64.f32 d7, s14 | __asm ("vcvt.f64.f32 d7, s14");
| label_2:
0x000b8c9e vldmia r2!, {d19} | __asm ("vldmia r2!, {d19}");
0x000b8ca2 adds r3, 8 | r3 += 8;
0x000b8ca4 vsub.f64 d16, d16, d7 | __asm ("vsub.f64 d16, d16, d7");
0x000b8ca8 cmp r0, r3 |
0x000b8caa vsub.f64 d16, d16, d19 | __asm ("vsub.f64 d16, d16, d19");
0x000b8cae vmla.f64 d18, d16, d16 | __asm ("vmla.f64 d18, d16, d16");
| if (r0 == r3) {
0x000b8cb2 beq.w 0xb9346 | goto label_43;
| }
0x000b8cb6 vldr s15, [r3, 0xc] | __asm ("vldr s15, [r3, 0xc]");
0x000b8cba vldr s14, [r3, 8] | __asm ("vldr s14, [r3, 8]");
0x000b8cbe cmp r6, 0 |
0x000b8cc0 beq 0xb8c96 |
| }
0x000b8cc2 vcvt.f64.s32 d16, s15 | __asm ("vcvt.f64.s32 d16, s15");
0x000b8cc6 vcvt.f64.s32 d7, s14 | __asm ("vcvt.f64.s32 d7, s14");
0x000b8cca b 0xb8c9e | goto label_2;
| label_36:
0x000b8ccc ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000b8cce ldrh r7, [r3, 2] | r7 = *((r3 + 2));
0x000b8cd0 cmp r6, 0 |
| if (r6 != 0) {
0x000b8cd2 bne.w 0xb945c | goto label_44;
| }
0x000b8cd6 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b8cda cmp r0, 0 |
| if (r0 != 0) {
0x000b8cdc bne.w 0xb90b4 | goto label_45;
| }
0x000b8ce0 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b8ce4 cmp r0, 0 |
| if (r0 != 0) {
0x000b8ce6 bne.w 0xb90b4 | goto label_45;
| }
| label_16:
0x000b8cea rev16 r7, r7 | __asm ("rev16 r7, r7");
0x000b8cec movs r0, 0x34 | r0 = 0x34;
0x000b8cee uxth r7, r7 | r7 = (int16_t) r7;
0x000b8cf0 movs r1, 0 | r1 = 0;
0x000b8cf2 mla r0, r7, r0, r0 | __asm ("mla r0, r7, r0, r0");
0x000b8cf6 bl 0x28c3c | fcn_00028c3c (r0);
0x000b8cfa adds r3, r7, 1 | r3 = r7 + 1;
0x000b8cfc mov r6, r0 | r6 = r0;
0x000b8cfe str r3, [sp, 0x34] | var_34h = r3;
0x000b8d00 cmp r0, 0 |
| if (r0 == 0) {
0x000b8d02 beq.w 0xb90b4 | goto label_45;
| }
0x000b8d06 add.w r8, r3, r3, lsl 1 | r8 = r3 + (r3 << 1);
0x000b8d0a lsls r3, r3, 2 | r3 <<= 2;
0x000b8d0c lsl.w r8, r8, 4 | r8 <<= 4;
0x000b8d10 movs r1, 0 | r1 = 0;
0x000b8d12 mov r2, r3 | r2 = r3;
0x000b8d14 str r3, [sp, 8] | var_8h_2 = r3;
0x000b8d16 add r0, r8 | r0 += r8;
0x000b8d18 blx 0x62ec | fcn_000062ec ();
0x000b8d1c ldr.w fp, [r5, 0x18] | fp = *((r5 + 0x18));
| if (r7 == 0) {
0x000b8d20 cbz r7, 0xb8d44 | goto label_46;
| }
0x000b8d22 mov sl, r6 | sl = r6;
0x000b8d24 mov.w sb, 0 | sb = 0;
| do {
0x000b8d28 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000b8d2c mov r3, sb | r3 = sb;
0x000b8d2e ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x000b8d30 add.w sb, sb, 1 | sb++;
0x000b8d34 ldrb r0, [r4, 0x15] | r0 = *((r4 + 0x15));
0x000b8d36 mov r2, fp | r2 = fp;
0x000b8d38 bl 0x29b34 | fcn_00029b34 (r0, r1, r2, r3);
0x000b8d3c cmp r7, sb |
0x000b8d3e add.w sl, sl, 0x30 | sl += 0x30;
0x000b8d42 bne 0xb8d28 |
| } while (r7 != sb);
| label_46:
0x000b8d44 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000b8d46 movs r1, 0 | r1 = 0;
0x000b8d48 add.w r0, fp, 2 | r0 += var_2h;
0x000b8d4c subs r2, 2 | r2 -= 2;
0x000b8d4e blx 0x62ec | fcn_000062ec ();
0x000b8d52 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x000b8d54 sub.w r3, r8, 0x30 | r3 = r8 - 0x30;
0x000b8d58 add r3, r6 | r3 += r6;
0x000b8d5a movs r0, 1 | r0 = 1;
0x000b8d5c str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x000b8d5e mov r2, r1 | r2 = r1;
0x000b8d60 adds r1, 0x30 | r1 += 0x30;
| do {
0x000b8d62 ldr.w r8, [r2] | r8 = *(r2);
0x000b8d66 adds r2, 0x10 | r2 += 0x10;
0x000b8d68 ldr lr, [r2, -0xc] |
0x000b8d6c adds r3, 0x10 | r3 += 0x10;
0x000b8d6e ldr ip, [r2, -0x8] | ip = *((r2 - 0x8));
0x000b8d72 ldr r0, [r2, -0x4] | r0 = *((r2 - 0x4));
0x000b8d76 cmp r2, r1 |
0x000b8d78 str r8, [r3, -0x10] | *((r3 - 0x10)) = r8;
0x000b8d7c str lr, [r3, -0xc] |
0x000b8d80 str ip, [r3, -0x8] | *((r3 - 0x8)) = ip;
0x000b8d84 str r0, [r3, -0x4] | *((r3 - 0x4)) = r0;
0x000b8d88 bne 0xb8d62 |
| } while (r2 != r1);
0x000b8d8a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000b8d8c ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000b8d8e subs r3, 1 | r3--;
0x000b8d90 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x000b8d92 beq.w 0xb954e | goto label_47;
| }
0x000b8d94 strh r4, [r3, 0x1e] | *((r3 + 0x1e)) = r4;
0x000b8d96 ldr r1, [r5] | r1 = *(r5);
0x000b8d98 mov r0, r4 | r0 = r4;
0x000b8d9a bl 0x5c990 | fcn_0005c990 (r0, r1);
0x000b8d9e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b8da0 mov sb, r5 | sb = r5;
0x000b8da2 str r0, [sp, 0x10] | var_10h_3 = r0;
0x000b8da4 adds r3, 1 | r3++;
0x000b8da6 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| label_23:
0x000b8da8 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000b8daa cmp r3, 0 |
0x000b8dac it ne |
| if (r3 != 0) {
0x000b8dae cmpne sb, 0 | __asm ("cmpne sb, 0");
| }
0x000b8db2 ite eq |
| if (r3 != 0) {
0x000b8db4 moveq sl, 1 | sl = 1;
| }
| if (r3 != 0) {
0x000b8db8 mov.w sl, 0 | sl = 0;
| }
| if (r3 == 0) {
0x000b8dbc beq.w 0xb952a | goto label_48;
| }
0x000b8dc0 mov r1, sl | r1 = sl;
0x000b8dc2 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000b8dc4 ldr.w r0, [sb, 0x18] | r0 = *((sb + 0x18));
0x000b8dc8 blx 0x62ec | fcn_000062ec ();
0x000b8dcc ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000b8dce mov r1, sl | r1 = sl;
0x000b8dd0 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000b8dd2 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x000b8dd4 blx 0x62ec | fcn_000062ec ();
0x000b8dd8 ldr.w r3, [pc, 0x8cc] |
0x000b8ddc ldrb.w sl, [r4, 0x14] | sl = *((r4 + 0x14));
0x000b8de0 add r3, pc |
0x000b8de2 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000b8de6 cmp r3, 0 |
| if (r3 != 0) {
0x000b8de8 bne.w 0xb9524 | goto label_49;
| }
0x000b8dec bl 0x25da0 | r0 = fcn_00025da0 ();
0x000b8df0 cmp r0, 0 |
| if (r0 != 0) {
0x000b8df2 bne.w 0xb94ec | goto label_50;
| }
0x000b8df6 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000b8dfa cmp r0, 0 |
| if (r0 != 0) {
0x000b8dfc bne.w 0xb94ec | goto label_50;
| }
0x000b8dfe strh r6, [r6, 0x1a] | *((r6 + 0x1a)) = r6;
| label_21:
0x000b8e00 adds r3, r7, 2 | r3 = r7 + 2;
0x000b8e02 movs r1, 0 | r1 = 0;
0x000b8e04 mla r3, sl, r3, r3 | __asm ("mla r3, sl, r3, r3");
0x000b8e08 lsl.w sl, r3, 2 | sl = r3 << 2;
0x000b8e0c mov r0, sl | r0 = sl;
0x000b8e0e bl 0x28c3c | fcn_00028c3c (r0);
0x000b8e12 str r0, [sp, 0x2c] | var_2ch = r0;
0x000b8e14 cmp r0, 0 |
| if (r0 == 0) {
0x000b8e16 beq.w 0xb94ec | goto label_50;
| }
0x000b8e1a ldr r1, [sp, 0x34] | r1 = var_34h;
0x000b8e1c mov r2, sl | r2 = sl;
0x000b8e1e ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000b8e20 mla r3, r1, r3, r3 | __asm ("mla r3, r1, r3, r3");
0x000b8e24 movs r1, 0 | r1 = 0;
0x000b8e26 add.w r8, r0, r3, lsl 2 | r8 = r0 + (r3 << 2);
0x000b8e2a blx 0x62ec | fcn_000062ec ();
0x000b8e2e ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000b8e30 cmp r3, 0 |
| if (r3 == 0) {
0x000b8e32 beq.w 0xb95ae | goto label_51;
| }
0x000b8e36 mov r0, r4 | r0 = r4;
0x000b8e38 ldr r4, [sp, 0x34] | r4 = var_34h;
0x000b8e3a mov.w fp, 0 |
0x000b8e3e mov sl, fp | sl = fp;
| label_3:
0x000b8e40 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000b8e42 add r3, fp | r3 += fp;
0x000b8e44 add.w r1, r2, r3, lsl 2 | r1 = r2 + (r3 << 2);
0x000b8e48 movs r3, 0 | r3 = 0;
0x000b8e4a str.w r1, [r2, sl, lsl 2] | __asm ("str.w r1, [r2, sl, lsl 2]");
0x000b8e4e subs r2, r1, 4 | r2 = r1 - 4;
| do {
0x000b8e50 str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x000b8e54 adds r3, 1 | r3++;
0x000b8e56 cmp r3, r4 |
0x000b8e58 bne 0xb8e50 |
| } while (r3 != r4);
0x000b8e5a mov r3, sl | r3 = sl;
0x000b8e5c mov r2, r4 | r2 = r4;
0x000b8e5e strd r6, r8, [sp] | __asm ("strd r6, r8, [sp]");
0x000b8e62 add.w sl, sl, 1 | sl++;
0x000b8e66 str r0, [sp, 0xc] | var_ch_3 = r0;
0x000b8e68 add fp, r4 |
0x000b8e6a bl 0x25a6c | fcn_00025a6c (r0, r1, r2, r3, r4, r5);
0x000b8e6e ldr r0, [sp, 0xc] | r0 = var_ch_3;
0x000b8e70 ldrb r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000b8e72 cmp sl, r2 |
0x000b8e74 mov r3, r2 | r3 = r2;
| if (sl < r2) {
0x000b8e76 blt 0xb8e40 | goto label_3;
| }
0x000b8e78 mov r4, r0 | r4 = r0;
0x000b8e7a cmp r2, 0 |
| if (r2 == 0) {
0x000b8e7c beq.w 0xb95ae | goto label_51;
| }
0x000b8e80 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000b8e82 add.w r8, sp, 0x58 | r8 += var_58h;
0x000b8e86 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x000b8e88 add.w fp, sp, 0x88 |
0x000b8e8c ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x000b8e8e subs r3, 4 | r3 -= 4;
0x000b8e90 str r2, [sp, 0xc] | var_ch_3 = r2;
0x000b8e92 subs r0, 4 | r0 -= 4;
0x000b8e94 str r3, [sp, 0x38] | var_38h = r3;
0x000b8e96 bl 0xc4780 | fcn_000c4780 (r0, r1);
0x000b8e9a movw r1, 0x5556 |
0x000b8e9e mov r3, r0 | r3 = r0;
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x000b8ea0 movt r1, 0x5555 | r1 = 0x55555556;
0x000b8ea4 movs r2, 0 | r2 = 0;
0x000b8ea6 smull r0, r1, r1, r3 | r0:r1 = r1 * r3;
0x000b8eaa mov sl, r2 | sl = r2;
0x000b8eac str r2, [sp, 0x30] | var_30h = r2;
0x000b8eae vmov.i64 d13, 0 | __asm ("vmov.i64 d13, 0");
0x000b8eb2 str r5, [sp, 0x3c] | var_3ch = r5;
0x000b8eb4 sub.w r3, r1, r3, asr 31 | r3 = r1 - (r3 >> 31);
0x000b8eb8 mov r1, r2 | r1 = r2;
0x000b8eba ldr r2, [sp, 0x34] | r2 = var_34h;
0x000b8ebc vmov.f64 d12, d13 | __asm ("vmov.f64 d12, d13");
0x000b8ec0 mov r0, r3 | r0 = r3;
0x000b8ec2 vmov.f64 d11, d13 | __asm ("vmov.f64 d11, d13");
0x000b8ec6 subs r2, r2, r3 | r2 -= r3;
0x000b8ec8 str r2, [sp, 0x14] | var_14h = r2;
0x000b8eca ldr r2, [sp, 0xc] | r2 = var_ch_3;
| label_9:
0x000b8ecc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b8ece cmp r0, r3 |
| if (r0 > r3) {
0x000b8ed0 bgt.w 0xb951a | goto label_52;
| }
0x000b8ed4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b8ed6 movs r5, 0 | r5 = 0;
0x000b8ed8 str r5, [sp, 0x20] | var_20h = r5;
0x000b8eda ldr r5, [sp, 0x38] | r5 = var_38h;
0x000b8edc ldr.w r3, [r3, sl, lsl 2] | offset_0 = sl << 2;
| r3 = *((r3 + offset_0));
0x000b8ee0 vmov.f64 d10, d12 | __asm ("vmov.f64 d10, d12");
0x000b8ee4 vmov.f64 d9, d11 | __asm ("vmov.f64 d9, d11");
0x000b8ee8 str r3, [sp, 0xc] | var_ch_3 = r3;
0x000b8eea add r3, r5 | r3 += r5;
0x000b8eec vmov.f64 d8, d11 | __asm ("vmov.f64 d8, d11");
0x000b8ef0 mov r5, r0 | r5 = r0;
0x000b8ef2 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x000b8ef4 strd sb, r2, [sp, 0x40] | __asm ("strd sb, r2, [sp, 0x40]");
0x000b8ef8 strd sl, r1, [sp, 0x48] | __asm ("strd sl, r1, [sp, 0x48]");
0x000b8efc str r0, [sp, 0x18] | var_18h = r0;
| label_8:
0x000b8efe ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x000b8f00 mov lr, r8 | lr = r8;
0x000b8f02 ldr r3, [r3] | r3 = *(r3);
0x000b8f04 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000b8f08 add.w sb, r6, r3, lsl 4 | sb = r6 + (r3 << 4);
0x000b8f0c add.w sl, sb, 0x30 | sl = sb + 0x30;
| do {
0x000b8f10 ldr.w r0, [sb] | r0 = *(sb);
0x000b8f14 add.w sb, sb, 0x10 | sb += 0x10;
0x000b8f18 ldr r1, [sb, -0xc] | r1 = *((sb - 0xc));
0x000b8f1c mov ip, lr |
0x000b8f1e ldr r2, [sb, -0x8] | r2 = *((sb - 0x8));
0x000b8f22 ldr r3, [sb, -0x4] | r3 = *((sb - 0x4));
0x000b8f26 cmp sb, sl |
0x000b8f28 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000b8f2c mov lr, ip | lr = ip;
0x000b8f2e bne 0xb8f10 |
| } while (sb != sl);
0x000b8f30 mov lr, fp | lr = fp;
0x000b8f32 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x000b8f34 ldr r3, [r3] | r3 = *(r3);
0x000b8f36 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000b8f3a add.w sb, r6, r3, lsl 4 | sb = r6 + (r3 << 4);
0x000b8f3e add.w sl, sb, 0x30 | sl = sb + 0x30;
| do {
0x000b8f42 ldr.w r0, [sb] | r0 = *(sb);
0x000b8f46 add.w sb, sb, 0x10 | sb += 0x10;
0x000b8f4a ldr r1, [sb, -0xc] | r1 = *((sb - 0xc));
0x000b8f4e mov ip, lr |
0x000b8f50 ldr r2, [sb, -0x8] | r2 = *((sb - 0x8));
0x000b8f54 ldr r3, [sb, -0x4] | r3 = *((sb - 0x4));
0x000b8f58 cmp sb, sl |
0x000b8f5a stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000b8f5e mov lr, ip | lr = ip;
0x000b8f60 bne 0xb8f42 |
| } while (sb != sl);
0x000b8f62 cmp r7, 1 |
0x000b8f64 itt gt |
| if (r7 <= 1) {
0x000b8f66 ldrgt sb, [sp, 0xc] | sb = var_ch_3;
| }
| if (r7 > 1) {
0x000b8f6a mov.w sl, 1 | sl = 1;
| }
| if (r7 <= 1) {
0x000b8f6e ble 0xb8f92 | goto label_53;
| }
| do {
0x000b8f70 ldr r2, [sb, 4]! | r2 = *((sb += 4));
0x000b8f74 cmp sl, r5 |
0x000b8f76 ite lt |
| if (sl >= r5) {
0x000b8f78 movlt r1, r8 | r1 = r8;
| }
| if (sl < r5) {
0x000b8f7a movge r1, fp | r1 = fp;
| }
0x000b8f7c mov r0, r4 | r0 = r4;
0x000b8f7e add.w sl, sl, 1 | sl++;
0x000b8f82 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000b8f86 add.w r2, r6, r2, lsl 4 | r2 = r6 + (r2 << 4);
0x000b8f8a bl 0x297c0 | fcn_000297c0 (r0, r1, r2);
0x000b8f8e cmp r7, sl |
0x000b8f90 bne 0xb8f70 |
| } while (r7 != sl);
| label_53:
0x000b8f92 ldrb.w sb, [r4, 0x15] | sb = *((r4 + 0x15));
0x000b8f96 mov r2, r8 | r2 = r8;
0x000b8f98 ldrb.w sl, [r4, 0x16] | sl = *((r4 + 0x16));
0x000b8f9c vmov.f64 d15, 1.000000e+00 | __asm ("vmov.f64 d15, 1");
0x000b8fa0 mov r0, sb | r0 = sb;
0x000b8fa2 mov r1, sl | r1 = sl;
0x000b8fa4 bl 0x2999c | fcn_0002999c (r0, r1);
0x000b8fa8 vadd.f64 d8, d0, d8 | __asm ("vadd.f64 d8, d0, d8");
0x000b8fac mov r2, fp | r2 = fp;
0x000b8fae mov r0, sb | r0 = sb;
0x000b8fb0 bl 0x2999c | fcn_0002999c (r0, r1);
0x000b8fb4 vadd.f64 d8, d8, d0 | __asm ("vadd.f64 d8, d8, d0");
0x000b8fb8 cmp.w sb, 0 |
| if (sb == 0) {
0x000b8fbc beq.w 0xb910a | goto label_10;
| }
0x000b8fc0 mov ip, r4 |
0x000b8fc2 mov r1, r8 | r1 = r8;
0x000b8fc4 mov r2, fp | r2 = fp;
0x000b8fc6 mov.w lr, 0 | lr = 0;
0x000b8fca mov r4, sl | r4 = sl;
0x000b8fcc b 0xb9028 |
| while (r4 == 0) {
0x000b8fce vmov s15, r0 | __asm ("vmov s15, r0");
0x000b8fd2 vmov s14, r3 | __asm ("vmov s14, r3");
0x000b8fd6 vcmpe.f32 s15, s14 | __asm ("vcmpe.f32 s15, s14");
0x000b8fda vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb <= 0) {
0x000b8fde ble.w 0xb90fc | goto label_54;
| }
0x000b8fe2 vcvt.f64.f32 d7, s15 | __asm ("vcvt.f64.f32 d7, s15");
| label_7:
0x000b8fe6 vldr s12, [r1, 0xc] | __asm ("vldr s12, [r1, 0xc]");
0x000b8fea vldr s13, [r2, 0xc] | __asm ("vldr s13, [r2, 0xc]");
0x000b8fee vcvt.f64.f32 d16, s12 | __asm ("vcvt.f64.f32 d16, s12");
0x000b8ff2 vcvt.f64.f32 d18, s13 | __asm ("vcvt.f64.f32 d18, s13");
| label_4:
0x000b8ff6 vcmpe.f64 d18, d16 | __asm ("vcmpe.f64 d18, d16");
0x000b8ffa vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x000b8ffe it le |
| if (sb <= 0) {
0x000b9000 vmovle d16, d18 | __asm ("vmovle d16, d18");
| }
0x000b9004 vcmpe.f64 d16, d7 | __asm ("vcmpe.f64 d16, d7");
0x000b9008 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb < 0) {
0x000b900c bmi 0xb9102 | goto label_55;
| }
0x000b900e vsub.f64 d16, d16, d7 | __asm ("vsub.f64 d16, d16, d7");
0x000b9012 add.w lr, lr, 2 | lr += 2;
0x000b9016 cmp lr, sb |
0x000b9018 add.w r1, r1, 8 | r1 += 8;
0x000b901c add.w r2, r2, 8 | r2 += 8;
0x000b9020 vmul.f64 d15, d15, d16 | __asm ("vmul.f64 d15, d15, d16");
| if (lr >= sb) {
0x000b9024 bge.w 0xb933c | goto label_56;
| }
0x000b9028 ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x000b902a ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x000b902c cmp r4, 0 |
0x000b902e beq 0xb8fce |
| }
0x000b9030 cmp r0, r3 |
| if (r0 <= r3) {
0x000b9032 ble 0xb90f2 | goto label_57;
| }
0x000b9034 vmov s15, r0 | __asm ("vmov s15, r0");
0x000b9038 vcvt.f64.s32 d7, s15 | __asm ("vcvt.f64.s32 d7, s15");
| do {
0x000b903c vldr s13, [r1, 0xc] | __asm ("vldr s13, [r1, 0xc]");
0x000b9040 vcvt.f64.s32 d16, s13 | __asm ("vcvt.f64.s32 d16, s13");
0x000b9044 vldr s13, [r2, 0xc] | __asm ("vldr s13, [r2, 0xc]");
0x000b9048 vcvt.f64.s32 d18, s13 | __asm ("vcvt.f64.s32 d18, s13");
0x000b904c b 0xb8ff6 | goto label_4;
| label_35:
0x000b904e ldr r6, [sp, 0x28] | r6 = var_28h_2;
0x000b9050 mov r1, r5 | r1 = r5;
0x000b9052 mov r0, r4 | r0 = r4;
0x000b9054 mov r2, r6 | r2 = r6;
0x000b9056 bl 0x2afd0 | r0 = fcn_0002afd0 (r0, r1, r2);
0x000b905a mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x000b905c cbnz r0, 0xb90be |
0x000b905e ldr r1, [sp, 0x24] | r1 = var_24h;
0x000b9060 ldrd r2, r3, [r6] | __asm ("ldrd r2, r3, [r6]");
0x000b9064 ldrd r6, r7, [r5, 8] | __asm ("ldrd r6, r7, [r5, 8]");
0x000b9068 cmp r1, 0 |
| if (r1 != 0) {
0x000b906a bne.w 0xb9576 | goto label_58;
| }
0x000b906e movs r1, 1 | r1 = 1;
0x000b9070 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b9072 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b9076 mov r2, r6 | r2 = r6;
0x000b9078 mov r3, r7 | r3 = r7;
0x000b907a movs r1, 2 | r1 = 2;
0x000b907c ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b907e bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b9082 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b9084 bl 0x96a64 | fcn_00096a64 (r0);
0x000b9088 ldr.w r2, [pc, 0x620] |
0x000b908c ldr.w r3, [pc, 0x610] | r3 = *(0xb96a0);
0x000b9090 add r2, pc | r2 = 0x172740;
0x000b9092 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b9094 ldr r2, [r3] | r2 = imp.atan;
0x000b9096 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000b9098 eors r2, r3 | r2 ^= r3;
0x000b909a mov.w r3, 0 | r3 = 0;
0x000b909e it eq |
| if (r2 != r3) {
0x000b90a0 ldreq r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
| }
| if (r2 != r3) {
0x000b90a2 bne.w 0xb95aa | goto label_59;
| }
| label_24:
0x000b90a6 add sp, 0xc4 |
0x000b90a8 vpop {d8, d9, d10, d11, d12, d13, d14, d15} | __asm ("vpop {d8, d9, d10, d11, d12, d13, d14, d15}");
0x000b90ac pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000b90b0 b.w 0x79b80 | void (*0x79b80)() ();
| label_45:
0x000b90b4 movs r6, 0 | r6 = 0;
0x000b90b6 movs r7, 7 | r7 = 7;
| label_19:
0x000b90b8 mov r0, r6 | r0 = r6;
0x000b90ba bl 0x26dbc | fcn_00026dbc (r0);
| }
| label_13:
0x000b90be ldr.w r2, [pc, 0x5f0] |
0x000b90c2 ldr.w r3, [pc, 0x5dc] | r3 = *(0xb96a2);
0x000b90c6 add r2, pc | r2 = 0x17277c;
0x000b90c8 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b90ca ldr r2, [r3] | r2 = imp.atan;
0x000b90cc ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000b90ce eors r2, r3 | r2 ^= r3;
0x000b90d0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000b90d4 bne.w 0xb95aa | goto label_59;
| }
0x000b90d8 mov r0, r7 | r0 = r7;
0x000b90da add sp, 0xc4 |
0x000b90dc vpop {d8, d9, d10, d11, d12, d13, d14, d15} | __asm ("vpop {d8, d9, d10, d11, d12, d13, d14, d15}");
0x000b90e0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_37:
0x000b90e4 dmb ish | __asm ("dmb ish");
0x000b90e8 b 0xb8b82 | goto label_5;
| label_34:
0x000b90ea mov r0, r4 | r0 = r4;
0x000b90ec bl 0xb4180 | fcn_000b4180 (r0, r1);
0x000b90f0 b 0xb8b0c | goto label_6;
| label_57:
0x000b90f2 vmov s15, r3 | __asm ("vmov s15, r3");
0x000b90f6 vcvt.f64.s32 d7, s15 | __asm ("vcvt.f64.s32 d7, s15");
0x000b90fa b 0xb903c |
| } while (1);
| label_54:
0x000b90fc vcvt.f64.f32 d7, s14 | __asm ("vcvt.f64.f32 d7, s14");
0x000b9100 b 0xb8fe6 | goto label_7;
| label_55:
0x000b9102 mov sl, r4 | sl = r4;
0x000b9104 vmov.f64 d15, d11 | __asm ("vmov.f64 d15, d11");
0x000b9108 mov r4, ip | r4 = ip;
| label_10:
0x000b910a ldrb r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x000b910c mov r2, r8 | r2 = r8;
0x000b910e mov r1, sl | r1 = sl;
0x000b9110 str r0, [sp, 8] | var_8h_2 = r0;
0x000b9112 bl 0x299f0 | fcn_000299f0 (r0, r1);
0x000b9116 ldr r0, [sp, 8] | r0 = var_8h_2;
0x000b9118 mov r1, sl | r1 = sl;
0x000b911a mov r2, fp | r2 = fp;
0x000b911c vmov.f64 d14, d0 | __asm ("vmov.f64 d14, d0");
0x000b9120 bl 0x299f0 | fcn_000299f0 (r0, r1);
0x000b9124 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000b9126 vadd.f64 d16, d14, d0 | __asm ("vadd.f64 d16, d14, d0");
0x000b912a cmp r5, r3 |
| if (r5 != r3) {
0x000b912c beq 0xb914c |
0x000b912e vcmpe.f64 d9, d15 | __asm ("vcmpe.f64 d9, d15");
0x000b9132 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 > r3) {
0x000b9136 bgt 0xb914c | goto label_60;
| }
0x000b9138 vcmp.f64 d9, d15 | __asm ("vcmp.f64 d9, d15");
0x000b913c vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 != r3) {
0x000b9140 bne 0xb9156 | goto label_61;
| }
0x000b9142 vcmpe.f64 d16, d10 | __asm ("vcmpe.f64 d16, d10");
0x000b9146 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 >= r3) {
0x000b914a bpl 0xb9156 | goto label_61;
| }
| }
| label_60:
0x000b914c vmov.f64 d10, d16 | __asm ("vmov.f64 d10, d16");
0x000b9150 vmov.f64 d9, d15 | __asm ("vmov.f64 d9, d15");
0x000b9154 str r5, [sp, 0x20] | var_20h = r5;
| label_61:
0x000b9156 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b9158 adds r5, 1 | r5++;
0x000b915a cmp r5, r3 |
| if (r5 <= r3) {
0x000b915c ble.w 0xb8efe | goto label_8;
| }
0x000b9160 ldrd sb, r2, [sp, 0x40] | __asm ("ldrd sb, r2, [var_40h_2]");
0x000b9164 ldrd sl, r1, [sp, 0x48] | __asm ("ldrd sl, r1, [var_48h]");
0x000b9168 ldr r0, [sp, 0x18] | r0 = var_18h;
| label_20:
0x000b916a cmp.w sl, 0 |
| if (sl != 0) {
0x000b916e beq 0xb917a |
0x000b9170 vcmpe.f64 d8, d13 | __asm ("vcmpe.f64 d8, d13");
0x000b9174 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sl >= 0) {
0x000b9178 bpl 0xb9184 | goto label_62;
| }
| }
0x000b917a ldr r3, [sp, 0x20] | r3 = var_20h;
0x000b917c mov r1, sl | r1 = sl;
0x000b917e vmov.f64 d13, d8 | __asm ("vmov.f64 d13, d8");
0x000b9182 str r3, [sp, 0x30] | var_30h = r3;
| label_62:
0x000b9184 add.w sl, sl, 1 | sl++;
0x000b9188 cmp r2, sl |
| if (r2 != sl) {
0x000b918a bne.w 0xb8ecc | goto label_9;
| }
0x000b918e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b9190 ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x000b9192 add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
0x000b9196 str r3, [sp, 8] | var_8h_2 = r3;
0x000b9198 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000b919a lsls r2, r3, 2 | r2 = r3 << 2;
| label_25:
0x000b919c ldr r3, [sp, 8] | r3 = var_8h_2;
0x000b919e mov ip, r8 |
0x000b91a0 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch_3]");
0x000b91a4 mov sb, r2 | sb = r2;
0x000b91a6 ldr r3, [r3] | r3 = *(r3);
0x000b91a8 ldr r3, [r3] | r3 = *(r3);
0x000b91aa add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000b91ae add.w sl, r6, r3, lsl 4 | sl = r6 + (r3 << 4);
0x000b91b2 add.w lr, sl, 0x30 | lr = sl + 0x30;
| do {
0x000b91b6 ldr.w r0, [sl] | r0 = *(sl);
0x000b91ba add.w sl, sl, 0x10 | sl += 0x10;
0x000b91be ldr r1, [sl, -0xc] | r1 = *((sl - 0xc));
0x000b91c2 mov r7, ip | r7 = ip;
0x000b91c4 ldr r2, [sl, -0x8] | r2 = *((sl - 0x8));
0x000b91c8 ldr r3, [sl, -0x4] | r3 = *((sl - 0x4));
0x000b91cc cmp sl, lr |
0x000b91ce stm r7!, {r0, r1, r2, r3} | *(r7!) = r0;
| *((r7! + 4)) = r1;
| *((r7! + 8)) = r2;
| *((r7! + 12)) = r3;
0x000b91d0 mov ip, r7 |
0x000b91d2 bne 0xb91b6 |
| } while (sl != lr);
0x000b91d4 mov r2, sb | r2 = sb;
0x000b91d6 mov ip, fp |
0x000b91d8 ldrd r3, sb, [sp, 8] | __asm ("ldrd r3, sb, [var_8h_2]");
0x000b91dc ldr r3, [r3] | r3 = *(r3);
0x000b91de ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x000b91e0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000b91e4 add.w sl, r6, r3, lsl 4 | sl = r6 + (r3 << 4);
0x000b91e8 add.w lr, sl, 0x30 | lr = sl + 0x30;
| do {
0x000b91ec ldr.w r0, [sl] | r0 = *(sl);
0x000b91f0 add.w sl, sl, 0x10 | sl += 0x10;
0x000b91f4 ldr r1, [sl, -0xc] | r1 = *((sl - 0xc));
0x000b91f8 mov r7, ip | r7 = ip;
0x000b91fa ldr r2, [sl, -0x8] | r2 = *((sl - 0x8));
0x000b91fe ldr r3, [sl, -0x4] | r3 = *((sl - 0x4));
0x000b9202 cmp sl, lr |
0x000b9204 stm r7!, {r0, r1, r2, r3} | *(r7!) = r0;
| *((r7! + 4)) = r1;
| *((r7! + 8)) = r2;
| *((r7! + 12)) = r3;
0x000b9206 mov ip, r7 |
0x000b9208 bne 0xb91ec |
| } while (sl != lr);
0x000b920a movs r7, 0 | r7 = 0;
| do {
0x000b920c ldr r3, [sp, 0x30] | r3 = var_30h;
0x000b920e mov r0, r4 | r0 = r4;
0x000b9210 cmp r7, r3 |
0x000b9212 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000b9214 iteet ge |
| if (r7 < r3) {
0x000b9216 ldrge r1, [sp, 0x10] | r1 = var_10h_3;
| }
| if (r7 >= r3) {
0x000b9218 movlt r1, sb | r1 = sb;
| }
| if (r7 >= r3) {
0x000b921a movlt sl, r8 | sl = r8;
| }
| if (r7 < r3) {
0x000b921c movge sl, fp | sl = fp;
| }
0x000b921e ldr r3, [r3] | r3 = *(r3);
0x000b9220 ldr.w r2, [r3, r7, lsl 2] | offset_1 = r7 << 2;
| r2 = *((r3 + offset_1));
0x000b9224 adds r7, 1 | r7++;
0x000b9226 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000b922a add.w r2, r6, r2, lsl 4 | r2 = r6 + (r2 << 4);
0x000b922e str r2, [sp, 0xc] | var_ch_3 = r2;
0x000b9230 bl 0x29bcc | fcn_00029bcc (r0, r1, r2);
0x000b9234 ldr r2, [sp, 0xc] | r2 = var_ch_3;
0x000b9236 mov r1, sl | r1 = sl;
0x000b9238 mov r0, r4 | r0 = r4;
0x000b923a bl 0x297c0 | fcn_000297c0 (r0, r1, r2);
0x000b923e ldr r3, [sp, 0x34] | r3 = var_34h;
0x000b9240 cmp r7, r3 |
0x000b9242 bne 0xb920c |
| } while (r7 != r3);
0x000b9244 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000b9246 bl 0x26dbc | fcn_00026dbc (r0);
0x000b924a ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b924c mov r0, r4 | r0 = r4;
0x000b924e bl 0xb40b0 | r0 = fcn_000b40b0 (r0, r1);
0x000b9252 mov r7, r0 | r7 = r0;
0x000b9254 cmp r0, 0 |
| if (r0 != 0) {
0x000b9256 bne.w 0xb94ee | goto label_27;
| }
0x000b925a ldrd r0, r2, [sb, 8] | __asm ("ldrd r0, r2, [sb, 8]");
0x000b925e orrs.w r3, r0, r2 | r3 = r0 | r2;
| if (r3 == r0) {
0x000b9262 beq.w 0xb95dc | goto label_63;
| }
| label_28:
0x000b9266 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000b9268 ldr r7, [sp, 0x10] | r7 = var_10h_3;
0x000b926a ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x000b926c subs r3, 1 | r3--;
0x000b926e ldr.w sl, [sb] | sl = *(sb);
0x000b9272 vldr d16, [r7, 8] | __asm ("vldr d16, [r7, 8]");
0x000b9274 lsrs r2, r0, 0xc | r2 = r0 >> 0xc;
0x000b9276 orrs r3, r1 | r3 |= r1;
0x000b9278 strd r0, r2, [sp, 0x58] | __asm ("strd r0, r2, [sp, 0x58]");
0x000b927c vstr d16, [sp, 0x88] | __asm ("vstr d16, [sp, 0x88]");
| if (r3 == r1) {
0x000b9280 beq.w 0xb95c0 | goto label_64;
| }
0x000b9284 add r2, sp, 0x54 | r2 += var_54h;
0x000b9286 mov r1, sb | r1 = sb;
0x000b9288 mov r0, r4 | r0 = r4;
0x000b928a bl 0x2b594 | r0 = fcn_0002b594 (r0, r1, r2);
0x000b928e mov r7, r0 | r7 = r0;
0x000b9290 cmp r0, 0 |
| if (r0 != 0) {
0x000b9292 bne.w 0xb94ee | goto label_27;
| }
0x000b9296 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000b9298 mov r1, sl | r1 = sl;
0x000b929a mov r0, r4 | r0 = r4;
0x000b929c mov r2, r8 | r2 = r8;
0x000b929e bl 0x29b7c | fcn_00029b7c (r0, r1, r2);
0x000b92a2 mov r2, r8 | r2 = r8;
0x000b92a4 bl 0x2afd0 | r0 = fcn_0002afd0 (r0, r1, r2);
0x000b92a8 mov r7, r0 | r7 = r0;
0x000b92aa cmp r0, 0 |
| if (r0 != 0) {
0x000b92ac bne.w 0xb94ee | goto label_27;
| }
0x000b92b0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b92b2 add.w sl, r3, 1 | sl = r3 + 1;
| label_26:
0x000b92b6 ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b92b8 mov r3, sl | r3 = sl;
0x000b92ba mov r2, fp | r2 = fp;
0x000b92bc mov r0, r4 | r0 = r4;
0x000b92be ldr r1, [r1] | r1 = *(r1);
0x000b92c0 bl 0xb8a94 | r0 = fcn_000b8a94 (r0, r1, r2, r3);
0x000b92c4 mov r7, r0 | r7 = r0;
0x000b92c6 cmp r0, 0 |
| if (r0 != 0) {
0x000b92c8 bne.w 0xb94ee | goto label_27;
| }
0x000b92cc ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b92ce ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x000b92d0 ldrh r3, [r1, 2] | r3 = *((r1 + 2));
0x000b92d2 cmp r3, 0 |
| if (r3 == 0) {
0x000b92d4 beq.w 0xb9638 | goto label_65;
| }
0x000b92d8 mov sl, r0 | sl = r0;
0x000b92da mov fp, r0 |
0x000b92dc b 0xb92f2 |
| while (r0 == 0) {
0x000b92de ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b92e0 add.w fp, fp, 1 |
0x000b92e4 ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x000b92e6 ldrh r0, [r1, 2] | r0 = *((r1 + 2));
0x000b92e8 rev16 r0, r0 | __asm ("rev16 r0, r0");
0x000b92ea uxth r0, r0 | r0 = (int16_t) r0;
0x000b92ec cmp fp, r0 |
| if (fp >= r0) {
0x000b92ee bge.w 0xb95f0 | goto label_66;
| }
0x000b92f0 strh r7, [r7, 0xa] | *((r7 + 0xa)) = r7;
0x000b92f2 ldrb r3, [r4, 0x17] | r3 = *((r4 + 0x17));
0x000b92f4 mov r0, r4 | r0 = r4;
0x000b92f6 mla r3, fp, r3, r1 | __asm ("mla r3, fp, r3, r1");
0x000b92f8 asrs r3, r0, 0xc | r3 = r0 >> 0xc;
0x000b92fa ldr r7, [r3, 4] | r7 = *((r3 + 4));
0x000b92fc ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x000b92fe ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b9300 rev r7, r7 | r7 = SWAP32 (r7);
0x000b9302 rev.w r8, r1 | r1 = SWAP32 (r8);
0x000b9306 str r3, [sp, 4] | var_4h_2 = r3;
0x000b9308 mov r2, r8 | r2 = r8;
0x000b930a ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000b930c str r3, [sp] | *(sp) = r3;
0x000b930e mov r3, r7 | r3 = r7;
0x000b9310 bl 0xb4668 | fcn_000b4668 (r0, r1, r2, r3, r4);
0x000b9314 ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x000b9316 ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x000b931a cmp r7, r3 |
0x000b931c it eq |
| if (r7 == r3) {
0x000b931e cmpeq r8, r2 | __asm ("cmpeq r8, r2");
| }
0x000b9320 it eq |
| if (r7 != r3) {
0x000b9322 moveq sl, 1 | sl = 1;
| }
0x000b9326 cmp r0, 0 |
0x000b9328 beq 0xb92de |
| }
| label_31:
0x000b932a ldr r2, [sp, 0x10] | r2 = var_10h_3;
0x000b932c mov r7, r0 | r7 = r0;
0x000b932e ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000b9330 subs r3, 1 | r3--;
0x000b9332 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x000b9334 cmp r3, 0 |
| if (r3 != 0) {
0x000b9336 bne.w 0xb9500 | goto label_22;
| }
0x000b933a b 0xb9538 | goto label_67;
| label_56:
0x000b933c mov sl, r4 | sl = r4;
0x000b933e vadd.f64 d15, d15, d12 | __asm ("vadd.f64 d15, d15, d12");
0x000b9342 mov r4, ip | r4 = ip;
0x000b9344 b 0xb910a | goto label_10;
| label_43:
0x000b9346 vstr d18, [r7, -8] | __asm ("vstr d18, [r7, -8]");
| label_42:
0x000b934a cmp lr, r7 |
0x000b934c add.w r0, r0, 0x30 | r0 += 0x30;
0x000b934e movs r0, r6 | r0 = r6;
| if (r0 != r6) {
0x000b9350 bne.w 0xb8c7e | goto label_11;
| }
0x000b9354 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000b9356 mov r2, r8 | r2 = r8;
0x000b9358 ldrd r1, r0, [sp, 8] | __asm ("ldrd r1, r0, [var_8h_2]");
0x000b935c mov.w r8, 0 | r8 = 0;
0x000b9360 bl 0x259cc | fcn_000259cc (r0, r1, r2, r3);
0x000b9364 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000b9366 movs r1, 0 | r1 = 0;
0x000b9368 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x000b936a subs r2, 2 | r2 -= 2;
0x000b936c adds r0, 2 | r0 += 2;
0x000b936e blx 0x62ec | fcn_000062ec ();
0x000b9372 movw r1, 0x5556 |
0x000b9374 str r6, [r2, r5] | *((r2 + r5)) = r6;
0x000b9376 movs r3, 1 | r3 = 1;
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x000b9378 movt r1, 0x5555 | r1 = 0x55555556;
0x000b937c str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000b937e mov fp, r1 |
| do {
| label_12:
0x000b9380 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000b9382 ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x000b9384 subs r0, 4 | r0 -= 4;
0x000b9386 bl 0xc4780 | fcn_000c4780 (r0, r1);
0x000b938a smull r1, r3, fp, r0 | r1:r3 = fp * r0;
0x000b938e sub.w r3, r3, r0, asr 31 | r3 -= (r0 >> 31);
0x000b9392 sub.w r3, sl, r3 | r3 = sl - r3;
0x000b9396 cmp r3, r8 |
| if (r3 <= r8) {
0x000b9398 ble 0xb9462 | goto label_68;
| }
0x000b939a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000b939c mov r1, r5 | r1 = r5;
0x000b939e mov r0, r4 | r0 = r4;
0x000b93a0 ldr r6, [r3, 4]! | r6 = *((r3 += 4));
0x000b93a4 str r3, [sp, 0x14] | var_14h = r3;
0x000b93a6 add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x000b93aa lsls r6, r6, 4 | r6 <<= 4;
0x000b93ac add.w r7, sb, r6 | r7 = sb + r6;
0x000b93b0 mov r2, r7 | r2 = r7;
0x000b93b2 bl 0x29bcc | fcn_00029bcc (r0, r1, r2);
0x000b93b6 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x000b93b8 ldr.w r2, [sb, r6] | r2 = *((sb + r6));
0x000b93bc ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000b93be ldrd r0, r1, [r1] | __asm ("ldrd r0, r1, [r1]");
0x000b93c2 cmp r3, r1 |
0x000b93c4 it eq |
| if (r3 == r1) {
0x000b93c6 cmpeq r2, r0 | __asm ("cmpeq r2, r0");
| }
0x000b93c8 it ne |
| if (r3 == r1) {
0x000b93ca addne r8, r8, 1 | r8++;
| }
0x000b93ce bne 0xb9380 |
| } while (r3 != r1);
0x000b93d0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000b93d2 ldrd r6, r7, [r5, 8] | __asm ("ldrd r6, r7, [r5, 8]");
| if (r1 != 0) {
0x000b93d6 cbnz r1, 0xb943a | goto label_69;
| }
0x000b93d8 movs r1, 1 | r1 = 1;
0x000b93da ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b93dc bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b93e0 mov r2, r6 | r2 = r6;
0x000b93e2 mov r3, r7 | r3 = r7;
0x000b93e4 movs r1, 2 | r1 = 2;
0x000b93e6 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b93e8 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b93ec ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b93ee bl 0x96a64 | fcn_00096a64 (r0);
0x000b93f2 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000b93f4 bl 0x79b80 | fcn_00079b80 (r0);
| label_15:
0x000b93f8 add.w r8, r8, 1 | r8++;
0x000b93fc cmp r0, 0 |
| if (r0 == 0) {
0x000b93fe beq 0xb9380 | goto label_12;
| }
0x000b9400 mov r7, r0 | r7 = r0;
| label_17:
0x000b9402 mov r0, sb | r0 = sb;
0x000b9404 bl 0x26dbc | fcn_00026dbc (r0);
0x000b9408 b 0xb90be | goto label_13;
| label_39:
0x000b940a ldr r2, [sp, 0x28] | r2 = var_28h_2;
0x000b940c mov r3, r6 | r3 = r6;
| do {
0x000b940e ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x000b9410 adds r2, 0x10 | r2 += 0x10;
0x000b9412 ldr lr, [r2, -0x10] |
0x000b9416 adds r3, 0x10 | r3 += 0x10;
0x000b9418 ldr ip, [r2, -0xc] | ip = *((r2 - 0xc));
0x000b941c ldr r0, [r2, -0x8] | r0 = *((r2 - 0x8));
0x000b9420 str lr, [r3, -0x10] |
0x000b9424 str ip, [r3, -0xc] | *((r3 - 0xc)) = ip;
0x000b9428 str r0, [r3, -0x8] | *((r3 - 0x8)) = r0;
0x000b942c str r1, [r3, -0x4] | *((r3 - 0x4)) = r1;
0x000b9430 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x000b9432 cmp r2, r1 |
0x000b9434 bne 0xb940e |
| } while (r2 != r1);
0x000b9436 b.w 0xb8bd2 | goto label_14;
| label_69:
0x000b943a ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b943c movs r1, 1 | r1 = 1;
0x000b943e bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b9442 mov r2, r6 | r2 = r6;
0x000b9444 mov r3, r7 | r3 = r7;
0x000b9446 movs r1, 2 | r1 = 2;
0x000b9448 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b944a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b944e ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b9450 bl 0x96a64 | fcn_00096a64 (r0);
0x000b9454 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b9456 bl 0x79b80 | fcn_00079b80 (r0);
0x000b945a b 0xb93f8 | goto label_15;
| label_44:
0x000b945c dmb ish | __asm ("dmb ish");
0x000b9460 b 0xb8cea | goto label_16;
| label_68:
0x000b9462 mov r1, r5 | r1 = r5;
0x000b9464 mov r0, r4 | r0 = r4;
0x000b9466 bl 0x2b0f4 | void (*0x2b0f4)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5);
0x000b946a ldr r2, [sp, 8] | r2 = var_8h_2;
0x000b946c clz r3, r0 | r3 &= r0;
0x000b9470 lsrs r3, r3, 5 | r3 >>= 5;
0x000b9472 mov r7, r0 | r7 = r0;
0x000b9474 cmp r2, r8 |
0x000b9476 it le |
| if (r2 > r8) {
0x000b9478 movle r3, 0 | r3 = 0;
| }
0x000b947a cmp r3, 0 |
| if (r3 == 0) {
0x000b947c beq 0xb9402 | goto label_17;
| }
0x000b947e ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x000b9480 add.w fp, sp, 0x54 |
0x000b9484 add.w r6, r3, r8, lsl 2 | r6 = r3 + (r8 << 2);
| label_18:
0x000b9488 ldr r5, [r6], 4 | r5 = *(r6);
| r6 += 4;
0x000b948c mov r3, fp | r3 = fp;
0x000b948e ldr r2, [sp, 0x24] | r2 = var_24h;
0x000b9490 mov r0, r4 | r0 = r4;
0x000b9492 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000b9496 add.w r5, sb, r5, lsl 4 | r5 = sb + (r5 << 4);
0x000b949a mov r1, r5 | r1 = r5;
0x000b949c bl 0xb88ec | r0 = fcn_000b88ec (r0, r1, r2, r3);
0x000b94a0 mov r7, r0 | r7 = r0;
0x000b94a2 cmp r0, 0 |
| if (r0 != 0) {
0x000b94a4 bne 0xb9402 | goto label_17;
| }
0x000b94a6 mov r2, r5 | r2 = r5;
0x000b94a8 ldr r5, [sp, 0x54] | r5 = var_54h;
0x000b94aa ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b94ac mov r0, r4 | r0 = r4;
0x000b94ae mov r1, r5 | r1 = r5;
0x000b94b0 bl 0xb8a94 | r0 = fcn_000b8a94 (r0, r1, r2, r3);
0x000b94b4 mov r2, r0 | r2 = r0;
| if (r5 != 0) {
0x000b94b6 cbz r5, 0xb94ce |
0x000b94b8 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b94ba subs r3, 1 | r3--;
0x000b94bc str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| if (r3 != 0) {
0x000b94be cbnz r3, 0xb94ce | goto label_70;
| }
0x000b94c0 str r0, [sp, 8] | var_8h_2 = r0;
0x000b94c2 mov r1, r5 | r1 = r5;
0x000b94c4 mov r0, r4 | r0 = r4;
0x000b94c6 bl 0xb4180 | fcn_000b4180 (r0, r1);
0x000b94ca ldr r2, [sp, 8] | r2 = var_8h_2;
0x000b94cc mov r7, r0 | r7 = r0;
| }
| if (r2 != 0) {
| label_70:
0x000b94ce cbz r2, 0xb94d4 |
0x000b94d0 mov r7, r2 | r7 = r2;
0x000b94d2 b 0xb9402 | goto label_17;
| }
0x000b94d4 clz r3, r7 | r3 &= r7;
0x000b94d8 cmp sl, r8 |
0x000b94da lsr.w r3, r3, 5 | r3 >>= 5;
0x000b94de it le |
| if (sl > r8) {
0x000b94e0 movle r3, 0 | r3 = 0;
| }
0x000b94e2 add.w r8, r8, 1 | r8++;
0x000b94e6 cmp r3, 0 |
| if (r3 != 0) {
0x000b94e8 bne 0xb9488 | goto label_18;
| }
0x000b94ea b 0xb9402 | goto label_17;
| label_50:
0x000b94ec movs r7, 7 | r7 = 7;
| label_27:
0x000b94ee ldr r2, [sp, 0x10] | r2 = var_10h_3;
0x000b94f0 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000b94f2 subs r3, 1 | r3--;
0x000b94f4 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 == 0) {
0x000b94f6 cbnz r3, 0xb9500 |
0x000b94f8 ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b94fa mov r0, r4 | r0 = r4;
0x000b94fc bl 0xb4180 | fcn_000b4180 (r0, r1);
| }
| label_22:
0x000b9500 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000b9504 subs r3, 1 | r3--;
0x000b9506 str.w r3, [sb, 0x10] | __asm ("str.w r3, [sb, 0x10]");
0x000b950a cmp r3, 0 |
| if (r3 != 0) {
0x000b950c bne.w 0xb90b8 | goto label_19;
| }
0x000b9510 mov r1, sb | r1 = sb;
0x000b9512 mov r0, r4 | r0 = r4;
0x000b9514 bl 0xb4180 | fcn_000b4180 (r0, r1);
0x000b9518 b 0xb90b8 | goto label_19;
| label_52:
0x000b951a movs r3, 0 | r3 = 0;
0x000b951c vmov.f64 d8, d12 | __asm ("vmov.f64 d8, d12");
0x000b9520 str r3, [sp, 0x20] | var_20h = r3;
0x000b9522 b 0xb916a | goto label_20;
| label_49:
0x000b9524 dmb ish | __asm ("dmb ish");
0x000b9528 b 0xb8e00 | goto label_21;
| label_48:
0x000b952a ldr r2, [sp, 0x10] | r2 = var_10h_3;
0x000b952c movs r7, 7 | r7 = 7;
| if (r2 != 0) {
0x000b952e cbz r2, 0xb9540 |
0x000b9530 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000b9532 subs r3, 1 | r3--;
0x000b9534 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 != 0) {
0x000b9536 cbnz r3, 0xb9540 | goto label_71;
| }
| label_67:
0x000b9538 ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b953a mov r0, r4 | r0 = r4;
0x000b953c bl 0xb4180 | fcn_000b4180 (r0, r1);
| }
| label_71:
0x000b9540 cmp.w sb, 0 |
| if (sb == 0) {
0x000b9544 beq.w 0xb90b8 | goto label_19;
| }
0x000b9548 b 0xb9500 | goto label_22;
| label_38:
0x000b954a movs r7, 7 | r7 = 7;
0x000b954c b 0xb90be | goto label_13;
| label_47:
0x000b954e mov r1, r5 | r1 = r5;
0x000b9550 mov r0, r4 | r0 = r4;
0x000b9552 bl 0x5c990 | fcn_0005c990 (r0, r1);
0x000b9556 mov r1, r5 | r1 = r5;
0x000b9558 str r0, [sp, 0x10] | var_10h_3 = r0;
0x000b955a mov r0, r4 | r0 = r4;
0x000b955c bl 0x5c990 | fcn_0005c990 (r0, r1);
0x000b9560 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000b9562 mov sb, r0 | sb = r0;
0x000b9564 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x000b9566 movs r0, 1 | r0 = 1;
0x000b9568 adds r3, 1 | r3++;
0x000b956a asrs r1, r3, 8 | r1 = r3 >> 8;
0x000b956c str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x000b956e str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x000b9570 strb r1, [r2] | *(r2) = r1;
0x000b9572 strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x000b9574 b 0xb8da8 | goto label_23;
| label_58:
0x000b9576 movs r1, 1 | r1 = 1;
0x000b9578 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b957a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b957e mov r2, r6 | r2 = r6;
0x000b9580 mov r3, r7 | r3 = r7;
0x000b9582 movs r1, 2 | r1 = 2;
0x000b9584 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b9586 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000b958a ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000b958c bl 0x96a64 | fcn_00096a64 (r0);
0x000b9590 ldr r2, [pc, 0x120] |
0x000b9592 ldr r3, [pc, 0x10c] | r3 = *(0xb96a2);
0x000b9594 add r2, pc | r2 = 0x172c4c;
0x000b9596 ldr r3, [r2, r3] | r3 = imp.atan;
0x000b9598 ldr r2, [r3] | r2 = imp.atan;
0x000b959a ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000b959c eors r2, r3 | r2 ^= r3;
0x000b959e mov.w r3, 0 | r3 = 0;
0x000b95a2 it eq |
| if (r2 == r3) {
0x000b95a4 ldreq r0, [r4, 0x68] | r0 = *((r4 + 0x68));
| goto label_72;
| }
| if (r2 == r3) {
| label_72:
0x000b95a6 beq.w 0xb90a6 | goto label_24;
| }
| label_59:
0x000b95aa blx 0x6430 | fcn_00006430 ();
| label_51:
0x000b95ae ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000b95b0 movs r2, 0 | r2 = 0;
0x000b95b2 add.w r8, sp, 0x58 | r8 += var_58h;
0x000b95b6 add.w fp, sp, 0x88 |
0x000b95ba str r2, [sp, 0x30] | var_30h = r2;
0x000b95bc str r3, [sp, 8] | var_8h_2 = r3;
0x000b95be b 0xb919c | goto label_25;
| label_64:
0x000b95c0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000b95c2 mov r1, sl | r1 = sl;
0x000b95c4 mov r2, r8 | r2 = r8;
0x000b95c6 mov r0, r4 | r0 = r4;
0x000b95c8 add.w sl, r3, 1 | sl = r3 + 1;
0x000b95cc mov r3, sl | r3 = sl;
0x000b95ce bl 0xb8a94 | r0 = fcn_000b8a94 (r0, r1, r2, r3);
0x000b95d2 mov r7, r0 | r7 = r0;
0x000b95d4 cmp r0, 0 |
| if (r0 == 0) {
0x000b95d6 beq.w 0xb92b6 | goto label_26;
| }
0x000b95da b 0xb94ee | goto label_27;
| label_63:
0x000b95dc mov r1, sb | r1 = sb;
0x000b95de mov r0, r4 | r0 = r4;
0x000b95e0 bl 0xb40b0 | r0 = fcn_000b40b0 (r0, r1);
0x000b95e4 mov r7, r0 | r7 = r0;
0x000b95e6 cmp r0, 0 |
| if (r0 != 0) {
0x000b95e8 bne 0xb94ee | goto label_27;
| }
0x000b95ea ldrd r0, r2, [sb, 8] | __asm ("ldrd r0, r2, [sb, 8]");
0x000b95ee b 0xb9266 | goto label_28;
| label_66:
0x000b95f0 ldrd r1, r0, [r5, 8] | __asm ("ldrd r1, r0, [r5, 8]");
0x000b95f4 subs r1, 1 | r1--;
0x000b95f6 orrs r1, r0 | r1 |= r0;
| if (r1 == r0) {
0x000b95f8 beq 0xb9660 | goto label_73;
| }
0x000b95fa cmp.w sl, 0 |
| if (sl == 0) {
0x000b95fe beq 0xb964a | goto label_74;
| }
| label_29:
0x000b9600 ldr r2, [sp, 0x10] | r2 = var_10h_3;
0x000b9602 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000b9604 subs r3, 1 | r3--;
0x000b9606 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 != 0) {
0x000b9608 cbnz r3, 0xb961a | goto label_75;
| }
0x000b960a ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x000b960c mov r0, r4 | r0 = r4;
0x000b960e bl 0xb4180 | r0 = fcn_000b4180 (r0, r1);
0x000b9612 mov r7, r0 | r7 = r0;
0x000b9614 cmp r0, 0 |
| if (r0 != 0) {
0x000b9616 bne.w 0xb9500 | goto label_22;
| }
| label_75:
0x000b961a ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000b961e movs r7, 0 | r7 = 0;
0x000b9620 subs r3, 1 | r3--;
0x000b9622 str.w r3, [sb, 0x10] | __asm ("str.w r3, [sb, 0x10]");
0x000b9626 cmp r3, 0 |
| if (r3 != 0) {
0x000b9628 bne.w 0xb90b8 | goto label_19;
| }
0x000b962c mov r1, sb | r1 = sb;
0x000b962e mov r0, r4 | r0 = r4;
0x000b9630 bl 0xb4180 | r0 = fcn_000b4180 (r0, r1);
0x000b9634 mov r7, r0 | r7 = r0;
0x000b9636 b 0xb90b8 | goto label_19;
| label_65:
0x000b9638 ldrd r3, r2, [r5, 8] | __asm ("ldrd r3, r2, [r5, 8]");
0x000b963c subs r3, 1 | r3--;
0x000b963e orrs r3, r2 | r3 |= r2;
0x000b9640 itt ne |
| if (r3 == r2) {
0x000b9642 ldrne r3, [sp, 0x28] | r3 = var_28h_2;
| }
| if (r3 != r2) {
0x000b9644 ldrdne r2, r3, [r3] | __asm ("ldrdne r2, r3, [r3]");
| }
| if (r3 == r2) {
0x000b9648 beq 0xb9660 | goto label_73;
| }
| label_74:
0x000b964a ldr r1, [sp, 0x24] | r1 = var_24h;
0x000b964c mov r0, r4 | r0 = r4;
0x000b964e strd sb, r1, [sp] | __asm ("strd sb, r1, [sp]");
0x000b9652 bl 0xb4668 | r0 = fcn_000b4668 (r0, r1, r2, r3, r4);
0x000b9656 mov r7, r0 | r7 = r0;
0x000b9658 cmp r0, 0 |
| if (r0 != 0) {
0x000b965a bne.w 0xb94ee | goto label_27;
| }
0x000b965e b 0xb9600 | goto label_29;
| label_73:
0x000b9660 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000b9664 movs r5, 0 | r5 = 0;
0x000b9666 ldrh r2, [r3, 2] | r2 = *((r3 + 2));
| if (r2 != 0) {
0x000b9668 cbnz r2, 0xb967c | goto label_76;
| }
0x000b966a b 0xb9600 | goto label_29;
| label_30:
0x000b966c ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000b9670 adds r5, 1 | r5++;
0x000b9672 ldrh r2, [r3, 2] | r2 = *((r3 + 2));
0x000b9674 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x000b9676 uxth r2, r2 | r2 = (int16_t) r2;
0x000b9678 cmp r5, r2 |
| if (r5 >= r2) {
0x000b967a bge 0xb9600 | goto label_29;
| }
| label_76:
0x000b967c ldrb r2, [r4, 0x17] | r2 = *((r4 + 0x17));
0x000b967e mov r0, r4 | r0 = r4;
0x000b9680 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000b9682 mla r2, r5, r2, r3 | __asm ("mla r2, r5, r2, r3");
0x000b9686 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000b9688 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000b968a strd sb, r1, [sp] | __asm ("strd sb, r1, [sp]");
0x000b968e rev r3, r3 | r3 = SWAP32 (r3);
0x000b9690 rev r2, r2 | r2 = SWAP32 (r2);
0x000b9692 bl 0xb4668 | r0 = fcn_000b4668 (r0, r1, r2, r3, r4);
0x000b9696 cmp r0, 0 |
| if (r0 == 0) {
0x000b9698 beq 0xb966c | goto label_30;
| }
0x000b969a b 0xb932a | goto label_31;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb9dfc */
| #include <stdint.h>
|
; (fcn) fcn.000b9dfc () | void fcn_000b9dfc (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000b9dfc push {r4, r5, r6, r7, lr} |
0x000b9dfe mov ip, r0 |
0x000b9e00 ldrb r3, [r0, 5] | r3 = *((r0 + 5));
0x000b9e02 sub sp, 0xc |
0x000b9e04 rsb.w r2, r3, 1 | r2 = 1 - r3;
0x000b9e08 add.w r4, r0, r2, lsl 2 | r4 = r0 + (r2 << 2);
0x000b9e0c ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
| if (r0 != 0) {
0x000b9e0e cbz r0, 0xb9e14 |
0x000b9e10 add sp, 0xc |
0x000b9e12 pop {r4, r5, r6, r7, pc} |
| }
0x000b9e14 mov r5, r1 | r5 = r1;
| if (r2 != 0) {
0x000b9e16 cbnz r2, 0xb9e3e | goto label_0;
| }
0x000b9e18 ldrd r6, r7, [ip, 0x30] | __asm ("ldrd r6, r7, [ip, 0x30]");
| do {
0x000b9e1c rsb.w r0, r3, 0x11 | r0 = 0x11 - r3;
0x000b9e20 movs r1, 0 | r1 = 0;
0x000b9e22 add.w r0, ip, r0, lsl 2 | r0 = ip + (r0 << 2);
0x000b9e26 mov r2, r6 | r2 = r6;
0x000b9e28 mov r3, r7 | r3 = r7;
0x000b9e2a str r0, [sp, 4] | var_4h = r0;
0x000b9e2c ldr.w r0, [ip] | r0 = *(ip);
0x000b9e30 str r1, [sp] | *(sp) = r1;
0x000b9e32 bl 0xb8334 | fcn_000b8334 (r0, r1, r2);
0x000b9e36 str r0, [r5] | *(r5) = r0;
0x000b9e38 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000b9e3a add sp, 0xc |
0x000b9e3c pop {r4, r5, r6, r7, pc} |
| label_0:
0x000b9e3e ldr.w r2, [ip, 0x20] | r2 = *((ip + 0x20));
0x000b9e42 ldrd r6, r7, [r2, 8] | __asm ("ldrd r6, r7, [r2, 8]");
0x000b9e46 b 0xb9e1c |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbabb0 */
| #include <stdint.h>
|
; (fcn) fcn.000babb0 () | void fcn_000babb0 (int16_t arg_28h, int16_t arg_2ch, int16_t arg_30h, int16_t arg2, int16_t arg3, int16_t arg4, arithmetic x) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| r0 = x;
0x000babb0 push {r4, r5, r6, r7, lr} |
0x000babb2 mov r5, r0 | r5 = r0;
0x000babb4 ldr.w r0, [r0, 0xfc] | r0 = *(arg_28hxfc);
0x000babb8 sub sp, 0x14 |
0x000babba cmp r0, 0 |
| if (arg_28h == ) {
0x000babbc beq 0xbac6a | goto label_6;
| }
0x000babbe bl 0xb8234 | r0 = fcn_000b8234 (r0, r1, r2);
0x000babc2 mov r4, r0 | r4 = r0;
0x000babc4 cmp r4, 0 |
| if (r4 != 0) {
0x000babc6 bne 0xbac5a | goto label_7;
| }
| label_0:
0x000babc8 ldr.w r3, [r5, 0xfc] | r3 = *((r5 + 0xfc));
0x000babcc cmp r3, 0 |
| if (r3 == 0) {
0x000babce beq 0xbac96 | goto label_8;
| }
0x000babd0 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000babd2 cmp r2, 0 |
| if (r2 == 0) {
0x000babd4 beq 0xbac96 | goto label_8;
| }
0x000babd6 ldr r6, [r3] | r6 = *(r3);
| label_1:
0x000babd8 ldr r3, [sp, 0x2c] | r3 = *(arg_2ch);
0x000babda str r6, [r3] | *(r3) = r6;
0x000babdc ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x000babde cmp r3, 0 |
| if (r3 == 0) {
0x000babe0 beq 0xbac64 | goto label_4;
| }
0x000babe2 ldr r3, [pc, 0xe4] |
0x000babe4 add r3, pc |
0x000babe6 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000babea cmp r3, 0 |
| if (r3 != 0) {
0x000babec bne 0xbac9a | goto label_9;
| }
0x000babee bl 0x25da0 | r0 = fcn_00025da0 ();
0x000babf2 cmp r0, 0 |
| if (r0 != 0) {
0x000babf4 bne 0xbacb8 | goto label_10;
| }
0x000babf6 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000babfa cmp r0, 0 |
| if (r0 != 0) {
0x000babfc bne 0xbacb8 | goto label_10;
| }
| label_2:
0x000babfe asrs r1, r6, 0x1f | r1 = r6 >> 0x1f;
0x000bac00 adds.w r0, r6, 0x14 | r0 = r6 + 0x14;
0x000bac04 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000bac08 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000bac0c mov r7, r0 | r7 = r0;
0x000bac0e cmp r0, 0 |
| if (r0 == 0) {
0x000bac10 beq 0xbacb8 | goto label_10;
| }
0x000bac12 ldr r3, [sp, 0x30] | r3 = *(arg_30h);
0x000bac14 mov r1, r7 | r1 = r7;
0x000bac16 ldr.w r0, [r5, 0xfc] | r0 = *((r5 + 0xfc));
0x000bac1a cmp r3, 0 |
0x000bac1c it ne |
| if (r3 != 0) {
0x000bac1e cmpne r6, 0x4000 | __asm ("cmpne r6, 0x4000");
| }
0x000bac22 itttt gt |
| if (r3 <= 0) {
0x000bac24 ldrgt r2, [sp, 0x30] | r2 = *(arg_30h);
| }
| if (r3 <= 0) {
0x000bac26 movgt r3, 0x1000 | r3 = 0x1000;
| }
| if (r3 <= 0) {
0x000bac2a movgt r6, r3 | r6 = r3;
| }
| if (r3 > 0) {
0x000bac2c str r3, [r2] | *(r2) = r3;
| }
0x000bac2e mov r2, r6 | r2 = r6;
0x000bac30 ldr r3, [pc, 0x98] |
0x000bac32 add r3, pc | r3 = 0x175902;
0x000bac34 str r3, [sp] | *(sp) = r3;
0x000bac36 movs r3, 0 | r3 = 0;
0x000bac38 bl 0x79a00 | fcn_00079a00 (r0, r1, r2, r3, r4);
0x000bac3c movs r3, 0 | r3 = 0;
0x000bac3e adds r2, r7, r6 | r2 = r7 + r6;
0x000bac40 str r3, [r7, r6] | *((r7 + r6)) = r3;
0x000bac42 mov r4, r0 | r4 = r0;
0x000bac44 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x000bac46 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x000bac48 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x000bac4a str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x000bac4c cmp r0, 0 |
| if (r0 != 0) {
0x000bac4e bne 0xbacbe | goto label_11;
| }
| label_5:
0x000bac50 ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x000bac52 mov r0, r4 | r0 = r4;
0x000bac54 str r7, [r3] | *(r3) = r7;
0x000bac56 add sp, 0x14 |
0x000bac58 pop {r4, r5, r6, r7, pc} |
| do {
| label_7:
0x000bac5a movw r3, 0x10b | r3 = 0x10b;
0x000bac5e cmp r4, 1 |
0x000bac60 it eq |
| if (r4 != 1) {
0x000bac62 moveq r4, r3 | r4 = r3;
| }
| label_4:
0x000bac64 mov r0, r4 | r0 = r4;
0x000bac66 add sp, 0x14 |
0x000bac68 pop {r4, r5, r6, r7, pc} |
| label_6:
0x000bac6a mov r6, r2 | r6 = r2;
0x000bac6c ldr.w r2, [r5, 0xf8] | r2 = *((r5 + 0xf8));
0x000bac6e movs r0, 0xf8 | r0 = 0xf8;
0x000bac70 mov r4, r3 | r4 = r3;
| if (r2 == 0) {
0x000bac72 cbz r2, 0xbaca0 | goto label_12;
| }
| label_3:
0x000bac74 add.w r3, r5, 0xfc | r3 = r5 + 0xfc;
0x000bac78 strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x000bac7c str r3, [sp, 0xc] | var_ch = r3;
0x000bac7e movs r3, 0 | r3 = 0;
0x000bac80 str r3, [sp, 8] | var_8h = r3;
0x000bac82 ldr r3, [pc, 0x4c] |
0x000bac84 ldrd r0, r1, [r5, 0xc] | __asm ("ldrd r0, r1, [r5, 0xc]");
0x000bac86 lsls r3, r0, 4 | r3 = r0 << 4;
0x000bac88 add r3, pc | r3 = 0x17595e;
0x000bac8a bl 0xb7cc8 | r0 = fcn_000b7cc8 (r0, r1, r2, r3, r4, r5, r6);
0x000bac8e mov r4, r0 | r4 = r0;
0x000bac90 cmp r4, 0 |
0x000bac92 bne 0xbac5a |
| } while (r4 != 0);
0x000bac94 b 0xbabc8 | goto label_0;
| label_8:
0x000bac96 mov r6, r4 | r6 = r4;
0x000bac98 b 0xbabd8 | goto label_1;
| label_9:
0x000bac9a dmb ish | __asm ("dmb ish");
0x000bac9e b 0xbabfe | goto label_2;
| label_12:
0x000baca0 ldr r0, [pc, 0x30] |
0x000baca2 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x000baca4 add r0, pc | r0 = 0x17597c;
0x000baca6 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000bacaa mov r2, r0 | r2 = r0;
0x000bacac str.w r0, [r5, 0xf8] | __asm ("str.w r0, [r5, 0xf8]");
0x000bacb0 cmp r0, 0 |
| if (r0 != 0) {
0x000bacb2 bne 0xbac74 | goto label_3;
| }
0x000bacb4 movs r4, 7 | r4 = 7;
0x000bacb6 b 0xbac64 | goto label_4;
| label_10:
0x000bacb8 movs r7, 0 | r7 = 0;
0x000bacba movs r4, 7 | r4 = 7;
0x000bacbc b 0xbac50 | goto label_5;
| label_11:
0x000bacbe mov r0, r7 | r0 = r7;
0x000bacc0 mov r7, r3 | r7 = r3;
0x000bacc2 bl 0x26dbc | fcn_00026dbc (r0);
0x000bacc6 b 0xbac50 | goto label_5;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbacd8 */
| #include <stdint.h>
|
; (fcn) fcn.000bacd8 () | void fcn_000bacd8 (int16_t arg_88h, int16_t arg_8ch, int16_t arg1, arithmetic arg2, arithmetic arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| arithmetic var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000bacd8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000bacdc sub sp, 0x64 |
0x000bacde ldr r4, [pc, 0x35c] |
0x000bace0 mov r5, r3 | r5 = r3;
0x000bace2 str r3, [sp, 0x20] | var_20h = r3;
0x000bace4 ldr r3, [pc, 0x358] | r3 = *(0xbb040);
0x000bace6 add r4, pc | r4 = 0x175d28;
0x000bace8 ldr r3, [r4, r3] |
0x000bacea ldr r4, [sp, 0x88] | r4 = *(arg_88h);
0x000bacec ldr r3, [r3] | r3 = imp.atan;
0x000bacee str r3, [sp, 0x5c] | var_5ch = r3;
0x000bacf0 mov.w r3, 0 | r3 = 0;
0x000bacf4 ldrb r3, [r5] | r3 = *(r5);
0x000bacf6 str r0, [sp, 0x30] | var_30h = r0;
0x000bacf8 ldrd r5, fp, [sp, 0x8c] | __asm ("ldrd r5, fp, [arg_8ch]");
0x000bacfc lsls r6, r3, 0x18 | r6 = r3 << 0x18;
0x000bacfe strd r1, r2, [sp, 0x24] | __asm ("strd r1, r2, [var_24h]");
0x000bad02 it pl |
| if (r6 < r3) {
0x000bad04 strpl r3, [sp, 0x44] | var_44h = r3;
| }
| if (r6 < r3) {
0x000bad06 bmi.w 0xbaf00 | goto label_15;
| }
| label_6:
0x000bad0a ldr r6, [sp, 0x20] | r6 = var_20h;
0x000bad0c add r2, sp, 0x50 | r2 += var_50h;
0x000bad0e mov r1, r2 | r1 = r2;
0x000bad10 str r2, [sp, 0x34] | var_34h = r2;
0x000bad12 mov r0, r6 | r0 = r6;
0x000bad14 adds r4, r6, r4 | r4 = r6 + r4;
0x000bad16 bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x000bad1a add r6, r0 | r6 += r0;
0x000bad1c mov r0, r6 | r0 = r6;
0x000bad1e bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x000bad22 add r6, r0 | r6 += r0;
0x000bad24 cmp r4, r6 |
0x000bad26 it lo |
| if (r4 < r6) {
0x000bad28 movwlo sb, 0x10b | __asm ("movwlo sb, 0x10b");
| }
| if (r4 <= r6) {
0x000bad2c blo.w 0xbaea8 | goto label_7;
| }
0x000bad2e strh r4, [r7, 4] | *((r7 + 4)) = r4;
| if (r4 < r6) {
0x000bad30 bls.w 0xbb02c | goto label_16;
| }
0x000bad34 subs.w r2, fp, 0 | r2 -= arg_88h;
0x000bad38 it ne |
| if (r2 == arg_88h) {
0x000bad3a movne r2, 1 | r2 = 1;
| }
0x000bad3c orrs.w r8, r5, fp | r8 = r5 | fp;
| if (r8 == r5) {
0x000bad40 beq.w 0xbaf0e | goto label_8;
| }
0x000bad44 ldr r3, [pc, 0x2fc] |
0x000bad46 mov.w r8, 0 | r8 = 0;
0x000bad48 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x000bad4a mov sb, fp | sb = fp;
0x000bad4c str r2, [sp, 0x14] | var_14h = r2;
0x000bad4e strd r5, fp, [sp, 0x38] | __asm ("strd r5, fp, [var_0hx38]");
0x000bad52 mov r7, r8 | r7 = r8;
0x000bad54 add r3, pc | r3 = 0x175d9c;
0x000bad56 mov fp, r6 |
0x000bad58 str r3, [sp, 0x2c] | var_2ch = r3;
0x000bad5a movs r3, 1 | r3 = 1;
0x000bad5c mov r2, r3 | r2 = r3;
0x000bad5e mov r6, r5 | r6 = r5;
0x000bad60 mov sl, r4 | sl = r4;
0x000bad62 strd r8, r8, [sp, 0x18] | __asm ("strd r8, r8, [var_18h]");
0x000bad66 b 0xbae60 |
| while (r2 == 0) {
0x000bad68 lsls r0, r4, 0x18 | r0 = r4 << 0x18;
0x000bad6a itt pl |
| if (r0 < r4) {
0x000bad6c movpl r0, 1 | r0 = 1;
| }
| if (r0 < r4) {
0x000bad6e strpl r4, [sp, 0x4c] | var_4ch = r4;
| }
| if (r0 < r4) {
0x000bad70 bmi.w 0xbaef4 | goto label_17;
| }
| label_5:
0x000bad74 cmp r4, r7 |
0x000bad76 add fp, r0 |
| if (r4 > r7) {
0x000bad78 bgt.w 0xbae9e | goto label_18;
| }
| label_0:
0x000bad7c ldrb.w r2, [fp] | r2 = *(fp);
0x000bad80 lsls r1, r2, 0x18 | r1 = r2 << 0x18;
0x000bad82 itt pl |
| if (r1 < r2) {
0x000bad84 movpl r5, 1 | r5 = 1;
| }
| if (r1 < r2) {
0x000bad86 strpl r2, [sp, 0x48] | var_48h = r2;
| }
| if (r1 < r2) {
0x000bad88 bmi 0xbae88 | goto label_19;
| }
0x000bad8a ldr r3, [sp, 0x20] | r3 = var_20h;
0x000bad8c add r5, fp | r5 += fp;
0x000bad8e subs r3, r5, r3 | r3 = r5 - r3;
0x000bad90 cmp r3, r4 |
| if (r3 < r4) {
0x000bad92 blt.w 0xbae9e | goto label_18;
| }
| label_2:
0x000bad96 ldr.w fp, [sp, 0x48] | fp = var_48h;
0x000bad9a sub.w r2, sl, r5 | r2 = sl - r5;
0x000bad9e clz r3, fp | r3 &= fp;
0x000bada2 lsrs r3, r3, 5 | r3 >>= 5;
0x000bada4 cmp r2, fp |
0x000bada6 it lt |
| if (r2 >= fp) {
0x000bada8 orrlt r3, r3, 1 | r3 |= 1;
| }
0x000badac cmp r3, 0 |
| if (r3 != 0) {
0x000badae bne 0xbae9e | goto label_18;
| }
0x000badb0 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000badb2 asr.w r3, fp, 0x1f | r3 = fp >> 0x1f;
0x000badb6 adds.w r7, r4, fp | r7 = r4 + fp;
0x000badba adc.w r3, r3, r4, asr 31 | __asm ("adc.w r3, r3, r4, asr 31");
0x000badbe cmp r2, r7 |
0x000badc0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000badc2 sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r2 < r7) {
0x000badc4 bge 0xbae00 |
0x000badc6 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000badc8 ldr.w r2, [r2, 0xd0] | r2 = *((r2 + 0xd0));
0x000badcc cmp r2, 0 |
| if (r2 != 0) {
0x000badce bne.w 0xbaee2 | goto label_20;
| }
0x000badd2 str r3, [sp, 0x18] | var_18h = r3;
0x000badd4 bl 0x25da0 | fcn_00025da0 ();
0x000badd8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000badda cmp r0, 0 |
| if (r0 != 0) {
0x000baddc bne.w 0xbaee8 | goto label_21;
| }
0x000bade0 str r3, [sp, 0x18] | var_18h = r3;
0x000bade2 bl 0x5a4b8 | fcn_0005a4b8 ();
0x000bade6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000bade8 cmp r0, 0 |
| if (r0 != 0) {
0x000badea bne 0xbaee8 | goto label_21;
| }
| label_4:
0x000badec adds r2, r7, r7 | r2 = r7 + r7;
0x000badee mov r0, r8 | r0 = r8;
0x000badf0 adcs r3, r3 | __asm ("adcs r3, r3");
0x000badf2 strd r2, r3, [sp, 0x18] | __asm ("strd r2, r3, [var_18h]");
0x000badf6 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000badfa cmp r0, 0 |
| if (r0 == 0) {
0x000badfc beq 0xbaee8 | goto label_21;
| }
0x000badfe mov r8, r0 | r8 = r0;
| }
0x000bae00 mov r2, fp | r2 = fp;
0x000bae02 add.w r0, r8, r4 | r0 = r8 + r4;
0x000bae06 mov r1, r5 | r1 = r5;
0x000bae08 add fp, r5 |
0x000bae0a blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bae0e ldr r4, [sp, 0x28] | r4 = var_28h;
0x000bae10 mov r1, r8 | r1 = r8;
0x000bae12 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000bae14 cmp r4, r7 |
0x000bae16 mov r2, r4 | r2 = r4;
0x000bae18 it ge |
| if (r4 < r7) {
0x000bae1a movge r2, r7 | r2 = r7;
| }
0x000bae1c blx 0x66a8 | loc_imp_gmon_start_ ();
0x000bae20 ldrd r2, r1, [sp, 0x50] | __asm ("ldrd r2, r1, [var_50h]");
| if (r6 == 0) {
0x000bae24 cbz r6, 0xbae76 | goto label_22;
| }
0x000bae26 cmp r0, 0 |
| if (r0 < 0) {
0x000bae28 blt 0xbae72 | goto label_23;
| }
0x000bae2a ite eq |
| if (r0 != 0) {
0x000bae2c moveq r0, 1 | r0 = 1;
| }
| if (r0 == 0) {
0x000bae2e movne r0, 0 | r0 = 0;
| }
0x000bae30 cmp r4, r7 |
0x000bae32 ite ge |
| if (r4 < r7) {
0x000bae34 movge r0, 0 | r0 = 0;
| }
| if (r4 >= r7) {
0x000bae36 andlt r0, r0, 1 | r0 &= 1;
| }
0x000bae3a cmp r0, 0 |
| if (r0 == 0) {
0x000bae3c beq 0xbaec6 | goto label_24;
| }
0x000bae3e strd r2, r1, [r6] | __asm ("strd r2, r1, [r6]");
| label_1:
0x000bae42 adds r2, 1 | r2++;
0x000bae44 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000bae48 cmp sl, fp |
0x000bae4a str r2, [sp, 0x50] | var_50h = r2;
0x000bae4c str r1, [sp, 0x54] | var_54h = r1;
| if (sl < fp) {
0x000bae4e bls.w 0xbaf94 | goto label_25;
| }
0x000bae52 cmp.w sb, 0 |
| if (sb == 0) {
0x000bae56 beq 0xbaf0a | goto label_26;
| }
0x000bae58 movs r6, 0 | r6 = 0;
0x000bae5a movs r3, 1 | r3 = 1;
0x000bae5c str r3, [sp, 0x14] | var_14h = r3;
| label_3:
0x000bae5e movs r2, 0 | r2 = 0;
0x000bae60 movs r3, 0 | r3 = 0;
0x000bae62 ldrb.w r4, [fp] | r4 = *(fp);
0x000bae66 str r3, [sp, 0x4c] | var_4ch = r3;
0x000bae68 cmp r2, 0 |
0x000bae6a beq.w 0xbad68 |
| }
0x000bae6e movs r4, 0 | r4 = 0;
0x000bae70 b 0xbad7c | goto label_0;
| label_23:
0x000bae72 strd r2, r1, [r6] | __asm ("strd r2, r1, [r6]");
| label_22:
0x000bae76 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000bae78 ands.w r0, r3, r0, lsr 31 | r0 = r3 & (r0 >> 31);
0x000bae7c itt ne |
| if (r0 != r3) {
0x000bae7e strdne r2, r1, [sb] | __asm ("strdne r2, r1, [sb]");
| }
| if (r0 != r3) {
0x000bae82 mov.w sb, 0 | sb = 0;
| }
0x000bae86 b 0xbae42 | goto label_1;
| label_19:
0x000bae88 add r1, sp, 0x48 | r1 += var_48h;
0x000bae8a mov r0, fp | r0 = fp;
0x000bae8c bl 0x24218 | fcn_00024218 (r0, r1);
0x000bae90 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000bae92 mov r5, r0 | r5 = r0;
0x000bae94 add r5, fp | r5 += fp;
0x000bae96 subs r3, r5, r3 | r3 = r5 - r3;
0x000bae98 cmp r3, r4 |
| if (r3 >= r4) {
0x000bae9a bge.w 0xbad96 | goto label_2;
| }
| label_18:
0x000bae9e mov r0, r8 | r0 = r8;
0x000baea0 movw sb, 0x10b | sb = 0x10b;
0x000baea4 bl 0x26dbc | fcn_00026dbc (r0);
| do {
| label_7:
0x000baea8 ldr r2, [pc, 0x19c] |
0x000baeaa ldr r3, [pc, 0x194] | r3 = *(0xbb042);
0x000baeac add r2, pc | r2 = 0x175ef8;
0x000baeae ldr r3, [r2, r3] | r3 = imp.atan;
0x000baeb0 ldr r2, [r3] | r2 = imp.atan;
0x000baeb2 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000baeb4 eors r2, r3 | r2 ^= r3;
0x000baeb6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000baeba bne.w 0xbb036 | goto label_27;
| }
0x000baebe mov r0, sb | r0 = sb;
0x000baec0 add sp, 0x64 |
0x000baec2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x000baec6 adds r2, 1 | r2++;
0x000baec8 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000baecc cmp sl, fp |
0x000baece str r2, [sp, 0x50] | var_50h = r2;
0x000baed0 str r1, [sp, 0x54] | var_54h = r1;
| if (sl < fp) {
0x000baed2 bls.w 0xbb00a | goto label_28;
| }
0x000baed6 subs.w r3, sb, 0 | r3 = sb - 0;
0x000baeda it ne |
| if (r3 == sb) {
0x000baedc movne r3, 1 | r3 = 1;
| }
0x000baede str r3, [sp, 0x14] | var_14h = r3;
0x000baee0 b 0xbae5e | goto label_3;
| label_20:
0x000baee2 dmb ish | __asm ("dmb ish");
0x000baee6 b 0xbadec | goto label_4;
| label_21:
0x000baee8 mov r0, r8 | r0 = r8;
0x000baeea mov.w sb, 7 | sb = 7;
0x000baeee bl 0x26dbc | fcn_00026dbc (r0);
0x000baef2 b 0xbaea8 |
| } while (1);
| label_17:
0x000baef4 add r1, sp, 0x4c | r1 += var_4ch;
0x000baef6 mov r0, fp | r0 = fp;
0x000baef8 bl 0x24218 | fcn_00024218 (r0, r1);
0x000baefc ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x000baefe b 0xbad74 | goto label_5;
| label_15:
0x000baf00 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000baf02 add r1, sp, 0x44 | r1 += var_44h;
0x000baf04 bl 0x24218 | fcn_00024218 (r0, r1);
0x000baf08 b 0xbad0a | goto label_6;
| label_26:
0x000baf0a ldrd r5, fp, [sp, 0x38] | __asm ("ldrd r5, fp, [var_38h]");
| label_8:
0x000baf0e mov r0, r8 | r0 = r8;
0x000baf10 bl 0x26dbc | fcn_00026dbc (r0);
| label_9:
0x000baf14 ldr r6, [sp, 0x44] | r6 = var_44h;
0x000baf16 cmp r6, 1 |
0x000baf18 it le |
| if (r6 <= 1) {
0x000baf1a movle sb, 0 | sb = 0;
| goto label_29;
| }
| if (r6 <= 1) {
| label_29:
0x000baf1e ble 0xbaea8 | goto label_7;
| }
0x000baf20 movs r4, 0 | r4 = 0;
0x000baf22 cmp r5, r4 |
0x000baf24 it ne |
| if (r5 != r4) {
0x000baf26 cmpne fp, r4 | __asm ("cmpne fp, r4");
| }
0x000baf28 strd r4, r4, [sp, 0x48] | __asm ("strd r4, r4, [var_4ch]");
| if (r5 != r4) {
0x000baf2c beq 0xbaf64 |
0x000baf2e ldrd r0, r1, [r5] | __asm ("ldrd r0, r1, [r5]");
0x000baf32 ldrd r2, r3, [fp] | __asm ("ldrd r2, r3, [fp]");
0x000baf36 cmp r1, r3 |
0x000baf38 it eq |
| if (r1 == r3) {
0x000baf3a cmpeq r0, r2 | __asm ("cmpeq r0, r2");
| }
| if (r1 != r3) {
0x000baf3c beq 0xbaf72 |
0x000baf3e add.w r8, sp, 0x4c | r8 += var_4ch;
0x000baf42 add r7, sp, 0x48 | r7 += var_48h;
0x000baf44 mov r2, r0 | r2 = r0;
0x000baf46 mov r3, r1 | r3 = r1;
0x000baf48 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000baf4a str r4, [sp, 8] | var_8h = r4;
0x000baf4c str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x000baf50 str r7, [sp] | *(sp) = r7;
0x000baf52 bl 0xbabb0 | r0 = fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
0x000baf56 mov sb, r0 | sb = r0;
0x000baf58 cmp r0, 0 |
| if (r0 == 0) {
0x000baf5a beq 0xbafdc | goto label_30;
| }
0x000baf5c ldr r0, [sp, 0x48] | r0 = var_48h;
0x000baf5e bl 0x26dbc | fcn_00026dbc (r0);
0x000baf62 b 0xbaf8c |
| } else {
0x000baf64 add.w r8, sp, 0x4c | r8 += var_4ch;
0x000baf68 add r7, sp, 0x48 | r7 += var_48h;
0x000baf6a cmp r5, 0 |
| if (r5 == 0) {
0x000baf6c beq 0xbb002 | goto label_31;
| }
0x000baf6e ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
| }
0x000baf72 add.w r8, sp, 0x4c | r8 += var_4ch;
0x000baf76 add r7, sp, 0x48 | r7 += var_48h;
| label_11:
0x000baf78 movs r1, 0 | r1 = 0;
0x000baf7a ldr r0, [sp, 0x30] | r0 = var_30h;
0x000baf7c strd r7, r8, [sp] | __asm ("strd r7, r8, [sp]");
0x000baf80 str r1, [sp, 8] | var_8h = r1;
0x000baf82 bl 0xbabb0 | r0 = fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
0x000baf86 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x000baf88 cbz r0, 0xbafae | goto label_32;
| }
0x000baf8a ldr r4, [sp, 0x48] | r4 = var_48h;
| }
| label_10:
0x000baf8c mov r0, r4 | r0 = r4;
0x000baf8e bl 0x26dbc | fcn_00026dbc (r0);
0x000baf92 b 0xbaea8 | goto label_7;
| label_25:
0x000baf94 ldrd r5, fp, [sp, 0x38] | __asm ("ldrd r5, fp, [var_38h]");
| label_12:
0x000baf98 cmp.w sb, 0 |
| if (sb == 0) {
0x000baf9c beq 0xbaf0e | goto label_8;
| }
0x000baf9e ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_50h]");
0x000bafa2 mov r0, r8 | r0 = r8;
0x000bafa4 strd r2, r3, [sb] | __asm ("strd r2, r3, [sb]");
0x000bafa8 bl 0x26dbc | fcn_00026dbc (r0);
0x000bafac b 0xbaf14 | goto label_9;
| label_32:
0x000bafae ldr r4, [sp, 0x48] | r4 = var_48h;
0x000bafb0 str r0, [sp, 0x50] | var_50h = r0;
0x000bafb2 ldrb r3, [r4] | r3 = *(r4);
0x000bafb4 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x000bafb6 bmi 0xbb020 | goto label_33;
| }
| label_13:
0x000bafb8 cmp r6, r3 |
0x000bafba it le |
| if (r6 > r3) {
0x000bafbc movwle sb, 0x10b | __asm ("movwle sb, 0x10b");
| goto label_34;
| }
| if (r6 <= r3) {
| label_34:
0x000bafc0 ble 0xbaf8c | goto label_10;
| }
0x000bafc2 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000bafc4 ldrd r1, r2, [sp, 0x24] | __asm ("ldrd r1, r2, [var_24h]");
0x000bafc8 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bafca str r3, [sp] | *(sp) = r3;
0x000bafcc mov r3, r4 | r3 = r4;
0x000bafce str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x000bafd2 str r5, [sp, 4] | var_4h = r5;
0x000bafd4 bl 0xbacd8 | r0 = fcn_000bacd8 (r0, r1, r2, r3, r4, r5);
0x000bafd8 mov sb, r0 | sb = r0;
0x000bafda b 0xbaf8c | goto label_10;
| label_30:
0x000bafdc strd r5, r0, [sp, 4] | __asm ("strd r5, r0, [var_8h]");
0x000bafe0 ldrd r5, r3, [sp, 0x48] | __asm ("ldrd r5, r3, [var_4ch]");
0x000bafe4 ldrd r1, r2, [sp, 0x24] | __asm ("ldrd r1, r2, [var_24h]");
0x000bafe8 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bafea str r3, [sp] | *(sp) = r3;
0x000bafec mov r3, r5 | r3 = r5;
0x000bafee bl 0xbacd8 | r0 = fcn_000bacd8 (r0, r1, r2, r3, r4, r5);
0x000baff2 mov sb, r0 | sb = r0;
0x000baff4 mov r0, r5 | r0 = r5;
0x000baff6 bl 0x26dbc | fcn_00026dbc (r0);
0x000baffa str r4, [sp, 0x48] | var_48h = r4;
0x000baffc cmp.w sb, 0 |
| if (sb != 0) {
0x000bb000 bne 0xbaf8c | goto label_10;
| }
| label_31:
0x000bb002 ldrd r2, r3, [fp] | __asm ("ldrd r2, r3, [fp]");
0x000bb006 movs r5, 0 | r5 = 0;
0x000bb008 b 0xbaf78 | goto label_11;
| label_28:
0x000bb00a ldrd r5, fp, [sp, 0x38] | __asm ("ldrd r5, fp, [var_38h]");
0x000bb00e mov sl, r6 | sl = r6;
| label_14:
0x000bb010 cmp.w sl, 0 |
| if (sl == 0) {
0x000bb014 beq 0xbaf98 | goto label_12;
| }
0x000bb016 ldrd r6, r7, [sp, 0x50] | __asm ("ldrd r6, r7, [var_50h]");
0x000bb01a strd r6, r7, [sl] | __asm ("strd r6, r7, [sl]");
0x000bb01e b 0xbaf98 | goto label_12;
| label_33:
0x000bb020 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000bb022 mov r0, r4 | r0 = r4;
0x000bb024 bl 0x24218 | fcn_00024218 (r0, r1);
0x000bb028 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000bb02a b 0xbafb8 | goto label_13;
| label_16:
0x000bb02c mov sb, fp | sb = fp;
0x000bb02e mov sl, r5 | sl = r5;
0x000bb030 mov.w r8, 0 | r8 = 0;
0x000bb034 b 0xbb010 | goto label_14;
| label_27:
0x000bb036 blx 0x6430 | fcn_00006430 ();
0x000bb03a nop |
0x000bb03c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbb4b0 */
| #include <stdint.h>
|
; (fcn) fcn.000bb4b0 () | void fcn_000bb4b0 (int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000bb4b0 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000bb4b4 sub sp, 0x34 |
0x000bb4b6 ldr r4, [sp, 0x58] | r4 = *(arg_58h);
| if (r1 == 0) {
0x000bb4b8 cbz r1, 0xbb4f0 | goto label_4;
| }
0x000bb4ba mov r8, r0 | r8 = r0;
0x000bb4bc mov sb, r2 | sb = r2;
0x000bb4be mov r7, r3 | r7 = r3;
0x000bb4c0 mov r6, r1 | r6 = r1;
0x000bb4c2 mov fp, r4 |
| do {
0x000bb4c4 ldr.w r1, [fp] | r1 = *(fp);
0x000bb4c8 mov r3, r7 | r3 = r7;
0x000bb4ca mov r2, sb | r2 = sb;
0x000bb4cc mov r0, r8 | r0 = r8;
| if (r1 != 0) {
0x000bb4ce cbnz r1, 0xbb4f0 | goto label_4;
| }
0x000bb4d0 ldr r4, [r6] | r4 = *(r6);
0x000bb4d2 cmp r4, 5 |
| if (r4 == 5) {
0x000bb4d4 beq 0xbb4f6 | goto label_5;
| }
0x000bb4d6 ldr r5, [r7] | r5 = *(r7);
0x000bb4d8 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x000bb4da str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000bb4de cmp r4, 4 |
0x000bb4e0 it eq |
| if (r4 != 4) {
0x000bb4e2 addeq r5, 1 | r5++;
| }
0x000bb4e4 str r5, [r7] | *(r7) = r5;
0x000bb4e6 bl 0xbb4b0 | fcn_000bb4b0 (r0, r1, r2, r3, r4);
0x000bb4ea ldr r6, [r6, 0x10] | r6 = *((r6 + 0x10));
0x000bb4ec cmp r6, 0 |
0x000bb4ee bne 0xbb4c4 |
| } while (r6 != 0);
| label_4:
0x000bb4f0 add sp, 0x34 |
0x000bb4f2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000bb4f6 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000bb4f8 mov sl, r1 | sl = r1;
0x000bb4fa mov r2, r3 | r2 = r3;
0x000bb4fc str r3, [sp, 0x1c] | var_1ch = r3;
0x000bb4fe ldr r1, [r2, 0x40] | r1 = *((r2 + 0x40));
0x000bb500 ldr.w r3, [sb] | r3 = *(sb);
0x000bb504 cmp r1, 0 |
0x000bb506 add r3, r1 | r3 += r1;
0x000bb508 str.w r3, [sb] | __asm ("str.w r3, [sb]");
| if (r1 <= 0) {
0x000bb50c ble 0xbb5f8 | goto label_6;
| }
0x000bb50e ldr r3, [pc, 0x1b0] |
0x000bb510 str r6, [sp, 0x2c] | var_2ch = r6;
0x000bb512 str.w fp, [sp, 0x58] | __asm ("str.w fp, [arg_58h]");
0x000bb516 add r3, pc | r3 = 0x176bdc;
0x000bb518 strd r3, r1, [sp, 0x24] | __asm ("strd r3, r1, [var_24h]");
| label_0:
0x000bb51c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000bb51e lsl.w r3, sl, 1 | r3 = sl << 1;
0x000bb522 str r3, [sp, 0x20] | var_20h = r3;
0x000bb524 add r3, sl | r3 += sl;
0x000bb526 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x000bb52a ldrd sb, r6, [r3, 0x48] | __asm ("ldrd sb, r6, [r3, 0x48]");
0x000bb52e ldr r7, [r3, 0x50] | r7 = *((r3 + 0x50));
0x000bb530 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000bb532 ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000bb536 cmp r3, 0 |
| if (r3 != 0) {
0x000bb538 bne.w 0xbb678 | goto label_7;
| }
0x000bb53c bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bb540 cmp r0, 0 |
| if (r0 != 0) {
0x000bb542 bne.w 0xbb68c | goto label_8;
| }
0x000bb546 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bb54a cmp r0, 0 |
| if (r0 != 0) {
0x000bb54c bne.w 0xbb68c | goto label_8;
| }
0x000bb550 movs r0, 0x40 | r0 = 0x40;
0x000bb552 movs r1, 0 | r1 = 0;
0x000bb554 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000bb558 mov r5, r0 | r5 = r0;
0x000bb55a cmp r0, 0 |
| if (r0 == 0) {
0x000bb55c beq.w 0xbb68c | goto label_8;
| }
| label_2:
0x000bb560 ldr.w r4, [r8] | r4 = *(r8);
| if (r7 == 0) {
0x000bb564 cbz r7, 0xbb5aa | goto label_9;
| }
0x000bb566 ldr.w r2, [r4, 0x100] | r2 = *((r4 + 0x100));
0x000bb56a mov.w fp, 1 |
0x000bb56e movs r3, 0x18 | r3 = 0x18;
0x000bb570 cmp r2, fp |
| if (r2 <= fp) {
0x000bb572 ble 0xbb588 | goto label_10;
| }
| do {
0x000bb574 ldr.w r1, [r4, 0x104] | r1 = *((r4 + 0x104));
0x000bb578 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x000bb57a adds r3, 0x18 | r3 += 0x18;
0x000bb57c cmp r6, r1 |
| if (r6 == r1) {
0x000bb57e beq 0xbb64a | goto label_11;
| }
0x000bb580 add.w fp, fp, 1 |
0x000bb584 cmp r2, fp |
0x000bb586 bgt 0xbb574 |
| } while (r2 > fp);
| label_10:
0x000bb588 mov.w fp, 1 |
0x000bb58c movs r3, 0x18 | r3 = 0x18;
0x000bb58e cmp r2, fp |
0x000bb590 add.w r0, r6, fp | r0 = r6 + fp;
| if (r2 <= fp) {
0x000bb594 ble 0xbb5aa | goto label_9;
| }
| do {
0x000bb596 ldr.w r1, [r4, 0x104] | r1 = *((r4 + 0x104));
0x000bb59a ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x000bb59c adds r3, 0x18 | r3 += 0x18;
0x000bb59e cmp r1, r0 |
| if (r1 == r0) {
0x000bb5a0 beq 0xbb606 | goto label_12;
| }
0x000bb5a2 add.w fp, fp, 1 |
0x000bb5a6 cmp r2, fp |
0x000bb5a8 bgt 0xbb596 |
| } while (r2 > fp);
| label_9:
0x000bb5aa ldr.w fp, [r8, 0x14] | fp = *((r8 + 0x14));
0x000bb5ae movs r2, 0x40 | r2 = 0x40;
0x000bb5b0 movs r1, 0 | r1 = 0;
0x000bb5b2 mov r0, r5 | r0 = r5;
0x000bb5b4 blx 0x62ec | fcn_000062ec ();
0x000bb5b8 str r7, [sp, 8] | var_8h = r7;
0x000bb5ba clz r7, r7 | r7 &= r7;
0x000bb5be movs r2, 0 | r2 = 0;
0x000bb5c0 lsrs r7, r7, 5 | r7 >>= 5;
0x000bb5c2 mov r1, fp | r1 = fp;
0x000bb5c4 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x000bb5c8 mov r0, r4 | r0 = r4;
0x000bb5ca mvn r3, 1 | r3 = ~1;
0x000bb5ce str r5, [sp, 0x10] | var_10h = r5;
0x000bb5d0 str r2, [sp, 0xc] | var_ch = r2;
0x000bb5d2 bl 0xbb04c | fcn_000bb04c (r0, r1, r2, r3, r4, r5, r6);
0x000bb5d6 str r7, [r5, 0x2c] | *((r5 + 0x2c)) = r7;
| label_1:
0x000bb5d8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000bb5da ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000bb5dc add r3, sl | r3 += sl;
0x000bb5de add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x000bb5e2 str r5, [r3, 0x5c] | *((r3 + 0x5c)) = r5;
0x000bb5e4 cmp r0, 0 |
| if (r0 != 0) {
0x000bb5e6 bne 0xbb6bc | goto label_13;
| }
0x000bb5e8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000bb5ea add.w sl, sl, 1 | sl++;
0x000bb5ee ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000bb5f0 str r3, [sp, 0x1c] | var_1ch = r3;
0x000bb5f2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000bb5f4 cmp r3, sl |
| if (r3 != sl) {
0x000bb5f6 bne 0xbb51c | goto label_0;
| }
| label_6:
0x000bb5f8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000bb5fa mov.w r3, -1 | r3 = -1;
0x000bb5fe str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000bb600 add sp, 0x34 |
0x000bb602 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x000bb606 ldr.w r7, [r8, 0x14] | r7 = *((r8 + 0x14));
0x000bb60a movs r2, 0x40 | r2 = 0x40;
0x000bb60c movs r1, 0 | r1 = 0;
0x000bb60e mov r0, r5 | r0 = r5;
0x000bb610 blx 0x62ec | fcn_000062ec ();
0x000bb614 movs r3, 1 | r3 = 1;
0x000bb616 movs r0, 0 | r0 = 0;
0x000bb618 strd r3, r0, [sp, 8] | __asm ("strd r3, r0, [var_8h]");
0x000bb61c mov r2, fp | r2 = fp;
0x000bb61e mov r1, r7 | r1 = r7;
0x000bb620 mvn r3, 1 | r3 = ~1;
0x000bb624 mov r0, r4 | r0 = r4;
0x000bb626 str r5, [sp, 0x10] | var_10h = r5;
0x000bb628 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x000bb62c bl 0xbb04c | r0 = fcn_000bb04c (r0, r1, r2, r3, r4, r5, r6);
0x000bb630 cmp r0, 0 |
| if (r0 == 0) {
0x000bb632 beq 0xbb6a0 | goto label_14;
| }
0x000bb634 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000bb636 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000bb638 ldr r4, [sp, 0x58] | r4 = *(arg_58h);
0x000bb63a add r3, sl | r3 += sl;
0x000bb63c add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x000bb640 str r5, [r3, 0x5c] | *((r3 + 0x5c)) = r5;
| label_3:
0x000bb642 str r0, [r4] | *(r4) = r0;
0x000bb644 add sp, 0x34 |
0x000bb646 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x000bb64a ldr.w r7, [r8, 0x14] | r7 = *((r8 + 0x14));
0x000bb64e movs r2, 0x40 | r2 = 0x40;
0x000bb650 movs r1, 0 | r1 = 0;
0x000bb652 mov r0, r5 | r0 = r5;
0x000bb654 blx 0x62ec | fcn_000062ec ();
0x000bb658 movs r3, 0 | r3 = 0;
0x000bb65a mov r2, fp | r2 = fp;
0x000bb65c strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_8h]");
0x000bb660 mov r1, r7 | r1 = r7;
0x000bb662 mvn r3, 1 | r3 = ~1;
0x000bb666 mov r0, r4 | r0 = r4;
0x000bb668 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x000bb66c str r5, [sp, 0x10] | var_10h = r5;
0x000bb66e bl 0xbb04c | fcn_000bb04c (r0, r1, r2, r3, r4, r5, r6);
0x000bb672 movs r3, 1 | r3 = 1;
0x000bb674 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x000bb676 b 0xbb5d8 | goto label_1;
| label_7:
0x000bb678 movs r0, 0x40 | r0 = 0x40;
0x000bb67a movs r1, 0 | r1 = 0;
0x000bb67c dmb ish | __asm ("dmb ish");
0x000bb680 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000bb684 mov r5, r0 | r5 = r0;
0x000bb686 cmp r0, 0 |
| if (r0 != 0) {
0x000bb688 bne.w 0xbb560 | goto label_2;
| }
| label_8:
0x000bb68c ldr r1, [sp, 0x20] | r1 = var_20h;
0x000bb68e movs r3, 0 | r3 = 0;
0x000bb690 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000bb692 movs r0, 7 | r0 = 7;
0x000bb694 ldr r4, [sp, 0x58] | r4 = *(arg_58h);
0x000bb696 add r1, sl | r1 += sl;
0x000bb698 add.w r1, r2, r1, lsl 3 | r1 = r2 + (r1 << 3);
0x000bb69c str r3, [r1, 0x5c] | *((r1 + 0x5c)) = r3;
0x000bb69e b 0xbb642 | goto label_3;
| label_14:
0x000bb6a0 strd r0, r0, [sp, 8] | __asm ("strd r0, r0, [var_8h]");
0x000bb6a4 mov r2, r0 | r2 = r0;
0x000bb6a6 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x000bb6aa mov r0, r4 | r0 = r4;
0x000bb6ac str r5, [sp, 0x10] | var_10h = r5;
0x000bb6ae mvn r3, 1 | r3 = ~1;
0x000bb6b2 ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x000bb6b6 bl 0xbb04c | fcn_000bb04c (r0, r1, r2, r3, r4, r5, r6);
0x000bb6ba b 0xbb5d8 | goto label_1;
| label_13:
0x000bb6bc ldr r4, [sp, 0x58] | r4 = *(arg_58h);
0x000bb6be b 0xbb642 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbb6c4 */
| #include <stdint.h>
|
; (fcn) fcn.000bb6c4 () | void fcn_000bb6c4 (int16_t arg1, arithmetic x) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = x;
0x000bb6c4 ldr r2, [pc, 0x298] |
0x000bb6c6 ldr r3, [pc, 0x29c] | r3 = *(0xbb966);
0x000bb6c8 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000bb6cc sub sp, 0x20 |
0x000bb6ce add r2, pc | r2 = 0x177032;
0x000bb6d0 ldr r5, [r1, 0x48] | r5 = *((r1 + 0x48));
0x000bb6d2 mov r6, r0 | r6 = r0;
0x000bb6d4 mov r4, r1 | r4 = r1;
0x000bb6d6 ldr r3, [r2, r3] |
0x000bb6d8 ldr r0, [r1, 0x28] | r0 = *((r1 + 0x28));
0x000bb6da ldr r3, [r3] | r3 = imp.atan;
0x000bb6dc str r3, [sp, 0x1c] | var_1ch = r3;
0x000bb6de mov.w r3, 0 | r3 = 0;
0x000bb6e2 cmp r5, 0 |
| if (r5 == 0) {
0x000bb6e4 beq.w 0xbb806 | goto label_10;
| }
0x000bb6e8 ldr r3, [r1, 0x4c] | r3 = *((r1 + 0x4c));
0x000bb6ea add r5, r3 | r5 += r3;
| do {
0x000bb6ec ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000bb6ee add r3, r0 | r3 += r0;
0x000bb6f0 cmp r5, r3 |
| if (r5 >= r3) {
0x000bb6f2 bhs.w 0xbb80e | goto label_11;
| }
| label_1:
0x000bb6f6 movs r2, 0x14 | r2 = 0x14;
| label_9:
0x000bb6f8 mov r1, r5 | r1 = r5;
0x000bb6fa mov r0, r4 | r0 = r4;
0x000bb6fc bl 0x7ab24 | r0 = fcn_0007ab24 (r0, r1, r2);
0x000bb700 cmp r0, 0 |
| if (r0 == 0) {
0x000bb702 bne 0xbb7ea |
0x000bb704 ldrb r3, [r5] | r3 = *(r5);
0x000bb706 lsls r0, r3, 0x18 | r0 = r3 << 0x18;
0x000bb708 itt pl |
| if (r0 < r3) {
0x000bb70a movpl r0, 1 | r0 = 1;
| }
| if (r0 < r3) {
0x000bb70c strpl r3, [sp, 0x14] | var_14h = r3;
| }
| if (r0 < r3) {
0x000bb70e bmi.w 0xbb92a | goto label_12;
| }
| label_4:
0x000bb712 ldrb r6, [r5, r0] | r6 = *((r5 + r0));
0x000bb714 add r5, r0 | r5 += r0;
0x000bb716 lsls r1, r6, 0x18 | r1 = r6 << 0x18;
0x000bb718 itt pl |
| if (r1 < r6) {
0x000bb71a movpl r0, 1 | r0 = 1;
| }
| if (r1 < r6) {
0x000bb71c strpl r6, [sp, 0x18] | var_18h = r6;
| }
| if (r1 < r6) {
0x000bb71e bmi.w 0xbb91e | goto label_13;
| }
| label_3:
0x000bb722 cmp r6, 0 |
0x000bb724 add r5, r0 | r5 += r0;
| if (r6 > 0) {
0x000bb726 ble 0xbb7e6 |
0x000bb728 ldrd r3, r2, [r4, 0x28] | __asm ("ldrd r3, r2, [r4, 0x28]");
0x000bb72c add r3, r2 | r3 += r2;
0x000bb72e subs r3, r3, r5 | r3 -= r5;
0x000bb730 cmp r3, r6 |
| if (r3 < r6) {
0x000bb732 blt 0xbb7e6 | goto label_14;
| }
0x000bb734 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x000bb738 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000bb73a cmp r3, r8 |
| if (r3 < r8) {
0x000bb73c blt 0xbb7e6 | goto label_14;
| }
0x000bb73e ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x000bb740 asrs r7, r6, 0x1f | r7 = r6 >> 0x1f;
0x000bb742 adds.w sb, r8, r6 | sb = r8 + r6;
0x000bb746 adc.w r7, r7, r8, asr 31 | __asm ("adc.w r7, r7, r8, asr 31");
0x000bb74a cmp r2, sb |
0x000bb74c asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000bb750 sbcs r3, r7 | __asm ("sbcs r3, r7");
| if (r2 < sb) {
0x000bb752 bge 0xbb794 |
0x000bb754 ldr r3, [pc, 0x210] |
0x000bb756 ldr.w sl, [r4, 0x40] | sl = *((r4 + 0x40));
0x000bb75a add r3, pc |
0x000bb75c ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000bb760 cmp r3, 0 |
| if (r3 != 0) {
0x000bb762 bne.w 0xbb948 | goto label_15;
| }
0x000bb766 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bb76a cmp r0, 0 |
| if (r0 != 0) {
0x000bb76c bne.w 0xbb914 | goto label_16;
| }
0x000bb770 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bb774 cmp r0, 0 |
| if (r0 != 0) {
0x000bb776 bne.w 0xbb914 | goto label_16;
| }
| label_7:
0x000bb77a mov r0, sl | r0 = sl;
0x000bb77c adds.w sl, sb, sb | sl = sb + sb;
0x000bb780 adc.w r3, r7, r7 | __asm ("adc.w r3, r7, r7");
0x000bb784 mov r2, sl | r2 = sl;
0x000bb786 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bb78a cmp r0, 0 |
| if (r0 == 0) {
0x000bb78c beq.w 0xbb914 | goto label_16;
| }
0x000bb790 strd r0, sl, [r4, 0x40] | __asm ("strd r0, sl, [r4, 0x40]");
| }
0x000bb794 add.w r2, r6, 0xa | r2 = r6 + 0xa;
0x000bb798 mov r1, r5 | r1 = r5;
0x000bb79a mov r0, r4 | r0 = r4;
0x000bb79c bl 0x7ab24 | fcn_0007ab24 (r0, r1, r2);
0x000bb79e vst4.32 {d27[0], d28[0], d29[0], d30[0]}, [r2:0x40], r8 | __asm ("vst4.32 {d27[0], d28[0], d29[0], d30[0]}, [r2:0x40], r8");
0x000bb7a2 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000bb7a4 mov r2, r6 | r2 = r6;
0x000bb7a6 mov r1, r5 | r1 = r5;
0x000bb7a8 add r0, r8 | r0 += r8;
0x000bb7aa blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bb7ae str.w sb, [r4, 0x3c] | __asm ("str.w sb, [r4, 0x3c]");
0x000bb7b2 ldrb r3, [r5, r6] | r3 = *((r5 + r6));
0x000bb7b4 add r5, r6 | r5 += r6;
0x000bb7b6 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000bb7b8 itt pl |
| if (r2 < r3) {
0x000bb7ba movpl r0, 1 | r0 = 1;
| }
| if (r2 < r3) {
0x000bb7bc strpl r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
| }
| if (r2 < r3) {
0x000bb7be bmi.w 0xbb94e | goto label_17;
| }
| label_8:
0x000bb7c2 movs r2, 0 | r2 = 0;
0x000bb7c4 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x000bb7c6 str r2, [r4, 0x50] | *((r4 + 0x50)) = r2;
0x000bb7c8 add r5, r0 | r5 += r0;
0x000bb7ca ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x000bb7cc subs r1, r5, r1 | r1 = r5 - r1;
0x000bb7ce str r5, [r4, 0x48] | *((r4 + 0x48)) = r5;
0x000bb7d0 subs r2, r2, r1 | r2 -= r1;
0x000bb7d2 cmp r2, r3 |
| if (r2 < r3) {
0x000bb7d4 blt 0xbb7e6 | goto label_14;
| }
0x000bb7d6 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
| if (r2 == 0) {
0x000bb7d8 cbnz r2, 0xbb7e2 |
0x000bb7da add r5, r3 | r5 += r3;
0x000bb7dc ldrb r2, [r5, -0x1] | r2 = *((r5 - 0x1));
| if (r2 != 0) {
0x000bb7e0 cbnz r2, 0xbb7e6 | goto label_14;
| }
| }
0x000bb7e2 cmp r3, 0 |
| if (r3 != 0) {
0x000bb7e4 bne 0xbb8cc | goto label_18;
| }
| }
| label_14:
0x000bb7e6 movw r0, 0x10b | r0 = 0x10b;
| }
| label_0:
0x000bb7ea ldr r2, [pc, 0x180] |
0x000bb7ec ldr r3, [pc, 0x174] | r3 = *(0xbb964);
0x000bb7ee add r2, pc | r2 = 0x177160;
0x000bb7f0 ldr r3, [r2, r3] | r3 = imp.atan;
0x000bb7f2 ldr r2, [r3] | r2 = imp.atan;
0x000bb7f4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000bb7f6 eors r2, r3 | r2 ^= r3;
0x000bb7f8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000bb7fc bne.w 0xbb95c | goto label_19;
| }
0x000bb800 add sp, 0x20 |
0x000bb802 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_10:
0x000bb806 mov r5, r0 | r5 = r0;
0x000bb808 cmp r0, 0 |
0x000bb80a bne.w 0xbb6ec |
| } while (r0 != 0);
| label_11:
0x000bb80e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000bb810 cmp r3, 0 |
| if (r3 == 0) {
0x000bb812 beq 0xbb8d0 | goto label_20;
| }
0x000bb814 ldr.w r8, [r3] | r8 = *(r3);
0x000bb818 bl 0x26dbc | fcn_00026dbc (r0);
0x000bb81c movs r3, 0 | r3 = 0;
0x000bb81e str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x000bb820 cmp.w r8, 0 |
| if (r8 == 0) {
0x000bb824 beq 0xbb8cc | goto label_18;
| }
0x000bb826 ldr.w r6, [r8, 0x10] | r6 = *((r8 + 0x10));
0x000bb82a ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x000bb82c ldr.w r7, [r8, 8] | r7 = *((r8 + 8));
0x000bb830 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000bb832 cmp r6, r3 |
0x000bb834 ldr r5, [r7] | r5 = *(r7);
| if (r6 >= r3) {
0x000bb836 blt 0xbb878 |
0x000bb838 bl 0x26dbc | fcn_00026dbc (r0);
0x000bb83c ldr r3, [pc, 0x130] |
0x000bb83e add r3, pc |
0x000bb840 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000bb844 cmp r3, 0 |
| if (r3 != 0) {
0x000bb846 bne 0xbb942 | goto label_21;
| }
0x000bb848 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bb84c cmp r0, 0 |
| if (r0 != 0) {
0x000bb84e bne 0xbb910 | goto label_22;
| }
0x000bb850 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bb854 cmp r0, 0 |
| if (r0 != 0) {
0x000bb856 bne 0xbb910 | goto label_22;
| }
| label_6:
0x000bb858 asrs r1, r6, 0x1f | r1 = r6 >> 0x1f;
0x000bb85a adds.w sb, r6, 1 | sb = r6 + 1;
0x000bb85e adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000bb862 adds.w r0, sb, sb | r0 = sb + sb;
0x000bb866 adcs r1, r1 | __asm ("adcs r1, r1");
0x000bb868 bl 0x28c3c | fcn_00028c3c (r0);
0x000bb86c str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000bb86e cmp r0, 0 |
| if (r0 == 0) {
0x000bb870 beq 0xbb914 | goto label_16;
| }
0x000bb872 lsl.w r3, sb, 1 | r3 = sb << 1;
0x000bb876 str r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
| }
0x000bb878 ldr.w r1, [r8, 0xc] | r1 = *((r8 + 0xc));
0x000bb87c mov r2, r6 | r2 = r6;
0x000bb87e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bb882 ldr r3, [pc, 0xf0] |
0x000bb884 movs r1, 0 | r1 = 0;
0x000bb886 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x000bb888 add r3, pc |
0x000bb88a strb r1, [r2, r6] | *((r2 + r6)) = r1;
0x000bb88c ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000bb890 str r6, [r4, 0x3c] | *((r4 + 0x3c)) = r6;
0x000bb892 cmp r3, 0 |
| if (r3 != 0) {
0x000bb894 bne 0xbb918 | goto label_23;
| }
0x000bb896 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bb89a cmp r0, 0 |
| if (r0 != 0) {
0x000bb89c bne 0xbb914 | goto label_16;
| }
0x000bb89e bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bb8a2 cmp r0, 0 |
| if (r0 != 0) {
0x000bb8a4 bne 0xbb914 | goto label_16;
| }
| label_2:
0x000bb8a6 adds r5, 1 | r5++;
0x000bb8a8 asrs r1, r5, 0x1f | r1 = r5 >> 0x1f;
0x000bb8aa mov r0, r5 | r0 = r5;
0x000bb8ac bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000bb8b0 mov r6, r0 | r6 = r0;
0x000bb8b2 cmp r0, 0 |
| if (r0 == 0) {
0x000bb8b4 beq 0xbb914 | goto label_16;
| }
0x000bb8b6 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000bb8b8 mov r2, r5 | r2 = r5;
0x000bb8ba blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bb8be ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000bb8c0 str r5, [r4, 0x4c] | *((r4 + 0x4c)) = r5;
0x000bb8c2 str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x000bb8c4 adds r3, 4 | r3 += 4;
0x000bb8c6 str r6, [r4, 0x48] | *((r4 + 0x48)) = r6;
0x000bb8c8 str r6, [r4, 0x28] | *((r4 + 0x28)) = r6;
0x000bb8ca str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| do {
| label_18:
0x000bb8cc movs r0, 0 | r0 = 0;
0x000bb8ce b 0xbb7ea | goto label_0;
| label_20:
0x000bb8d0 ldrb r5, [r4, 5] | r5 = *((r4 + 5));
| if (r5 == 0) {
0x000bb8d2 cbz r5, 0xbb934 | goto label_24;
| }
| label_5:
0x000bb8d4 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000bb8d6 movs r5, 0 | r5 = 0;
0x000bb8d8 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000bb8da ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000bb8dc ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x000bb8de cmp r2, r0 |
0x000bb8e0 str r5, [r4, 0x28] | *((r4 + 0x28)) = r5;
0x000bb8e2 sbcs.w r1, r3, r1 | __asm ("sbcs.w r1, r3, r1");
0x000bb8e6 bge 0xbb8cc |
| } while (r2 >= r0);
0x000bb8e8 adds r2, 1 | r2++;
0x000bb8ea add.w r1, r4, 0x2c | r1 = r4 + 0x2c;
0x000bb8ee adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bb8f2 mov r0, r6 | r0 = r6;
0x000bb8f4 strd r2, r3, [r4, 0x20] | __asm ("strd r2, r3, [r4, 0x20]");
0x000bb8f8 str r1, [sp, 4] | var_4h = r1;
0x000bb8fa add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x000bb8fe str r5, [sp, 8] | var_8h = r5;
0x000bb900 str r1, [sp] | *(sp) = r1;
0x000bb902 bl 0xbabb0 | r0 = fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
0x000bb906 cmp r0, 0 |
| if (r0 != 0) {
0x000bb908 bne.w 0xbb7ea | goto label_0;
| }
0x000bb90c ldr r5, [r4, 0x28] | r5 = *((r4 + 0x28));
0x000bb90e b 0xbb6f6 | goto label_1;
| label_22:
0x000bb910 movs r3, 0 | r3 = 0;
0x000bb912 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| label_16:
0x000bb914 movs r0, 7 | r0 = 7;
0x000bb916 b 0xbb7ea | goto label_0;
| label_23:
0x000bb918 dmb ish | __asm ("dmb ish");
0x000bb91c b 0xbb8a6 | goto label_2;
| label_13:
0x000bb91e add r1, sp, 0x18 | r1 += var_18h;
0x000bb920 mov r0, r5 | r0 = r5;
0x000bb922 bl 0x24218 | fcn_00024218 (r0, r1);
0x000bb926 ldr r6, [sp, 0x18] | r6 = var_18h;
0x000bb928 b 0xbb722 | goto label_3;
| label_12:
0x000bb92a add r1, sp, 0x14 | r1 += var_14h;
0x000bb92c mov r0, r5 | r0 = r5;
0x000bb92e bl 0x24218 | fcn_00024218 (r0, r1);
0x000bb932 b 0xbb712 | goto label_4;
| label_24:
0x000bb934 bl 0x26dbc | fcn_00026dbc (r0);
0x000bb938 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x000bb93a bl 0x7a69c | fcn_0007a69c (r0);
0x000bb93e str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x000bb940 b 0xbb8d4 | goto label_5;
| label_21:
0x000bb942 dmb ish | __asm ("dmb ish");
0x000bb946 b 0xbb858 | goto label_6;
| label_15:
0x000bb948 dmb ish | __asm ("dmb ish");
0x000bb94c b 0xbb77a | goto label_7;
| label_17:
0x000bb94e add.w r1, r4, 0x4c | r1 = r4 + 0x4c;
0x000bb952 mov r0, r5 | r0 = r5;
0x000bb954 bl 0x24218 | fcn_00024218 (r0, r1);
0x000bb958 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x000bb95a b 0xbb7c2 | goto label_8;
| label_19:
0x000bb95c blx 0x6430 | fcn_00006430 ();
0x000bb960 b 0xbb6f8 | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbb978 */
| #include <stdint.h>
|
; (fcn) fcn.000bb978 () | void fcn_000bb978 (int16_t arg_0h, int16_t arg_8h, int16_t arg_efh, int16_t arg1, arithmetic arg2) {
| int16_t var_1h;
| int16_t var_0h;
| int16_t var_4h;
| arithmetic x;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int32_t var_3ch_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int32_t var_50h_2;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int32_t var_70h_2;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
0x000bb978 mov r3, r1 | r3 = r1;
0x000bb97a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000bb97e ldr r2, [r3] | r2 = *(r3);
0x000bb980 sub sp, 0x84 |
0x000bb982 str r1, [sp, 8] | x = r1;
0x000bb984 str r2, [sp, 4] | var_4h = r2;
0x000bb986 ldr.w r2, [pc, 0x6bc] |
0x000bb98a ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000bb98c ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x000bb98e ldr.w r3, [pc, 0x6b8] | r3 = *(0xbc04a);
0x000bb992 add r2, pc | r2 = 0x1779dc;
0x000bb994 str r0, [sp, 0x4c] | var_4ch = r0;
0x000bb996 str r1, [sp, 0x48] | var_48h = r1;
0x000bb998 ldr r3, [r2, r3] |
0x000bb99a ldr.w sb, [r1, 0xc] | sb = *((r1 + 0xc));
0x000bb99e ldr r3, [r3] | r3 = imp.atan;
0x000bb9a0 str r3, [sp, 0x7c] | var_7ch = r3;
0x000bb9a2 mov.w r3, 0 | r3 = 0;
0x000bb9a6 ldrb.w r3, [r0, 0xef] | r3 = *(arg_0hxef);
0x000bb9aa cmp r3, 0 |
| if (r3 == 0) {
0x000bb9ac beq 0xbba3c | goto label_27;
| }
0x000bb9ae ldr.w sl, [pc, 0x69c] | sl = *(0x000bc04c);
0x000bb9b2 add sl, pc | sl += pc;
0x000bb9b4 cmp r4, 0 |
| if (r4 == 0) {
0x000bb9b6 beq 0xbba46 | goto label_5;
| }
| label_2:
0x000bb9b8 ldr r3, [sp, 8] | r3 = x;
0x000bb9ba ldr r2, [sp, 4] | r2 = var_4h;
0x000bb9bc ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000bb9be ldr.w r8, [r2] | r8 = *(r2);
0x000bb9c2 cmp r3, 0 |
| if (r3 <= 0) {
0x000bb9c4 ble 0xbba9e | goto label_28;
| }
0x000bb9c6 subs r5, r2, 4 | r5 = r2 - 4;
| label_8:
0x000bb9c8 movs r7, 0 | r7 = 0;
0x000bb9ca str r4, [sp, 0xc] | var_ch = r4;
0x000bb9cc ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x000bb9d0 mov r6, r7 | r6 = r7;
0x000bb9d2 ldr.w fp, [sp, 8] | fp = x;
0x000bb9d6 mov r4, r5 | r4 = r5;
0x000bb9d8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000bb9dc b 0xbb9f4 |
| while (r3 != 0) {
0x000bb9de ldrb.w sb, [r5, 5] | sb = *((r5 + 5));
0x000bb9e2 cmp.w sb, 0 |
| if (sb == 0) {
0x000bb9e6 beq 0xbba2a | goto label_29;
| }
| label_1:
0x000bb9e8 str r6, [r5, 0x28] | *((r5 + 0x28)) = r6;
| label_0:
0x000bb9ea ldr.w r3, [fp, 8] | r3 = *(arg_8h);
0x000bb9ee adds r7, 1 | r7++;
0x000bb9f0 cmp r3, r7 |
| if (r3 <= r7) {
0x000bb9f2 ble 0xbba4a | goto label_30;
| }
0x000bb9f4 ldr r5, [r4, 4]! | r5 = *((r4 += 4));
0x000bb9f8 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x000bb9fa cmp r3, 0 |
0x000bb9fc bne 0xbb9de |
| }
0x000bb9fe mov r1, r5 | r1 = r5;
0x000bba00 mov r0, r8 | r0 = r8;
0x000bba02 bl 0xbb6c4 | r0 = fcn_000bb6c4 (r0, r1);
0x000bba06 cmp r0, 0 |
| if (r0 == 0) {
0x000bba08 beq 0xbb9ea | goto label_0;
| }
| label_3:
0x000bba0a ldr.w r2, [pc, 0x644] |
0x000bba0e ldr.w r3, [pc, 0x638] | r3 = *(0xbc04a);
0x000bba12 add r2, pc | r2 = 0x177a68;
0x000bba14 ldr r3, [r2, r3] | r3 = imp.atan;
0x000bba16 ldr r2, [r3] | r2 = imp.atan;
0x000bba18 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000bba1a eors r2, r3 | r2 ^= r3;
0x000bba1c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000bba20 bne.w 0xbc038 | goto label_31;
| }
0x000bba24 add sp, 0x84 |
0x000bba26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x000bba2a ldr r0, [r5, 0x28] | r0 = *((r5 + 0x28));
0x000bba2c bl 0x26dbc | fcn_00026dbc (r0);
0x000bba30 ldr r0, [r5, 0x34] | r0 = *((r5 + 0x34));
0x000bba32 bl 0x7a69c | fcn_0007a69c (r0);
0x000bba36 str.w sb, [r5, 0x34] | __asm ("str.w sb, [r5, 0x34]");
0x000bba3a b 0xbb9e8 | goto label_1;
| label_27:
0x000bba3c ldr.w sl, [pc, 0x614] | sl = *(0x000bc054);
0x000bba40 add sl, pc | sl += pc;
0x000bba42 cmp r4, 0 |
| if (r4 != 0) {
0x000bba44 bne 0xbb9b8 | goto label_2;
| }
| label_5:
0x000bba46 movs r0, 0 | r0 = 0;
0x000bba48 b 0xbba0a | goto label_3;
| label_30:
0x000bba4a ldr r4, [sp, 0xc] | r4 = var_ch;
0x000bba4c ldr.w sb, [sp] | sb = *(sp);
0x000bba50 cmp r3, r4 |
0x000bba52 it eq |
| if (r3 != r4) {
0x000bba54 addeq r3, r4, -1 | r3 = r4 + -1;
| }
0x000bba58 subs r7, r3, 1 | r7 = r3 - 1;
| if (r7 < r3) {
0x000bba5a bmi 0xbba98 | goto label_32;
| }
0x000bba5c ldr.w fp, [sp, 4] | fp = var_4h;
0x000bba60 subs r6, r4, 1 | r6 = r4 - 1;
0x000bba62 mov r8, r6 | r8 = r6;
0x000bba64 str r4, [sp, 0xc] | var_ch = r4;
| label_4:
0x000bba66 cmp r7, r8 |
| if (r7 >= r8) {
0x000bba68 bge 0xbba92 | goto label_33;
| }
0x000bba6a add.w r5, fp, r7, lsl 2 | r5 = fp + (r7 << 2);
0x000bba6e mov r6, r7 | r6 = r7;
0x000bba70 str r7, [sp] | *(sp) = r7;
0x000bba72 b 0xbba7e |
| while (r0 >= 0) {
0x000bba74 adds r6, 1 | r6++;
0x000bba76 strd r4, r7, [r5, -0x4] | __asm ("strd r4, r7, [r5, -0x4]");
0x000bba7a cmp r6, r8 |
| if (r6 == r8) {
0x000bba7c beq 0xbba90 | goto label_34;
| }
0x000bba7e ldr r7, [r5] | r7 = *(r5);
0x000bba80 ldr r4, [r5, 4]! | r4 = *((r5 += 4));
0x000bba84 mov r0, r7 | r0 = r7;
0x000bba86 mov r1, r4 | r1 = r4;
0x000bba88 bl 0x26418 | r0 = fcn_00026418 (r0, r1);
0x000bba8c cmp r0, 0 |
0x000bba8e bge 0xbba74 |
| }
| label_34:
0x000bba90 ldr r7, [sp] | r7 = *(sp);
| label_33:
0x000bba92 subs r7, 1 | r7--;
| if (r7 >= 1) {
0x000bba94 bhs 0xbba66 | goto label_4;
| }
0x000bba96 ldr r4, [sp, 0xc] | r4 = var_ch;
| label_32:
0x000bba98 ldr r3, [sp, 4] | r3 = var_4h;
0x000bba9a ldr.w r8, [r3] | r8 = *(r3);
| label_28:
0x000bba9e ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x000bbaa2 movs r2, 0 | r2 = 0;
0x000bbaa4 ldr r0, [sp, 8] | r0 = x;
0x000bbaa6 str r2, [r0, 8] | *((r0 + 8)) = r2;
0x000bbaa8 cmp r3, 0 |
| if (r3 == 0) {
0x000bbaaa beq 0xbba46 | goto label_5;
| }
0x000bbaac ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bbaae ldr.w r5, [r8, 0x3c] | r5 = *((r8 + 0x3c));
0x000bbab2 ldr.w r7, [r8, 0x40] | r7 = *((r8 + 0x40));
0x000bbab6 ldr r1, [r3] | r1 = *(r3);
0x000bbab8 eor r3, sb, 0x10 | r3 = sb ^ 0x10;
0x000bbaba lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x000bbabc str r5, [r0, 0x34] | *((r0 + 0x34)) = r5;
0x000bbabe str r7, [r0, 0x30] | *((r0 + 0x30)) = r7;
0x000bbac0 subs r2, r1, r2 | r2 = r1 - r2;
0x000bbac2 it ne |
| if (r2 == r1) {
0x000bbac4 movne r2, 1 | r2 = 1;
| }
0x000bbac6 ands.w r2, r2, r3, lsr 4 | r2 &= (r3 >> 4);
| if (r2 != r2) {
0x000bbaca bne.w 0xbbf94 | goto label_35;
| }
| label_20:
0x000bbace cmp r4, 1 |
0x000bbad0 itt le |
| if (r4 > 1) {
0x000bbad2 movle r3, 1 | r3 = 1;
| }
| if (r4 > 1) {
0x000bbad4 movle fp, r3 |
| }
| if (r4 <= 1) {
0x000bbad6 ble 0xbbb0e | goto label_36;
| }
0x000bbad8 ldr r6, [sp, 4] | r6 = var_4h;
0x000bbada mov.w fp, 1 |
0x000bbade b 0xbbafa |
| while (r2 != 0) {
0x000bbae0 ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x000bbae2 cmp r5, r2 |
| if (r5 != r2) {
0x000bbae4 bne 0xbbb04 | goto label_37;
| }
0x000bbae6 ldr r1, [r3, 0x40] | r1 = *((r3 + 0x40));
0x000bbae8 mov r2, r5 | r2 = r5;
0x000bbaea mov r0, r7 | r0 = r7;
0x000bbaec blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
| if (r0 != 0) {
0x000bbaf0 cbnz r0, 0xbbb04 | goto label_37;
| }
0x000bbaf2 add.w fp, fp, 1 |
0x000bbaf6 cmp r4, fp |
| if (r4 == fp) {
0x000bbaf8 beq 0xbbb48 | goto label_38;
| }
0x000bbafa ldr r3, [r6, 4]! | r3 = *((r6 += 4));
0x000bbafe ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x000bbb00 cmp r2, 0 |
0x000bbb02 bne 0xbbae0 |
| }
| label_37:
0x000bbb04 sub.w r3, fp, 1 | r3 = fp - 1;
0x000bbb08 clz r3, r3 | r3 &= r3;
0x000bbb0c lsrs r3, r3, 5 | r3 >>= 5;
| label_36:
0x000bbb0e ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bbb10 tst.w sb, 0x22 |
0x000bbb14 and r3, r3, 1 | r3 &= 1;
0x000bbb18 it ne |
| if ((sb & 0x22) == 0) {
0x000bbb1a movne r3, 0 | r3 = 0;
| }
0x000bbb1c ldrb.w r0, [r2, 0xef] | r0 = *((r2 + 0xef));
0x000bbb1e lsls r7, r5, 3 | r7 = r5 << 3;
| if (r3 != 0) {
0x000bbb20 cbz r3, 0xbbb4e |
0x000bbb22 ldr.w r3, [r8, 0x38] | r3 = *((r8 + 0x38));
0x000bbb26 cmp r0, 0 |
| if (r0 == 0) {
0x000bbb28 beq.w 0xbbf26 | goto label_39;
| }
| if (r3 != 0) {
0x000bbb2c cbnz r3, 0xbbb4e | goto label_40;
| }
0x000bbb2e ldrd r7, r3, [r8, 0x48] | __asm ("ldrd r7, r3, [r8, 0x48]");
0x000bbb32 ldr r2, [sp, 8] | r2 = x;
0x000bbb34 str r3, [r2, 0x3c] | *((r2 + 0x3c)) = r3;
| label_18:
0x000bbb36 ldr r3, [sp, 8] | r3 = x;
0x000bbb38 mov.w fp, 1 |
0x000bbb3c str r7, [r3, 0x38] | *((r3 + 0x38)) = r7;
| label_23:
0x000bbb3e ldr r3, [sp, 8] | r3 = x;
0x000bbb40 movs r0, 0x64 | r0 = 0x64;
0x000bbb42 str.w fp, [r3, 8] | __asm ("str.w fp, [r3, 8]");
0x000bbb46 b 0xbba0a | goto label_3;
| label_38:
0x000bbb48 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000bbb4a ldrb.w r0, [r3, 0xef] | r0 = *((r3 + 0xef));
| }
| label_40:
0x000bbb4e ldr r3, [sp, 4] | r3 = var_4h;
0x000bbb50 movs r6, 0 | r6 = 0;
0x000bbb52 ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x000bbb56 subs r5, r3, 4 | r5 = r3 - 4;
0x000bbb58 mov r7, r5 | r7 = r5;
0x000bbb5a b 0xbbb60 |
| while (r6 != 1) {
0x000bbb5c ldrb.w r0, [r8, 0xef] | r0 = *((r8 + 0xef));
0x000bbb60 ldr r1, [r7, 4]! | r1 = *((r7 += 4));
0x000bbb64 adds r6, 1 | r6++;
0x000bbb66 bl 0x7b714 | fcn_0007b714 (r0);
0x000bbb68 ldc2l p5, c4, [r5, 0x178] | __asm ("ldc2l p5, c4, [r5, 0x178]");
0x000bbb6c bne 0xbbb5c |
| }
0x000bbb6e ldr r6, [sp, 4] | r6 = var_4h;
0x000bbb70 mov r3, sl | r3 = sl;
0x000bbb72 mov r1, fp | r1 = fp;
0x000bbb74 mov r2, fp | r2 = fp;
0x000bbb76 mov r0, r6 | r0 = r6;
0x000bbb78 bl 0x24870 | fcn_00024870 (r0, r1, r2, r3);
0x000bbb7c ldr r1, [r6] | r1 = *(r6);
0x000bbb7e ldr r3, [r1, 0x50] | r3 = *((r1 + 0x50));
0x000bbb80 cmp r3, 0 |
| if (r3 == 0) {
0x000bbb82 beq.w 0xbbd64 | goto label_41;
| }
0x000bbb86 and r2, sb, 2 | r2 = sb & 2;
0x000bbb8a ldr.w r3, [pc, 0x4cc] |
0x000bbb8e str r2, [sp, 0x2c] | var_2ch = r2;
0x000bbb90 and r2, sb, 1 | r2 = sb & 1;
0x000bbb94 str r2, [sp, 0x28] | var_28h = r2;
0x000bbb96 and r2, sb, 4 | r2 = sb & 4;
0x000bbb9a add r3, pc | r3 = 0x177bf8;
0x000bbb9c str r2, [sp, 0x30] | var_30h = r2;
0x000bbb9e str.w sb, [sp, 0x5c] | __asm ("str.w sb, [var_5ch]");
0x000bbba2 and r2, sb, 0x20 | r2 = sb & 0x20;
0x000bbba6 mov sb, fp | sb = fp;
0x000bbba8 ldr.w fp, [sp, 0x4c] | fp = var_4ch;
0x000bbbac str r3, [sp, 0x58] | var_58h = r3;
0x000bbbae movs r3, 0 | r3 = 0;
0x000bbbb0 str r3, [sp, 0x14] | var_14h = r3;
0x000bbbb2 str r3, [sp, 0x18] | var_18h = r3;
0x000bbbb4 str r3, [sp] | *(sp) = r3;
0x000bbbb6 add r3, sp, 0x6c | r3 += var_6ch;
0x000bbbb8 str r3, [sp, 0x1c] | var_1ch = r3;
0x000bbbba add r3, sp, 0x68 | r3 += var_68h;
0x000bbbbc str r2, [sp, 0x38] | var_38h = r2;
0x000bbbbe str r3, [sp, 0x20] | var_20h = r3;
0x000bbbc0 str.w sl, [sp, 0x34] | __asm ("str.w sl, [var_34h]");
0x000bbbc4 str r4, [sp, 0x60] | var_60h = r4;
0x000bbbc6 str r5, [sp, 0x64] | var_64h = r5;
| label_7:
0x000bbbc8 movs r3, 0 | r3 = 0;
0x000bbbca mov r0, fp | r0 = fp;
0x000bbbcc strd r3, r3, [sp, 0x68] | __asm ("strd r3, r3, [var_6ch]");
0x000bbbd0 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch]");
0x000bbbd4 ldrd r7, r5, [r1, 0x58] | __asm ("ldrd r7, r5, [r1, 0x58]");
0x000bbbd8 bl 0x7aba4 | fcn_0007aba4 (r0, r1, r2, r3, r4);
0x000bbbdc cmp.w sb, 1 |
| if (sb == 1) {
0x000bbbe0 beq.w 0xbbfbe | goto label_42;
| }
0x000bbbe4 ldr r6, [sp, 4] | r6 = var_4h;
0x000bbbe6 movs r4, 1 | r4 = 1;
0x000bbbe8 b 0xbbc06 |
| while (r3 != 0) {
0x000bbbea ldrd r2, r3, [r1, 0x58] | __asm ("ldrd r2, r3, [r1, 0x58]");
0x000bbbee cmp r3, r5 |
0x000bbbf0 it eq |
| if (r3 == r5) {
0x000bbbf2 cmpeq r2, r7 | __asm ("cmpeq r2, r7");
| }
| if (r3 != r5) {
0x000bbbf4 bne 0xbbc10 | goto label_43;
| }
0x000bbbf6 movs r3, 0 | r3 = 0;
0x000bbbf8 adds r4, 1 | r4++;
0x000bbbfa mov r0, fp | r0 = fp;
0x000bbbfc mov r2, r3 | r2 = r3;
0x000bbbfe bl 0x7aba4 | fcn_0007aba4 (r0, r1, r2, r3, r4);
0x000bbc02 cmp r4, sb |
| if (r4 == sb) {
0x000bbc04 beq 0xbbc10 | goto label_43;
| }
0x000bbc06 ldr r1, [r6, 4]! | r1 = *((r6 += 4));
0x000bbc0a ldr r3, [r1, 0x50] | r3 = *((r1 + 0x50));
0x000bbc0c cmp r3, 0 |
0x000bbc0e bne 0xbbbea |
| }
| label_43:
0x000bbc10 str r4, [sp, 0x10] | var_10h = r4;
| label_21:
0x000bbc12 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bbc14 cmp r3, 0 |
| if (r3 != 0) {
0x000bbc16 bne.w 0xbbdee | goto label_44;
| }
| label_11:
0x000bbc1a ldr r3, [sp, 0x2c] | r3 = var_2ch;
| if (r3 != 0) {
0x000bbc1c cbz r3, 0xbbc26 |
0x000bbc1e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000bbc20 cmp r3, 0 |
| if (r3 <= 0) {
0x000bbc22 ble.w 0xbbd36 | goto label_12;
| }
| }
0x000bbc26 ldrb.w r3, [fp, 0xef] | r3 = *(arg_efh);
0x000bbc2a cmp r3, 0 |
| if (r3 == 0) {
0x000bbc2c beq.w 0xbbdc2 | goto label_45;
| }
0x000bbc30 ldr r3, [sp] | r3 = *(sp);
0x000bbc32 cmp r3, 0 |
| if (r3 <= 0) {
0x000bbc34 ble.w 0xbbde2 | goto label_46;
| }
0x000bbc38 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000bbc3a ldr r1, [sp, 0x18] | r1 = var_18h;
0x000bbc3c cmp r7, r2 |
0x000bbc3e sbcs.w r3, r5, r1 | __asm ("sbcs.w r3, r5, r1");
| if (r7 >= r2) {
0x000bbc42 bge.w 0xbbf8e | goto label_47;
| }
0x000bbc46 subs r6, r2, r7 | r6 = r2 - r7;
0x000bbc48 sbc.w r8, r1, r5 | __asm ("sbc.w r8, r1, r5");
| label_10:
0x000bbc4c mov r3, r6 | r3 = r6;
0x000bbc4e mov r2, r8 | r2 = r8;
0x000bbc50 movs r1, 0 | r1 = 0;
| do {
0x000bbc52 lsrs r3, r3, 7 | r3 >>= 7;
0x000bbc54 adds r1, 1 | r1++;
0x000bbc56 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000bbc5a lsrs r2, r2, 7 | r2 >>= 7;
0x000bbc5c orrs.w r0, r3, r2 | r0 = r3 | r2;
0x000bbc60 bne 0xbbc52 |
| } while (r0 != r3);
0x000bbc62 ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 != 0) {
0x000bbc64 cbz r3, 0xbbc6c |
0x000bbc66 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000bbc68 adds r3, 1 | r3++;
0x000bbc6a add r1, r3 | r1 += r3;
| }
0x000bbc6c ldr r3, [sp] | r3 = *(sp);
0x000bbc6e asr.w sl, r3, 0x1f | sl = r3 >> 0x1f;
0x000bbc72 adds r3, r1, r3 | r3 = r1 + r3;
0x000bbc74 adc.w sl, sl, r1, asr 31 | __asm ("adc.w sl, sl, r1, asr 31");
0x000bbc78 ldr r1, [sp, 8] | r1 = x;
0x000bbc7a adds.w r2, r3, 0x14 | r2 = r3 + 0x14;
0x000bbc7e adc sl, sl, 0 | __asm ("adc sl, sl, 0");
0x000bbc82 ldrd r0, r3, [r1, 0x18] | __asm ("ldrd r0, r3, [r1, 0x18]");
0x000bbc86 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x000bbc88 cmp r0, r2 |
0x000bbc8a sbcs.w r3, r3, sl | __asm ("sbcs.w r3, r3, sl");
| if (r0 < r2) {
0x000bbc8e blt.w 0xbbe52 | goto label_48;
| }
| label_13:
0x000bbc92 ldr r3, [sp] | r3 = *(sp);
0x000bbc94 adds r3, r1, r3 | r3 = r1 + r3;
0x000bbc96 str r3, [sp, 0xc] | var_ch = r3;
0x000bbc98 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000bbc9a cmp r3, 0 |
| if (r3 == 0) {
0x000bbc9c beq.w 0xbbdfe | goto label_49;
| }
0x000bbca0 ldrd r3, r2, [sp, 0x68] | __asm ("ldrd r3, r2, [var_6ch]");
0x000bbca4 ldrb r1, [r3] | r1 = *(r3);
0x000bbca6 adds r2, r3, r2 | r2 = r3 + r2;
0x000bbca8 str r2, [sp, 0x24] | var_24h = r2;
0x000bbcaa cmp r1, 1 |
| if (r1 == 1) {
0x000bbcac beq.w 0xbbeca | goto label_50;
| }
0x000bbcb0 cmp r1, 2 |
0x000bbcb2 itt ne |
| if (r1 == 2) {
0x000bbcb4 movne sl, 0 | sl = 0;
| }
| if (r1 != 2) {
0x000bbcb8 mov r4, sl | r4 = sl;
| }
| if (r1 == 2) {
0x000bbcba beq.w 0xbbed8 | goto label_51;
| }
| label_16:
0x000bbcbe cmp r1, 1 |
| if (r1 < 1) {
0x000bbcc0 bls 0xbbcd0 | goto label_52;
| }
| do {
0x000bbcc2 and r2, r1, 0x80 | r2 = r1 & 0x80;
0x000bbcc6 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x000bbcca orrs r2, r1 | r2 |= r1;
0x000bbccc cmp r2, 1 |
0x000bbcce bhi 0xbbcc2 |
| } while (r2 > 1);
| label_52:
0x000bbcd0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000bbcd2 cmp r3, r2 |
| if (r3 >= r2) {
0x000bbcd4 bhs 0xbbd1c | goto label_53;
| }
| label_15:
0x000bbcd6 str r7, [sp, 0x44] | var_44h = r7;
0x000bbcd8 add r1, sp, 0x70 | r1 += var_70h;
0x000bbcda ldr r7, [sp, 0x24] | r7 = var_24h;
0x000bbcdc str r5, [sp, 0x24] | var_24h = r5;
0x000bbcde ldr r5, [sp, 0xc] | r5 = var_ch;
0x000bbce0 strd sb, fp, [sp, 0x3c] | __asm ("strd sb, fp, [var_0hx3c]");
0x000bbce4 strd r6, r8, [sp, 0x50] | __asm ("strd r6, r8, [var_50h]");
| label_6:
0x000bbce8 add.w r8, r3, 1 | r8 = r3 + 1;
0x000bbcec mov r0, r8 | r0 = r8;
0x000bbcee bl 0x24184 | fcn_00024184 (r0, r1);
0x000bbcf2 ldrb.w r6, [r8, r0] | r6 = *((r8 + r0));
0x000bbcf6 add.w r3, r8, r0 | r3 = r8 + r0;
0x000bbcfa cmp r6, 2 |
| if (r6 == 2) {
0x000bbcfc beq 0xbbd6c | goto label_54;
| }
| label_9:
0x000bbcfe cmp r6, 1 |
| if (r6 < 1) {
0x000bbd00 bls 0xbbd10 | goto label_55;
| }
| do {
0x000bbd02 and r2, r6, 0x80 | r2 = r6 & 0x80;
0x000bbd06 ldrb r6, [r3, 1]! | r6 = *((r3 += 1));
0x000bbd0a orrs r2, r6 | r2 |= r6;
0x000bbd0c cmp r2, 1 |
0x000bbd0e bhi 0xbbd02 |
| } while (r2 > 1);
| label_55:
0x000bbd10 cmp r7, r3 |
| if (r7 > r3) {
0x000bbd12 bhi 0xbbce8 | goto label_6;
| }
0x000bbd14 ldrd sb, fp, [sp, 0x3c] | __asm ("ldrd sb, fp, [var_3ch]");
0x000bbd18 ldr r7, [sp, 0x44] | r7 = var_44h;
0x000bbd1a ldr r5, [sp, 0x24] | r5 = var_24h;
| label_53:
0x000bbd1c cmp.w sl, 0 |
| if (sl != 0) {
0x000bbd20 beq 0xbbd2a |
0x000bbd22 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000bbd24 movs r3, 0 | r3 = 0;
0x000bbd26 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x000bbd28 adds r4, 1 | r4++;
| }
| if (r4 != 0) {
0x000bbd2a cbz r4, 0xbbd36 |
0x000bbd2c ldr r3, [sp] | r3 = *(sp);
0x000bbd2e strd r7, r5, [sp, 0x14] | __asm ("strd r7, r5, [var_14h]");
0x000bbd32 add r3, r4 | r3 += r4;
0x000bbd34 str r3, [sp] | *(sp) = r3;
| }
| label_12:
0x000bbd36 ldr r4, [sp, 4] | r4 = var_4h;
0x000bbd38 mov r1, sb | r1 = sb;
0x000bbd3a ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bbd3c ldr r2, [sp, 0x10] | r2 = var_10h;
0x000bbd3e mov r0, r4 | r0 = r4;
0x000bbd40 bl 0x24870 | fcn_00024870 (r0, r1, r2, r3);
0x000bbd42 ldc2 p8, c6, [r6, 0x84] | __asm ("ldc2 p8, c6, [r6, 0x84]");
0x000bbd46 ldr r3, [r1, 0x50] | r3 = *((r1 + 0x50));
0x000bbd48 cmp r3, 0 |
| if (r3 != 0) {
0x000bbd4a bne.w 0xbbbc8 | goto label_7;
| }
0x000bbd4e ldr r2, [sp] | r2 = *(sp);
0x000bbd50 mov fp, sb |
0x000bbd52 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x000bbd56 ldr r4, [sp, 0x60] | r4 = var_60h;
0x000bbd58 cmp r2, 0 |
0x000bbd5a ldr.w sb, [sp, 0x5c] | sb = var_5ch;
0x000bbd5e ldr r5, [sp, 0x64] | r5 = var_64h;
| if (r2 > 0) {
0x000bbd60 bgt.w 0xbbfca | goto label_56;
| }
| label_41:
0x000bbd64 ldr r3, [sp, 8] | r3 = x;
0x000bbd66 str.w fp, [r3, 8] | __asm ("str.w fp, [r3, 8]");
0x000bbd6a b 0xbb9c8 | goto label_8;
| label_54:
0x000bbd6c cmp.w sl, 0 |
| if (sl == 0) {
0x000bbd70 beq.w 0xbbe96 | goto label_57;
| }
| label_14:
0x000bbd74 mov.w r2, 1 | r2 = 1;
0x000bbd78 add.w lr, r4, 1 | lr = r4 + 1;
0x000bbd7c strb r2, [r5, r4] | *((r5 + r4)) = r2;
0x000bbd7e add.w sl, r5, lr | sl = r5 + lr;
0x000bbd82 ldrd r2, r6, [sp, 0x70] | __asm ("ldrd r2, r6, [var_70h]");
0x000bbd86 mov r4, sl | r4 = sl;
| do {
0x000bbd88 lsr.w fp, r2, 7 |
0x000bbd8c orn ip, r2, 0x7f | ip = r2 | 0x7f;
| ip = ~ip;
0x000bbd90 uxtb.w sb, r2 | sb = (int8_t) r2;
0x000bbd94 orr.w r2, fp, r6, lsl 25 | r2 = fp | (r6 << 25);
0x000bbd98 lsrs r6, r6, 7 | r6 >>= 7;
0x000bbd9a mov fp, r4 |
0x000bbd9c strb ip, [r4], 1 | *(r4) = ip;
| r4++;
0x000bbda0 orrs.w ip, r2, r6 |
0x000bbda4 bne 0xbbd88 |
| } while (ip != r2);
0x000bbda6 sub.w r4, r4, sl | r4 -= sl;
0x000bbdaa mov.w r2, 2 | r2 = 2;
0x000bbdae add r4, lr | r4 += lr;
0x000bbdb0 strb.w sb, [fp] | *(fp) = sb;
0x000bbdb4 mov.w sl, 1 | sl = 1;
0x000bbdb8 strb r2, [r5, r4] | *((r5 + r4)) = r2;
0x000bbdba adds r4, 1 | r4++;
0x000bbdbc ldrb.w r6, [r8, r0] | r6 = *((r8 + r0));
0x000bbdc0 b 0xbbcfe | goto label_9;
| label_45:
0x000bbdc2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000bbdc4 ldr r2, [sp] | r2 = *(sp);
0x000bbdc6 cmp r3, r7 |
0x000bbdc8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000bbdca sbcs r3, r5 | __asm ("sbcs r3, r5");
0x000bbdcc ite ge |
| if (r3 < r7) {
0x000bbdce movge r3, 1 | r3 = 1;
| }
| if (r3 >= r7) {
0x000bbdd0 movlt r3, 0 | r3 = 0;
| }
0x000bbdd2 cmp r2, 0 |
0x000bbdd4 ite le |
| if (r2 > 0) {
0x000bbdd6 movle r3, 0 | r3 = 0;
| }
| if (r2 <= 0) {
0x000bbdd8 andgt r3, r3, 1 | r3 &= 1;
| }
0x000bbddc cmp r3, 0 |
| if (r3 != 0) {
0x000bbdde bne.w 0xbbf8e | goto label_47;
| }
| label_46:
0x000bbde2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000bbde4 subs r6, r7, r3 | r6 = r7 - r3;
0x000bbde6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000bbde8 sbc.w r8, r5, r3 | __asm ("sbc.w r8, r5, r3");
0x000bbdec b 0xbbc4c | goto label_10;
| label_44:
0x000bbdee ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bbdf0 movs r1, 0 | r1 = 0;
0x000bbdf2 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x000bbdf4 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch]");
0x000bbdf8 bl 0x25074 | fcn_00025074 (r0, r1, r2, r3);
0x000bbdfc b 0xbbc1a | goto label_11;
| label_49:
0x000bbdfe ldr r3, [sp, 0xc] | r3 = var_ch;
| do {
0x000bbe00 lsrs r1, r6, 7 | r1 = r6 >> 7;
0x000bbe02 orn r2, r6, 0x7f | r2 = r6 | 0x7f;
| r2 = ~r2;
0x000bbe06 uxtb r0, r6 | r0 = (int8_t) r6;
0x000bbe08 orr.w r6, r1, r8, lsl 25 | r6 = r1 | (r8 << 25);
0x000bbe0c lsr.w r8, r8, 7 | r8 >>= 7;
0x000bbe10 mov r1, r3 | r1 = r3;
0x000bbe12 strb r2, [r3], 1 | *(r3) = r2;
| r3++;
0x000bbe16 orrs.w r2, r6, r8 | r2 = r6 | r8;
0x000bbe1a bne 0xbbe00 |
| } while (r2 != r6);
0x000bbe1c ldr r2, [sp, 0xc] | r2 = var_ch;
0x000bbe1e strb r0, [r1] | *(r1) = r0;
0x000bbe20 strd r7, r5, [sp, 0x14] | __asm ("strd r7, r5, [var_14h]");
0x000bbe24 subs r3, r3, r2 | r3 -= r2;
0x000bbe26 ldr r2, [sp] | r2 = *(sp);
0x000bbe28 add r2, r3 | r2 += r3;
0x000bbe2a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000bbe2c str r2, [sp] | *(sp) = r2;
0x000bbe2e cmp r3, 0 |
| if (r3 == 0) {
0x000bbe30 beq 0xbbd36 | goto label_12;
| }
0x000bbe32 ldr r4, [sp, 8] | r4 = x;
0x000bbe34 mov r6, r2 | r6 = r2;
0x000bbe36 ldr r5, [sp, 0x6c] | r5 = var_6ch;
0x000bbe38 ldr r1, [sp, 0x68] | r1 = var_68h;
0x000bbe3a ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000bbe3c add r0, r2 | r0 += r2;
0x000bbe3e mov r2, r5 | r2 = r5;
0x000bbe40 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bbe44 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000bbe46 add r5, r6 | r5 += r6;
0x000bbe48 movs r2, 0 | r2 = 0;
0x000bbe4a strb r2, [r3, r5] | *((r3 + r5)) = r2;
0x000bbe4c adds r3, r5, 1 | r3 = r5 + 1;
0x000bbe4e str r3, [sp] | *(sp) = r3;
0x000bbe50 b 0xbbd36 | goto label_12;
| label_48:
0x000bbe52 ldr r3, [sp, 8] | r3 = x;
0x000bbe54 adds r4, r2, r2 | r4 = r2 + r2;
0x000bbe56 adc.w sl, sl, sl | __asm ("adc.w sl, sl, sl");
0x000bbe5a strd r4, sl, [r3, 0x18] | __asm ("strd r4, sl, [r3, 0x18]");
0x000bbe5e ldr r3, [sp, 0x58] | r3 = var_58h;
0x000bbe60 ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000bbe64 cmp r3, 0 |
| if (r3 != 0) {
0x000bbe66 bne 0xbbf12 | goto label_58;
| }
0x000bbe68 str r1, [sp, 0xc] | var_ch = r1;
0x000bbe6a bl 0x25da0 | fcn_00025da0 ();
0x000bbe6e ldr r1, [sp, 0xc] | r1 = var_ch;
0x000bbe70 cmp r0, 0 |
| if (r0 != 0) {
0x000bbe72 bne 0xbbf22 | goto label_24;
| }
0x000bbe74 str r1, [sp, 0xc] | var_ch = r1;
0x000bbe76 bl 0x5a4b8 | fcn_0005a4b8 ();
0x000bbe7a ldr r1, [sp, 0xc] | r1 = var_ch;
0x000bbe7c cmp r0, 0 |
| if (r0 != 0) {
0x000bbe7e bne 0xbbf22 | goto label_24;
| }
| label_17:
0x000bbe80 mov r0, r1 | r0 = r1;
0x000bbe82 mov r2, r4 | r2 = r4;
0x000bbe84 mov r3, sl | r3 = sl;
0x000bbe86 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bbe8a mov r1, r0 | r1 = r0;
0x000bbe8c cmp r0, 0 |
| if (r0 == 0) {
0x000bbe8e beq 0xbbf22 | goto label_24;
| }
0x000bbe90 ldr r3, [sp, 8] | r3 = x;
0x000bbe92 str r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
0x000bbe94 b 0xbbc92 | goto label_13;
| label_57:
0x000bbe96 ldrd r2, r6, [sp, 0x50] | __asm ("ldrd r2, r6, [var_50h]");
0x000bbe9a add.w fp, r5, r4 |
0x000bbe9e mov ip, fp |
| do {
0x000bbea0 lsr.w sb, r2, 7 | sb = r2 >> 7;
0x000bbea4 orn lr, r2, 0x7f | lr = r2 | 0x7f;
| lr = ~lr;
0x000bbea8 uxtb.w sl, r2 | sl = (int8_t) r2;
0x000bbeac orr.w r2, sb, r6, lsl 25 | r2 = sb | (r6 << 25);
0x000bbeb0 lsrs r6, r6, 7 | r6 >>= 7;
0x000bbeb2 mov sb, ip | sb = ip;
0x000bbeb4 strb lr, [ip], 1 |
0x000bbeb8 orrs.w lr, r2, r6 | lr = r2 | r6;
0x000bbebc bne 0xbbea0 |
| } while (lr != r2);
0x000bbebe sub.w ip, ip, fp |
0x000bbec2 strb.w sl, [sb] | *(sb) = sl;
0x000bbec6 add r4, ip | r4 += ip;
0x000bbec8 b 0xbbd74 | goto label_14;
| label_50:
0x000bbeca cmp r3, r2 |
0x000bbecc itt lo |
| if (r3 >= r2) {
0x000bbece movlo r4, 0 | r4 = 0;
| }
| if (r3 < r2) {
0x000bbed0 movlo sl, r4 | sl = r4;
| goto label_59;
| }
| if (r3 <= r2) {
| label_59:
0x000bbed2 blo.w 0xbbcd6 | goto label_15;
| }
0x000bbed6 b 0xbbd36 | goto label_12;
| label_51:
0x000bbed8 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000bbeda mov r2, r6 | r2 = r6;
0x000bbedc mov r1, r8 | r1 = r8;
| do {
0x000bbede lsr.w ip, r2, 7 |
0x000bbee2 orn r4, r2, 0x7f | r4 = r2 | 0x7f;
| r4 = ~r4;
0x000bbee6 uxtb.w sl, r2 | sl = (int8_t) r2;
0x000bbeea mov lr, r0 | lr = r0;
0x000bbeec orr.w r2, ip, r1, lsl 25 | r2 = ip | (r1 << 25);
0x000bbef0 lsrs r1, r1, 7 | r1 >>= 7;
0x000bbef2 strb r4, [r0], 1 | *(r0) = r4;
| r0++;
0x000bbef6 orrs.w r4, r2, r1 | r4 = r2 | r1;
0x000bbefa bne 0xbbede |
| } while (r4 != r2);
0x000bbefc ldr r2, [sp, 0xc] | r2 = var_ch;
0x000bbefe strb.w sl, [lr] | *(lr) = sl;
0x000bbf02 mov.w sl, 1 | sl = 1;
0x000bbf06 subs r2, r0, r2 | r2 = r0 - r2;
0x000bbf08 adds r4, r2, 1 | r4 = r2 + 1;
0x000bbf0a movs r2, 2 | r2 = 2;
0x000bbf0c strb r2, [r0] | *(r0) = r2;
0x000bbf0e ldrb r1, [r3] | r1 = *(r3);
0x000bbf10 b 0xbbcbe | goto label_16;
| label_58:
0x000bbf12 dmb ish | __asm ("dmb ish");
0x000bbf16 b 0xbbe80 | goto label_17;
| label_19:
0x000bbf18 ldr r1, [sp, 8] | r1 = x;
0x000bbf1a movs r2, 1 | r2 = 1;
0x000bbf1c ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000bbf1e str r2, [r1, 8] | *((r1 + 8)) = r2;
0x000bbf20 str r3, [r1, 0x38] | *((r1 + 0x38)) = r3;
| label_24:
0x000bbf22 movs r0, 7 | r0 = 7;
0x000bbf24 b 0xbba0a | goto label_3;
| label_39:
0x000bbf26 ldrd r7, r5, [r8, 0x48] | __asm ("ldrd r7, r5, [r8, 0x48]");
0x000bbf2a ldr r0, [sp, 8] | r0 = x;
0x000bbf2c str r5, [r0, 0x3c] | *((r0 + 0x3c)) = r5;
0x000bbf2e cmp r3, 0 |
| if (r3 == 0) {
0x000bbf30 beq.w 0xbbb36 | goto label_18;
| }
0x000bbf34 ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x000bbf36 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x000bbf38 ldr r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x000bbf3a ldr r4, [r0, 0x10] | r4 = *((r0 + 0x10));
0x000bbf3c cmp r1, r5 |
0x000bbf3e sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r1 >= r5) {
0x000bbf40 bge 0xbbf7e | goto label_60;
| }
0x000bbf42 ldr r2, [pc, 0x118] |
0x000bbf44 adds.w r8, r5, r5 | r8 = r5 + r5;
0x000bbf48 adc.w r6, r3, r3 | __asm ("adc.w r6, r3, r3");
0x000bbf4c add r2, pc |
0x000bbf4e ldr.w r2, [r2, 0xd0] | r2 = *(0x17807e);
0x000bbf52 strd r8, r6, [r0, 0x18] | __asm ("strd r8, r6, [r0, 0x18]");
0x000bbf56 cmp r2, 0 |
| if (r2 != 0) {
0x000bbf58 bne 0xbbfc4 | goto label_61;
| }
0x000bbf5a bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bbf5e cmp r0, 0 |
| if (r0 != 0) {
0x000bbf60 bne 0xbbf18 | goto label_19;
| }
0x000bbf62 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bbf66 cmp r0, 0 |
| if (r0 != 0) {
0x000bbf68 bne 0xbbf18 | goto label_19;
| }
| label_22:
0x000bbf6a mov r0, r4 | r0 = r4;
0x000bbf6c mov r2, r8 | r2 = r8;
0x000bbf6e mov r3, r6 | r3 = r6;
0x000bbf70 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bbf74 mov r4, r0 | r4 = r0;
0x000bbf76 cmp r0, 0 |
| if (r0 == 0) {
0x000bbf78 beq 0xbbf18 | goto label_19;
| }
0x000bbf7a ldr r3, [sp, 8] | r3 = x;
0x000bbf7c str r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
| label_60:
0x000bbf7e mov r1, r7 | r1 = r7;
0x000bbf80 mov r2, r5 | r2 = r5;
0x000bbf82 mov r0, r4 | r0 = r4;
0x000bbf84 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bbf88 ldr r3, [sp, 8] | r3 = x;
0x000bbf8a ldr r7, [r3, 0x10] | r7 = *((r3 + 0x10));
0x000bbf8c b 0xbbb36 | goto label_18;
| label_47:
0x000bbf8e movw r0, 0x10b | r0 = 0x10b;
0x000bbf92 b 0xbba0a | goto label_3;
| label_35:
0x000bbf94 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bbf96 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000bbf98 cmp r5, r2 |
| if (r5 < r2) {
0x000bbf9a blt.w 0xbba46 | goto label_5;
| }
0x000bbf9e eor r3, sb, 8 | r3 = sb ^ 8;
0x000bbfa2 ite gt |
| if (r5 <= r2) {
0x000bbfa4 movgt r0, 1 | r0 = 1;
| }
| if (r5 > r2) {
0x000bbfa6 movle r0, 0 | r0 = 0;
| }
0x000bbfa8 ands.w r0, r0, r3, lsr 3 | r0 &= (r3 >> 3);
| if (r0 != r0) {
0x000bbfac bne.w 0xbba46 | goto label_5;
| }
0x000bbfb0 mov r0, r7 | r0 = r7;
0x000bbfb2 blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x000bbfb6 cmp r0, 0 |
| if (r0 == 0) {
0x000bbfb8 beq.w 0xbbace | goto label_20;
| }
0x000bbfbc b 0xbba46 | goto label_5;
| label_42:
0x000bbfbe str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x000bbfc2 b 0xbbc12 | goto label_21;
| label_61:
0x000bbfc4 dmb ish | __asm ("dmb ish");
0x000bbfc8 b 0xbbf6a | goto label_22;
| label_56:
0x000bbfca ldr r4, [sp, 8] | r4 = x;
0x000bbfcc asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000bbfce adds r2, 0x14 | r2 += 0x14;
0x000bbfd0 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bbfd4 ldrd r0, r1, [r4, 0x18] | __asm ("ldrd r0, r1, [r4, 0x18]");
0x000bbfd8 ldr r6, [r4, 0x10] | r6 = *((r4 + 0x10));
0x000bbfda cmp r0, r2 |
0x000bbfdc sbcs r1, r3 | __asm ("sbcs r1, r3");
| if (r0 >= r2) {
0x000bbfde blt 0xbbffa |
| label_25:
0x000bbfe0 ldr r1, [sp] | r1 = *(sp);
0x000bbfe2 movs r3, 0 | r3 = 0;
0x000bbfe4 adds r2, r6, r1 | r2 = r6 + r1;
0x000bbfe6 str r3, [r6, r1] | *((r6 + r1)) = r3;
0x000bbfe8 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x000bbfea str r3, [r2, 8] | *((r2 + 8)) = r3;
0x000bbfec str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x000bbfee str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x000bbff0 ldr r2, [sp, 8] | r2 = x;
0x000bbff2 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000bbff4 strd r3, r1, [r2, 0x38] | __asm ("strd r3, r1, [r2, 0x38]");
0x000bbff8 b 0xbbb3e | goto label_23;
| }
0x000bbffa adds r5, r2, r2 | r5 = r2 + r2;
0x000bbffc adc.w r4, r3, r3 | __asm ("adc.w r4, r3, r3");
0x000bc000 ldr r3, [sp, 8] | r3 = x;
0x000bc002 strd r5, r4, [r3, 0x18] | __asm ("strd r5, r4, [r3, 0x18]");
0x000bc006 ldr r3, [pc, 0x58] |
0x000bc008 add r3, pc |
0x000bc00a ldr.w r3, [r3, 0xd0] | r3 = *(0x17813e);
| if (r3 != 0) {
0x000bc00e cbnz r3, 0xbc03c | goto label_62;
| }
0x000bc010 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bc014 cmp r0, 0 |
| if (r0 != 0) {
0x000bc016 bne 0xbbf22 | goto label_24;
| }
0x000bc018 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bc01c cmp r0, 0 |
| if (r0 != 0) {
0x000bc01e bne 0xbbf22 | goto label_24;
| }
| label_26:
0x000bc020 mov r0, r6 | r0 = r6;
0x000bc022 mov r2, r5 | r2 = r5;
0x000bc024 mov r3, r4 | r3 = r4;
0x000bc026 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bc02a mov r6, r0 | r6 = r0;
0x000bc02c cmp r0, 0 |
| if (r0 == 0) {
0x000bc02e beq.w 0xbbf22 | goto label_24;
| }
0x000bc032 ldr r3, [sp, 8] | r3 = x;
0x000bc034 str r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
0x000bc036 b 0xbbfe0 | goto label_25;
| label_31:
0x000bc038 blx 0x6430 | fcn_00006430 ();
| label_62:
0x000bc03c dmb ish | __asm ("dmb ish");
0x000bc040 b 0xbc020 | goto label_26;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbc360 */
| #include <stdint.h>
|
; (fcn) fcn.000bc360 () | void fcn_000bc360 (int16_t arg_0h, int16_t arg_8h, arithmetic arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int32_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| arithmetic var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| arithmetic var_40h;
| int16_t var_44h;
| arithmetic var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| arithmetic x;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int32_t var_70h_2;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int32_t var_84h;
| int32_t var_84h_2;
| int16_t var_8ch;
| int16_t var_94h;
| int16_t var_98h;
| int32_t var_4h_2;
| int32_t var_4h_3;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b4h;
| int16_t var_d8h;
| int16_t var_dch;
| int32_t var_dch_2;
| int16_t var_e4h;
| int16_t var_ech;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000bc360 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000bc364 mov sl, r2 | sl = r2;
0x000bc366 sub sp, 0xf4 |
0x000bc368 ldr.w r2, [pc, 0xa3c] |
0x000bc36c mov r5, r3 | r5 = r3;
0x000bc36e add r4, sp, 0xa8 | r4 += var_a8h;
0x000bc370 str r3, [sp, 0x48] | var_48h = r3;
0x000bc372 mov r7, r0 | r7 = r0;
0x000bc374 ldr.w r3, [pc, 0xa34] | r3 = *(0xbcdac);
0x000bc378 add r2, pc | r2 = 0x179124;
0x000bc37a str r0, [sp, 0x30] | var_30h = r0;
0x000bc37c mov fp, r1 |
0x000bc37e str r4, [sp, 0x3c] | var_3ch = r4;
0x000bc380 movs r1, 0 | r1 = 0;
0x000bc382 ldr r3, [r2, r3] |
0x000bc384 mov r0, r4 | r0 = r4;
0x000bc386 movs r2, 0x40 | r2 = 0x40;
0x000bc388 movs r6, 1 | r6 = 1;
0x000bc38a ldr r3, [r3] | r3 = imp.atan;
0x000bc38c str r3, [sp, 0xec] | var_ech = r3;
0x000bc38e mov.w r3, 0 | r3 = 0;
0x000bc392 blx 0x62ec | fcn_000062ec ();
0x000bc396 movs r3, 0 | r3 = 0;
0x000bc398 mov r2, sl | r2 = sl;
0x000bc39a str r3, [sp, 0xc] | var_ch = r3;
0x000bc39c mov r1, fp | r1 = fp;
0x000bc39e strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x000bc3a2 mov r0, r7 | r0 = r7;
0x000bc3a4 mov r3, r5 | r3 = r5;
0x000bc3a6 str r4, [sp, 0x10] | var_10h = r4;
0x000bc3a8 str r6, [sp, 8] | var_8h = r6;
0x000bc3aa bl 0xbb04c | fcn_000bb04c (r0, r1, r2, r3, r4, r5, r6);
0x000bc3ae str r0, [sp, 0x40] | var_40h = r0;
| if (r0 != 0) {
0x000bc3b0 cbnz r0, 0xbc3ce | goto label_3;
| }
0x000bc3b2 ldr r4, [sp, 0xac] | r4 = var_ach;
| if (r4 == 0) {
0x000bc3b4 cbz r4, 0xbc3ce | goto label_3;
| }
0x000bc3b6 mov r3, r5 | r3 = r5;
0x000bc3b8 adds r3, 1 | r3++;
| if (r3 == 1) {
0x000bc3ba beq 0xbc48a | goto label_29;
| }
0x000bc3bc add r5, sp, 0x98 | r5 += var_98h;
0x000bc3be mov r3, r0 | r3 = r0;
0x000bc3c0 mov r2, r5 | r2 = r5;
0x000bc3c2 movs r1, 0xf | r1 = 0xf;
0x000bc3c4 mov r0, r7 | r0 = r7;
0x000bc3c6 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
| if (r0 == 0) {
0x000bc3ca cbz r0, 0xbc3f6 | goto label_30;
| }
| label_1:
0x000bc3cc str r0, [sp, 0x40] | var_40h = r0;
| do {
| label_3:
0x000bc3ce ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000bc3d0 bl 0x7a754 | fcn_0007a754 (r0);
0x000bc3d4 ldr.w r2, [pc, 0x9d8] |
0x000bc3d8 ldr.w r3, [pc, 0x9d0] | r3 = *(0xbcdac);
0x000bc3dc add r2, pc | r2 = 0x179190;
0x000bc3de ldr r3, [r2, r3] | r3 = imp.atan;
0x000bc3e0 ldr r2, [r3] | r2 = imp.atan;
0x000bc3e2 ldr r3, [sp, 0xec] | r3 = var_ech;
0x000bc3e4 eors r2, r3 | r2 ^= r3;
0x000bc3e6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000bc3ea bne.w 0xbcda2 | goto label_31;
| }
0x000bc3ee ldr r0, [sp, 0x40] | r0 = var_40h;
0x000bc3f0 add sp, 0xf4 |
0x000bc3f2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x000bc3f6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bc3f8 mov r2, sl | r2 = sl;
0x000bc3fa mov r1, r6 | r1 = r6;
0x000bc3fc ldr r6, [sp, 0x98] | r6 = var_98h;
0x000bc3fe asr.w r7, fp, 0x1f | r7 = fp >> 0x1f;
0x000bc402 ldr.w r0, [r3, 0x100] | r0 = *((r3 + 0x100));
0x000bc406 asr.w r3, sl, 0x1f | r3 = sl >> 0x1f;
0x000bc40a str r3, [sp, 0x50] | var_50h = r3;
0x000bc40c smlal r2, r3, fp, r0 | __asm ("smlal r2, r3, fp, r0");
0x000bc410 mov r0, r6 | r0 = r6;
0x000bc412 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bc414 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000bc418 lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bc41a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bc41e ldr r2, [sp, 0x30] | r2 = var_30h;
0x000bc420 mov lr, sl | lr = sl;
0x000bc422 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000bc424 movw ip, 0x3ff | ip = 0x3ff;
0x000bc428 movs r1, 2 | r1 = 2;
0x000bc42a mov r0, r6 | r0 = r6;
0x000bc42c ldr.w r2, [r2, 0x100] | r2 = *((r2 + 0x100));
0x000bc430 smlal lr, r3, fp, r2 | __asm ("smlal lr, r3, fp, r2");
0x000bc434 mov r2, lr | r2 = lr;
0x000bc436 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bc438 lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bc43a orr.w r3, r3, lr, lsr 22 | r3 |= (lr >> 22);
0x000bc43e adds.w r2, r2, ip | r2 += ip;
0x000bc442 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bc446 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bc44a mov r0, r6 | r0 = r6;
0x000bc44c bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bc450 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bc452 beq.w 0xbca7e | goto label_32;
| }
0x000bc456 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000bc458 strd r3, r3, [sp, 0x54] | __asm ("strd r3, r3, [var_54h]");
| label_16:
0x000bc45c mov r0, r6 | r0 = r6;
0x000bc45e bl 0x79b80 | fcn_00079b80 (r0);
0x000bc462 str r0, [sp, 0x64] | x = r0;
0x000bc464 cmp r0, 0 |
| if (r0 != 0) {
0x000bc466 bne.w 0xbca78 | goto label_33;
| }
0x000bc46a ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bc46c adds r3, 2 | r3 += 2;
| if (r3 == 2) {
0x000bc46e beq.w 0xbc9bc | goto label_34;
| }
| label_0:
0x000bc472 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bc474 movs r3, 0 | r3 = 0;
0x000bc476 mov r2, r5 | r2 = r5;
0x000bc478 movs r1, 8 | r1 = 8;
0x000bc47a ldr.w r4, [r0, 0x100] | r4 = *((r0 + 0x100));
0x000bc47e bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bc482 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000bc484 cbz r0, 0xbc49e | goto label_35;
| }
0x000bc486 str r0, [sp, 0x40] | var_40h = r0;
0x000bc488 b 0xbc3ce |
| } while (1);
| label_29:
0x000bc48a asr.w r3, sl, 0x1f | r3 = sl >> 0x1f;
0x000bc48e asr.w r7, fp, 0x1f | r7 = fp >> 0x1f;
0x000bc492 str r3, [sp, 0x50] | var_50h = r3;
0x000bc494 add r5, sp, 0x98 | r5 += var_98h;
0x000bc496 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000bc498 strd r3, r3, [sp, 0x54] | __asm ("strd r3, r3, [var_54h]");
0x000bc49c b 0xbc472 | goto label_0;
| label_35:
0x000bc49e mul r0, r4, r7 | r0 = r4 * r7;
0x000bc4a2 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x000bc4a4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bc4a6 mla r0, fp, r1, r0 | __asm ("mla r0, fp, r1, r0");
0x000bc4aa ldr.w r2, [r3, 0x100] | r2 = *((r3 + 0x100));
0x000bc4ae umull r4, r1, r4, fp | r4:r1 = r4 * fp;
0x000bc4b2 mul r3, r2, r7 | r3 = r2 * r7;
0x000bc4b6 ldr r7, [sp, 0x48] | r7 = var_48h;
0x000bc4b8 add r0, r1 | r0 += r1;
0x000bc4ba ldr r1, [sp, 0x50] | r1 = var_50h;
0x000bc4bc adds.w r4, r4, sl | r4 += sl;
0x000bc4be lsls r2, r1, 0x10 | r2 = r1 << 0x10;
0x000bc4c0 add.w sb, r7, 1 | sb = r7 + 1;
0x000bc4c4 adc.w r0, r0, r1 | __asm ("adc.w r0, r0, r1");
0x000bc4c8 asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x000bc4ca lsls r0, r0, 0xa | r0 <<= 0xa;
0x000bc4cc mla r3, fp, r1, r3 | __asm ("mla r3, fp, r1, r3");
0x000bc4d0 umull r2, r1, r2, fp | r2:r1 = r2 * fp;
0x000bc4d4 orr.w r0, r0, r4, lsr 22 | r0 |= (r4 >> 22);
0x000bc4d8 lsls r4, r4, 0xa | r4 <<= 0xa;
0x000bc4da adds.w r8, r4, sb | r8 = r4 + sb;
0x000bc4de ldr r4, [sp, 0x98] | r4 = var_98h;
0x000bc4e0 add r3, r1 | r3 += r1;
0x000bc4e2 asr.w r1, sb, 0x1f | r1 = sb >> 0x1f;
0x000bc4e6 adc.w r7, r1, r0 | __asm ("adc.w r7, r1, r0");
0x000bc4ea ldr r0, [sp, 0x50] | r0 = var_50h;
0x000bc4ec adds.w r2, r2, sl | r2 += sl;
0x000bc4f0 adc.w r3, r3, r0 | __asm ("adc.w r3, r3, r0");
0x000bc4f4 mov r0, r4 | r0 = r4;
0x000bc4f6 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bc4f8 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000bc4fc lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bc4fe adds.w r2, r2, sb | r2 += sb;
0x000bc502 adc.w r3, r1, r3 | __asm ("adc.w r3, r1, r3");
0x000bc506 movs r1, 1 | r1 = 1;
0x000bc508 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bc50a mcrr2 p6, 2, r4, lr, c0 | __asm ("mcrr2 p6, 2, r4, lr, c0");
0x000bc50e bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bc512 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bc514 beq.w 0xbca8c | goto label_36;
| }
0x000bc518 mov r0, r4 | r0 = r4;
0x000bc51a bl 0x79b80 | fcn_00079b80 (r0);
0x000bc51e str r0, [sp, 0x64] | x = r0;
| label_18:
0x000bc520 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000bc522 ldr r1, [sp, 0x58] | r1 = var_58h;
0x000bc524 ldr r0, [sp, 0x48] | r0 = var_48h;
0x000bc526 cmp r2, r8 |
0x000bc528 sbcs.w r3, r1, r7 | __asm ("sbcs.w r3, r1, r7");
0x000bc52c ite lt |
| if (r2 >= r8) {
0x000bc52e movlt r3, 1 | r3 = 1;
| }
| if (r2 < r8) {
0x000bc530 movge r3, 0 | r3 = 0;
| }
0x000bc532 cmp.w r0, -1 |
0x000bc536 ite eq |
| if (r0 != -1) {
0x000bc538 moveq r3, 0 | r3 = 0;
| }
| if (r0 == -1) {
0x000bc53a andne r3, r3, 1 | r3 &= 1;
| }
0x000bc53e ldr r0, [sp, 0x64] | r0 = x;
0x000bc540 cmp r0, 0 |
| if (r0 != 0) {
0x000bc542 bne.w 0xbca78 | goto label_33;
| }
0x000bc546 lsls r3, r3, 1 | r3 <<= 1;
0x000bc548 strd r2, r1, [sp, 0x78] | __asm ("strd r2, r1, [var_78h]");
0x000bc54c str.w r8, [sp, 0x54] | __asm ("str.w r8, [var_54h]");
0x000bc550 orr r2, r3, 1 | r2 = r3 | 1;
0x000bc554 str r7, [sp, 0x58] | var_58h = r7;
| label_11:
0x000bc556 movs r3, 0 | r3 = 0;
0x000bc558 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000bc55a str r3, [sp, 0x98] | var_98h = r3;
0x000bc55c ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bc55e strd r3, r3, [r5, 4] | __asm ("strd r3, r3, [var_4h_2]");
0x000bc562 str r2, [sp, 0xa4] | var_a4h = r2;
0x000bc564 mov r2, r3 | r2 = r3;
0x000bc566 str r5, [sp, 0xb4] | var_b4h = r5;
0x000bc568 bl 0xbc250 | r0 = fcn_000bc250 (r0, r1, r2, r3);
0x000bc56c cmp r0, 0 |
| if (r0 != 0) {
0x000bc56e bne.w 0xbc3cc | goto label_1;
| }
0x000bc572 ldr.w r3, [pc, 0x840] |
0x000bc576 mov r7, r0 | r7 = r0;
0x000bc578 strd fp, sl, [sp, 0x70] | __asm ("strd fp, sl, [var_70h]");
0x000bc57c add r3, pc | r3 = 0x179336;
0x000bc57e str r3, [sp, 0x60] | var_60h = r3;
0x000bc580 ldr.w r3, [pc, 0x834] |
0x000bc584 add r3, pc | r3 = 0x179340;
0x000bc586 str r3, [sp, 0x68] | var_68h = r3;
0x000bc588 ldr.w r3, [pc, 0x830] |
0x000bc58c add r3, pc | r3 = 0x17934c;
0x000bc58e str r3, [sp, 0x5c] | var_5ch = r3;
| label_2:
0x000bc590 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000bc592 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bc594 bl 0xbb978 | r0 = fcn_000bb978 (r0, r1, r2, r3, r4);
0x000bc598 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000bc59a bne.w 0xbc950 | goto label_37;
| }
0x000bc59e ldr r3, [sp, 0xd8] | r3 = var_d8h;
0x000bc5a0 str r3, [sp, 0x38] | var_38h = r3;
0x000bc5a2 ldrd r8, r3, [sp, 0xdc] | __asm ("ldrd r8, r3, [var_dch]");
0x000bc5a6 str r3, [sp, 0x44] | var_44h = r3;
0x000bc5a8 ldr r3, [sp, 0xe4] | r3 = var_e4h;
0x000bc5aa str r3, [sp, 0x34] | var_34h = r3;
0x000bc5ac cmp r7, 0 |
| if (r7 == 0) {
0x000bc5ae beq.w 0xbc8aa | goto label_38;
| }
| label_5:
0x000bc5b2 ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x000bc5b4 ldr.w sl, [r7, 0x2c] | sl = *((r7 + 0x2c));
0x000bc5b8 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000bc5ba cmp r0, r8 |
0x000bc5bc it ge |
| if (r0 < r8) {
0x000bc5be movge r0, r8 | r0 = r8;
| }
0x000bc5c0 cmp r0, 0 |
0x000bc5c2 itt le |
| if (r0 > 0) {
0x000bc5c4 movle sb, r8 | sb = r8;
| }
| if (r0 > 0) {
0x000bc5c6 movle r4, 0 | r4 = 0;
| }
| if (r0 <= 0) {
0x000bc5c8 ble 0xbc5ea | goto label_39;
| }
0x000bc5ca ldr r2, [sp, 0x38] | r2 = var_38h;
0x000bc5cc subs r3, 1 | r3--;
0x000bc5ce movs r4, 0 | r4 = 0;
0x000bc5d0 subs r2, 1 | r2--;
0x000bc5d2 b 0xbc5da |
| while (r5 == r1) {
0x000bc5d4 adds r4, 1 | r4++;
0x000bc5d6 cmp r4, r0 |
| if (r4 == r0) {
0x000bc5d8 beq 0xbc5e6 | goto label_40;
| }
0x000bc5da ldrb r5, [r3, 1]! | r5 = *((r3 += 1));
0x000bc5de ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x000bc5e2 cmp r5, r1 |
0x000bc5e4 beq 0xbc5d4 |
| }
| label_40:
0x000bc5e6 sub.w sb, r8, r4 | sb = r8 - r4;
| label_39:
0x000bc5ea cmp.w sb, 0 |
| if (sb <= 0) {
0x000bc5ee ble.w 0xbc846 | goto label_41;
| }
0x000bc5f2 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x000bc5f4 mov r3, r4 | r3 = r4;
0x000bc5f6 movs r2, 0 | r2 = 0;
| do {
0x000bc5f8 lsrs r3, r3, 7 | r3 >>= 7;
0x000bc5fa adds r2, 1 | r2++;
0x000bc5fc orr.w r3, r3, r1, lsl 25 | r3 |= (r1 << 25);
0x000bc600 lsrs r1, r1, 7 | r1 >>= 7;
0x000bc602 orrs.w r0, r3, r1 | r0 = r3 | r1;
0x000bc606 bne 0xbc5f8 |
| } while (r0 != r3);
0x000bc608 asr.w r1, sb, 0x1f | r1 = sb >> 0x1f;
0x000bc60c mov r3, sb | r3 = sb;
0x000bc60e movs r0, 0 | r0 = 0;
| do {
0x000bc610 lsrs r3, r3, 7 | r3 >>= 7;
0x000bc612 adds r0, 1 | r0++;
0x000bc614 orr.w r3, r3, r1, lsl 25 | r3 |= (r1 << 25);
0x000bc618 lsrs r1, r1, 7 | r1 >>= 7;
0x000bc61a orrs.w r5, r3, r1 | r5 = r3 | r1;
0x000bc61e bne 0xbc610 |
| } while (r5 != r3);
0x000bc620 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bc622 add r2, r0 | r2 += r0;
0x000bc624 add.w r1, r2, sb | r1 = r2 + sb;
0x000bc628 movs r0, 0 | r0 = 0;
0x000bc62a mov r5, r3 | r5 = r3;
0x000bc62c asr.w fp, r3, 0x1f |
0x000bc630 mov r6, fp | r6 = fp;
0x000bc632 mov r2, fp | r2 = fp;
| do {
0x000bc634 lsrs r3, r3, 7 | r3 >>= 7;
0x000bc636 adds r0, 1 | r0++;
0x000bc638 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000bc63c lsrs r2, r2, 7 | r2 >>= 7;
0x000bc63e orrs.w ip, r3, r2 |
0x000bc642 bne 0xbc634 |
| } while (ip != r3);
0x000bc644 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bc646 add r1, r0 | r1 += r0;
0x000bc648 cmp.w sl, 0 |
0x000bc64c add r1, r3 | r1 += r3;
0x000bc64e asr.w r0, r1, 0x1f | r0 = r1 >> 0x1f;
0x000bc652 mov r2, r1 | r2 = r1;
0x000bc654 mov r3, r0 | r3 = r0;
| if (sl <= 0) {
0x000bc656 ble 0xbc70e | goto label_42;
| }
0x000bc658 adds.w r1, sl, r1 | r1 = sl + r1;
0x000bc65c str r1, [sp, 0x4c] | var_4ch = r1;
0x000bc65e adc.w r0, r0, sl, asr 31 | __asm ("adc.w r0, r0, sl, asr 31");
0x000bc662 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000bc664 ldr.w ip, [r1, 0xe8] | ip = *((r1 + 0xe8));
0x000bc668 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000bc66a asr.w lr, ip, 0x1f | lr = ip >> 0x1f;
0x000bc66e cmp ip, r1 |
0x000bc670 sbcs.w r0, lr, r0 | __asm ("sbcs.w r0, lr, r0");
| if (ip >= r1) {
0x000bc674 bge 0xbc70e | goto label_42;
| }
0x000bc676 ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x000bc67a mvn r1, 0x80000000 | r1 = ~0x80000000;
0x000bc67e cmp r3, r1 |
0x000bc680 it eq |
| if (r3 == r1) {
0x000bc682 cmpeq r2, -1 | __asm ("cmpeq r2, -1");
| }
| if (r3 == r1) {
0x000bc686 beq.w 0xbc846 | goto label_41;
| }
0x000bc68a adds r1, r2, 1 | r1 = r2 + 1;
0x000bc68c ldr.w sb, [sp, 0x30] | sb = var_30h;
0x000bc690 str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
0x000bc692 adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x000bc696 str r1, [r7, 0x14] | *((r7 + 0x14)) = r1;
0x000bc698 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x000bc69c mov r0, sb | r0 = sb;
0x000bc69e ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x000bc6a0 str r1, [sp] | *(sp) = r1;
0x000bc6a2 bl 0xb52d4 | r0 = fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000bc6a6 mov sl, r0 | sl = r0;
0x000bc6a8 cmp r0, 0 |
| if (r0 != 0) {
0x000bc6aa bne.w 0xbc944 | goto label_43;
| }
0x000bc6ae ldr.w r2, [sb, 0x34] | r2 = *((sb + 0x34));
0x000bc6b2 adds r3, r4, 1 | r3 = r4 + 1;
0x000bc6b4 mov r0, sb | r0 = sb;
0x000bc6b6 mov r1, r7 | r1 = r7;
0x000bc6b8 adds r2, 1 | r2++;
0x000bc6ba str.w r2, [sb, 0x34] | __asm ("str.w r2, [sb, 0x34]");
0x000bc6be ldr r2, [sp, 0x38] | r2 = var_38h;
0x000bc6c0 bl 0x7276c | r0 = fcn_0007276c (r0, r1, r2, r3);
0x000bc6c4 mov sl, r0 | sl = r0;
0x000bc6c6 cmp r0, 0 |
| if (r0 != 0) {
0x000bc6c8 bne.w 0xbc944 | goto label_43;
| }
0x000bc6cc asr.w r2, r8, 0x1f | r2 = r8 >> 0x1f;
0x000bc6d0 mov r3, r8 | r3 = r8;
0x000bc6d2 mov r1, r0 | r1 = r0;
0x000bc6d4 str r0, [r7, 0x1c] | *((r7 + 0x1c)) = r0;
| do {
0x000bc6d6 lsrs r3, r3, 7 | r3 >>= 7;
0x000bc6d8 mov r0, r1 | r0 = r1;
0x000bc6da adds r1, 1 | r1++;
0x000bc6dc orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000bc6e0 lsrs r2, r2, 7 | r2 >>= 7;
0x000bc6e2 orrs.w r4, r3, r2 | r4 = r3 | r2;
0x000bc6e6 bne 0xbc6d6 |
| } while (r4 != r3);
0x000bc6e8 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bc6ea adds r1, r0, 2 | r1 = r0 + 2;
0x000bc6ec add r1, r8 | r1 += r8;
0x000bc6ee movs r2, 0 | r2 = 0;
| do {
0x000bc6f0 lsrs r3, r3, 7 | r3 >>= 7;
0x000bc6f2 adds r2, 1 | r2++;
0x000bc6f4 orr.w r3, r3, fp, lsl 25 | r3 |= (fp << 25);
0x000bc6f8 lsr.w fp, fp, 7 |
0x000bc6fc orrs.w r0, r3, fp | r0 = r3 | fp;
0x000bc700 bne 0xbc6f0 |
| } while (r0 != r3);
0x000bc702 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bc704 add r2, r1 | r2 += r1;
0x000bc706 mov sb, r8 | sb = r8;
0x000bc708 movs r4, 0 | r4 = 0;
0x000bc70a add r2, r3 | r2 += r3;
0x000bc70c asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
| label_42:
0x000bc70e ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x000bc710 ldr r0, [r7, 0x28] | r0 = *((r7 + 0x28));
0x000bc712 ldr.w fp, [r7, 0x30] | fp = *((r7 + 0x30));
0x000bc716 adds r1, r1, r2 | r1 += r2;
0x000bc718 str r1, [r7, 0x38] | *((r7 + 0x38)) = r1;
0x000bc71a ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x000bc71c adc.w r1, r3, r1 | __asm ("adc.w r1, r3, r1");
0x000bc720 cmp r0, r2 |
0x000bc722 str r1, [r7, 0x3c] | *((r7 + 0x3c)) = r1;
0x000bc724 asr.w r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x000bc728 sbcs r1, r3 | __asm ("sbcs r1, r3");
| if (r0 < r2) {
0x000bc72a blt.w 0xbc86a | goto label_44;
| }
| label_4:
0x000bc72e add.w ip, fp, sl |
0x000bc732 asrs r2, r4, 0x1f | r2 = r4 >> 0x1f;
0x000bc734 mov r3, r4 | r3 = r4;
0x000bc736 mov r1, ip | r1 = ip;
| do {
0x000bc738 lsr.w fp, r3, 7 |
0x000bc73c orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x000bc740 uxtb.w lr, r3 | lr = (int8_t) r3;
0x000bc744 orr.w r3, fp, r2, lsl 25 | r3 = fp | (r2 << 25);
0x000bc748 lsrs r2, r2, 7 | r2 >>= 7;
0x000bc74a mov fp, r1 |
0x000bc74c strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x000bc750 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x000bc754 bne 0xbc738 |
| } while (r0 != r3);
0x000bc756 strb.w lr, [fp] |
0x000bc75a sub.w r1, r1, ip | r1 -= ip;
0x000bc75e ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x000bc760 add.w r0, r1, sl | r0 = r1 + sl;
0x000bc764 asr.w r2, sb, 0x1f | r2 = sb >> 0x1f;
0x000bc768 add.w lr, r3, r0 | lr = r3 + r0;
0x000bc76c mov r3, sb | r3 = sb;
0x000bc76e mov r1, lr | r1 = lr;
| do {
0x000bc770 lsr.w fp, r3, 7 |
0x000bc774 orn ip, r3, 0x7f | ip = r3 | 0x7f;
| ip = ~ip;
0x000bc778 uxtb.w sl, r3 | sl = (int8_t) r3;
0x000bc77c orr.w r3, fp, r2, lsl 25 | r3 = fp | (r2 << 25);
0x000bc780 lsrs r2, r2, 7 | r2 >>= 7;
0x000bc782 mov fp, r1 |
0x000bc784 strb ip, [r1], 1 | *(r1) = ip;
| r1++;
0x000bc788 orrs.w ip, r3, r2 |
0x000bc78c bne 0xbc770 |
| } while (ip != r3);
0x000bc78e sub.w r1, r1, lr | r1 -= lr;
0x000bc792 strb.w sl, [fp] | *(fp) = sl;
0x000bc796 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000bc798 add.w sl, r1, r0 | sl = r1 + r0;
0x000bc79c ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x000bc79e mov r2, sb | r2 = sb;
0x000bc7a0 adds r1, r3, r4 | r1 = r3 + r4;
0x000bc7a2 add r0, sl | r0 += sl;
0x000bc7a4 add sl, sb | sl += sb;
0x000bc7a6 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bc7aa ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x000bc7ac add r1, sl | r1 += sl;
0x000bc7ae mov r3, r1 | r3 = r1;
| do {
0x000bc7b0 lsrs r4, r5, 7 | r4 = r5 >> 7;
0x000bc7b2 orn r2, r5, 0x7f | r2 = r5 | 0x7f;
| r2 = ~r2;
0x000bc7b6 uxtb r0, r5 | r0 = (int8_t) r5;
0x000bc7b8 orr.w r5, r4, r6, lsl 25 | r5 = r4 | (r6 << 25);
0x000bc7bc lsrs r6, r6, 7 | r6 >>= 7;
0x000bc7be mov r4, r3 | r4 = r3;
0x000bc7c0 strb r2, [r3], 1 | *(r3) = r2;
| r3++;
0x000bc7c4 orrs.w r2, r5, r6 | r2 = r5 | r6;
0x000bc7c8 bne 0xbc7b0 |
| } while (r2 != r5);
0x000bc7ca strb r0, [r4] | *(r4) = r0;
0x000bc7cc subs r3, r3, r1 | r3 -= r1;
0x000bc7ce ldr r5, [sp, 0x34] | r5 = var_34h;
0x000bc7d0 add.w r4, r3, sl | r4 = r3 + sl;
0x000bc7d4 ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x000bc7d6 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000bc7d8 mov r2, r5 | r2 = r5;
0x000bc7da add r0, r4 | r0 += r4;
0x000bc7dc blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bc7e0 mov r3, r5 | r3 = r5;
0x000bc7e2 add r3, r4 | r3 += r4;
0x000bc7e4 mov r4, r3 | r4 = r3;
0x000bc7e6 str r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
0x000bc7e8 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000bc7ea cmp r8, r3 |
| if (r8 > r3) {
0x000bc7ec bgt 0xbc7fe | goto label_45;
| }
0x000bc7ee ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
| do {
0x000bc7f0 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000bc7f2 mov r2, r8 | r2 = r8;
0x000bc7f4 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bc7f8 str.w r8, [r7, 0x1c] | __asm ("str.w r8, [r7, 0x1c]");
0x000bc7fc b 0xbc590 | goto label_2;
| label_45:
0x000bc7fe ldr.w r3, [pc, 0x5c0] |
0x000bc802 ldr r4, [r7, 0x24] | r4 = *((r7 + 0x24));
0x000bc804 add r3, pc |
0x000bc806 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000bc80a cmp r3, 0 |
| if (r3 != 0) {
0x000bc80c bne.w 0xbc94a | goto label_46;
| }
0x000bc810 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bc814 cmp r0, 0 |
| if (r0 != 0) {
0x000bc816 bne.w 0xbcc98 | goto label_47;
| }
0x000bc81a bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bc81e cmp r0, 0 |
| if (r0 != 0) {
0x000bc820 bne.w 0xbcc98 | goto label_47;
| }
| label_7:
0x000bc824 asr.w r3, r8, 0x1f | r3 = r8 >> 0x1f;
0x000bc828 adds.w r2, r8, r8 | r2 = r8 + r8;
0x000bc82c mov r0, r4 | r0 = r4;
0x000bc82e adcs r3, r3 | __asm ("adcs r3, r3");
0x000bc830 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bc834 cmp r0, 0 |
| if (r0 == 0) {
0x000bc836 beq.w 0xbcc98 | goto label_47;
| }
0x000bc83a lsl.w r3, r8, 1 | r3 = r8 << 1;
0x000bc83e str r0, [r7, 0x24] | *((r7 + 0x24)) = r0;
0x000bc840 str r0, [r7, 0x18] | *((r7 + 0x18)) = r0;
0x000bc842 str r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x000bc844 b 0xbc7f0 |
| } while (1);
| label_41:
0x000bc846 movw r3, 0x10b | r3 = 0x10b;
0x000bc84a str r7, [sp, 0x34] | var_34h = r7;
| label_6:
0x000bc84c str r3, [sp, 0x40] | var_40h = r3;
| do {
| label_8:
0x000bc84e ldr r4, [sp, 0x34] | r4 = var_34h;
0x000bc850 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x000bc852 bl 0x26dbc | fcn_00026dbc (r0);
0x000bc856 ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x000bc858 bl 0x26dbc | fcn_00026dbc (r0);
0x000bc85c ldr r0, [r4] | r0 = *(r4);
0x000bc85e bl 0x27250 | fcn_00027250 (r0);
0x000bc862 mov r0, r4 | r0 = r4;
0x000bc864 bl 0x26dbc | fcn_00026dbc (r0);
0x000bc868 b 0xbc3ce | goto label_3;
| label_44:
0x000bc86a ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x000bc86c ldr.w r1, [r1, 0xd0] | r1 = *((r1 + 0xd0));
0x000bc870 cmp r1, 0 |
| if (r1 != 0) {
0x000bc872 bne.w 0xbc9aa | goto label_48;
| }
0x000bc876 str r3, [sp, 0x6c] | var_6ch = r3;
0x000bc878 str r2, [sp, 0x4c] | var_4ch = r2;
0x000bc87a bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bc87e cmp r0, 0 |
| if (r0 != 0) {
0x000bc880 bne.w 0xbcc98 | goto label_47;
| }
0x000bc884 bl 0x5a4b8 | fcn_0005a4b8 ();
0x000bc888 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bc88a ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000bc88c cmp r0, 0 |
| if (r0 != 0) {
0x000bc88e bne.w 0xbcc98 | goto label_47;
| }
| label_9:
0x000bc892 mov r0, fp | r0 = fp;
0x000bc894 str r2, [sp, 0x4c] | var_4ch = r2;
0x000bc896 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bc89a mov fp, r0 |
0x000bc89c cmp r0, 0 |
| if (r0 == 0) {
0x000bc89e beq.w 0xbcc98 | goto label_47;
| }
0x000bc8a2 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bc8a4 str r0, [r7, 0x30] | *((r7 + 0x30)) = r0;
0x000bc8a6 str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x000bc8a8 b 0xbc72e | goto label_4;
| label_38:
0x000bc8aa ldr r3, [sp, 0x60] | r3 = var_60h;
0x000bc8ac ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000bc8b0 cmp r3, 0 |
| if (r3 != 0) {
0x000bc8b2 bne 0xbc9b0 | goto label_49;
| }
0x000bc8b4 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bc8b8 cmp r0, 0 |
| if (r0 != 0) {
0x000bc8ba bne 0xbc9b6 | goto label_50;
| }
0x000bc8bc bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bc8c0 cmp r0, 0 |
| if (r0 != 0) {
0x000bc8c2 bne 0xbc9b6 | goto label_50;
| }
| label_10:
0x000bc8c4 movs r0, 0x40 | r0 = 0x40;
0x000bc8c6 movs r1, 0 | r1 = 0;
0x000bc8c8 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000bc8cc mov r7, r0 | r7 = r0;
0x000bc8ce cmp r0, 0 |
| if (r0 == 0) {
0x000bc8d0 beq 0xbc9b6 | goto label_50;
| }
0x000bc8d2 movs r2, 0x40 | r2 = 0x40;
0x000bc8d4 movs r1, 0 | r1 = 0;
0x000bc8d6 blx 0x62ec | fcn_000062ec ();
0x000bc8da ldr r3, [sp, 0x68] | r3 = var_68h;
0x000bc8dc ldr r2, [sp, 0x30] | r2 = var_30h;
0x000bc8de ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000bc8e2 ldr.w r4, [r2, 0xe8] | r4 = *((r2 + 0xe8));
0x000bc8e6 cmp r3, 0 |
| if (r3 != 0) {
0x000bc8e8 bne 0xbc9cc | goto label_51;
| }
0x000bc8ea bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bc8ee cmp r0, 0 |
| if (r0 != 0) {
0x000bc8f0 bne.w 0xbca6c | goto label_52;
| }
0x000bc8f4 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bc8f8 cmp r0, 0 |
| if (r0 != 0) {
0x000bc8fa bne.w 0xbca6c | goto label_52;
| }
| label_12:
0x000bc8fe asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x000bc900 mov r0, r4 | r0 = r4;
0x000bc902 bl 0x28c3c | fcn_00028c3c (r0);
0x000bc906 str r0, [r7, 0x30] | *((r7 + 0x30)) = r0;
0x000bc908 cmp r0, 0 |
| if (r0 == 0) {
0x000bc90a beq.w 0xbcb34 | goto label_53;
| }
0x000bc90e ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bc910 add r2, sp, 0x94 | r2 += var_94h;
0x000bc912 movs r1, 0xa | r1 = 0xa;
0x000bc914 ldr.w r3, [r0, 0xe8] | r3 = *((r0 + 0xe8));
0x000bc918 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x000bc91a movs r3, 0 | r3 = 0;
0x000bc91c bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bc920 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000bc922 cbz r0, 0xbc92a | goto label_54;
| }
0x000bc924 str r7, [sp, 0x34] | var_34h = r7;
0x000bc926 str r0, [sp, 0x40] | var_40h = r0;
0x000bc928 b 0xbc84e |
| } while (1);
| label_54:
0x000bc92a ldr r5, [sp, 0x94] | r5 = var_94h;
0x000bc92c mov r0, r5 | r0 = r5;
0x000bc92e bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bc932 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bc934 beq 0xbca22 | goto label_55;
| }
| label_15:
0x000bc936 mov r0, r5 | r0 = r5;
0x000bc938 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bc93c mov sl, r0 | sl = r0;
0x000bc93e cmp r0, 0 |
| if (r0 == 0) {
0x000bc940 beq.w 0xbc5b2 | goto label_5;
| }
| label_43:
0x000bc944 mov r3, sl | r3 = sl;
0x000bc946 str r7, [sp, 0x34] | var_34h = r7;
0x000bc948 b 0xbc84c | goto label_6;
| label_46:
0x000bc94a dmb ish | __asm ("dmb ish");
0x000bc94e b 0xbc824 | goto label_7;
| label_37:
0x000bc950 ldrd fp, sl, [sp, 0x70] | __asm ("ldrd fp, sl, [var_70h]");
0x000bc954 str r7, [sp, 0x34] | var_34h = r7;
0x000bc956 cmp r0, 0 |
| if (r0 != 0) {
0x000bc958 bne.w 0xbca60 | goto label_20;
| }
0x000bc95c ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bc95e adds r3, 1 | r3++;
| if (r3 != 1) {
0x000bc960 bne 0xbc9d2 | goto label_56;
| }
| label_21:
0x000bc962 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bc964 cmp r3, 0 |
| if (r3 == 0) {
0x000bc966 beq.w 0xbc3ce | goto label_3;
| }
0x000bc96a ldr r4, [sp, 0x34] | r4 = var_34h;
0x000bc96c ldr r1, [r4] | r1 = *(r4);
0x000bc96e ldrd r2, r3, [r4, 0x2c] | __asm ("ldrd r2, r3, [r4, 0x2c]");
0x000bc972 cmp r1, 0 |
| if (r1 == 0) {
0x000bc974 beq.w 0xbcabc | goto label_57;
| }
0x000bc978 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x000bc97a ldr.w sl, [r4, 0x14] | sl = *((r4 + 0x14));
0x000bc97e ldr r6, [sp, 0x30] | r6 = var_30h;
0x000bc980 adds r1, r5, 1 | r1 = r5 + 1;
0x000bc982 str r5, [sp, 0x5c] | var_5ch = r5;
0x000bc984 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x000bc986 adc r1, sl, 0 | __asm ("adc r1, sl, 0");
0x000bc98a str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x000bc98c mov r0, r6 | r0 = r6;
0x000bc98e strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000bc992 mov r2, r5 | r2 = r5;
0x000bc994 mov r3, sl | r3 = sl;
0x000bc996 bl 0xb52d4 | fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000bc99a str r0, [sp, 0x40] | var_40h = r0;
0x000bc99c cmp r0, 0 |
| if (r0 == 0) {
0x000bc99e beq.w 0xbcba2 | goto label_58;
| }
0x000bc9a2 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000bc9a4 adds r3, 1 | r3++;
0x000bc9a6 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000bc9a8 b 0xbc84e | goto label_8;
| label_48:
0x000bc9aa dmb ish | __asm ("dmb ish");
0x000bc9ae b 0xbc892 | goto label_9;
| label_49:
0x000bc9b0 dmb ish | __asm ("dmb ish");
0x000bc9b4 b 0xbc8c4 | goto label_10;
| label_50:
0x000bc9b6 movs r3, 7 | r3 = 7;
| label_17:
0x000bc9b8 str r3, [sp, 0x40] | var_40h = r3;
0x000bc9ba b 0xbc3ce | goto label_3;
| label_34:
0x000bc9bc cmp r4, 1 |
| if (r4 == 1) {
0x000bc9be beq 0xbca12 | goto label_59;
| }
| label_14:
0x000bc9c0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000bc9c2 movs r2, 3 | r2 = 3;
0x000bc9c4 str r3, [sp, 0x78] | var_78h = r3;
0x000bc9c6 ldr r3, [sp, 0x58] | r3 = var_58h;
0x000bc9c8 str r3, [sp, 0x7c] | var_7ch = r3;
0x000bc9ca b 0xbc556 | goto label_11;
| label_51:
0x000bc9cc dmb ish | __asm ("dmb ish");
0x000bc9d0 b 0xbc8fe | goto label_12;
| label_56:
0x000bc9d2 ldrd r5, r6, [sp, 0xa8] | __asm ("ldrd r5, r6, [var_a8h]");
0x000bc9d6 str r0, [sp, 0x94] | var_94h = r0;
0x000bc9d8 cmp r6, 0 |
| if (r6 <= 0) {
0x000bc9da ble 0xbca46 | goto label_60;
| }
0x000bc9dc ldr r7, [sp, 0x30] | r7 = var_30h;
0x000bc9de subs r5, 4 | r5 -= 4;
0x000bc9e0 mov r4, r0 | r4 = r0;
0x000bc9e2 b 0xbc9f2 |
| while (r3 == r2) {
| label_13:
0x000bc9e4 adds r4, 1 | r4++;
0x000bc9e6 cmp r6, r4 |
0x000bc9e8 ite le |
| if (r6 > r4) {
0x000bc9ea movle r3, 0 | r3 = 0;
| }
| if (r6 <= r4) {
0x000bc9ec andgt r3, r3, 1 | r3 &= 1;
| }
| if (r3 == 0) {
0x000bc9f0 cbz r3, 0xbca44 | goto label_61;
| }
0x000bc9f2 ldr r1, [r5, 4]! | r1 = *((r5 += 4));
0x000bc9f6 ldrd r2, r3, [r1, 8] | __asm ("ldrd r2, r3, [r1, 8]");
0x000bc9fa orrs r3, r2 | r3 |= r2;
0x000bc9fc itt eq |
| if (r3 != r2) {
0x000bc9fe moveq r0, 0 | r0 = 0;
| }
| if (r3 != r2) {
0x000bca00 moveq r3, 1 | r3 = 1;
| }
0x000bca02 beq 0xbc9e4 |
| }
0x000bca04 mov r0, r7 | r0 = r7;
0x000bca06 bl 0xb5384 | r0 = fcn_000b5384 (r0, r1);
0x000bca0a clz r3, r0 | r3 &= r0;
0x000bca0e lsrs r3, r3, 5 | r3 >>= 5;
0x000bca10 b 0xbc9e4 | goto label_13;
| label_59:
0x000bca12 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x000bca14 ldr r3, [r3] | r3 = *(r3);
0x000bca16 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x000bca18 cmp r3, 0 |
| if (r3 != 0) {
0x000bca1a bne 0xbc9c0 | goto label_14;
| }
0x000bca1c movs r3, 0x65 | r3 = 0x65;
0x000bca1e str r3, [sp, 0x40] | var_40h = r3;
0x000bca20 b 0xbc3ce | goto label_3;
| label_55:
0x000bca22 mov r1, r4 | r1 = r4;
0x000bca24 mov r0, r5 | r0 = r5;
0x000bca26 bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000bca2a str r0, [sp, 0x80] | var_80h = r0;
0x000bca2c str r1, [sp, 0x8c] | var_8ch = r1;
0x000bca2e strd r1, r0, [sp, 0x84] | __asm ("strd r1, r0, [var_84h]");
0x000bca32 vldr d16, [sp, 0x80] | __asm ("vldr d16, [sp, 0x80]");
0x000bca36 vldr d17, [sp, 0x88] | __asm ("vldr d17, [sp, 0x88]");
0x000bca3a vstr d16, [r7, 8] | __asm ("vstr d16, [r7, 8]");
0x000bca3e vstr d17, [r7, 0x10] | __asm ("vstr d17, [r7, 0x10]");
0x000bca42 b 0xbc936 | goto label_15;
| if (r0 == 0) {
| label_61:
0x000bca44 cbnz r0, 0xbca60 |
| label_60:
0x000bca46 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bca48 add r2, sp, 0x94 | r2 += var_94h;
0x000bca4a adds r3, 2 | r3 += 2;
0x000bca4c mov.w r3, 0 | r3 = 0;
| if (r3 == 2) {
0x000bca50 beq 0xbcb38 | goto label_62;
| }
0x000bca52 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bca54 movs r1, 0x10 | r1 = 0x10;
0x000bca56 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bca5a cmp r0, 0 |
| if (r0 == 0) {
0x000bca5c beq.w 0xbccaa | goto label_63;
| }
| }
| label_20:
0x000bca60 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000bca62 str r0, [sp, 0x40] | var_40h = r0;
0x000bca64 cmp r3, 0 |
| if (r3 != 0) {
0x000bca66 bne.w 0xbc84e | goto label_8;
| }
0x000bca6a b 0xbc3ce | goto label_3;
| label_52:
0x000bca6c movs r3, 0 | r3 = 0;
0x000bca6e str r7, [sp, 0x34] | var_34h = r7;
0x000bca70 str r3, [r7, 0x30] | *((r7 + 0x30)) = r3;
| label_19:
0x000bca72 movs r3, 7 | r3 = 7;
0x000bca74 str r3, [sp, 0x40] | var_40h = r3;
0x000bca76 b 0xbc84e | goto label_8;
| label_33:
0x000bca78 ldr r3, [sp, 0x64] | r3 = x;
0x000bca7a str r3, [sp, 0x40] | var_40h = r3;
0x000bca7c b 0xbc3ce | goto label_3;
| label_32:
0x000bca7e ldr r1, [sp, 0x40] | r1 = var_40h;
0x000bca80 mov r0, r6 | r0 = r6;
0x000bca82 bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000bca86 strd r0, r1, [sp, 0x54] | __asm ("strd r0, r1, [var_54h]");
0x000bca8a b 0xbc45c | goto label_16;
| label_36:
0x000bca8c mov r1, r6 | r1 = r6;
0x000bca8e mov r0, r4 | r0 = r4;
0x000bca90 bl 0x32f84 | r0 = fcn_00032f84 (r0, r1);
0x000bca94 mov r3, r0 | r3 = r0;
0x000bca96 mov r0, r4 | r0 = r4;
0x000bca98 str r3, [sp, 0x64] | x = r3;
0x000bca9a bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bca9e mov r3, r0 | r3 = r0;
0x000bcaa0 cmp r0, 0 |
| if (r0 != 0) {
0x000bcaa2 bne 0xbc9b8 | goto label_17;
| }
0x000bcaa4 ldr r3, [sp, 0x64] | r3 = x;
0x000bcaa6 cmp r3, 0xf |
| if (r3 <= 0xf) {
0x000bcaa8 ble.w 0xbcd64 | goto label_64;
| }
0x000bcaac ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bcaae mov r3, sb | r3 = sb;
0x000bcab0 mov r2, sl | r2 = sl;
0x000bcab2 mov r1, fp | r1 = fp;
0x000bcab4 bl 0xbc360 | fcn_000bc360 (r0, r1, r2, r3, r4, r5);
0x000bcab8 str r0, [sp, 0x64] | x = r0;
0x000bcaba b 0xbc520 | goto label_18;
| label_57:
0x000bcabc ldrd r0, r1, [sp, 0x30] | __asm ("ldrd r0, r1, [var_30h]");
0x000bcac0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000bcac4 strd r3, r2, [sp, 0x28] | __asm ("strd r3, r2, [var_2ch]");
0x000bcac8 ldrd r4, r5, [r1, 0x38] | __asm ("ldrd r4, r5, [r1, 0x38]");
0x000bcacc ldr r1, [sp, 0x64] | r1 = x;
0x000bcace ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_54h]");
0x000bcad2 strd r4, r5, [sp, 0x20] | __asm ("strd r4, r5, [var_20h]");
0x000bcad6 str r1, [sp] | *(sp) = r1;
0x000bcad8 vstr d16, [sp, 0x18] | __asm ("vstr d16, [sp, 0x18]");
0x000bcadc vstr d16, [sp, 0x10] | __asm ("vstr d16, [sp, 0x10]");
0x000bcae0 vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x000bcae4 bl 0xb5418 | fcn_000b5418 (r0, r1, r2);
0x000bcae8 str r0, [sp, 0x40] | var_40h = r0;
| label_25:
0x000bcaea ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bcaec ldr r3, [r0, 0x34] | r3 = *((r0 + 0x34));
0x000bcaee adds r3, 1 | r3++;
0x000bcaf0 str r3, [r0, 0x34] | *((r0 + 0x34)) = r3;
0x000bcaf2 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000bcaf4 cmp r3, 0 |
| if (r3 != 0) {
0x000bcaf6 bne.w 0xbc84e | goto label_8;
| }
0x000bcafa ldr r3, [sp, 0x78] | r3 = var_78h;
0x000bcafc ldr r2, [sp, 0x54] | r2 = var_54h;
0x000bcafe ldr r1, [sp, 0x58] | r1 = var_58h;
0x000bcb00 ldr r4, [sp, 0x48] | r4 = var_48h;
0x000bcb02 cmp r2, r3 |
0x000bcb04 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000bcb06 sbcs.w r3, r1, r3 | __asm ("sbcs.w r3, r1, r3");
0x000bcb0a ite lt |
| if (r2 >= r3) {
0x000bcb0c movlt r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x000bcb0e movge r3, 0 | r3 = 0;
| }
0x000bcb10 cmp.w r4, -1 |
0x000bcb14 it eq |
| if (r4 != -1) {
0x000bcb16 orreq r3, r3, 1 | r3 |= 1;
| }
0x000bcb1a cmp r3, 0 |
| if (r3 == 0) {
0x000bcb1c beq.w 0xbc84e | goto label_8;
| }
0x000bcb20 mov r3, r1 | r3 = r1;
0x000bcb22 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000bcb24 ldrd r4, r5, [r1, 0x38] | __asm ("ldrd r4, r5, [r1, 0x38]");
0x000bcb28 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x000bcb2c bl 0xb5540 | fcn_000b5540 (r0, r1, r2, r3, r4);
0x000bcb30 str r0, [sp, 0x40] | var_40h = r0;
0x000bcb32 b 0xbc84e | goto label_8;
| label_53:
0x000bcb34 str r7, [sp, 0x34] | var_34h = r7;
0x000bcb36 b 0xbca72 | goto label_19;
| label_62:
0x000bcb38 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000bcb3a movs r1, 0x1a | r1 = 0x1a;
0x000bcb3c bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bcb40 cmp r0, 0 |
| if (r0 != 0) {
0x000bcb42 bne 0xbca60 | goto label_20;
| }
0x000bcb44 ldr r7, [sp, 0x30] | r7 = var_30h;
0x000bcb46 mov r2, sl | r2 = sl;
0x000bcb48 ldr r6, [sp, 0x50] | r6 = var_50h;
0x000bcb4a movs r1, 1 | r1 = 1;
0x000bcb4c ldr r4, [sp, 0x94] | r4 = var_94h;
0x000bcb4e ldr.w r5, [r7, 0x100] | r5 = *((r7 + 0x100));
0x000bcb52 mov r3, r6 | r3 = r6;
0x000bcb54 mov r0, r4 | r0 = r4;
0x000bcb56 smlal r2, r3, fp, r5 | __asm ("smlal r2, r3, fp, r5");
0x000bcb5a lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bcb5c orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000bcb60 lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bcb62 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bcb66 ldr.w r1, [r7, 0x100] | r1 = *((r7 + 0x100));
0x000bcb6a mov r2, sl | r2 = sl;
0x000bcb6c mov r3, r6 | r3 = r6;
0x000bcb6e mov r0, r4 | r0 = r4;
0x000bcb70 smlal r2, r3, fp, r1 | __asm ("smlal r2, r3, fp, r1");
0x000bcb74 movw r1, 0x3ff | r1 = 0x3ff;
0x000bcb78 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bcb7a orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000bcb7e lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bcb80 adds r2, r2, r1 | r2 += r1;
0x000bcb82 mov.w r1, 2 | r1 = 2;
0x000bcb86 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bcb8a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
| label_24:
0x000bcb8e mov r0, r4 | r0 = r4;
0x000bcb90 bl 0x96a64 | fcn_00096a64 (r0);
0x000bcb94 mov r0, r4 | r0 = r4;
0x000bcb96 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bcb9a cmp r0, 0 |
| if (r0 == 0) {
0x000bcb9c beq.w 0xbc962 | goto label_21;
| }
0x000bcba0 b 0xbca60 | goto label_20;
| label_58:
0x000bcba2 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000bcba4 ldr r2, [r1] | r2 = *(r1);
0x000bcba6 ldrd r6, r7, [r1, 8] | __asm ("ldrd r6, r7, [r1, 8]");
0x000bcbaa ldrd r3, r1, [r1, 0x10] | __asm ("ldrd r3, r1, [r1, 0x10]");
0x000bcbae ldr r0, [r2] | r0 = *(r2);
0x000bcbb0 cmp r0, 0 |
| if (r0 == 0) {
0x000bcbb2 beq.w 0xbcd94 | goto label_65;
| }
0x000bcbb6 str.w sl, [sp, 0x60] | __asm ("str.w sl, [var_60h]");
0x000bcbba mov fp, r2 |
0x000bcbbc ldr.w sl, [sp, 0x30] | sl = var_30h;
0x000bcbc0 mov r2, r1 | r2 = r1;
0x000bcbc2 mov.w lr, 1 | lr = 1;
0x000bcbc4 lsrs r1, r0, 0x18 | r1 = r0 >> 0x18;
0x000bcbc6 mov r1, r3 | r1 = r3;
| label_23:
0x000bcbc8 ldr.w r4, [fp, 8] | r4 = *(arg_8h);
0x000bcbcc cmp r4, 0 |
| if (r4 == 0) {
0x000bcbce beq 0xbcc92 | goto label_66;
| }
0x000bcbd0 uxtb.w sb, lr | sb = (int8_t) lr;
0x000bcbd4 mov r5, r1 | r5 = r1;
0x000bcbd6 mov r8, r2 | r8 = r2;
0x000bcbd8 str.w lr, [sp, 0x38] | __asm ("str.w lr, [var_38h]");
0x000bcbdc str.w fp, [sp, 0x44] | __asm ("str.w fp, [var_44h]");
0x000bcbe0 strd r1, r2, [sp, 0x4c] | __asm ("strd r1, r2, [var_50h]");
| label_22:
0x000bcbe4 mov r2, r6 | r2 = r6;
0x000bcbe6 mov ip, r7 |
0x000bcbe8 movs r1, 0 | r1 = 0;
0x000bcbea mov r3, r6 | r3 = r6;
0x000bcbec mov r0, r7 | r0 = r7;
| do {
0x000bcbee lsrs r3, r3, 7 | r3 >>= 7;
0x000bcbf0 adds r1, 1 | r1++;
0x000bcbf2 orr.w r3, r3, r0, lsl 25 | r3 |= (r0 << 25);
0x000bcbf6 lsrs r0, r0, 7 | r0 >>= 7;
0x000bcbf8 orrs.w lr, r3, r0 | lr = r3 | r0;
0x000bcbfc bne 0xbcbee |
| } while (lr != r3);
0x000bcbfe ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000bcc00 rsb.w r0, r1, 0xa | r0 = 0xa - r1;
0x000bcc04 rsb.w r1, r1, 0xb | r1 = 0xb - r1;
0x000bcc08 strb.w sb, [r3, r0] | *((r3 + r0)) = sb;
0x000bcc0c ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000bcc0e add r1, r3 | r1 += r3;
| do {
0x000bcc10 lsr.w lr, r2, 7 | lr = r2 >> 7;
0x000bcc14 orn r3, r2, 0x7f | r3 = r2 | 0x7f;
| r3 = ~r3;
0x000bcc18 uxtb.w fp, r2 | fp = (int8_t) r2;
0x000bcc1c orr.w r2, lr, ip, lsl 25 | r2 = lr | (ip << 25);
0x000bcc20 lsr.w ip, ip, 7 |
0x000bcc24 mov lr, r1 | lr = r1;
0x000bcc26 strb r3, [r1], 1 | *(r1) = r3;
| r1++;
0x000bcc2a orrs.w r3, r2, ip | r3 = r2 | ip;
0x000bcc2e bne 0xbcc10 |
| } while (r3 != r2);
0x000bcc30 strb.w fp, [lr] | *(lr) = fp;
0x000bcc34 mov r2, r5 | r2 = r5;
0x000bcc36 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000bcc38 subs r3, r3, r0 | r3 -= r0;
0x000bcc3a str r3, [sp, 4] | var_4h = r3;
0x000bcc3c ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000bcc3e add r3, r0 | r3 += r0;
0x000bcc40 mov r0, sl | r0 = sl;
0x000bcc42 str r3, [sp] | *(sp) = r3;
0x000bcc44 mov r3, r8 | r3 = r8;
0x000bcc46 bl 0xb52d4 | fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000bcc4a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000bcc4c adds r5, 1 | r5++;
0x000bcc4e ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x000bcc50 adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x000bcc54 adds r3, 1 | r3++;
0x000bcc56 adds r6, r3, r6 | r6 = r3 + r6;
0x000bcc58 adc.w r7, r7, r3, asr 31 | __asm ("adc.w r7, r7, r3, asr 31");
0x000bcc5c subs r3, r4, 0 | r3 = r4 - 0;
0x000bcc5e it ne |
| if (r3 == r4) {
0x000bcc60 movne r3, 1 | r3 = 1;
| }
0x000bcc62 cmp r0, 0 |
0x000bcc64 it ne |
| if (r0 == 0) {
0x000bcc66 movne r3, 0 | r3 = 0;
| }
0x000bcc68 cmp r3, 0 |
| if (r3 != 0) {
0x000bcc6a bne 0xbcbe4 | goto label_22;
| }
0x000bcc6c ldr.w lr, [sp, 0x38] | lr = var_38h;
0x000bcc70 ldr.w fp, [sp, 0x44] | fp = var_44h;
0x000bcc74 ldrd r1, r2, [sp, 0x4c] | __asm ("ldrd r1, r2, [var_50h]");
| if (r0 != 0) {
0x000bcc78 cbnz r0, 0xbcc9e | goto label_67;
| }
| do {
0x000bcc7a ldr.w fp, [fp] | fp = *(fp);
0x000bcc7e add.w lr, lr, 1 | lr++;
0x000bcc82 mov r6, r1 | r6 = r1;
0x000bcc84 mov r7, r2 | r7 = r2;
0x000bcc86 ldr.w r3, [fp] | r3 = *(fp);
| if (r3 == 0) {
0x000bcc8a cbz r3, 0xbccd4 | goto label_68;
| }
0x000bcc8c mov r1, r5 | r1 = r5;
0x000bcc8e mov r2, r8 | r2 = r8;
0x000bcc90 b 0xbcbc8 | goto label_23;
| label_66:
0x000bcc92 mov r5, r1 | r5 = r1;
0x000bcc94 mov r8, r2 | r8 = r2;
0x000bcc96 b 0xbcc7a |
| } while (1);
| label_47:
0x000bcc98 movs r3, 7 | r3 = 7;
0x000bcc9a str r7, [sp, 0x34] | var_34h = r7;
0x000bcc9c b 0xbc84c | goto label_6;
| label_67:
0x000bcc9e ldr r2, [sp, 0x30] | r2 = var_30h;
0x000bcca0 str r0, [sp, 0x40] | var_40h = r0;
0x000bcca2 ldr r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x000bcca4 adds r3, 1 | r3++;
0x000bcca6 str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x000bcca8 b 0xbc84e | goto label_8;
| label_63:
0x000bccaa ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bccac mov r2, sl | r2 = sl;
0x000bccae ldr r4, [sp, 0x94] | r4 = var_94h;
0x000bccb0 ldr.w r1, [r3, 0x100] | r1 = *((r3 + 0x100));
0x000bccb4 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000bccb6 mov r0, r4 | r0 = r4;
0x000bccb8 smlal r2, r3, fp, r1 | __asm ("smlal r2, r3, fp, r1");
0x000bccbc ldr r1, [sp, 0x48] | r1 = var_48h;
0x000bccbe lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bccc0 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000bccc4 lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bccc6 adds r2, r2, r1 | r2 += r1;
0x000bccc8 adc.w r3, r3, r1, asr 31 | __asm ("adc.w r3, r3, r1, asr 31");
0x000bcccc movs r1, 1 | r1 = 1;
0x000bccce bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bccd2 b 0xbcb8e | goto label_24;
| label_68:
0x000bccd4 ldr.w sl, [sp, 0x60] | sl = var_60h;
0x000bccd8 mov r3, r1 | r3 = r1;
0x000bccda mov r1, r2 | r1 = r2;
0x000bccdc mov r2, fp | r2 = fp;
| label_26:
0x000bccde ldr r6, [sp, 0x40] | r6 = var_40h;
0x000bcce0 mov r0, r3 | r0 = r3;
0x000bcce2 mov r4, r1 | r4 = r1;
| do {
| label_28:
0x000bcce4 lsrs r3, r3, 7 | r3 >>= 7;
0x000bcce6 adds r6, 1 | r6++;
0x000bcce8 orr.w r3, r3, r4, lsl 25 | r3 |= (r4 << 25);
0x000bccec lsrs r4, r4, 7 | r4 >>= 7;
0x000bccee orrs.w r7, r3, r4 | r7 = r3 | r4;
0x000bccf2 bne 0xbcce4 |
| } while (r7 != r3);
0x000bccf4 ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000bccf6 rsb.w ip, r6, 0xa |
0x000bccfa rsb.w r4, r6, 0xb | r4 = 0xb - r6;
0x000bccfe strb.w lr, [r3, ip] |
0x000bcd02 ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000bcd04 add r3, r4 | r3 += r4;
| do {
0x000bcd06 lsrs r6, r0, 7 | r6 = r0 >> 7;
0x000bcd08 orn r4, r0, 0x7f | r4 = r0 | 0x7f;
| r4 = ~r4;
0x000bcd0c uxtb r7, r0 | r7 = (int8_t) r0;
0x000bcd0e orr.w r0, r6, r1, lsl 25 | r0 = r6 | (r1 << 25);
0x000bcd12 lsrs r1, r1, 7 | r1 >>= 7;
0x000bcd14 mov r6, r3 | r6 = r3;
0x000bcd16 strb r4, [r3], 1 | *(r3) = r4;
| r3++;
0x000bcd1a orrs.w r4, r0, r1 | r4 = r0 | r1;
0x000bcd1e bne 0xbcd06 |
| } while (r4 != r0);
0x000bcd20 strb r7, [r6] | *(r6) = r7;
0x000bcd22 subs r5, 1 | r5--;
0x000bcd24 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000bcd26 adc r4, r8, -1 | __asm ("adc r4, r8, -1");
0x000bcd2a ldrd r0, r1, [sp, 0x30] | __asm ("ldrd r0, r1, [var_30h]");
| label_27:
0x000bcd2c lsls r4, r1, 4 | r4 = r1 << 4;
0x000bcd2e sub.w r3, r3, ip | r3 -= ip;
0x000bcd32 str r3, [sp, 0x2c] | var_2ch = r3;
0x000bcd34 ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000bcd36 add r3, ip | r3 += ip;
0x000bcd38 str r3, [sp, 0x28] | var_28h = r3;
0x000bcd3a ldrd r6, r7, [r1, 0x38] | __asm ("ldrd r6, r7, [r1, 0x38]");
0x000bcd3e strd r5, r4, [sp, 0x18] | __asm ("strd r5, r4, [var_18h]");
0x000bcd42 ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000bcd44 strd r6, r7, [sp, 0x20] | __asm ("strd r6, r7, [var_20h]");
0x000bcd48 ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_54h]");
0x000bcd4c strd r4, sl, [sp, 0x10] | __asm ("strd r4, sl, [var_10h]");
0x000bcd50 ldrd r4, r5, [r1, 8] | __asm ("ldrd r4, r5, [r1, 8]");
0x000bcd54 ldr r1, [sp, 0x64] | r1 = x;
0x000bcd56 strd r4, r5, [sp, 8] | __asm ("strd r4, r5, [var_ch]");
0x000bcd5a str r1, [sp] | *(sp) = r1;
0x000bcd5c bl 0xb5418 | fcn_000b5418 (r0, r1, r2);
0x000bcd60 str r0, [sp, 0x40] | var_40h = r0;
0x000bcd62 b 0xbcaea | goto label_25;
| label_64:
0x000bcd64 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000bcd66 ldr r2, [sp, 0x58] | r2 = var_58h;
0x000bcd68 strd r8, r7, [sp, 0x54] | __asm ("strd r8, r7, [var_54h]");
0x000bcd6c cmp r3, r8 |
0x000bcd6e str r3, [sp, 0x78] | var_78h = r3;
0x000bcd70 sbcs.w r3, r2, r7 | __asm ("sbcs.w r3, r2, r7");
0x000bcd74 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000bcd76 str r2, [sp, 0x7c] | var_7ch = r2;
0x000bcd78 ite lt |
| if (r3 >= r8) {
0x000bcd7a movlt r2, 1 | r2 = 1;
| }
| if (r3 < r8) {
0x000bcd7c movge r2, 0 | r2 = 0;
| }
0x000bcd7e cmp.w r3, -1 |
0x000bcd82 ite eq |
| if (r3 != -1) {
0x000bcd84 moveq r2, 0 | r2 = 0;
| }
| if (r3 == -1) {
0x000bcd86 andne r2, r2, 1 | r2 &= 1;
| }
0x000bcd8a lsls r2, r2, 1 | r2 <<= 1;
0x000bcd8c orr r2, r2, 1 | r2 |= 1;
0x000bcd90 b.w 0xbc556 | goto label_11;
| label_65:
0x000bcd94 mov r5, r3 | r5 = r3;
0x000bcd96 mov r8, r1 | r8 = r1;
0x000bcd98 mov r3, r6 | r3 = r6;
0x000bcd9a mov r1, r7 | r1 = r7;
0x000bcd9c mov.w lr, 1 | lr = 1;
0x000bcda0 b 0xbccde | goto label_26;
| label_31:
0x000bcda2 blx 0x6430 | fcn_00006430 ();
0x000bcda6 nop |
| if (r2 >= r2) {
0x000bcda8 bge 0xbcdec | void (*0xbcdec)() ();
| }
0x000bcdaa movs r2, r0 | r2 = r0;
0x000bcdac lsls r4, r6, 8 | r4 = r6 << 8;
0x000bcdae movs r0, r0 |
| if (r0 < r0) {
0x000bcdb0 bls 0xbcd2c | goto label_27;
| }
0x000bcdb2 movs r2, r0 | r2 = r0;
| if (r2 <= r0) {
0x000bcdb4 ble 0xbcde8 | void (*0xbcde8)() ();
| }
0x000bcdb6 movs r2, r0 | r2 = r0;
| if (r2 <= r0) {
0x000bcdb8 ble 0xbcddc | goto label_69;
| }
0x000bcdba movs r2, r0 | r2 = r0;
| if (r2 <= r0) {
0x000bcdbc ble 0xbcdd0 | void (*0xbcdd0)() ();
| }
0x000bcdbe movs r2, r0 | r2 = r0;
| if (r2 >= r0) {
0x000bcdc0 bge 0xbcce4 | goto label_28;
| }
0x000bcdc2 movs r2, r0 | r2 = r0;
| label_69:
0x000bcddc lsls r0, r0, 0xc | r0 <<= 0xc;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xbd78c */
| #include <stdint.h>
|
; (fcn) fcn.000bd78c () | void fcn_000bd78c (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int32_t var_d8h_2;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_f0h;
| int16_t var_f4h;
| int16_t var_100h;
| int16_t var_104h;
| int16_t var_110h;
| int32_t var_110h_2;
| int16_t var_118h;
| int16_t var_11ch;
| int16_t var_134h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000bd78c ldr.w r3, [pc, 0xc34] |
0x000bd790 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000bd794 vpush {d8, d9} | __asm ("vpush {d8, d9}");
0x000bd798 sub sp, 0x13c |
0x000bd79a add r3, pc | r3 = 0x17bb62;
0x000bd79c str r2, [sp, 0x74] | var_74h = r2;
0x000bd79e ldr.w r4, [r3, 0xd0] | r4 = imp.atan;
0x000bd7a2 movs r3, 0 | r3 = 0;
0x000bd7a4 ldr.w r2, [pc, 0xc20] |
0x000bd7a8 str r3, [sp, 0xe0] | var_e0h = r3;
0x000bd7aa ldr.w r3, [pc, 0xc20] | r3 = *(0xbe3ce);
0x000bd7ae add r2, pc | r2 = 0x17bb7a;
0x000bd7b0 str r0, [sp, 0x34] | var_34h = r0;
0x000bd7b2 str r1, [sp, 0x44] | var_44h = r1;
0x000bd7b4 ldr r3, [r2, r3] |
0x000bd7b6 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000bd7ba ldr r3, [r3] | r3 = imp.atan;
0x000bd7bc str r3, [sp, 0x134] | var_134h = r3;
0x000bd7be mov.w r3, 0 | r3 = 0;
0x000bd7c2 add r3, sp, 0xe4 | r3 += var_e4h;
0x000bd7c4 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000bd7c8 cmp r4, 0 |
| if (r4 != 0) {
0x000bd7ca bne 0xbd848 | goto label_79;
| }
0x000bd7cc bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bd7d0 cmp r0, 0 |
| if (r0 != 0) {
0x000bd7d2 bne 0xbd842 | goto label_80;
| }
0x000bd7d4 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000bd7d8 cbnz r0, 0xbd842 | goto label_80;
| }
| label_0:
0x000bd7da mov.w r0, 0x288 | r0 = 0x288;
0x000bd7de movs r1, 0 | r1 = 0;
0x000bd7e0 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000bd7e4 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x000bd7e6 cbz r0, 0xbd842 | goto label_80;
| }
0x000bd7e8 add.w r3, r0, 0x238 | r3 = r0 + 0x238;
0x000bd7ec add r2, sp, 0xf0 | r2 += var_f0h;
0x000bd7ee str r3, [sp, 0x7c] | var_7ch = r3;
0x000bd7f0 movs r1, 0x16 | r1 = 0x16;
0x000bd7f2 movs r3, 0 | r3 = 0;
0x000bd7f4 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bd7f6 str r3, [sp, 0xf0] | var_f0h = r3;
0x000bd7f8 str r3, [sp, 0xe4] | var_e4h = r3;
0x000bd7fa str r2, [sp, 0x80] | var_80h = r2;
0x000bd7fc bl 0xa4658 | fcn_000a4658 (r0, r1, r2, r3);
0x000bd800 add.w r3, sb, 0x248 | r3 = sb + 0x248;
0x000bd804 mov r5, r0 | r5 = r0;
0x000bd806 mov fp, r0 |
0x000bd808 str r0, [sp, 0x100] | var_100h = r0;
0x000bd80a str r3, [sp, 0x40] | var_40h = r3;
| if (r0 == 0) {
0x000bd80c cbz r0, 0xbd84e | goto label_81;
| }
| label_1:
0x000bd80e ldr r4, [sp, 0xe0] | r4 = var_e0h;
| label_2:
0x000bd810 mov r0, sb | r0 = sb;
0x000bd812 bl 0x26dbc | fcn_00026dbc (r0);
0x000bd816 mov r0, r4 | r0 = r4;
0x000bd818 bl 0x26dbc | fcn_00026dbc (r0);
| do {
0x000bd81c ldr.w r2, [pc, 0xbb0] |
0x000bd820 ldr.w r3, [pc, 0xba8] | r3 = *(0xbe3cc);
0x000bd824 add r2, pc | r2 = 0x17bbf8;
0x000bd826 ldr r3, [r2, r3] | r3 = imp.atan;
0x000bd828 ldr r2, [r3] | r2 = imp.atan;
0x000bd82a ldr r3, [sp, 0x134] | r3 = var_134h;
0x000bd82c eors r2, r3 | r2 ^= r3;
0x000bd82e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000bd832 bne.w 0xbeea0 | goto label_82;
| }
0x000bd836 mov r0, fp | r0 = fp;
0x000bd838 add sp, 0x13c |
0x000bd83a vpop {d8, d9} | __asm ("vpop {d8, d9}");
0x000bd83e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_80:
0x000bd842 mov.w fp, 7 |
0x000bd846 b 0xbd81c |
| } while (1);
| label_79:
0x000bd848 dmb ish | __asm ("dmb ish");
0x000bd84c b 0xbd7da | goto label_0;
| label_81:
0x000bd84e ldr r4, [sp, 0xf0] | r4 = var_f0h;
0x000bd850 movs r1, 1 | r1 = 1;
0x000bd852 movs r2, 1 | r2 = 1;
0x000bd854 movs r3, 0 | r3 = 0;
0x000bd856 mov r0, r4 | r0 = r4;
0x000bd858 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bd85c mov r0, r4 | r0 = r4;
0x000bd85e bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bd862 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bd864 beq.w 0xbe03e | goto label_83;
| }
| label_27:
0x000bd868 mov r0, r4 | r0 = r4;
0x000bd86a bl 0x79b80 | fcn_00079b80 (r0);
0x000bd86e ldr r2, [sp, 0x44] | r2 = var_44h;
0x000bd870 clz r3, r0 | r3 &= r0;
0x000bd874 lsrs r3, r3, 5 | r3 >>= 5;
0x000bd876 mov fp, r0 |
0x000bd878 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bd87a cmp r2, 0 |
0x000bd87c it le |
| if (r2 > 0) {
0x000bd87e movle r3, 0 | r3 = 0;
| }
0x000bd880 str r3, [sp, 0x8c] | var_8ch = r3;
0x000bd882 cmp r3, 0 |
| if (r3 == 0) {
0x000bd884 beq 0xbd80e | goto label_1;
| }
0x000bd886 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000bd888 mov.w r2, 0x9000 |
0x000bd88c movt r2, 0xffff | r2 = 0x-7000;
0x000bd890 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000bd894 str r2, [sp, 0x68] | var_68h = r2;
0x000bd896 mov sl, sb | sl = sb;
0x000bd898 cmp r3, 2 |
0x000bd89a it lt |
| if (r3 >= 2) {
0x000bd89c movlt r3, 2 | r3 = 2;
| }
0x000bd89e mov lr, r3 | lr = r3;
0x000bd8a0 ldr.w r3, [pc, 0xb30] |
0x000bd8a4 asr.w r2, lr, 0x1f | r2 = lr >> 0x1f;
0x000bd8a8 str.w lr, [sp, 0x6c] | __asm ("str.w lr, [var_6ch]");
0x000bd8ac add r3, pc | r3 = 0x17bc84;
0x000bd8ae str r2, [sp, 0x64] | var_64h = r2;
0x000bd8b0 str r3, [sp, 0x70] | var_70h = r3;
0x000bd8b2 movs r3, 0 | r3 = 0;
0x000bd8b4 str r3, [sp, 0x78] | var_78h = r3;
0x000bd8b6 strd r3, r3, [sp, 0x38] | __asm ("strd r3, r3, [var_38h]");
0x000bd8ba add r3, sp, 0xc8 | r3 += var_c8h;
0x000bd8bc str r3, [sp, 0x48] | var_48h = r3;
| label_6:
0x000bd8be ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bd8c0 movs r3, 0 | r3 = 0;
0x000bd8c2 movs r1, 0x1c | r1 = 0x1c;
0x000bd8c4 ldr r2, [sp, 0x48] | r2 = var_48h;
0x000bd8c6 str r3, [sp, 0xc8] | var_c8h = r3;
0x000bd8c8 ldr.w r5, [r0, 0x100] | r5 = *((r0 + 0x100));
0x000bd8cc bl 0xa4658 | fcn_000a4658 (r0, r1, r2, r3);
0x000bd8d0 ldr r4, [sp, 0xc8] | r4 = var_c8h;
0x000bd8d2 movs r1, 1 | r1 = 1;
0x000bd8d4 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bd8d6 lsls r5, r5, 0xa | r5 <<= 0xa;
0x000bd8d8 mov r0, r4 | r0 = r4;
0x000bd8da asrs r6, r5, 0x1f | r6 = r5 >> 0x1f;
0x000bd8dc bl 0x53aa0 | r0 = fcn_00053aa0 (r0, r1);
0x000bd8e0 cmp r0, 0 |
| if (r0 == 0) {
0x000bd8e2 beq 0xbd98c | goto label_84;
| }
| label_3:
0x000bd8e4 mov r0, r4 | r0 = r4;
0x000bd8e6 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bd8ea cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bd8ec beq 0xbd9bc | goto label_85;
| }
| label_4:
0x000bd8ee mov r0, r4 | r0 = r4;
0x000bd8f0 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bd8f4 mov r4, r0 | r4 = r0;
0x000bd8f6 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bd8f8 cmp r0, 0 |
| if (r0 != 0) {
0x000bd8fa bne.w 0xbda2e | goto label_86;
| }
0x000bd8fe ldr r7, [sp, 0xe4] | r7 = var_e4h;
0x000bd900 cmp r7, 0 |
| if (r7 != 0) {
0x000bd902 bne.w 0xbda80 | goto label_87;
| }
| label_5:
0x000bd906 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000bd908 mov sb, sl | sb = sl;
0x000bd90a ldr.w fp, [sp, 0xc4] | fp = var_c4h;
0x000bd90e ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000bd910 cmp r3, 0 |
| if (r3 == 0) {
0x000bd912 beq.w 0xbd810 | goto label_2;
| }
| label_7:
0x000bd916 cmp.w fp, 0 |
| if (fp != 0) {
0x000bd91a bne.w 0xbd810 | goto label_2;
| }
0x000bd91e mov r3, fp | r3 = fp;
0x000bd920 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bd922 add r2, sp, 0x100 | r2 += var_100h;
0x000bd924 movs r1, 0x17 | r1 = 0x17;
0x000bd926 str.w fp, [sp, 0x100] | __asm ("str.w fp, [var_100h]");
0x000bd92a bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bd92e mov fp, r0 |
0x000bd930 cmp r0, 0 |
| if (r0 != 0) {
0x000bd932 bne.w 0xbd810 | goto label_2;
| }
0x000bd936 ldr r5, [sp, 0x100] | r5 = var_100h;
0x000bd938 movs r2, 1 | r2 = 1;
0x000bd93a movs r3, 0 | r3 = 0;
0x000bd93c movs r1, 1 | r1 = 1;
0x000bd93e mov r0, r5 | r0 = r5;
0x000bd940 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bd944 ldr r3, [sp, 0xe4] | r3 = var_e4h;
0x000bd946 movs r1, 2 | r1 = 2;
0x000bd948 mov r2, r4 | r2 = r4;
0x000bd94a strd fp, fp, [sp, 8] | __asm ("strd fp, fp, [var_8h]");
0x000bd94e mov r0, r5 | r0 = r5;
0x000bd950 str r3, [sp] | *(sp) = r3;
0x000bd952 asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000bd954 str r3, [sp, 4] | var_4h = r3;
0x000bd956 bl 0x53bf8 | fcn_00053bf8 (r0, r1, r2, r3, r4, r5);
0x000bd95a mov r0, r5 | r0 = r5;
0x000bd95c bl 0x96a64 | fcn_00096a64 (r0);
0x000bd960 mov r0, r5 | r0 = r5;
0x000bd962 bl 0x79b80 | fcn_00079b80 (r0);
0x000bd966 movs r1, 2 | r1 = 2;
0x000bd968 mov fp, r0 |
0x000bd96a mov r0, r5 | r0 = r5;
0x000bd96c bl 0x53aa0 | r0 = fcn_00053aa0 (r0, r1);
0x000bd970 cmp r0, 0 |
| if (r0 != 0) {
0x000bd972 bne.w 0xbd810 | goto label_2;
| }
0x000bd976 ldr r3, [r5] | r3 = *(r5);
0x000bd978 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000bd97a cmp r0, 0 |
| if (r0 == 0) {
0x000bd97c beq.w 0xbd810 | goto label_2;
| }
0x000bd980 ldr.w r3, [pc, 0xa54] |
0x000bd984 add r3, pc |
0x000bd986 ldr r3, [r3, 0x58] | r3 = imp.atan;
0x000bd988 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000bd98a b 0xbd810 | goto label_2;
| label_84:
0x000bd98c ldr r0, [r4, 0x64] | r0 = *((r4 + 0x64));
0x000bd98e ldr r2, [sp, 0x68] | r2 = var_68h;
0x000bd990 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000bd992 tst r2, r3 |
| if ((r2 & r3) != 0) {
0x000bd994 bne.w 0xbdb56 | goto label_88;
| }
0x000bd998 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000bd99a str r3, [r0] | *(r0) = r3;
0x000bd99c ldr r3, [sp, 0x64] | r3 = var_64h;
0x000bd99e str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000bd9a0 movs r3, 4 | r3 = 4;
0x000bd9a2 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| label_10:
0x000bd9a4 ldr r3, [r4] | r3 = *(r4);
0x000bd9a6 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000bd9a8 cmp r0, 0 |
| if (r0 == 0) {
0x000bd9aa beq 0xbd8e4 | goto label_3;
| }
0x000bd9ac ldr r3, [sp, 0x70] | r3 = var_70h;
0x000bd9ae ldr r3, [r3, 0x58] | r3 = *((r3 + 0x58));
0x000bd9b0 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x000bd9b2 mov r0, r4 | r0 = r4;
0x000bd9b4 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bd9b8 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000bd9ba bne 0xbd8ee | goto label_4;
| }
| label_85:
0x000bd9bc movs r1, 0 | r1 = 0;
0x000bd9be mov r0, r4 | r0 = r4;
0x000bd9c0 bl 0x32f34 | r0 = fcn_00032f34 (r0, r1);
0x000bd9c4 strd r1, r0, [sp, 0x38] | __asm ("strd r1, r0, [var_38h]");
0x000bd9c8 movs r1, 1 | r1 = 1;
0x000bd9ca mov r0, r4 | r0 = r4;
0x000bd9cc movs r7, 0 | r7 = 0;
0x000bd9ce bl 0x32f84 | r0 = fcn_00032f84 (r0, r1);
0x000bd9d2 mov sb, r0 | sb = r0;
0x000bd9d4 mov r0, r4 | r0 = r4;
0x000bd9d6 str.w sb, [sp, 0x30] | __asm ("str.w sb, [var_30h]");
0x000bd9da bl 0x79b80 | fcn_00079b80 (r0);
0x000bd9de str r0, [sp, 0xc4] | var_c4h = r0;
0x000bd9e0 cmp r0, 0 |
| if (r0 == 0) {
0x000bd9e2 beq.w 0xbeea4 | goto label_89;
| }
| label_9:
0x000bd9e6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bd9e8 cmp r3, 0 |
| if (r3 <= 0) {
0x000bd9ea ble 0xbd906 | goto label_5;
| }
0x000bd9ec ldr r3, [sp, 0x38] | r3 = var_38h;
0x000bd9ee cmp r3, 0 |
| if (r3 < 0) {
0x000bd9f0 blt.w 0xbde9c | goto label_90;
| }
0x000bd9f4 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000bd9f6 movs r1, 0 | r1 = 0;
0x000bd9f8 cmp r1, r2 |
0x000bd9fa sbcs r5, r3 | __asm ("sbcs r5, r3");
| if (r1 < r2) {
0x000bd9fc blt.w 0xbde9c | goto label_90;
| }
0x000bda00 mov.w r2, 0x288 | r2 = 0x288;
0x000bda04 mov r0, sl | r0 = sl;
0x000bda06 blx 0x62ec | fcn_000062ec ();
0x000bda0a ldr r4, [sp, 0xc4] | r4 = var_c4h;
0x000bda0c movs r5, 1 | r5 = 1;
0x000bda0e str.w r5, [sl, 0x244] | __asm ("str.w r5, [sl, 0x244]");
| if (r4 == 0) {
0x000bda12 cbz r4, 0xbda3e | goto label_91;
| }
| label_8:
0x000bda14 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000bda16 bl 0x7a754 | fcn_0007a754 (r0);
0x000bda1a ldr r2, [sp, 0x44] | r2 = var_44h;
0x000bda1c clz r3, r4 | r3 &= r4;
0x000bda20 lsrs r3, r3, 5 | r3 >>= 5;
0x000bda22 cmp r2, 0 |
0x000bda24 it le |
| if (r2 > 0) {
0x000bda26 movle r3, 0 | r3 = 0;
| }
0x000bda28 cmp r3, 0 |
| if (r3 != 0) {
0x000bda2a bne.w 0xbd8be | goto label_6;
| }
| label_86:
0x000bda2e ldr r3, [sp, 0x78] | r3 = var_78h;
0x000bda30 mov fp, r4 |
0x000bda32 mov sb, sl | sb = sl;
0x000bda34 ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000bda36 cmp r3, 0 |
| if (r3 != 0) {
0x000bda38 bne.w 0xbd916 | goto label_7;
| }
0x000bda3c b 0xbd810 | goto label_2;
| label_91:
0x000bda3e mov r3, r4 | r3 = r4;
0x000bda40 add r2, sp, 0x100 | r2 += var_100h;
0x000bda42 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bda44 movs r1, 8 | r1 = 8;
0x000bda46 str r4, [sp, 0x100] | var_100h = r4;
0x000bda48 str r2, [sp, 0x4c] | var_4ch = r2;
0x000bda4a bl 0xa4658 | fcn_000a4658 (r0, r1, r2, r3);
0x000bda4e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000bda50 mov r4, r0 | r4 = r0;
0x000bda52 adds r3, r3, r5 | r3 += r5;
0x000bda54 str r3, [sp, 0x5c] | var_5ch = r3;
0x000bda56 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000bda58 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bda5c str r3, [sp, 0x60] | var_60h = r3;
0x000bda5e cmp r0, 0 |
| if (r0 == 0) {
0x000bda60 beq 0xbdb60 | goto label_92;
| }
0x000bda62 str r0, [sp, 0xc4] | var_c4h = r0;
| label_11:
0x000bda64 mov.w r8, 0 | r8 = 0;
| label_12:
0x000bda68 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bda6a movs r3, 0 | r3 = 0;
0x000bda6c ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bda6e movs r1, 0xf | r1 = 0xf;
0x000bda70 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bda74 mov r4, r0 | r4 = r0;
0x000bda76 cmp r0, 0 |
| if (r0 == 0) {
0x000bda78 beq.w 0xbdd36 | goto label_93;
| }
0x000bda7c str r0, [sp, 0xc4] | var_c4h = r0;
0x000bda7e b 0xbda14 | goto label_8;
| label_87:
0x000bda80 ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000bda82 subs r2, r7, 1 | r2 = r7 - 1;
0x000bda84 mov r3, r2 | r3 = r2;
0x000bda86 str r0, [sp, 0xf0] | var_f0h = r0;
0x000bda88 vstr d8, [sp, 0x100] | __asm ("vstr d8, [sp, 0x100]");
0x000bda8c ldrsb r1, [r4, r2] | r1 = *((r4 + r2));
0x000bda8e cmp r1, 0 |
| if (r1 < 0) {
0x000bda90 blt.w 0xbdebc | goto label_94;
| }
0x000bda94 mov.w r1, -1 | r1 = -1;
0x000bda98 str r1, [sp, 0x30] | var_30h = r1;
| label_71:
0x000bda9a cmp r2, 0 |
| if (r2 <= 0) {
0x000bda9c ble.w 0xbdd84 | goto label_95;
| }
0x000bdaa0 add r2, r4 | r2 += r4;
0x000bdaa2 b 0xbdaaa |
| while (r1 < 0) {
0x000bdaa4 subs r3, 1 | r3--;
| if (r3 == 1) {
0x000bdaa6 beq.w 0xbdd8e | goto label_96;
| }
0x000bdaaa ldrsb r1, [r2, -0x1]! | r1 = *((r2 -= 0x1));
0x000bdaae cmp r1, 0 |
0x000bdab0 blt 0xbdaa4 |
| }
0x000bdab2 subs.w r8, r3, 1 | r8 = r3 - 1;
0x000bdab6 it ne |
| if (r8 == r3) {
0x000bdab8 addne r3, r4, r8 | r3 = r4 + r8;
| }
| if (r8 != r3) {
0x000bdabc bne 0xbdac6 | goto label_97;
| }
0x000bdabe b 0xbdace | goto label_16;
| do {
0x000bdac0 subs.w r8, r8, 1 | r8--;
| if (r8 == r8) {
0x000bdac4 beq 0xbdace | goto label_16;
| }
| label_97:
0x000bdac6 ldrsb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x000bdaca cmp r2, 0 |
0x000bdacc blt 0xbdac0 |
| } while (r2 < 0);
| label_16:
0x000bdace add.w r0, r4, r8 | r0 = r4 + r8;
0x000bdad2 add r1, sp, 0x100 | r1 += var_100h;
0x000bdad4 str.w r8, [sp, 0xe4] | __asm ("str.w r8, [var_e4h]");
0x000bdad8 bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x000bdadc add r8, r0 | r8 += r0;
0x000bdade ldrb.w r3, [r4, r8] | r3 = *((r4 + r8));
0x000bdae2 add.w r0, r4, r8 | r0 = r4 + r8;
0x000bdae6 lsls r4, r3, 0x18 | r4 = r3 << 0x18;
0x000bdae8 itt pl |
| if (r4 < r3) {
0x000bdaea movpl r0, 1 | r0 = 1;
| }
| if (r4 < r3) {
0x000bdaec strpl r3, [sp, 0xf0] | var_f0h = r3;
| }
| if (r4 < r3) {
0x000bdaee bmi.w 0xbdeb4 | goto label_98;
| }
| label_19:
0x000bdaf2 add r8, r0 | r8 += r0;
0x000bdaf4 movw r3, 0x10b | r3 = 0x10b;
0x000bdaf8 cmp r7, r8 |
0x000bdafa it eq |
| if (r7 != r8) {
0x000bdafc moveq r3, 0 | r3 = 0;
| }
0x000bdafe ldrd r8, r4, [sp, 0x100] | __asm ("ldrd r8, r4, [var_100h]");
| label_17:
0x000bdb02 str r3, [sp, 0xc4] | var_c4h = r3;
0x000bdb04 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bdb06 cmp r3, 0 |
| if (r3 < 0) {
0x000bdb08 blt 0xbdb38 | goto label_20;
| }
0x000bdb0a mov r3, r6 | r3 = r6;
0x000bdb0c ldrd r1, r0, [sp, 0x38] | __asm ("ldrd r1, r0, [var_38h]");
0x000bdb10 mov r2, r5 | r2 = r5;
0x000bdb12 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x000bdb16 mov r1, r3 | r1 = r3;
0x000bdb18 mov sb, r2 | sb = r2;
0x000bdb1a mov r3, r6 | r3 = r6;
0x000bdb1c mov r2, r5 | r2 = r5;
0x000bdb1e mov r6, r1 | r6 = r1;
0x000bdb20 mov r0, r8 | r0 = r8;
0x000bdb22 mov r1, r4 | r1 = r4;
0x000bdb24 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x000bdb28 cmp sb, r2 |
0x000bdb2a sbcs.w r3, r6, r3 | __asm ("sbcs.w r3, r6, r3");
0x000bdb2e itt lt |
| if (sb >= r2) {
0x000bdb30 strlt r7, [sp, 0xe4] | var_e4h = r7;
| }
| if (sb < r2) {
0x000bdb32 movlt r7, 0 | r7 = 0;
| goto label_99;
| }
| if (sb < r2) {
| label_99:
0x000bdb34 blt.w 0xbd9e6 | goto label_9;
| }
| label_20:
0x000bdb38 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000bdb3a movs r7, 1 | r7 = 1;
0x000bdb3c ldr r3, [sp, 0x74] | r3 = var_74h;
0x000bdb3e strd r4, r8, [sp, 0x38] | __asm ("strd r4, r8, [var_38h]");
0x000bdb42 str r7, [sp, 0x78] | var_78h = r7;
0x000bdb44 cmp r2, r3 |
0x000bdb46 it lt |
| if (r2 >= r3) {
0x000bdb48 movlt r2, r3 | r2 = r3;
| }
0x000bdb4a ldr r3, [sp, 0xf0] | r3 = var_f0h;
0x000bdb4c cmp r2, r3 |
0x000bdb4e it ge |
| if (r2 < r3) {
0x000bdb50 movge r2, r3 | r2 = r3;
| }
0x000bdb52 str r2, [sp, 0x30] | var_30h = r2;
0x000bdb54 b 0xbd9e6 | goto label_9;
| label_88:
0x000bdb56 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x000bdb58 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000bdb5a bl 0x2d2d8 | fcn_0002d2d8 (r0, r1, r2, r3, r4, r5, r6);
0x000bdb5e b 0xbd9a4 | goto label_10;
| label_92:
0x000bdb60 ldr r6, [sp, 0x100] | r6 = var_100h;
0x000bdb62 mov r1, r5 | r1 = r5;
0x000bdb64 ldrd r2, r3, [sp, 0x5c] | __asm ("ldrd r2, r3, [var_5ch]");
0x000bdb68 mov r0, r6 | r0 = r6;
0x000bdb6a bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bdb6e mov r0, r6 | r0 = r6;
0x000bdb70 bl 0x96a64 | fcn_00096a64 (r0);
0x000bdb74 mov r1, r4 | r1 = r4;
0x000bdb76 mov r0, r6 | r0 = r6;
0x000bdb78 bl 0x32f84 | r0 = fcn_00032f84 (r0, r1);
0x000bdb7c mov r3, r0 | r3 = r0;
0x000bdb7e mov r0, r6 | r0 = r6;
0x000bdb80 mov r8, r3 | r8 = r3;
0x000bdb82 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bdb86 mov r1, r0 | r1 = r0;
0x000bdb88 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bdb8a cmp.w r8, 0 |
| if (r8 == 0) {
0x000bdb8e beq.w 0xbda64 | goto label_11;
| }
0x000bdb92 cmp.w r8, 1 |
0x000bdb96 ite ne |
| if (r8 == 1) {
0x000bdb98 movne r3, 0 | r3 = 0;
| }
| if (r8 != 1) {
0x000bdb9a andeq r3, r7, 1 | r3 = r7 & 1;
| }
| if (r3 != 0) {
0x000bdb9e cbnz r3, 0xbdc02 | goto label_100;
| }
| label_15:
0x000bdba0 cmp r1, 0 |
| if (r1 != 0) {
0x000bdba2 bne.w 0xbee90 | goto label_101;
| }
0x000bdba6 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000bdba8 movs r2, 0x40 | r2 = 0x40;
0x000bdbaa str r1, [sp, 0x100] | var_100h = r1;
0x000bdbac blx 0x62ec | fcn_000062ec ();
0x000bdbb0 ldr.w r3, [pc, 0x828] |
0x000bdbb4 add r3, pc |
0x000bdbb6 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
| if (r3 != 0) {
0x000bdbba cbnz r3, 0xbdc06 | goto label_102;
| }
0x000bdbbc bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x000bdbc0 cbnz r0, 0xbdc0c | goto label_103;
| }
0x000bdbc2 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000bdbc6 cbnz r0, 0xbdc0c | goto label_103;
| }
| do {
0x000bdbc8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bdbca movs r1, 0 | r1 = 0;
0x000bdbcc lsls r4, r3, 2 | r4 = r3 << 2;
0x000bdbce mov r0, r4 | r0 = r4;
0x000bdbd0 bl 0x28c3c | fcn_00028c3c (r0);
0x000bdbd4 str.w r0, [sl, 0x248] | __asm ("str.w r0, [sl, 0x248]");
0x000bdbd8 cmp r0, 0 |
| if (r0 == 0) {
0x000bdbda beq.w 0xbded0 | goto label_104;
| }
0x000bdbde mov r2, r4 | r2 = r4;
0x000bdbe0 movs r1, 0 | r1 = 0;
0x000bdbe2 blx 0x62ec | fcn_000062ec ();
0x000bdbe6 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bdbe8 movs r3, 0 | r3 = 0;
0x000bdbea ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bdbec movs r1, 0xc | r1 = 0xc;
0x000bdbee bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bdbf2 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000bdbf4 cbz r0, 0xbdc1a | goto label_105;
| }
| label_18:
0x000bdbf6 mov sb, sl | sb = sl;
0x000bdbf8 mov fp, r4 |
| label_13:
0x000bdbfa ldr r0, [sp, 0x40] | r0 = var_40h;
0x000bdbfc bl 0x7a754 | fcn_0007a754 (r0);
0x000bdc00 b 0xbd80e | goto label_1;
| label_100:
0x000bdc02 mov r8, r5 | r8 = r5;
0x000bdc04 b 0xbda68 | goto label_12;
| label_102:
0x000bdc06 dmb ish | __asm ("dmb ish");
0x000bdc0a b 0xbdbc8 |
| } while (1);
| label_103:
0x000bdc0c mov sb, sl | sb = sl;
0x000bdc0e movs r3, 0 | r3 = 0;
0x000bdc10 str.w r3, [sl, 0x248] | __asm ("str.w r3, [sl, 0x248]");
| label_21:
0x000bdc14 mov.w fp, 7 |
0x000bdc18 b 0xbdbfa | goto label_13;
| label_105:
0x000bdc1a ldr r5, [sp, 0x100] | r5 = var_100h;
0x000bdc1c movs r1, 1 | r1 = 1;
0x000bdc1e ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x000bdc22 mov r0, r5 | r0 = r5;
0x000bdc24 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bdc28 strd r7, r8, [sp, 0x84] | __asm ("strd r7, r8, [var_84h]");
0x000bdc2c b 0xbdcc4 |
| while (r5 != 0) {
0x000bdc2e strd r0, r1, [sp, 0x54] | __asm ("strd r0, r1, [var_58h]");
0x000bdc32 mov r0, r5 | r0 = r5;
0x000bdc34 bl 0x2e7ac | fcn_0002e7ac (r0);
0x000bdc38 movs r1, 2 | r1 = 2;
0x000bdc3a mov r0, r5 | r0 = r5;
0x000bdc3c bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdc40 bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000bdc44 mov fp, r0 |
0x000bdc46 mov r0, r5 | r0 = r5;
0x000bdc48 mov sb, r1 | sb = r1;
0x000bdc4a bl 0x2e7ac | fcn_0002e7ac (r0);
0x000bdc4e movs r1, 3 | r1 = 3;
0x000bdc50 mov r0, r5 | r0 = r5;
0x000bdc52 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdc56 bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000bdc5a mov r8, r0 | r8 = r0;
0x000bdc5c mov r0, r5 | r0 = r5;
0x000bdc5e mov r7, r1 | r7 = r1;
0x000bdc60 bl 0x2e7ac | fcn_0002e7ac (r0);
0x000bdc64 movs r1, 4 | r1 = 4;
0x000bdc66 mov r0, r5 | r0 = r5;
0x000bdc68 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdc6c bl 0x3e27c | r0 = fcn_0003e27c (r0);
0x000bdc70 mov r6, r0 | r6 = r0;
0x000bdc72 mov r0, r5 | r0 = r5;
0x000bdc74 bl 0x2e7ac | fcn_0002e7ac (r0);
0x000bdc78 movs r1, 4 | r1 = 4;
0x000bdc7a mov r0, r5 | r0 = r5;
0x000bdc7c bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000bdc80 movs r1, 1 | r1 = 1;
0x000bdc82 bl 0x3da8c | fcn_0003da8c (r0, r1);
0x000bdc86 str r0, [sp, 0x50] | var_50h = r0;
0x000bdc88 mov r0, r5 | r0 = r5;
0x000bdc8a bl 0x2e7ac | fcn_0002e7ac (r0);
0x000bdc8e ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_58h]");
0x000bdc92 ldr r1, [sp, 0x50] | r1 = var_50h;
| label_14:
0x000bdc94 ldr.w r0, [sl, 0x248] | r0 = *((sl + 0x248));
0x000bdc98 strd r6, r1, [sp, 0x10] | __asm ("strd r6, r1, [var_10h]");
0x000bdc9c movs r1, 0 | r1 = 0;
0x000bdc9e strd r8, r7, [sp, 8] | __asm ("strd r8, r7, [var_8h]");
0x000bdca2 strd fp, sb, [sp] | __asm ("strd fp, sb, [sp]");
0x000bdca6 add.w r0, r0, r4, lsl 2 | r0 += (r4 << 2);
0x000bdcaa str r0, [sp, 0x18] | var_18h = r0;
0x000bdcac mov r0, r4 | r0 = r4;
0x000bdcae bl 0x61f94 | fcn_00061f94 (r0, r1, r2, r3, r4, r5, r6);
0x000bdcb2 ldr.w r3, [sl, 0x24c] | r3 = *((sl + 0x24c));
0x000bdcb6 adds r4, 1 | r4++;
0x000bdcb8 adds r3, 1 | r3++;
0x000bdcba str.w r3, [sl, 0x24c] | __asm ("str.w r3, [sl, 0x24c]");
0x000bdcbe cmp r0, 0 |
| if (r0 != 0) {
0x000bdcc0 bne.w 0xbdea6 | goto label_106;
| }
0x000bdcc4 mov r0, r5 | r0 = r5;
0x000bdcc6 bl 0x96a64 | fcn_00096a64 (r0);
0x000bdcca ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bdccc cmp r4, r3 |
0x000bdcce ite ge |
| if (r4 < r3) {
0x000bdcd0 movge r3, 0 | r3 = 0;
| }
| if (r4 >= r3) {
0x000bdcd2 movlt r3, 1 | r3 = 1;
| }
0x000bdcd4 cmp r0, 0x64 |
0x000bdcd6 it ne |
| if (r0 == 0x64) {
0x000bdcd8 movne r3, 0 | r3 = 0;
| }
0x000bdcda cmp r3, 0 |
| if (r3 == 0) {
0x000bdcdc beq 0xbdd9a | goto label_107;
| }
0x000bdcde movs r1, 1 | r1 = 1;
0x000bdce0 mov r0, r5 | r0 = r5;
0x000bdce2 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdce6 bl 0x298e8 | fcn_000298e8 (r0);
0x000bdcea cmp r5, 0 |
0x000bdcec bne 0xbdc2e |
| }
0x000bdcee strd r0, r1, [sp, 0x50] | __asm ("strd r0, r1, [var_54h]");
0x000bdcf2 movs r1, 2 | r1 = 2;
0x000bdcf4 mov r0, r5 | r0 = r5;
0x000bdcf6 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdcfa bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000bdcfe mov fp, r0 |
0x000bdd00 mov sb, r1 | sb = r1;
0x000bdd02 mov r0, r5 | r0 = r5;
0x000bdd04 movs r1, 3 | r1 = 3;
0x000bdd06 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdd0a bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000bdd0e mov r8, r0 | r8 = r0;
0x000bdd10 mov r7, r1 | r7 = r1;
0x000bdd12 mov r0, r5 | r0 = r5;
0x000bdd14 movs r1, 4 | r1 = 4;
0x000bdd16 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bdd1a bl 0x3e27c | fcn_0003e27c (r0);
0x000bdd1e movs r1, 4 | r1 = 4;
0x000bdd20 mov r6, r0 | r6 = r0;
0x000bdd22 mov r0, r5 | r0 = r5;
0x000bdd24 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000bdd28 movs r1, 1 | r1 = 1;
0x000bdd2a bl 0x3da8c | fcn_0003da8c (r0, r1);
0x000bdd2e ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_54h]");
0x000bdd32 mov r1, r0 | r1 = r0;
0x000bdd34 b 0xbdc94 | goto label_14;
| label_93:
0x000bdd36 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000bdd38 movs r1, 1 | r1 = 1;
0x000bdd3a ldr r5, [sp, 0x100] | r5 = var_100h;
0x000bdd3c adds r2, r3, 2 | r2 = r3 + 2;
0x000bdd3e ldr r3, [sp, 0x38] | r3 = var_38h;
0x000bdd40 mov r0, r5 | r0 = r5;
0x000bdd42 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bdd46 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bdd4a ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000bdd4c movs r1, 2 | r1 = 2;
0x000bdd4e mov r0, r5 | r0 = r5;
0x000bdd50 lsrs r2, r3, 0xa | r2 = r3 >> 0xa;
0x000bdd52 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000bdd54 orr.w r2, r2, r3, lsl 22 | r2 |= (r3 << 22);
0x000bdd58 lsrs r3, r3, 0xa | r3 >>= 0xa;
0x000bdd5a adds r2, 1 | r2++;
0x000bdd5c adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bdd60 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000bdd62 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000bdd66 lsls r2, r2, 0xa | r2 <<= 0xa;
0x000bdd68 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bdd6c mov r0, r5 | r0 = r5;
0x000bdd6e bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bdd72 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bdd74 beq.w 0xbdfac | goto label_108;
| }
0x000bdd78 mov r0, r5 | r0 = r5;
0x000bdd7a bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bdd7e mov r1, r0 | r1 = r0;
0x000bdd80 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bdd82 b 0xbdba0 | goto label_15;
| label_95:
0x000bdd84 it ne |
| if (r0 != 0x64) {
0x000bdd86 subne r8, r7, 2 | r8 = r7 - 2;
| goto label_109;
| }
| if (r0 != 0x64) {
| label_109:
0x000bdd8a bne.w 0xbdace | goto label_16;
| }
| label_96:
0x000bdd8e mov.w r8, 0 | r8 = 0;
0x000bdd92 movw r3, 0x10b | r3 = 0x10b;
0x000bdd96 mov r4, r8 | r4 = r8;
0x000bdd98 b 0xbdb02 | goto label_17;
| label_107:
0x000bdd9a mov r0, r5 | r0 = r5;
0x000bdd9c ldrd r7, r8, [sp, 0x84] | __asm ("ldrd r7, r8, [var_84h]");
0x000bdda0 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bdda4 mov r4, r0 | r4 = r0;
0x000bdda6 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bdda8 cmp r0, 0 |
| if (r0 != 0) {
0x000bddaa bne.w 0xbdbf6 | goto label_18;
| }
0x000bddae ldr.w r3, [sl, 0x24c] | r3 = *((sl + 0x24c));
0x000bddb2 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000bddb4 cmp r3, r2 |
| if (r3 != r2) {
0x000bddb6 bne.w 0xbda14 | goto label_8;
| }
0x000bddba ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000bddbc ldr r1, [sp, 0x40] | r1 = var_40h;
0x000bddbe ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bddc0 str.w r3, [sl, 0x254] | __asm ("str.w r3, [sl, 0x254]");
0x000bddc4 ldrd r2, r3, [sl, 0x238] | __asm ("ldrd r2, r3, [sl, 0x238]");
0x000bddc8 bl 0xbc250 | r0 = fcn_000bc250 (r0, r1, r2, r3);
0x000bddcc mov r4, r0 | r4 = r0;
0x000bddce str r0, [sp, 0xc4] | var_c4h = r0;
0x000bddd0 cmp r0, 0 |
| if (r0 != 0) {
0x000bddd2 bne.w 0xbdbf6 | goto label_18;
| }
0x000bddd6 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000bddd8 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bddda bl 0xbb978 | fcn_000bb978 (r0, r1, r2, r3, r4);
0x000bddde str r0, [sp, 0xc4] | var_c4h = r0;
0x000bdde0 cmp r0, 0 |
| if (r0 == 0) {
0x000bdde2 beq 0xbded4 | goto label_110;
| }
0x000bdde4 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000bdde6 bne.w 0xbec36 | goto label_111;
| }
0x000bddea mov r5, r4 | r5 = r4;
| label_22:
0x000bddec cmp.w r8, 0 |
0x000bddf0 ite le |
| if (r8 > 0) {
0x000bddf2 movle r3, 0 | r3 = 0;
| }
| if (r8 <= 0) {
0x000bddf4 andgt r3, r7, 1 | r3 = r7 & 1;
| }
0x000bddf8 cmp r3, 0 |
| if (r3 != 0) {
0x000bddfa bne.w 0xbdf8e | goto label_112;
| }
0x000bddfe ldr r2, [sp, 0x80] | r2 = var_80h;
0x000bde00 movs r1, 0x1d | r1 = 0x1d;
0x000bde02 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bde04 str r3, [sp, 0xf0] | var_f0h = r3;
0x000bde06 str r3, [sp, 0x100] | var_100h = r3;
0x000bde08 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bde0c mov r7, r0 | r7 = r0;
0x000bde0e cmp r0, 0 |
| if (r0 != 0) {
0x000bde10 bne.w 0xbdfa8 | goto label_28;
| }
0x000bde14 ldr r4, [sp, 0xf0] | r4 = var_f0h;
0x000bde16 movs r1, 1 | r1 = 1;
0x000bde18 ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x000bde1c mov r0, r4 | r0 = r4;
0x000bde1e bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bde22 ldr.w r2, [sl, 0x24c] | r2 = *((sl + 0x24c));
0x000bde26 movs r1, 2 | r1 = 2;
0x000bde28 mov r0, r4 | r0 = r4;
0x000bde2a asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000bde2c bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bde30 mov r0, r4 | r0 = r4;
0x000bde32 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bde36 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000bde38 beq.w 0xbe4fe | goto label_113;
| }
| label_39:
0x000bde3c mov r0, r4 | r0 = r4;
0x000bde3e bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bde42 mov r3, r0 | r3 = r0;
0x000bde44 cmp r0, 0 |
| if (r0 == 0) {
0x000bde46 beq.w 0xbe14c | goto label_114;
| }
| label_29:
0x000bde4a mov r7, r3 | r7 = r3;
0x000bde4c str r3, [sp, 0xc4] | var_c4h = r3;
| label_25:
0x000bde4e ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x000bde52 rsbs r3, r3, 0 | r3 -= ;
0x000bde54 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x000bde58 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000bde5c sbc.w r3, r3, r3, lsl 1 | __asm ("sbc.w r3, r3, r3, lsl 1");
0x000bde60 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
| label_31:
0x000bde64 mov r4, sl | r4 = sl;
0x000bde66 mov r6, sl | r6 = sl;
0x000bde68 movs r5, 0xf | r5 = 0xf;
| do {
0x000bde6a ldr.w r3, [r6, 0x230] | r3 = *((r6 + 0x230));
0x000bde6e cmp r3, 0 |
| if (r3 > 0) {
0x000bde70 bgt 0xbded8 | goto label_115;
| }
0x000bde72 ldr.w r0, [r6, 0x22c] | r0 = *((r6 + 0x22c));
0x000bde76 subs r5, 1 | r5--;
0x000bde78 bl 0x26dbc | fcn_00026dbc (r0);
0x000bde7c ldr.w r0, [r6, 0x220] | r0 = *((r6 + 0x220));
0x000bde80 subs r6, 0x20 | r6 -= 0x20;
0x000bde82 bl 0x26dbc | fcn_00026dbc (r0);
0x000bde86 adds r1, r5, 1 | r1 = r5 + 1;
0x000bde88 bne 0xbde6a |
| } while (r1 != r5);
| label_24:
0x000bde8a ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 == 0) {
0x000bde8c cbnz r3, 0xbde98 |
0x000bde8e ldrb.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x000bde92 cmp r3, 0 |
| if (r3 == 0) {
0x000bde94 beq.w 0xbe2de | goto label_116;
| }
| }
| label_32:
0x000bde98 ldr r4, [sp, 0xc4] | r4 = var_c4h;
0x000bde9a b 0xbda14 | goto label_8;
| label_90:
0x000bde9c ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000bde9e mov sb, sl | sb = sl;
0x000bdea0 movw fp, 0x10b | fp = 0x10b;
0x000bdea4 b 0xbd810 | goto label_2;
| label_106:
0x000bdea6 mov r3, r0 | r3 = r0;
0x000bdea8 mov r0, r5 | r0 = r5;
0x000bdeaa mov sb, sl | sb = sl;
0x000bdeac mov fp, r3 |
0x000bdeae bl 0x79b80 | fcn_00079b80 (r0);
0x000bdeb2 b 0xbdbfa | goto label_13;
| label_98:
0x000bdeb4 ldr r1, [sp, 0x80] | r1 = var_80h;
0x000bdeb6 bl 0x24218 | fcn_00024218 (r0, r1);
0x000bdeba b 0xbdaf2 | goto label_19;
| label_94:
0x000bdebc movw r3, 0x10b | r3 = 0x10b;
0x000bdec0 mov.w r8, 0 | r8 = 0;
0x000bdec4 str r3, [sp, 0xc4] | var_c4h = r3;
0x000bdec6 mov.w r3, -1 | r3 = -1;
0x000bdeca mov r4, r8 | r4 = r8;
0x000bdecc str r3, [sp, 0x30] | var_30h = r3;
0x000bdece b 0xbdb38 | goto label_20;
| label_104:
0x000bded0 mov sb, sl | sb = sl;
0x000bded2 b 0xbdc14 | goto label_21;
| label_110:
0x000bded4 movs r5, 1 | r5 = 1;
0x000bded6 b 0xbddec | goto label_22;
| label_115:
0x000bded8 cmp r5, 0 |
| if (r5 == 0) {
0x000bdeda beq.w 0xbdfec | goto label_117;
| }
| label_26:
0x000bdede lsl.w r8, r5, 5 | r8 = r5 << 5;
0x000bdee2 add.w r6, sl, r8 | r6 = sl + r8;
0x000bdee6 b 0xbdefa |
| while (r3 == 0) {
| label_23:
0x000bdee8 ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x000bdeea adds r4, 0x20 | r4 += 0x20;
0x000bdeec bl 0x26dbc | fcn_00026dbc (r0);
0x000bdef0 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x000bdef2 bl 0x26dbc | fcn_00026dbc (r0);
0x000bdef6 cmp r4, r6 |
| if (r4 == r6) {
0x000bdef8 beq 0xbdf22 | goto label_118;
| }
0x000bdefa ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x000bdefc cmp r1, 0 |
0x000bdefe ite le |
| if (r1 > 0) {
0x000bdf00 movle r3, 0 | r3 = 0;
| }
| if (r1 <= 0) {
0x000bdf02 movgt r3, 1 | r3 = 1;
| }
0x000bdf04 cmp r7, 0 |
0x000bdf06 it ne |
| if (r7 == 0) {
0x000bdf08 movne r3, 0 | r3 = 0;
| }
0x000bdf0a cmp r3, 0 |
0x000bdf0c beq 0xbdee8 |
| }
0x000bdf0e ldrd r2, r3, [r4, 0x38] | __asm ("ldrd r2, r3, [r4, 0x38]");
0x000bdf12 str r1, [sp, 4] | var_4h = r1;
0x000bdf14 ldr r1, [r4, 0x4c] | r1 = *((r4 + 0x4c));
0x000bdf16 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bdf18 str r1, [sp] | *(sp) = r1;
0x000bdf1a bl 0xb52d4 | r0 = fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000bdf1e mov r7, r0 | r7 = r0;
0x000bdf20 b 0xbdee8 | goto label_23;
| if (r7 == 0) {
| label_118:
0x000bdf22 cbnz r7, 0xbdf76 |
0x000bdf24 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000bdf28 ldrb.w r1, [sl, 0x30] | r1 = *((sl + 0x30));
0x000bdf2c ldr.w r4, [sl, 0x10] | r4 = *((sl + 0x10));
0x000bdf30 adds r2, r3, 1 | r2 = r3 + 1;
0x000bdf32 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000bdf36 vldr d16, [sl, 0x18] | __asm ("vldr d16, [sl, 0x18]");
0x000bdf3a vldr d17, [sl, 0x38] | __asm ("vldr d17, [sl, 0x38]");
0x000bdf3e vldr d18, [sl, 0x20] | __asm ("vldr d18, [sl, 0x20]");
0x000bdf42 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000bdf46 vmov.i32 d19, 0 | __asm ("vmov.i32 d19, 0");
| if (r1 == 0) {
0x000bdf4a cbnz r1, 0xbdf50 |
0x000bdf4c vldr d19, [sl, 0x28] | __asm ("vldr d19, [sl, 0x28]");
| }
0x000bdf50 add.w r6, sl, r8 | r6 = sl + r8;
0x000bdf54 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bdf56 ldr r1, [r6, 0x50] | r1 = *((r6 + 0x50));
0x000bdf58 str r1, [sp, 0x2c] | var_2ch = r1;
0x000bdf5a ldr r1, [r6, 0x4c] | r1 = *((r6 + 0x4c));
0x000bdf5c vstr d18, [sp, 0x18] | __asm ("vstr d18, [sp, 0x18]");
0x000bdf60 vstr d17, [sp, 0x10] | __asm ("vstr d17, [sp, 0x10]");
0x000bdf64 vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x000bdf68 str r4, [sp] | *(sp) = r4;
0x000bdf6a str r1, [sp, 0x28] | var_28h = r1;
0x000bdf6c vstr d19, [sp, 0x20] | __asm ("vstr d19, [sp, 0x20]");
0x000bdf70 bl 0xb5418 | r0 = fcn_000b5418 (r0, r1, r2);
0x000bdf74 mov r7, r0 | r7 = r0;
| }
0x000bdf76 add.w r3, sl, r8 | r3 = sl + r8;
0x000bdf7a add.w r5, sl, r5, lsl 5 | r5 = sl + (r5 << 5);
0x000bdf7e ldr r0, [r3, 0x4c] | r0 = *((r3 + 0x4c));
0x000bdf80 bl 0x26dbc | fcn_00026dbc (r0);
0x000bdf84 ldr r0, [r5, 0x40] | r0 = *((r5 + 0x40));
0x000bdf86 bl 0x26dbc | fcn_00026dbc (r0);
0x000bdf8a str r7, [sp, 0xc4] | var_c4h = r7;
0x000bdf8c b 0xbde8a | goto label_24;
| label_112:
0x000bdf8e movs r3, 0 | r3 = 0;
0x000bdf90 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bdf92 add r2, sp, 0xd0 | r2 += var_d0h;
0x000bdf94 movs r1, 0x20 | r1 = 0x20;
0x000bdf96 ldrd sb, r4, [sl, 0x278] | __asm ("ldrd sb, r4, [sl, 0x278]");
0x000bdf9a str r3, [sp, 0xd0] | var_d0h = r3;
0x000bdf9c bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000bdfa0 mov r7, r0 | r7 = r0;
0x000bdfa2 str r0, [sp, 0xcc] | var_cch = r0;
0x000bdfa4 cmp r0, 0 |
| if (r0 == 0) {
0x000bdfa6 beq 0xbe084 | goto label_119;
| }
| label_28:
0x000bdfa8 str r7, [sp, 0xc4] | var_c4h = r7;
0x000bdfaa b 0xbde4e | goto label_25;
| label_108:
0x000bdfac mov r1, r4 | r1 = r4;
0x000bdfae mov r0, r5 | r0 = r5;
0x000bdfb0 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000bdfb4 ldr.w r3, [pc, 0x428] |
0x000bdfb8 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000bdfba add r3, pc | r3 = 0x17c39e;
0x000bdfbc and r2, r2, 0x3f | r2 &= 0x3f;
0x000bdfc0 add r3, r2 | r3 += r2;
0x000bdfc2 ldrb.w r4, [r3, 0x258] | r4 = *((r3 + 0x258));
| if (r5 != 0) {
0x000bdfc6 cbz r5, 0xbdfce |
0x000bdfc8 mov r0, r5 | r0 = r5;
0x000bdfca bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000bdfce mov r0, r5 | r0 = r5;
0x000bdfd0 bl 0x79b80 | fcn_00079b80 (r0);
0x000bdfd4 cmp r4, 5 |
0x000bdfd6 mov r1, r0 | r1 = r0;
0x000bdfd8 it eq |
| if (r4 != 5) {
0x000bdfda ldreq r3, [sl, 0x244] | r3 = *((sl + 0x244));
| }
0x000bdfde str r0, [sp, 0xc4] | var_c4h = r0;
0x000bdfe0 itt eq |
| if (r4 != 5) {
0x000bdfe2 orreq r3, r3, 2 | r3 |= 2;
| }
| if (r4 == 5) {
0x000bdfe6 str.w r3, [sl, 0x244] | __asm ("str.w r3, [sl, 0x244]");
| }
0x000bdfea b 0xbdba0 | goto label_15;
| label_117:
0x000bdfec movs r5, 1 | r5 = 1;
0x000bdfee cmp r7, 0 |
| if (r7 != 0) {
0x000bdff0 bne.w 0xbdede | goto label_26;
| }
0x000bdff4 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x000bdff8 ldr.w r5, [sl, 0x6c] | r5 = *((sl + 0x6c));
0x000bdffc cmp r3, 0xa |
| if (r3 <= 0xa) {
0x000bdffe ble.w 0xbe792 | goto label_120;
| }
| label_47:
0x000be002 movs r3, 1 | r3 = 1;
0x000be004 strb r3, [r5] | *(r5) = r3;
0x000be006 ldr.w r5, [sl, 0x6c] | r5 = *((sl + 0x6c));
0x000be00a ldrd r3, r2, [sl, 0x38] | __asm ("ldrd r3, r2, [sl, 0x38]");
0x000be00e adds r1, r5, 1 | r1 = r5 + 1;
| do {
0x000be010 lsr.w ip, r3, 7 |
0x000be014 orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x000be018 uxtb r6, r3 | r6 = (int8_t) r3;
0x000be01a orr.w r3, ip, r2, lsl 25 | r3 = ip | (r2 << 25);
0x000be01e lsrs r2, r2, 7 | r2 >>= 7;
0x000be020 mov ip, r1 |
0x000be022 strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x000be026 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x000be02a bne 0xbe010 |
| } while (r0 != r3);
0x000be02c sub.w r3, ip, r5 | r3 = ip - r5;
0x000be030 strb.w r6, [ip] | *(ip) = r6;
0x000be034 adds r3, 1 | r3++;
0x000be036 movs r5, 1 | r5 = 1;
0x000be038 str.w r3, [sl, 0x70] | __asm ("str.w r3, [sl, 0x70]");
0x000be03c b 0xbdede | goto label_26;
| label_83:
0x000be03e mov r1, r5 | r1 = r5;
0x000be040 mov r0, r4 | r0 = r4;
0x000be042 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000be046 bl 0x3e27c | r0 = fcn_0003e27c (r0);
0x000be04a mov r5, r0 | r5 = r0;
| if (r4 != 0) {
0x000be04c cbz r4, 0xbe054 |
0x000be04e mov r0, r4 | r0 = r4;
0x000be050 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000be054 movs r1, 0 | r1 = 0;
0x000be056 mov r0, r4 | r0 = r4;
0x000be058 bl 0x3db60 | r0 = fcn_0003db60 (r0);
0x000be05c mov r6, r0 | r6 = r0;
0x000be05e cmp r5, 0 |
| if (r5 == 0) {
0x000be060 beq.w 0xbd868 | goto label_27;
| }
0x000be064 mov r1, r0 | r1 = r0;
0x000be066 add r2, sp, 0x100 | r2 += var_100h;
0x000be068 add r0, sp, 0xe0 | r0 += var_e0h;
0x000be06a bl 0x6ccb4 | fcn_0006ccb4 (r0, r1, r2);
0x000be06e ldr.w fp, [sp, 0x100] | fp = var_100h;
0x000be072 cmp.w fp, 0 |
| if (fp == 0) {
0x000be076 beq.w 0xbe780 | goto label_121;
| }
0x000be07a mov r0, r4 | r0 = r4;
0x000be07c bl 0x79b80 | fcn_00079b80 (r0);
0x000be080 b.w 0xbd80e | goto label_1;
| label_119:
0x000be084 ldr r6, [sp, 0xd0] | r6 = var_d0h;
0x000be086 add.w r7, r8, -1 | r7 = r8 + -1;
0x000be08a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000be08e movs r1, 1 | r1 = 1;
0x000be090 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000be092 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000be094 mov r0, r6 | r0 = r6;
0x000be096 vstr d16, [sp, 0xf0] | __asm ("vstr d16, [sp, 0xf0]");
0x000be09a str r7, [sp, 0x84] | var_84h = r7;
0x000be09c bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000be0a0 asrs r3, r7, 0x1f | r3 = r7 >> 0x1f;
0x000be0a2 mov r2, r7 | r2 = r7;
0x000be0a4 movs r1, 2 | r1 = 2;
0x000be0a6 mov r0, r6 | r0 = r6;
0x000be0a8 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000be0ac mov r0, r6 | r0 = r6;
0x000be0ae bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000be0b2 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000be0b4 bne.w 0xbe76c | goto label_122;
| }
0x000be0b8 movs r1, 1 | r1 = 1;
0x000be0ba mov r0, r6 | r0 = r6;
0x000be0bc bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000be0c0 strd r0, r1, [sp, 0x54] | __asm ("strd r0, r1, [var_58h]");
0x000be0c4 movs r1, 2 | r1 = 2;
0x000be0c6 mov r0, r6 | r0 = r6;
0x000be0c8 bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000be0cc ldr r2, [sp, 0x80] | r2 = var_80h;
0x000be0ce add.w r3, sl, 0x28 | r3 = sl + 0x28;
0x000be0d2 str r1, [sp, 0x94] | var_94h = r1;
0x000be0d4 mov r8, r0 | r8 = r0;
0x000be0d6 movs r1, 3 | r1 = 3;
0x000be0d8 mov r0, r6 | r0 = r6;
0x000be0da bl 0x3ddb8 | fcn_0003ddb8 (r0, r1, r2, r3);
0x000be0de ldrd r3, r2, [sl, 0x28] | __asm ("ldrd r3, r2, [sl, 0x28]");
0x000be0e2 cmp r2, 0 |
| if (r2 < 0) {
0x000be0e4 bge 0xbe0f0 |
0x000be0e6 rsbs r3, r3, 0 | r3 -= ;
0x000be0e8 sbc.w r2, r2, r2, lsl 1 | __asm ("sbc.w r2, r2, r2, lsl 1");
0x000be0ec strd r3, r2, [sl, 0x28] | __asm ("strd r3, r2, [sl, 0x28]");
| }
0x000be0f0 orrs r3, r2 | r3 |= r2;
0x000be0f2 mov.w r1, 4 | r1 = 4;
0x000be0f6 ite eq |
| if (r3 != r2) {
0x000be0f8 moveq r3, 1 | r3 = 1;
| }
| if (r3 == r2) {
0x000be0fa movne r3, 0 | r3 = 0;
| }
0x000be0fc strb.w r3, [sl, 0x30] | *((sl + 0x30)) = r3;
0x000be100 mov r0, r6 | r0 = r6;
0x000be102 bl 0x3db60 | fcn_0003db60 (r0);
0x000be106 movs r1, 4 | r1 = 4;
0x000be108 mov fp, r0 |
0x000be10a mov r0, r6 | r0 = r6;
0x000be10c bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000be110 bl 0x3e27c | fcn_0003e27c (r0);
0x000be114 str r0, [sp, 0x50] | var_50h = r0;
| if (r6 != 0) {
0x000be116 cbz r6, 0xbe11e |
0x000be118 mov r0, r6 | r0 = r6;
0x000be11a bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000be11e ldr r3, [sp, 0x50] | r3 = var_50h;
0x000be120 cmp r3, 0 |
| if (r3 == 0) {
0x000be122 beq.w 0xbe6b6 | goto label_123;
| }
0x000be126 ldr r7, [sp, 0xf0] | r7 = var_f0h;
0x000be128 movs r3, 0 | r3 = 0;
0x000be12a ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000be12c movs r1, 0x22 | r1 = 0x22;
0x000be12e ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be130 str r7, [sp, 0x88] | var_88h = r7;
0x000be132 ldr r7, [sp, 0xf4] | r7 = var_f4h;
0x000be134 str r3, [sp, 0x100] | var_100h = r3;
0x000be136 str r7, [sp, 0x90] | var_90h = r7;
0x000be138 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be13c mov r7, r0 | r7 = r0;
0x000be13e cmp r0, 0 |
| if (r0 == 0) {
0x000be140 beq.w 0xbec66 | goto label_124;
| }
| label_69:
0x000be144 mov r0, r6 | r0 = r6;
0x000be146 bl 0x79b80 | fcn_00079b80 (r0);
0x000be14a b 0xbdfa8 | goto label_28;
| label_114:
0x000be14c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000be14e movs r1, 0xa | r1 = 0xa;
0x000be150 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be152 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be156 mov r4, r0 | r4 = r0;
0x000be158 cmp r0, 0 |
| if (r0 != 0) {
0x000be15a bne.w 0xbe4ce | goto label_125;
| }
0x000be15e ldr r6, [sp, 0x100] | r6 = var_100h;
0x000be160 mov r0, r6 | r0 = r6;
0x000be162 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000be166 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000be168 beq.w 0xbeaa6 | goto label_126;
| }
| label_53:
0x000be16c mov r0, r6 | r0 = r6;
0x000be16e bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000be172 mov r3, r0 | r3 = r0;
0x000be174 cmp r0, 0 |
| if (r0 != 0) {
0x000be176 bne.w 0xbde4a | goto label_29;
| }
0x000be17a ldrd r1, r2, [sl, 0x20] | __asm ("ldrd r1, r2, [sl, 0x20]");
0x000be17e ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be180 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x000be184 mov r3, r2 | r3 = r2;
0x000be186 mov r2, r1 | r2 = r1;
0x000be188 bl 0xb52d4 | r0 = fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000be18c mov r2, r0 | r2 = r0;
0x000be18e cmp r0, 0 |
| if (r0 != 0) {
0x000be190 bne.w 0xbebee | goto label_127;
| }
0x000be194 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000be196 movs r1, 0x10 | r1 = 0x10;
0x000be198 ldrd r4, r6, [sl, 0x18] | __asm ("ldrd r4, r6, [sl, 0x18]");
0x000be19c mov ip, r5 |
0x000be19e str.w r8, [sl, 0x10] | __asm ("str.w r8, [sl, 0x10]");
0x000be1a2 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
0x000be1a6 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000be1a8 str.w r7, [sl] | __asm ("str.w r7, [sl]");
0x000be1ac str.w r3, [sl, 0xc] | __asm ("str.w r3, [sl, 0xc]");
| do {
0x000be1b0 mul r3, r2, r7 | r3 = r2 * r7;
0x000be1b4 add.w r0, sl, r2, lsl 5 | r0 = sl + (r2 << 5);
0x000be1b8 adds r2, 1 | r2++;
0x000be1ba adds r5, r3, r4 | r5 = r3 + r4;
0x000be1bc adc.w r3, r6, r3, asr 31 | __asm ("adc.w r3, r6, r3, asr 31");
0x000be1c0 subs r1, 1 | r1--;
0x000be1c2 str r5, [r0, 0x38] | *((r0 + 0x38)) = r5;
0x000be1c4 str r3, [r0, 0x3c] | *((r0 + 0x3c)) = r3;
0x000be1c6 bne 0xbe1b0 |
| } while (r1 != 1);
0x000be1c8 mov r5, ip | r5 = ip;
0x000be1ca str r1, [sp, 0xc4] | var_c4h = r1;
| label_46:
0x000be1cc ldr.w r7, [sl] | r7 = *(sl);
0x000be1d0 cmp r7, 0 |
| if (r7 == 0) {
0x000be1d2 beq.w 0xbde4e | goto label_25;
| }
0x000be1d6 cmp r5, 0 |
| if (r5 == 0) {
0x000be1d8 beq.w 0xbe50a | goto label_128;
| }
0x000be1dc ldr.w r6, [sl, 4] | r6 = *((sl + 4));
| label_40:
0x000be1e0 ldr.w r7, [sl, 0x24c] | r7 = *((sl + 0x24c));
0x000be1e4 subs r1, r7, 1 | r1 = r7 - 1;
| if (r1 < r7) {
0x000be1e6 bmi.w 0xbea90 | goto label_129;
| }
0x000be1ea str.w sl, [sp, 0x50] | __asm ("str.w sl, [var_50h]");
0x000be1ee movs r3, 0 | r3 = 0;
0x000be1f0 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x000be1f4 vmov.i32 d9, 0 | __asm ("vmov.i32 d9, 0");
0x000be1f8 str r6, [sp, 0x98] | var_98h = r6;
0x000be1fa mov r6, r1 | r6 = r1;
0x000be1fc str r3, [sp, 0x30] | var_30h = r3;
0x000be1fe add r3, sp, 0xf4 | r3 += var_f4h;
0x000be200 str r3, [sp, 0x94] | var_94h = r3;
| label_30:
0x000be202 cmp r7, 0 |
| if (r7 <= 0) {
0x000be204 ble.w 0xbf1b0 | goto label_130;
| }
0x000be208 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000be20a ldr.w r2, [r3, 0x248] | r2 = *((r3 + 0x248));
0x000be20e movs r3, 0 | r3 = 0;
0x000be210 subs r2, 4 | r2 -= 4;
0x000be212 b 0xbe21a |
| while (r4 != r6) {
0x000be214 adds r3, 1 | r3++;
0x000be216 cmp r3, r7 |
| if (r3 == r7) {
0x000be218 beq 0xbe224 | goto label_131;
| }
0x000be21a ldr r5, [r2, 4]! | r5 = *((r2 += 4));
0x000be21e ldr r4, [r5] | r4 = *(r5);
0x000be220 cmp r4, r6 |
0x000be222 bne 0xbe214 |
| }
| label_131:
0x000be224 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000be226 cmp r3, 0 |
| if (r3 != 0) {
0x000be228 beq 0xbe28c |
0x000be22a movs r3, 0 | r3 = 0;
0x000be22c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000be230 str r3, [sp, 0xf0] | var_f0h = r3;
0x000be232 add r2, sp, 0xcc | r2 += var_cch;
0x000be234 str r3, [sp, 0x100] | var_100h = r3;
0x000be236 movs r1, 0x20 | r1 = 0x20;
0x000be238 str r3, [sp, 0xcc] | var_cch = r3;
0x000be23a mov r0, sl | r0 = sl;
0x000be23c ldr r3, [sp, 0x94] | r3 = var_94h;
0x000be23e ldr r7, [r5, 0x40] | r7 = *((r5 + 0x40));
0x000be240 ldr r5, [r5, 0x3c] | r5 = *((r5 + 0x3c));
0x000be242 vstr d9, [sp, 0xd8] | __asm ("vstr d9, [sp, 0xd8]");
0x000be246 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000be24a add r3, sp, 0x104 | r3 += var_104h;
0x000be24c str r7, [sp, 0x54] | var_54h = r7;
0x000be24e vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000be252 movs r3, 0 | r3 = 0;
0x000be254 str r5, [sp, 0x58] | var_58h = r5;
0x000be256 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be25a mov r7, r0 | r7 = r0;
0x000be25c cmp r0, 0 |
| if (r0 == 0) {
0x000be25e beq 0xbe2f2 | goto label_132;
| }
0x000be260 movs r3, 0 | r3 = 0;
0x000be262 str r3, [sp, 0x88] | var_88h = r3;
| label_33:
0x000be264 movs r4, 0 | r4 = 0;
| label_34:
0x000be266 ldr r0, [sp, 0x88] | r0 = var_88h;
0x000be268 bl 0x26dbc | fcn_00026dbc (r0);
0x000be26c mov r0, r4 | r0 = r4;
0x000be26e bl 0x26dbc | fcn_00026dbc (r0);
0x000be272 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000be274 adds r3, 1 | r3++;
0x000be276 str r3, [sp, 0x30] | var_30h = r3;
| label_38:
0x000be278 subs r6, 1 | r6--;
0x000be27a cmp r6, 0 |
0x000be27c it ge |
| if (r6 >= 0) {
0x000be27e cmpge r7, 0 | __asm ("cmpge r7, 0");
| }
| if (r6 != 0) {
0x000be280 bne.w 0xbe7d4 | goto label_133;
| }
0x000be284 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000be286 ldr.w r7, [r3, 0x24c] | r7 = *((r3 + 0x24c));
0x000be28a b 0xbe202 | goto label_30;
| }
0x000be28c ldrd r3, r2, [r5, 8] | __asm ("ldrd r3, r2, [r5, 8]");
0x000be290 orrs r3, r2 | r3 |= r2;
| if (r3 != r2) {
0x000be292 bne.w 0xbe4ba | goto label_134;
| }
| label_37:
0x000be296 movs r3, 0 | r3 = 0;
0x000be298 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000be29a movs r1, 0x1e | r1 = 0x1e;
0x000be29c mov r0, sl | r0 = sl;
0x000be29e str r3, [sp, 0x100] | var_100h = r3;
0x000be2a0 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be2a4 mov r7, r0 | r7 = r0;
0x000be2a6 cmp r0, 0 |
| if (r0 == 0) {
0x000be2a8 beq.w 0xbe4d4 | goto label_135;
| }
| label_36:
0x000be2ac ldr.w sl, [sp, 0x50] | sl = var_50h;
0x000be2b0 ldr r6, [sp, 0x98] | r6 = var_98h;
| label_48:
0x000be2b2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000be2b4 adds r6, 1 | r6++;
0x000be2b6 str r7, [sp, 0xc4] | var_c4h = r7;
0x000be2b8 subs r3, r3, r6 | r3 -= r6;
0x000be2ba str r3, [sp, 0x44] | var_44h = r3;
0x000be2bc ldr r3, [sp, 0x30] | r3 = var_30h;
0x000be2be cmp r3, 0 |
| if (r3 == 0) {
0x000be2c0 beq.w 0xbde64 | goto label_31;
| }
0x000be2c4 ldr r1, [sp, 0xe4] | r1 = var_e4h;
0x000be2c6 add r2, sp, 0xc4 | r2 += var_c4h;
0x000be2c8 add r0, sp, 0xe0 | r0 += var_e0h;
0x000be2ca adds r1, 0x14 | r1 += 0x14;
0x000be2cc bl 0x6ccb4 | fcn_0006ccb4 (r0, r1, r2);
0x000be2d0 ldr r7, [sp, 0xc4] | r7 = var_c4h;
0x000be2d2 cmp r7, 0 |
| if (r7 == 0) {
0x000be2d4 beq.w 0xbeb82 | goto label_136;
| }
0x000be2d8 movs r3, 1 | r3 = 1;
0x000be2da str r3, [sp, 0x78] | var_78h = r3;
0x000be2dc b 0xbde4e | goto label_25;
| label_116:
0x000be2de ldrd r4, r5, [sl, 0x28] | __asm ("ldrd r4, r5, [sl, 0x28]");
0x000be2e2 ldrd r2, r3, [sp, 0x5c] | __asm ("ldrd r2, r3, [var_5ch]");
0x000be2e6 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be2e8 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x000be2ec bl 0xb5540 | fcn_000b5540 (r0, r1, r2, r3, r4);
0x000be2f0 b 0xbde98 | goto label_32;
| label_132:
0x000be2f2 ldr r5, [sp, 0xcc] | r5 = var_cch;
0x000be2f4 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x000be2f6 movs r1, 1 | r1 = 1;
0x000be2f8 mov r7, r3 | r7 = r3;
0x000be2fa str r3, [sp, 0xa8] | var_a8h = r3;
0x000be2fc mov r0, r5 | r0 = r5;
0x000be2fe ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x000be302 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000be306 mov r2, r4 | r2 = r4;
0x000be308 mov r3, r7 | r3 = r7;
0x000be30a movs r1, 2 | r1 = 2;
0x000be30c mov r0, r5 | r0 = r5;
0x000be30e bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000be312 mov r0, r5 | r0 = r5;
0x000be314 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000be318 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000be31a beq.w 0xbea36 | goto label_137;
| }
0x000be31e mov r0, r5 | r0 = r5;
0x000be320 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000be324 mov r7, r0 | r7 = r0;
0x000be326 movs r3, 0 | r3 = 0;
0x000be328 str r3, [sp, 0x88] | var_88h = r3;
0x000be32a strd r3, r3, [sp, 0xa0] | __asm ("strd r3, r3, [var_a0h]");
| label_67:
0x000be32e cmp r7, 0 |
| if (r7 != 0) {
0x000be330 bne 0xbe264 | goto label_33;
| }
0x000be332 add r3, sp, 0xd0 | r3 += var_d0h;
0x000be334 mov fp, r7 |
0x000be336 mov r2, r7 | r2 = r7;
0x000be338 mov r8, r7 | r8 = r7;
0x000be33a add.w sb, sp, 0xd4 | sb += var_d4h;
0x000be33e mov r7, r6 | r7 = r6;
0x000be340 mov r6, r3 | r6 = r3;
0x000be342 add r1, sp, 0xd8 | r1 += var_d8h;
0x000be344 str r1, [sp, 0x84] | var_84h = r1;
0x000be346 str r4, [sp, 0x9c] | var_9ch = r4;
0x000be348 ldrd r5, r4, [sp, 0xd8] | __asm ("ldrd r5, r4, [var_d8h]");
0x000be34c orrs.w r3, r5, r4 | r3 = r5 | r4;
| if (r3 == r5) {
0x000be350 beq 0xbe3e4 | goto label_138;
| }
0x000be352 mov r2, r5 | r2 = r5;
0x000be354 mov r3, r4 | r3 = r4;
0x000be356 mov r0, sl | r0 = sl;
0x000be358 strd sb, r8, [sp, 4] | __asm ("strd sb, r8, [var_4h]");
0x000be35c str r6, [sp] | *(sp) = r6;
0x000be35e strd r8, r8, [sp, 0xd0] | __asm ("strd r8, r8, [var_d0h]");
0x000be362 bl 0xbabb0 | r0 = fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
| if (r0 != 0) {
0x000be366 cbz r0, 0xbe376 |
0x000be368 mov r6, r7 | r6 = r7;
0x000be36a mov r7, r0 | r7 = r0;
0x000be36c ldr r0, [sp, 0xd0] | r0 = var_d0h;
0x000be36e bl 0x26dbc | fcn_00026dbc (r0);
| label_35:
0x000be372 ldr r4, [sp, 0x100] | r4 = var_100h;
0x000be374 b 0xbe266 | goto label_34;
| }
0x000be376 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000be378 ldrd fp, r1, [sp, 0xd0] | __asm ("ldrd fp, r1, [var_d0h]");
0x000be37c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000be37e str r3, [sp, 4] | var_4h = r3;
0x000be380 ldr r3, [sp, 0x58] | r3 = var_58h;
0x000be382 mov r0, fp | r0 = fp;
0x000be384 str r3, [sp] | *(sp) = r3;
0x000be386 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000be388 bl 0x7386c | r0 = fcn_0007386c (r0, r1, r2, r3, r4, r5, r6);
| if (r0 == 0) {
0x000be38c cbz r0, 0xbe39a | void (*0xbe39a)() ();
| }
| label_138:
0x000be3e4 mov r3, r2 | r3 = r2;
0x000be3e6 ldr r4, [sp, 0x9c] | r4 = var_9ch;
0x000be3e8 orrs.w r3, fp, r3 | r3 = fp | r3;
0x000be3ec mov r6, r7 | r6 = r7;
0x000be3ee mov r8, r2 | r8 = r2;
| if (r3 == fp) {
0x000be3f0 beq 0xbe438 | goto label_139;
| }
0x000be3f2 movs r3, 0 | r3 = 0;
0x000be3f4 mov r2, sb | r2 = sb;
0x000be3f6 movs r1, 0x11 | r1 = 0x11;
0x000be3f8 mov r0, sl | r0 = sl;
0x000be3fa str r3, [sp, 0xd4] | var_d4h = r3;
0x000be3fc bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be400 mov r7, r0 | r7 = r0;
0x000be402 cmp r0, 0 |
| if (r0 != 0) {
0x000be404 bne 0xbe372 | goto label_35;
| }
| label_139:
0x000be438 movs r3, 0 | r3 = 0;
0x000be43a mov r2, sb | r2 = sb;
0x000be43c movs r1, 0x21 | r1 = 0x21;
0x000be43e mov r0, sl | r0 = sl;
0x000be440 str r3, [sp, 0xd4] | var_d4h = r3;
0x000be442 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be446 mov r7, r0 | r7 = r0;
0x000be448 cmp r0, 0 |
| if (r0 != 0) {
0x000be44a bne 0xbe372 | goto label_35;
| }
| label_134:
0x000be4ba mov r1, r5 | r1 = r5;
0x000be4bc mov r0, sl | r0 = sl;
0x000be4be bl 0xb5384 | r0 = fcn_000b5384 (r0, r1);
0x000be4c2 mov r7, r0 | r7 = r0;
0x000be4c4 cmp r0, 0 |
| if (r0 != 0) {
0x000be4c6 bne.w 0xbe2ac | goto label_36;
| }
0x000be4ca ldr r4, [r5] | r4 = *(r5);
0x000be4cc b 0xbe296 | goto label_37;
| label_125:
0x000be4ce mov r7, r0 | r7 = r0;
0x000be4d0 str r0, [sp, 0xc4] | var_c4h = r0;
0x000be4d2 b 0xbde4e | goto label_25;
| label_135:
0x000be4d4 ldr r5, [sp, 0x100] | r5 = var_100h;
0x000be4d6 movs r1, 1 | r1 = 1;
0x000be4d8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000be4da ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000be4dc mov r0, r5 | r0 = r5;
0x000be4de bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000be4e2 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x000be4e4 mov r2, r4 | r2 = r4;
0x000be4e6 movs r1, 2 | r1 = 2;
0x000be4e8 mov r0, r5 | r0 = r5;
0x000be4ea bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000be4ee mov r0, r5 | r0 = r5;
0x000be4f0 bl 0x96a64 | fcn_00096a64 (r0);
0x000be4f4 mov r0, r5 | r0 = r5;
0x000be4f6 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000be4fa mov r7, r0 | r7 = r0;
0x000be4fc b 0xbe278 | goto label_38;
| label_113:
0x000be4fe mov r1, r7 | r1 = r7;
0x000be500 mov r0, r4 | r0 = r4;
0x000be502 bl 0x32f84 | fcn_00032f84 (r0, r1);
0x000be504 ldc2 p6, c4, [pc, -0x1c]! | __asm ("ldc2 p6, c4, [0x000be4f0]!");
0x000be508 b 0xbde3c | goto label_39;
| label_128:
0x000be50a ldr.w r3, [pc, 0xb7c] |
0x000be50e add r3, pc | r3 = 0x17d59c;
0x000be510 str r3, [sp, 0xbc] | var_bch = r3;
0x000be512 add.w r3, sl, 0x4c | r3 = sl + 0x4c;
0x000be516 str r3, [sp, 0x98] | var_98h = r3;
0x000be518 add.w r3, sl, 0x40 | r3 = sl + 0x40;
0x000be51c str r3, [sp, 0x9c] | var_9ch = r3;
| label_43:
0x000be51e ldr.w r3, [sl, 0x27c] | r3 = *((sl + 0x27c));
0x000be522 ldr.w r0, [sl, 0x44] | r0 = *((sl + 0x44));
0x000be526 ldr.w fp, [sl, 0x284] | fp = *((sl + 0x284));
0x000be52a str r3, [sp, 0x58] | var_58h = r3;
0x000be52c cmp r0, r3 |
0x000be52e it ge |
| if (r0 < r3) {
0x000be530 movge r0, r3 | r0 = r3;
| }
0x000be532 ldr.w r3, [sl, 0x278] | r3 = *((sl + 0x278));
0x000be536 cmp r0, 0 |
0x000be538 itt le |
| if (r0 > 0) {
0x000be53a ldrle r5, [sp, 0x58] | r5 = var_58h;
| }
| if (r0 > 0) {
0x000be53c movle r6, 0 | r6 = 0;
| }
0x000be53e str r3, [sp, 0x54] | var_54h = r3;
0x000be540 ldr.w r3, [sl, 0x280] | r3 = *((sl + 0x280));
0x000be544 str r3, [sp, 0x84] | var_84h = r3;
0x000be546 ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
| if (r0 <= 0) {
0x000be54a ble 0xbe56c | goto label_140;
| }
0x000be54c ldr r2, [sp, 0x54] | r2 = var_54h;
0x000be54e subs r3, 1 | r3--;
0x000be550 movs r6, 0 | r6 = 0;
0x000be552 subs r2, 1 | r2--;
0x000be554 b 0xbe55c |
| while (r4 == r1) {
0x000be556 adds r6, 1 | r6++;
0x000be558 cmp r6, r0 |
| if (r6 == r0) {
0x000be55a beq 0xbe568 | goto label_141;
| }
0x000be55c ldrb r4, [r3, 1]! | r4 = *((r3 += 1));
0x000be560 ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x000be564 cmp r4, r1 |
0x000be566 beq 0xbe556 |
| }
| label_141:
0x000be568 ldr r3, [sp, 0x58] | r3 = var_58h;
0x000be56a subs r5, r3, r6 | r5 = r3 - r6;
| label_140:
0x000be56c cmp r5, 0 |
| if (r5 <= 0) {
0x000be56e ble.w 0xbe6c4 | goto label_76;
| }
0x000be572 asrs r2, r6, 0x1f | r2 = r6 >> 0x1f;
0x000be574 mov r3, r6 | r3 = r6;
0x000be576 movs r0, 0 | r0 = 0;
| do {
0x000be578 lsrs r3, r3, 7 | r3 >>= 7;
0x000be57a adds r0, 1 | r0++;
0x000be57c orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000be580 lsrs r2, r2, 7 | r2 >>= 7;
0x000be582 orrs.w r1, r3, r2 | r1 = r3 | r2;
0x000be586 bne 0xbe578 |
| } while (r1 != r3);
0x000be588 asrs r2, r5, 0x1f | r2 = r5 >> 0x1f;
0x000be58a mov r3, r5 | r3 = r5;
0x000be58c movs r1, 0 | r1 = 0;
| do {
0x000be58e lsrs r3, r3, 7 | r3 >>= 7;
0x000be590 adds r1, 1 | r1++;
0x000be592 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000be596 lsrs r2, r2, 7 | r2 >>= 7;
0x000be598 orrs.w r4, r3, r2 | r4 = r3 | r2;
0x000be59c bne 0xbe58e |
| } while (r4 != r3);
0x000be59e asr.w r8, fp, 0x1f | r8 = fp >> 0x1f;
0x000be5a2 add r1, r5 | r1 += r5;
0x000be5a4 add r0, r1 | r0 += r1;
0x000be5a6 mov r7, fp | r7 = fp;
0x000be5a8 movs r1, 0 | r1 = 0;
0x000be5aa mov r2, fp | r2 = fp;
0x000be5ac mov r3, r8 | r3 = r8;
| do {
0x000be5ae lsrs r4, r2, 7 | r4 = r2 >> 7;
0x000be5b0 lsrs r5, r3, 7 | r5 = r3 >> 7;
0x000be5b2 orr.w r4, r4, r3, lsl 25 | r4 |= (r3 << 25);
0x000be5b6 adds r1, 1 | r1++;
0x000be5b8 mov r3, r5 | r3 = r5;
0x000be5ba orrs.w ip, r4, r5 |
0x000be5be mov r2, r4 | r2 = r4;
0x000be5c0 bne 0xbe5ae |
| } while (ip != r4);
0x000be5c2 add.w r2, fp, r1 | r2 = fp + r1;
0x000be5c6 ldr.w r1, [sl, 0x50] | r1 = *((sl + 0x50));
0x000be5ca add r2, r0 | r2 += r0;
0x000be5cc cmp r1, 0 |
0x000be5ce add.w sb, r2, r1 | sb = r2 + r1;
| if (r1 > 0) {
0x000be5d2 ble 0xbe5de |
0x000be5d4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000be5d6 ldr.w r3, [r3, 0xe8] | r3 = *((r3 + 0xe8));
0x000be5da cmp r3, sb |
| if (r3 < sb) {
0x000be5dc blt 0xbe6ce | goto label_142;
| }
| }
0x000be5de ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x000be5e2 ldr r5, [sp, 0x98] | r5 = var_98h;
0x000be5e4 adds r3, r3, r2 | r3 += r2;
0x000be5e6 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x000be5ea ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000be5ee adc.w r3, r3, r2, asr 31 | __asm ("adc.w r3, r3, r2, asr 31");
0x000be5f2 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x000be5f6 ldr.w r3, [sl, 0x54] | r3 = *((sl + 0x54));
0x000be5fa cmp r3, sb |
| if (r3 < sb) {
0x000be5fc blt 0xbe660 | goto label_143;
| }
| if (r1 == 0) {
| label_42:
0x000be5fe cbnz r1, 0xbe60e |
| label_41:
0x000be600 ldr.w r3, [sl, 0x4c] | r3 = *((sl + 0x4c));
0x000be604 movs r2, 1 | r2 = 1;
0x000be606 str.w r2, [sl, 0x50] | __asm ("str.w r2, [sl, 0x50]");
0x000be60a movs r2, 0 | r2 = 0;
0x000be60c strb r2, [r3] | *(r3) = r2;
| }
0x000be60e ldr r3, [sp, 0x84] | r3 = var_84h;
0x000be610 mov r0, r5 | r0 = r5;
0x000be612 ldr r1, [sp, 0x9c] | r1 = var_9ch;
0x000be614 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x000be618 str r3, [sp] | *(sp) = r3;
0x000be61a ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_58h]");
0x000be61e bl 0x63ea0 | fcn_00063ea0 (r0, r1, r2, r3, r4, r5, r6);
0x000be622 str r0, [sp, 0x50] | var_50h = r0;
0x000be624 str r0, [sp, 0xc4] | var_c4h = r0;
| if (r0 == 0) {
0x000be626 cbnz r0, 0xbe634 |
0x000be628 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000be62a ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be62c bl 0xbb978 | fcn_000bb978 (r0, r1, r2, r3, r4);
0x000be630 str r0, [sp, 0x50] | var_50h = r0;
0x000be632 str r0, [sp, 0xc4] | var_c4h = r0;
| }
| label_45:
0x000be634 ldr.w r6, [sl, 4] | r6 = *((sl + 4));
0x000be638 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000be63a cmp r6, r3 |
| if (r6 < r3) {
0x000be63c blt 0xbe6a4 | goto label_144;
| }
0x000be63e ldr r7, [sp, 0x50] | r7 = var_50h;
0x000be640 cmp r7, 0x64 |
0x000be642 itt eq |
| if (r7 != 0x64) {
0x000be644 moveq r3, 0 | r3 = 0;
| }
| if (r7 == 0x64) {
0x000be646 streq r3, [sp, 0xc4] | var_c4h = r3;
| goto label_145;
| }
| if (r7 == 0x64) {
| label_145:
0x000be648 beq.w 0xbe1e0 | goto label_40;
| }
0x000be64c cmp r7, 0 |
| if (r7 != 0) {
0x000be64e bne.w 0xbde4e | goto label_25;
| }
0x000be652 b 0xbe1e0 | goto label_40;
| label_44:
0x000be654 ldr.w r3, [sl, 0x54] | r3 = *((sl + 0x54));
0x000be658 add.w r5, sl, 0x4c | r5 = sl + 0x4c;
0x000be65c cmp sb, r3 |
| if (sb <= r3) {
0x000be65e ble 0xbe600 | goto label_41;
| }
| label_143:
0x000be660 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000be662 ldr.w r4, [sl, 0x4c] | r4 = *((sl + 0x4c));
0x000be666 ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000be66a cmp r3, 0 |
| if (r3 != 0) {
0x000be66c bne.w 0xbea2a | goto label_146;
| }
0x000be670 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000be674 cmp r0, 0 |
| if (r0 != 0) {
0x000be676 bne.w 0xbea24 | goto label_147;
| }
0x000be67a bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000be67e cmp r0, 0 |
| if (r0 != 0) {
0x000be680 bne.w 0xbea24 | goto label_147;
| }
| label_52:
0x000be684 asr.w r3, sb, 0x1f | r3 = sb >> 0x1f;
0x000be688 mov r0, r4 | r0 = r4;
0x000be68a mov r2, sb | r2 = sb;
0x000be68c bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000be690 cmp r0, 0 |
| if (r0 == 0) {
0x000be692 beq.w 0xbea24 | goto label_147;
| }
0x000be696 ldr.w r1, [sl, 0x50] | r1 = *((sl + 0x50));
0x000be69a str.w sb, [sl, 0x54] | __asm ("str.w sb, [sl, 0x54]");
0x000be69e str.w r0, [sl, 0x4c] | __asm ("str.w r0, [sl, 0x4c]");
0x000be6a2 b 0xbe5fe | goto label_42;
| label_144:
0x000be6a4 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000be6a6 cmp r3, 0x64 |
| if (r3 == 0x64) {
0x000be6a8 beq.w 0xbe51e | goto label_43;
| }
0x000be6ac mov r7, r3 | r7 = r3;
0x000be6ae cmp r7, 0 |
| if (r7 != 0) {
0x000be6b0 bne.w 0xbde4e | goto label_25;
| }
0x000be6b4 b 0xbe1e0 | goto label_40;
| label_123:
0x000be6b6 mov r0, r6 | r0 = r6;
0x000be6b8 bl 0x79b80 | fcn_00079b80 (r0);
0x000be6bc mov r3, fp | r3 = fp;
0x000be6be cmp r3, 0 |
| if (r3 != 0) {
0x000be6c0 bne.w 0xbea24 | goto label_147;
| }
| label_76:
0x000be6c4 movw r7, 0x10b | r7 = 0x10b;
0x000be6c8 str r7, [sp, 0xc4] | var_c4h = r7;
0x000be6ca b.w 0xbde4e | goto label_25;
| label_142:
0x000be6ce ldrd r2, r3, [sl, 0x38] | __asm ("ldrd r2, r3, [sl, 0x38]");
0x000be6d2 str r1, [sp, 4] | var_4h = r1;
0x000be6d4 ldr.w r1, [sl, 0x4c] | r1 = *((sl + 0x4c));
0x000be6d8 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be6da str r1, [sp] | *(sp) = r1;
0x000be6dc bl 0xb52d4 | fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000be6e0 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000be6e4 str r0, [sp, 0x50] | var_50h = r0;
0x000be6e6 adds r3, 1 | r3++;
0x000be6e8 str.w r3, [sl, 4] | __asm ("str.w r3, [sl, 4]");
0x000be6ec cmp r0, 0 |
| if (r0 == 0) {
0x000be6ee beq.w 0xbe818 | goto label_148;
| }
| label_49:
0x000be6f2 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x000be6f6 movs r1, 0 | r1 = 0;
0x000be6f8 str.w r1, [sl, 0x44] | __asm ("str.w r1, [sl, 0x44]");
0x000be6fc str.w r1, [sl, 0x50] | __asm ("str.w r1, [sl, 0x50]");
0x000be700 adds r3, 1 | r3++;
0x000be702 str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x000be706 ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x000be70a adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000be70e str.w r3, [sl, 0x3c] | __asm ("str.w r3, [sl, 0x3c]");
0x000be712 ldr r3, [sp, 0x58] | r3 = var_58h;
0x000be714 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
| do {
0x000be716 lsrs r3, r3, 7 | r3 >>= 7;
0x000be718 adds r1, 1 | r1++;
0x000be71a orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000be71e lsrs r2, r2, 7 | r2 >>= 7;
0x000be720 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x000be724 bne 0xbe716 |
| } while (r0 != r3);
0x000be726 ldr r3, [sp, 0x58] | r3 = var_58h;
0x000be728 movs r2, 0 | r2 = 0;
0x000be72a add r3, r1 | r3 += r1;
0x000be72c adds r3, 1 | r3++;
| do {
0x000be72e lsrs r7, r7, 7 | r7 >>= 7;
0x000be730 adds r2, 1 | r2++;
0x000be732 orr.w r7, r7, r8, lsl 25 | r7 |= (r8 << 25);
0x000be736 lsr.w r8, r8, 7 | r8 >>= 7;
0x000be73a orrs.w r1, r7, r8 | r1 = r7 | r8;
0x000be73e bne 0xbe72e |
| } while (r1 != r7);
0x000be740 add r2, fp | r2 += fp;
0x000be742 add.w sb, r2, r3 | sb = r2 + r3;
0x000be746 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x000be74a adds.w r3, r3, sb | r3 += sb;
0x000be74e str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x000be752 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000be756 adc.w r3, r3, sb, asr 31 | __asm ("adc.w r3, r3, sb, asr 31");
0x000be75a str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x000be75e ldr r3, [sp, 0x50] | r3 = var_50h;
0x000be760 cmp r3, 0 |
| if (r3 == 0) {
0x000be762 beq.w 0xbe654 | goto label_44;
| }
0x000be766 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000be768 str r3, [sp, 0xc4] | var_c4h = r3;
0x000be76a b 0xbe634 | goto label_45;
| label_122:
0x000be76c mov r0, r6 | r0 = r6;
0x000be76e bl 0x79b80 | r0 = fcn_00079b80 (r0);
| label_62:
0x000be772 mov r7, r0 | r7 = r0;
0x000be774 str r0, [sp, 0xc4] | var_c4h = r0;
0x000be776 cmp r0, 0 |
| if (r0 == 0) {
0x000be778 beq.w 0xbe1cc | goto label_46;
| }
0x000be77c b.w 0xbde4e | goto label_25;
| label_121:
0x000be780 ldr r0, [sp, 0xe0] | r0 = var_e0h;
| if (r0 != 0) {
0x000be782 cbz r0, 0xbe78c |
0x000be784 mov r1, r5 | r1 = r5;
0x000be786 mov r2, r6 | r2 = r6;
0x000be788 blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x000be78c str r6, [sp, 0xe4] | var_e4h = r6;
0x000be78e b.w 0xbd868 | goto label_27;
| label_120:
0x000be792 ldr.w r3, [pc, 0x8f8] |
0x000be796 add r3, pc |
0x000be798 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000be79c cmp r3, 0 |
| if (r3 != 0) {
0x000be79e bne.w 0xbebe8 | goto label_149;
| }
0x000be7a2 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000be7a6 cmp r0, 0 |
| if (r0 != 0) {
0x000be7a8 bne.w 0xbebe0 | goto label_150;
| }
0x000be7ac bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000be7b0 cmp r0, 0 |
| if (r0 != 0) {
0x000be7b2 bne.w 0xbebe0 | goto label_150;
| }
| label_56:
0x000be7b6 mov r0, r5 | r0 = r5;
0x000be7b8 movs r2, 0xb | r2 = 0xb;
0x000be7ba movs r3, 0 | r3 = 0;
0x000be7bc bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000be7c0 mov r5, r0 | r5 = r0;
0x000be7c2 cmp r0, 0 |
| if (r0 == 0) {
0x000be7c4 beq.w 0xbebe0 | goto label_150;
| }
0x000be7c8 movs r3, 0xb | r3 = 0xb;
0x000be7ca str.w r0, [sl, 0x6c] | __asm ("str.w r0, [sl, 0x6c]");
0x000be7ce str.w r3, [sl, 0x74] | __asm ("str.w r3, [sl, 0x74]");
0x000be7d2 b 0xbe002 | goto label_47;
| label_133:
0x000be7d4 ldr.w sl, [sp, 0x50] | sl = var_50h;
0x000be7d8 ldr r6, [sp, 0x98] | r6 = var_98h;
0x000be7da cmp r7, 0 |
| if (r7 != 0) {
0x000be7dc bne.w 0xbe2b2 | goto label_48;
| }
0x000be7e0 ldr.w r3, [sl, 0x24c] | r3 = *((sl + 0x24c));
0x000be7e4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000be7e6 cmp r3, r2 |
| if (r3 == r2) {
0x000be7e8 beq.w 0xbe2b2 | goto label_48;
| }
| label_63:
0x000be7ec movs r4, 0 | r4 = 0;
0x000be7ee ldr r2, [sp, 0x80] | r2 = var_80h;
0x000be7f0 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000be7f2 mov r3, r4 | r3 = r4;
0x000be7f4 movs r1, 0x23 | r1 = 0x23;
0x000be7f6 str r4, [sp, 0xf0] | var_f0h = r4;
0x000be7f8 str r4, [sp, 0x100] | var_100h = r4;
0x000be7fa bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000be7fe mov r7, r0 | r7 = r0;
0x000be800 cmp r0, 0 |
| if (r0 == 0) {
0x000be802 beq.w 0xbec9e | goto label_151;
| }
0x000be806 str r4, [sp, 0x50] | var_50h = r4;
| label_66:
0x000be808 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000be80a movs r3, 0 | r3 = 0;
0x000be80c ldr r0, [sp, 0x50] | r0 = var_50h;
0x000be80e strb.w r3, [r2, 0xf0] | *((r2 + 0xf0)) = r3;
0x000be812 bl 0x26dbc | fcn_00026dbc (r0);
0x000be816 b 0xbe2b2 | goto label_48;
| label_148:
0x000be818 adds r3, r6, 1 | r3 = r6 + 1;
0x000be81a str r7, [sp, 0x88] | var_88h = r7;
0x000be81c str r3, [sp, 0x90] | var_90h = r3;
0x000be81e ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x000be822 str r4, [sp, 0x94] | var_94h = r4;
0x000be824 mov r4, sl | r4 = sl;
0x000be826 str r5, [sp, 0xac] | var_ach = r5;
0x000be828 str r3, [sp, 0xb4] | var_b4h = r3;
0x000be82a ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x000be82e str r3, [sp, 0xb8] | var_b8h = r3;
0x000be830 movs r3, 1 | r3 = 1;
0x000be832 mov r7, r3 | r7 = r3;
| label_54:
0x000be834 ldr r5, [sp, 0x90] | r5 = var_90h;
0x000be836 ldrd r3, lr, [r4, 0x60] | __asm ("ldrd r3, lr, [r4, 0x60]");
0x000be83a cmp r5, lr |
0x000be83c it ge |
| if (r5 < lr) {
0x000be83e movge r5, lr | r5 = lr;
| }
0x000be840 cmp r5, 0 |
| if (r5 <= 0) {
0x000be842 ble.w 0xbec54 | goto label_152;
| }
0x000be846 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000be848 subs r3, 1 | r3--;
0x000be84a movs r6, 0 | r6 = 0;
0x000be84c subs r2, 1 | r2--;
0x000be84e b 0xbe856 |
| while (r0 == r1) {
0x000be850 adds r6, 1 | r6++;
0x000be852 cmp r6, r5 |
| if (r6 == r5) {
0x000be854 beq 0xbe862 | goto label_153;
| }
0x000be856 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x000be85a ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x000be85e cmp r0, r1 |
0x000be860 beq 0xbe850 |
| }
| label_153:
0x000be862 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000be864 sub.w ip, r3, r6 |
0x000be868 cmp.w ip, 0 |
| if (ip <= 0) {
0x000be86c ble.w 0xbee80 | goto label_154;
| }
0x000be870 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x000be872 movs r0, 0 | r0 = 0;
0x000be874 mov r2, r3 | r2 = r3;
0x000be876 strd r6, r3, [sp, 0xa0] | __asm ("strd r6, r3, [var_a0h]");
0x000be87a mov r3, r6 | r3 = r6;
| do {
0x000be87c lsrs r3, r3, 7 | r3 >>= 7;
0x000be87e adds r0, 1 | r0++;
0x000be880 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000be884 lsrs r2, r2, 7 | r2 >>= 7;
0x000be886 orrs.w r1, r3, r2 | r1 = r3 | r2;
0x000be88a bne 0xbe87c |
| } while (r1 != r3);
| label_61:
0x000be88c asr.w r3, ip, 0x1f | r3 = ip >> 0x1f;
0x000be890 mov sb, ip | sb = ip;
0x000be892 movs r1, 0 | r1 = 0;
0x000be894 mov r2, r3 | r2 = r3;
0x000be896 str r3, [sp, 0xa8] | var_a8h = r3;
0x000be898 mov r3, ip | r3 = ip;
| do {
0x000be89a lsrs r3, r3, 7 | r3 >>= 7;
0x000be89c adds r1, 1 | r1++;
0x000be89e orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x000be8a2 lsrs r2, r2, 7 | r2 >>= 7;
0x000be8a4 orrs.w r5, r3, r2 | r5 = r3 | r2;
0x000be8a8 bne 0xbe89a |
| } while (r5 != r3);
0x000be8aa add r1, ip | r1 += ip;
0x000be8ac add r0, r1 | r0 += r1;
0x000be8ae ldr r1, [r4, 0x70] | r1 = *((r4 + 0x70));
0x000be8b0 cmp.w lr, 0 |
| if (lr != 0) {
0x000be8b4 beq 0xbe8c4 |
0x000be8b6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000be8b8 adds r2, r0, r1 | r2 = r0 + r1;
0x000be8ba ldr.w r3, [r3, 0xe8] | r3 = *((r3 + 0xe8));
0x000be8be cmp r2, r3 |
| if (r2 > r3) {
0x000be8c0 bgt.w 0xbeacc | goto label_155;
| }
| }
0x000be8c4 mov r3, r7 | r3 = r7;
0x000be8c6 str r7, [sp, 0xb0] | var_b0h = r7;
0x000be8c8 lsls r3, r3, 5 | r3 <<= 5;
0x000be8ca ldr r7, [sp, 0x88] | r7 = var_88h;
0x000be8cc str.w ip, [sp, 0xac] | __asm ("str.w ip, [var_ach]");
0x000be8d0 str r3, [sp, 0x88] | var_88h = r3;
0x000be8d2 add r3, sl | r3 += sl;
0x000be8d4 ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x000be8d6 str r0, [sp, 0x94] | var_94h = r0;
0x000be8d8 cmp r1, 0 |
| if (r1 == 0) {
0x000be8da beq 0xbe966 | goto label_156;
| }
0x000be8dc ldr r5, [sp, 0x94] | r5 = var_94h;
0x000be8de add r5, r1 | r5 += r1;
| label_50:
0x000be8e0 ldr r3, [sp, 0x88] | r3 = var_88h;
0x000be8e2 add r3, sl | r3 += sl;
0x000be8e4 ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x000be8e6 cmp r2, r5 |
| if (r2 < r5) {
0x000be8e8 blt 0xbe9b6 | goto label_157;
| }
| label_51:
0x000be8ea ldr r3, [sp, 0x88] | r3 = var_88h;
0x000be8ec ldr r2, [sp, 0x90] | r2 = var_90h;
0x000be8ee add.w r4, sl, r3 | r4 = sl + r3;
0x000be8f2 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000be8f4 cmp r2, r3 |
| if (r2 > r3) {
0x000be8f6 bgt 0xbe9ec | goto label_158;
| }
0x000be8f8 ldr r3, [sp, 0x88] | r3 = var_88h;
0x000be8fa add.w r5, sl, r3 | r5 = sl + r3;
0x000be8fe ldr r2, [r5, 0x44] | r2 = *((r5 + 0x44));
0x000be900 ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x000be902 cmp r2, 0 |
| if (r2 != 0) {
0x000be904 bne.w 0xbeb4a | goto label_159;
| }
0x000be906 strh r1, [r4, 8] | *((r4 + 8)) = r1;
| label_55:
0x000be908 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000be90a add r2, sl | r2 += sl;
0x000be90c ldr r1, [r2, 0x4c] | r1 = *((r2 + 0x4c));
0x000be90e ldr r2, [sp, 0xa8] | r2 = var_a8h;
0x000be910 add r1, r3 | r1 += r3;
0x000be912 mov r3, r1 | r3 = r1;
| do {
0x000be914 lsr.w r4, sb, 7 | r4 = sb >> 7;
0x000be918 orn ip, sb, 0x7f | ip = sb | 0x7f;
| ip = ~ip;
0x000be91c uxtb.w r0, sb | r0 = (int8_t) sb;
0x000be920 orr.w sb, r4, r2, lsl 25 | sb = r4 | (r2 << 25);
0x000be924 lsrs r2, r2, 7 | r2 >>= 7;
0x000be926 mov r4, r3 | r4 = r3;
0x000be928 strb ip, [r3], 1 | *(r3) = ip;
| r3++;
0x000be92c orrs.w ip, sb, r2 |
0x000be930 bne 0xbe914 |
| } while (ip != sb);
0x000be932 strb r0, [r4] | *(r4) = r0;
0x000be934 subs r3, r3, r1 | r3 -= r1;
0x000be936 ldr r4, [sp, 0x88] | r4 = var_88h;
0x000be938 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000be93a add r4, sl | r4 += sl;
0x000be93c adds r1, r2, r6 | r1 = r2 + r6;
0x000be93e ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x000be940 ldr r6, [sp, 0xac] | r6 = var_ach;
0x000be942 adds r0, r3, r2 | r0 = r3 + r2;
0x000be944 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x000be946 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000be948 mov r2, r6 | r2 = r6;
0x000be94a add r0, r3 | r0 += r3;
0x000be94c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000be950 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x000be952 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000be954 add r3, r6 | r3 += r6;
0x000be956 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x000be958 ldr r4, [sp, 0x90] | r4 = var_90h;
0x000be95a ldr r0, [r5, 0x40] | r0 = *((r5 + 0x40));
0x000be95c mov r2, r4 | r2 = r4;
0x000be95e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000be962 str r4, [r5, 0x44] | *((r5 + 0x44)) = r4;
0x000be964 b 0xbe6f2 | goto label_49;
| label_156:
0x000be966 ldr r5, [r3, 0x4c] | r5 = *((r3 + 0x4c));
0x000be968 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000be96a ldr.w r4, [r3, 0xe8] | r4 = *((r3 + 0xe8));
0x000be96e cmp r4, r2 |
| if (r4 > r2) {
0x000be970 bgt.w 0xbebf6 | goto label_160;
| }
| label_58:
0x000be974 ldr r1, [sp, 0x88] | r1 = var_88h;
0x000be976 ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x000be978 add r1, sl | r1 += sl;
0x000be97a strb r3, [r5] | *(r5) = r3;
0x000be97c ldr.w ip, [r1, 0x4c] | ip = *((r1 + 0x4c));
0x000be980 ldrd r3, r2, [sp, 0xb4] | __asm ("ldrd r3, r2, [var_b4h]");
0x000be984 add.w r0, ip, 1 | r0 = ip + 1;
| do {
0x000be988 lsrs r1, r3, 7 | r1 = r3 >> 7;
0x000be98a orn r4, r3, 0x7f | r4 = r3 | 0x7f;
| r4 = ~r4;
0x000be98e uxtb r5, r3 | r5 = (int8_t) r3;
0x000be990 orr.w r3, r1, r2, lsl 25 | r3 = r1 | (r2 << 25);
0x000be994 lsrs r2, r2, 7 | r2 >>= 7;
0x000be996 mov r1, r0 | r1 = r0;
0x000be998 strb r4, [r0], 1 | *(r0) = r4;
| r0++;
0x000be99c orrs.w r4, r3, r2 | r4 = r3 | r2;
0x000be9a0 bne 0xbe988 |
| } while (r4 != r3);
0x000be9a2 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000be9a4 sub.w r3, r1, ip | r3 = r1 - ip;
0x000be9a8 strb r5, [r1] | *(r1) = r5;
0x000be9aa adds r3, 1 | r3++;
0x000be9ac ldr r5, [sp, 0x94] | r5 = var_94h;
0x000be9ae add r2, sl | r2 += sl;
0x000be9b0 str r3, [r2, 0x50] | *((r2 + 0x50)) = r3;
0x000be9b2 add r5, r3 | r5 += r3;
0x000be9b4 b 0xbe8e0 | goto label_50;
| label_157:
0x000be9b6 ldr r4, [r3, 0x4c] | r4 = *((r3 + 0x4c));
0x000be9b8 ldr.w r3, [pc, 0x6d4] | r3 = fcn.0002b8d8;
0x000be9bc add r3, pc | r3 += pc;
0x000be9be ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000be9c2 cmp r3, 0 |
| if (r3 != 0) {
0x000be9c4 bne.w 0xbec4e | goto label_161;
| }
0x000be9c8 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 == 0) {
0x000be9cc cbnz r0, 0xbea30 |
0x000be9ce bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000be9d2 cbnz r0, 0xbea30 | goto label_57;
| }
| label_60:
0x000be9d4 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x000be9d6 mov r0, r4 | r0 = r4;
0x000be9d8 mov r2, r5 | r2 = r5;
0x000be9da bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
| if (r0 == 0) {
0x000be9de cbz r0, 0xbea30 | goto label_57;
| }
0x000be9e0 ldr r3, [sp, 0x88] | r3 = var_88h;
0x000be9e2 add.w r2, sl, r3 | r2 = sl + r3;
0x000be9e6 str r5, [r2, 0x54] | *((r2 + 0x54)) = r5;
0x000be9e8 str r0, [r2, 0x4c] | *((r2 + 0x4c)) = r0;
0x000be9ea b 0xbe8ea | goto label_51;
| label_158:
0x000be9ec ldr.w r3, [pc, 0x6a4] |
0x000be9f0 ldr r5, [r4, 0x40] | r5 = *((r4 + 0x40));
0x000be9f2 add r3, pc |
0x000be9f4 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000be9f8 cmp r3, 0 |
| if (r3 != 0) {
0x000be9fa bne.w 0xbec48 | goto label_162;
| }
0x000be9fe bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x000bea02 cbnz r0, 0xbea30 | goto label_57;
| }
0x000bea04 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000bea08 cbnz r0, 0xbea30 | goto label_57;
| }
| label_59:
0x000bea0a mov r0, r5 | r0 = r5;
0x000bea0c ldr r5, [sp, 0x90] | r5 = var_90h;
0x000bea0e mov r2, r5 | r2 = r5;
0x000bea10 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x000bea12 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
| if (r0 == 0) {
0x000bea16 cbz r0, 0xbea30 | goto label_57;
| }
| label_147:
0x000bea24 movs r7, 7 | r7 = 7;
0x000bea26 b.w 0xbdfa8 | goto label_28;
| label_146:
0x000bea2a dmb ish | __asm ("dmb ish");
0x000bea2e b 0xbe684 | goto label_52;
| }
| label_57:
0x000bea30 movs r3, 7 | r3 = 7;
0x000bea32 str r3, [sp, 0x50] | var_50h = r3;
0x000bea34 b 0xbe6f2 | goto label_49;
| label_137:
0x000bea36 movs r1, 4 | r1 = 4;
0x000bea38 mov r0, r5 | r0 = r5;
0x000bea3a bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000bea3e bl 0x3e27c | r0 = fcn_0003e27c (r0);
0x000bea42 mov r8, r0 | r8 = r0;
| if (r5 != 0) {
0x000bea44 cbz r5, 0xbea4c |
0x000bea46 mov r0, r5 | r0 = r5;
0x000bea48 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000bea4c movs r1, 4 | r1 = 4;
0x000bea4e mov r0, r5 | r0 = r5;
0x000bea50 bl 0x3db60 | fcn_0003db60 (r0);
0x000bea54 movs r1, 1 | r1 = 1;
0x000bea56 mov r7, r0 | r7 = r0;
0x000bea58 mov r0, r5 | r0 = r5;
0x000bea5a bl 0x32f34 | fcn_00032f34 (r0, r1);
0x000bea5e mov r3, r1 | r3 = r1;
0x000bea60 mov r1, r7 | r1 = r7;
0x000bea62 ldr r7, [sp, 0x58] | r7 = var_58h;
0x000bea64 mov r2, r0 | r2 = r0;
0x000bea66 strd r2, r3, [sp, 0xa0] | __asm ("strd r2, r3, [var_a0h]");
0x000bea6a add r3, sp, 0xd8 | r3 += var_d8h;
0x000bea6c str r3, [sp, 4] | var_4h = r3;
0x000bea6e mov r0, r8 | r0 = r8;
0x000bea70 str r7, [sp] | *(sp) = r7;
0x000bea72 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000bea74 ldr r2, [sp, 0x80] | r2 = var_80h;
0x000bea76 bl 0x7386c | r0 = fcn_0007386c (r0, r1, r2, r3, r4, r5, r6);
0x000bea7a mov r7, r0 | r7 = r0;
0x000bea7c mov r0, r5 | r0 = r5;
0x000bea7e bl 0x79b80 | fcn_00079b80 (r0);
0x000bea82 cmp r7, 0 |
| if (r7 == 0) {
0x000bea84 beq.w 0xbed3e | goto label_163;
| }
0x000bea88 ldr r3, [sp, 0xf0] | r3 = var_f0h;
0x000bea8a str r3, [sp, 0x88] | var_88h = r3;
0x000bea8c b.w 0xbe264 | goto label_33;
| label_129:
0x000bea90 cmp r7, 0 |
| if (r7 != 0) {
0x000bea92 bne.w 0xbec98 | goto label_164;
| }
0x000bea96 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000bea98 adds r3, r6, 1 | r3 = r6 + 1;
0x000bea9a str r7, [sp, 0xc4] | var_c4h = r7;
0x000bea9c str r7, [sp, 0x30] | var_30h = r7;
0x000bea9e subs r3, r2, r3 | r3 = r2 - r3;
0x000beaa0 str r3, [sp, 0x44] | var_44h = r3;
0x000beaa2 b.w 0xbde64 | goto label_31;
| label_126:
0x000beaa6 mov r1, r4 | r1 = r4;
0x000beaa8 mov r0, r6 | r0 = r6;
0x000beaaa bl 0x32f34 | r0 = fcn_00032f34 (r0, r1);
0x000beaae subs r3, r0, 1 | r3 = r0 - 1;
0x000beab0 str.w r1, [sl, 0x1c] | __asm ("str.w r1, [sl, 0x1c]");
0x000beab4 adc r2, r1, -1 | __asm ("adc r2, r1, -1");
0x000beab8 lsls r1, r7, 4 | r1 = r7 << 4;
0x000beaba str.w r0, [sl, 0x18] | __asm ("str.w r0, [sl, 0x18]");
0x000beabe adds r3, r3, r1 | r3 += r1;
0x000beac0 adc.w r2, r2, r1, asr 31 | __asm ("adc.w r2, r2, r1, asr 31");
0x000beac4 strd r3, r2, [sl, 0x20] | __asm ("strd r3, r2, [sl, 0x20]");
0x000beac8 b.w 0xbe16c | goto label_53;
| label_155:
0x000beacc ldrd r2, r3, [r4, 0x58] | __asm ("ldrd r2, r3, [r4, 0x58]");
0x000bead0 str r1, [sp, 4] | var_4h = r1;
0x000bead2 ldr r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x000bead4 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bead6 str r1, [sp] | *(sp) = r1;
0x000bead8 bl 0xb52d4 | fcn_000b52d4 (r0, r1, r2, r3, r4);
0x000beadc ldr r1, [r4, 0x6c] | r1 = *((r4 + 0x6c));
0x000beade mov sb, r0 | sb = r0;
0x000beae0 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x000beae2 ldr r2, [sp, 0xb8] | r2 = var_b8h;
0x000beae4 strb r7, [r1] | *(r1) = r7;
0x000beae6 ldr.w ip, [r4, 0x6c] | ip = *((r4 + 0x6c));
0x000beaea adds r3, 1 | r3++;
0x000beaec adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000beaf0 add.w r1, ip, 1 | r1 = ip + 1;
| do {
0x000beaf4 lsrs r0, r3, 7 | r0 = r3 >> 7;
0x000beaf6 orn r5, r3, 0x7f | r5 = r3 | 0x7f;
| r5 = ~r5;
0x000beafa uxtb r6, r3 | r6 = (int8_t) r3;
0x000beafc orr.w r3, r0, r2, lsl 25 | r3 = r0 | (r2 << 25);
0x000beb00 lsrs r2, r2, 7 | r2 >>= 7;
0x000beb02 mov r0, r1 | r0 = r1;
0x000beb04 strb r5, [r1], 1 | *(r1) = r5;
| r1++;
0x000beb06 ldrh r1, [r0, r4] | r1 = *((r0 + r4));
0x000beb08 orrs.w r5, r3, r2 | r5 = r3 | r2;
0x000beb0a lsls r2, r0, 0x14 | r2 = r0 << 0x14;
0x000beb0c bne 0xbeaf4 |
| } while (r2 != r0);
0x000beb0e strb r6, [r0] | *(r0) = r6;
0x000beb10 sub.w r3, r0, ip | r3 = r0 - ip;
0x000beb14 ldr r2, [r4, 0x58] | r2 = *((r4 + 0x58));
0x000beb16 adds r3, 1 | r3++;
0x000beb18 ldr r1, [r4, 0x5c] | r1 = *((r4 + 0x5c));
0x000beb1a str r3, [r4, 0x70] | *((r4 + 0x70)) = r3;
0x000beb1c movs r3, 0 | r3 = 0;
0x000beb1e str r3, [r4, 0x64] | *((r4 + 0x64)) = r3;
0x000beb20 adds r3, r2, 1 | r3 = r2 + 1;
0x000beb22 str r3, [r4, 0x58] | *((r4 + 0x58)) = r3;
0x000beb24 adc r3, r1, 0 | __asm ("adc r3, r1, 0");
0x000beb28 str r2, [sp, 0xb4] | var_b4h = r2;
0x000beb2a str r1, [sp, 0xb8] | var_b8h = r1;
0x000beb2c str r3, [r4, 0x5c] | *((r4 + 0x5c)) = r3;
0x000beb2e cmp.w sb, 0 |
| if (sb != 0) {
0x000beb32 bne.w 0xbeece | goto label_165;
| }
0x000beb36 orrs.w r3, r2, r1 | r3 = r2 | r1;
| if (r3 == r2) {
0x000beb3a beq 0xbeb46 | goto label_166;
| }
0x000beb3c adds r7, 1 | r7++;
0x000beb3e adds r4, 0x20 | r4 += 0x20;
0x000beb40 cmp r7, 0x10 |
| if (r7 != 0x10) {
0x000beb42 bne.w 0xbe834 | goto label_54;
| }
| label_166:
0x000beb46 ldr r7, [sp, 0x88] | r7 = var_88h;
0x000beb48 b 0xbe6f2 | goto label_49;
| label_159:
0x000beb4a ldr r1, [r5, 0x4c] | r1 = *((r5 + 0x4c));
0x000beb4c ldrd r2, ip, [sp, 0xa0] | __asm ("ldrd r2, ip, [var_a0h]");
0x000beb50 add r1, r3 | r1 += r3;
0x000beb52 mov r3, r1 | r3 = r1;
| do {
0x000beb54 lsrs r4, r2, 7 | r4 = r2 >> 7;
0x000beb56 orn lr, r2, 0x7f | lr = r2 | 0x7f;
| lr = ~lr;
0x000beb5a uxtb r0, r2 | r0 = (int8_t) r2;
0x000beb5c orr.w r2, r4, ip, lsl 25 | r2 = r4 | (ip << 25);
0x000beb60 lsr.w ip, ip, 7 |
0x000beb64 mov r4, r3 | r4 = r3;
0x000beb66 strb lr, [r3], 1 |
0x000beb6a orrs.w lr, r2, ip | lr = r2 | ip;
0x000beb6e bne 0xbeb54 |
| } while (lr != r2);
0x000beb70 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000beb72 subs r3, r3, r1 | r3 -= r1;
0x000beb74 strb r0, [r4] | *(r4) = r0;
0x000beb76 add.w r1, sl, r2 | r1 = sl + r2;
0x000beb7a ldr r2, [r1, 0x50] | r2 = *((r1 + 0x50));
0x000beb7c add r3, r2 | r3 += r2;
0x000beb7e str r3, [r1, 0x50] | *((r1 + 0x50)) = r3;
0x000beb80 b 0xbe908 | goto label_55;
| label_136:
0x000beb82 ldrd ip, lr, [sp, 0xe0] | __asm ("ldrd ip, lr, [var_e0h]");
0x000beb86 ldrd r1, r3, [sp, 0x38] | __asm ("ldrd r1, r3, [var_38h]");
0x000beb8a add.w r6, ip, lr | r6 = ip + lr;
0x000beb8e mov r2, r6 | r2 = r6;
| do {
0x000beb90 lsrs r4, r3, 7 | r4 = r3 >> 7;
0x000beb92 orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x000beb96 uxtb r5, r3 | r5 = (int8_t) r3;
0x000beb98 orr.w r3, r4, r1, lsl 25 | r3 = r4 | (r1 << 25);
0x000beb9c lsrs r1, r1, 7 | r1 >>= 7;
0x000beb9e mov r4, r2 | r4 = r2;
0x000beba0 strb r0, [r2], 1 | *(r2) = r0;
| r2++;
0x000beba4 orrs.w r0, r3, r1 | r0 = r3 | r1;
0x000beba8 bne 0xbeb90 |
| } while (r0 != r3);
0x000bebaa ldr r3, [sp, 0x30] | r3 = var_30h;
0x000bebac subs r2, r2, r6 | r2 -= r6;
0x000bebae add lr, r2 | lr += r2;
0x000bebb0 strb r5, [r4] | *(r4) = r5;
0x000bebb2 add.w r6, ip, lr | r6 = ip + lr;
0x000bebb4 lsls r6, r1, 0x18 | r6 = r1 << 0x18;
0x000bebb6 mov r2, r6 | r2 = r6;
0x000bebb8 asrs r1, r3, 0x1f | r1 = r3 >> 0x1f;
| do {
0x000bebba lsrs r4, r3, 7 | r4 = r3 >> 7;
0x000bebbc orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x000bebc0 uxtb r5, r3 | r5 = (int8_t) r3;
0x000bebc2 orr.w r3, r4, r1, lsl 25 | r3 = r4 | (r1 << 25);
0x000bebc6 lsrs r1, r1, 7 | r1 >>= 7;
0x000bebc8 mov r4, r2 | r4 = r2;
0x000bebca strb r0, [r2], 1 | *(r2) = r0;
| r2++;
0x000bebce orrs.w r0, r3, r1 | r0 = r3 | r1;
0x000bebd2 bne 0xbebba |
| } while (r0 != r3);
| label_150:
0x000bebe0 movs r7, 7 | r7 = 7;
0x000bebe2 movs r5, 1 | r5 = 1;
0x000bebe4 b.w 0xbdede | goto label_26;
| label_149:
0x000bebe8 dmb ish | __asm ("dmb ish");
0x000bebec b 0xbe7b6 | goto label_56;
| label_127:
0x000bebee mov r7, r0 | r7 = r0;
0x000bebf0 str r0, [sp, 0xc4] | var_c4h = r0;
0x000bebf2 b.w 0xbde4e | goto label_25;
| label_160:
0x000bebf6 ldr.w r3, [pc, 0x4a0] |
0x000bebfa add r3, pc |
0x000bebfc ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000bec00 cmp r3, 0 |
| if (r3 != 0) {
0x000bec02 bne.w 0xbee8a | goto label_167;
| }
0x000bec06 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bec0a cmp r0, 0 |
| if (r0 != 0) {
0x000bec0c bne.w 0xbea30 | goto label_57;
| }
0x000bec10 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bec14 cmp r0, 0 |
| if (r0 != 0) {
0x000bec16 bne.w 0xbea30 | goto label_57;
| }
| label_70:
0x000bec1a mov r0, r5 | r0 = r5;
0x000bec1c asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x000bec1e mov r2, r4 | r2 = r4;
0x000bec20 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000bec24 mov r5, r0 | r5 = r0;
0x000bec26 cmp r0, 0 |
| if (r0 == 0) {
0x000bec28 beq.w 0xbea30 | goto label_57;
| }
0x000bec2c ldr r3, [sp, 0x88] | r3 = var_88h;
0x000bec2e add r3, sl | r3 += sl;
0x000bec30 str r4, [r3, 0x54] | *((r3 + 0x54)) = r4;
0x000bec32 str r0, [r3, 0x4c] | *((r3 + 0x4c)) = r0;
0x000bec34 b 0xbe974 | goto label_58;
| label_111:
0x000bec36 mov r3, r0 | r3 = r0;
0x000bec38 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000bec3a mov fp, r3 |
0x000bec3c mov sb, sl | sb = sl;
0x000bec3e bl 0x7a754 | fcn_0007a754 (r0);
0x000bec42 ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000bec44 b.w 0xbd810 | goto label_2;
| label_162:
0x000bec48 dmb ish | __asm ("dmb ish");
0x000bec4c b 0xbea0a | goto label_59;
| label_161:
0x000bec4e dmb ish | __asm ("dmb ish");
0x000bec52 b 0xbe9d4 | goto label_60;
| label_152:
0x000bec54 ldr r3, [sp, 0x94] | r3 = var_94h;
0x000bec56 movs r6, 0 | r6 = 0;
0x000bec58 ldr.w ip, [sp, 0x90] | ip = var_90h;
0x000bec5c movs r0, 1 | r0 = 1;
0x000bec5e str r3, [sp, 0xa0] | var_a0h = r3;
0x000bec60 ldr r3, [sp, 0xac] | r3 = var_ach;
0x000bec62 str r3, [sp, 0xa4] | var_a4h = r3;
0x000bec64 b 0xbe88c | goto label_61;
| label_124:
0x000bec66 ldr r7, [sp, 0x100] | r7 = var_100h;
0x000bec68 movs r1, 1 | r1 = 1;
0x000bec6a ldr r2, [sp, 0x88] | r2 = var_88h;
0x000bec6c ldr r3, [sp, 0x90] | r3 = var_90h;
0x000bec6e mov r0, r7 | r0 = r7;
0x000bec70 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bec74 mov r0, r7 | r0 = r7;
0x000bec76 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000bec7a cmp r0, 0x64 |
0x000bec7c mov r0, r7 | r0 = r7;
| if (r0 == 0x64) {
0x000bec7e beq.w 0xbee44 | goto label_168;
| }
0x000bec82 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bec86 mov r7, r0 | r7 = r0;
| label_72:
0x000bec88 mov r0, r6 | r0 = r6;
0x000bec8a bl 0x79b80 | fcn_00079b80 (r0);
0x000bec8e cmp r7, 0 |
| if (r7 == 0) {
0x000bec90 beq.w 0xbe772 | goto label_62;
| }
0x000bec92 add r5, sp, 0x1bc | r5 = sp + 0x1bc;
0x000bec94 b.w 0xbdfa8 | goto label_28;
| label_164:
0x000bec98 movs r3, 0 | r3 = 0;
0x000bec9a str r3, [sp, 0x30] | var_30h = r3;
0x000bec9c b 0xbe7ec | goto label_63;
| label_151:
0x000bec9e ldr r5, [sp, 0xf0] | r5 = var_f0h;
0x000beca0 movs r1, 1 | r1 = 1;
0x000beca2 ldr r4, [pc, 0x3f8] |
0x000beca4 mov r8, r0 | r8 = r0;
0x000beca6 ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x000becaa mov r0, r5 | r0 = r5;
0x000becac bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000becb0 add r4, pc | r4 = 0x17dd52;
0x000becb2 str r7, [sp, 0x50] | var_50h = r7;
0x000becb4 b 0xbecf6 | goto label_169;
| label_64:
0x000becb6 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x000becba cbnz r0, 0xbed12 | goto label_170;
| }
0x000becbc bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000becc0 cbnz r0, 0xbed12 | goto label_170;
| }
| label_65:
0x000becc2 adds r7, 0x10 | r7 += 0x10;
0x000becc4 ldr r0, [sp, 0x50] | r0 = var_50h;
0x000becc6 lsls r2, r7, 2 | r2 = r7 << 2;
0x000becc8 movs r3, 0 | r3 = 0;
0x000becca bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
| if (r0 == 0) {
0x000becce cbz r0, 0xbed12 | goto label_170;
| }
0x000becd0 str r0, [sp, 0x50] | var_50h = r0;
| do {
0x000becd2 movs r1, 0 | r1 = 0;
0x000becd4 mov r0, r5 | r0 = r5;
0x000becd6 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000becda ldr r3, [sp, 0x50] | r3 = var_50h;
0x000becdc add.w fp, r3, r8, lsl 2 |
0x000bece0 bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000bece4 mov sb, r0 | sb = r0;
| if (r5 != 0) {
0x000bece6 cbz r5, 0xbecee |
0x000bece8 mov r0, r5 | r0 = r5;
0x000becea bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000becee add.w r8, r8, 1 | r8++;
0x000becf2 str.w sb, [fp] | __asm ("str.w sb, [fp]");
| label_169:
0x000becf6 mov r0, r5 | r0 = r5;
0x000becf8 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000becfc cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000becfe bne 0xbed1c | goto label_171;
| }
0x000bed00 cmp r8, r7 |
0x000bed02 blt 0xbecd2 |
| } while (r8 < r7);
0x000bed04 ldr.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x000bed08 cmp r3, 0 |
| if (r3 == 0) {
0x000bed0a beq 0xbecb6 | goto label_64;
| }
0x000bed0c dmb ish | __asm ("dmb ish");
0x000bed10 b 0xbecc2 | goto label_65;
| label_170:
0x000bed12 mov r0, r5 | r0 = r5;
0x000bed14 movs r7, 7 | r7 = 7;
0x000bed16 bl 0x79b80 | fcn_00079b80 (r0);
0x000bed1a b 0xbe808 | goto label_66;
| label_171:
0x000bed1c mov r0, r5 | r0 = r5;
0x000bed1e mov r4, r8 | r4 = r8;
0x000bed20 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bed24 mov r7, r0 | r7 = r0;
0x000bed26 cmp r0, 0 |
| if (r0 != 0) {
0x000bed28 bne.w 0xbe808 | goto label_66;
| }
0x000bed2c mov r3, r0 | r3 = r0;
0x000bed2e ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bed30 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bed32 movs r1, 0x1f | r1 = 0x1f;
0x000bed34 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
| if (r0 != 0) {
0x000bed38 cbz r0, 0xbed48 |
0x000bed3a mov r7, r0 | r7 = r0;
0x000bed3c b 0xbe808 | goto label_66;
| label_163:
0x000bed3e ldr r3, [sp, 0xf0] | r3 = var_f0h;
0x000bed40 mov r7, r0 | r7 = r0;
0x000bed42 str r3, [sp, 0x88] | var_88h = r3;
0x000bed44 b.w 0xbe32e | goto label_67;
| }
0x000bed48 ldr.w r8, [sp, 0x100] | r8 = var_100h;
0x000bed4c movs r1, 2 | r1 = 2;
0x000bed4e ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x000bed52 mov r0, r8 | r0 = r8;
0x000bed54 bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000bed58 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000bed5a movs r3, 1 | r3 = 1;
0x000bed5c strb.w r3, [r2, 0xf0] | *((r2 + 0xf0)) = r3;
0x000bed60 cmp r4, 0 |
| if (r4 == 0) {
0x000bed62 beq.w 0xbe808 | goto label_66;
| }
0x000bed66 ldr r2, [pc, 0x338] |
0x000bed68 mov.w r1, 0x9000 |
0x000bed6c movt r1, 0xffff | r1 = 0x-7000;
0x000bed70 mov r5, r7 | r5 = r7;
0x000bed72 mov sb, r7 | sb = r7;
0x000bed74 mov fp, r4 |
0x000bed76 add r2, pc | r2 = 0x17de1c;
0x000bed78 mov r7, r6 | r7 = r6;
0x000bed7a str r2, [sp, 0x54] | var_54h = r2;
0x000bed7c mov r6, r1 | r6 = r1;
0x000bed7e ldr r2, [pc, 0x324] |
0x000bed80 add r2, pc | r2 = 0x17de2a;
0x000bed82 str r2, [sp, 0x58] | var_58h = r2;
0x000bed84 b 0xbedca | goto label_172;
| label_68:
0x000bed86 movs r1, 3 | r1 = 3;
0x000bed88 mov r0, r8 | r0 = r8;
0x000bed8a bl 0x53aa0 | fcn_00053aa0 (r0, r1);
0x000bed8e ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000bed90 cmp r0, 0 |
| if (r0 == 0) {
0x000bed92 beq 0xbee02 | void (*0xbee02)() ();
| }
| label_172:
0x000bedca ldr r3, [sp, 0x50] | r3 = var_50h;
0x000bedcc mov r4, r5 | r4 = r5;
0x000bedce ldr.w r2, [r3, r5, lsl 2] | offset_0 = r5 << 2;
| r2 = *((r3 + offset_0));
0x000bedd2 cmp r2, r5 |
0x000bedd4 str r2, [sp, 0x4c] | var_4ch = r2;
| if (r2 != r5) {
0x000bedd6 bne 0xbed86 | goto label_68;
| }
0x000bedd8 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x000bedda movs r2, 0 | r2 = 0;
0x000beddc b 0xbedb2 | void (*0xbedb2)() ();
| label_168:
0x000bee44 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000bee48 mov r7, r0 | r7 = r0;
0x000bee4a str r0, [sp, 0xcc] | var_cch = r0;
0x000bee4c cmp r0, 0 |
| if (r0 != 0) {
0x000bee4e bne.w 0xbe144 | goto label_69;
| }
0x000bee52 add r1, sp, 0xd8 | r1 += var_d8h;
0x000bee54 ldr r3, [sp, 0x94] | r3 = var_94h;
0x000bee56 str r1, [sp, 0x98] | var_98h = r1;
0x000bee58 mov r2, r8 | r2 = r8;
0x000bee5a str r1, [sp, 4] | var_4h = r1;
0x000bee5c add r1, sp, 0xd4 | r1 += var_d4h;
0x000bee5e str r0, [sp, 8] | var_8h = r0;
0x000bee60 strd r0, r0, [sp, 0xd4] | __asm ("strd r0, r0, [var_d8h]");
0x000bee64 str r1, [sp] | *(sp) = r1;
0x000bee66 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000bee68 str r1, [sp, 0x94] | var_94h = r1;
0x000bee6a bl 0xbabb0 | r0 = fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
0x000bee6e mov r7, r0 | r7 = r0;
0x000bee70 str r0, [sp, 0xcc] | var_cch = r0;
0x000bee72 cmp r0, 0 |
| if (r0 == 0) {
0x000bee74 beq 0xbeede | goto label_173;
| }
0x000bee76 ldr r0, [sp, 0xd4] | r0 = var_d4h;
0x000bee78 bl 0x26dbc | fcn_00026dbc (r0);
0x000bee7c b.w 0xbe144 | goto label_69;
| label_154:
0x000bee80 movw r3, 0x10b | r3 = 0x10b;
0x000bee84 ldr r7, [sp, 0x88] | r7 = var_88h;
0x000bee86 str r3, [sp, 0x50] | var_50h = r3;
0x000bee88 b 0xbe6f2 | goto label_49;
| label_167:
0x000bee8a dmb ish | __asm ("dmb ish");
0x000bee8e b 0xbec1a | goto label_70;
| label_101:
0x000bee90 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000bee92 mov fp, r1 |
0x000bee94 mov sb, sl | sb = sl;
0x000bee96 bl 0x7a754 | fcn_0007a754 (r0);
0x000bee9a ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000bee9c b.w 0xbd810 | goto label_2;
| label_82:
0x000beea0 blx 0x6430 | fcn_00006430 ();
| label_89:
0x000beea4 ldr r7, [sp, 0xe4] | r7 = var_e4h;
0x000beea6 cmp r7, 0 |
| if (r7 == 0) {
0x000beea8 beq.w 0xbd9e6 | goto label_9;
| }
0x000beeac ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x000beeae subs r2, r7, 1 | r2 = r7 - 1;
0x000beeb0 mov r3, r2 | r3 = r2;
0x000beeb2 str r0, [sp, 0xf0] | var_f0h = r0;
0x000beeb4 str r0, [sp, 0x100] | var_100h = r0;
0x000beeb6 ldrsb.w ip, [r4, r2] | ip = *((r4 + r2));
0x000beeba str r0, [sp, 0x104] | var_104h = r0;
0x000beebc cmp ip, r0 |
| if (ip >= r0) {
0x000beebe bge.w 0xbda9a | goto label_71;
| }
0x000beec2 mov r8, r0 | r8 = r0;
0x000beec4 mov r4, r0 | r4 = r0;
0x000beec6 movw r3, 0x10b | r3 = 0x10b;
0x000beeca b.w 0xbdb02 | goto label_17;
| label_165:
0x000beece ldr r7, [sp, 0x88] | r7 = var_88h;
0x000beed0 str.w sb, [sp, 0x50] | __asm ("str.w sb, [var_50h]");
0x000beed4 b 0xbe6f2 | goto label_49;
| label_173:
0x000beede ldrd r8, r2, [sp, 0xd4] | __asm ("ldrd r8, r2, [var_d8h]");
0x000beee2 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000beee4 mov r1, r8 | r1 = r8;
0x000beee6 bl 0x73824 | fcn_00073824 (r0, r1, r2);
0x000beeea str r0, [sp, 0xcc] | var_cch = r0;
| if (r0 == 0) {
0x000beeec cbz r0, 0xbeefa | goto label_174;
| }
0x000beeee b 0xbef00 | goto label_175;
| do {
0x000beef0 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000beef2 bl 0x73694 | fcn_00073694 (r0);
0x000beef6 str r0, [sp, 0xcc] | var_cch = r0;
| if (r0 != 0) {
0x000beef8 cbnz r0, 0xbef00 | goto label_175;
| }
| label_174:
0x000beefa ldr r3, [sp, 0x100] | r3 = var_100h;
0x000beefc cmp r3, 0 |
0x000beefe bne 0xbeef0 |
| } while (r3 != 0);
| label_175:
0x000bef00 ldrd r7, r3, [sp, 0x118] | __asm ("ldrd r7, r3, [var_118h]");
0x000bef04 mov r2, r4 | r2 = r4;
0x000bef06 cmp r4, r3 |
0x000bef08 it ge |
| if (r4 < r3) {
0x000bef0a movge r2, r3 | r2 = r3;
| }
0x000bef0c cmp.w sb, 0 |
0x000bef10 it ne |
| if (sb != 0) {
0x000bef12 cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
| if (sb != 0) {
0x000bef14 beq 0xbef28 |
| if (r2 == 0) {
0x000bef16 cbz r2, 0xbef28 | goto label_176;
| }
0x000bef18 mov r0, sb | r0 = sb;
0x000bef1a mov r1, r7 | r1 = r7;
0x000bef1c str r3, [sp, 0x9c] | var_9ch = r3;
0x000bef1e blx 0x66a8 | loc_imp_gmon_start_ ();
0x000bef22 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000bef24 mov sb, r0 | sb = r0;
| if (r0 != 0) {
0x000bef26 cbnz r0, 0xbef2c | goto label_177;
| }
| }
| label_176:
0x000bef28 sub.w sb, r4, r3 | sb = r4 - r3;
| label_177:
0x000bef2c mov r0, r7 | r0 = r7;
0x000bef2e bl 0x26dbc | fcn_00026dbc (r0);
0x000bef32 mov r0, r8 | r0 = r8;
0x000bef34 bl 0x26dbc | fcn_00026dbc (r0);
0x000bef38 ldr r7, [sp, 0xcc] | r7 = var_cch;
0x000bef3a cmp r7, 0 |
| if (r7 != 0) {
0x000bef3c bne.w 0xbec88 | goto label_72;
| }
0x000bef40 cmp.w sb, 0 |
| if (sb <= 0) {
0x000bef44 ble.w 0xbec88 | goto label_72;
| }
0x000bef48 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000bef4a ldrb r3, [r3] | r3 = *(r3);
0x000bef4c add.w sb, r3, -1 | sb = r3 + -1;
0x000bef50 cmp.w sb, 0xe |
| if (sb > 0xe) {
0x000bef54 bhi.w 0xbf174 | goto label_178;
| }
0x000bef58 ldr r2, [sp, 0x90] | r2 = var_90h;
0x000bef5a adds r0, r3, 1 | r0 = r3 + 1;
0x000bef5c ldr r1, [sp, 0x54] | r1 = var_54h;
0x000bef5e str.w r2, [sl, 0x24] | __asm ("str.w r2, [sl, 0x24]");
0x000bef62 ldr r2, [sp, 0x84] | r2 = var_84h;
0x000bef64 str.w r1, [sl, 0x18] | __asm ("str.w r1, [sl, 0x18]");
0x000bef68 str.w r2, [sl, 0x10] | __asm ("str.w r2, [sl, 0x10]");
0x000bef6c ldr r2, [sp, 0x58] | r2 = var_58h;
0x000bef6e str.w r2, [sl, 0x1c] | __asm ("str.w r2, [sl, 0x1c]");
0x000bef72 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000bef74 str.w r2, [sl, 0x20] | __asm ("str.w r2, [sl, 0x20]");
0x000bef78 adds r2, 1 | r2++;
0x000bef7a subs r2, r2, r1 | r2 -= r1;
0x000bef7c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000bef7e str.w r1, [sl, 8] | __asm ("str.w r1, [sl, 8]");
0x000bef82 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000bef84 str.w r1, [sl, 0xc] | __asm ("str.w r1, [sl, 0xc]");
0x000bef88 add.w r1, r2, 0xf | r1 = r2 + 0xf;
0x000bef8c ands.w r1, r1, r2, asr 32 | r1 &= (r2 >> 32);
0x000bef90 it lo |
| if (r1 >= r1) {
0x000bef92 movlo r1, r2 | r1 = r2;
| }
0x000bef94 cmp r3, 0xf |
0x000bef96 asr.w r1, r1, 4 | r1 >>= 4;
0x000bef9a str.w r1, [sl] | __asm ("str.w r1, [sl]");
| if (r3 == 0xf) {
0x000bef9e beq 0xbefbc | goto label_179;
| }
| do {
0x000befa0 mul r2, r0, r1 | r2 = r0 * r1;
0x000befa4 ldr r7, [sp, 0x54] | r7 = var_54h;
0x000befa6 add.w r4, sl, r0, lsl 5 | r4 = sl + (r0 << 5);
0x000befaa adds r0, 1 | r0++;
0x000befac adds r7, r2, r7 | r7 = r2 + r7;
0x000befae str r7, [r4, 0x38] | *((r4 + 0x38)) = r7;
0x000befb0 ldr r7, [sp, 0x58] | r7 = var_58h;
0x000befb2 adc.w r2, r7, r2, asr 31 | __asm ("adc.w r2, r7, r2, asr 31");
0x000befb6 cmp r0, 0x10 |
0x000befb8 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x000befba bne 0xbefa0 |
| } while (r0 != 0x10);
| label_179:
0x000befbc mul r2, r1, r3 | r2 = r1 * r3;
0x000befc0 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000befc2 lsl.w r8, r3, 5 | r8 = r3 << 5;
0x000befc6 add.w r4, sl, r3, lsl 5 | r4 = sl + (r3 << 5);
0x000befca add r3, sp, 0xcc | r3 += var_cch;
0x000befcc adds r0, r2, r1 | r0 = r2 + r1;
0x000befce ldr r1, [sp, 0x58] | r1 = var_58h;
0x000befd0 str r3, [sp, 0x54] | var_54h = r3;
0x000befd2 adc.w r2, r1, r2, asr 31 | __asm ("adc.w r2, r1, r2, asr 31");
0x000befd6 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000befd8 ldr.w r1, [r1, 0xe8] | r1 = *((r1 + 0xe8));
0x000befdc strd r0, r2, [r4, 0x38] | __asm ("strd r0, r2, [r4, 0x38]");
0x000befe0 add.w r0, r8, 0x4c | r0 = r8 + 0x4c;
0x000befe4 add r0, sl | r0 += sl;
0x000befe6 mov r2, r3 | r2 = r3;
0x000befe8 cmp r1, fp |
0x000befea it lt |
| if (r1 >= fp) {
0x000befec movlt r1, fp | r1 = fp;
| }
0x000befee adds r1, 0x14 | r1 += 0x14;
0x000beff0 bl 0x6ccb4 | fcn_0006ccb4 (r0, r1, r2);
0x000beff4 ldr r7, [sp, 0xcc] | r7 = var_cch;
0x000beff6 cmp r7, 0 |
| if (r7 == 0) {
0x000beff8 beq 0xbf0b4 | goto label_180;
| }
| label_75:
0x000beffa add.w r4, sl, r8 | r4 = sl + r8;
0x000beffe mov r8, sb | r8 = sb;
| label_73:
0x000bf000 cmp r7, 0 |
| if (r7 != 0) {
0x000bf002 bne.w 0xbe144 | goto label_69;
| }
0x000bf006 ldr r1, [r4, 0x4c] | r1 = *((r4 + 0x4c));
| if (r1 != 0) {
0x000bf008 cbnz r1, 0xbf024 | goto label_181;
| }
0x000bf00a ldr r3, [sp, 0x118] | r3 = var_118h;
0x000bf00c mov fp, r8 |
| label_74:
0x000bf00e mov r0, r3 | r0 = r3;
0x000bf010 add.w r8, r8, -1 | r8 += -1;
0x000bf014 bl 0x26dbc | fcn_00026dbc (r0);
0x000bf018 cmp.w fp, -1 |
0x000bf01c sub.w r4, r4, 0x20 | r4 -= 0x20;
| if (fp != -1) {
0x000bf020 bne 0xbf000 | goto label_73;
| }
0x000bf022 b 0xbec88 | goto label_72;
| label_181:
0x000bf024 ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x000bf026 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000bf028 bl 0x73824 | fcn_00073824 (r0, r1, r2);
0x000bf02c ldr r3, [sp, 0x100] | r3 = var_100h;
0x000bf02e mov r7, r0 | r7 = r0;
0x000bf030 str r0, [sp, 0xcc] | var_cch = r0;
| if (r3 == 0) {
0x000bf032 cbz r3, 0xbf04a | goto label_182;
| }
0x000bf034 ldr r7, [sp, 0x4c] | r7 = var_4ch;
| do {
0x000bf036 cmp r0, 0 |
| if (r0 != 0) {
0x000bf038 bne 0xbf0a8 | goto label_183;
| }
0x000bf03a mov r0, r7 | r0 = r7;
0x000bf03c bl 0x73694 | fcn_00073694 (r0);
0x000bf040 ldr r3, [sp, 0x100] | r3 = var_100h;
0x000bf042 str r0, [sp, 0xcc] | var_cch = r0;
0x000bf044 cmp r3, 0 |
0x000bf046 bne 0xbf036 |
| } while (r3 != 0);
0x000bf048 mov r7, r0 | r7 = r0;
| label_182:
0x000bf04a ldr.w sb, [sp, 0x11c] | sb = var_11ch;
0x000bf04e ldr.w fp, [sp, 0x118] | fp = var_118h;
| if (r7 != 0) {
0x000bf052 cbnz r7, 0xbf0ae | goto label_184;
| }
0x000bf054 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000bf056 cmp sb, r3 |
| if (sb > r3) {
0x000bf058 bgt 0xbf0d4 | goto label_185;
| }
0x000bf05a ldr.w fp, [sp, 0x118] | fp = var_118h;
| do {
0x000bf05e cmp.w sb, 0 |
| if (sb > 0) {
0x000bf062 ble 0xbf06e |
0x000bf064 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000bf066 mov r2, sb | r2 = sb;
0x000bf068 mov r1, fp | r1 = fp;
0x000bf06a blx 0x65ac | EVP_CIPHER_CTX_free ();
| }
0x000bf06e cmp.w r8, -1 |
0x000bf072 str.w sb, [r4, 0x44] | __asm ("str.w sb, [r4, 0x44]");
| if (r8 != -1) {
0x000bf076 bne 0xbf11a | goto label_186;
| }
0x000bf078 mov r0, fp | r0 = fp;
0x000bf07a bl 0x26dbc | fcn_00026dbc (r0);
0x000bf07e ldr r7, [sp, 0xcc] | r7 = var_cch;
0x000bf080 b 0xbec88 | goto label_72;
| label_183:
0x000bf0a8 ldr.w fp, [sp, 0x118] | fp = var_118h;
0x000bf0ac mov r7, r0 | r7 = r0;
| label_184:
0x000bf0ae mov r3, fp | r3 = fp;
| label_77:
0x000bf0b0 mov fp, r8 |
0x000bf0b2 b 0xbf00e | goto label_74;
| label_180:
0x000bf0b4 ldr r1, [sp, 0x50] | r1 = var_50h;
0x000bf0b6 mov r2, fp | r2 = fp;
0x000bf0b8 ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x000bf0ba blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bf0be ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x000bf0c0 str.w fp, [r4, 0x50] | __asm ("str.w fp, [r4, 0x50]");
0x000bf0c4 str.w r7, [r3, fp] | __asm ("str.w r7, [r3, fp]");
0x000bf0c8 add r3, fp | r3 += fp;
0x000bf0ca str r7, [r3, 4] | *((r3 + 4)) = r7;
0x000bf0cc str r7, [r3, 8] | *((r3 + 8)) = r7;
0x000bf0ce str r7, [r3, 0xc] | *((r3 + 0xc)) = r7;
0x000bf0d0 str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x000bf0d2 b 0xbeffa | goto label_75;
| label_185:
0x000bf0d4 ldr r3, [pc, 0xe0] |
0x000bf0d6 ldr r7, [r4, 0x40] | r7 = *((r4 + 0x40));
0x000bf0d8 add r3, pc |
0x000bf0da ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000bf0de cmp r3, 0 |
| if (r3 != 0) {
0x000bf0e0 bne 0xbf18a | goto label_187;
| }
0x000bf0e2 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000bf0e6 cmp r0, 0 |
| if (r0 != 0) {
0x000bf0e8 bne 0xbf17e | goto label_188;
| }
0x000bf0ea bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000bf0ee cmp r0, 0 |
| if (r0 != 0) {
0x000bf0f0 bne 0xbf17e | goto label_188;
| }
| label_78:
0x000bf0f2 asr.w r3, sb, 0x1f | r3 = sb >> 0x1f;
0x000bf0f6 mov r0, r7 | r0 = r7;
0x000bf0f8 mov r2, sb | r2 = sb;
0x000bf0fa bl 0x28d94 | fcn_00028d94 (r0, r1, r2);
0x000bf0fe ldr r3, [sp, 0x118] | r3 = var_118h;
0x000bf100 mov fp, r3 |
0x000bf102 cmp r0, 0 |
| if (r0 == 0) {
0x000bf104 beq 0xbf182 | goto label_189;
| }
0x000bf106 ldr r7, [sp, 0xcc] | r7 = var_cch;
0x000bf108 str.w sb, [r4, 0x48] | __asm ("str.w sb, [r4, 0x48]");
0x000bf10c str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000bf10e ldr.w sb, [sp, 0x11c] | sb = var_11ch;
0x000bf112 cmp r7, 0 |
0x000bf114 beq 0xbf05e |
| } while (r7 == 0);
0x000bf116 mov fp, r8 |
0x000bf118 b 0xbf00e | goto label_74;
| label_186:
0x000bf11a ldrd r1, r2, [sp, 0x110] | __asm ("ldrd r1, r2, [var_110h]");
0x000bf11e movs r3, 0 | r3 = 0;
0x000bf120 strd r3, r3, [sp, 0xd4] | __asm ("strd r3, r3, [var_d8h]");
0x000bf124 ldr r7, [sp, 0x34] | r7 = var_34h;
0x000bf126 strd r1, r2, [r4, 0x18] | __asm ("strd r1, r2, [r4, 0x18]");
0x000bf12a str r3, [sp, 8] | var_8h = r3;
0x000bf12c mov r3, r2 | r3 = r2;
0x000bf12e mov r2, r1 | r2 = r1;
0x000bf130 ldr r1, [sp, 0x98] | r1 = var_98h;
0x000bf132 mov r0, r7 | r0 = r7;
0x000bf134 str r1, [sp, 4] | var_4h = r1;
0x000bf136 ldr r1, [sp, 0x94] | r1 = var_94h;
0x000bf138 str r1, [sp] | *(sp) = r1;
0x000bf13a bl 0xbabb0 | fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
0x000bf13e ldr.w r2, [r7, 0xe8] | r2 = *((r7 + 0xe8));
0x000bf142 ldr.w sb, [sp, 0xd8] | sb = var_d8h;
0x000bf146 str r0, [sp, 0xcc] | var_cch = r0;
0x000bf148 add.w r0, r4, 0x2c | r0 = r4 + 0x2c;
0x000bf14c cmp r2, sb |
0x000bf14e it lt |
| if (r2 >= sb) {
0x000bf150 movlt r2, sb | r2 = sb;
| }
0x000bf152 add.w r1, r2, 0x14 | r1 = r2 + 0x14;
0x000bf156 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000bf158 bl 0x6ccb4 | fcn_0006ccb4 (r0, r1, r2);
0x000bf15c ldr r7, [sp, 0xcc] | r7 = var_cch;
0x000bf15e cbz r7, 0xbf190 |
| while (1) {
0x000bf160 ldr r0, [sp, 0xd4] | r0 = var_d4h;
0x000bf162 add.w r8, r8, -1 | r8 += -1;
0x000bf166 bl 0x26dbc | fcn_00026dbc (r0);
0x000bf16a mov r0, fp | r0 = fp;
0x000bf16c subs r4, 0x20 | r4 -= 0x20;
0x000bf16e bl 0x26dbc | fcn_00026dbc (r0);
0x000bf172 b 0xbf000 | goto label_73;
| label_178:
0x000bf174 mov r0, r6 | r0 = r6;
0x000bf176 bl 0x79b80 | fcn_00079b80 (r0);
0x000bf17a b.w 0xbe6c4 | goto label_76;
| label_188:
0x000bf17e ldr.w fp, [sp, 0x118] | fp = var_118h;
| label_189:
0x000bf182 movs r7, 7 | r7 = 7;
0x000bf184 mov r3, fp | r3 = fp;
0x000bf186 str r7, [sp, 0xcc] | var_cch = r7;
0x000bf188 b 0xbf0b0 | goto label_77;
| label_187:
0x000bf18a dmb ish | __asm ("dmb ish");
0x000bf18e b 0xbf0f2 | goto label_78;
0x000bf190 ldr r1, [sp, 0xd4] | r1 = var_d4h;
0x000bf192 mov r2, sb | r2 = sb;
0x000bf194 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000bf196 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000bf19a ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000bf19c str.w sb, [r4, 0x30] | __asm ("str.w sb, [r4, 0x30]");
0x000bf1a0 str.w r7, [r3, sb] | __asm ("str.w r7, [r3, sb]");
0x000bf1a4 add r3, sb | r3 += sb;
0x000bf1a6 str r7, [r3, 4] | *((r3 + 4)) = r7;
0x000bf1a8 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x000bf1aa str r7, [r3, 0xc] | *((r3 + 0xc)) = r7;
0x000bf1ac str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x000bf1ae b 0xbf160 |
| }
| label_130:
0x000bf1b0 movs r3, 0 | r3 = 0;
0x000bf1b2 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000bf1b4 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc04d4 */
| #include <stdint.h>
|
; (fcn) fcn.000c04d4 () | void fcn_000c04d4 (int16_t arg_f8h, int16_t arg_108h, int16_t arg_2a8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h_3;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_3;
| int16_t var_20h_3;
| int16_t var_24h_3;
| int16_t var_28h_3;
| int16_t var_2ch_3;
| int16_t var_34h_3;
| int16_t var_38h_3;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_78h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000c04d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c04d8 sub sp, 0xd4 |
0x000c04da mov r4, r2 | r4 = r2;
0x000c04dc ldr r2, [sp, 0xf8] | r2 = *(arg_f8h);
0x000c04de mov r6, r1 | r6 = r1;
0x000c04e0 mov r7, r0 | r7 = r0;
0x000c04e2 ldr r5, [r6, 0x14] | r5 = *((r6 + 0x14));
0x000c04e4 movs r1, 0 | r1 = 0;
0x000c04e6 strd r3, r2, [sp, 0x28] | __asm ("strd r3, r2, [var_2ch_3]");
0x000c04ea ldr r2, [pc, 0x240] |
0x000c04ec ldr r3, [pc, 0x240] | r3 = *(0xc0730);
0x000c04ee add r2, pc | r2 = 0x180c20;
0x000c04f0 ldr r3, [r2, r3] |
0x000c04f2 movs r2, 0x80 | r2 = 0x80;
0x000c04f4 ldr r3, [r3] | r3 = imp.atan;
0x000c04f6 str r3, [sp, 0xcc] | var_cch = r3;
0x000c04f8 mov.w r3, 0 | r3 = 0;
0x000c04fc add r3, sp, 0x4c | r3 += var_4ch;
0x000c04fe mov r0, r3 | r0 = r3;
0x000c0500 str r3, [sp, 0x18] | var_18h = r3;
0x000c0502 str r5, [sp, 0x14] | var_14h = r5;
0x000c0504 blx 0x62ec | fcn_000062ec ();
0x000c0508 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000c050a mov r0, r7 | r0 = r7;
0x000c050c ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x000c050e str r4, [sp, 0x44] | var_44h = r4;
0x000c0510 cmp r3, 0 |
0x000c0512 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000c0514 ite eq |
| if (r3 != 0) {
0x000c0516 moveq r2, 3 | r2 = 3;
| }
| if (r3 == 0) {
0x000c0518 movne r2, 0xb | r2 = 0xb;
| }
0x000c051a cmp r3, r4 |
0x000c051c ite le |
| if (r3 > r4) {
0x000c051e movle r3, 0 | r3 = 0;
| }
| if (r3 <= r4) {
0x000c0520 movgt r3, 1 | r3 = 1;
| }
0x000c0522 lsls r3, r3, 2 | r3 <<= 2;
0x000c0524 subs r1, 0 |
0x000c0526 it ne |
| if (r1 == 0) {
0x000c0528 movne r1, 1 | r1 = 1;
| }
0x000c052a orr.w r3, r3, r1, lsl 5 | r3 |= (r1 << 5);
0x000c052e add r1, sp, 0x3c | r1 += var_3ch;
0x000c0530 orrs r3, r2 | r3 |= r2;
0x000c0532 ldr r2, [r6] | r2 = *(r6);
0x000c0534 str r3, [sp, 0x48] | var_48h = r3;
0x000c0536 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000c0538 str r1, [r5, 0xc] | *((r5 + 0xc)) = r1;
0x000c053a mov r1, r5 | r1 = r5;
0x000c053c str r2, [sp, 0x3c] | var_3ch = r2;
0x000c053e str r3, [sp, 0x40] | var_40h = r3;
0x000c0540 bl 0xbc250 | r0 = fcn_000bc250 (r0, r1, r2, r3);
0x000c0544 mov r5, r0 | r5 = r0;
0x000c0546 mov r4, r0 | r4 = r0;
0x000c0548 cmp r0, 0 |
| if (r0 != 0) {
0x000c054a bne.w 0xc06ac | goto label_5;
| }
0x000c054e ldr r3, [pc, 0x1e4] |
0x000c0550 str r6, [sp, 0x1c] | var_1ch_3 = r6;
0x000c0552 add r3, pc | r3 = 0x180c8c;
0x000c0554 str r3, [sp, 0x20] | var_20h_3 = r3;
0x000c0556 add r3, sp, 0x38 | r3 += var_38h_3;
0x000c0558 str r3, [sp, 0x10] | var_10h_3 = r3;
| label_3:
0x000c055a ldr r1, [sp, 0x14] | r1 = var_14h;
0x000c055c mov r0, r7 | r0 = r7;
0x000c055e bl 0xbb978 | r0 = fcn_000bb978 (r0, r1, r2, r3, r4);
0x000c0562 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000c0564 bne 0xc05ea | goto label_7;
| }
| label_0:
0x000c0566 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c0568 ldrd sl, r2, [r3, 0x38] | __asm ("ldrd sl, r2, [r3, 0x38]");
0x000c056c cmp r5, 0 |
| if (r5 == 0) {
0x000c056e beq.w 0xc06be | goto label_8;
| }
0x000c0572 ldr r5, [sp, 0x18] | r5 = var_18h;
0x000c0574 mov.w sb, 0 | sb = 0;
0x000c0578 mov fp, sl |
0x000c057a add r6, sp, 0x34 | r6 += var_34h_3;
0x000c057c mov r8, sb | r8 = sb;
0x000c057e ldr r4, [r5], 4 | r4 = *(r5);
| r5 += 4;
| if (r4 == 0) {
0x000c0582 cbz r4, 0xc05c8 | goto label_9;
| }
| do {
0x000c0584 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000c0586 mov r1, sl | r1 = sl;
0x000c0588 strd r6, r3, [sp, 4] | __asm ("strd r6, r3, [var_4h]");
0x000c058c ldr r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x000c058e str r3, [sp] | *(sp) = r3;
0x000c0590 mov r3, r4 | r3 = r4;
0x000c0592 ldrb.w r0, [r7, 0xef] | r0 = *((r7 + 0xef));
0x000c0596 bl 0x6cd04 | r0 = fcn_0006cd04 (r0, r1, r2, r3, r4, r5, r6);
0x000c059a cmp r0, 0 |
| if (r0 != 0) {
0x000c059c bne 0xc069c | goto label_10;
| }
0x000c059e cmp fp, sl |
| if (fp != sl) {
0x000c05a0 beq 0xc05a8 |
0x000c05a2 mov r0, sl | r0 = sl;
0x000c05a4 bl 0x26dbc | fcn_00026dbc (r0);
| }
0x000c05a8 mov r0, r4 | r0 = r4;
0x000c05aa bl 0x26dbc | fcn_00026dbc (r0);
0x000c05ae cmp.w sb, 0xf |
0x000c05b2 ldrd sl, r2, [sp, 0x34] | __asm ("ldrd sl, r2, [var_38h_3]");
0x000c05b6 str r8, [r5, -0x4] | *((r5 - 0x4)) = r8;
| if (sb == 0xf) {
0x000c05ba beq 0xc0692 | goto label_11;
| }
0x000c05bc ldr r4, [r5], 4 | r4 = *(r5);
| r5 += 4;
0x000c05c0 add.w sb, sb, 1 | sb++;
0x000c05c4 cmp r4, 0 |
0x000c05c6 bne 0xc0584 |
| } while (r4 != 0);
| label_9:
0x000c05c8 add r3, sp, 0xd0 | r3 += var_d0h;
0x000c05ca ldr r1, [sp, 0x14] | r1 = var_14h;
0x000c05cc add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
0x000c05d0 mov r0, r7 | r0 = r7;
0x000c05d2 str sl, [r3, -0x84] | var_4ch = sl;
0x000c05d6 add r3, sp, 0xd0 | r3 += var_d0h;
0x000c05d8 add.w ip, r3, sb, lsl 2 |
0x000c05dc ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000c05de str r2, [ip, -0x44] | var_8ch = r2;
0x000c05e2 bl 0xbb978 | r0 = fcn_000bb978 (r0, r1, r2, r3, r4);
0x000c05e6 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000c05e8 beq 0xc0566 | goto label_0;
| }
| label_7:
0x000c05ea ldr r6, [sp, 0x1c] | r6 = var_1ch_3;
0x000c05ec mov r4, r0 | r4 = r0;
0x000c05ee cmp r0, 0 |
| if (r0 != 0) {
0x000c05f0 bne 0xc06ac | goto label_5;
| }
0x000c05f2 add.w fp, sp, 0x38 |
0x000c05f6 add r3, sp, 0x34 | r3 += var_34h_3;
0x000c05f8 ldr r5, [sp, 0x18] | r5 = var_18h;
0x000c05fa add.w r8, sp, 0x8c | r8 += var_8ch;
0x000c05fe str r6, [sp, 0x10] | var_10h_3 = r6;
0x000c0600 mov r1, r0 | r1 = r0;
0x000c0602 mov r6, fp | r6 = fp;
0x000c0604 mov sl, r7 | sl = r7;
0x000c0606 mov fp, r3 |
0x000c0608 str r0, [sp, 0x18] | var_18h = r0;
0x000c060a b 0xc063a | goto label_2;
| label_1:
0x000c060c stm.w sp, {r1, r6, fp} | *(sp) = r1;
| *((sp + 4)) = r6;
| *((sp + 8)) = fp;
0x000c0610 mov r3, r4 | r3 = r4;
0x000c0612 ldrb.w r0, [sl, 0xef] | r0 = *((sl + 0xef));
0x000c0616 mov r1, r7 | r1 = r7;
0x000c0618 bl 0x6cd04 | r0 = fcn_0006cd04 (r0, r1, r2, r3, r4, r5, r6);
0x000c061c mov sb, r0 | sb = r0;
0x000c061e cmp r0, 0 |
| if (r0 != 0) {
0x000c0620 bne 0xc0718 | goto label_12;
| }
0x000c0622 mov r0, r7 | r0 = r7;
0x000c0624 bl 0x26dbc | fcn_00026dbc (r0);
0x000c0628 mov r0, r4 | r0 = r4;
0x000c062a bl 0x26dbc | fcn_00026dbc (r0);
0x000c062e ldrd r1, r4, [sp, 0x34] | __asm ("ldrd r1, r4, [var_38h_3]");
0x000c0632 str sb, [r5, -0x4] | *((r5 - 0x4)) = sb;
| do {
0x000c0636 cmp r5, r8 |
| if (r5 == r8) {
0x000c0638 beq 0xc0654 | goto label_13;
| }
| label_2:
0x000c063a ldr r7, [r5], 4 | r7 = *(r5);
| r5 += 4;
0x000c063e cmp r7, 0 |
0x000c0640 beq 0xc0636 |
| } while (r7 == 0);
0x000c0642 ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x000c0644 cmp r4, 0 |
| if (r4 != 0) {
0x000c0646 bne 0xc060c | goto label_1;
| }
0x000c0648 cmp r5, r8 |
0x000c064a str r4, [r5, -0x4] | *((r5 - 0x4)) = r4;
0x000c064e mov r1, r2 | r1 = r2;
0x000c0650 mov r4, r7 | r4 = r7;
| if (r5 != r8) {
0x000c0652 bne 0xc063a | goto label_2;
| }
| label_13:
0x000c0654 ldr r3, [sp, 0x2c] | r3 = var_2ch_3;
0x000c0656 mov sb, r4 | sb = r4;
0x000c0658 ldr r6, [sp, 0x10] | r6 = var_10h_3;
0x000c065a ldr r4, [sp, 0x18] | r4 = var_18h;
0x000c065c str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000c0660 ldr r3, [sp, 0x28] | r3 = var_28h_3;
0x000c0662 str r1, [r3] | *(r3) = r1;
| label_4:
0x000c0664 ldr r5, [sp, 0x14] | r5 = var_14h;
0x000c0666 mov r0, r5 | r0 = r5;
0x000c0668 bl 0x7a754 | fcn_0007a754 (r0);
0x000c066c mov r0, r5 | r0 = r5;
0x000c066e bl 0x26dbc | fcn_00026dbc (r0);
0x000c0672 movs r3, 0 | r3 = 0;
0x000c0674 ldr r2, [pc, 0xc0] |
0x000c0676 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000c0678 ldr r3, [pc, 0xb4] | r3 = *(0xc0730);
0x000c067a add r2, pc | r2 = 0x180db6;
0x000c067c ldr r3, [r2, r3] | r3 = imp.atan;
0x000c067e ldr r2, [r3] | r2 = imp.atan;
0x000c0680 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000c0682 eors r2, r3 | r2 ^= r3;
0x000c0684 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c0688 bne 0xc0728 | goto label_14;
| }
0x000c068a mov r0, r4 | r0 = r4;
0x000c068c add sp, 0xd4 |
0x000c068e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x000c0692 ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000c0694 str.w sl, [sp, 0x88] | __asm ("str.w sl, [var_88h]");
0x000c0698 str r2, [sp, 0xc8] | var_c8h = r2;
0x000c069a b 0xc055a | goto label_3;
| label_10:
0x000c069c mov r3, sl | r3 = sl;
0x000c069e ldr r6, [sp, 0x1c] | r6 = var_1ch_3;
0x000c06a0 cmp fp, r3 |
0x000c06a2 mov r4, r0 | r4 = r0;
| if (fp != r3) {
0x000c06a4 beq 0xc06ac |
0x000c06a6 mov r0, r3 | r0 = r3;
0x000c06a8 bl 0x26dbc | fcn_00026dbc (r0);
| }
| label_5:
0x000c06ac add r5, sp, 0x48 | r5 += var_48h;
0x000c06ae add r7, sp, 0x88 | r7 += var_88h;
| do {
0x000c06b0 ldr r0, [r5, 4]! | r0 = var_4ch;
0x000c06b4 bl 0x26dbc | fcn_00026dbc (r0);
0x000c06b8 cmp r5, r7 |
0x000c06ba bne 0xc06b0 |
| } while (r5 != r7);
0x000c06bc b 0xc0664 | goto label_4;
| label_8:
0x000c06be ldr r3, [sp, 0x20] | r3 = var_20h_3;
0x000c06c0 ldr.w r1, [r3, 0xd0] | r1 = *((r3 + 0xd0));
| if (r1 != 0) {
0x000c06c4 cbnz r1, 0xc0712 | goto label_15;
| }
0x000c06c6 str r2, [sp, 0x24] | var_24h_3 = r2;
0x000c06c8 bl 0x25da0 | fcn_00025da0 ();
0x000c06cc ldr r2, [sp, 0x24] | r2 = var_24h_3;
| if (r0 != 0) {
0x000c06ce cbnz r0, 0xc0708 | goto label_16;
| }
0x000c06d0 str r2, [sp, 0x24] | var_24h_3 = r2;
0x000c06d2 bl 0x5a4b8 | fcn_0005a4b8 ();
0x000c06d6 ldr r2, [sp, 0x24] | r2 = var_24h_3;
0x000c06d8 cbnz r0, 0xc0708 |
| while (1) {
0x000c06da asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x000c06dc adds.w r0, r2, 0xb | r0 = r2 + 0xb;
0x000c06e0 str r2, [sp, 0x24] | var_24h_3 = r2;
0x000c06e2 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000c06e6 bl 0x28c3c | fcn_00028c3c (r0);
0x000c06ea ldr r2, [sp, 0x24] | r2 = var_24h_3;
0x000c06ec mov r5, r0 | r5 = r0;
0x000c06ee str r0, [sp, 0x4c] | var_4ch = r0;
0x000c06f0 str r2, [sp, 0x8c] | var_8ch = r2;
| if (r0 == 0) {
0x000c06f2 cbz r0, 0xc0724 | goto label_17;
| }
0x000c06f4 mov r1, sl | r1 = sl;
0x000c06f6 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c06fa ldr r2, [sp, 0x24] | r2 = var_24h_3;
0x000c06fc movs r3, 0 | r3 = 0;
0x000c06fe str r3, [r5, r2] | *((r5 + r2)) = r3;
0x000c0700 add r2, r5 | r2 += r5;
0x000c0702 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x000c0704 strh r3, [r2, 8] | *((r2 + 8)) = r3;
0x000c0706 b 0xc055a | goto label_3;
| label_16:
0x000c0708 ldr r6, [sp, 0x1c] | r6 = var_1ch_3;
0x000c070a movs r3, 0 | r3 = 0;
0x000c070c str r3, [sp, 0x4c] | var_4ch = r3;
| label_6:
0x000c070e movs r4, 7 | r4 = 7;
0x000c0710 b 0xc06ac | goto label_5;
| label_15:
0x000c0712 dmb ish | __asm ("dmb ish");
0x000c0716 b 0xc06da |
| }
| label_12:
0x000c0718 mov r0, r4 | r0 = r4;
0x000c071a ldr r6, [sp, 0x10] | r6 = var_10h_3;
0x000c071c mov r4, sb | r4 = sb;
0x000c071e bl 0x26dbc | fcn_00026dbc (r0);
0x000c0722 b 0xc06ac | goto label_5;
| label_17:
0x000c0724 ldr r6, [sp, 0x1c] | r6 = var_1ch_3;
0x000c0726 b 0xc070e | goto label_6;
| label_14:
0x000c0728 blx 0x6430 | fcn_00006430 ();
0x000c072c ldr r0, [sp, 0x2a8] | r0 = *(arg_2a8h);
0x000c072e movs r2, r0 | r2 = r0;
0x000c0730 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c0732 movs r0, r0 |
0x000c0734 ldr r5, [sp, 0x108] | r5 = *(arg_108h);
0x000c0736 movs r2, r0 | r2 = r0;
0x000c0738 str r7, [sp, 0x78] | var_78h = r7;
0x000c073a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc073c */
| #include <stdint.h>
|
; (fcn) fcn.000c073c () | void fcn_000c073c (int16_t arg_320h, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_3ch_2;
| int16_t var_b8h;
| int16_t var_120h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000c073c svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000c0740 sub sp, 0x44 |
0x000c0742 str r0, [sp, 0x18] | var_18h_2 = r0;
0x000c0744 mov r6, r1 | r6 = r1;
0x000c0746 mov r4, r2 | r4 = r2;
0x000c0748 ldr r0, [r0] | r0 = *(r0);
0x000c074a ldr r1, [pc, 0x37c] |
0x000c074c str r2, [sp, 0xc] | var_ch = r2;
0x000c074e ldr r2, [pc, 0x37c] | r2 = *(0xc0ace);
0x000c0750 add r1, pc | r1 = 0x18121e;
0x000c0752 ldr r7, [r0, 0x28] | r7 = *(var_0h_2x28);
0x000c0754 str r0, [sp, 0x14] | var_14h_2 = r0;
0x000c0756 ldr r2, [r1, r2] |
0x000c0758 ldr r2, [r2] | r2 = imp.atan;
0x000c075a str r2, [sp, 0x3c] | var_3ch_2 = r2;
0x000c075c mov.w r2, 0 | r2 = 0;
0x000c0760 cbz r7, 0xc0784 |
| while (r3 <= 0) {
| label_0:
0x000c0762 mov.w fp, 0 |
| label_3:
0x000c0766 ldr r2, [pc, 0x368] |
0x000c0768 ldr r3, [pc, 0x360] | r3 = *(0xc0acc);
0x000c076a add r2, pc | r2 = 0x181240;
0x000c076c ldr r3, [r2, r3] | r3 = imp.atan;
0x000c076e ldr r2, [r3] | r2 = imp.atan;
0x000c0770 ldr r3, [sp, 0x3c] | r3 = var_3ch_2;
0x000c0772 eors r2, r3 | r2 ^= r3;
0x000c0774 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c0778 bne.w 0xc0ac4 | goto label_13;
| }
0x000c077c mov r0, fp | r0 = fp;
0x000c077e add sp, 0x44 |
0x000c0780 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000c0784 cmp r3, 0 |
0x000c0786 ble 0xc0762 |
| }
0x000c0788 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000c078c mov r2, r4 | r2 = r4;
0x000c078e mov r1, r7 | r1 = r7;
0x000c0790 add.w r4, r4, r3, lsl 3 | r4 += (r3 << 3);
0x000c0794 mov r3, r2 | r3 = r2;
| do {
0x000c0796 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000c0798 adds r3, 0x18 | r3 += 0x18;
0x000c079a cmp r6, r2 |
0x000c079c ittt eq |
| if (r6 != r2) {
0x000c079e ldreq r2, [r3, -0x8] | r2 = *((r3 - 0x8));
| }
| if (r6 != r2) {
0x000c07a2 addeq r7, 1 | r7++;
| }
| if (r6 == r2) {
0x000c07a4 adds r1, r1, r2 | r1 += r2;
| }
0x000c07a6 cmp r3, r4 |
0x000c07a8 bne 0xc0796 |
| } while (r3 != r4);
0x000c07aa cmp r1, 0 |
0x000c07ac it ne |
| if (r1 == 0) {
0x000c07ae cmpne r7, 1 | __asm ("cmpne r7, 1");
| goto label_14;
| }
| if (r1 <= 0) {
| label_14:
0x000c07b0 ble 0xc0762 | goto label_0;
| }
0x000c07b2 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000c07b4 ldr.w lr, [r3, 0x3c] |
0x000c07b8 cmp.w lr, 0 |
| if (lr == 0) {
0x000c07bc beq 0xc0848 | goto label_15;
| }
| label_5:
0x000c07be ldr r3, [pc, 0x314] |
0x000c07c0 mov.w sl, 0 | sl = 0;
0x000c07c4 mov sb, sl | sb = sl;
0x000c07c6 add r2, sp, 0x34 | r2 += var_34h_2;
0x000c07c8 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch_2]");
0x000c07cc add r3, pc | r3 = 0x1812a6;
0x000c07ce str r2, [sp, 0x20] | var_20h_2 = r2;
0x000c07d0 str r3, [sp, 0x28] | var_28h_2 = r3;
0x000c07d2 movs r3, 1 | r3 = 1;
0x000c07d4 mov r8, r3 | r8 = r3;
0x000c07d6 str.w lr, [sp, 0x24] | __asm ("str.w lr, [var_24h_2]");
0x000c07da str r7, [sp, 0x10] | var_10h_2 = r7;
| label_7:
0x000c07dc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000c07de movs r5, 0 | r5 = 0;
0x000c07e0 b 0xc07e8 |
| while (r2 == 0) {
| label_1:
0x000c07e2 adds r3, 0x18 | r3 += 0x18;
0x000c07e4 cmp r3, r4 |
| if (r3 == r4) {
0x000c07e6 beq 0xc080a | goto label_16;
| }
| label_2:
0x000c07e8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000c07ea cmp r2, 0 |
0x000c07ec beq 0xc07e2 |
| }
0x000c07ee ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000c07f0 cmp r2, r6 |
| if (r2 != r6) {
0x000c07f2 bne 0xc07e2 | goto label_1;
| }
0x000c07f4 cmp r5, 0 |
| if (r5 == 0) {
0x000c07f6 beq.w 0xc098e | goto label_17;
| }
0x000c07fa ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000c07fc ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x000c07fe cmp r1, r2 |
0x000c0800 it lt |
| if (r1 >= r2) {
0x000c0802 movlt r5, r3 | r5 = r3;
| }
0x000c0804 adds r3, 0x18 | r3 += 0x18;
0x000c0806 cmp r3, r4 |
| if (r3 != r4) {
0x000c0808 bne 0xc07e8 | goto label_2;
| }
| label_16:
0x000c080a ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000c080c add.w r7, sl, 1 | r7 = sl + 1;
0x000c0810 cmp r7, r3 |
0x000c0812 ite ge |
| if (r7 < r3) {
0x000c0814 movge r3, 0 | r3 = 0;
| }
| if (r7 >= r3) {
0x000c0816 movlt r3, 1 | r3 = 1;
| }
0x000c0818 str r3, [sp, 8] | var_8h = r3;
0x000c081a cmp.w sl, 0 |
| if (sl != 0) {
0x000c081e bne.w 0xc0992 | goto label_18;
| }
0x000c0822 lsl.w r8, r8, 2 | r8 <<= 2;
| label_6:
0x000c0826 add r3, sp, 0x38 | r3 += var_38h_2;
0x000c0828 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x000c082a ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000c082c ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x000c082e str r3, [sp] | *(sp) = r3;
0x000c0830 ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x000c0832 strd sb, sb, [sp, 0x34] | __asm ("strd sb, sb, [sp, 0x34]");
0x000c0836 bl 0xc04d4 | r0 = fcn_000c04d4 (r0, r1, r2, r3, r4, r5, r6);
0x000c083a mov fp, r0 |
0x000c083c cmp r0, 0 |
| if (r0 == 0) {
0x000c083e beq.w 0xc09dc | goto label_19;
| }
| label_8:
0x000c0842 str.w sb, [r5, 8] | __asm ("str.w sb, [r5, 8]");
0x000c0846 b 0xc0766 | goto label_3;
| label_15:
0x000c0848 ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x000c084a add r1, sp, 0x38 | r1 += var_38h_2;
0x000c084c bl 0xb5760 | r0 = fcn_000b5760 (r0, r1);
0x000c0850 mov fp, r0 |
0x000c0852 cmp r0, 0 |
| if (r0 != 0) {
0x000c0854 bne 0xc0766 | goto label_3;
| }
0x000c0856 ldr.w sl, [sp, 0x38] | sl = var_38h_2;
0x000c085a mov r1, r0 | r1 = r0;
0x000c085c mov r0, sl | r0 = sl;
0x000c085e bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000c0862 bl 0x3e27c | r0 = fcn_0003e27c (r0);
0x000c0866 mov r5, r0 | r5 = r0;
0x000c0868 cmp.w sl, 0 |
| if (sl != 0) {
0x000c086c beq 0xc0874 |
0x000c086e mov r0, sl | r0 = sl;
0x000c0870 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000c0874 cmp r5, 0 |
| if (r5 == 0) {
0x000c0876 beq.w 0xc0ab2 | goto label_20;
| }
0x000c087a movs r1, 0 | r1 = 0;
0x000c087c mov r0, sl | r0 = sl;
0x000c087e bl 0x3db60 | r0 = fcn_0003db60 (r0);
0x000c0882 add.w sb, r5, r0 | sb = r5 + r0;
0x000c0886 cmp sb, r5 |
0x000c0888 itt ls |
| if (sb > r5) {
0x000c088a movls lr, 0 | lr = 0;
| }
| if (sb <= r5) {
0x000c088e mov r8, lr | r8 = lr;
| }
| if (sb < r5) {
0x000c0890 bls 0xc08d6 | goto label_21;
| }
0x000c0892 movs r1, 0 | r1 = 0;
0x000c0894 mov r3, r1 | r3 = r1;
0x000c0896 mov ip, r1 |
| do {
0x000c0898 ldrb lr, [r5], 1 |
0x000c089c sub.w r0, r1, 0x20 | r0 = r1 - 0x20;
0x000c08a0 rsb.w r8, r1, 0x20 | r8 = 0x20 - r1;
0x000c08a4 and r2, lr, 0x7f | r2 = lr & 0x7f;
0x000c08a8 lsl.w r0, r2, r0 | r0 = r2 << r0;
0x000c08ac lsr.w r8, r2, r8 | r8 = r2 >> r8;
0x000c08b0 lsls r2, r1 | r2 <<= r1;
0x000c08b2 orr.w r0, r0, r8 | r0 |= r8;
0x000c08b6 adds r2, r2, r3 | r2 += r3;
0x000c08b8 adc.w ip, ip, r0 | __asm ("adc.w ip, ip, r0");
0x000c08bc tst.w lr, 0x80 |
0x000c08c0 mov r3, r2 | r3 = r2;
| if ((lr & 0x80) == 0) {
0x000c08c2 beq.w 0xc0abe | goto label_22;
| }
0x000c08c6 adds r1, 7 | r1 += 7;
0x000c08c8 cmp r1, 0x46 |
| if (r1 == 0x46) {
0x000c08ca beq.w 0xc0abe | goto label_22;
| }
0x000c08ce cmp sb, r5 |
0x000c08d0 bne 0xc0898 |
| } while (sb != r5);
0x000c08d2 mov lr, r3 | lr = r3;
0x000c08d4 mov r8, ip | r8 = ip;
| label_21:
0x000c08d6 adds r5, 1 | r5++;
| label_12:
0x000c08d8 cmp sb, r5 |
0x000c08da it hi |
| if (sb <= r5) {
0x000c08dc strhi sl, [sp, 8] | var_8h = sl;
| }
| if (sb < r5) {
0x000c08e0 bls.w 0xc0ab2 | goto label_20;
| }
| label_4:
0x000c08e4 cmp r5, sb |
0x000c08e6 itt hs |
| if (r5 < sb) {
0x000c08e8 movhs r3, 0 | r3 = 0;
| }
| if (r5 < sb) {
0x000c08ea movhs ip, r3 |
| }
| if (r5 >= sb) {
0x000c08ec bhs 0xc092a | goto label_23;
| }
0x000c08ee movs r1, 0 | r1 = 0;
0x000c08f0 mov r3, r1 | r3 = r1;
0x000c08f2 mov ip, r1 |
| do {
0x000c08f4 ldrb fp, [r5], 1 | fp = *(r5);
| r5++;
0x000c08f8 sub.w sl, r1, 0x20 | sl = r1 - 0x20;
0x000c08fc rsb.w r0, r1, 0x20 | r0 = 0x20 - r1;
0x000c0900 and r2, fp, 0x7f | r2 = fp & 0x7f;
0x000c0904 lsl.w sl, r2, sl | sl = r2 << sl;
0x000c0908 lsr.w r0, r2, r0 | r0 = r2 >> r0;
0x000c090c lsls r2, r1 | r2 <<= r1;
0x000c090e orr.w r0, sl, r0 | r0 = sl | r0;
0x000c0912 adds r2, r2, r3 | r2 += r3;
0x000c0914 adc.w ip, ip, r0 | __asm ("adc.w ip, ip, r0");
0x000c0918 tst.w fp, 0x80 |
0x000c091c mov r3, r2 | r3 = r2;
| if ((fp & 0x80) == 0) {
0x000c091e beq 0xc092c | goto label_24;
| }
0x000c0920 adds r1, 7 | r1 += 7;
0x000c0922 cmp r1, 0x46 |
| if (r1 == 0x46) {
0x000c0924 beq 0xc092c | goto label_24;
| }
0x000c0926 cmp sb, r5 |
0x000c0928 bne 0xc08f4 |
| } while (sb != r5);
| label_23:
0x000c092a adds r5, 1 | r5++;
| label_24:
0x000c092c cmp sb, r5 |
| if (sb > r5) {
0x000c092e bhi 0xc08e4 | goto label_4;
| }
0x000c0930 orrs.w r2, lr, r8 | r2 = lr | r8;
0x000c0934 ldr.w sl, [sp, 8] | sl = var_8h;
0x000c0938 ite eq |
| if (r2 != lr) {
0x000c093a moveq r2, 1 | r2 = 1;
| }
| if (r2 == lr) {
0x000c093c movne r2, 0 | r2 = 0;
| }
0x000c093e orrs.w r1, r3, ip | r1 = r3 | ip;
0x000c0942 it eq |
| if (r1 != r3) {
0x000c0944 orreq r2, r2, 1 | r2 |= 1;
| }
0x000c0948 cmp r2, 0 |
| if (r2 != 0) {
0x000c094a bne.w 0xc0ab2 | goto label_20;
| }
0x000c094e ldr r5, [sp, 0x18] | r5 = var_18h_2;
0x000c0950 mov r2, lr | r2 = lr;
0x000c0952 mov r1, ip | r1 = ip;
0x000c0954 mov r0, r3 | r0 = r3;
0x000c0956 mov r3, r8 | r3 = r8;
0x000c0958 str.w lr, [r5, 0x40] | __asm ("str.w lr, [r5, 0x40]");
0x000c095c str.w r8, [r5, 0x44] | __asm ("str.w r8, [r5, 0x44]");
0x000c0960 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x000c0964 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000c0966 ldr.w r2, [r3, 0xf4] | r2 = *((r3 + 0xf4));
0x000c096a adds r0, r0, r2 | r0 += r2;
0x000c096c asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000c0970 adc.w r1, r3, r1 | __asm ("adc.w r1, r3, r1");
0x000c0974 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x000c0978 str r0, [r5, 0x3c] | *((r5 + 0x3c)) = r0;
0x000c097a mov r0, sl | r0 = sl;
0x000c097c bl 0x79b80 | fcn_00079b80 (r0);
0x000c0980 ldr.w lr, [r5, 0x3c] |
0x000c0984 mov fp, r0 |
0x000c0986 cmp r0, 0 |
| if (r0 == 0) {
0x000c0988 beq.w 0xc07be | goto label_5;
| }
0x000c098c b 0xc0766 | goto label_3;
| label_17:
0x000c098e mov r5, r3 | r5 = r3;
0x000c0990 b 0xc07e2 | goto label_1;
| label_18:
0x000c0992 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x000c0994 asr.w r1, r8, 2 | r1 = r8 >> 2;
0x000c0998 adds r0, r1, r3 | r0 = r1 + r3;
0x000c099a subs r0, 1 | r0--;
0x000c099c bl 0xc4780 | fcn_000c4780 (r0, r1);
0x000c09a0 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x000c09a2 mul r0, r3, r0 | r0 = r3 * r0;
0x000c09a6 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000c09a8 cmp r3, r0 |
| if (r3 >= r0) {
0x000c09aa bge 0xc0a42 | goto label_25;
| }
0x000c09ac ldr r3, [r5] | r3 = *(r5);
0x000c09ae cmp.w sl, 0xb |
0x000c09b2 it ls |
| if (sl > 0xb) {
0x000c09b4 lslls r8, r8, 2 | r8 <<= 2;
| }
0x000c09b8 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000c09ba cmp r3, 1 |
| if (r3 <= 1) {
0x000c09bc ble 0xc09c8 | goto label_26;
| }
0x000c09be ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000c09c0 subs r3, 1 | r3--;
0x000c09c2 cmp r3, sl |
| if (r3 != sl) {
0x000c09c4 bne.w 0xc0826 | goto label_6;
| }
| label_26:
0x000c09c8 mov.w fp, 0 |
| label_10:
0x000c09cc ldr r3, [sp, 8] | r3 = var_8h;
0x000c09ce str.w sb, [r5, 8] | __asm ("str.w sb, [r5, 8]");
0x000c09d2 cmp r3, 0 |
| if (r3 == 0) {
0x000c09d4 beq.w 0xc0766 | goto label_3;
| }
0x000c09d8 mov sl, r7 | sl = r7;
0x000c09da b 0xc07dc | goto label_7;
| label_19:
0x000c09dc ldr r3, [sp, 0x34] | r3 = var_34h_2;
0x000c09de ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000c09e2 ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x000c09e4 str r3, [sp] | *(sp) = r3;
0x000c09e6 ldr r3, [sp, 0x38] | r3 = var_38h_2;
0x000c09e8 bl 0x70bc0 | r0 = fcn_00070bc0 (r0, r1, r2, r3, r4, r5, r6);
0x000c09ec mov fp, r0 |
0x000c09ee cmp r0, 0 |
| if (r0 != 0) {
0x000c09f0 bne.w 0xc0842 | goto label_8;
| }
0x000c09f4 ldr r2, [r5] | r2 = *(r5);
0x000c09f6 ldr r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x000c09f8 cbz r3, 0xc0a24 | goto label_27;
| }
0x000c09fa ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000c09fc add.w ip, r3, r2 |
0x000c0a00 cmp r3, ip |
| if (r3 >= ip) {
0x000c0a02 bhs 0xc0a24 | goto label_27;
| }
| label_9:
0x000c0a04 adds r0, 1 | r0++;
| do {
0x000c0a06 ldrsb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x000c0a0a cmp r2, 0 |
0x000c0a0c blt 0xc0a06 |
| } while (r2 < 0);
0x000c0a0e ldrb r2, [r3] | r2 = *(r3);
| if (r2 == 0) {
0x000c0a10 cbz r2, 0xc0a1e | goto label_28;
| }
| do {
0x000c0a12 and r1, r2, 0x80 | r1 = r2 & 0x80;
0x000c0a16 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000c0a1a orrs r1, r2 | r1 |= r2;
0x000c0a1c bne 0xc0a12 |
| } while (r1 != r2);
| label_28:
0x000c0a1e adds r3, 1 | r3++;
0x000c0a20 cmp ip, r3 |
| if (ip > r3) {
0x000c0a22 bhi 0xc0a04 | goto label_9;
| }
| label_27:
0x000c0a24 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x000c0a26 cmp r0, r2 |
0x000c0a28 ite ge |
| if (r0 < r2) {
0x000c0a2a movge r3, 0 | r3 = 0;
| }
| if (r0 >= r2) {
0x000c0a2c movlt r3, 1 | r3 = 1;
| }
0x000c0a2e cmp.w sl, 0 |
0x000c0a32 it eq |
| if (sl != 0) {
0x000c0a34 orreq r3, r3, 1 | r3 |= 1;
| }
0x000c0a38 cmp r3, 0 |
0x000c0a3a it ne |
| if (r3 == 0) {
0x000c0a3c movne r2, r0 | r2 = r0;
| }
0x000c0a3e str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x000c0a40 b 0xc09cc | goto label_10;
| label_25:
0x000c0a42 ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x000c0a44 ldr.w sl, [r5, 8] | sl = *((r5 + 8));
0x000c0a48 ldr.w fp, [r5, 0x14] | fp = *((r5 + 0x14));
0x000c0a4c ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
| if (r3 != 0) {
0x000c0a50 cbnz r3, 0xc0aa2 | goto label_29;
| }
0x000c0a52 bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x000c0a56 cbnz r0, 0xc0aa8 | goto label_30;
| }
0x000c0a58 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000c0a5c cbnz r0, 0xc0aa8 | goto label_30;
| }
| do {
0x000c0a5e movs r0, 0x10 | r0 = 0x10;
0x000c0a60 movs r1, 0 | r1 = 0;
0x000c0a62 bl 0x28c3c | r0 = fcn_00028c3c (r0);
| if (r0 == 0) {
0x000c0a66 cbz r0, 0xc0aa8 | goto label_30;
| }
0x000c0a68 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x000c0a6a str.w sb, [r0, 4] | __asm ("str.w sb, [r0, 4]");
0x000c0a6e str.w sb, [r0, 8] | __asm ("str.w sb, [r0, 8]");
0x000c0a72 str.w sb, [r0, 0xc] | __asm ("str.w sb, [r0, 0xc]");
0x000c0a76 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000c0a78 str.w sl, [r0] | __asm ("str.w sl, [r0]");
0x000c0a7c strd fp, r3, [r0, 4] | __asm ("strd fp, r3, [r0, 4]");
0x000c0a80 mov.w fp, 0 |
0x000c0a84 str r0, [r2, 0x1c] | *((r2 + 0x1c)) = r0;
0x000c0a86 str.w r0, [sl, 0x10] | __asm ("str.w r0, [sl, 0x10]");
| label_11:
0x000c0a8a ldr.w r0, [sl, 0x14] | r0 = *((sl + 0x14));
| if (r0 != 0) {
0x000c0a8e cbz r0, 0xc0a98 |
0x000c0a90 str r0, [sp, 0x2c] | var_2ch_2 = r0;
0x000c0a92 bl 0x7a754 | fcn_0007a754 (r0);
0x000c0a96 ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
| }
0x000c0a98 bl 0x26dbc | fcn_00026dbc (r0);
0x000c0a9c str.w sb, [sl, 0x14] | __asm ("str.w sb, [sl, 0x14]");
0x000c0aa0 b 0xc09cc | goto label_10;
| label_29:
0x000c0aa2 dmb ish | __asm ("dmb ish");
0x000c0aa6 b 0xc0a5e |
| } while (1);
| label_30:
0x000c0aa8 movs r3, 0 | r3 = 0;
0x000c0aaa mov.w fp, 7 |
0x000c0aae str r3, [sp, 8] | var_8h = r3;
0x000c0ab0 b 0xc0a8a | goto label_11;
| label_20:
0x000c0ab2 mov r0, sl | r0 = sl;
0x000c0ab4 movw fp, 0x10b | fp = 0x10b;
0x000c0ab8 bl 0x79b80 | fcn_00079b80 (r0);
0x000c0abc b 0xc0766 | goto label_3;
| label_22:
0x000c0abe mov lr, r3 | lr = r3;
0x000c0ac0 mov r8, ip | r8 = ip;
0x000c0ac2 b 0xc08d8 | goto label_12;
| label_13:
0x000c0ac4 blx 0x6430 | fcn_00006430 ();
0x000c0ac8 str r6, [sp, 0x120] | var_120h = r6;
0x000c0aca movs r2, r0 | r2 = r0;
0x000c0acc lsls r4, r6, 8 | r4 = r6 << 8;
0x000c0ace movs r0, r0 |
0x000c0ad0 str r6, [sp, 0xb8] | var_b8h = r6;
0x000c0ad2 movs r2, r0 | r2 = r0;
0x000c0ad4 ldr r2, [sp, 0x320] | r2 = *(arg_320h);
0x000c0ad6 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc0da0 */
| #include <stdint.h>
|
; (fcn) fcn.000c0da0 () | void fcn_000c0da0 (int16_t arg_0h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch_2;
| int16_t var_47h;
| int16_t var_48h_2;
| int16_t var_4ch_2;
| arithmetic x;
| int16_t var_54h_2;
| int16_t var_58h_2;
| int16_t var_5ch_2;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000c0da0 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000c0da4 mov fp, r1 |
0x000c0da6 ldr r4, [r1, 0x14] | r4 = *((r1 + 0x14));
0x000c0da8 mov r7, r2 | r7 = r2;
0x000c0daa sub sp, 0x6c |
0x000c0dac mov sl, r0 | sl = r0;
0x000c0dae ldr.w r1, [pc, 0x488] |
0x000c0db2 ldr.w r2, [pc, 0x488] | r2 = *(0xc123e);
0x000c0db6 str r4, [sp, 0x34] | var_34h = r4;
0x000c0db8 add r1, pc | r1 = 0x181ff6;
0x000c0dba str r3, [sp, 0x38] | var_38h = r3;
0x000c0dbc ldr r2, [r1, r2] |
0x000c0dbe ldr r1, [r0] | r1 = *(r0);
0x000c0dc0 movs r0, 0 | r0 = 0;
0x000c0dc2 ldr r2, [r2] | r2 = imp.atan;
0x000c0dc4 str r2, [sp, 0x64] | var_64h = r2;
0x000c0dc6 mov.w r2, 0 | r2 = 0;
0x000c0dca ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x000c0dcc str r0, [r3] | *(r3) = r0;
0x000c0dce ldr r0, [r1, 0x18] | r0 = imp.atan;
0x000c0dd0 cmp r2, r7 |
0x000c0dd2 it ne |
| if (r2 != r7) {
0x000c0dd4 cmpne r2, r0 | __asm ("cmpne r2, r0");
| }
| if (r2 < r7) {
0x000c0dd6 blt.w 0xc0fa6 | goto label_6;
| }
0x000c0dda ldr.w r5, [fp, 0x18] | r5 = *(arg_18h);
0x000c0dde ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x000c0de2 ldrd r0, r2, [sl, 0x20] | __asm ("ldrd r0, r2, [sl, 0x20]");
0x000c0de6 ldr r4, [r4, 0x1c] | r4 = *((r4 + 0x1c));
0x000c0de8 str r5, [sp, 0x50] | x = r5;
0x000c0dea cmp r3, r2 |
0x000c0dec it eq |
| if (r3 == r2) {
0x000c0dee cmpeq r5, r0 | __asm ("cmpeq r5, r0");
| }
0x000c0df0 str r3, [sp, 0x54] | var_54h_2 = r3;
0x000c0df2 str r4, [sp, 0x48] | var_48h_2 = r4;
| if (r3 == r2) {
0x000c0df4 beq.w 0xc0f42 | goto label_28;
| }
| label_0:
0x000c0df8 ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x000c0dfc movs r4, 0 | r4 = 0;
0x000c0dfe ldrb.w sb, [r1, 0xef] | sb = *((r1 + 0xef));
0x000c0e02 str r4, [sp, 0x4c] | var_4ch_2 = r4;
0x000c0e04 cmp r2, 0 |
| if (r2 == 0) {
0x000c0e06 beq.w 0xc0f22 | goto label_16;
| }
0x000c0e0a mov r0, r4 | r0 = r4;
| do {
0x000c0e0c ldr r1, [r2] | r1 = *(r2);
0x000c0e0e cmp r1, 4 |
0x000c0e10 it eq |
| if (r1 != 4) {
0x000c0e12 moveq r0, 1 | r0 = 1;
| }
| if (r1 != 4) {
0x000c0e14 beq 0xc0e1c |
0x000c0e16 cmp r1, 1 |
0x000c0e18 it eq |
| if (r1 == 1) {
0x000c0e1a moveq fp, r2 | goto label_29;
| }
| }
| label_29:
0x000c0e1c ldrb.w r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x000c0e20 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000c0e22 cmp r1, 0 |
0x000c0e24 it ne |
| if (r1 == 0) {
0x000c0e26 movne r4, 1 | r4 = 1;
| }
0x000c0e28 cmp r2, 0 |
0x000c0e2a bne 0xc0e0c |
| } while (r2 != 0);
0x000c0e2c str r0, [sp, 0x24] | var_24h = r0;
0x000c0e2e cmp r0, 0 |
| if (r0 == 0) {
0x000c0e30 beq 0xc0f24 | goto label_2;
| }
0x000c0e32 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000c0e34 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x000c0e36 cmp r2, 0 |
| if (r2 != 0) {
0x000c0e38 bne.w 0xc1144 | goto label_30;
| }
0x000c0e3c cmp r4, 0 |
| if (r4 != 0) {
0x000c0e3e bne.w 0xc111c | goto label_31;
| }
| label_25:
0x000c0e42 mov.w r1, -1 | r1 = -1;
0x000c0e46 mov r2, r1 | r2 = r1;
0x000c0e48 cmp.w sb, 0 |
| if (sb == 0) {
0x000c0e4c beq.w 0xc113e | goto label_22;
| }
| label_18:
0x000c0e50 ldrb.w r3, [sl, 0x34] | r3 = *((sl + 0x34));
0x000c0e54 cmp.w sb, 0 |
0x000c0e58 str r7, [sp, 0x3c] | var_3ch_2 = r7;
0x000c0e5a mov r7, sb | r7 = sb;
0x000c0e5c mov sb, sl | sb = sl;
0x000c0e5e strd r1, r2, [sp, 0x2c] | __asm ("strd r1, r2, [var_2ch_2]");
0x000c0e62 str r3, [sp, 0x28] | var_28h_2 = r3;
0x000c0e64 ite ne |
| if (sb == 0) {
0x000c0e66 movne r3, -1 | r3 = -1;
| }
| if (sb == 0) {
0x000c0e6a movs r3, 1 | r3 = 1;
| }
0x000c0e6c str r3, [sp, 0x1c] | var_1ch_2 = r3;
| label_5:
0x000c0e6e ldr.w r3, [fp] | r3 = *(fp);
0x000c0e72 cmp r3, 1 |
0x000c0e74 ite eq |
| if (r3 != 1) {
0x000c0e76 ldreq r3, [fp, 0x10] | r3 = *(arg_10h);
| }
| if (r3 != 1) {
0x000c0e7a mov r3, fp | r3 = fp;
| }
0x000c0e7c ldr.w sl, [r3, 0x14] | sl = *((r3 + 0x14));
0x000c0e80 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000c0e84 ldr.w r4, [sl, 0x30] | r4 = *((sl + 0x30));
0x000c0e88 str r3, [sp, 0x10] | var_10h = r3;
0x000c0e8a ldrd r2, r3, [sl, 0x38] | __asm ("ldrd r2, r3, [sl, 0x38]");
0x000c0e8e str r4, [sp, 0x48] | var_48h_2 = r4;
0x000c0e90 strd r2, r3, [sp, 0x50] | __asm ("strd r2, r3, [x]");
0x000c0e94 ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x000c0e96 cmp r7, r3 |
| if (r7 == r3) {
0x000c0e98 beq.w 0xc1006 | goto label_32;
| }
0x000c0e9c ldr r3, [sp, 0x10] | r3 = var_10h;
0x000c0e9e movs r5, 1 | r5 = 1;
| if (r3 != 0) {
0x000c0ea0 cbz r3, 0xc0eb2 |
0x000c0ea2 mov r5, r4 | r5 = r4;
| if (r4 == 0) {
0x000c0ea4 cbz r4, 0xc0eb2 | goto label_33;
| }
0x000c0ea6 ldr.w r5, [sl] | r5 = *(sl);
0x000c0eaa cmp r4, r5 |
0x000c0eac ite hi |
| if (r4 <= r5) {
0x000c0eae movhi r5, 0 | r5 = 0;
| }
| if (r4 <= r5) {
0x000c0eb0 movls r5, 1 | r5 = 1;
| goto label_33;
| }
| }
| label_33:
0x000c0eb2 add.w r8, sp, 0x47 | r8 += var_47h;
0x000c0eb6 add r6, sp, 0x58 | r6 += var_58h_2;
0x000c0eb8 str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h_2]");
0x000c0ebc mov r8, r7 | r8 = r7;
0x000c0ebe mov r7, r6 | r7 = r6;
0x000c0ec0 add r3, sp, 0x48 | r3 += var_48h_2;
0x000c0ec2 strb.w r5, [sp, 0x47] | var_47h = r5;
0x000c0ec6 str r3, [sp, 0x14] | var_14h_2 = r3;
0x000c0ec8 str.w fp, [sp, 0x20] | __asm ("str.w fp, [var_20h_2]");
| if (r4 != 0) {
| do {
0x000c0ecc cbz r4, 0xc0efa |
0x000c0ece ldrd r3, r2, [sb, 0x20] | __asm ("ldrd r3, r2, [sb, 0x20]");
0x000c0ed2 ldrd r1, r0, [sp, 0x50] | __asm ("ldrd r1, r0, [x]");
0x000c0ed6 mov ip, r3 |
0x000c0ed8 mov lr, r2 | lr = r2;
0x000c0eda cmp.w r8, 0 |
| if (r8 == 0) {
0x000c0ede beq 0xc0fac | goto label_34;
| }
0x000c0ee0 cmp r3, r1 |
0x000c0ee2 sbcs.w fp, r2, r0 | __asm ("sbcs.w fp, r2, r0");
| if (r3 < r1) {
0x000c0ee6 blt.w 0xc11ba | goto label_35;
| }
| label_3:
0x000c0eea cmp r0, r2 |
0x000c0eec it eq |
| if (r0 == r2) {
0x000c0eee cmpeq r1, r3 | __asm ("cmpeq r1, r3");
| }
| if (r0 == r2) {
0x000c0ef0 beq 0xc0fcc | goto label_36;
| }
0x000c0ef2 ldr r6, [sp, 0x1c] | r6 = var_1ch_2;
0x000c0ef4 adds r6, 1 | r6++;
| if (r6 != 1) {
0x000c0ef6 bne.w 0xc11ba | goto label_35;
| }
| }
0x000c0efa cmp r5, 0 |
| if (r5 != 0) {
0x000c0efc bne 0xc0fb8 | goto label_37;
| }
| label_4:
0x000c0efe ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000c0f00 mov r0, r8 | r0 = r8;
0x000c0f02 ldr.w r1, [sl] | r1 = *(sl);
0x000c0f06 strd r7, r3, [sp, 4] | __asm ("strd r7, r3, [var_4h]");
0x000c0f0a add r3, sp, 0x50 | r3 += x;
0x000c0f0c str r3, [sp] | *(sp) = r3;
0x000c0f0e ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x000c0f12 bl 0x2c890 | fcn_0002c890 (r0, r1, r2, r3, r4, r5, r6);
0x000c0f16 ldr r4, [sp, 0x48] | r4 = var_48h_2;
0x000c0f18 ldrb.w r5, [sp, 0x47] | r5 = var_47h;
0x000c0f1c b 0xc0ecc |
| } while (1);
| label_20:
0x000c0f1e movw r2, 0x10b | r2 = 0x10b;
| label_16:
0x000c0f22 str r2, [sp, 0x24] | var_24h = r2;
| label_2:
0x000c0f24 ldr r2, [pc, 0x318] |
0x000c0f26 ldr r3, [pc, 0x314] | r3 = *(0xc123e);
0x000c0f28 add r2, pc | r2 = 0x18216c;
0x000c0f2a ldr r3, [r2, r3] | r3 = imp.atan;
0x000c0f2c ldr r2, [r3] | r2 = imp.atan;
0x000c0f2e ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c0f30 eors r2, r3 | r2 ^= r3;
0x000c0f32 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c0f36 bne.w 0xc1232 | goto label_38;
| }
0x000c0f3a ldr r0, [sp, 0x24] | r0 = var_24h;
0x000c0f3c add sp, 0x6c |
0x000c0f3e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x000c0f42 ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000c0f46 cmp r2, 0 |
| if (r2 != 0) {
0x000c0f48 bne.w 0xc0df8 | goto label_0;
| }
| if (r4 == 0) {
| label_7:
0x000c0f4c cbz r4, 0xc0fa6 | goto label_6;
| }
0x000c0f4e ldrb r0, [r4] | r0 = *(r4);
0x000c0f50 cmp r0, 1 |
0x000c0f52 itt ne |
| if (r0 == 1) {
0x000c0f54 movne r2, 0 | r2 = 0;
| }
| if (r0 == 1) {
0x000c0f56 strne r2, [sp, 0x58] | var_58h_2 = r2;
| }
| if (r0 == 1) {
0x000c0f58 beq.w 0xc11ee | goto label_39;
| }
| label_23:
0x000c0f5c cmp r7, r2 |
| if (r7 <= r2) {
0x000c0f5e ble 0xc0f96 | goto label_40;
| }
0x000c0f60 add r1, sp, 0x58 | r1 += var_58h_2;
| label_1:
0x000c0f62 cmp r0, 1 |
| if (r0 < 1) {
0x000c0f64 bls 0xc0f74 | goto label_41;
| }
| do {
0x000c0f66 and r3, r0, 0x80 | r3 = r0 & 0x80;
0x000c0f6a ldrb r0, [r4, 1]! | r0 = *((r4 += 1));
0x000c0f6e orrs r3, r0 | r3 |= r0;
0x000c0f70 cmp r3, 1 |
0x000c0f72 bhi 0xc0f66 |
| } while (r3 > 1);
| if (r0 == 0) {
| label_41:
0x000c0f74 cbz r0, 0xc0fa6 | goto label_6;
| }
0x000c0f76 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000c0f78 adds r5, r4, 1 | r5 = r4 + 1;
0x000c0f7a str r5, [sp, 0x48] | var_48h_2 = r5;
0x000c0f7c lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000c0f7e itt pl |
| if (r2 < r3) {
0x000c0f80 movpl r0, 1 | r0 = 1;
| }
| if (r2 < r3) {
0x000c0f82 strpl r3, [sp, 0x58] | var_58h_2 = r3;
| }
| if (r2 < r3) {
0x000c0f84 bmi.w 0xc110e | goto label_42;
| }
| label_14:
0x000c0f88 cmp r7, r3 |
0x000c0f8a add.w r4, r5, r0 | r4 = r5 + r0;
0x000c0f8e str r4, [sp, 0x48] | var_48h_2 = r4;
0x000c0f90 ldrb r0, [r5, r0] | r0 = *((r5 + r0));
| if (r7 > r3) {
0x000c0f92 bgt 0xc0f62 | goto label_1;
| }
0x000c0f94 mov r2, r3 | r2 = r3;
| if (r0 == 0) {
| label_40:
0x000c0f96 cbnz r0, 0xc0f9a |
0x000c0f98 str r0, [sp, 0x48] | var_48h_2 = r0;
| }
0x000c0f9a cmp r7, r2 |
0x000c0f9c ldr r3, [sp, 0x38] | r3 = var_38h;
0x000c0f9e ite eq |
| if (r7 != r2) {
0x000c0fa0 ldreq r2, [sp, 0x48] | r2 = var_48h_2;
| }
| if (r7 == r2) {
0x000c0fa2 movne r2, 0 | r2 = 0;
| }
0x000c0fa4 str r2, [r3] | *(r3) = r2;
| label_6:
0x000c0fa6 movs r3, 0 | r3 = 0;
0x000c0fa8 str r3, [sp, 0x24] | var_24h = r3;
0x000c0faa b 0xc0f24 | goto label_2;
| label_34:
0x000c0fac cmp r3, r1 |
0x000c0fae sbcs.w fp, r2, r0 | __asm ("sbcs.w fp, r2, r0");
| if (r3 >= r1) {
0x000c0fb2 bge 0xc0eea | goto label_3;
| }
0x000c0fb4 cmp r5, 0 |
| if (r5 == 0) {
0x000c0fb6 beq 0xc0efe | goto label_4;
| }
| label_37:
0x000c0fb8 ldr.w fp, [sp, 0x20] | fp = var_20h_2;
0x000c0fbc mov r7, r8 | r7 = r8;
| label_8:
0x000c0fbe ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [x]");
0x000c0fc2 str.w r4, [sl, 0x30] | __asm ("str.w r4, [sl, 0x30]");
0x000c0fc6 strd r2, r3, [sl, 0x38] | __asm ("strd r2, r3, [sl, 0x38]");
0x000c0fca b 0xc0fe6 | goto label_21;
| label_36:
0x000c0fcc ldr.w fp, [sp, 0x20] | fp = var_20h_2;
0x000c0fd0 mov r7, r8 | r7 = r8;
0x000c0fd2 mov r0, lr | r0 = lr;
| label_12:
0x000c0fd4 str.w r4, [sl, 0x30] | __asm ("str.w r4, [sl, 0x30]");
0x000c0fd8 strd ip, r0, [sl, 0x38] | __asm ("strd ip, r0, [sl, 0x38]");
| if (r5 == 0) {
0x000c0fdc cbnz r5, 0xc0fe6 |
0x000c0fde cmp r0, r2 |
0x000c0fe0 it eq |
| if (r0 == r2) {
0x000c0fe2 cmpeq ip, r3 | __asm ("cmpeq ip, r3");
| }
| if (r0 == r2) {
0x000c0fe4 beq 0xc0fea | goto label_43;
| }
| }
| label_21:
0x000c0fe6 movs r3, 0 | r3 = 0;
0x000c0fe8 str r3, [sp, 0x24] | var_24h = r3;
| label_43:
0x000c0fea ldr.w fp, [fp, 0xc] | fp = *(arg_ch);
0x000c0fee cmp.w fp, 0 |
| if (fp != 0) {
0x000c0ff2 bne.w 0xc0e6e | goto label_5;
| }
0x000c0ff6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000c0ff8 ldr r7, [sp, 0x3c] | r7 = var_3ch_2;
0x000c0ffa cmp r3, 0 |
| if (r3 == 0) {
0x000c0ffc beq 0xc0fa6 | goto label_6;
| }
0x000c0ffe ldr r3, [sp, 0x34] | r3 = var_34h;
0x000c1000 ldr r4, [r3, 0x30] | r4 = *((r3 + 0x30));
0x000c1002 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000c1004 b 0xc0f4c | goto label_7;
| label_32:
0x000c1006 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000c1008 cmp r2, 0 |
| if (r2 == 0) {
0x000c100a beq.w 0xc1118 | goto label_44;
| }
0x000c100e ldr.w r3, [sl] | r3 = *(sl);
0x000c1012 add r3, r2 | r3 += r2;
0x000c1014 cmp r4, r3 |
0x000c1016 ite lo |
| if (r4 >= r3) {
0x000c1018 movlo r5, 0 | r5 = 0;
| }
| if (r4 < r3) {
0x000c101a movhs r5, 1 | r5 = 1;
| }
| label_15:
0x000c101c add r1, sp, 0x50 | r1 += x;
0x000c101e strb.w r5, [sp, 0x47] | var_47h = r5;
| if (r4 != 0) {
0x000c1022 cbnz r4, 0xc103a | goto label_45;
| }
| label_9:
0x000c1024 cmp r5, 0 |
| if (r5 != 0) {
0x000c1026 bne 0xc0fbe | goto label_8;
| }
0x000c1028 ldr.w r4, [sl] | r4 = *(sl);
0x000c102c mov r0, r4 | r0 = r4;
0x000c102e bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x000c1032 add r4, r0 | r4 += r0;
0x000c1034 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000c1036 cmp r4, 0 |
| if (r4 == 0) {
0x000c1038 beq 0xc1024 | goto label_9;
| }
| label_45:
0x000c103a ldrd r8, r6, [sp, 0x50] | __asm ("ldrd r8, r6, [x]");
0x000c103e add r1, sp, 0x58 | r1 += var_58h_2;
0x000c1040 ldrd r3, r2, [sb, 0x20] | __asm ("ldrd r3, r2, [sb, 0x20]");
0x000c1044 strd r1, fp, [sp, 0x14] | __asm ("strd r1, fp, [var_0h_3x14]");
0x000c1048 mov fp, sb |
0x000c104a mov ip, r8 |
0x000c104c ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000c1050 mov r0, r6 | r0 = r6;
| if (r7 == 0) {
0x000c1052 cbz r7, 0xc10aa | goto label_46;
| }
| label_10:
0x000c1054 cmp r3, r8 |
0x000c1056 sbcs.w r1, r2, r6 | __asm ("sbcs.w r1, r2, r6");
| if (r3 >= r8) {
0x000c105a bge 0xc10b2 | goto label_47;
| }
| label_11:
0x000c105c cmp r5, 0 |
| if (r5 != 0) {
0x000c105e bne.w 0xc11c6 | goto label_48;
| }
0x000c1062 ldrb r1, [r4] | r1 = *(r4);
0x000c1064 ldr.w ip, [sl] | ip = *(sl);
| if (r1 == 0) {
0x000c1068 cbz r1, 0xc1076 | goto label_49;
| }
| do {
0x000c106a and r0, r1, 0x80 | r0 = r1 & 0x80;
0x000c106e ldrb r1, [r4, 1]! | r1 = *((r4 += 1));
0x000c1072 orrs r0, r1 | r0 |= r1;
0x000c1074 bne 0xc106a |
| } while (r0 != r1);
| label_49:
0x000c1076 adds r4, 1 | r4++;
0x000c1078 add ip, sb |
0x000c107a cmp r4, ip |
| if (r4 >= ip) {
0x000c107c bhs 0xc1094 | goto label_50;
| }
0x000c107e mov r1, r4 | r1 = r4;
0x000c1080 b 0xc1086 |
| while (r0 == 0) {
0x000c1082 cmp r1, ip |
| if (r1 == ip) {
0x000c1084 beq 0xc10c8 | goto label_51;
| }
0x000c1086 mov r4, r1 | r4 = r1;
0x000c1088 ldrb r0, [r1], 1 | r0 = *(r1);
| r1++;
0x000c108c cmp r0, 0 |
0x000c108e beq 0xc1082 |
| }
0x000c1090 cmp ip, r4 |
| if (ip > r4) {
0x000c1092 bhi 0xc10d8 | goto label_52;
| }
| label_50:
0x000c1094 mov.w r1, 1 | r1 = 1;
0x000c1098 movs r5, 1 | r5 = 1;
0x000c109a strb.w r1, [sp, 0x47] | var_47h = r1;
0x000c109e mov r1, r4 | r1 = r4;
| label_13:
0x000c10a0 mov ip, r8 |
0x000c10a2 mov r0, r6 | r0 = r6;
0x000c10a4 str r1, [sp, 0x48] | var_48h_2 = r1;
0x000c10a6 cmp r7, 0 |
| if (r7 != 0) {
0x000c10a8 bne 0xc1054 | goto label_10;
| }
| label_46:
0x000c10aa cmp r3, r8 |
0x000c10ac sbcs.w r1, r2, r6 | __asm ("sbcs.w r1, r2, r6");
| if (r3 < r8) {
0x000c10b0 blt 0xc10c0 | goto label_53;
| }
| label_47:
0x000c10b2 cmp r2, r6 |
0x000c10b4 it eq |
| if (r2 == r6) {
0x000c10b6 cmpeq r3, r8 | __asm ("cmpeq r3, r8");
| }
| if (r2 == r6) {
0x000c10b8 beq 0xc10c0 | goto label_53;
| }
0x000c10ba ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x000c10bc cmp r1, 1 |
| if (r1 == 1) {
0x000c10be beq 0xc105c | goto label_11;
| }
| label_53:
0x000c10c0 mov sb, fp | sb = fp;
0x000c10c2 ldr.w fp, [sp, 0x18] | fp = var_18h_2;
0x000c10c6 b 0xc0fd4 | goto label_12;
| label_51:
0x000c10c8 mov r4, r1 | r4 = r1;
0x000c10ca mov.w r1, 1 | r1 = 1;
0x000c10ce strb.w r1, [sp, 0x47] | var_47h = r1;
0x000c10d2 movs r5, 1 | r5 = 1;
0x000c10d4 mov r1, r4 | r1 = r4;
0x000c10d6 b 0xc10a0 | goto label_13;
| label_52:
0x000c10d8 ldr r1, [sp, 0x14] | r1 = var_14h_2;
0x000c10da mov r0, r4 | r0 = r4;
0x000c10dc bl 0x24184 | fcn_00024184 (r0, r1);
0x000c10e0 ldr r3, [sp, 0x2c] | r3 = var_2ch_2;
0x000c10e2 add r4, r0 | r4 += r0;
0x000c10e4 ldr r2, [sp, 0x5c] | r2 = var_5ch_2;
0x000c10e6 ldr r1, [sp, 0x58] | r1 = var_58h_2;
0x000c10e8 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000c10ea mul r2, r3, r2 | r2 = r3 * r2;
0x000c10ee mla r2, r0, r1, r2 | __asm ("mla r2, r0, r1, r2");
0x000c10f2 umull r1, r0, r1, r3 | r1:r0 = r1 * r3;
0x000c10f6 adds.w r1, r1, r8 | r1 += r8;
0x000c10fa add r2, r0 | r2 += r0;
0x000c10fc adc.w r6, r2, r6 | __asm ("adc.w r6, r2, r6");
0x000c1100 mov r8, r1 | r8 = r1;
0x000c1102 str r1, [sp, 0x50] | x = r1;
0x000c1104 mov r1, r4 | r1 = r4;
0x000c1106 ldrd r3, r2, [fp, 0x20] | __asm ("ldrd r3, r2, [arg_20h]");
0x000c110a str r6, [sp, 0x54] | var_54h_2 = r6;
0x000c110c b 0xc10a0 | goto label_13;
| label_42:
0x000c110e mov r0, r5 | r0 = r5;
0x000c1110 bl 0x24218 | fcn_00024218 (r0, r1);
0x000c1114 ldr r3, [sp, 0x58] | r3 = var_58h_2;
0x000c1116 b 0xc0f88 | goto label_14;
| label_44:
0x000c1118 movs r5, 1 | r5 = 1;
0x000c111a b 0xc101c | goto label_15;
| label_31:
0x000c111c ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
| label_24:
0x000c1120 add r4, sp, 0x4c | r4 += var_4ch_2;
| label_17:
0x000c1122 cmp r2, 0 |
| if (r2 != 0) {
0x000c1124 bne 0xc11d6 | goto label_54;
| }
0x000c1126 mov r2, r4 | r2 = r4;
0x000c1128 mov r1, fp | r1 = fp;
0x000c112a mov r0, sl | r0 = sl;
0x000c112c bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x000c1130 ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000c1132 cmp r2, 0 |
| if (r2 != 0) {
0x000c1134 bne.w 0xc0f22 | goto label_16;
| }
0x000c1138 ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000c113c b 0xc1122 | goto label_17;
| label_22:
0x000c113e movs r1, 1 | r1 = 1;
0x000c1140 movs r2, 0 | r2 = 0;
0x000c1142 b 0xc0e50 | goto label_18;
| label_30:
0x000c1144 add r6, sp, 0x4c | r6 += var_4ch_2;
0x000c1146 mov r1, fp | r1 = fp;
0x000c1148 mov r2, r6 | r2 = r6;
0x000c114a mov r0, sl | r0 = sl;
0x000c114c str r3, [sp, 0x10] | var_10h = r3;
0x000c114e ldrb.w r8, [fp, 0x20] | r8 = *(arg_20h);
0x000c1152 bl 0xc0cc4 | fcn_000c0cc4 (r0, r1, r2);
0x000c1156 ldr r1, [sp, 0x4c] | r1 = var_4ch_2;
0x000c1158 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000c115a mov r2, r1 | r2 = r1;
0x000c115c cmp r1, 0 |
| if (r1 != 0) {
0x000c115e bne 0xc1228 | goto label_55;
| }
0x000c1160 mov r2, r5 | r2 = r5;
0x000c1162 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x000c1166 mov r5, r8 | r5 = r8;
0x000c1168 mov sb, fp | sb = fp;
0x000c116a mov r8, r2 | r8 = r2;
0x000c116c mov fp, r7 |
0x000c116e mov r7, r3 | r7 = r3;
0x000c1170 b 0xc1192 | goto label_56;
| label_19:
0x000c1172 mov r2, r6 | r2 = r6;
0x000c1174 mov r1, sb | r1 = sb;
0x000c1176 mov r0, sl | r0 = sl;
0x000c1178 bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
| if (r5 == 0) {
0x000c117c cbnz r5, 0xc118a |
0x000c117e ldrd r2, r3, [sb, 0x18] | __asm ("ldrd r2, r3, [sb, 0x18]");
0x000c1182 cmp r7, r3 |
0x000c1184 it eq |
| if (r7 == r3) {
0x000c1186 cmpeq r8, r2 | __asm ("cmpeq r8, r2");
| }
| if (r7 == r3) {
0x000c1188 beq 0xc1216 | goto label_57;
| }
| }
0x000c118a ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000c118c cmp r2, 0 |
| if (r2 != 0) {
0x000c118e bne.w 0xc0f22 | goto label_16;
| }
| label_56:
0x000c1192 ldrb.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000c1196 cmp r3, 0 |
| if (r3 == 0) {
0x000c1198 beq 0xc1172 | goto label_19;
| }
0x000c119a mov r7, fp | r7 = fp;
0x000c119c mov fp, sb |
0x000c119e ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000c11a2 mov r8, r5 | r8 = r5;
| label_27:
0x000c11a4 ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000c11a8 cmp r2, r8 |
| if (r2 == r8) {
0x000c11aa beq 0xc1204 | goto label_58;
| }
0x000c11ac cmp r4, 0 |
| if (r4 != 0) {
0x000c11ae bne.w 0xc0f1e | goto label_20;
| }
0x000c11b2 movw r3, 0x10b | r3 = 0x10b;
0x000c11b6 str r3, [sp, 0x24] | var_24h = r3;
0x000c11b8 b 0xc0f24 | goto label_2;
| label_35:
0x000c11ba mov lr, r1 | lr = r1;
0x000c11bc ldr.w fp, [sp, 0x20] | fp = var_20h_2;
0x000c11c0 mov r7, r8 | r7 = r8;
0x000c11c2 mov ip, lr |
0x000c11c4 b 0xc0fd4 | goto label_12;
| label_48:
0x000c11c6 mov sb, fp | sb = fp;
0x000c11c8 str.w r4, [sl, 0x30] | __asm ("str.w r4, [sl, 0x30]");
0x000c11cc ldr.w fp, [sp, 0x18] | fp = var_18h_2;
0x000c11d0 strd r8, r6, [sl, 0x38] | __asm ("strd r8, r6, [sl, 0x38]");
0x000c11d4 b 0xc0fe6 | goto label_21;
| label_54:
0x000c11d6 ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000c11d8 cmp r2, 0 |
| if (r2 != 0) {
0x000c11da bne.w 0xc0f22 | goto label_16;
| }
0x000c11de mov.w r1, -1 | r1 = -1;
0x000c11e2 mov r2, r1 | r2 = r1;
0x000c11e4 cmp.w sb, 0 |
| if (sb != 0) {
0x000c11e8 bne.w 0xc0e50 | goto label_18;
| }
0x000c11ec b 0xc113e | goto label_22;
| label_39:
0x000c11ee ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000c11f0 adds r5, r4, 1 | r5 = r4 + 1;
0x000c11f2 str r5, [sp, 0x48] | var_48h_2 = r5;
0x000c11f4 lsls r1, r2, 0x18 | r1 = r2 << 0x18;
0x000c11f6 it pl |
| if (r1 < r2) {
0x000c11f8 strpl r2, [sp, 0x58] | var_58h_2 = r2;
| }
| if (r1 < r2) {
0x000c11fa bmi 0xc120a | goto label_59;
| }
| label_26:
0x000c11fc adds r4, r5, r0 | r4 = r5 + r0;
0x000c11fe ldrb r0, [r5, r0] | r0 = *((r5 + r0));
0x000c1200 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000c1202 b 0xc0f5c | goto label_23;
| label_58:
0x000c1204 cmp r4, 0 |
| if (r4 != 0) {
0x000c1206 bne 0xc1120 | goto label_24;
| }
0x000c1208 b 0xc0e42 | goto label_25;
| label_59:
0x000c120a add r1, sp, 0x58 | r1 += var_58h_2;
0x000c120c mov r0, r5 | r0 = r5;
0x000c120e bl 0x24218 | fcn_00024218 (r0, r1);
0x000c1212 ldr r2, [sp, 0x58] | r2 = var_58h_2;
0x000c1214 b 0xc11fc | goto label_26;
| label_57:
0x000c1216 ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000c1218 mov r7, fp | r7 = fp;
0x000c121a mov r8, r5 | r8 = r5;
0x000c121c mov fp, sb |
0x000c121e ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000c1222 cmp r2, 0 |
| if (r2 == 0) {
0x000c1224 beq 0xc11a4 | goto label_27;
| }
0x000c1226 b 0xc0f22 | goto label_16;
| label_55:
0x000c1228 cmp r4, 0 |
| if (r4 != 0) {
0x000c122a bne.w 0xc0f22 | goto label_16;
| }
0x000c122e str r1, [sp, 0x24] | var_24h = r1;
0x000c1230 b 0xc0f24 | goto label_2;
| label_38:
0x000c1232 blx 0x6430 | fcn_00006430 ();
0x000c1236 nop |
0x000c1238 ldrh r0, [r4, 0x3e] | r0 = *((r4 + 0x3e));
0x000c123a movs r2, r0 | r2 = r0;
0x000c123c lsls r4, r6, 8 | r4 = r6 << 8;
0x000c123e movs r0, r0 |
0x000c1240 ldrh r0, [r6, 0x32] | r0 = *((r6 + 0x32));
0x000c1242 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc1244 */
| #include <stdint.h>
|
; (fcn) fcn.000c1244 () | void fcn_000c1244 (int16_t arg_10h, int16_t arg_14h, int16_t arg1, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_0h;
| int16_t var_4h_3;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| arithmetic x;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h_2;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_a8h;
| int16_t var_b4h;
| int16_t var_f4h;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| r0 = arg1;
| r2 = arg3;
0x000c1244 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x000c1248 mov r5, r2 | r5 = r2;
0x000c124a ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000c124c sub sp, 8 |
0x000c124e ldr r4, [pc, 0xa0] |
0x000c1250 ldr r2, [pc, 0xa0] | r2 = *(0xc12f4);
0x000c1252 cmp r3, 0 |
0x000c1254 add r4, pc |
0x000c1256 ldr r2, [r4, r2] |
0x000c1258 mul r4, r1, r3 | r4 = r1 * r3;
0x000c125c ldr r2, [r2] | r2 = imp.atan;
0x000c125e str r2, [sp, 4] | var_4h = r2;
0x000c1260 mov.w r2, 0 | r2 = 0;
0x000c1264 add.w r4, r4, r4, lsl 1 | r4 = 0x18254a;
| if (r3 <= 0) {
0x000c1268 ble 0xc12ca | goto label_17;
| }
0x000c126a lsls r4, r4, 2 | r4 <<= 2;
0x000c126c mov r6, r0 | r6 = r0;
0x000c126e mov.w r8, 0 | r8 = 0;
0x000c1272 mov r7, sp | r7 = sp;
0x000c1274 b 0xc1292 |
| while (r3 == 0) {
| label_1:
0x000c1276 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000c1278 add.w r8, r8, 1 | r8++;
0x000c127c str r3, [r2, r4] | *((r2 + r4)) = r3;
0x000c127e adds r4, 0xc | r4 += 0xc;
0x000c1280 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000c1282 cmp r3, r8 |
0x000c1284 ite le |
| if (r3 > r8) {
0x000c1286 movle r3, 0 | r3 = 0;
| }
| if (r3 <= r8) {
0x000c1288 movgt r3, 1 | r3 = 1;
| }
0x000c128a cmp r0, 0 |
0x000c128c it ne |
| if (r0 == 0) {
0x000c128e movne r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000c1290 cbz r3, 0xc12cc | goto label_18;
| }
0x000c1292 mov r3, r7 | r3 = r7;
0x000c1294 ldr r0, [r5] | r0 = *(r5);
0x000c1296 mov r2, r8 | r2 = r8;
0x000c1298 mov r1, r6 | r1 = r6;
0x000c129a bl 0xc0da0 | fcn_000c0da0 (r0, r1, r2, r3, r4, r5, r6);
0x000c129e ldr r3, [sp] | r3 = *(sp);
0x000c12a0 cmp r3, 0 |
0x000c12a2 beq 0xc1276 |
| }
0x000c12a4 ldrb.w ip, [r3] | ip = *(r3);
0x000c12a8 cmp.w ip, 1 |
| if (ip < 1) {
0x000c12ac bls 0xc12e6 | goto label_19;
| }
0x000c12ae mov.w lr, 0 | lr = 0;
| do {
| label_0:
0x000c12b2 tst.w ip, 0x80 |
0x000c12b6 ldrb ip, [r3, 1]! | ip = *((r3 += 1));
0x000c12ba bne 0xc12b2 |
| } while ((ip & 0x80) != 0);
0x000c12bc cmp.w ip, 1 |
0x000c12c0 add.w lr, lr, 1 | lr++;
| if (ip > 1) {
0x000c12c4 bhi 0xc12b2 | goto label_0;
| }
0x000c12c6 mov r3, lr | r3 = lr;
0x000c12c8 b 0xc1276 | goto label_1;
| label_17:
0x000c12ca movs r0, 0 | r0 = 0;
| label_18:
0x000c12cc ldr r2, [pc, 0x28] |
0x000c12ce ldr r3, [pc, 0x24] | r3 = *(0xc12f6);
0x000c12d0 add r2, pc | r2 = 0x1825cc;
0x000c12d2 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c12d4 ldr r2, [r3] | r2 = imp.atan;
0x000c12d6 ldr r3, [sp, 4] | r3 = var_4h;
0x000c12d8 eors r2, r3 | r2 ^= r3;
0x000c12da mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000c12de bne 0xc12ea |
0x000c12e0 add sp, 8 |
0x000c12e2 pop.w {r4, r5, r6, r7, r8, pc} |
| label_19:
0x000c12e6 movs r3, 0 | r3 = 0;
0x000c12e8 b 0xc1276 | goto label_1;
| }
0x000c12ea blx 0x6430 | fcn_00006430 ();
0x000c12ee nop |
0x000c12f0 ldrh r4, [r0, 0x1a] | r4 = *((r0 + 0x1a));
0x000c12f2 movs r2, r0 | r2 = r0;
0x000c12f4 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c12f6 movs r0, r0 |
0x000c12f8 ldrh r0, [r1, 0x16] | r0 = *((r1 + 0x16));
0x000c12fa movs r2, r0 | r2 = r0;
0x000c12fc push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000c1300 mov r4, r0 | r4 = r0;
0x000c1302 ldr r5, [pc, 0xe0] | r5 = *(0xc13e6);
0x000c1304 lsls r4, r0, 2 | r4 = r0 << 2;
0x000c1306 movs r0, r0 |
0x000c1308 movs r0, r0 |
0x000c130a movs r0, r0 |
0x000c130c add r0, r0 | r0 += r0;
0x000c130e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000c1310 ldr r0, [r7] | r0 = *(r7);
0x000c1312 ldr r1, [r5, r1] |
0x000c1314 ldr r1, [r1] | r1 = *(0xc13e6);
0x000c1316 str r1, [sp, 0xc] | var_ch = r1;
0x000c1318 mov.w r1, 0 | r1 = 0;
0x000c131c mov r1, r4 | r1 = r4;
0x000c131e bl 0xc0da0 | fcn_000c0da0 (r0, r1, r2, r3, r4, r5, r6);
0x000c1322 ldr r5, [sp, 4] | r5 = var_4h_2;
0x000c1324 mov sb, r0 | sb = r0;
0x000c1326 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000c1328 mov r6, r5 | r6 = r5;
0x000c132a mov r4, r5 | r4 = r5;
0x000c132c ldr.w r8, [r3, 0x40] | r8 = *((r3 + 0x40));
| if (r5 != 0) {
0x000c1330 cbz r5, 0xc1344 |
0x000c1332 ldrb r4, [r5] | r4 = *(r5);
0x000c1334 lsls r3, r4, 0x18 | r3 = r4 << 0x18;
0x000c1336 it pl |
| if (r3 < r4) {
0x000c1338 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r4) {
0x000c133a bmi 0xc13d2 | goto label_20;
| }
| label_2:
0x000c133c subs r4, 2 | r4 -= 2;
0x000c133e add r3, r5 | r3 += r5;
0x000c1340 asrs r6, r4, 0x1f | r6 = r4 >> 0x1f;
0x000c1342 str r3, [sp, 4] | var_4h_2 = r3;
| }
0x000c1344 cmp.w r8, 0 |
| if (r8 <= 0) {
0x000c1348 ble 0xc13b6 | goto label_21;
| }
0x000c134a ldr r5, [r7, 8] | r5 = *((r7 + 8));
0x000c134c asr.w r0, r8, 0x1f | r0 = r8 >> 0x1f;
0x000c1350 ldr.w lr, [r7, 0x18] |
0x000c1354 adds.w ip, r8, -1 |
0x000c1358 ldr r2, [sp, 4] | r2 = var_4h_2;
0x000c135a adc r0, r0, -1 | __asm ("adc r0, r0, -1");
0x000c135e mov r3, ip | r3 = ip;
0x000c1360 mov sl, r0 | sl = r0;
0x000c1362 add.w r1, r5, r5, lsl 1 | r1 = r5 + (r5 << 1);
0x000c1366 add.w r1, lr, r1, lsl 3 | r1 = lr + (r1 << 3);
| do {
0x000c136a str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x000c136c subs r3, 1 | r3--;
0x000c136e str.w sl, [r1, 0x14] | __asm ("str.w sl, [r1, 0x14]");
0x000c1372 sbc sl, sl, 0 | __asm ("sbc sl, sl, 0");
0x000c1376 cmp.w sl, -1 |
0x000c137a it eq |
| if (sl == -1) {
0x000c137c cmpeq r3, -1 | __asm ("cmpeq r3, -1");
| }
0x000c1380 str r2, [r1] | *(r1) = r2;
0x000c1382 strd r4, r6, [r1, 8] | __asm ("strd r4, r6, [r1, 8]");
0x000c1386 add.w r1, r1, 0x18 | r1 += 0x18;
0x000c138a bne 0xc136a |
| } while (sl != -1);
0x000c138c add r5, r8 | r5 += r8;
0x000c138e add.w r8, r8, -1 | r8 += -1;
0x000c1392 str r5, [r7, 8] | *((r7 + 8)) = r5;
0x000c1394 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000c1398 subs.w r3, ip, r8 | r3 = ip - r8;
0x000c139c lsl.w r5, r5, 3 | r5 <<= 3;
0x000c13a0 sbc r0, r0, 0 | __asm ("sbc r0, r0, 0");
0x000c13a4 subs r5, 0x18 | r5 -= 0x18;
0x000c13a6 add.w r1, lr, r5 | r1 = lr + r5;
0x000c13aa strd r3, r0, [r1, 0x10] | __asm ("strd r3, r0, [r1, 0x10]");
0x000c13ae str.w r2, [lr, r5] | __asm ("str.w r2, [lr, r5]");
0x000c13b2 strd r4, r6, [r1, 8] | __asm ("strd r4, r6, [r1, 8]");
| label_21:
0x000c13b6 ldr r2, [pc, 0x34] |
0x000c13b8 ldr r3, [pc, 0x2c] | r3 = *(0xc13e8);
0x000c13ba add r2, pc | r2 = 0x1827ac;
0x000c13bc ldr r3, [r2, r3] | r3 = imp.atan;
0x000c13be ldr r2, [r3] | r2 = imp.atan;
0x000c13c0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000c13c2 eors r2, r3 | r2 ^= r3;
0x000c13c4 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000c13c8 bne 0xc13e0 |
0x000c13ca mov r0, sb | r0 = sb;
0x000c13cc add sp, 0x10 |
0x000c13ce pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_20:
0x000c13d2 add r1, sp, 8 | r1 += var_8h_2;
0x000c13d4 mov r0, r5 | r0 = r5;
0x000c13d6 bl 0x24218 | fcn_00024218 (r0, r1);
0x000c13d8 invalid |
0x000c13dc mov r3, r0 | r3 = r0;
0x000c13de b 0xc133c | goto label_2;
| }
0x000c13e0 blx 0x6430 | fcn_00006430 ();
0x000c13e4 ldrh r4, [r1, 0x14] | r4 = *((r1 + 0x14));
0x000c13e6 movs r2, r0 | r2 = r0;
0x000c13e8 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c13ea movs r0, r0 |
0x000c13ec ldrh r6, [r3, 0xe] | r6 = *((r3 + 0xe));
0x000c13ee movs r2, r0 | r2 = r0;
0x000c13f0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c13f4 movw r3, 0xfbf | r3 = 0xfbf;
0x000c13f8 ldr.w r4, [pc, 0x4f0] |
0x000c13fc ldr.w r1, [pc, 0x4f0] | r1 = *(0xc18f0);
0x000c1400 add r4, pc | r4 = 0x182cf0;
0x000c1402 vpush {d8} | __asm ("vpush {d8}");
0x000c1406 ldr r5, [r2] | r5 = *(r2);
0x000c1408 sub sp, 0xfc |
0x000c140a ldr r1, [r4, r1] |
0x000c140c movw r2, 0xa01 | r2 = 0xa01;
0x000c1410 mov r4, r0 | r4 = r0;
0x000c1412 ldr r1, [r1] | r1 = imp.atan;
0x000c1414 str r1, [sp, 0xf4] | var_f4h = r1;
0x000c1416 mov.w r1, 0 | r1 = 0;
0x000c141a ldrh r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x000c141c ands r3, r1 | r3 &= r1;
0x000c141e cmp r3, r2 |
| if (r3 == r2) {
0x000c1420 bne 0xc1472 |
0x000c1422 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x000c1424 cmp r3, 0x70 |
| if (r3 != 0x70) {
0x000c1426 bne 0xc1472 | goto label_22;
| }
0x000c1428 ldr.w r1, [pc, 0x4c8] |
0x000c142c ldr r0, [r5] | r0 = *(r5);
0x000c142e add r1, pc | r1 = 0x182d26;
0x000c1430 blx 0x6634 | r0 = fcn_00006634 ();
| if (r0 != 0) {
0x000c1434 cbnz r0, 0xc1472 | goto label_22;
| }
0x000c1436 ldr.w sl, [r5, 8] | sl = *((r5 + 8));
0x000c143a cmp.w sl, 0 |
| if (sl == 0) {
0x000c143e beq 0xc1472 | goto label_22;
| }
0x000c1440 mov r1, sl | r1 = sl;
0x000c1442 mov r0, r4 | r0 = r4;
0x000c1444 bl 0xb5910 | r0 = fcn_000b5910 (r0, r1);
0x000c1448 mov r7, r0 | r7 = r0;
0x000c144a cmp r0, 0 |
| if (r0 == 0) {
0x000c144c beq 0xc14ca | goto label_23;
| }
| label_4:
0x000c144e ldr.w r2, [pc, 0x4a8] |
0x000c1452 ldr.w r3, [pc, 0x49c] | r3 = *(0xc18f2);
0x000c1456 add r2, pc | r2 = 0x182d54;
0x000c1458 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c145a ldr r2, [r3] | r2 = imp.atan;
0x000c145c ldr r3, [sp, 0xf4] | r3 = var_f4h;
0x000c145e eors r2, r3 | r2 ^= r3;
0x000c1460 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c1464 bne.w 0xc18e8 | goto label_24;
| }
0x000c1468 add sp, 0xfc |
0x000c146a vpop {d8} | __asm ("vpop {d8}");
0x000c146e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
| label_22:
0x000c1472 ldr.w r1, [pc, 0x488] |
0x000c1476 ldr.w r0, [pc, 0x488] |
0x000c147a add r1, pc | r1 = 0x182d7c;
0x000c147c add r0, pc | r0 = 0x182d82;
0x000c147e bl 0x5cb60 | fcn_0005cb60 ();
0x000c1482 movs r1, 1 | r1 = 1;
0x000c1484 mov r5, r0 | r5 = r0;
0x000c1486 mov.w r3, -1 | r3 = -1;
0x000c148a str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x000c148c ldr r0, [r4] | r0 = *(r4);
0x000c148e mov.w r2, -1 | r2 = -1;
0x000c1492 str r3, [sp, 4] | var_4h_3 = r3;
0x000c1494 mov.w r3, -1 | r3 = -1;
0x000c1498 str r1, [sp] | *(sp) = r1;
0x000c149a mov r1, r5 | r1 = r5;
0x000c149c bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x000c14a0 ldr.w r2, [pc, 0x460] |
0x000c14a4 ldr.w r3, [pc, 0x448] | r3 = *(0xc18f0);
0x000c14a8 add r2, pc | r2 = 0x182db0;
0x000c14aa ldr r3, [r2, r3] | r3 = imp.atan;
0x000c14ac ldr r2, [r3] | r2 = imp.atan;
0x000c14ae ldr r3, [sp, 0xf4] | r3 = var_f4h;
0x000c14b0 eors r2, r3 | r2 ^= r3;
0x000c14b2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c14b6 bne.w 0xc18e8 | goto label_24;
| }
0x000c14ba mov r0, r5 | r0 = r5;
0x000c14bc add sp, 0xfc |
0x000c14be vpop {d8} | __asm ("vpop {d8}");
0x000c14c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c14c6 b.w 0x26dbc | void (*0x26dbc)() ();
| label_23:
0x000c14ca ldr.w r3, [sl] | r3 = *(sl);
0x000c14ce ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x000c14d2 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000c14d6 str r3, [sp, 0x28] | var_28h = r3;
0x000c14d8 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000c14da str r0, [sp, 0x70] | var_70h = r0;
0x000c14dc ldr.w fp, [r3] | fp = *(r3);
0x000c14e0 add r3, sp, 0x74 | r3 += var_74h;
0x000c14e2 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000c14e6 cmp r2, 0 |
| if (r2 == 0) {
0x000c14e8 beq.w 0xc1866 | goto label_25;
| }
0x000c14ec add r3, sp, 0x90 | r3 += var_70h;
0x000c14ee mov r1, r0 | r1 = r0;
0x000c14f0 movs r2, 0x20 | r2 = 0x20;
0x000c14f2 mov r0, r3 | r0 = r3;
0x000c14f4 str r3, [sp, 0x4c] | var_4ch = r3;
0x000c14f6 blx 0x62ec | fcn_000062ec ();
0x000c14f8 mrc p8, 7, apsr_nzcv, c10, c10, 6 | __asm ("mrc p8, 7, apsr_nzcv, c10, c10, 6");
0x000c14fc str r0, [r2, r0] | *((r2 + r0)) = r0;
0x000c14fe add r3, sp, 0x84 | r3 += var_84h;
0x000c1500 str.w sl, [sp, 0x80] | __asm ("str.w sl, [var_80h]");
0x000c1504 str r7, [sp, 0x6c] | var_4ch = r7;
0x000c1506 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000c150a ldr r6, [r5] | r6 = *(r5);
0x000c150c cmp r6, 5 |
| if (r6 == 5) {
0x000c150e beq 0xc1546 | goto label_26;
| }
0x000c1510 ldr.w sb, [pc, 0x3f4] | sb = *(0x000c1908);
0x000c1514 add.w r8, sp, 0x80 | r8 += var_80h;
0x000c1518 add r7, sp, 0x6c | r7 += var_4ch;
0x000c151a add sb, pc | sb += pc;
| do {
0x000c151c mov r2, sb | r2 = sb;
0x000c151e ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000c1520 mov r3, r8 | r3 = r8;
0x000c1522 mov r1, r7 | r1 = r7;
0x000c1524 bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c1528 clz r2, r0 | r2 &= r0;
0x000c152c cmp r6, 2 |
0x000c152e lsr.w r2, r2, 5 | r2 >>= 5;
0x000c1532 it eq |
| if (r6 != 2) {
0x000c1534 moveq r2, 0 | r2 = 0;
| }
0x000c1536 cmp r2, 0 |
| if (r2 == 0) {
0x000c1538 beq.w 0xc182a | goto label_27;
| }
0x000c153c ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000c153e ldr r6, [r5] | r6 = *(r5);
0x000c1540 cmp r6, 5 |
0x000c1542 bne 0xc151c |
| } while (r6 != 5);
0x000c1544 ldr r7, [sp, 0x88] | r7 = var_88h;
| label_26:
0x000c1546 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000c1548 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000c154a add r3, r7 | r3 += r7;
| label_9:
0x000c154c add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000c1550 str r3, [sp, 0x14] | var_14h = r3;
0x000c1552 movs r1, 0 | r1 = 0;
0x000c1554 lsls r3, r2, 3 | r3 = r2 << 3;
0x000c1556 mov r0, r3 | r0 = r3;
0x000c1558 str r3, [sp, 0x34] | var_14h = r3;
0x000c155a bl 0x5ac48 | fcn_0005ac48 (r0, r1);
0x000c155e ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c1560 mov r5, r0 | r5 = r0;
0x000c1562 str r0, [sp, 0xa8] | var_88h = r0;
0x000c1564 cmp r0, 0 |
| if (r0 == 0) {
0x000c1566 beq.w 0xc1882 | goto label_28;
| }
0x000c156a ldr r2, [sp, 0x28] | r2 = var_28h;
0x000c156c ldrd r0, r1, [sl, 0x20] | __asm ("ldrd r0, r1, [sl, 0x20]");
0x000c1570 str.w sl, [sp, 0x90] | __asm ("str.w sl, [var_70h]");
0x000c1574 ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x000c1576 strd r0, r1, [sp, 0xa0] | __asm ("strd r0, r1, [var_84h]");
0x000c157a cmp r2, 0 |
| if (r2 <= 0) {
0x000c157c ble.w 0xc18e0 | goto label_29;
| }
0x000c1580 ldr r1, [pc, 0x388] |
0x000c1582 movw r2, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000c1586 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x000c158a str r3, [sp, 0x48] | var_28h = r3;
0x000c158c str r4, [sp, 0x3c] | var_3ch = r4;
0x000c158e add r1, pc | r1 = 0x182e9e;
0x000c1590 str r2, [sp, 0x44] | var_44h = r2;
0x000c1592 str r1, [sp, 0x50] | var_50h = r1;
0x000c1594 ldr r1, [pc, 0x378] |
0x000c1596 add r1, pc | r1 = 0x182eaa;
0x000c1598 str r1, [sp, 0x54] | var_34h_2 = r1;
0x000c159a ldr r1, [pc, 0x378] |
0x000c159c add r1, pc | r1 = 0x182eb6;
0x000c159e str r1, [sp, 0x40] | var_40h = r1;
0x000c15a0 movs r1, 0 | r1 = 0;
0x000c15a2 str r1, [sp, 0x1c] | var_1ch = r1;
| label_6:
0x000c15a4 ldr.w r4, [sl, 0x10] | r4 = *((sl + 0x10));
0x000c15a8 movs r1, 0 | r1 = 0;
0x000c15aa str r1, [sp, 0x6c] | var_4ch = r1;
0x000c15ac str r1, [sp, 0x80] | var_80h = r1;
0x000c15ae ldr r5, [r4] | r5 = *(r4);
0x000c15b0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c15b2 strd r1, r1, [sp, 0x60] | __asm ("strd r1, r1, [var_44h]");
0x000c15b4 asrs r0, r3, 4 | r0 = r3 >> 4;
0x000c15b6 cmp r5, 5 |
0x000c15b8 str r1, [sp, 0x68] | var_48h = r1;
0x000c15ba str r3, [sp, 0x94] | var_74h = r3;
0x000c15bc str r1, [sp, 0x98] | var_98h = r1;
| if (r5 == 5) {
0x000c15be beq 0xc15ec | goto label_30;
| }
0x000c15c0 ldrd r7, r8, [sp, 0x4c] | __asm ("ldrd r7, r8, [var_4ch]");
0x000c15c4 add r6, sp, 0x80 | r6 += var_80h;
| do {
0x000c15c6 mov r3, r7 | r3 = r7;
0x000c15c8 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c15ca mov r2, r8 | r2 = r8;
0x000c15cc mov r1, r6 | r1 = r6;
0x000c15ce bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c15d2 clz r3, r0 | r3 &= r0;
0x000c15d6 cmp r5, 2 |
0x000c15d8 lsr.w r3, r3, 5 | r3 >>= 5;
0x000c15dc it eq |
| if (r5 != 2) {
0x000c15de moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000c15e0 cbz r3, 0xc15f4 | goto label_31;
| }
0x000c15e2 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c15e4 ldr r5, [r4] | r5 = *(r4);
0x000c15e6 cmp r5, 5 |
0x000c15e8 bne 0xc15c6 |
| } while (r5 != 5);
0x000c15ea ldr r1, [sp, 0x80] | r1 = var_80h;
| label_30:
0x000c15ec ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000c15ee mov r0, r4 | r0 = r4;
0x000c15f0 bl 0xc12fc | r0 = void (*0xc12fc)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_31:
0x000c15f4 cmp r0, 0 |
| if (r0 != 0) {
0x000c15f6 bne.w 0xc18a6 | goto label_32;
| }
0x000c15fa ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c15fc ldr.w r4, [sl, 0xc] | r4 = *((sl + 0xc));
0x000c1600 adds r6, r3, 1 | r6 = r3 + 1;
0x000c1602 mov r1, r6 | r1 = r6;
0x000c1604 mov r0, r4 | r0 = r4;
0x000c1606 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000c160a cmp r0, 0 |
| if (r0 == 0) {
0x000c160c beq.w 0xc17ea | goto label_33;
| }
0x000c1610 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000c1612 movw r3, 0x202 | r3 = 0x202;
0x000c1616 bics r3, r2 | __asm ("bics r3, r2");
| if (r0 == 0) {
0x000c1618 beq.w 0xc1852 | goto label_34;
| }
| label_11:
0x000c161c lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
| if (r1 < r2) {
0x000c161e bmi.w 0xc17ea | goto label_33;
| }
0x000c1622 movs r1, 1 | r1 = 1;
0x000c1624 bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x000c1628 mov r5, r0 | r5 = r0;
| if (r4 != 0) {
0x000c162a cbz r4, 0xc1632 |
| label_12:
0x000c162c mov r0, r4 | r0 = r4;
0x000c162e bl 0x2e7ac | fcn_0002e7ac (r0);
| }
| label_13:
0x000c1632 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000c1636 mov r1, r6 | r1 = r6;
0x000c1638 bl 0x3db60 | r0 = fcn_0003db60 (r0);
0x000c163c mov r3, r0 | r3 = r0;
0x000c163e cmp r5, 0 |
| if (r5 == 0) {
0x000c1640 beq.w 0xc17fe | goto label_14;
| }
0x000c1644 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000c1646 add r4, sp, 0x58 | r4 += x;
0x000c1648 ldr.w r1, [sl, 0x14] | r1 = *((sl + 0x14));
0x000c164c mov r2, r5 | r2 = r5;
0x000c164e ldr r0, [r0, 0x24] | r0 = *((r0 + 0x24));
0x000c1650 str r4, [sp] | *(sp) = r4;
0x000c1652 str r0, [sp, 0x14] | var_14h = r0;
0x000c1654 bl 0x245f0 | r0 = fcn_000245f0 (r0, r1, r2, r3, r4);
0x000c1658 cmp r0, 0 |
| if (r0 != 0) {
0x000c165a bne.w 0xc18a6 | goto label_32;
| }
0x000c165e ldr r5, [sp, 0x58] | r5 = x;
0x000c1660 add.w sb, sp, 0x5c | sb += var_3ch;
0x000c1664 add.w r8, sp, 0x6c | r8 += var_4ch;
0x000c1668 add r7, sp, 0x68 | r7 += var_48h;
0x000c166a add r3, sp, 0x64 | r3 += var_44h;
0x000c166c add r2, sp, 0x60 | r2 += var_40h;
0x000c166e str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h_3]");
0x000c1672 mov r1, sb | r1 = sb;
0x000c1674 str r7, [sp] | *(sp) = r7;
0x000c1676 mov r0, r5 | r0 = r5;
0x000c1678 ldr.w r4, [fp, 0x14] | r4 = *(arg_14h);
0x000c167c str r3, [sp, 0x24] | var_4h_3 = r3;
0x000c167e str r2, [sp, 0x20] | var_0h = r2;
0x000c1680 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000c1682 cmp r0, 0 |
| if (r0 != 0) {
0x000c1684 bne 0xc1746 | goto label_35;
| }
0x000c1686 ldr r3, [sp, 0x48] | r3 = var_28h;
0x000c1688 cmp r3, 0 |
| if (r3 <= 0) {
0x000c168a ble.w 0xc17ca | goto label_15;
| }
0x000c168e str r0, [sp, 0x38] | var_18h = r0;
0x000c1690 strd sl, r6, [sp, 0x2c] | __asm ("strd sl, r6, [sp, 0x2c]");
| label_3:
0x000c1694 ldr r0, [sp, 0xa8] | r0 = var_88h;
0x000c1696 mov.w sl, 0 | sl = 0;
0x000c169a ldr r3, [sp, 0x34] | r3 = var_14h;
0x000c169c mvn r4, 0x80000000 | r4 = ~0x80000000;
0x000c16a0 adds r6, r3, r0 | r6 = r3 + r0;
| do {
0x000c16a2 ldr r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x000c16a4 cbz r3, 0xc16c0 |
0x000c16a6 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x000c16a8 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000c16aa ldr r1, [r0, 0x14] | r1 = *((r0 + 0x14));
0x000c16ac subs r3, r2, r3 | r3 = r2 - r3;
0x000c16ae ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x000c16b0 sbc.w r2, r2, r1 | __asm ("sbc.w r2, r2, r1");
0x000c16b4 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x000c16b6 cmp r3, r4 |
0x000c16b8 sbcs r2, r1 | __asm ("sbcs r2, r1");
0x000c16ba itt lt |
| if (r3 >= r4) {
0x000c16bc movlt r4, r3 | r4 = r3;
| }
| if (r3 < r4) {
0x000c16be movlt sl, r0 | sl = r0;
| goto label_36;
| }
| }
| label_36:
0x000c16c0 adds r0, 0x18 | r0 += 0x18;
0x000c16c2 cmp r6, r0 |
0x000c16c4 bne 0xc16a2 |
| } while (r6 != r0);
0x000c16c6 cmp.w sl, 0 |
| if (sl == 0) {
0x000c16ca beq.w 0xc1898 | goto label_37;
| }
0x000c16ce ldr.w r6, [sl] | r6 = *(sl);
0x000c16d2 ldrb r3, [r6] | r3 = *(r6);
0x000c16d4 cmp r3, 1 |
| if (r3 > 1) {
0x000c16d6 bhi 0xc178e | goto label_38;
| }
0x000c16d8 ldr r3, [sp, 0x38] | r3 = var_18h;
0x000c16da str.w sl, [sp, 0x18] | __asm ("str.w sl, [var_18h]");
0x000c16de str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000c16e2 ldr r3, [sp, 0x20] | r3 = var_0h;
0x000c16e4 ldr.w sl, [sp, 0x24] | sl = var_4h_3;
0x000c16e8 str r3, [sp, 0x14] | var_14h = r3;
0x000c16ea b 0xc1700 |
| while (r3 < r4) {
0x000c16ec strd r7, r8, [sp] | __asm ("strd r7, r8, [sp]");
0x000c16f0 mov r3, sl | r3 = sl;
0x000c16f2 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000c16f4 mov r1, sb | r1 = sb;
0x000c16f6 ldr.w r6, [fp, 0x14] | r6 = *(arg_14h);
0x000c16fa mov r0, r5 | r0 = r5;
0x000c16fc blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x000c16fe cbnz r0, 0xc174c | goto label_39;
| }
| label_5:
0x000c1700 ldr r3, [sp, 0x6c] | r3 = var_4ch;
0x000c1702 cmp r3, r4 |
0x000c1704 blt 0xc16ec |
| }
0x000c1706 ldr.w sl, [sp, 0x18] | sl = var_18h;
0x000c170a add r4, sp, 0xb4 | r4 += var_94h;
0x000c170c ldr r3, [sp, 0xa8] | r3 = var_88h;
0x000c170e mov r1, r4 | r1 = r4;
0x000c1710 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000c1712 movs r0, 0x40 | r0 = 0x40;
0x000c1714 sub.w r3, sl, r3 | r3 = sl - r3;
0x000c1718 asrs r3, r3, 3 | r3 >>= 3;
0x000c171a mul r3, r2, r3 | r3 = r2 * r3;
0x000c171e ldr r2, [sp, 0x64] | r2 = var_44h;
0x000c1720 str r2, [sp, 4] | var_4h_3 = r2;
0x000c1722 str r3, [sp] | *(sp) = r3;
0x000c1724 ldr r3, [sp, 0x68] | r3 = var_48h;
0x000c1726 subs r3, r3, r2 | r3 -= r2;
0x000c1728 ldr r2, [sp, 0x40] | r2 = var_40h;
0x000c172a str r3, [sp, 8] | var_8h = r3;
0x000c172c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c172e bl 0x56488 | fcn_00056488 (r0, r1);
0x000c1732 mov r1, r4 | r1 = r4;
0x000c1734 mov.w r2, -1 | r2 = -1;
0x000c1738 add r0, sp, 0x70 | r0 += var_70h;
0x000c173a bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c173e cmp r0, 0 |
| if (r0 == 0) {
0x000c1740 beq 0xc1694 | goto label_3;
| }
0x000c1742 ldrd sl, r6, [sp, 0x2c] | __asm ("ldrd sl, r6, [var_2ch]");
| label_35:
0x000c1746 cmp r0, 0x65 |
| if (r0 == 0x65) {
0x000c1748 beq 0xc17ca | goto label_15;
| }
0x000c174a b 0xc1754 | goto label_40;
| label_39:
0x000c174c cmp r0, 0x65 |
0x000c174e ldrd sl, r6, [sp, 0x2c] | __asm ("ldrd sl, r6, [var_2ch]");
| if (r0 == 0x65) {
0x000c1752 beq 0xc17c2 | goto label_41;
| }
| label_40:
0x000c1754 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c1756 mov r1, r0 | r1 = r0;
| label_16:
0x000c1758 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000c175c mov r0, r5 | r0 = r5;
0x000c175e str r1, [sp, 0x14] | var_14h = r1;
0x000c1760 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000c1762 ldr r1, [sp, 0x14] | r1 = var_14h;
| label_8:
0x000c1764 ldr r0, [sp, 0xa8] | r0 = var_88h;
0x000c1766 str r1, [sp, 0x14] | var_14h = r1;
0x000c1768 bl 0x26dbc | fcn_00026dbc (r0);
0x000c176c ldr r6, [sp, 0x28] | r6 = var_28h;
0x000c176e ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000c1772 bl 0x7a69c | fcn_0007a69c (r0);
0x000c1776 ldr r5, [sp, 0x70] | r5 = var_70h;
0x000c1778 movs r3, 0 | r3 = 0;
0x000c177a ldr r1, [sp, 0x14] | r1 = var_14h;
0x000c177c str.w r3, [r6, 0xfc] | __asm ("str.w r3, [r6, 0xfc]");
| label_10:
0x000c1780 mov r0, r4 | r0 = r4;
0x000c1782 bl 0x4004c | fcn_0004004c (r0, r1);
0x000c1786 mov r0, r5 | r0 = r5;
0x000c1788 bl 0x26dbc | fcn_00026dbc (r0);
0x000c178c b 0xc144e | goto label_4;
| label_38:
0x000c178e lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000c1790 it pl |
| if (r2 < r3) {
0x000c1792 movpl r0, 1 | r0 = 1;
| }
0x000c1794 bmi 0xc17de |
| while (1) {
0x000c1796 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x000c179a subs r3, 2 | r3 -= 2;
0x000c179c add r6, r0 | r6 += r0;
0x000c179e str.w sl, [sp, 0x18] | __asm ("str.w sl, [var_18h]");
0x000c17a2 str.w r6, [sl] | __asm ("str.w r6, [sl]");
0x000c17a6 adds r2, r2, r3 | r2 += r3;
0x000c17a8 str.w r2, [sl, 8] | __asm ("str.w r2, [sl, 8]");
0x000c17ac ldr.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x000c17b0 adc.w r2, r2, r3, asr 31 | __asm ("adc.w r2, r2, r3, asr 31");
0x000c17b4 ldr r3, [sp, 0x20] | r3 = var_0h;
0x000c17b6 str.w r2, [sl, 0xc] | __asm ("str.w r2, [sl, 0xc]");
0x000c17ba str r3, [sp, 0x14] | var_14h = r3;
0x000c17bc ldr.w sl, [sp, 0x24] | sl = var_4h_3;
0x000c17c0 b 0xc1700 | goto label_5;
| label_41:
0x000c17c2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000c17c4 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000c17c6 cmp r3, 0 |
| if (r3 == 0) {
0x000c17c8 beq 0xc189e | goto label_42;
| }
| label_15:
0x000c17ca ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000c17ce mov r0, r5 | r0 = r5;
0x000c17d0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| label_7:
0x000c17d2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000c17d4 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000c17d6 cmp r6, r3 |
| if (r6 >= r3) {
0x000c17d8 bge 0xc18ac | goto label_43;
| }
0x000c17da str r6, [sp, 0x1c] | var_1ch = r6;
0x000c17dc b 0xc15a4 | goto label_6;
0x000c17de add r1, sp, 0x80 | r1 += var_80h;
0x000c17e0 mov r0, r6 | r0 = r6;
0x000c17e2 bl 0x24218 | fcn_00024218 (r0, r1);
0x000c17e6 ldr r3, [sp, 0x80] | r3 = var_80h;
0x000c17e8 b 0xc1796 |
| }
| label_33:
0x000c17ea cmp r4, 0 |
| if (r4 == 0) {
0x000c17ec beq 0xc1876 | goto label_44;
| }
0x000c17ee mov r0, r4 | r0 = r4;
0x000c17f0 bl 0x2e7ac | fcn_0002e7ac (r0);
0x000c17f4 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000c17f8 mov r1, r6 | r1 = r6;
0x000c17fa bl 0x3db60 | fcn_0003db60 (r0);
| label_14:
0x000c17fe ldr.w r4, [sl, 0xc] | r4 = *((sl + 0xc));
0x000c1802 mov r1, r6 | r1 = r6;
0x000c1804 mov r0, r4 | r0 = r4;
0x000c1806 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000c180a ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000c180c ldr r2, [sp, 0x54] | r2 = var_34h_2;
0x000c180e and r3, r3, 0x3f | r3 &= 0x3f;
0x000c1812 add r3, r2 | r3 += r2;
0x000c1814 ldrb.w r5, [r3, 0x258] | r5 = *((r3 + 0x258));
| if (r4 != 0) {
0x000c1818 cbz r4, 0xc1820 |
0x000c181a mov r0, r4 | r0 = r4;
0x000c181c bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000c1820 cmp r5, 5 |
| if (r5 == 5) {
0x000c1822 beq 0xc17d2 | goto label_7;
| }
0x000c1824 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c1826 movs r1, 7 | r1 = 7;
0x000c1828 b 0xc1764 | goto label_8;
| label_27:
0x000c182a ldr r3, [sp, 0x88] | r3 = var_88h;
0x000c182c str r2, [sp, 0x18] | var_18h = r2;
0x000c182e str r0, [sp, 0x14] | var_14h = r0;
0x000c1830 cmp r0, 0 |
| if (r0 == 0) {
0x000c1832 beq.w 0xc154c | goto label_9;
| }
0x000c1836 ldr r0, [sp, 0xa8] | r0 = var_88h;
0x000c1838 bl 0x26dbc | fcn_00026dbc (r0);
0x000c183c ldr r6, [sp, 0x28] | r6 = var_28h;
0x000c183e ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000c1842 bl 0x7a69c | fcn_0007a69c (r0);
0x000c1846 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000c1848 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000c184a mov r5, r2 | r5 = r2;
0x000c184c str.w r2, [r6, 0xfc] | __asm ("str.w r2, [r6, 0xfc]");
0x000c1850 b 0xc1780 | goto label_10;
| label_34:
0x000c1852 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x000c1854 cmp r3, 1 |
0x000c1856 it eq |
| if (r3 == 1) {
0x000c1858 ldreq r5, [r0, 8] | r5 = *((r0 + 8));
| goto label_45;
| }
| if (r3 != 1) {
| label_45:
0x000c185a bne.w 0xc161c | goto label_11;
| }
0x000c185e cmp r4, 0 |
| if (r4 != 0) {
0x000c1860 bne.w 0xc162c | goto label_12;
| }
0x000c1864 b 0xc1632 | goto label_13;
| label_25:
0x000c1866 ldr r1, [pc, 0xb0] |
0x000c1868 movs r3, 1 | r3 = 1;
0x000c186a mov r0, r4 | r0 = r4;
0x000c186c str r2, [sp] | *(sp) = r2;
0x000c186e add r1, pc | r1 = 0x18318c;
0x000c1870 bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c1874 b 0xc144e | goto label_4;
| label_44:
0x000c1876 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000c187a mov r1, r6 | r1 = r6;
0x000c187c bl 0x3db60 | fcn_0003db60 (r0);
0x000c1880 b 0xc17fe | goto label_14;
| label_28:
0x000c1882 bl 0x26dbc | fcn_00026dbc (r0);
0x000c1886 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000c1888 ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000c188c bl 0x7a69c | fcn_0007a69c (r0);
0x000c1890 movs r1, 7 | r1 = 7;
0x000c1892 str.w r5, [r6, 0xfc] | __asm ("str.w r5, [r6, 0xfc]");
0x000c1896 b 0xc1780 | goto label_10;
| label_37:
0x000c1898 ldrd sl, r6, [sp, 0x2c] | __asm ("ldrd sl, r6, [var_2ch]");
0x000c189c b 0xc17ca | goto label_15;
| label_42:
0x000c189e ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c18a0 movw r1, 0x10b | r1 = 0x10b;
0x000c18a4 b 0xc1758 | goto label_16;
| label_32:
0x000c18a6 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c18a8 mov r1, r0 | r1 = r0;
0x000c18aa b 0xc1764 | goto label_8;
| label_43:
0x000c18ac ldr r6, [sp, 0x74] | r6 = var_74h;
0x000c18ae ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c18b0 ldr r5, [sp, 0xa8] | r5 = var_88h;
0x000c18b2 ldr r7, [sp, 0x70] | r7 = var_70h;
0x000c18b4 subs r6, 1 | r6--;
| do {
0x000c18b6 mov r0, r5 | r0 = r5;
0x000c18b8 bl 0x26dbc | fcn_00026dbc (r0);
0x000c18bc ldr r5, [sp, 0x28] | r5 = var_28h;
0x000c18be ldr.w r0, [r5, 0xfc] | r0 = *((r5 + 0xfc));
0x000c18c2 bl 0x7a69c | fcn_0007a69c (r0);
0x000c18c6 movs r3, 0 | r3 = 0;
0x000c18c8 mov r2, r6 | r2 = r6;
0x000c18ca str.w r3, [r5, 0xfc] | __asm ("str.w r3, [r5, 0xfc]");
0x000c18ce mov r1, r7 | r1 = r7;
0x000c18d0 ldr r5, [pc, 0x48] |
0x000c18d2 movs r3, 1 | r3 = 1;
0x000c18d4 mov r0, r4 | r0 = r4;
0x000c18d6 add r5, pc | r5 = 0x1831f6;
0x000c18d8 str r5, [sp] | *(sp) = r5;
0x000c18da bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c18de b 0xc144e | goto label_4;
| label_29:
0x000c18e0 mov.w r6, -1 | r6 = -1;
0x000c18e4 movs r7, 0 | r7 = 0;
0x000c18e6 b 0xc18b6 |
| } while (1);
| label_24:
0x000c18e8 blx 0x6430 | fcn_00006430 ();
0x000c18ec ldrh r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000c18ee movs r2, r0 | r2 = r0;
0x000c18f0 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c18f2 movs r0, r0 |
0x000c18f4 strh r6, [r5, 0x1c] | *((r5 + 0x1c)) = r6;
0x000c18f6 movs r1, r0 | r1 = r0;
0x000c18f8 ldrh r2, [r0, 0xa] | r2 = *((r0 + 0xa));
0x000c18fa movs r2, r0 | r2 = r0;
0x000c18fc adds r2, 0x42 | r2 += 0x42;
0x000c18fe movs r1, r0 | r1 = r0;
0x000c1900 ldrh r4, [r1, 0x14] | r4 = *((r1 + 0x14));
0x000c1902 movs r1, r0 | r1 = r0;
0x000c1904 ldrh r0, [r6, 6] | r0 = *((r6 + 6));
0x000c1906 movs r2, r0 | r2 = r0;
0x000c1908 adds r3, 0xeb | r3 += 0xeb;
0x000c190a invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc1920 */
| #include <stdint.h>
|
; (fcn) fcn.000c1920 () | void fcn_000c1920 (int16_t arg_10h, int16_t arg_14h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_8h;
| arithmetic x;
| int16_t var_10h;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int32_t var_a0h_2;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_dch;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_f0h;
| int16_t var_f4h;
| int16_t var_100h;
| int32_t var_100h_2;
| int16_t var_108h;
| int16_t var_10ch;
| int16_t var_110h;
| int16_t var_114h;
| int16_t var_118h;
| int16_t var_17ch;
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000c1920 invalid |
0x000c1924 ldr r4, [pc, 0x84] |
0x000c1926 mov r1, r0 | r1 = r0;
0x000c1928 sub sp, 0x10 |
0x000c192a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000c192e ldr r0, [pc, 0x80] | r0 = *(0xc19b2);
0x000c1930 mov ip, r2 |
0x000c1932 add r4, pc | r4 = 0x1832e2;
0x000c1934 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000c1936 lsls r3, r3, 3 | r3 <<= 3;
0x000c1938 ldr r0, [r4, r0] |
0x000c193a adds r5, r2, r3 | r5 = r2 + r3;
0x000c193c ldr r0, [r0] | r0 = imp.atan;
0x000c193e str r0, [sp, 0xc] | var_ch = r0;
0x000c1940 mov.w r0, 0 | r0 = 0;
0x000c1944 ldr r0, [r1, 0x14] | r0 = *((r1 + 0x14));
0x000c1946 ldr r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x000c1948 str r0, [r2, r3] | *((r2 + r3)) = r0;
0x000c194a add r3, sp, 4 | r3 += var_4h;
0x000c194c ldrd r0, r2, [ip] | __asm ("ldrd r0, r2, [ip]");
0x000c1950 bl 0xc0da0 | fcn_000c0da0 (r0, r1, r2, r3, r4, r5, r6);
0x000c1954 ldr r4, [sp, 4] | r4 = var_4h;
0x000c1956 mov r6, r0 | r6 = r0;
| if (r4 == 0) {
0x000c1958 cbz r4, 0xc1980 | goto label_45;
| }
0x000c195a str r4, [r5, 4] | *((r5 + 4)) = r4;
0x000c195c ldrb r3, [r4] | r3 = *(r4);
0x000c195e lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000c1960 it pl |
| if (r2 < r3) {
0x000c1962 movpl r0, 1 | r0 = 1;
| }
0x000c1964 bmi 0xc199a |
| while (1) {
0x000c1966 subs r3, 2 | r3 -= 2;
0x000c1968 itett pl |
| if (r3 >= 2) {
0x000c196a asrpl r2, r3, 0x1f | __asm ("asrpl r2, r3, 0x1f");
| }
| if (r3 < 2) {
0x000c196c movwmi r6, 0x10b | __asm ("movwmi r6, 0x10b");
| }
| if (r3 < 2) {
0x000c1970 addpl r4, r4, r0 | r4 += r0;
| }
| if (r3 >= 2) {
0x000c1972 str r4, [r5, 0x10] | *((r5 + 0x10)) = r4;
| }
0x000c1974 ittt pl |
| if (r3 < 2) {
0x000c1976 strpl r4, [r5, 0x20] | *((r5 + 0x20)) = r4;
| }
| if (r3 >= 2) {
0x000c1978 strdpl r3, r2, [r5, 8] | __asm ("strdpl r3, r2, [r5, 8]");
| }
| if (r3 >= 2) {
0x000c197c strd r3, r2, [r5, 0x18] | __asm ("strd r3, r2, [r5, 0x18]");
| }
| label_45:
0x000c1980 ldr r2, [pc, 0x30] |
0x000c1982 ldr r3, [pc, 0x2c] | r3 = *(0xc19b2);
0x000c1984 add r2, pc | r2 = 0x18333c;
0x000c1986 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c1988 ldr r2, [r3] | r2 = imp.atan;
0x000c198a ldr r3, [sp, 0xc] | r3 = var_ch;
0x000c198c eors r2, r3 | r2 ^= r3;
0x000c198e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c1992 bne 0xc19a6 | goto label_46;
| }
0x000c1994 mov r0, r6 | r0 = r6;
0x000c1996 add sp, 0x10 |
0x000c1998 pop {r4, r5, r6, pc} |
0x000c199a add r1, sp, 8 | r1 += var_8h_2;
0x000c199c mov r0, r4 | r0 = r4;
0x000c199e bl 0x24218 | fcn_00024218 (r0, r1);
0x000c19a2 ldr r3, [sp, 8] | r3 = var_8h_2;
0x000c19a4 b 0xc1966 |
| }
| label_46:
0x000c19a6 blx 0x6430 | fcn_00006430 ();
0x000c19aa nop |
0x000c19ac strh r6, [r4, 0x22] | *((r4 + 0x22)) = r6;
0x000c19ae movs r2, r0 | r2 = r0;
0x000c19b0 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c19b2 movs r0, r0 |
0x000c19b4 strh r4, [r2, 0x20] | *((r2 + 0x20)) = r4;
0x000c19b6 movs r2, r0 | r2 = r0;
0x000c19b8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c19bc mov r5, r1 | r5 = r1;
0x000c19be ldr.w r1, [pc, 0xb74] |
0x000c19c2 cmp r5, 6 |
0x000c19c4 sub sp, 0x184 |
0x000c19c6 mov r4, r0 | r4 = r0;
0x000c19c8 ldr.w r3, [pc, 0xb6c] | r3 = *(0xc2538);
0x000c19cc add r1, pc | r1 = 0x183f06;
0x000c19ce ldr r3, [r1, r3] |
0x000c19d0 ldr r3, [r3] | r3 = imp.atan;
0x000c19d2 str r3, [sp, 0x17c] | var_17ch = r3;
0x000c19d4 mov.w r3, 0 | r3 = 0;
| if (r5 <= 6) {
0x000c19d8 bgt 0xc1a1a |
0x000c19da ldr r7, [r2] | r7 = *(r2);
0x000c19dc movw r3, 0xfbf | r3 = 0xfbf;
0x000c19e0 mov r6, r2 | r6 = r2;
0x000c19e2 movw r2, 0xa01 | r2 = 0xa01;
0x000c19e6 ldrh r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x000c19e8 ands r3, r1 | r3 &= r1;
0x000c19ea cmp r3, r2 |
| if (r3 != r2) {
0x000c19ec bne 0xc1a5a | goto label_47;
| }
0x000c19ee ldrb r3, [r7, 0x13] | r3 = *((r7 + 0x13));
0x000c19f0 cmp r3, 0x70 |
| if (r3 != 0x70) {
0x000c19f2 bne 0xc1a5a | goto label_47;
| }
0x000c19f4 ldr.w r1, [pc, 0xb44] |
0x000c19f8 ldr r0, [r7] | r0 = *(r7);
0x000c19fa add r1, pc | r1 = 0x183f3a;
0x000c19fc blx 0x6634 | r0 = fcn_00006634 ();
| if (r0 != 0) {
0x000c1a00 cbnz r0, 0xc1a5a | goto label_47;
| }
0x000c1a02 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x000c1a04 str r3, [sp, 0x44] | var_44h = r3;
| if (r3 == 0) {
0x000c1a06 cbz r3, 0xc1a5a | goto label_47;
| }
0x000c1a08 subs r5, 2 | r5 -= 2;
0x000c1a0a cmp r5, 4 |
| if (r5 > 4) {
0x000c1a0c bhi.w 0xc1c14 | goto label_48;
| }
| /* switch table (5 cases) at 0xc1a14 */
0x000c1a10 tbb [pc, r5] | __asm ("tbb [0x000c1a18]");
| }
0x000c1a1a ldr.w r1, [pc, 0xb24] |
0x000c1a1e movs r5, 1 | r5 = 1;
0x000c1a20 mov.w r6, -1 | r6 = -1;
0x000c1a24 ldr r0, [r0] | r0 = *(r0);
0x000c1a26 mov.w r2, -1 | r2 = -1;
0x000c1a2a str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000c1a2c add r1, pc | r1 = 0x183f72;
0x000c1a2e mov.w r3, -1 | r3 = -1;
0x000c1a32 strd r5, r6, [sp] | __asm ("strd r5, r6, [sp]");
0x000c1a36 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
| do {
| label_4:
0x000c1a3a ldr.w r2, [pc, 0xb08] |
0x000c1a3e ldr.w r3, [pc, 0xaf8] | r3 = *(0xc253a);
0x000c1a42 add r2, pc | r2 = 0x183f8c;
0x000c1a44 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c1a46 ldr r2, [r3] | r2 = imp.atan;
0x000c1a48 ldr r3, [sp, 0x17c] | r3 = var_17ch;
0x000c1a4a eors r2, r3 | r2 ^= r3;
0x000c1a4c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c1a50 bne.w 0xc2184 | goto label_49;
| }
0x000c1a54 add sp, 0x184 |
0x000c1a56 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_47:
0x000c1a5a ldr.w r1, [pc, 0xaec] |
0x000c1a5e ldr.w r0, [pc, 0xaec] |
0x000c1a62 add r1, pc | r1 = 0x183fb0;
0x000c1a64 add r0, pc | r0 = 0x183fb6;
0x000c1a66 bl 0x5cb60 | fcn_0005cb60 ();
0x000c1a6a movs r1, 1 | r1 = 1;
0x000c1a6c mov r5, r0 | r5 = r0;
0x000c1a6e mov.w r3, -1 | r3 = -1;
0x000c1a72 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x000c1a74 ldr r0, [r4] | r0 = *(r4);
0x000c1a76 mov.w r2, -1 | r2 = -1;
0x000c1a7a str r3, [sp, 4] | var_4h_2 = r3;
0x000c1a7c mov.w r3, -1 | r3 = -1;
0x000c1a80 str r1, [sp] | *(sp) = r1;
0x000c1a82 mov r1, r5 | r1 = r5;
0x000c1a84 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x000c1a88 ldr.w r2, [pc, 0xac4] |
0x000c1a8c ldr.w r3, [pc, 0xaa8] | r3 = *(0xc2538);
0x000c1a90 add r2, pc | r2 = 0x183fe4;
0x000c1a92 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c1a94 ldr r2, [r3] | r2 = imp.atan;
0x000c1a96 ldr r3, [sp, 0x17c] | r3 = var_17ch;
0x000c1a98 eors r2, r3 | r2 ^= r3;
0x000c1a9a mov.w r3, 0 | r3 = 0;
0x000c1a9e it eq |
| if (r2 != r3) {
0x000c1aa0 moveq r0, r5 | r0 = r5;
| }
| if (r2 != r3) {
0x000c1aa2 bne.w 0xc2184 | goto label_49;
| }
| label_20:
0x000c1aa6 add sp, 0x184 |
0x000c1aa8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c1aac b.w 0x26dbc | void (*0x26dbc)() ();
0x000c1ab0 movs r5, 0xf | r5 = 0xf;
| label_3:
0x000c1ab2 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x000c1ab4 bl 0x298e8 | fcn_000298e8 (r0);
0x000c1ab8 str r0, [sp, 0x4c] | var_4ch = r0;
| label_1:
0x000c1aba ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000c1abc str r3, [sp, 0x40] | var_40h = r3;
| if (r3 != 0) {
0x000c1abe cbz r3, 0xc1adc |
0x000c1ac0 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c1ac2 movw r2, 0x202 | r2 = 0x202;
0x000c1ac6 bics r2, r3 | __asm ("bics r2, r3");
| if (r3 == 0) {
0x000c1ac8 beq.w 0xc2086 | goto label_50;
| }
| label_14:
0x000c1acc lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x000c1ace bmi.w 0xc2098 | goto label_51;
| }
0x000c1ad2 ldr r0, [sp, 0x40] | r0 = var_40h;
0x000c1ad4 movs r1, 1 | r1 = 1;
0x000c1ad6 bl 0x3da00 | fcn_0003da00 (r0, r1);
0x000c1ada str r0, [sp, 0x40] | var_40h = r0;
| }
| label_0:
0x000c1adc ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000c1ade str r3, [sp, 0x48] | var_48h = r3;
| if (r3 != 0) {
0x000c1ae0 cbz r3, 0xc1afe |
0x000c1ae2 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c1ae4 movw r2, 0x202 | r2 = 0x202;
0x000c1ae8 bics r2, r3 | __asm ("bics r2, r3");
| if (r3 == 0) {
0x000c1aea beq.w 0xc1c02 | goto label_52;
| }
| label_7:
0x000c1aee lsls r7, r3, 0x1f | r7 = r3 << 0x1f;
| if (r7 < r3) {
0x000c1af0 bmi.w 0xc2078 | goto label_53;
| }
0x000c1af4 ldr r0, [sp, 0x48] | r0 = var_48h;
0x000c1af6 movs r1, 1 | r1 = 1;
0x000c1af8 bl 0x3da00 | fcn_0003da00 (r0, r1);
0x000c1afc str r0, [sp, 0x48] | var_48h = r0;
| }
| label_2:
0x000c1afe ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000c1b00 cmp r0, 0 |
| if (r0 == 0) {
0x000c1b02 beq 0xc1b8e | goto label_54;
| }
0x000c1b04 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000c1b06 movw r2, 0x202 | r2 = 0x202;
0x000c1b0a bics r2, r3 | __asm ("bics r2, r3");
| if (r0 == 0) {
0x000c1b0c beq 0xc1bde | goto label_55;
| }
| label_5:
0x000c1b0e lsls r6, r3, 0x1f | r6 = r3 << 0x1f;
| if (r6 < r3) {
0x000c1b10 bmi 0xc1b8e | goto label_54;
| }
0x000c1b12 movs r1, 1 | r1 = 1;
0x000c1b14 bl 0x3da00 | fcn_0003da00 (r0, r1);
0x000c1b18 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000c1b1a ldr r2, [sp, 0x48] | r2 = var_48h;
0x000c1b1c str r0, [sp, 0x68] | var_68h = r0;
0x000c1b1e cmp r2, 0 |
0x000c1b20 it ne |
| if (r2 != 0) {
0x000c1b22 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x000c1b24 ite eq |
| if (r2 != 0) {
0x000c1b26 moveq r3, 1 | r3 = 1;
| }
| if (r2 == 0) {
0x000c1b28 movne r3, 0 | r3 = 0;
| }
0x000c1b2a cmp r0, 0 |
0x000c1b2c it eq |
| if (r0 != 0) {
0x000c1b2e orreq r3, r3, 1 | r3 |= 1;
| }
| if (r3 != 0) {
| label_6:
0x000c1b32 cbnz r3, 0xc1b8e | goto label_54;
| }
0x000c1b34 cmp r5, 0 |
| if (r5 != 0) {
0x000c1b36 bne 0xc1c34 | goto label_56;
| }
0x000c1b38 ldr.w r1, [pc, 0xa18] |
0x000c1b3c movs r3, 1 | r3 = 1;
0x000c1b3e mov.w r2, -1 | r2 = -1;
0x000c1b42 mov r0, r4 | r0 = r4;
0x000c1b44 str r5, [sp] | *(sp) = r5;
0x000c1b46 add r1, pc | r1 = 0x18409e;
0x000c1b48 bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c1b4c b 0xc1a3a |
| } while (1);
0x000c1b4e mov.w r3, -1 | r3 = -1;
0x000c1b52 movs r5, 0xf | r5 = 0xf;
0x000c1b54 str r3, [sp, 0x4c] | var_4ch = r3;
0x000c1b56 ldr.w r3, [pc, 0xa00] |
0x000c1b5a add r3, pc | r3 = 0x1840b8;
0x000c1b5c str r3, [sp, 0x40] | var_40h = r3;
0x000c1b5e b 0xc1adc | goto label_0;
0x000c1b60 mov.w r3, -1 | r3 = -1;
0x000c1b64 movs r5, 0xf | r5 = 0xf;
0x000c1b66 str r3, [sp, 0x4c] | var_4ch = r3;
0x000c1b68 b 0xc1aba | goto label_1;
0x000c1b6a mov.w r3, -1 | r3 = -1;
0x000c1b6e movs r5, 0xf | r5 = 0xf;
0x000c1b70 str r3, [sp, 0x4c] | var_4ch = r3;
0x000c1b72 ldr.w r3, [pc, 0x9e8] |
0x000c1b76 add r3, pc | r3 = 0x1840d8;
0x000c1b78 str r3, [sp, 0x40] | var_40h = r3;
0x000c1b7a ldr.w r3, [pc, 0x9e4] |
0x000c1b7e add r3, pc | r3 = 0x1840e4;
0x000c1b80 str r3, [sp, 0x48] | var_48h = r3;
0x000c1b82 b 0xc1afe | goto label_2;
0x000c1b84 ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x000c1b86 bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000c1b8a mov r5, r0 | r5 = r0;
0x000c1b8c b 0xc1ab2 | goto label_3;
| label_54:
0x000c1b8e ldr r0, [r4] | r0 = *(r4);
0x000c1b90 ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000c1b92 tst.w r3, 0x9000 |
0x000c1b96 itt eq |
| if ((r3 & 0x9000) != 0) {
0x000c1b98 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x9000) == 0) {
0x000c1b9a strheq r3, [r0, 0x10] | __asm ("strheq r3, [r0, 0x10]");
| }
| if ((r3 & 0x9000) != 0) {
0x000c1b9c bne.w 0xc207e | goto label_57;
| }
| label_13:
0x000c1ba0 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x000c1ba2 movs r3, 7 | r3 = 7;
0x000c1ba4 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000c1ba6 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x000c1baa cmp r3, 0 |
| if (r3 != 0) {
0x000c1bac bne.w 0xc1a3a | goto label_4;
| }
0x000c1bb0 ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x000c1bb4 cmp r3, 0 |
| if (r3 != 0) {
0x000c1bb6 bne.w 0xc1a3a | goto label_4;
| }
0x000c1bba ldr.w r2, [pc, 0x9a8] |
0x000c1bbe ldr.w r3, [pc, 0x978] | r3 = *(0xc253a);
0x000c1bc2 add r2, pc | r2 = 0x18412c;
0x000c1bc4 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c1bc6 ldr r2, [r3] | r2 = imp.atan;
0x000c1bc8 ldr r3, [sp, 0x17c] | r3 = var_17ch;
0x000c1bca eors r2, r3 | r2 ^= r3;
0x000c1bcc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c1bd0 bne.w 0xc2184 | goto label_49;
| }
0x000c1bd4 add sp, 0x184 |
0x000c1bd6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c1bda b.w 0x38024 | void (*0x38024)() ();
| label_55:
0x000c1bde ldrb r2, [r0, 0x12] | r2 = *((r0 + 0x12));
0x000c1be0 cmp r2, 1 |
| if (r2 != 1) {
0x000c1be2 bne 0xc1b0e | goto label_5;
| }
0x000c1be4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000c1be6 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000c1be8 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x000c1bea cmp r1, 0 |
0x000c1bec it ne |
| if (r1 != 0) {
0x000c1bee cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x000c1bf0 ite eq |
| if (r1 != 0) {
0x000c1bf2 moveq r3, 1 | r3 = 1;
| }
| if (r1 == 0) {
0x000c1bf4 movne r3, 0 | r3 = 0;
| }
0x000c1bf6 cmp r2, 0 |
0x000c1bf8 it eq |
| if (r2 != 0) {
0x000c1bfa orreq r3, r3, 1 | r3 |= 1;
| }
0x000c1bfe str r2, [sp, 0x68] | var_68h = r2;
0x000c1c00 b 0xc1b32 | goto label_6;
| label_52:
0x000c1c02 ldr r2, [sp, 0x48] | r2 = var_48h;
0x000c1c04 ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x000c1c06 cmp r2, 1 |
| if (r2 != 1) {
0x000c1c08 bne.w 0xc1aee | goto label_7;
| }
0x000c1c0c ldr r3, [sp, 0x48] | r3 = var_48h;
0x000c1c0e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000c1c10 str r3, [sp, 0x48] | var_48h = r3;
0x000c1c12 b 0xc1afe | goto label_2;
| label_48:
0x000c1c14 ldr.w r3, [pc, 0x950] |
0x000c1c18 movs r5, 0xf | r5 = 0xf;
0x000c1c1a add r3, pc | r3 = 0x184186;
0x000c1c1c str r3, [sp, 0x40] | var_40h = r3;
0x000c1c1e ldr.w r3, [pc, 0x94c] |
0x000c1c22 add r3, pc | r3 = 0x184194;
0x000c1c24 str r3, [sp, 0x48] | var_48h = r3;
0x000c1c26 ldr.w r3, [pc, 0x948] |
0x000c1c2a add r3, pc | r3 = 0x1841a0;
0x000c1c2c str r3, [sp, 0x68] | var_68h = r3;
0x000c1c2e mov.w r3, -1 | r3 = -1;
0x000c1c32 str r3, [sp, 0x4c] | var_4ch = r3;
| label_56:
0x000c1c34 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000c1c36 mov r0, r4 | r0 = r4;
0x000c1c38 bl 0xb5910 | fcn_000b5910 (r0, r1);
0x000c1c3c str r0, [sp, 0x7c] | var_7ch = r0;
0x000c1c3e cmp r0, 0 |
| if (r0 != 0) {
0x000c1c40 bne.w 0xc1a3a | goto label_4;
| }
0x000c1c44 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000c1c46 add r3, sp, 0xe4 | r3 += var_e4h;
0x000c1c48 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000c1c4c str r0, [sp, 0xe0] | var_e0h = r0;
0x000c1c4e ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x000c1c50 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000c1c54 ldr r3, [r1] | r3 = *(r1);
0x000c1c56 str r3, [sp, 0x54] | var_54h = r3;
0x000c1c58 cmp r2, 0 |
| if (r2 == 0) {
0x000c1c5a beq.w 0xc21d4 | goto label_58;
| }
0x000c1c5e ldr r3, [sp, 0x54] | r3 = var_54h;
0x000c1c60 cmp r5, 0x40 |
0x000c1c62 mov r7, r5 | r7 = r5;
0x000c1c64 it ge |
| if (r5 < 0x40) {
0x000c1c66 movge r7, 0x40 | r7 = 0x40;
| }
0x000c1c68 movs r1, 1 | r1 = 1;
0x000c1c6a str r4, [sp, 0x5c] | var_5ch = r4;
0x000c1c6c ldr.w r8, [r3, 0x18] | r8 = *((r3 + 0x18));
0x000c1c70 add r6, sp, 0x118 | r6 += var_118h;
0x000c1c72 ldr.w r3, [pc, 0x900] | r3 = *(0x000c2574);
0x000c1c76 mov r4, r1 | r4 = r1;
0x000c1c78 add r3, pc | r3 += pc;
0x000c1c7a str r3, [sp, 0x9c] | var_9ch = r3;
0x000c1c7c mvn r3, 0x3f | r3 = ~0x3f;
0x000c1c80 cmp r7, r3 |
0x000c1c82 it lt |
| if (r7 >= r3) {
0x000c1c84 movlt r7, r3 | r7 = r3;
| }
0x000c1c86 mov r3, r8 | r3 = r8;
0x000c1c88 mov r8, r7 | r8 = r7;
0x000c1c8a mov r7, r5 | r7 = r5;
0x000c1c8c mov r5, r3 | r5 = r3;
| label_18:
0x000c1c8e cmp r7, 0 |
0x000c1c90 itt lt |
| if (r7 < 0) {
0x000c1c92 rsblt r3, r8, 0 | __asm ("rsblt r3, r8, 0");
| }
| if (r7 < 0) {
0x000c1c96 str r3, [sp, 0x58] | var_58h = r3;
| }
| if (r7 >= 0) {
0x000c1c98 blt 0xc1ca8 |
0x000c1c9a add.w r0, r8, -1 | r0 = r8 + -1;
0x000c1c9e mov r1, r4 | r1 = r4;
0x000c1ca0 add r0, r4 | r0 += r4;
0x000c1ca2 bl 0xc4780 | fcn_000c4780 (r0, r1);
0x000c1ca6 str r0, [sp, 0x58] | var_58h = r0;
| }
0x000c1ca8 add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x000c1cac ldr.w lr, [sp, 0x7c] | lr = var_7ch;
0x000c1cb0 mov ip, r6 |
0x000c1cb2 strd r7, r4, [sp, 0xa0] | __asm ("strd r7, r4, [var_a0h]");
0x000c1cb6 add.w sb, r6, r3, lsl 3 | sb = r6 + (r3 << 3);
0x000c1cba movs r3, 0 | r3 = 0;
0x000c1cbc str r3, [sp, 0x70] | var_70h = r3;
0x000c1cbe str r3, [sp, 0x74] | var_74h = r3;
0x000c1cc0 mov sl, sb | sl = sb;
0x000c1cc2 strd r3, r3, [sp, 0x24] | __asm ("strd r3, r3, [var_24h]");
0x000c1cc6 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c1cc8 str r6, [sp, 0xa8] | var_a8h = r6;
0x000c1cca mvns r3, r3 | r3 = ~r3;
0x000c1ccc lsrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000c1cce str r3, [sp, 0x60] | var_60h = r3;
| label_17:
0x000c1cd0 cmp r5, 0 |
0x000c1cd2 strd lr, lr, [ip] | __asm ("strd lr, lr, [ip]");
0x000c1cd6 strd lr, lr, [ip, 8] | __asm ("strd lr, lr, [ip, 8]");
0x000c1cda strd lr, lr, [ip, 0x10] | __asm ("strd lr, lr, [ip, 0x10]");
| if (r5 <= 0) {
0x000c1cde ble.w 0xc20fa | goto label_59;
| }
0x000c1ce2 movs r3, 0 | r3 = 0;
0x000c1ce4 mov.w fp, 1 |
0x000c1ce8 mov sb, r3 | sb = r3;
0x000c1cea mov.w r2, -1 | r2 = -1;
0x000c1cee str r2, [sp, 0x6c] | var_6ch = r2;
0x000c1cf0 str.w lr, [sp, 0x64] | __asm ("str.w lr, [var_64h]");
0x000c1cf4 str.w r8, [sp, 0xac] | __asm ("str.w r8, [var_ach]");
0x000c1cf8 str.w sl, [sp, 0xb0] | __asm ("str.w sl, [var_b0h]");
0x000c1cfc str.w ip, [sp, 0x98] | __asm ("str.w ip, [var_98h]");
0x000c1d00 str r6, [sp, 0xb4] | var_b4h = r6;
| label_16:
0x000c1d02 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000c1d04 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000c1d06 cmp sb, r2 |
0x000c1d08 ite eq |
| if (sb != r2) {
0x000c1d0a moveq r3, 0 | r3 = 0;
| }
| if (sb == r2) {
0x000c1d0c andne r3, r3, 1 | r3 &= 1;
| }
0x000c1d10 cmp r3, 0 |
| if (r3 != 0) {
0x000c1d12 bne.w 0xc20e2 | goto label_60;
| }
0x000c1d16 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000c1d18 add.w sl, sp, 0x100 | sl += var_100h;
0x000c1d1c strd r3, r3, [sp, 0x100] | __asm ("strd r3, r3, [var_100h]");
0x000c1d20 strd r3, r3, [sp, 0x108] | __asm ("strd r3, r3, [var_108h]");
0x000c1d24 strd r3, r3, [sp, 0x110] | __asm ("strd r3, r3, [var_110h]");
0x000c1d28 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000c1d2c ldr r4, [r2, 0x10] | r4 = *((r2 + 0x10));
0x000c1d2e str r3, [sp, 0xdc] | var_dch = r3;
0x000c1d30 add r3, sp, 0xf4 | r3 += var_f4h;
0x000c1d32 str r2, [sp, 0xf0] | var_f0h = r2;
0x000c1d34 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000c1d38 ldr r5, [r4] | r5 = *(r4);
0x000c1d3a cmp r5, 5 |
| if (r5 == 5) {
0x000c1d3c beq.w 0xc21ba | goto label_61;
| }
0x000c1d40 ldr.w r8, [pc, 0x834] | r8 = *(0x000c2578);
0x000c1d44 add r6, sp, 0xf0 | r6 += var_f0h;
0x000c1d46 add r7, sp, 0xdc | r7 += var_dch;
0x000c1d48 add r8, pc | r8 += pc;
| do {
0x000c1d4a mov r3, r6 | r3 = r6;
0x000c1d4c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c1d4e mov r2, r8 | r2 = r8;
0x000c1d50 mov r1, r7 | r1 = r7;
0x000c1d52 bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c1d56 clz r3, r0 | r3 &= r0;
0x000c1d5a cmp r5, 2 |
0x000c1d5c lsr.w r3, r3, 5 | r3 >>= 5;
0x000c1d60 it eq |
| if (r5 != 2) {
0x000c1d62 moveq r3, 0 | r3 = 0;
| }
0x000c1d64 cmp r3, 0 |
| if (r3 == 0) {
0x000c1d66 beq.w 0xc2146 | goto label_62;
| }
0x000c1d6a ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c1d6c ldr r5, [r4] | r5 = *(r4);
0x000c1d6e cmp r5, 5 |
0x000c1d70 bne 0xc1d4a |
| } while (r5 != 5);
0x000c1d72 ldr r7, [sp, 0xf4] | r7 = var_f4h;
0x000c1d74 adds r7, 1 | r7++;
0x000c1d76 add.w r0, r7, r7, lsl 2 | r0 = r7 + (r7 << 2);
0x000c1d7a lsls r0, r0, 3 | r0 <<= 3;
| label_23:
0x000c1d7c movs r1, 0 | r1 = 0;
0x000c1d7e bl 0x5ac48 | fcn_0005ac48 (r0, r1);
0x000c1d82 str r0, [sp, 0x110] | var_110h = r0;
0x000c1d84 cmp r0, 0 |
| if (r0 == 0) {
0x000c1d86 beq.w 0xc21b2 | goto label_63;
| }
0x000c1d8a ldr r3, [sp, 0x44] | r3 = var_44h;
0x000c1d8c ldr r2, [sp, 0x58] | r2 = var_58h;
0x000c1d8e ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x000c1d90 strd r3, sb, [sp, 0x100] | __asm ("strd r3, sb, [var_100h]");
0x000c1d94 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c1d96 strd r2, r7, [sp, 0x108] | __asm ("strd r2, r7, [var_108h]");
0x000c1d9a str r3, [sp, 0xf0] | var_f0h = r3;
0x000c1d9c mov.w r3, -1 | r3 = -1;
0x000c1da0 ldr r5, [r4] | r5 = *(r4);
0x000c1da2 str r3, [sp, 0x114] | var_114h = r3;
0x000c1da4 cmp r5, 5 |
| if (r5 == 5) {
0x000c1da6 beq.w 0xc21c0 | goto label_64;
| }
0x000c1daa ldr.w r8, [sp, 0x9c] | r8 = var_9ch;
0x000c1dae add r6, sp, 0xf0 | r6 += var_f0h;
| do {
0x000c1db0 mov r3, sl | r3 = sl;
0x000c1db2 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c1db4 mov r2, r8 | r2 = r8;
0x000c1db6 mov r1, r6 | r1 = r6;
0x000c1db8 bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c1dbc clz r3, r0 | r3 &= r0;
0x000c1dc0 cmp r5, 2 |
0x000c1dc2 lsr.w r3, r3, 5 | r3 >>= 5;
0x000c1dc6 it eq |
| if (r5 != 2) {
0x000c1dc8 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000c1dca cbz r3, 0xc1dde | goto label_65;
| }
0x000c1dcc ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c1dce ldr r5, [r4] | r5 = *(r4);
0x000c1dd0 cmp r5, 5 |
0x000c1dd2 bne 0xc1db0 |
| } while (r5 != 5);
0x000c1dd4 ldr r1, [sp, 0xf0] | r1 = var_f0h;
| label_25:
0x000c1dd6 mov r2, sl | r2 = sl;
0x000c1dd8 mov r0, r4 | r0 = r4;
0x000c1dda bl 0xc1920 | r0 = fcn_000c1920 (r0, r1, r2, r3, r4);
| label_65:
0x000c1dde cmp r0, 0 |
| if (r0 != 0) {
0x000c1de0 bne.w 0xc2190 | goto label_66;
| }
0x000c1de4 cmp r7, 0 |
0x000c1de6 it le |
| if (r7 > 0) {
0x000c1de8 ldrle r0, [sp, 0x110] | r0 = var_110h;
| }
| if (r7 <= 0) {
0x000c1dea ble 0xc1e26 | goto label_67;
| }
0x000c1dec mov r3, r0 | r3 = r0;
0x000c1dee ldr r0, [sp, 0x110] | r0 = var_110h;
0x000c1df0 ldrd r6, ip, [sp, 0x70] | __asm ("ldrd r6, ip, [var_70h]");
0x000c1df4 mov r4, r0 | r4 = r0;
| do {
0x000c1df6 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
| if (r2 != 0) {
0x000c1df8 cbz r2, 0xc1e1a |
0x000c1dfa and r2, r3, 0x3f | r2 = r3 & 0x3f;
0x000c1dfe sub.w r1, r2, 0x20 | r1 = r2 - 0x20;
0x000c1e02 rsb.w r5, r2, 0x20 | r5 = 0x20 - r2;
0x000c1e06 lsl.w r1, fp, r1 | r1 = fp << r1;
0x000c1e0a lsr.w r5, fp, r5 | r5 = fp >> r5;
0x000c1e0e lsl.w r2, fp, r2 | r2 = fp << r2;
0x000c1e12 orrs r1, r5 | r1 |= r5;
0x000c1e14 orr.w ip, r1, ip |
0x000c1e18 orrs r6, r2 | r6 |= r2;
| }
0x000c1e1a adds r3, 1 | r3++;
0x000c1e1c adds r4, 0x28 | r4 += 0x28;
0x000c1e1e cmp r7, r3 |
0x000c1e20 bne 0xc1df6 |
| } while (r7 != r3);
0x000c1e22 strd r6, ip, [sp, 0x70] | __asm ("strd r6, ip, [var_70h]");
| label_67:
0x000c1e26 ldr r2, [sp, 0x10c] | r2 = var_10ch;
0x000c1e28 movs r3, 0 | r3 = 0;
0x000c1e2a ldr r1, [sp, 0x114] | r1 = var_114h;
0x000c1e2c mov.w sl, -1 | sl = -1;
0x000c1e30 str r3, [sp, 0x80] | var_80h = r3;
0x000c1e32 strd r3, r3, [sp, 0x8c] | __asm ("strd r3, r3, [var_8ch]");
0x000c1e36 mov ip, r2 |
0x000c1e38 strd r3, r3, [sp, 0x84] | __asm ("strd r3, r3, [var_84h]");
0x000c1e3c add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x000c1e40 str r1, [sp, 8] | var_8h = r1;
0x000c1e42 lsls r3, r3, 3 | r3 <<= 3;
0x000c1e44 str.w sb, [sp, 0x78] | __asm ("str.w sb, [var_78h]");
0x000c1e48 str.w sl, [sp, 0x50] | __asm ("str.w sl, [var_50h]");
0x000c1e4c str r3, [sp, 0x94] | var_94h = r3;
0x000c1e4e ldr r3, [sp, 8] | r3 = var_8h;
0x000c1e50 cmp r3, 0 |
| if (r3 < 0) {
0x000c1e52 blt.w 0xc2042 | goto label_68;
| }
| label_11:
0x000c1e56 cmp.w ip, 0 |
| if (ip <= 0) {
0x000c1e5a ble.w 0xc20ae | goto label_69;
| }
| label_19:
0x000c1e5e ldr r3, [sp, 0x94] | r3 = var_94h;
0x000c1e60 mov r2, r0 | r2 = r0;
0x000c1e62 mvn r5, 0x80000000 | r5 = ~0x80000000;
0x000c1e66 adds r4, r0, r3 | r4 = r0 + r3;
| do {
0x000c1e68 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
| if (r3 != 0) {
0x000c1e6a cbz r3, 0xc1e7c |
0x000c1e6c ldrd r1, r6, [r2, 8] | __asm ("ldrd r1, r6, [r2, 8]");
0x000c1e70 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x000c1e72 cmp r1, r5 |
0x000c1e74 sbcs.w r3, r6, r3 | __asm ("sbcs.w r3, r6, r3");
0x000c1e78 it lt |
| if (r1 < r5) {
0x000c1e7a movlt r5, r1 | r5 = r1;
| goto label_70;
| }
| }
| label_70:
0x000c1e7c adds r2, 0x28 | r2 += 0x28;
0x000c1e7e cmp r2, r4 |
0x000c1e80 bne 0xc1e68 |
| } while (r2 != r4);
0x000c1e82 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000c1e86 cmp r5, r3 |
| if (r5 == r3) {
0x000c1e88 beq.w 0xc20ae | goto label_69;
| }
0x000c1e8c ldr r3, [sp, 0x108] | r3 = var_108h;
0x000c1e8e add.w r4, r0, 0x10 | r4 = r0 + 0x10;
0x000c1e92 movs r6, 0 | r6 = 0;
0x000c1e94 mov r8, ip | r8 = ip;
0x000c1e96 subs r3, r5, r3 | r3 = r5 - r3;
0x000c1e98 adds r5, 1 | r5++;
0x000c1e9a adds r7, r3, 1 | r7 = r3 + 1;
0x000c1e9c str r7, [sp, 8] | var_8h = r7;
0x000c1e9e str r7, [sp, 0x114] | var_114h = r7;
| do {
0x000c1ea0 sub.w r1, r4, 8 | r1 = r4 - 8;
0x000c1ea4 mov r0, r4 | r0 = r4;
0x000c1ea6 mov r2, r5 | r2 = r5;
0x000c1ea8 adds r6, 1 | r6++;
0x000c1eaa bl 0x2bac0 | fcn_0002bac0 (r0, r1, r2);
0x000c1eae add.w r1, r4, 8 | r1 = r4 + 8;
0x000c1eb2 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x000c1eb6 mov r2, r7 | r2 = r7;
0x000c1eb8 adds r4, 0x28 | r4 += 0x28;
0x000c1eba bl 0x2bac0 | fcn_0002bac0 (r0, r1, r2);
0x000c1ebe cmp r6, r8 |
0x000c1ec0 bne 0xc1ea0 |
| } while (r6 != r8);
0x000c1ec2 mov ip, r8 |
| label_12:
0x000c1ec4 ldr r2, [sp, 8] | r2 = var_8h;
0x000c1ec6 movs r3, 0 | r3 = 0;
0x000c1ec8 ldr r1, [sp, 0x110] | r1 = var_110h;
0x000c1eca mov sl, r3 | sl = r3;
0x000c1ecc str.w ip, [sp, 0x34] | __asm ("str.w ip, [var_34h]");
0x000c1ed0 mov sb, r3 | sb = r3;
0x000c1ed2 mov r8, r3 | r8 = r3;
0x000c1ed4 mov lr, r3 | lr = r3;
0x000c1ed6 asrs r2, r2, 0x1f | r2 >>= 0x1f;
0x000c1ed8 mov ip, r1 |
0x000c1eda mov r6, r3 | r6 = r3;
0x000c1edc str r3, [sp, 0x14] | var_14h = r3;
0x000c1ede str r2, [sp, 0x20] | var_20h = r2;
0x000c1ee0 b 0xc1ef2 |
| while (r4 == 0) {
| label_8:
0x000c1ee2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000c1ee4 add.w lr, lr, 1 | lr++;
0x000c1ee8 add.w ip, ip, 0x28 |
0x000c1eec cmp lr, r3 |
| if (lr == r3) {
0x000c1eee beq.w 0xc2018 | goto label_71;
| }
| label_10:
0x000c1ef2 ldr.w r4, [ip, 0x20] | r4 = *((ip + 0x20));
0x000c1ef6 cmp r4, 0 |
0x000c1ef8 beq 0xc1ee2 |
| }
0x000c1efa ldr r3, [sp, 0x108] | r3 = var_108h;
0x000c1efc ldr r1, [sp, 8] | r1 = var_8h;
0x000c1efe ldrd r7, r2, [ip, 0x18] | __asm ("ldrd r7, r2, [ip, 0x18]");
0x000c1f02 adds r3, r1, r3 | r3 = r1 + r3;
0x000c1f04 asrs r0, r3, 0x1f | r0 = r3 >> 0x1f;
0x000c1f06 cmp r7, r3 |
0x000c1f08 str r3, [sp, 0x18] | var_18h = r3;
0x000c1f0a sbcs.w r3, r2, r0 | __asm ("sbcs.w r3, r2, r0");
0x000c1f0e str r0, [sp, 0x1c] | var_1ch = r0;
| if (r7 >= r3) {
0x000c1f10 bge 0xc1ee2 | goto label_8;
| }
0x000c1f12 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000c1f14 cmp r7, r1 |
0x000c1f16 str r2, [sp, 0x2c] | var_2ch = r2;
0x000c1f18 sbcs.w r3, r2, r3 | __asm ("sbcs.w r3, r2, r3");
| if (r7 < r1) {
0x000c1f1c blt 0xc1ee2 | goto label_8;
| }
0x000c1f1e and r3, lr, 0x3f | r3 = lr & 0x3f;
0x000c1f22 ldr.w r5, [ip] | r5 = *(ip);
0x000c1f26 sub.w r1, r3, 0x20 | r1 = r3 - 0x20;
0x000c1f2a rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x000c1f2e lsl.w r2, fp, r1 | r2 = fp << r1;
0x000c1f32 lsr.w r0, fp, r0 | r0 = fp >> r0;
0x000c1f36 lsl.w r3, fp, r3 | r3 = fp << r3;
0x000c1f3a strd lr, ip, [sp, 0x38] | __asm ("strd lr, ip, [var_3ch]");
0x000c1f3e orrs r2, r0 | r2 |= r0;
0x000c1f40 str r2, [sp, 0x10] | var_10h = r2;
0x000c1f42 mov r2, sl | r2 = sl;
0x000c1f44 mov sl, r6 | sl = r6;
0x000c1f46 mov r6, r4 | r6 = r4;
0x000c1f48 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x000c1f4a add r1, sp, 0xf0 | r1 += var_f0h;
0x000c1f4c str r3, [sp, 0xc] | x = r3;
0x000c1f4e str r1, [sp, 0x30] | var_30h = r1;
| label_9:
0x000c1f50 ldr r3, [sp, 8] | r3 = var_8h;
0x000c1f52 sub.w lr, r7, r3 | lr = r7 - r3;
0x000c1f56 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000c1f58 sub.w r0, lr, 0x20 | r0 = lr - 0x20;
0x000c1f5c lsl.w r0, fp, r0 | r0 = fp << r0;
0x000c1f60 orr.w r1, r3, sl | r1 = r3 | sl;
0x000c1f64 ldr r3, [sp, 0xc] | r3 = x;
0x000c1f66 and.w ip, r1, r3 |
0x000c1f6a rsb.w r3, lr, 0x20 | r3 = 0x20 - lr;
0x000c1f6e lsr.w r3, fp, r3 | r3 = fp >> r3;
0x000c1f72 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000c1f74 lsl.w lr, fp, lr | lr = fp << lr;
0x000c1f78 orrs r0, r3 | r0 |= r3;
0x000c1f7a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000c1f7c orrs r3, r2 | r3 |= r2;
0x000c1f7e ands r3, r1 | r3 &= r1;
0x000c1f80 orrs.w r3, r3, ip | r3 |= ip;
0x000c1f84 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c1f86 ite ne |
| if (r3 == r3) {
0x000c1f88 addne r3, 1 | r3++;
| }
| if (r3 != r3) {
0x000c1f8a addeq r3, r3, 0x3e8 | r3 += 0x3e8;
| }
0x000c1f8e str r3, [sp, 0x14] | var_14h = r3;
0x000c1f90 cmp r5, 0 |
0x000c1f92 ldr r3, [sp, 0xc] | r3 = x;
0x000c1f94 orr.w sl, r3, sl | sl = r3 | sl;
0x000c1f98 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000c1f9a orr.w r2, r2, r3 | r2 |= r3;
| if (r5 <= 0) {
0x000c1f9e ble 0xc1fd0 | goto label_72;
| }
0x000c1fa0 movs r3, 0 | r3 = 0;
| do {
0x000c1fa2 rsb.w ip, r3, 0x20 |
0x000c1fa6 lsr.w r1, lr, r3 | r1 = lr >> r3;
0x000c1faa lsl.w ip, r0, ip |
0x000c1fae orr.w r1, r1, ip | r1 |= ip;
0x000c1fb2 sub.w ip, r3, 0x20 |
0x000c1fb6 lsr.w ip, r0, ip |
0x000c1fba orr.w r1, r1, ip | r1 |= ip;
0x000c1fbe orr.w sb, r1, sb | sb = r1 | sb;
0x000c1fc2 lsr.w r1, r0, r3 | r1 = r0 >> r3;
0x000c1fc6 adds r3, 1 | r3++;
0x000c1fc8 cmp r5, r3 |
0x000c1fca orr.w r8, r1, r8 | r8 = r1 | r8;
0x000c1fce bne 0xc1fa2 |
| } while (r5 != r3);
| label_72:
0x000c1fd0 ldrb r3, [r6] | r3 = *(r6);
0x000c1fd2 cmp r3, 1 |
| if (r3 < 1) {
0x000c1fd4 bls 0xc2000 | goto label_73;
| }
0x000c1fd6 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
0x000c1fd8 it pl |
| if (r1 < r3) {
0x000c1fda movpl r0, 1 | r0 = 1;
| }
| if (r1 < r3) {
0x000c1fdc bmi 0xc209e | goto label_74;
| }
| label_15:
0x000c1fde subs r3, 2 | r3 -= 2;
0x000c1fe0 add r6, r0 | r6 += r0;
0x000c1fe2 adds r7, r3, r7 | r7 = r3 + r7;
0x000c1fe4 adc.w r4, r4, r3, asr 31 | __asm ("adc.w r4, r4, r3, asr 31");
0x000c1fe8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000c1fea cmp r7, r3 |
0x000c1fec ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c1fee sbcs.w r3, r4, r3 | __asm ("sbcs.w r3, r4, r3");
| if (r7 >= r3) {
0x000c1ff2 bge 0xc2000 | goto label_73;
| }
0x000c1ff4 ldr r3, [sp, 8] | r3 = var_8h;
0x000c1ff6 cmp r7, r3 |
0x000c1ff8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000c1ffa sbcs.w r3, r4, r3 | __asm ("sbcs.w r3, r4, r3");
| if (r7 >= r3) {
0x000c1ffe bge 0xc1f50 | goto label_9;
| }
| label_73:
0x000c2000 ldrd lr, ip, [sp, 0x38] | __asm ("ldrd lr, ip, [var_3ch]");
0x000c2004 mov r6, sl | r6 = sl;
0x000c2006 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000c2008 mov sl, r2 | sl = r2;
0x000c200a add.w lr, lr, 1 | lr++;
0x000c200e add.w ip, ip, 0x28 |
0x000c2012 cmp lr, r3 |
| if (lr != r3) {
0x000c2014 bne.w 0xc1ef2 | goto label_10;
| }
| label_71:
0x000c2018 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c201a mov r2, r6 | r2 = r6;
0x000c201c ldr r1, [sp, 0x50] | r1 = var_50h;
0x000c201e ldr.w ip, [sp, 0x34] | ip = var_34h;
0x000c2022 cmp r3, r1 |
| if (r3 <= r1) {
0x000c2024 ble.w 0xc213c | goto label_75;
| }
0x000c2028 ldr r0, [sp, 0x110] | r0 = var_110h;
| label_26:
0x000c202a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c202c strd sb, r8, [sp, 0x8c] | __asm ("strd sb, r8, [var_8ch]");
0x000c2030 strd r2, sl, [sp, 0x84] | __asm ("strd r2, sl, [var_84h]");
0x000c2034 str r3, [sp, 0x50] | var_50h = r3;
0x000c2036 ldr r3, [sp, 8] | r3 = var_8h;
0x000c2038 str r3, [sp, 0x80] | var_80h = r3;
0x000c203a ldr r3, [sp, 8] | r3 = var_8h;
0x000c203c cmp r3, 0 |
| if (r3 >= 0) {
0x000c203e bge.w 0xc1e56 | goto label_11;
| }
| label_68:
0x000c2042 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c2044 cmp.w ip, 0 |
0x000c2048 str r3, [sp, 0x114] | var_114h = r3;
| if (ip <= 0) {
0x000c204a ble.w 0xc21a4 | goto label_76;
| }
| label_21:
0x000c204e movs r5, 0 | r5 = 0;
0x000c2050 ldr r6, [sp, 0x108] | r6 = var_108h;
0x000c2052 mov r7, r5 | r7 = r5;
0x000c2054 mov r4, ip | r4 = ip;
0x000c2056 b 0xc205a |
| while (r5 != r4) {
0x000c2058 ldr r0, [sp, 0x110] | r0 = var_110h;
0x000c205a add r0, r7 | r0 += r7;
0x000c205c adds r5, 1 | r5++;
0x000c205e add.w r1, r0, 8 | r1 = r0 + 8;
0x000c2062 mov r2, r6 | r2 = r6;
0x000c2064 adds r0, 0x10 | r0 += 0x10;
0x000c2066 adds r7, 0x28 | r7 += 0x28;
0x000c2068 bl 0x2bac0 | fcn_0002bac0 (r0, r1, r2);
0x000c206c cmp r5, r4 |
0x000c206e bne 0xc2058 |
| }
0x000c2070 movs r3, 0 | r3 = 0;
0x000c2072 mov ip, r4 |
0x000c2074 str r3, [sp, 8] | var_8h = r3;
0x000c2076 b 0xc1ec4 | goto label_12;
| label_53:
0x000c2078 movs r3, 0 | r3 = 0;
0x000c207a str r3, [sp, 0x48] | var_48h = r3;
0x000c207c b 0xc1afe | goto label_2;
| label_57:
0x000c207e bl 0x2d280 | fcn_0002d280 (r0);
0x000c2082 ldr r0, [r4] | r0 = *(r4);
0x000c2084 b 0xc1ba0 | goto label_13;
| label_50:
0x000c2086 ldr r2, [sp, 0x40] | r2 = var_40h;
0x000c2088 ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x000c208a cmp r2, 1 |
| if (r2 != 1) {
0x000c208c bne.w 0xc1acc | goto label_14;
| }
0x000c2090 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000c2092 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000c2094 str r3, [sp, 0x40] | var_40h = r3;
0x000c2096 b 0xc1adc | goto label_0;
| label_51:
0x000c2098 movs r3, 0 | r3 = 0;
0x000c209a str r3, [sp, 0x40] | var_40h = r3;
0x000c209c b 0xc1adc | goto label_0;
| label_74:
0x000c209e ldr r1, [sp, 0x30] | r1 = var_30h;
0x000c20a0 mov r0, r6 | r0 = r6;
0x000c20a2 str r2, [sp, 0x2c] | var_2ch = r2;
0x000c20a4 bl 0x24218 | fcn_00024218 (r0, r1);
0x000c20a8 ldr r3, [sp, 0xf0] | r3 = var_f0h;
0x000c20aa ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000c20ac b 0xc1fde | goto label_15;
| label_69:
0x000c20ae ldr.w sb, [sp, 0x78] | sb = var_78h;
0x000c20b2 ldr.w sl, [sp, 0x50] | sl = var_50h;
| label_24:
0x000c20b6 bl 0x26dbc | fcn_00026dbc (r0);
0x000c20ba ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000c20bc cmp sl, r3 |
| if (sl > r3) {
0x000c20be ble 0xc20de |
0x000c20c0 ldr r3, [sp, 0x98] | r3 = var_98h;
0x000c20c2 ldr r2, [sp, 0x80] | r2 = var_80h;
0x000c20c4 str.w sl, [sp, 0x6c] | __asm ("str.w sl, [var_6ch]");
0x000c20c8 str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000c20cc str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000c20ce ldr r2, [sp, 0x84] | r2 = var_84h;
0x000c20d0 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000c20d2 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000c20d4 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000c20d6 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000c20d8 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x000c20da ldr r2, [sp, 0x90] | r2 = var_90h;
0x000c20dc str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| }
0x000c20de ldr r3, [sp, 0x54] | r3 = var_54h;
0x000c20e0 ldr r5, [r3, 0x18] | r5 = *((r3 + 0x18));
| label_60:
0x000c20e2 add.w sb, sb, 1 | sb++;
0x000c20e6 cmp sb, r5 |
| if (sb < r5) {
0x000c20e8 blt.w 0xc1d02 | goto label_16;
| }
0x000c20ec ldr.w lr, [sp, 0x64] | lr = var_64h;
0x000c20f0 ldrd r8, sl, [sp, 0xac] | __asm ("ldrd r8, sl, [var_ach]");
0x000c20f4 ldr.w ip, [sp, 0x98] | ip = var_98h;
0x000c20f8 ldr r6, [sp, 0xb4] | r6 = var_b4h;
| label_59:
0x000c20fa ldr.w r3, [ip, 8] | r3 = *((ip + 8));
0x000c20fe add.w ip, ip, 0x18 |
0x000c2102 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000c2104 orrs r2, r3 | r2 |= r3;
0x000c2106 ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x000c210a str r2, [sp, 0x24] | var_24h = r2;
0x000c210c cmp sl, ip |
0x000c210e ldr r2, [sp, 0x28] | r2 = var_28h;
0x000c2110 orr.w r2, r2, r3 | r2 |= r3;
0x000c2114 str r2, [sp, 0x28] | var_28h = r2;
| if (sl != ip) {
0x000c2116 bne.w 0xc1cd0 | goto label_17;
| }
0x000c211a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000c211c ldr r2, [sp, 0x70] | r2 = var_70h;
0x000c211e ldr r1, [sp, 0x28] | r1 = var_28h;
0x000c2120 ldr r0, [sp, 0x74] | r0 = var_74h;
0x000c2122 ldrd r7, r4, [sp, 0xa0] | __asm ("ldrd r7, r4, [var_a0h]");
0x000c2126 ldr.w fp, [sp, 0xa8] | fp = var_a8h;
0x000c212a cmp r1, r0 |
0x000c212c it eq |
| if (r1 == r0) {
0x000c212e cmpeq r3, r2 | __asm ("cmpeq r3, r2");
| }
| if (r1 == r0) {
0x000c2130 beq.w 0xc2366 | goto label_77;
| }
0x000c2134 cmp r4, 4 |
| if (r4 == 4) {
0x000c2136 beq 0xc21e4 | goto label_78;
| }
0x000c2138 adds r4, 1 | r4++;
0x000c213a b 0xc1c8e | goto label_18;
| label_75:
0x000c213c ldr r3, [sp, 8] | r3 = var_8h;
0x000c213e cmp r3, 0 |
| if (r3 < 0) {
0x000c2140 blt 0xc2188 | goto label_79;
| }
0x000c2142 ldr r0, [sp, 0x110] | r0 = var_110h;
0x000c2144 b 0xc1e5e | goto label_19;
| label_62:
0x000c2146 ldr r7, [sp, 0xf4] | r7 = var_f4h;
| if (r0 == 0) {
0x000c2148 cbz r0, 0xc219c | goto label_80;
| }
0x000c214a ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000c214c mov sb, r0 | sb = r0;
| label_22:
0x000c214e ldr r5, [sp, 0x54] | r5 = var_54h;
0x000c2150 ldr.w r0, [r5, 0xfc] | r0 = *((r5 + 0xfc));
0x000c2154 bl 0x7a69c | fcn_0007a69c (r0);
0x000c2158 movs r3, 0 | r3 = 0;
0x000c215a mov r6, r3 | r6 = r3;
0x000c215c str.w r3, [r5, 0xfc] | __asm ("str.w r3, [r5, 0xfc]");
| label_32:
0x000c2160 mov r0, r4 | r0 = r4;
0x000c2162 mov r1, sb | r1 = sb;
0x000c2164 bl 0x4004c | fcn_0004004c (r0, r1);
0x000c2168 ldr.w r2, [pc, 0x410] |
0x000c216c ldr r3, [pc, 0x3c8] | r3 = *(0xc2538);
0x000c216e add r2, pc | r2 = 0x1846ee;
0x000c2170 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c2172 ldr r2, [r3] | r2 = imp.atan;
0x000c2174 ldr r3, [sp, 0x17c] | r3 = var_17ch;
0x000c2176 eors r2, r3 | r2 ^= r3;
0x000c2178 mov.w r3, 0 | r3 = 0;
0x000c217c it eq |
| if (r2 == r3) {
0x000c217e moveq r0, r6 | r0 = r6;
| goto label_81;
| }
| if (r2 == r3) {
| label_81:
0x000c2180 beq.w 0xc1aa6 | goto label_20;
| }
| label_49:
0x000c2184 blx 0x6430 | fcn_00006430 ();
| label_79:
0x000c2188 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c218a ldr r0, [sp, 0x110] | r0 = var_110h;
0x000c218c str r3, [sp, 0x114] | var_114h = r3;
0x000c218e b 0xc204e | goto label_21;
| label_66:
0x000c2190 mov sb, r0 | sb = r0;
0x000c2192 ldr r0, [sp, 0x110] | r0 = var_110h;
0x000c2194 ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000c2196 bl 0x26dbc | fcn_00026dbc (r0);
0x000c219a b 0xc214e | goto label_22;
| label_80:
0x000c219c add.w r0, r7, r7, lsl 2 | r0 = r7 + (r7 << 2);
0x000c21a0 lsls r0, r0, 3 | r0 <<= 3;
0x000c21a2 b 0xc1d7c | goto label_23;
| label_76:
0x000c21a4 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000c21a6 adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 != r3) {
0x000c21a8 beq 0xc21c4 |
0x000c21aa ldr.w sb, [sp, 0x78] | sb = var_78h;
0x000c21ae mov sl, r3 | sl = r3;
0x000c21b0 b 0xc20b6 | goto label_24;
| label_63:
0x000c21b2 ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000c21b4 mov.w sb, 7 | sb = 7;
0x000c21b8 b 0xc214e | goto label_22;
| label_61:
0x000c21ba movs r0, 0x28 | r0 = 0x28;
0x000c21bc movs r7, 1 | r7 = 1;
0x000c21be b 0xc1d7c | goto label_23;
| label_64:
0x000c21c0 movs r1, 0 | r1 = 0;
0x000c21c2 b 0xc1dd6 | goto label_25;
| }
0x000c21c4 movs r3, 0 | r3 = 0;
0x000c21c6 mov r2, r3 | r2 = r3;
0x000c21c8 mov r8, r3 | r8 = r3;
0x000c21ca mov sl, r3 | sl = r3;
0x000c21cc mov sb, r3 | sb = r3;
0x000c21ce str r3, [sp, 8] | var_8h = r3;
0x000c21d0 str r3, [sp, 0x14] | var_14h = r3;
0x000c21d2 b 0xc202a | goto label_26;
| label_58:
0x000c21d4 ldr r1, [pc, 0x3a8] |
0x000c21d6 movs r3, 1 | r3 = 1;
0x000c21d8 mov r0, r4 | r0 = r4;
0x000c21da str r2, [sp] | *(sp) = r2;
0x000c21dc add r1, pc | r1 = 0x184760;
0x000c21de bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c21e2 b 0xc1a3a | goto label_4;
| label_78:
0x000c21e4 mov r1, r4 | r1 = r4;
0x000c21e6 ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000c21e8 mov.w ip, 3 |
| label_28:
0x000c21ec ldr r0, [sp, 0x58] | r0 = var_58h;
0x000c21ee movs r3, 1 | r3 = 1;
0x000c21f0 str r4, [sp, 0x20] | var_20h = r4;
0x000c21f2 mov r4, r1 | r4 = r1;
0x000c21f4 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x000c21f8 sub.w r5, r0, 0x21 | r5 = r0 - 0x21;
0x000c21fc rsb.w r2, r0, 0x21 | r2 = 0x21 - r0;
0x000c2200 lsr.w r2, r3, r2 | r2 = r3 >> r2;
0x000c2204 str r5, [sp, 0x50] | var_50h = r5;
0x000c2206 lsl.w r5, r3, r5 | r5 = r3 << r5;
0x000c220a str.w ip, [sp, 0x78] | __asm ("str.w ip, [var_78h]");
0x000c220e orrs r2, r5 | r2 |= r5;
0x000c2210 str r2, [sp, 0x4c] | var_4ch = r2;
0x000c2212 subs r2, r0, 1 | r2 = r0 - 1;
0x000c2214 lsls r3, r2 | r3 <<= r2;
0x000c2216 str r2, [sp, 0x30] | var_30h = r2;
0x000c2218 str r3, [sp, 0x3c] | var_3ch = r3;
0x000c221a ldr r3, [pc, 0x368] |
0x000c221c add r3, pc | r3 = 0x1847a6;
0x000c221e str r3, [sp, 0x74] | var_74h = r3;
0x000c2220 movs r3, 0 | r3 = 0;
0x000c2222 str r3, [sp, 0x10] | var_10h = r3;
0x000c2224 add r3, sp, 0xe0 | r3 += var_e0h;
0x000c2226 str r3, [sp, 0xc] | x = r3;
| label_31:
0x000c2228 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000c222a movs r2, 0 | r2 = 0;
0x000c222c ldr r3, [r5] | r3 = *(r5);
0x000c222e ldr.w sl, [r5, 4] | sl = *((r5 + 4));
0x000c2232 ldrd r6, r5, [r5, 0x10] | __asm ("ldrd r6, r5, [r5, 0x10]");
0x000c2236 add.w r8, r3, 1 | r8 = r3 + 1;
0x000c223a ldr r3, [sp, 0x44] | r3 = var_44h;
0x000c223c mov r1, r8 | r1 = r8;
0x000c223e ldr.w sb, [r3, 0xc] | sb = *((r3 + 0xc));
0x000c2242 ldr r3, [r3] | r3 = *(r3);
0x000c2244 str r2, [sp, 0xb8] | var_b8h = r2;
0x000c2246 mov r0, sb | r0 = sb;
0x000c2248 str r3, [sp, 0x24] | var_24h = r3;
0x000c224a bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000c224e cmp r0, 0 |
| if (r0 == 0) {
0x000c2250 beq.w 0xc237e | goto label_82;
| }
0x000c2254 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000c2256 movw r1, 0x202 | r1 = 0x202;
0x000c225a bics r1, r2 | __asm ("bics r1, r2");
| if (r0 == 0) {
0x000c225c beq.w 0xc2370 | goto label_83;
| }
| label_29:
0x000c2260 lsls r3, r2, 0x1f | r3 = r2 << 0x1f;
| if (r3 < r2) {
0x000c2262 bmi.w 0xc237e | goto label_82;
| }
0x000c2266 movs r1, 1 | r1 = 1;
0x000c2268 bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x000c226c mov r7, r0 | r7 = r0;
| label_30:
0x000c226e cmp.w sb, 0 |
| if (sb != 0) {
0x000c2272 beq 0xc227a |
0x000c2274 mov r0, sb | r0 = sb;
0x000c2276 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000c227a ldr r3, [sp, 0x44] | r3 = var_44h;
0x000c227c ldr.w sb, [r3, 0xc] | sb = *((r3 + 0xc));
0x000c2280 cmp r7, 0 |
| if (r7 == 0) {
0x000c2282 beq.w 0xc2390 | goto label_84;
| }
0x000c2286 mov r1, r8 | r1 = r8;
0x000c2288 mov r0, sb | r0 = sb;
0x000c228a bl 0x3db60 | fcn_0003db60 (r0);
0x000c228e ldr r2, [sp, 0x24] | r2 = var_24h;
0x000c2290 mov ip, r0 |
0x000c2292 str r0, [sp, 0x38] | var_38h = r0;
0x000c2294 add r3, sp, 0xbc | r3 += var_bch;
0x000c2296 ldr r0, [r2, 0x24] | r0 = *((r2 + 0x24));
0x000c2298 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000c229a ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000c229c mov r1, r2 | r1 = r2;
0x000c229e str r2, [sp, 8] | var_8h = r2;
0x000c22a0 ldr r2, [r0] | r2 = *(r0);
0x000c22a2 str r3, [sp] | *(sp) = r3;
0x000c22a4 mov r3, ip | r3 = ip;
0x000c22a6 str r2, [sp, 0x28] | var_28h = r2;
0x000c22a8 mov r2, r7 | r2 = r7;
0x000c22aa bl 0x245f0 | r0 = fcn_000245f0 (r0, r1, r2, r3, r4);
0x000c22ae mov sb, r0 | sb = r0;
0x000c22b0 cmp r0, 0 |
| if (r0 != 0) {
0x000c22b2 bne.w 0xc251e | goto label_85;
| }
0x000c22b6 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000c22b8 mov r8, r7 | r8 = r7;
0x000c22ba str r4, [sp, 8] | var_8h = r4;
0x000c22bc mov r4, r0 | r4 = r0;
0x000c22be str r0, [sp, 0x18] | var_18h = r0;
0x000c22c0 str r3, [sp, 0x2c] | var_2ch = r3;
0x000c22c2 add r3, sp, 0xc8 | r3 += var_c8h;
0x000c22c4 str r3, [sp, 0x6c] | var_6ch = r3;
0x000c22c6 add r3, sp, 0xc4 | r3 += var_c4h;
0x000c22c8 str r3, [sp, 0x64] | var_64h = r3;
0x000c22ca add r3, sp, 0xc0 | r3 += var_c0h;
0x000c22cc str r3, [sp, 0x60] | var_60h = r3;
0x000c22ce add r3, sp, 0xb8 | r3 += var_b8h;
0x000c22d0 str r3, [sp, 0x5c] | var_5ch = r3;
0x000c22d2 add r3, sp, 0xcc | r3 += var_cch;
0x000c22d4 str r3, [sp, 0x70] | var_70h = r3;
| do {
| label_27:
0x000c22d6 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000c22d8 mov.w ip, -1 |
0x000c22dc ldrd r1, r2, [sp, 0x60] | __asm ("ldrd r1, r2, [var_64h]");
0x000c22e0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000c22e2 str r3, [sp, 4] | var_4h_2 = r3;
0x000c22e4 ldr r3, [sp, 0x70] | r3 = var_70h;
0x000c22e6 str r3, [sp] | *(sp) = r3;
0x000c22e8 movs r3, 0 | r3 = 0;
0x000c22ea strd ip, r3, [sp, 0xc4] | __asm ("strd ip, r3, [var_c8h]");
0x000c22ee str r3, [sp, 0xcc] | var_cch = r3;
0x000c22f0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000c22f2 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000c22f4 mov r7, r3 | r7 = r3;
0x000c22f6 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000c22f8 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000c22fa mov sb, r0 | sb = r0;
0x000c22fc cmp r0, 0 |
| if (r0 != 0) {
0x000c22fe bne.w 0xc258c | goto label_86;
| }
0x000c2302 ldr r2, [sp, 0xb8] | r2 = var_b8h;
0x000c2304 cmp r2, sl |
0x000c2306 blt 0xc22d6 |
| } while (r2 < sl);
0x000c2308 cmp r4, 0 |
| if (r4 == 0) {
0x000c230a beq.w 0xc2422 | goto label_87;
| }
| label_39:
0x000c230e ldr r3, [sp, 0x58] | r3 = var_58h;
0x000c2310 add r3, sl | r3 += sl;
0x000c2312 cmp r2, r3 |
| if (r2 >= r3) {
0x000c2314 bge.w 0xc25f6 | goto label_88;
| }
0x000c2318 sub.w r3, r2, sl | r3 = r2 - sl;
0x000c231c cmp r2, sl |
0x000c231e rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x000c2322 lsr.w sb, r6, r3 | sb = r6 >> r3;
0x000c2326 lsl.w r1, r5, r1 | r1 = r5 << r1;
0x000c232a sub.w r3, r3, 0x20 | r3 -= 0x20;
0x000c232e lsr.w r3, r5, r3 | r3 = r5 >> r3;
0x000c2332 orr.w sb, sb, r1 | sb |= r1;
0x000c2336 orr.w sb, sb, r3 | sb |= r3;
0x000c233a and sb, sb, 1 | sb &= 1;
| if (r2 > sl) {
0x000c233e bgt.w 0xc259c | goto label_89;
| }
0x000c2342 cmp.w sb, 0 |
| if (sb != 0) {
0x000c2346 bne.w 0xc26c2 | goto label_90;
| }
0x000c234a ldrd r1, r2, [sp, 0xc8] | __asm ("ldrd r1, r2, [var_c8h]");
0x000c234e ldr r0, [sp, 0xc] | r0 = x;
0x000c2350 subs r2, r2, r1 | r2 -= r1;
0x000c2352 add r1, r8 | r1 += r8;
0x000c2354 bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c2358 mov r4, r0 | r4 = r0;
| label_36:
0x000c235a ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000c235c str r3, [sp, 0x18] | var_18h = r3;
0x000c235e cmp r4, 0 |
| if (r4 != 0) {
0x000c2360 bne 0xc2414 | goto label_35;
| }
| label_40:
0x000c2362 movs r4, 1 | r4 = 1;
0x000c2364 b 0xc22d6 | goto label_27;
| label_77:
0x000c2366 mov r1, r4 | r1 = r4;
0x000c2368 ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000c236a add.w ip, r1, -1 |
0x000c236e b 0xc21ec | goto label_28;
| label_83:
0x000c2370 ldrb r1, [r0, 0x12] | r1 = *((r0 + 0x12));
0x000c2372 cmp r1, 1 |
0x000c2374 it eq |
| if (r1 == 1) {
0x000c2376 ldreq r7, [r0, 8] | r7 = *((r0 + 8));
| goto label_91;
| }
| if (r1 != 1) {
| label_91:
0x000c2378 bne.w 0xc2260 | goto label_29;
| }
0x000c237c b 0xc226e | goto label_30;
| label_82:
0x000c237e cmp.w sb, 0 |
| if (sb != 0) {
0x000c2382 beq 0xc238a |
0x000c2384 mov r0, sb | r0 = sb;
0x000c2386 bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000c238a ldr r3, [sp, 0x44] | r3 = var_44h;
0x000c238c ldr.w sb, [r3, 0xc] | sb = *((r3 + 0xc));
| label_84:
0x000c2390 mov r1, r8 | r1 = r8;
0x000c2392 mov r0, sb | r0 = sb;
0x000c2394 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000c2398 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000c239a ldr r3, [sp, 0x74] | r3 = var_74h;
0x000c239c and r2, r2, 0x3f | r2 &= 0x3f;
0x000c23a0 add r2, r3 | r2 += r3;
0x000c23a2 ldrb.w r5, [r2, 0x258] | r5 = *((r2 + 0x258));
0x000c23a6 cmp.w sb, 0 |
| if (sb != 0) {
0x000c23aa beq 0xc23b2 |
0x000c23ac mov r0, sb | r0 = sb;
0x000c23ae bl 0x2e7ac | fcn_0002e7ac (r0);
| }
0x000c23b2 cmp r5, 5 |
| if (r5 != 5) {
0x000c23b4 bne.w 0xc26d2 | goto label_92;
| }
0x000c23b8 mov.w sb, 0 | sb = 0;
| label_33:
0x000c23bc ldr r3, [sp, 0x10] | r3 = var_10h;
0x000c23be ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000c23c0 adds r3, 1 | r3++;
0x000c23c2 cmp r4, r3 |
0x000c23c4 str r3, [sp, 0x10] | var_10h = r3;
0x000c23c6 ite le |
| if (r4 > r3) {
0x000c23c8 movle r3, 0 | r3 = 0;
| }
| if (r4 <= r3) {
0x000c23ca movgt r3, 1 | r3 = 1;
| }
0x000c23cc cmp.w sb, 0 |
0x000c23d0 add.w r2, r2, 0x18 | r2 += 0x18;
0x000c23d4 it ne |
| if (sb == 0) {
0x000c23d6 movne r3, 0 | r3 = 0;
| }
0x000c23d8 str r2, [sp, 0x1c] | var_1ch = r2;
0x000c23da mov r5, r3 | r5 = r3;
0x000c23dc cmp r3, 0 |
| if (r3 != 0) {
0x000c23de bne.w 0xc2228 | goto label_31;
| }
0x000c23e2 ldr r7, [sp, 0x54] | r7 = var_54h;
0x000c23e4 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000c23e6 ldr.w r0, [r7, 0xfc] | r0 = *((r7 + 0xfc));
0x000c23ea bl 0x7a69c | fcn_0007a69c (r0);
0x000c23ee ldr r6, [sp, 0xe0] | r6 = var_e0h;
0x000c23f0 str.w r5, [r7, 0xfc] | __asm ("str.w r5, [r7, 0xfc]");
0x000c23f4 cmp.w sb, 0 |
| if (sb != 0) {
0x000c23f8 bne.w 0xc2160 | goto label_32;
| }
0x000c23fc ldr r5, [pc, 0x188] |
0x000c23fe movs r3, 1 | r3 = 1;
0x000c2400 mov.w r2, -1 | r2 = -1;
0x000c2404 mov r1, r6 | r1 = r6;
0x000c2406 mov r0, r4 | r0 = r4;
0x000c2408 add r5, pc | r5 = 0x184994;
0x000c240a str r5, [sp] | *(sp) = r5;
0x000c240c bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c2410 b.w 0xc1a3a | goto label_4;
| label_35:
0x000c2414 mov sb, r4 | sb = r4;
0x000c2416 ldr r4, [sp, 8] | r4 = var_8h;
| label_34:
0x000c2418 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000c241a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000c241c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c241e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000c2420 b 0xc23bc | goto label_33;
| label_87:
0x000c2422 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000c2424 ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x000c2426 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x000c2428 orrs.w r3, r6, r5 | r3 = r6 | r5;
| if (r3 == r6) {
0x000c242c beq.w 0xc2672 | goto label_93;
| }
0x000c2430 lsls r7, r6, 0x1f | r7 = r6 << 0x1f;
| if (r7 < r6) {
0x000c2432 bmi.w 0xc2614 | goto label_94;
| }
0x000c2436 mov r3, r4 | r3 = r4;
0x000c2438 mov r7, r8 | r7 = r8;
| do {
0x000c243a adds r3, 1 | r3++;
0x000c243c rsb.w ip, r3, 0x20 |
0x000c2440 lsr.w r0, r6, r3 | r0 = r6 >> r3;
0x000c2444 lsl.w ip, r5, ip |
0x000c2448 orr.w r0, r0, ip | r0 |= ip;
0x000c244c sub.w ip, r3, 0x20 |
0x000c2450 lsr.w ip, r5, ip |
0x000c2454 orr.w r0, r0, ip | r0 |= ip;
0x000c2458 lsls r0, r0, 0x1f | r0 <<= 0x1f;
0x000c245a bpl 0xc243a |
| } while (r0 >= r0);
0x000c245c mov r8, r7 | r8 = r7;
0x000c245e ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000c2460 ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x000c2462 ands r0, r6 | r0 &= r6;
0x000c2464 and.w ip, r5, r7 |
0x000c2468 orrs.w r0, r0, ip | r0 |= ip;
0x000c246c it eq |
| if (r0 != r0) {
0x000c246e moveq r7, r8 | r7 = r8;
| }
| if (r0 != r0) {
0x000c2470 bne 0xc249a | goto label_95;
| }
| do {
| label_38:
0x000c2472 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000c2474 adds r4, 1 | r4++;
0x000c2476 subs r0, r0, r4 | r0 -= r4;
0x000c2478 rsb.w lr, r0, 0x20 | lr = 0x20 - r0;
0x000c247c lsr.w ip, r6, r0 |
0x000c2480 lsl.w lr, r5, lr | lr = r5 << lr;
0x000c2484 subs r0, 0x20 | r0 -= 0x20;
0x000c2486 lsr.w r0, r5, r0 | r0 = r5 >> r0;
0x000c248a orr.w ip, ip, lr |
0x000c248e orr.w ip, ip, r0 |
0x000c2492 tst.w ip, 1 |
0x000c2496 beq 0xc2472 |
| } while ((ip & 1) == 0);
0x000c2498 mov r8, r7 | r8 = r7;
| label_95:
0x000c249a subs r4, r3, r4 | r4 = r3 - r4;
0x000c249c cmp r4, 1 |
| if (r4 <= 1) {
0x000c249e ble.w 0xc2672 | goto label_93;
| }
0x000c24a2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000c24a4 add.w ip, sp, 0xd4 |
0x000c24a8 mov r7, r8 | r7 = r8;
0x000c24aa ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x000c24ac movs r3, 0 | r3 = 0;
0x000c24ae str r3, [sp, 0xd0] | var_d0h = r3;
0x000c24b0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000c24b2 ldr.w fp, [r0] | fp = *(r0);
0x000c24b6 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000c24ba subs r3, r3, r2 | r3 -= r2;
0x000c24bc add r2, r8 | r2 += r8;
0x000c24be bl 0x245f0 | r0 = fcn_000245f0 (r0, r1, r2, r3, r4);
0x000c24c2 mov r8, r0 | r8 = r0;
0x000c24c4 cmp r0, 0 |
| if (r0 != 0) {
0x000c24c6 bne.w 0xc26da | goto label_96;
| }
0x000c24ca ldr r3, [sp, 0x58] | r3 = var_58h;
0x000c24cc add r2, sp, 0xdc | r2 += var_dch;
0x000c24ce add.w r3, r3, r4, asr 1 | r3 += (r4 >> 1);
0x000c24d2 str r3, [sp, 0x34] | var_34h = r3;
0x000c24d4 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x000c24d6 str r3, [sp, 0x14] | var_14h = r3;
0x000c24d8 add r3, sp, 0xf0 | r3 += var_f0h;
0x000c24da b 0xc2508 |
| while (r0 > r1) {
0x000c24dc add r1, sp, 0xd0 | r1 += var_d0h;
0x000c24de ldr r0, [sp, 0x14] | r0 = var_14h;
0x000c24e0 str r1, [sp, 4] | var_4h_2 = r1;
0x000c24e2 add r1, sp, 0x100 | r1 += var_100h;
0x000c24e4 str r1, [sp] | *(sp) = r1;
0x000c24e6 add r1, sp, 0xd8 | r1 += var_d8h;
0x000c24e8 ldr.w r4, [fp, 0x14] | r4 = *(arg_14h);
0x000c24ec str.w r8, [sp, 0xdc] | __asm ("str.w r8, [var_dch]");
0x000c24f0 str.w r8, [sp, 0xf0] | __asm ("str.w r8, [var_f0h]");
0x000c24f4 str.w r8, [sp, 0x100] | __asm ("str.w r8, [var_100h]");
0x000c24f8 str r3, [sp, 0x80] | var_80h = r3;
0x000c24fa str r2, [sp, 0x7c] | var_7ch = r2;
0x000c24fc blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000c24fe ldrd r2, r3, [sp, 0x7c] | __asm ("ldrd r2, r3, [var_80h]");
0x000c2502 cmp r0, 0 |
| if (r0 != 0) {
0x000c2504 bne.w 0xc2636 | goto label_97;
| }
0x000c2508 ldr r1, [sp, 0xd0] | r1 = var_d0h;
0x000c250a ldr r0, [sp, 0x34] | r0 = var_34h;
0x000c250c cmp r0, r1 |
0x000c250e bgt 0xc24dc |
| }
0x000c2510 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000c2514 mov r8, r7 | r8 = r7;
0x000c2516 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000c2518 movs r4, 0 | r4 = 0;
0x000c251a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000c251c b 0xc2648 | goto label_98;
| label_85:
0x000c251e ldr r4, [sp, 0x20] | r4 = var_20h;
| label_44:
0x000c2520 ldr r5, [sp, 0x54] | r5 = var_54h;
0x000c2522 ldr.w r0, [r5, 0xfc] | r0 = *((r5 + 0xfc));
0x000c2526 bl 0x7a69c | fcn_0007a69c (r0);
0x000c252a movs r3, 0 | r3 = 0;
0x000c252c ldr r6, [sp, 0xe0] | r6 = var_e0h;
0x000c252e str.w r3, [r5, 0xfc] | __asm ("str.w r3, [r5, 0xfc]");
0x000c2532 b 0xc2160 | goto label_32;
| label_86:
0x000c258c cmp r0, 0x65 |
0x000c258e ldr r4, [sp, 8] | r4 = var_8h;
0x000c2590 mov ip, r0 |
0x000c2592 mov r7, r8 | r7 = r8;
| if (r0 == 0x65) {
0x000c2594 beq.w 0xc269c | goto label_99;
| }
| label_37:
0x000c2598 mov sb, ip | sb = ip;
0x000c259a b 0xc2418 | goto label_34;
| label_89:
0x000c259c ldr r3, [sp, 0x18] | r3 = var_18h;
0x000c259e mov r1, r8 | r1 = r8;
0x000c25a0 ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x000c25a2 ldr r0, [sp, 0xc] | r0 = x;
0x000c25a4 add r1, r3 | r1 += r3;
0x000c25a6 subs r2, r2, r3 | r2 -= r3;
0x000c25a8 bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c25ac cmp r0, 0 |
0x000c25ae ite ne |
| if (r0 == 0) {
0x000c25b0 movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x000c25b2 andeq r3, sb, 1 | r3 = sb & 1;
| }
0x000c25b6 mov r4, r0 | r4 = r0;
0x000c25b8 cmp r3, 0 |
| if (r3 != 0) {
0x000c25ba bne.w 0xc26c2 | goto label_90;
| }
| label_43:
0x000c25be cmp r4, 0 |
| if (r4 != 0) {
0x000c25c0 bne.w 0xc2414 | goto label_35;
| }
0x000c25c4 ldrd r1, r2, [sp, 0xc8] | __asm ("ldrd r1, r2, [var_c8h]");
0x000c25c8 ldr r7, [sp, 0xc] | r7 = x;
0x000c25ca subs r2, r2, r1 | r2 -= r1;
0x000c25cc add r1, r8 | r1 += r8;
0x000c25ce mov r0, r7 | r0 = r7;
0x000c25d0 bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c25d4 cmp r0, 0 |
0x000c25d6 ite ne |
| if (r0 == 0) {
0x000c25d8 movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x000c25da andeq r3, sb, 1 | r3 = sb & 1;
| }
0x000c25de mov r4, r0 | r4 = r0;
0x000c25e0 cmp r3, 0 |
| if (r3 == 0) {
0x000c25e2 beq.w 0xc235a | goto label_36;
| }
0x000c25e6 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000c25e8 mov.w r2, -1 | r2 = -1;
0x000c25ec mov r0, r7 | r0 = r7;
0x000c25ee bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c25f2 mov r4, r0 | r4 = r0;
0x000c25f4 b 0xc235a | goto label_36;
| label_88:
0x000c25f6 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000c25f8 mov ip, sb |
0x000c25fa ldr r2, [sp, 0x10] | r2 = var_10h;
0x000c25fc ldr r4, [sp, 8] | r4 = var_8h;
0x000c25fe cmp r3, r2 |
| if (r3 != r2) {
0x000c2600 bne 0xc2598 | goto label_37;
| }
0x000c2602 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000c2604 mov.w r2, -1 | r2 = -1;
0x000c2608 add r0, sp, 0xe0 | r0 += var_e0h;
0x000c260a bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c260e mov ip, r0 |
0x000c2610 mov sb, ip | sb = ip;
0x000c2612 b 0xc2418 | goto label_34;
| label_94:
0x000c2614 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000c2616 rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x000c261a lsl.w r0, r5, r0 | r0 = r5 << r0;
0x000c261e lsr.w r3, r6, r3 | r3 = r6 >> r3;
0x000c2622 orrs r3, r0 | r3 |= r0;
0x000c2624 ldr r0, [sp, 0x50] | r0 = var_50h;
0x000c2626 lsr.w r0, r5, r0 | r0 = r5 >> r0;
0x000c262a orrs r3, r0 | r3 |= r0;
0x000c262c lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x000c262e bmi 0xc2672 | goto label_93;
| }
0x000c2630 mov r3, r4 | r3 = r4;
0x000c2632 mov r7, r8 | r7 = r8;
0x000c2634 b 0xc2472 | goto label_38;
| label_97:
0x000c2636 mov r4, r0 | r4 = r0;
0x000c2638 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000c263c ldr r0, [sp, 0x14] | r0 = var_14h;
0x000c263e mov r8, r7 | r8 = r7;
0x000c2640 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000c2642 cmp r4, 0x65 |
| if (r4 != 0x65) {
0x000c2644 bne.w 0xc2414 | goto label_35;
| }
0x000c2646 add r6, sp, 0x398 | r6 = sp + 0x398;
| label_98:
0x000c2648 ldr r3, [sp, 0xd0] | r3 = var_d0h;
0x000c264a ldr r2, [sp, 0x58] | r2 = var_58h;
0x000c264c cmp r4, 0x65 |
0x000c264e it eq |
| if (r4 != 0x65) {
0x000c2650 addeq r3, 1 | r3++;
| }
0x000c2652 subs r3, r3, r2 | r3 -= r2;
0x000c2654 cmp r3, 0 |
| if (r3 > 0) {
0x000c2656 ble 0xc2672 |
0x000c2658 rsb.w r2, r3, 0x20 | r2 = 0x20 - r3;
0x000c265c lsrs r6, r3 | r6 >>= r3;
0x000c265e lsl.w r2, r5, r2 | r2 = r5 << r2;
0x000c2662 add sl, r3 | sl += r3;
0x000c2664 orrs r6, r2 | r6 |= r2;
0x000c2666 sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x000c266a lsr.w r2, r5, r2 | r2 = r5 >> r2;
0x000c266e lsrs r5, r3 | r5 >>= r3;
0x000c2670 orrs r6, r2 | r6 |= r2;
| }
| label_93:
0x000c2672 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000c2674 cmp.w sl, 0 |
0x000c2678 it le |
| if (sl <= 0) {
0x000c267a cmple r3, 0 | __asm ("cmple r3, 0");
| }
| if (sl == 0) {
0x000c267c beq 0xc26b0 | goto label_100;
| }
0x000c267e ldr r1, [sp, 0x40] | r1 = var_40h;
0x000c2680 mov.w r2, -1 | r2 = -1;
0x000c2684 ldr r0, [sp, 0xc] | r0 = x;
0x000c2686 bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c268a mov r4, r0 | r4 = r0;
| label_42:
0x000c268c cmp r4, 0 |
| if (r4 != 0) {
0x000c268e bne.w 0xc2414 | goto label_35;
| }
| label_41:
0x000c2692 ldr r2, [sp, 0xb8] | r2 = var_b8h;
0x000c2694 cmp r2, sl |
| if (r2 >= sl) {
0x000c2696 bge.w 0xc230e | goto label_39;
| }
0x000c269a b 0xc2362 | goto label_40;
| label_99:
0x000c269c ldr r1, [sp, 0x18] | r1 = var_18h;
0x000c269e mov.w r2, -1 | r2 = -1;
0x000c26a2 add r0, sp, 0xe0 | r0 += var_e0h;
0x000c26a4 add r1, r8 | r1 += r8;
0x000c26a6 bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c26aa mov ip, r0 |
0x000c26ac mov sb, ip | sb = ip;
0x000c26ae b 0xc2418 | goto label_34;
| label_100:
0x000c26b0 ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x000c26b2 cmp r2, 0 |
| if (r2 == 0) {
0x000c26b4 beq 0xc2692 | goto label_41;
| }
0x000c26b6 mov r1, r8 | r1 = r8;
0x000c26b8 add r0, sp, 0xe0 | r0 += var_e0h;
0x000c26ba bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c26be mov r4, r0 | r4 = r0;
0x000c26c0 b 0xc268c | goto label_42;
| label_90:
0x000c26c2 ldr r1, [sp, 0x68] | r1 = var_68h;
0x000c26c4 mov.w r2, -1 | r2 = -1;
0x000c26c8 ldr r0, [sp, 0xc] | r0 = x;
0x000c26ca bl 0x63c70 | r0 = fcn_00063c70 (r0, r1, r2);
0x000c26ce mov r4, r0 | r4 = r0;
0x000c26d0 b 0xc25be | goto label_43;
| label_92:
0x000c26d2 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000c26d4 mov.w sb, 7 | sb = 7;
0x000c26d8 b 0xc2520 | goto label_44;
| label_96:
0x000c26da ldr r4, [sp, 8] | r4 = var_8h;
0x000c26dc mov sb, r0 | sb = r0;
0x000c26de b 0xc2418 | goto label_34;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc26e0 */
| #include <stdint.h>
|
; (fcn) fcn.000c26e0 () | void fcn_000c26e0 (int16_t arg_8h, int16_t arg_10h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_22h, int16_t arg_28h, int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int32_t var_48h_2;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_60h;
| int16_t var_3h;
| int16_t var_64h;
| int16_t var_68h;
| int32_t var_6ch;
| int16_t var_70h;
| int32_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_84h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000c26e0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c26e4 mov fp, r0 |
0x000c26e6 ldr r0, [pc, 0x230] |
0x000c26e8 ldr r5, [r2, 4] | r5 = *((r2 + 4));
0x000c26ea ldr r6, [r2, 0x1c] | r6 = *((r2 + 0x1c));
0x000c26ec add r0, pc | r0 = 0x18500a;
0x000c26ee ldr r4, [r2] | r4 = *(r2);
0x000c26f0 ldr r2, [pc, 0x228] | r2 = *(0xc291c);
0x000c26f2 vpush {d8} | __asm ("vpush {d8}");
0x000c26f6 mul r1, r5, r1 | r1 = r5 * r1;
0x000c26fa sub sp, 0x1c |
0x000c26fc ldr.w r8, [r4] | r8 = *(r4);
0x000c2700 ldr r2, [r0, r2] |
0x000c2702 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000c2706 ldr r2, [r2] | r2 = imp.atan;
0x000c2708 str r2, [sp, 0x14] | var_14h = r2;
0x000c270a mov.w r2, 0 | r2 = 0;
0x000c270e ldrb.w r2, [fp, 0x22] | r2 = *(arg_22h);
0x000c2712 add.w r6, r6, r1, lsl 2 | r6 += (r1 << 2);
| if (r2 == 0) {
0x000c2716 cbz r2, 0xc2766 | goto label_51;
| }
0x000c2718 ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x000c271c ldr r2, [r2] | r2 = *(r2);
0x000c271e cmp r2, 1 |
| if (r2 == 1) {
0x000c2720 beq 0xc2766 | goto label_51;
| }
0x000c2722 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x000c2726 cmp r3, 0 |
| if (r3 <= 0) {
0x000c2728 ble 0xc2744 | goto label_0;
| }
0x000c272a ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x000c272c adds r6, 4 | r6 += 4;
0x000c272e movs r3, 0 | r3 = 0;
0x000c2730 vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
| do {
0x000c2734 vst1.32 {d16}, [r6] | __asm ("vst1.32 {d16}, [r6]");
0x000c2738 adds r3, 1 | r3++;
0x000c273a ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000c273e adds r6, 0xc | r6 += 0xc;
0x000c2740 cmp r3, r2 |
0x000c2742 blt 0xc2734 |
| } while (r3 < r2);
| do {
| label_0:
0x000c2744 movs r0, 0 | r0 = 0;
| label_2:
0x000c2746 ldr r2, [pc, 0x1d8] |
0x000c2748 ldr r3, [pc, 0x1d0] | r3 = *(0xc291c);
0x000c274a add r2, pc | r2 = 0x185070;
0x000c274c ldr r3, [r2, r3] | r3 = imp.atan;
0x000c274e ldr r2, [r3] | r2 = imp.atan;
0x000c2750 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c2752 eors r2, r3 | r2 ^= r3;
0x000c2754 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c2758 bne.w 0xc2914 | goto label_52;
| }
0x000c275c add sp, 0x1c |
0x000c275e vpop {d8} | __asm ("vpop {d8}");
0x000c2762 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_51:
0x000c2766 movs r2, 0 | r2 = 0;
0x000c2768 str r2, [sp, 0x10] | var_10h = r2;
0x000c276a ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
| if (r2 == 0) {
0x000c276e cbz r2, 0xc279c | goto label_53;
| }
| label_4:
0x000c2770 ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000c2774 cmp r2, 0 |
0x000c2776 ble 0xc2744 |
| } while (r2 <= 0);
0x000c2778 ldr.w r3, [fp, 0x28] | r3 = *(arg_28h);
0x000c277c movs r2, 0 | r2 = 0;
| do {
0x000c277e ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000c2780 adds r3, 0xc | r3 += 0xc;
0x000c2782 adds r2, 1 | r2++;
0x000c2784 adds r6, 0xc | r6 += 0xc;
0x000c2786 str r1, [r6, -0x8] | *((r6 - 0x8)) = r1;
0x000c278a ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x000c278e str r1, [r6, -0x4] | *((r6 - 0x4)) = r1;
0x000c2792 ldr.w r1, [r8, 0x18] | r1 = *((r8 + 0x18));
0x000c2796 cmp r2, r1 |
0x000c2798 blt 0xc277e |
| } while (r2 < r1);
0x000c279a b 0xc2744 | goto label_0;
| label_53:
0x000c279c vldr d8, [r4, 0x20] | __asm ("vldr d8, [r4, 0x20]");
0x000c27a0 mov r2, fp | r2 = fp;
0x000c27a2 b 0xc27aa |
| while (r2 != 0) {
0x000c27a4 ldr r3, [r2] | r3 = *(r2);
0x000c27a6 cmp r3, 1 |
| if (r3 != 1) {
0x000c27a8 bne 0xc27b2 | goto label_54;
| }
0x000c27aa mov r5, r2 | r5 = r2;
0x000c27ac ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000c27ae cmp r2, 0 |
0x000c27b0 bne 0xc27a4 |
| }
| label_54:
0x000c27b2 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000c27b4 ldr r7, [pc, 0x16c] |
0x000c27b6 str r4, [sp, 0xc] | var_ch = r4;
0x000c27b8 str r3, [sp, 4] | var_4h = r3;
0x000c27ba ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000c27bc add r7, pc | r7 = 0x1850e4;
0x000c27be str r3, [sp, 8] | var_8h = r3;
0x000c27c0 ldrb.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000c27c4 str r3, [sp] | *(sp) = r3;
0x000c27c6 mov r3, r7 | r3 = r7;
0x000c27c8 mov sb, r3 | sb = r3;
0x000c27ca mov r7, r5 | r7 = r5;
0x000c27cc b 0xc2800 |
| while (r2 == 0) {
0x000c27ce bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 != 0) {
0x000c27d2 cbnz r0, 0xc281e | goto label_55;
| }
0x000c27d4 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000c27d8 cbnz r0, 0xc281e | goto label_55;
| }
| label_1:
0x000c27da add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x000c27de movs r1, 0 | r1 = 0;
0x000c27e0 lsls r0, r3, 2 | r0 = r3 << 2;
0x000c27e2 bl 0x28c3c | fcn_00028c3c (r0);
0x000c27e6 str.w r0, [sl, 0x28] | __asm ("str.w r0, [sl, 0x28]");
| if (r0 == 0) {
0x000c27ea cbz r0, 0xc2824 | goto label_56;
| }
0x000c27ec ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000c27f0 movs r1, 0 | r1 = 0;
0x000c27f2 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000c27f6 lsls r2, r2, 2 | r2 <<= 2;
0x000c27f8 blx 0x62ec | fcn_000062ec ();
0x000c27fc ldr r7, [r7, 0xc] | r7 = *((r7 + 0xc));
| if (r7 == 0) {
0x000c27fe cbz r7, 0xc2828 | goto label_57;
| }
0x000c2800 ldr r3, [r7] | r3 = *(r7);
0x000c2802 ldr.w r2, [sb, 0xd0] | r2 = *((sb + 0xd0));
0x000c2806 ldr.w r4, [r8, 0x18] | r4 = *((r8 + 0x18));
0x000c280a cmp r3, 5 |
0x000c280c ite ne |
| if (r3 == 5) {
0x000c280e ldrne sl, [r7, 0x10] | sl = *((r7 + 0x10));
| }
| if (r3 == 5) {
0x000c2812 mov sl, r7 | sl = r7;
| }
0x000c2814 cmp r2, 0 |
0x000c2816 beq 0xc27ce |
| }
0x000c2818 dmb ish | __asm ("dmb ish");
0x000c281c b 0xc27da | goto label_1;
| label_55:
0x000c281e movs r3, 0 | r3 = 0;
0x000c2820 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
| label_56:
0x000c2824 movs r0, 7 | r0 = 7;
0x000c2826 b 0xc2746 | goto label_2;
| label_57:
0x000c2828 ldr r4, [sp, 0xc] | r4 = var_ch;
0x000c282a add.w sb, sp, 0x10 | sb += var_10h;
0x000c282e mov r2, sb | r2 = sb;
0x000c2830 mov r1, r5 | r1 = r5;
0x000c2832 mov r0, r4 | r0 = r4;
0x000c2834 bl 0xc0cc4 | fcn_000c0cc4 (r0, r1, r2);
0x000c2838 ldrb r2, [r4, 6] | r2 = *((r4 + 6));
| if (r2 != 0) {
0x000c283a cbnz r2, 0xc288c | goto label_5;
| }
0x000c283c ldr r2, [sp, 0x10] | r2 = var_10h;
0x000c283e movs r7, 1 | r7 = 1;
| if (r2 == 0) {
| label_6:
0x000c2840 cbz r2, 0xc2876 | goto label_58;
| }
0x000c2842 b 0xc288c | goto label_5;
| do {
| label_3:
0x000c2844 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 == 0) {
0x000c2846 cbnz r3, 0xc2852 |
0x000c2848 mov r2, sb | r2 = sb;
0x000c284a mov r1, r5 | r1 = r5;
0x000c284c mov r0, r4 | r0 = r4;
0x000c284e bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
| }
0x000c2852 ldrb.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000c2856 strb r7, [r4, 7] | *((r4 + 7)) = r7;
0x000c2858 str r7, [r4, 0x58] | *((r4 + 0x58)) = r7;
0x000c285a strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x000c285c ldrd r0, r1, [r5, 0x18] | __asm ("ldrd r0, r1, [r5, 0x18]");
0x000c2860 strd r0, r1, [r4, 0x20] | __asm ("strd r0, r1, [r4, 0x20]");
| if (r3 != 0) {
0x000c2864 cbnz r3, 0xc288c | goto label_5;
| }
0x000c2866 ldr r3, [r5] | r3 = *(r5);
0x000c2868 cmp r3, 1 |
| if (r3 != 1) {
0x000c286a bne 0xc28a8 | goto label_59;
| }
0x000c286c mov r1, sb | r1 = sb;
0x000c286e mov r0, r4 | r0 = r4;
0x000c2870 bl 0xb5988 | r0 = fcn_000b5988 (r0, r1);
| if (r0 == 0) {
0x000c2874 cbz r0, 0xc2884 | goto label_60;
| }
| label_58:
0x000c2876 ldrb r3, [r4, 7] | r3 = *((r4 + 7));
0x000c2878 cmp r3, 0 |
0x000c287a bne 0xc2844 |
| } while (r3 != 0);
0x000c287c ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c287e bl 0x79b80 | fcn_00079b80 (r0);
0x000c2882 b 0xc2844 | goto label_3;
| label_60:
0x000c2884 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000c2886 ldrb r3, [r4, 6] | r3 = *((r4 + 6));
| if (r2 != 0) {
0x000c2888 cbnz r2, 0xc28ba | goto label_61;
| }
| if (r3 == 0) {
0x000c288a cbz r3, 0xc28ae | goto label_62;
| }
| label_5:
0x000c288c ldr r3, [sp] | r3 = *(sp);
0x000c288e movs r2, 0 | r2 = 0;
0x000c2890 vstr d8, [r4, 0x20] | __asm ("vstr d8, [r4, 0x20]");
0x000c2894 strb r2, [r4, 6] | *((r4 + 6)) = r2;
| if (r3 == 0) {
0x000c2896 cbz r3, 0xc28c2 | goto label_63;
| }
0x000c2898 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000c289a ldr r3, [sp] | r3 = *(sp);
0x000c289c strb.w r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
| label_7:
0x000c28a0 cmp r0, 0 |
| if (r0 != 0) {
0x000c28a2 bne.w 0xc2746 | goto label_2;
| }
0x000c28a6 b 0xc2770 | goto label_4;
| label_59:
0x000c28a8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000c28aa cmp r2, 0 |
| if (r2 != 0) {
0x000c28ac bne 0xc288c | goto label_5;
| }
| label_62:
0x000c28ae ldr.w r1, [r8, 0x18] | r1 = *((r8 + 0x18));
0x000c28b2 mov r0, r5 | r0 = r5;
0x000c28b4 bl 0x243cc | fcn_000243cc (r0, r1);
0x000c28b8 ldrb r3, [r4, 6] | r3 = *((r4 + 6));
| label_61:
0x000c28ba cmp r3, 0 |
| if (r3 != 0) {
0x000c28bc bne 0xc288c | goto label_5;
| }
0x000c28be ldr r2, [sp, 0x10] | r2 = var_10h;
0x000c28c0 b 0xc2840 | goto label_6;
| label_63:
0x000c28c2 mov r2, sb | r2 = sb;
0x000c28c4 mov r1, r5 | r1 = r5;
0x000c28c6 mov r0, r4 | r0 = r4;
0x000c28c8 bl 0xc0cc4 | fcn_000c0cc4 (r0, r1, r2);
0x000c28cc ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r2 == 0) {
0x000c28ce cbz r2, 0xc28f6 | goto label_64;
| }
0x000c28d0 ldrb.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000c28d4 movw r0, 0x10b | r0 = 0x10b;
0x000c28d8 ldrd r7, r1, [r5, 0x18] | __asm ("ldrd r7, r1, [r5, 0x18]");
0x000c28dc cmp r2, 0 |
| if (r2 != 0) {
0x000c28de bne.w 0xc2746 | goto label_2;
| }
| label_8:
0x000c28e2 ldrd r3, r2, [sp, 4] | __asm ("ldrd r3, r2, [var_4h]");
0x000c28e6 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000c28e8 cmp r2, r1 |
0x000c28ea it eq |
| if (r2 != r1) {
0x000c28ec cmpeq r3, r7 | __asm ("cmpeq r3, r7");
| goto label_65;
| }
| if (r2 == r1) {
| label_65:
0x000c28ee beq 0xc28a0 | goto label_7;
| }
0x000c28f0 cmp r0, 0 |
| if (r0 != 0) {
0x000c28f2 bne.w 0xc2746 | goto label_2;
| }
| label_64:
0x000c28f6 mov r2, sb | r2 = sb;
0x000c28f8 mov r1, r5 | r1 = r5;
0x000c28fa mov r0, r4 | r0 = r4;
0x000c28fc bl 0x7afc0 | fcn_0007afc0 (r0, r1, r2);
0x000c2900 ldrb.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000c2904 movw r0, 0x10b | r0 = 0x10b;
0x000c2908 ldrd r7, r1, [r5, 0x18] | __asm ("ldrd r7, r1, [r5, 0x18]");
0x000c290c cmp r2, 0 |
| if (r2 != 0) {
0x000c290e bne.w 0xc2746 | goto label_2;
| }
0x000c2912 b 0xc28e2 | goto label_8;
| label_52:
0x000c2914 blx 0x6430 | fcn_00006430 ();
0x000c2918 strb r4, [r5, 0x1a] | *((r5 + 0x1a)) = r4;
0x000c291a movs r2, r0 | r2 = r0;
0x000c291c lsls r4, r6, 8 | r4 = r6 << 8;
0x000c291e movs r0, r0 |
0x000c2920 strb r6, [r1, 0x19] | *((r1 + 0x19)) = r6;
0x000c2922 movs r2, r0 | r2 = r0;
0x000c2924 ldrb r0, [r3, 0xb] | r0 = *((r3 + 0xb));
0x000c2926 movs r2, r0 | r2 = r0;
0x000c2928 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c292c mov r5, r2 | r5 = r2;
0x000c292e ldr.w r6, [pc, 0xae4] |
0x000c2932 movw r3, 0xfbf | r3 = 0xfbf;
0x000c2936 ldr r4, [r2] | r4 = *(r2);
0x000c2938 ldr.w r2, [pc, 0xadc] | r2 = *(0xc3418);
0x000c293c add r6, pc | r6 = 0x185d56;
0x000c293e vpush {d8} | __asm ("vpush {d8}");
0x000c2942 sub sp, 0x8c |
0x000c2944 ldr r2, [r6, r2] |
0x000c2946 ldr r2, [r2] | r2 = imp.atan;
0x000c2948 str r2, [sp, 0x84] | var_84h = r2;
0x000c294a mov.w r2, 0 | r2 = 0;
0x000c294e str r0, [sp, 8] | var_8h_2 = r0;
0x000c2950 ldrh r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000c2952 movw r2, 0xa01 | r2 = 0xa01;
0x000c2956 ands r3, r0 | r3 &= r0;
0x000c2958 cmp r3, r2 |
| if (r3 != r2) {
0x000c295a bne.w 0xc2be0 | goto label_66;
| }
0x000c295e ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x000c2960 cmp r3, 0x70 |
| if (r3 != 0x70) {
0x000c2962 bne.w 0xc2be0 | goto label_66;
| }
0x000c2966 mov r6, r1 | r6 = r1;
0x000c2968 ldr.w r1, [pc, 0xab0] |
0x000c296c ldr r0, [r4] | r0 = *(r4);
0x000c296e add r1, pc | r1 = 0x185d8e;
0x000c2970 blx 0x6634 | fcn_00006634 ();
0x000c2974 str r0, [sp, 0x10] | var_10h_2 = r0;
0x000c2976 cmp r0, 0 |
| if (r0 != 0) {
0x000c2978 bne.w 0xc2be0 | goto label_66;
| }
0x000c297c ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x000c297e cmp r4, 0 |
| if (r4 == 0) {
0x000c2980 beq.w 0xc2be0 | goto label_66;
| }
0x000c2984 cmp r6, 1 |
| if (r6 > 1) {
0x000c2986 bgt 0xc2a5c | goto label_67;
| }
0x000c2988 ldr.w fp, [pc, 0xa94] |
0x000c298c ldr r7, [r4] | r7 = *(r4);
0x000c298e add fp, pc | fp = 0x185db2;
| do {
| label_9:
0x000c2990 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000c2992 cmp r3, 0 |
| if (r3 == 0) {
0x000c2994 beq.w 0xc301c | goto label_68;
| }
0x000c2998 movs r6, 0 | r6 = 0;
0x000c299a ldr r5, [r4, 0x5c] | r5 = *((r4 + 0x5c));
0x000c299c str r6, [sp, 0x7c] | var_7ch = r6;
0x000c299e strd r6, r6, [sp, 0x64] | __asm ("strd r6, r6, [var_64h]");
0x000c29a2 strd r6, r6, [sp, 0x6c] | __asm ("strd r6, r6, [var_70h]");
0x000c29a6 strd r6, r6, [sp, 0x74] | __asm ("strd r6, r6, [var_78h]");
0x000c29a8 str r5, [r3, 0x60] | *((r3 + 0x60)) = r5;
0x000c29aa ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000c29ac str r4, [sp, 0x60] | var_60h = r4;
0x000c29ae str r3, [sp, 0x64] | var_64h = r3;
0x000c29b0 cmp r5, 0 |
| if (r5 == 0) {
0x000c29b2 beq.w 0xc2c48 | goto label_69;
| }
0x000c29b6 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000c29b8 mov r1, fp | r1 = fp;
0x000c29ba blx 0x6634 | fcn_00006634 ();
0x000c29be str r0, [sp, 0xc] | var_ch_2 = r0;
0x000c29c0 cmp r0, 0 |
| if (r0 != 0) {
0x000c29c2 bne.w 0xc2c3a | goto label_70;
| }
| label_17:
0x000c29c6 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000c29c8 cmp r3, 0 |
| if (r3 == 0) {
0x000c29ca beq.w 0xc2bd0 | goto label_71;
| }
0x000c29ce ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x000c29d0 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x000c29d2 cmp r3, 0 |
| if (r3 != 0) {
0x000c29d4 bne.w 0xc312c | goto label_72;
| }
0x000c29d8 ldr.w sl, [pc, 0xa48] | sl = *(0x000c3424);
0x000c29dc adds r6, 6 | r6 += 6;
0x000c29de add.w sb, r5, r6, lsl 2 | sb = r5 + (r6 << 2);
0x000c29e2 movs r3, 1 | r3 = 1;
0x000c29e4 strb r3, [r5, 2] | *((r5 + 2)) = r3;
0x000c29e6 add sl, pc | sl += pc;
| label_11:
0x000c29e8 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000c29ea add.w r6, fp, -1 | r6 = fp + -1;
0x000c29ee vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000c29f2 mov fp, r4 |
0x000c29f4 str.w sb, [sp, 0x7c] | __asm ("str.w sb, [var_7ch]");
0x000c29f8 str r3, [sp, 0x68] | var_68h = r3;
0x000c29fa movs r3, 0 | r3 = 0;
0x000c29fc strd r3, r3, [sp, 0x38] | __asm ("strd r3, r3, [var_3ch]");
0x000c2a00 ldr r3, [r4] | r3 = *(r4);
0x000c2a02 strd sb, r7, [sp, 0x24] | __asm ("strd sb, r7, [var_24h]");
0x000c2a04 str r7, [sp, 0x24] | *((sp + 0x24)) = r7;
0x000c2a06 str.w sl, [sp, 0x2c] | __asm ("str.w sl, [var_2ch]");
0x000c2a0a str r3, [sp, 0x1c] | var_1ch = r3;
0x000c2a0c add r3, sp, 0x54 | r3 += var_54h;
0x000c2a0e str r3, [sp, 0x14] | var_14h_2 = r3;
| label_10:
0x000c2a10 ldrb r1, [r6, 1]! | r1 = *((r6 += 1));
0x000c2a14 cmp r1, 0 |
| if (r1 == 0) {
0x000c2a16 beq.w 0xc3070 | goto label_73;
| }
0x000c2a1a sub.w r3, r1, 0x61 | r3 = r1 - 0x61;
0x000c2a1e strb.w r1, [sp, 0x78] | var_78h = r1;
0x000c2a22 cmp r3, 0x18 |
| if (r3 > 0x18) {
0x000c2a24 bhi 0xc2a8e | goto label_74;
| }
| /* switch table (26 cases) at 0xc2a2a */
0x000c2a26 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_67:
0x000c2a5c ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000c2a5e cmp r0, 0 |
| if (r0 == 0) {
0x000c2a60 beq.w 0xc323a | goto label_75;
| }
0x000c2a64 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000c2a66 movw r3, 0x202 | r3 = 0x202;
0x000c2a6a bics r3, r2 | __asm ("bics r3, r2");
| if (r0 == 0) {
0x000c2a6c beq.w 0xc30a2 | goto label_76;
| }
| label_23:
0x000c2a70 lsls r2, r2, 0x1f | r2 <<= 0x1f;
| if (r2 < r2) {
0x000c2a72 bmi.w 0xc3122 | goto label_77;
| }
0x000c2a76 movs r1, 1 | r1 = 1;
0x000c2a78 bl 0x3da00 | r0 = fcn_0003da00 (r0, r1);
0x000c2a7c mov fp, r0 |
| label_24:
0x000c2a7e ldr r7, [r4] | r7 = *(r4);
0x000c2a80 cmp.w fp, 0 |
0x000c2a84 bne 0xc2990 |
| } while (fp != 0);
0x000c2a86 ldr.w fp, [pc, 0x9a0] |
0x000c2a8a add fp, pc | fp = 0x185eb8;
0x000c2a8c b 0xc2990 | goto label_9;
| label_74:
0x000c2a8e ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000c2a90 ldr.w sb, [fp, 0x10] | sb = *(arg_10h);
0x000c2a94 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000c2a98 movs r3, 0 | r3 = 0;
0x000c2a9a str r3, [sp, 0x48] | var_48h = r3;
0x000c2a9c ldr.w r8, [sb] | r8 = *(sb);
0x000c2aa0 str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_50h]");
0x000c2aa4 cmp.w r8, 5 |
| if (r8 == 5) {
0x000c2aa8 beq 0xc2ae4 | goto label_78;
| }
0x000c2aaa ldr.w sl, [pc, 0x980] | sl = *(0x000c342c);
0x000c2aae add r5, sp, 0x48 | r5 += var_48h;
0x000c2ab0 mov r3, r5 | r3 = r5;
0x000c2ab2 mov r4, sb | r4 = sb;
0x000c2ab4 mov r5, r8 | r5 = r8;
0x000c2ab6 add r7, sp, 0x50 | r7 += var_50h;
0x000c2ab8 add sl, pc | sl += pc;
0x000c2aba mov r8, r3 | r8 = r3;
| do {
0x000c2abc mov r3, r7 | r3 = r7;
0x000c2abe ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c2ac0 mov r2, sl | r2 = sl;
0x000c2ac2 mov r1, r8 | r1 = r8;
0x000c2ac4 bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c2ac8 clz r3, r0 | r3 &= r0;
0x000c2acc cmp r5, 2 |
0x000c2ace lsr.w r3, r3, 5 | r3 >>= 5;
0x000c2ad2 it eq |
| if (r5 != 2) {
0x000c2ad4 moveq r3, 0 | r3 = 0;
| }
0x000c2ad6 cmp r3, 0 |
| if (r3 == 0) {
0x000c2ad8 beq.w 0xc2ffe | goto label_79;
| }
0x000c2adc ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c2ade ldr r5, [r4] | r5 = *(r4);
0x000c2ae0 cmp r5, 5 |
0x000c2ae2 bne 0xc2abc |
| } while (r5 != 5);
| label_78:
0x000c2ae4 movs r3, 0 | r3 = 0;
0x000c2ae6 str r3, [sp, 0x38] | var_38h = r3;
| label_18:
0x000c2ae8 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c2aea cmp r3, 0 |
| if (r3 == 0) {
0x000c2aec beq.w 0xc32b6 | goto label_80;
| }
0x000c2af0 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
| if (r3 != 0) {
0x000c2af4 cbz r3, 0xc2b0c |
0x000c2af6 movs r3, 0 | r3 = 0;
0x000c2af8 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000c2afa add r2, sp, 0x70 | r2 += var_70h;
0x000c2afc add r1, sp, 0x3c | r1 += var_3ch;
0x000c2afe str r3, [sp] | *(sp) = r3;
0x000c2b00 bl 0xb5808 | fcn_000b5808 (r0, r1, r2, r3);
0x000c2b04 str r0, [sp, 0x38] | var_38h = r0;
0x000c2b06 cmp r0, 0 |
| if (r0 != 0) {
0x000c2b08 bne.w 0xc3036 | goto label_81;
| }
| }
0x000c2b0c movs r1, 0 | r1 = 0;
0x000c2b0e str r1, [sp, 0x50] | var_50h = r1;
0x000c2b10 ldr.w sl, [sb] | sl = *(sb);
0x000c2b14 cmp.w sl, 5 |
| if (sl == 5) {
0x000c2b18 beq.w 0xc33fe | goto label_82;
| }
0x000c2b1c ldr.w r8, [pc, 0x910] | r8 = *(0x000c3430);
0x000c2b20 add r7, sp, 0x50 | r7 += var_50h;
0x000c2b22 mov r3, r7 | r3 = r7;
0x000c2b24 mov r4, sb | r4 = sb;
0x000c2b26 mov r7, sl | r7 = sl;
0x000c2b28 add r5, sp, 0x60 | r5 += var_60h;
0x000c2b2a add r8, pc | r8 += pc;
0x000c2b2c mov sl, r3 | sl = r3;
| do {
0x000c2b2e mov r3, r5 | r3 = r5;
0x000c2b30 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c2b32 mov r2, r8 | r2 = r8;
0x000c2b34 mov r1, sl | r1 = sl;
0x000c2b36 bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c2b3a clz r3, r0 | r3 &= r0;
0x000c2b3e cmp r7, 2 |
0x000c2b40 lsr.w r3, r3, 5 | r3 >>= 5;
0x000c2b44 it eq |
| if (r7 != 2) {
0x000c2b46 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000c2b48 cbz r3, 0xc2b5c | goto label_83;
| }
0x000c2b4a ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c2b4c ldr r7, [r4] | r7 = *(r4);
0x000c2b4e cmp r7, 5 |
0x000c2b50 bne 0xc2b2e |
| } while (r7 != 5);
0x000c2b52 ldr r1, [sp, 0x50] | r1 = var_50h;
| label_49:
0x000c2b54 mov r0, r4 | r0 = r4;
0x000c2b56 mov r2, r5 | r2 = r5;
0x000c2b58 bl 0xc26e0 | fcn_000c26e0 (r0, r1, r2, r3, r4, r5, r6);
| label_83:
0x000c2b5c str r0, [sp, 0x38] | var_38h = r0;
0x000c2b5e add r1, sp, 0x38 | r1 += var_38h;
0x000c2b60 mov r0, fp | r0 = fp;
0x000c2b62 bl 0xb5988 | fcn_000b5988 (r0, r1);
0x000c2b66 ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x000c2b6a cmp.w r8, 0 |
| if (r8 == 0) {
0x000c2b6e beq.w 0xc32bc | goto label_84;
| }
0x000c2b72 str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h_2]");
0x000c2b76 mov r4, fp | r4 = fp;
0x000c2b78 ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000c2b7c ldrd r7, sl, [sp, 0x28] | __asm ("ldrd r7, sl, [var_2ch]");
0x000c2b80 ldr.w r8, [sp, 0x7c] | r8 = var_7ch;
0x000c2b84 b 0xc3048 | goto label_85;
0x000c2b86 add r5, sp, 0x60 | r5 += var_60h;
0x000c2b88 mov r0, r5 | r0 = r5;
0x000c2b8a bl 0x24938 | fcn_00024938 (r0, r1);
0x000c2b8e movs r1, 0 | r1 = 0;
0x000c2b90 lsls r2, r0, 2 | r2 = r0 << 2;
0x000c2b92 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x000c2b94 blx 0x62ec | fcn_000062ec ();
0x000c2b98 ldr.w r0, [fp, 0x10] | r0 = *(arg_10h);
0x000c2b9c mov r1, r5 | r1 = r5;
0x000c2b9e bl 0x29c20 | fcn_00029c20 (r0, r1);
0x000c2ba2 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c2ba6 mov r8, r0 | r8 = r0;
0x000c2ba8 str r0, [sp, 0x38] | var_38h = r0;
| label_12:
0x000c2baa ldrb r1, [r6] | r1 = *(r6);
0x000c2bac mov r0, r5 | r0 = r5;
0x000c2bae bl 0x24938 | r0 = fcn_00024938 (r0, r1);
0x000c2bb2 add.w r0, sl, r0, lsl 2 | r0 = sl + (r0 << 2);
0x000c2bb6 str r0, [sp, 0x7c] | var_7ch = r0;
0x000c2bb8 cmp.w r8, 0 |
| if (r8 == 0) {
0x000c2bbc beq.w 0xc2a10 | goto label_10;
| }
0x000c2bc0 ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000c2bc4 mov r4, fp | r4 = fp;
0x000c2bc6 ldrd r7, sl, [sp, 0x28] | __asm ("ldrd r7, sl, [var_2ch]");
0x000c2bca str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h_2]");
0x000c2bce b 0xc307a | goto label_86;
| label_71:
0x000c2bd0 ldr.w sl, [pc, 0x860] | sl = *(0x000c3434);
0x000c2bd4 movs r3, 1 | r3 = 1;
0x000c2bd6 add.w sb, r5, 0x14 | sb = r5 + 0x14;
0x000c2bda strb r3, [r5, 1] | *((r5 + 1)) = r3;
0x000c2bdc add sl, pc | sl += pc;
0x000c2bde b 0xc29e8 | goto label_11;
| label_66:
0x000c2be0 ldr.w r1, [pc, 0x854] |
0x000c2be4 ldr.w r0, [pc, 0x854] |
0x000c2be8 add r1, pc | r1 = 0x186024;
0x000c2bea add r0, pc | r0 = 0x18602a;
0x000c2bec bl 0x5cb60 | fcn_0005cb60 ();
0x000c2bf0 ldr r2, [sp, 8] | r2 = var_8h_2;
0x000c2bf2 movs r1, 1 | r1 = 1;
0x000c2bf4 mov r4, r0 | r4 = r0;
0x000c2bf6 mov.w r3, -1 | r3 = -1;
0x000c2bfa str r1, [r2, 0x14] | *((r2 + 0x14)) = r1;
0x000c2bfc ldr r0, [r2] | r0 = *(r2);
0x000c2bfe mov.w r2, -1 | r2 = -1;
0x000c2c02 str r3, [sp, 4] | var_4h_2 = r3;
0x000c2c04 mov.w r3, -1 | r3 = -1;
0x000c2c08 str r1, [sp] | *(sp) = r1;
0x000c2c0a mov r1, r4 | r1 = r4;
0x000c2c0c bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x000c2c10 ldr.w r2, [pc, 0x82c] |
0x000c2c14 ldr.w r3, [pc, 0x800] | r3 = *(0xc3418);
0x000c2c18 add r2, pc | r2 = 0x18605c;
0x000c2c1a ldr r3, [r2, r3] | r3 = imp.atan;
0x000c2c1c ldr r2, [r3] | r2 = imp.atan;
0x000c2c1e ldr r3, [sp, 0x84] | r3 = var_84h;
0x000c2c20 eors r2, r3 | r2 ^= r3;
0x000c2c22 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c2c26 bne.w 0xc3410 | goto label_87;
| }
0x000c2c2a mov r0, r4 | r0 = r4;
0x000c2c2c add sp, 0x8c |
0x000c2c2e vpop {d8} | __asm ("vpop {d8}");
0x000c2c32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c2c36 b.w 0x26dbc | void (*0x26dbc)() ();
| label_70:
0x000c2c3a strb r6, [r5] | *(r5) = r6;
0x000c2c3c ldrh r3, [r5] | r3 = *(r5);
0x000c2c3e cmp r3, 0 |
| if (r3 == 0) {
0x000c2c40 beq.w 0xc316c | goto label_88;
| }
| label_28:
0x000c2c44 movs r3, 0 | r3 = 0;
0x000c2c46 str r3, [r4, 0x5c] | *((r4 + 0x5c)) = r3;
| label_69:
0x000c2c48 ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x000c2c4a movs r3, 0 | r3 = 0;
0x000c2c4c str r3, [sp, 0x48] | var_48h = r3;
0x000c2c4e str r3, [sp, 0x50] | var_50h = r3;
0x000c2c50 ldr r6, [r5] | r6 = *(r5);
0x000c2c52 cmp r6, 5 |
| if (r6 == 5) {
0x000c2c54 beq.w 0xc33d6 | goto label_89;
| }
0x000c2c58 ldr.w r8, [pc, 0x7e8] | r8 = *(0x000c3444);
0x000c2c5c add.w sl, sp, 0x48 | sl += var_48h;
0x000c2c60 add.w sb, sp, 0x50 | sb += var_50h;
0x000c2c64 add r8, pc | r8 += pc;
| do {
0x000c2c66 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000c2c68 mov r3, sl | r3 = sl;
0x000c2c6a mov r2, r8 | r2 = r8;
0x000c2c6c mov r1, sb | r1 = sb;
0x000c2c6e bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c2c72 clz r0, r0 | r0 &= r0;
0x000c2c76 cmp r6, 2 |
0x000c2c78 lsr.w r0, r0, 5 | r0 >>= 5;
0x000c2c7c it eq |
| if (r6 != 2) {
0x000c2c7e moveq r0, 0 | r0 = 0;
| }
0x000c2c80 cmp r0, 0 |
| if (r0 == 0) {
0x000c2c82 beq.w 0xc3104 | goto label_90;
| }
0x000c2c86 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000c2c88 ldr r6, [r5] | r6 = *(r5);
0x000c2c8a cmp r6, 5 |
0x000c2c8c bne 0xc2c66 |
| } while (r6 != 5);
0x000c2c8e ldr r2, [sp, 0x48] | r2 = var_48h;
0x000c2c90 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000c2c92 adds r2, 1 | r2++;
| label_45:
0x000c2c94 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| label_26:
0x000c2c96 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x000c2c98 str r2, [sp, 0x68] | var_68h = r2;
0x000c2c9a ldrb.w r2, [fp] | r2 = *(fp);
0x000c2c9e cmp r2, 0 |
| if (r2 == 0) {
0x000c2ca0 beq.w 0xc33f2 | goto label_91;
| }
0x000c2ca4 mov.w sb, 0 | sb = 0;
0x000c2ca8 mov.w r8, 1 |
0x000c2cac movt r8, 0xc2 | r8 = 0xc20001;
0x000c2cb0 mov sl, fp | sl = fp;
0x000c2cb2 mov r5, sb | r5 = sb;
0x000c2cb4 add r6, sp, 0x60 | r6 += var_60h;
| label_16:
0x000c2cb6 cmp r2, 0x63 |
0x000c2cb8 it ne |
| if (r2 != 0x63) {
0x000c2cba cmpne r2, 0x70 | __asm ("cmpne r2, 0x70");
| }
0x000c2cbc str r5, [sp, 0x50] | var_50h = r5;
| if (r2 == 0x63) {
0x000c2cbe beq.w 0xc2f88 | goto label_19;
| }
0x000c2cc2 cmp r2, 0x6e |
| if (r2 == 0x6e) {
0x000c2cc4 beq.w 0xc2f7e | goto label_92;
| }
0x000c2cc8 cmp r2, 0x61 |
| if (r2 == 0x61) {
0x000c2cca beq.w 0xc2f7e | goto label_92;
| }
0x000c2cce cmp r2, 0x6c |
| if (r2 == 0x6c) {
0x000c2cd0 beq.w 0xc3010 | goto label_93;
| }
0x000c2cd4 sub.w r3, r2, 0x62 | r3 = r2 - 0x62;
0x000c2cd8 uxtb r3, r3 | r3 = (int8_t) r3;
0x000c2cda cmp r3, 0x17 |
| if (r3 <= 0x17) {
0x000c2cdc bhi 0xc2ce8 |
0x000c2cde lsr.w r3, r8, r3 | r3 = r8 >> r3;
0x000c2ce2 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x000c2ce4 bmi.w 0xc2f88 | goto label_19;
| }
0x000c2ce6 strh r0, [r2, 0xa] | *((r2 + 0xa)) = r0;
| }
| label_15:
0x000c2ce8 ldr.w r1, [pc, 0x75c] |
0x000c2cec add r0, sp, 0x50 | r0 += var_50h;
0x000c2cee add r1, pc | r1 = 0x18613a;
0x000c2cf0 bl 0x5b58c | fcn_0005b58c (r0);
0x000c2cf4 ldr r1, [sp, 8] | r1 = var_8h_2;
0x000c2cf6 movs r3, 1 | r3 = 1;
0x000c2cf8 ldr r4, [sp, 0x50] | r4 = var_50h;
0x000c2cfa mov.w r2, -1 | r2 = -1;
0x000c2cfe str r3, [r1, 0x14] | *((r1 + 0x14)) = r3;
0x000c2d00 ldr r0, [r1] | r0 = imp.atan;
0x000c2d02 mov r1, r4 | r1 = r4;
0x000c2d04 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000c2d08 mov.w r2, -1 | r2 = -1;
0x000c2d0c mov.w r3, -1 | r3 = -1;
0x000c2d10 bl 0x3e844 | fcn_0003e844 (r0, r1, r2, r3, r4, r5, r6);
0x000c2d14 mov r0, r4 | r0 = r4;
0x000c2d16 bl 0x26dbc | fcn_00026dbc (r0);
| label_22:
0x000c2d1a ldr.w r0, [r7, 0xfc] | r0 = *((r7 + 0xfc));
0x000c2d1e bl 0x7a69c | fcn_0007a69c (r0);
0x000c2d22 movs r3, 0 | r3 = 0;
0x000c2d24 str.w r3, [r7, 0xfc] | __asm ("str.w r3, [r7, 0xfc]");
| label_20:
0x000c2d28 ldr.w r2, [pc, 0x720] |
0x000c2d2c ldr.w r3, [pc, 0x6e8] | r3 = *(0xc3418);
0x000c2d30 add r2, pc | r2 = 0x186180;
0x000c2d32 ldr r3, [r2, r3] | r3 = imp.atan;
0x000c2d34 ldr r2, [r3] | r2 = imp.atan;
0x000c2d36 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000c2d38 eors r2, r3 | r2 ^= r3;
0x000c2d3a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c2d3e bne.w 0xc3410 | goto label_87;
| }
0x000c2d42 add sp, 0x8c |
0x000c2d44 vpop {d8} | __asm ("vpop {d8}");
0x000c2d48 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000c2d4c ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c2d4e cmp r3, 0 |
| if (r3 != 0) {
0x000c2d50 bne.w 0xc30b2 | goto label_94;
| }
| label_14:
0x000c2d54 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c2d58 add r5, sp, 0x60 | r5 += var_60h;
0x000c2d5a ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x000c2d5e b 0xc2baa | goto label_12;
0x000c2d60 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000c2d62 ldr.w r4, [fp, 0x10] | r4 = *(arg_10h);
0x000c2d66 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000c2d6a movs r3, 0 | r3 = 0;
0x000c2d6c str r3, [sp, 0x48] | var_48h = r3;
0x000c2d6e ldr.w r8, [r4] | r8 = *(r4);
0x000c2d72 str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_50h]");
0x000c2d76 cmp.w r8, 5 |
| if (r8 == 5) {
0x000c2d7a beq 0xc2db4 | goto label_95;
| }
0x000c2d7c ldr.w sb, [pc, 0x6d0] | sb = *(0x000c3450);
0x000c2d80 add r5, sp, 0x48 | r5 += var_48h;
0x000c2d82 add r7, sp, 0x50 | r7 += var_50h;
0x000c2d84 add sb, pc | sb += pc;
| do {
0x000c2d86 mov r3, r7 | r3 = r7;
0x000c2d88 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c2d8a mov r2, sb | r2 = sb;
0x000c2d8c mov r1, r5 | r1 = r5;
0x000c2d8e bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c2d92 clz r3, r0 | r3 &= r0;
0x000c2d96 cmp.w r8, 2 |
0x000c2d9a lsr.w r3, r3, 5 | r3 >>= 5;
0x000c2d9e it eq |
| if (r8 != 2) {
0x000c2da0 moveq r3, 0 | r3 = 0;
| }
0x000c2da2 cmp r3, 0 |
| if (r3 == 0) {
0x000c2da4 beq.w 0xc302e | goto label_96;
| }
0x000c2da8 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c2daa ldr.w r8, [r4] | r8 = *(r4);
0x000c2dae cmp.w r8, 5 |
0x000c2db2 bne 0xc2d86 |
| } while (r8 != 5);
| label_95:
0x000c2db4 movs r3, 0 | r3 = 0;
0x000c2db6 str r3, [sp, 0x38] | var_38h = r3;
| label_21:
0x000c2db8 ldr.w r3, [pc, 0x698] |
0x000c2dbc ldr.w r4, [fp, 0x18] | r4 = *(arg_18h);
0x000c2dc0 add r3, pc |
0x000c2dc2 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000c2dc6 cmp r3, 0 |
| if (r3 != 0) {
0x000c2dc8 bne.w 0xc322e | goto label_97;
| }
0x000c2dcc bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c2dd0 cmp r0, 0 |
| if (r0 != 0) {
0x000c2dd2 bne.w 0xc33bc | goto label_98;
| }
0x000c2dd6 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c2dda cmp r0, 0 |
| if (r0 != 0) {
0x000c2ddc bne.w 0xc33bc | goto label_98;
| }
| label_31:
0x000c2de0 lsls r4, r4, 4 | r4 <<= 4;
0x000c2de2 movs r5, 0 | r5 = 0;
0x000c2de4 mov r1, r5 | r1 = r5;
0x000c2de6 mov r0, r4 | r0 = r4;
0x000c2de8 bl 0x28c3c | fcn_00028c3c (r0);
0x000c2dec str r0, [sp, 0x18] | var_18h = r0;
0x000c2dee cmp r0, 0 |
| if (r0 == 0) {
0x000c2df0 beq.w 0xc33bc | goto label_98;
| }
0x000c2df4 mov r2, r4 | r2 = r4;
0x000c2df6 mov r1, r5 | r1 = r5;
0x000c2df8 blx 0x62ec | fcn_000062ec ();
0x000c2dfc ldr.w r4, [fp, 0x10] | r4 = *(arg_10h);
0x000c2e00 str r5, [sp, 0x50] | var_50h = r5;
0x000c2e02 ldr r5, [r4] | r5 = *(r4);
0x000c2e04 cmp r5, 5 |
| if (r5 == 5) {
0x000c2e06 beq.w 0xc33fa | goto label_99;
| }
0x000c2e0a ldr.w r8, [pc, 0x64c] | r8 = *(0x000c3458);
0x000c2e0e add r7, sp, 0x50 | r7 += var_50h;
0x000c2e10 ldr.w sb, [sp, 0x18] | sb = var_18h;
0x000c2e14 add r8, pc | r8 += pc;
| do {
0x000c2e16 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c2e18 mov r3, sb | r3 = sb;
0x000c2e1a mov r2, r8 | r2 = r8;
0x000c2e1c mov r1, r7 | r1 = r7;
0x000c2e1e bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c2e22 clz r0, r0 | r0 &= r0;
0x000c2e26 cmp r5, 2 |
0x000c2e28 lsr.w r0, r0, 5 | r0 >>= 5;
0x000c2e2c it eq |
| if (r5 != 2) {
0x000c2e2e moveq r0, 0 | r0 = 0;
| }
| if (r0 == 0) {
0x000c2e30 cbz r0, 0xc2e44 | goto label_100;
| }
0x000c2e32 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c2e34 ldr r5, [r4] | r5 = *(r4);
0x000c2e36 cmp r5, 5 |
0x000c2e38 bne 0xc2e16 |
| } while (r5 != 5);
0x000c2e3a ldr r3, [sp, 0x50] | r3 = var_50h;
0x000c2e3c ldr r2, [sp, 0x18] | r2 = var_18h;
0x000c2e3e add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
| label_48:
0x000c2e42 str r4, [r3] | *(r3) = r4;
| label_100:
0x000c2e44 ldr r5, [sp, 0x68] | r5 = var_68h;
0x000c2e46 cmp r5, 0 |
| if (r5 <= 0) {
0x000c2e48 ble 0xc2e64 | goto label_101;
| }
0x000c2e4a ldr r3, [sp, 0x18] | r3 = var_18h;
0x000c2e4c movs r2, 0 | r2 = 0;
0x000c2e4e add.w r0, r3, r5, lsl 4 | r0 = r3 + (r5 << 4);
| do {
0x000c2e52 ldr r1, [r3] | r1 = *(r3);
0x000c2e54 adds r3, 0x10 | r3 += 0x10;
0x000c2e56 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x000c2e58 ldr r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x000c2e5a subs r2, r2, r1 | r2 -= r1;
0x000c2e5c str r2, [r3, -0xc] | *((r3 - 0xc)) = r2;
0x000c2e60 cmp r0, r3 |
0x000c2e62 bne 0xc2e52 |
| } while (r0 != r3);
| label_101:
0x000c2e64 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c2e66 cmp r3, 0 |
0x000c2e68 ittt gt |
| if (r3 <= 0) {
0x000c2e6a addgt r3, sp, 0x50 | r3 += var_50h;
| }
| if (r3 <= 0) {
0x000c2e6c movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x000c2e6e strgt r3, [sp, 0x20] | var_20h = r3;
| }
| if (r3 <= 0) {
0x000c2e70 ble.w 0xc340a | goto label_102;
| }
| label_40:
0x000c2e74 cmp r5, 0 |
| if (r5 <= 0) {
0x000c2e76 ble.w 0xc3406 | goto label_103;
| }
0x000c2e7a mov.w sb, 0 | sb = 0;
0x000c2e7e ldr r5, [sp, 0x18] | r5 = var_18h;
0x000c2e80 mov r8, sb | r8 = sb;
0x000c2e82 str r6, [sp, 0x30] | var_30h = r6;
0x000c2e84 b 0xc2ea0 | goto label_104;
| label_13:
0x000c2e86 subs r0, 2 | r0 -= 2;
0x000c2e88 add.w sb, sb, 1 | sb++;
0x000c2e8c add r0, r6 | r0 += r6;
0x000c2e8e str r3, [r5, 8] | *((r5 + 8)) = r3;
0x000c2e90 str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
| do {
0x000c2e92 ldr r3, [sp, 0x68] | r3 = var_68h;
0x000c2e94 add.w r8, r8, 1 | r8++;
0x000c2e98 adds r5, 0x10 | r5 += 0x10;
0x000c2e9a cmp r8, r3 |
| if (r8 >= r3) {
0x000c2e9c bge.w 0xc3314 | goto label_105;
| }
| label_104:
0x000c2ea0 mov r3, r5 | r3 = r5;
0x000c2ea2 mov r2, r4 | r2 = r4;
0x000c2ea4 ldr r1, [r3], 8 | r1 = *(r3);
| r3 += 8;
0x000c2ea8 mov r0, fp | r0 = fp;
0x000c2eaa bl 0xc0da0 | r0 = fcn_000c0da0 (r0, r1, r2, r3, r4, r5, r6);
0x000c2eae mov r7, r0 | r7 = r0;
0x000c2eb0 cmp r0, 0 |
| if (r0 != 0) {
0x000c2eb2 bne.w 0xc330e | goto label_106;
| }
0x000c2eb6 ldr.w sl, [r5, 8] | sl = *((r5 + 8));
0x000c2eba cmp.w sl, 0 |
0x000c2ebe beq 0xc2e92 |
| } while (sl == 0);
0x000c2ec0 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x000c2ec2 mov r0, sl | r0 = sl;
0x000c2ec4 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000c2ec6 str r6, [r5, 0xc] | *((r5 + 0xc)) = r6;
0x000c2ec8 bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x000c2ecc add.w r3, sl, r0 | r3 = sl + r0;
0x000c2ed0 ldrd r0, r1, [sp, 0x50] | __asm ("ldrd r0, r1, [var_50h]");
0x000c2ed4 cmp r0, 2 |
0x000c2ed6 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r0 >= 2) {
0x000c2eda bhs 0xc2e86 | goto label_13;
| }
0x000c2edc ldr r6, [sp, 0x30] | r6 = var_30h;
0x000c2ede movw r8, 0x10b | r8 = 0x10b;
0x000c2ee2 str r7, [r5, 8] | *((r5 + 8)) = r7;
| label_35:
0x000c2ee4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000c2ee6 bl 0x26dbc | fcn_00026dbc (r0);
| label_43:
0x000c2eea str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h]");
0x000c2eee b 0xc3008 | goto label_107;
0x000c2ef0 movs r3, 0 | r3 = 0;
0x000c2ef2 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000c2ef4 add r2, sp, 0x50 | r2 += var_50h;
0x000c2ef6 movs r1, 0x15 | r1 = 0x15;
0x000c2ef8 ldrd r4, r5, [fp, 0x20] | __asm ("ldrd r4, r5, [arg_20h]");
0x000c2efa cmp r0, r1 |
0x000c2efc mov r7, r3 | r7 = r3;
0x000c2efe str r3, [sp, 0x50] | var_50h = r3;
0x000c2f00 bl 0xa4658 | r0 = fcn_000a4658 (r0, r1, r2, r3);
0x000c2f04 mov r8, r0 | r8 = r0;
0x000c2f06 cmp r0, 0 |
| if (r0 == 0) {
0x000c2f08 beq.w 0xc30d4 | goto label_108;
| }
0x000c2f0c ldr r4, [sp, 0x50] | r4 = var_50h;
0x000c2f0e str r0, [sp, 0x38] | var_38h = r0;
| label_25:
0x000c2f10 mov r0, r4 | r0 = r4;
0x000c2f12 add r5, sp, 0x60 | r5 += var_60h;
0x000c2f14 bl 0x79b80 | fcn_00079b80 (r0);
0x000c2f18 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c2f1c b 0xc2baa | goto label_12;
0x000c2f1e ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c2f20 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c2f24 ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x000c2f28 cmp r3, 0 |
| if (r3 == 0) {
0x000c2f2a beq 0xc300c | goto label_33;
| }
0x000c2f2c ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c2f2e add r5, sp, 0x60 | r5 += var_60h;
0x000c2f30 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000c2f34 b 0xc2baa | goto label_12;
0x000c2f36 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c2f38 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c2f3c ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x000c2f40 cmp r3, 0 |
| if (r3 == 0) {
0x000c2f42 beq 0xc300c | goto label_33;
| }
0x000c2f44 ldr r3, [sp, 0x68] | r3 = var_68h;
0x000c2f46 add r5, sp, 0x60 | r5 += var_60h;
0x000c2f48 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000c2f4c b 0xc2baa | goto label_12;
0x000c2f4e ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c2f50 cmp r3, 0 |
| if (r3 == 0) {
0x000c2f52 beq.w 0xc2d54 | goto label_14;
| }
0x000c2f56 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000c2f5a movs r3, 0 | r3 = 0;
0x000c2f5c str r3, [sp] | *(sp) = r3;
0x000c2f5e add r2, sp, 0x50 | r2 += var_50h;
0x000c2f60 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000c2f62 add r1, sp, 0x3c | r1 += var_3ch;
0x000c2f64 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x000c2f68 add r5, sp, 0x60 | r5 += var_60h;
0x000c2f6a bl 0xb5808 | fcn_000b5808 (r0, r1, r2, r3);
0x000c2f6e ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c2f72 mov r8, r0 | r8 = r0;
0x000c2f74 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000c2f76 str r0, [sp, 0x38] | var_38h = r0;
0x000c2f78 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000c2f7c b 0xc2baa | goto label_12;
| label_92:
0x000c2f7e ldrb.w r3, [r7, 0xec] | r3 = *((r7 + 0xec));
0x000c2f82 cmp r3, 0 |
| if (r3 == 0) {
0x000c2f84 beq.w 0xc2ce8 | goto label_15;
| }
| label_19:
0x000c2f88 ldrb.w r1, [sl] | r1 = *(sl);
0x000c2f8c mov r0, r6 | r0 = r6;
0x000c2f8e bl 0x24938 | fcn_00024938 (r0, r1);
0x000c2f92 ldrb r2, [sl, 1]! | r2 = *((sl += 1));
0x000c2f96 add sb, r0 | sb += r0;
0x000c2f98 cmp r2, 0 |
| if (r2 != 0) {
0x000c2f9a bne.w 0xc2cb6 | goto label_16;
| }
0x000c2f9e adds.w r6, sb, 3 | r6 += var_3h;
0x000c2fa2 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000c2fa6 lsls r5, r2, 3 | r5 = r2 << 3;
0x000c2fa8 orr.w r5, r5, r6, lsr 29 | r5 |= (r6 >> 29);
0x000c2fac lsls r6, r6, 3 | r6 <<= 3;
| label_47:
0x000c2fae mov r0, fp | r0 = fp;
0x000c2fb0 blx 0x65dc | r0 = strcmp (r0, r1);
0x000c2fb4 mov sl, r0 | sl = r0;
0x000c2fb6 adds r0, r0, r6 | r0 += r6;
0x000c2fb8 adc r1, r5, 0 | __asm ("adc r1, r5, 0");
0x000c2fbc adds r0, 1 | r0++;
0x000c2fbe adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000c2fc2 bl 0x5ac48 | r0 = fcn_0005ac48 (r0, r1);
0x000c2fc6 mov r5, r0 | r5 = r0;
0x000c2fc8 cmp r0, 0 |
| if (r0 == 0) {
0x000c2fca beq.w 0xc317c | goto label_109;
| }
0x000c2fce lsl.w r3, sb, 2 | r3 = sb << 2;
0x000c2fd2 movs r1, 0x14 | r1 = 0x14;
0x000c2fd4 str r1, [r5, 0x10] | *((r5 + 0x10)) = r1;
0x000c2fd6 add r0, r6 | r0 += r6;
0x000c2fd8 adds r3, 0x18 | r3 += 0x18;
0x000c2fda add.w r1, sb, 5 | r1 = sb + 5;
0x000c2fde str.w r3, [r5, r1, lsl 2] | __asm ("str.w r3, [r5, r1, lsl 2]");
0x000c2fe2 add.w r2, sl, 1 | r2 = sl + 1;
0x000c2fe6 mov r1, fp | r1 = fp;
0x000c2fe8 str.w sb, [r5, 4] | __asm ("str.w sb, [r5, 4]");
0x000c2fec str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x000c2fee blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c2ff2 movs r3, 1 | r3 = 1;
0x000c2ff4 strb r3, [r5] | *(r5) = r3;
0x000c2ff6 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000c2ff8 strd r3, r5, [r4, 0x58] | __asm ("strd r3, r5, [r4, 0x58]");
0x000c2ffc b 0xc29c6 | goto label_17;
| label_79:
0x000c2ffe mov r8, r0 | r8 = r0;
0x000c3000 str r0, [sp, 0x38] | var_38h = r0;
0x000c3002 cmp r0, 0 |
| if (r0 == 0) {
0x000c3004 beq.w 0xc2ae8 | goto label_18;
| }
0x000c3006 add r5, sp, 0x1c0 | r5 = sp + 0x1c0;
| label_107:
0x000c3008 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
| label_33:
0x000c300c add r5, sp, 0x60 | r5 += var_60h;
0x000c300e b 0xc2baa | goto label_12;
| label_93:
0x000c3010 ldrb.w r3, [r7, 0xee] | r3 = *((r7 + 0xee));
0x000c3014 cmp r3, 0 |
| if (r3 == 0) {
0x000c3016 beq.w 0xc2ce8 | goto label_15;
| }
0x000c301a b 0xc2f88 | goto label_19;
| label_68:
0x000c301c ldr.w r1, [pc, 0x43c] |
0x000c3020 mov r2, r3 | r2 = r3;
0x000c3022 ldr r0, [sp, 8] | r0 = var_8h_2;
0x000c3024 str r3, [sp] | *(sp) = r3;
0x000c3026 add r1, pc | r1 = 0x186486;
0x000c3028 bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c302c b 0xc2d28 | goto label_20;
| label_96:
0x000c302e str r0, [sp, 0x38] | var_38h = r0;
0x000c3030 cmp r0, 0 |
| if (r0 == 0) {
0x000c3032 beq.w 0xc2db8 | goto label_21;
| }
| label_81:
0x000c3036 ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_24h]");
0x000c303a mov r4, fp | r4 = fp;
0x000c303c ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000c3040 add r5, sp, 0x60 | r5 += var_60h;
0x000c3042 ldr.w r8, [sp, 0x7c] | r8 = var_7ch;
0x000c3046 str r0, [sp, 0x10] | var_10h_2 = r0;
| label_85:
0x000c3048 ldrb r1, [r6] | r1 = *(r6);
0x000c304a mov r0, r5 | r0 = r5;
0x000c304c bl 0x24938 | r0 = fcn_00024938 (r0, r1);
0x000c3050 add.w r0, r8, r0, lsl 2 | r0 = r8 + (r0 << 2);
0x000c3054 str r0, [sp, 0x7c] | var_7ch = r0;
0x000c3056 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000c3058 bl 0x79b80 | fcn_00079b80 (r0);
0x000c305c ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c305e cmp r3, 0 |
| if (r3 != 0) {
0x000c3060 bne 0xc3108 | goto label_110;
| }
| do {
0x000c3062 ldr r0, [sp, 8] | r0 = var_8h_2;
0x000c3064 ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x000c3066 bl 0x4004c | fcn_0004004c (r0, r1);
0x000c306a mov r0, sb | r0 = sb;
0x000c306c blx sl | sl (r0);
0x000c306e b 0xc2d1a | goto label_22;
| label_73:
0x000c3070 ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_24h]");
0x000c3074 mov r4, fp | r4 = fp;
0x000c3076 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
| label_86:
0x000c307a ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000c307c bl 0x79b80 | fcn_00079b80 (r0);
0x000c3080 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000c3082 cmp r3, 0 |
| if (r3 != 0) {
0x000c3084 bne 0xc3108 | goto label_110;
| }
| label_27:
0x000c3086 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000c3088 cmp r3, 0 |
0x000c308a bne 0xc3062 |
| } while (r3 != 0);
0x000c308c ldr r2, [r4, 0x5c] | r2 = *((r4 + 0x5c));
0x000c308e mov r1, sb | r1 = sb;
0x000c3090 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000c3092 ldr r0, [sp, 8] | r0 = var_8h_2;
0x000c3094 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000c3096 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000c3098 adr r0, 0 | r0 = 0;
0x000c309a lsls r2, r2, 2 | r2 <<= 2;
0x000c309c bl 0x3f8bc | fcn_0003f8bc (r0, r1, r2, r3);
0x000c30a0 b 0xc2d1a | goto label_22;
| label_76:
0x000c30a2 ldrb r3, [r0, 0x12] | r3 = *((r0 + 0x12));
0x000c30a4 cmp r3, 1 |
0x000c30a6 it eq |
| if (r3 == 1) {
0x000c30a8 ldreq fp, [r0, 8] | fp = *((r0 + 8));
| goto label_111;
| }
| if (r3 != 1) {
| label_111:
0x000c30ac bne.w 0xc2a70 | goto label_23;
| }
0x000c30b0 b 0xc2a7e | goto label_24;
| label_94:
0x000c30b2 add r3, sp, 0x44 | r3 += var_44h;
0x000c30b4 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000c30b6 str r3, [sp] | *(sp) = r3;
0x000c30b8 add r2, sp, 0x48 | r2 += var_48h;
0x000c30ba add r3, sp, 0x40 | r3 += var_40h;
0x000c30bc add r1, sp, 0x3c | r1 += var_3ch;
0x000c30be bl 0xb5808 | r0 = fcn_000b5808 (r0, r1, r2, r3);
0x000c30c2 mov r8, r0 | r8 = r0;
0x000c30c4 str r0, [sp, 0x38] | var_38h = r0;
0x000c30c6 cmp r0, 0 |
| if (r0 == 0) {
0x000c30c8 beq.w 0xc3246 | goto label_112;
| }
0x000c30cc ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c30d0 add r5, sp, 0x60 | r5 += var_60h;
0x000c30d2 b 0xc2baa | goto label_12;
| label_108:
0x000c30d4 mov r2, r4 | r2 = r4;
0x000c30d6 ldr r4, [sp, 0x50] | r4 = var_50h;
0x000c30d8 mov r3, r5 | r3 = r5;
0x000c30da movs r1, 1 | r1 = 1;
0x000c30dc mov r0, r4 | r0 = r4;
0x000c30de bl 0x53da8 | fcn_00053da8 (r0, r1, r2, r3);
0x000c30e2 mov r0, r4 | r0 = r4;
0x000c30e4 bl 0x96a64 | r0 = fcn_00096a64 (r0);
0x000c30e8 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000c30ea beq 0xc318c | goto label_113;
| }
| label_29:
0x000c30ec mov r0, r4 | r0 = r4;
0x000c30ee movw r8, 0x10b | r8 = 0x10b;
0x000c30f2 bl 0x79b80 | r0 = fcn_00079b80 (r0);
0x000c30f6 cmp r0, 0 |
0x000c30f8 it ne |
| if (r0 == 0) {
0x000c30fa movne r8, r0 | r8 = r0;
| }
0x000c30fc movs r4, 0 | r4 = 0;
0x000c30fe str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h]");
0x000c3102 b 0xc2f10 | goto label_25;
| label_90:
0x000c3104 ldr r2, [sp, 0x48] | r2 = var_48h;
0x000c3106 b 0xc2c96 | goto label_26;
| label_110:
0x000c3108 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000c310a movs r3, 1 | r3 = 1;
0x000c310c ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000c310e add.w r1, r0, 0x14 | r1 = r0 + 0x14;
0x000c3112 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x000c3114 adds r2, 6 | r2 += 6;
0x000c3116 lsls r2, r2, 2 | r2 <<= 2;
0x000c3118 add r0, r2 | r0 += r2;
0x000c311a subs r2, 0x18 | r2 -= 0x18;
0x000c311c blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c3120 b 0xc3086 | goto label_27;
| label_77:
0x000c3122 ldr.w fp, [pc, 0x33c] |
0x000c3126 ldr r7, [r4] | r7 = *(r4);
0x000c3128 add fp, pc | fp = 0x18658e;
0x000c312a b 0xc2990 | goto label_9;
| label_72:
0x000c312c ldr r3, [pc, 0x334] |
0x000c312e add r3, pc |
0x000c3130 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000c3134 cmp r3, 0 |
| if (r3 != 0) {
0x000c3136 bne 0xc3234 | goto label_114;
| }
0x000c3138 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c313c cmp r0, 0 |
| if (r0 != 0) {
0x000c313e bne.w 0xc32ac | goto label_115;
| }
0x000c3142 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c3146 cmp r0, 0 |
| if (r0 != 0) {
0x000c3148 bne.w 0xc32ac | goto label_115;
| }
| label_32:
0x000c314c lsls r0, r6, 2 | r0 = r6 << 2;
0x000c314e movs r1, 0 | r1 = 0;
0x000c3150 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000c3154 mov sb, r0 | sb = r0;
0x000c3156 cmp r0, 0 |
| if (r0 == 0) {
0x000c3158 beq.w 0xc32ac | goto label_115;
| }
0x000c315c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000c315e cmp r3, 0 |
| if (r3 != 0) {
0x000c3160 bne.w 0xc33c2 | goto label_116;
| }
| label_44:
0x000c3164 ldr.w sl, [pc, 0x300] | sl = *(0x000c3468);
0x000c3168 add sl, pc | sl += pc;
0x000c316a b 0xc29e8 | goto label_11;
| label_88:
0x000c316c ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x000c316e cmp r3, 0 |
| if (r3 != 0) {
0x000c3170 bne.w 0xc2c44 | goto label_28;
| }
0x000c3174 mov r0, r5 | r0 = r5;
0x000c3176 bl 0x26dbc | fcn_00026dbc (r0);
0x000c317a b 0xc2c44 | goto label_28;
| label_109:
0x000c317c movs r3, 1 | r3 = 1;
0x000c317e ldr r0, [sp, 8] | r0 = var_8h_2;
0x000c3180 movs r1, 7 | r1 = 7;
0x000c3182 strd r3, r5, [r4, 0x58] | __asm ("strd r3, r5, [r4, 0x58]");
0x000c3186 bl 0x4004c | fcn_0004004c (r0, r1);
0x000c318a b 0xc2d1a | goto label_22;
| label_113:
0x000c318c mov r1, r8 | r1 = r8;
0x000c318e mov r0, r4 | r0 = r4;
0x000c3190 bl 0x2e71c | fcn_0002e71c (r0, r1);
0x000c3194 ldr r3, [pc, 0x2d4] |
0x000c3196 ldrh r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x000c3198 add r3, pc | r3 = 0x186608;
0x000c319a and r2, r2, 0x3f | r2 &= 0x3f;
0x000c319e add r3, r2 | r3 += r2;
0x000c31a0 ldrb.w r5, [r3, 0x258] | r5 = *((r3 + 0x258));
0x000c31a4 cmp r4, 0 |
| if (r4 == 0) {
0x000c31a6 beq.w 0xc33da | goto label_117;
| }
0x000c31aa mov r0, r4 | r0 = r4;
0x000c31ac bl 0x2e7ac | fcn_0002e7ac (r0);
0x000c31b0 cmp r5, 4 |
| if (r5 != 4) {
0x000c31b2 bne 0xc30ec | goto label_29;
| }
0x000c31b4 mov r1, r8 | r1 = r8;
0x000c31b6 mov r0, r4 | r0 = r4;
0x000c31b8 str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h]");
0x000c31bc bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000c31c0 bl 0x3e27c | r0 = fcn_0003e27c (r0);
0x000c31c4 mov r5, r0 | r5 = r0;
0x000c31c6 mov r0, r4 | r0 = r4;
0x000c31c8 bl 0x2e7ac | fcn_0002e7ac (r0);
| label_46:
0x000c31cc movs r1, 0 | r1 = 0;
0x000c31ce mov r0, r4 | r0 = r4;
0x000c31d0 bl 0x3db60 | fcn_0003db60 (r0);
0x000c31d4 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c31d6 add r0, r5 | r0 += r5;
0x000c31d8 cmp r3, 0 |
| if (r3 <= 0) {
0x000c31da ble.w 0xc33d0 | goto label_118;
| }
0x000c31de ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000c31e0 movs r7, 0 | r7 = 0;
0x000c31e2 sub.w ip, r3, 4 |
0x000c31e6 b 0xc31f6 | goto label_119;
| label_30:
0x000c31e8 str r1, [ip, 4]! | *((ip += 4)) = r1;
0x000c31ec adds r7, 1 | r7++;
0x000c31ee ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c31f0 cmp r7, r3 |
| if (r7 >= r3) {
0x000c31f2 bge.w 0xc33d0 | goto label_118;
| }
| label_119:
0x000c31f6 cmp r0, r5 |
0x000c31f8 it ls |
| if (r0 > r5) {
0x000c31fa movls r1, 0 | r1 = 0;
| }
| if (r0 < r5) {
0x000c31fc bls 0xc321e | goto label_120;
| }
0x000c31fe movs r3, 0 | r3 = 0;
0x000c3200 mov r1, r3 | r1 = r3;
| do {
0x000c3202 ldrb lr, [r5], 1 |
0x000c3206 and r2, lr, 0x7f | r2 = lr & 0x7f;
0x000c320a lsls r2, r3 | r2 <<= r3;
0x000c320c adds r1, r2, r1 | r1 = r2 + r1;
0x000c320e tst.w lr, 0x80 |
| if ((lr & 0x80) == 0) {
0x000c3212 beq 0xc3220 | goto label_121;
| }
0x000c3214 adds r3, 7 | r3 += 7;
0x000c3216 cmp r3, 0x46 |
| if (r3 == 0x46) {
0x000c3218 beq 0xc3220 | goto label_121;
| }
0x000c321a cmp r0, r5 |
0x000c321c bne 0xc3202 |
| } while (r0 != r5);
| label_120:
0x000c321e adds r5, 1 | r5++;
| label_121:
0x000c3220 cmp r0, r5 |
| if (r0 >= r5) {
0x000c3222 bhs 0xc31e8 | goto label_30;
| }
0x000c3224 movw r3, 0x10b | r3 = 0x10b;
0x000c3228 mov r8, r3 | r8 = r3;
0x000c322a str r3, [sp, 0x38] | var_38h = r3;
0x000c322c b 0xc2f10 | goto label_25;
| label_97:
0x000c322e dmb ish | __asm ("dmb ish");
0x000c3232 b 0xc2de0 | goto label_31;
| label_114:
0x000c3234 dmb ish | __asm ("dmb ish");
0x000c3238 b 0xc314c | goto label_32;
| label_75:
0x000c323a ldr.w fp, [pc, 0x234] |
0x000c323e ldr r7, [r4] | r7 = *(r4);
0x000c3240 add fp, pc | fp = 0x1866b6;
0x000c3242 b.w 0xc2990 | goto label_9;
| label_112:
0x000c3246 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c3248 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c324c cmp r3, 0 |
0x000c324e ittt gt |
| if (r3 > 0) {
0x000c3250 ldrdgt r4, sb, [sp, 0x40] | __asm ("ldrdgt r4, sb, [var_40h]");
| }
| if (r3 <= 0) {
0x000c3254 movgt r5, r0 | r5 = r0;
| }
| if (r3 > 0) {
0x000c3256 add r7, sp, 0x50 | r7 += var_50h;
| }
| if (r3 > 0) {
0x000c3258 bgt 0xc3292 | goto label_122;
| }
0x000c325a b 0xc300c | goto label_33;
| label_34:
0x000c325c ldrd r2, r3, [sp, 0x48] | __asm ("ldrd r2, r3, [var_48h]");
0x000c3260 ldr r0, [sp, 0x50] | r0 = var_50h;
0x000c3262 lsr.w ip, r3, 0x1f |
0x000c3264 ldrb r3, [r2, 0x13] | r3 = *((r2 + 0x13));
0x000c3266 adds.w ip, ip, r2 |
0x000c326a lsr.w ip, ip, 1 |
0x000c326e adc r1, r3, 0 | __asm ("adc r1, var_50h");
0x000c3272 orr.w ip, ip, r1, lsl 31 |
0x000c3276 asrs r1, r1, 1 | r1 >>= 1;
0x000c3278 adds.w r0, r0, ip | r0 += ip;
0x000c327c adc r1, r1, 0 | __asm ("adc r1, var_50h");
0x000c3280 bl 0xc4fc4 | fcn_000c4fc4 (r0, r1, r2, r3);
0x000c3284 str.w r0, [sl, r5, lsl 2] | __asm ("str.w r0, [sl, r5, lsl 2]");
0x000c3288 adds r5, 1 | r5++;
0x000c328a ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c328c cmp r5, r3 |
| if (r5 >= r3) {
0x000c328e bge.w 0xc300c | goto label_33;
| }
| label_122:
0x000c3292 mov r0, r4 | r0 = r4;
0x000c3294 mov r1, r7 | r1 = r7;
0x000c3296 bl 0x24184 | r0 = fcn_00024184 (r0, r1);
0x000c329a add r4, r0 | r4 += r0;
0x000c329c cmp r4, sb |
0x000c329e str r4, [sp, 0x40] | var_40h = r4;
| if (r4 < sb) {
0x000c32a0 bls 0xc325c | goto label_34;
| }
0x000c32a2 movw r3, 0x10b | r3 = 0x10b;
0x000c32a6 mov r8, r3 | r8 = r3;
0x000c32a8 str r3, [sp, 0x38] | var_38h = r3;
0x000c32aa b 0xc300c | goto label_33;
| label_115:
0x000c32ac ldr r0, [sp, 8] | r0 = var_8h_2;
0x000c32ae movs r1, 7 | r1 = 7;
0x000c32b0 bl 0x4004c | fcn_0004004c (r0, r1);
0x000c32b4 b 0xc2d1a | goto label_22;
| label_80:
0x000c32b6 ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x000c32ba add r5, sp, 0x60 | r5 += var_60h;
| label_84:
0x000c32bc movs r1, 0 | r1 = 0;
0x000c32be str r1, [sp, 0x50] | var_50h = r1;
0x000c32c0 ldr.w r4, [sb] | r4 = *(sb);
0x000c32c2 ands r0, r0 | r0 &= r0;
0x000c32c4 cmp r4, 5 |
| if (r4 == 5) {
0x000c32c6 beq 0xc3300 | goto label_123;
| }
0x000c32c8 ldr.w sl, [pc, 0x1a8] | sl = *(0x000c3474);
0x000c32cc add r7, sp, 0x50 | r7 += var_50h;
0x000c32ce mov r3, r7 | r3 = r7;
0x000c32d0 mov r7, r4 | r7 = r4;
0x000c32d2 mov r4, sb | r4 = sb;
0x000c32d4 mov sb, r3 | sb = r3;
0x000c32d6 add sl, pc | sl += pc;
| do {
0x000c32d8 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c32da mov r3, r5 | r3 = r5;
0x000c32dc mov r2, sl | r2 = sl;
0x000c32de mov r1, sb | r1 = sb;
0x000c32e0 bl 0x248c0 | r0 = fcn_000248c0 (r0, r1, r2, r3);
0x000c32e4 clz r0, r0 | r0 &= r0;
0x000c32e8 cmp r7, 2 |
0x000c32ea lsr.w r0, r0, 5 | r0 >>= 5;
0x000c32ee it eq |
| if (r7 != 2) {
0x000c32f0 moveq r0, 0 | r0 = 0;
| }
| if (r0 == 0) {
0x000c32f2 cbz r0, 0xc3308 | goto label_124;
| }
0x000c32f4 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000c32f6 ldr r7, [r4] | r7 = *(r4);
0x000c32f8 cmp r7, 5 |
0x000c32fa bne 0xc32d8 |
| } while (r7 != 5);
0x000c32fc ldr r1, [sp, 0x50] | r1 = var_50h;
0x000c32fe mov sb, r4 | sb = r4;
| label_123:
0x000c3300 mov r0, sb | r0 = sb;
0x000c3302 mov r2, r5 | r2 = r5;
0x000c3304 bl 0xc1244 | fcn_000c1244 (r0, r1, r2, r3);
| label_124:
0x000c3308 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x000c330c b 0xc2baa | goto label_12;
| label_106:
0x000c330e ldr r6, [sp, 0x30] | r6 = var_30h;
0x000c3310 mov r8, r0 | r8 = r0;
0x000c3312 b 0xc2ee4 | goto label_35;
| label_105:
0x000c3314 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000c3316 mov sl, r3 | sl = r3;
0x000c3318 cmp.w sb, 0 |
| if (sb == 0) {
0x000c331c beq 0xc3406 | goto label_103;
| }
0x000c331e ldr r3, [sp, 0x18] | r3 = var_18h;
0x000c3320 movs r7, 0 | r7 = 0;
0x000c3322 add.w r8, r3, sl, lsl 4 | r8 = r3 + (sl << 4);
0x000c3326 add r3, sp, 0x50 | r3 += var_50h;
0x000c3328 strd r3, r4, [sp, 0x30] | __asm ("strd r3, r4, [sp, 0x30]");
| label_36:
0x000c332c cmp.w sl, 0 |
| if (sl <= 0) {
0x000c3330 ble 0xc3396 | goto label_125;
| }
| label_41:
0x000c3332 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000c3334 movs r0, 0 | r0 = 0;
0x000c3336 mov r5, r0 | r5 = r0;
| do {
0x000c3338 ldr r3, [r1, 8] | r3 = *((r1 + 8));
| if (r3 == 0) {
0x000c333a cbz r3, 0xc338e | goto label_126;
| }
| if (r5 == 0) {
0x000c333c cbz r5, 0xc3392 | goto label_127;
| }
0x000c333e ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x000c3340 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000c3342 cmp r2, r3 |
0x000c3344 it lt |
| if (r2 >= r3) {
0x000c3346 movlt r5, r1 | r5 = r1;
| }
| if (r0 == 0) {
| label_39:
0x000c3348 cbz r0, 0xc338a | goto label_128;
| }
0x000c334a ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x000c334c ldr r3, [r1, -0x4] | r3 = *((r1 - 0x4));
0x000c3350 cmp r2, r3 |
0x000c3352 it ne |
| if (r2 == r3) {
0x000c3354 movne r0, 1 | r0 = 1;
| }
| if (r2 == r3) {
0x000c3356 beq 0xc338a | goto label_128;
| }
| label_37:
0x000c3358 cmp r7, r0 |
0x000c335a it lt |
| if (r7 >= r0) {
0x000c335c movlt r7, r0 | r7 = r0;
| }
| label_38:
0x000c335e adds r1, 0x10 | r1 += 0x10;
0x000c3360 cmp r1, r8 |
0x000c3362 bne 0xc3338 |
| } while (r1 != r8);
| if (r5 == 0) {
0x000c3364 cbz r5, 0xc33b4 | goto label_129;
| }
0x000c3366 ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x000c3368 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000c336a mov r0, r4 | r0 = r4;
0x000c336c bl 0x24184 | fcn_00024184 (r0, r1);
0x000c3370 ldrd r1, r3, [sp, 0x50] | __asm ("ldrd r1, r3, [var_50h]");
0x000c3374 cmp r1, 2 |
0x000c3376 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r1 <= 2) {
0x000c337a blo 0xc33b0 | goto label_130;
| }
0x000c337c ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000c337e subs r1, 2 | r1 -= 2;
0x000c3380 adds r2, r4, r0 | r2 = r4 + r0;
0x000c3382 str r2, [r5, 8] | *((r5 + 8)) = r2;
0x000c3384 add r3, r1 | r3 += r1;
0x000c3386 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000c3388 b 0xc332c | goto label_36;
| label_128:
0x000c338a adds r0, 1 | r0++;
0x000c338c b 0xc3358 | goto label_37;
| label_126:
0x000c338e mov r0, r3 | r0 = r3;
0x000c3390 b 0xc335e | goto label_38;
| label_127:
0x000c3392 mov r5, r1 | r5 = r1;
0x000c3394 b 0xc3348 | goto label_39;
| label_125:
0x000c3396 subs.w sb, sb, 1 | sb--;
| if (sb != sb) {
0x000c339a bne 0xc332c | goto label_36;
| }
| label_42:
0x000c339c ldr r4, [sp, 0x34] | r4 = var_34h;
| label_50:
0x000c339e ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000c33a0 str.w r7, [r3, r4, lsl 2] | __asm ("str.w r7, [r3, r4, lsl 2]");
0x000c33a4 adds r4, 1 | r4++;
0x000c33a6 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c33a8 cmp r4, r3 |
| if (r4 >= r3) {
0x000c33aa bge 0xc340a | goto label_102;
| }
0x000c33ac ldr r5, [sp, 0x68] | r5 = var_68h;
0x000c33ae b 0xc2e74 | goto label_40;
| label_130:
0x000c33b0 movs r3, 0 | r3 = 0;
0x000c33b2 str r3, [r5, 8] | *((r5 + 8)) = r3;
| label_129:
0x000c33b4 subs.w sb, sb, 1 | sb--;
| if (sb != sb) {
0x000c33b8 bne 0xc3332 | goto label_41;
| }
0x000c33ba b 0xc339c | goto label_42;
| label_98:
0x000c33bc mov.w r8, 7 | r8 = 7;
0x000c33c0 b 0xc2eea | goto label_43;
| label_116:
0x000c33c2 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000c33c4 add.w r1, r5, 0x14 | r1 = r5 + 0x14;
0x000c33c8 lsls r2, r2, 2 | r2 <<= 2;
0x000c33ca blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c33ce b 0xc3164 | goto label_44;
| label_118:
0x000c33d0 ldr.w r8, [sp, 0x38] | r8 = var_38h;
0x000c33d4 b 0xc2f10 | goto label_25;
| label_89:
0x000c33d6 movs r2, 1 | r2 = 1;
0x000c33d8 b 0xc2c94 | goto label_45;
| label_117:
0x000c33da cmp r5, 4 |
| if (r5 != 4) {
0x000c33dc bne.w 0xc30ec | goto label_29;
| }
0x000c33e0 mov r1, r4 | r1 = r4;
0x000c33e2 mov r0, r4 | r0 = r4;
0x000c33e4 str r4, [sp, 0x38] | var_38h = r4;
0x000c33e6 bl 0x2e71c | r0 = fcn_0002e71c (r0, r1);
0x000c33ea bl 0x3e27c | r0 = fcn_0003e27c (r0);
0x000c33ee mov r5, r0 | r5 = r0;
0x000c33f0 b 0xc31cc | goto label_46;
| label_91:
0x000c33f2 mov r5, r2 | r5 = r2;
0x000c33f4 movs r6, 0x18 | r6 = 0x18;
0x000c33f6 mov sb, r2 | sb = r2;
0x000c33f8 b 0xc2fae | goto label_47;
| label_99:
0x000c33fa ldr r3, [sp, 0x18] | r3 = var_18h;
0x000c33fc b 0xc2e42 | goto label_48;
| label_82:
0x000c33fe mov r4, sb | r4 = sb;
0x000c3400 add r5, sp, 0x60 | r5 += var_60h;
0x000c3402 b.w 0xc2b54 | goto label_49;
| label_103:
0x000c3406 movs r7, 0 | r7 = 0;
0x000c3408 b 0xc339e | goto label_50;
| label_102:
0x000c340a mov.w r8, 0 | r8 = 0;
0x000c340e b 0xc2ee4 | goto label_35;
| label_87:
0x000c3410 blx 0x6430 | fcn_00006430 ();
0x000c3414 strb r4, [r3, 0x11] | *((r3 + 0x11)) = r4;
0x000c3416 movs r2, r0 | r2 = r0;
0x000c3418 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c341a movs r0, r0 |
0x000c341c ldr r6, [r5, 0x64] | r6 = *((r5 + 0x64));
0x000c341e movs r1, r0 | r1 = r0;
0x000c3420 strb r6, [r7, 0x19] | *((r7 + 0x19)) = r6;
0x000c3422 movs r1, r0 | r1 = r0;
0x000c3424 ldr r0, [pc, 0x26c] | r0 = *(0xc3694);
0x000c3426 invalid |
0x000cfafa strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000cfafc ldr r4, [r6, 0x14] | r4 = *((r6 + 0x14));
0x000cfafe str r6, [r5, 0x74] | *((r5 + 0x74)) = r6;
0x000cfb00 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfb02 movs r0, 0x6e | r0 = 0x6e;
0x000cfb04 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000cfb06 ldr r2, [r6, 0x74] | r2 = *((r6 + 0x74));
0x000cfb08 lsrs r2, r6, 9 | r2 = r6 >> 9;
0x000cfb0a movs r0, 0x20 | r0 = 0x20;
0x000cfb0c cmp r5, 0x20 |
0x000cfb0e str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000cfb10 str r4, [r6, 0x34] | *((r6 + 0x34)) = r4;
0x000cfb12 movs r0, 0x68 | r0 = 0x68;
0x000cfb14 movs r0, 0x20 | r0 = 0x20;
0x000cfb16 movs r0, 0x20 | r0 = 0x20;
0x000cfb18 movs r0, 0x20 | r0 = 0x20;
0x000cfb1a movs r0, 0x20 | r0 = 0x20;
0x000cfb1c movs r0, 0x20 | r0 = 0x20;
0x000cfb1e movs r0, 0x20 | r0 = 0x20;
0x000cfb20 movs r0, 0x20 | r0 = 0x20;
0x000cfb22 ldr r6, [r4, 0x74] | r6 = *((r4 + 0x74));
0x000cfb24 str r2, [r6, 0x34] | *((r6 + 0x34)) = r2;
0x000cfb26 movs r0, 0x65 | r0 = 0x65;
0x000cfb28 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000cfb2a str r4, [r6, 0x34] | *((r6 + 0x34)) = r4;
0x000cfb2c movs r0, 0x68 | r0 = 0x68;
0x000cfb2e cmp r7, 0x49 |
0x000cfb30 lsrs r7, r1, 9 | r7 = r1 >> 9;
0x000cfb32 movs r0, 0x20 | r0 = 0x20;
0x000cfb34 cmp r5, 0x20 |
0x000cfb36 ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x000cfb38 movs r0, 0x78 | r0 = 0x78;
0x000cfb3a movs r0, 0x20 | r0 = 0x20;
0x000cfb3c movs r0, 0x20 | r0 = 0x20;
0x000cfb3e movs r0, 0x20 | r0 = 0x20;
0x000cfb40 movs r0, 0x20 | r0 = 0x20;
0x000cfb42 movs r0, 0x20 | r0 = 0x20;
0x000cfb44 movs r0, 0x20 | r0 = 0x20;
0x000cfb46 movs r0, 0x20 | r0 = 0x20;
0x000cfb48 movs r0, 0x20 | r0 = 0x20;
0x000cfb4a str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfb4c movs r0, 0x74 | r0 = 0x74;
0x000cfb4e strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000cfb50 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000cfb52 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfb54 ldr r0, [r4, 0x50] | r0 = *((r4 + 0x50));
0x000cfb56 str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000cfb58 movs r0, 0x65 | r0 = 0x65;
0x000cfb5a ldr r4, [r6, 0x74] | r4 = *((r6 + 0x74));
0x000cfb5c movs r7, 0x20 | r7 = 0x20;
0x000cfb5e ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x000cfb60 movs r7, 0x78 | r7 = 0x78;
0x000cfb62 movs r0, 0xa | r0 = 0xa;
0x000cfb64 movs r0, 0x20 | r0 = 0x20;
0x000cfb66 str r5, [r5, 0x30] | *((r5 + 0x30)) = r5;
0x000cfb68 ldr r7, [r5, 0x44] | r7 = *((r5 + 0x44));
0x000cfb6a ldr r5, [r6, 0x54] | r5 = *((r6 + 0x54));
0x000cfb6c movs r0, 0x6e | r0 = 0x6e;
0x000cfb6e movs r0, 0x20 | r0 = 0x20;
0x000cfb70 movs r0, 0x20 | r0 = 0x20;
0x000cfb72 movs r0, 0x20 | r0 = 0x20;
0x000cfb74 movs r0, 0x20 | r0 = 0x20;
0x000cfb76 movs r0, 0x20 | r0 = 0x20;
0x000cfb78 movs r0, 0x20 | r0 = 0x20;
0x000cfb7a strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cfb7c strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000cfb7e ldr r0, [r4, 0x70] | r0 = *((r4 + 0x70));
0x000cfb80 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfb82 strb r0, [r6, 0x15] | *((r6 + 0x15)) = r0;
0x000cfb84 movs r0, 0x74 | r0 = 0x74;
0x000cfb86 ldr r5, [r5, 0x74] | r5 = *((r5 + 0x74));
0x000cfb88 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cfb8a strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfb8c movs r0, 0x6f | r0 = 0x6f;
0x000cfb8e str r7, [r4, 0x30] | *((r4 + 0x30)) = r7;
0x000cfb90 ldr r7, [r5, 0x44] | r7 = *((r5 + 0x44));
0x000cfb92 ldr r5, [r6, 0x54] | r5 = *((r6 + 0x54));
0x000cfb94 movs r7, 0x6e | r7 = 0x6e;
0x000cfb96 movs r0, 0xa | r0 = 0xa;
0x000cfb98 movs r0, 0x20 | r0 = 0x20;
0x000cfb9a str r5, [r5, 0x30] | *((r5 + 0x30)) = r5;
0x000cfb9c str r5, [r5, 0x44] | *((r5 + 0x44)) = r5;
0x000cfb9e orrs r0, r4 | r0 |= r4;
0x000cfba0 ldr r5, [pc, 0x13c] | r5 = *(0xcfce0);
0x000cfba2 adcs r5, r1 | __asm ("adcs r5, r1");
0x000cfba4 add r6, sb | r6 += sb;
0x000cfba6 movs r0, 0x20 | r0 = 0x20;
0x000cfba8 movs r0, 0x20 | r0 = 0x20;
0x000cfbaa movs r0, 0x20 | r0 = 0x20;
0x000cfbac movs r0, 0x20 | r0 = 0x20;
0x000cfbae strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000cfbb0 ldr r5, [r6, 0x64] | r5 = *((r6 + 0x64));
0x000cfbb2 movs r2, 0x20 | r2 = 0x20;
0x000cfbb4 ldr r7, [pc, 0x10c] | r7 = *(0xcfcc4);
0x000cfbb6 ldr r5, [pc, 0x134] |
0x000cfbb8 ldr r6, [pc, 0x104] | r6 = *(0xcfcc0);
0x000cfbba movs r2, 0x44 | r2 = 0x44;
0x000cfbbc str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000cfbbe str r5, [r4, 0x64] | *((r4 + 0x64)) = r5;
0x000cfbc0 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000cfbc2 movs r0, 0x65 | r0 = 0x65;
0x000cfbc4 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000cfbc6 str r1, [r4, 0x44] | *((r4 + 0x44)) = r1;
0x000cfbc8 ldr r1, [r5, 0x64] | r1 = *(0xcfd52);
0x000cfbca movs r0, 0x67 | r0 = 0x67;
0x000cfbcc strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000cfbce ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x000cfbd0 lsrs r6, r5, 9 | r6 = r5 >> 9;
0x000cfbd2 movs r0, 0x20 | r0 = 0x20;
0x000cfbd4 cmp r5, 0x20 |
0x000cfbd6 strb r3, [r4, 0xd] | *((r4 + 0xd)) = r3;
0x000cfbd8 movs r0, 0x76 | r0 = 0x76;
0x000cfbda movs r0, 0x20 | r0 = 0x20;
0x000cfbdc movs r0, 0x20 | r0 = 0x20;
0x000cfbde movs r0, 0x20 | r0 = 0x20;
0x000cfbe0 movs r0, 0x20 | r0 = 0x20;
0x000cfbe2 movs r0, 0x20 | r0 = 0x20;
0x000cfbe4 movs r0, 0x20 | r0 = 0x20;
0x000cfbe6 movs r0, 0x20 | r0 = 0x20;
0x000cfbe8 movs r0, 0x20 | r0 = 0x20;
0x000cfbea str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfbec movs r0, 0x74 | r0 = 0x74;
0x000cfbee strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000cfbf0 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000cfbf2 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfbf4 ldr r0, [r4, 0x50] | r0 = *((r4 + 0x50));
0x000cfbf6 str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000cfbf8 movs r0, 0x65 | r0 = 0x65;
0x000cfbfa ldr r4, [r6, 0x74] | r4 = *(0xcfd34);
0x000cfbfc movs r7, 0x20 | r7 = 0x20;
0x000cfbfe strb r3, [r4, 0xd] | *((r4 + 0xd)) = r3;
0x000cfc00 movs r7, 0x76 | r7 = 0x76;
0x000cfc02 movs r0, 0xa | r0 = 0xa;
0x000cfc04 movs r0, 0x20 | r0 = 0x20;
0x000cfc06 str r5, [r5, 0x40] | *((r5 + 0x40)) = r5;
0x000cfc08 strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000cfc0a strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000cfc0c str r1, [r5, 0x14] | *((r5 + 0x14)) = r1;
0x000cfc0e ldr r4, [r5, 0x14] | r4 = *(0xcfd02);
0x000cfc10 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x000cfc12 movs r0, 0x20 | r0 = 0x20;
0x000cfc14 movs r0, 0x20 | r0 = 0x20;
0x000cfc16 movs r0, 0x20 | r0 = 0x20;
0x000cfc18 movs r0, 0x20 | r0 = 0x20;
0x000cfc1a ldr r0, [r4, 0x70] | r0 = *(0xcfd72);
0x000cfc1c str r0, [r6, 0x54] | *((r6 + 0x54)) = r0;
0x000cfc1e movs r0, 0x6e | r0 = 0x6e;
0x000cfc20 ldr r4, [r6, 4] | r4 = *(0xcfcc4);
0x000cfc22 movs r0, 0x65 | r0 = 0x65;
0x000cfc24 str r4, [r4, 0x14] | *((r4 + 0x14)) = r4;
0x000cfc26 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000cfc28 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000cfc2a str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfc2c strb r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x000cfc2e ldr r3, [r6, 0x14] | r3 = *(0xcfcd4);
0x000cfc30 str r6, [r5, 0x74] | *((r5 + 0x74)) = r6;
0x000cfc32 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cfc34 ldr r1, [r6, 0x44] | r1 = *(0xcfd04);
0x000cfc36 strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000cfc38 adds r3, 0x65 | r3 += 0x65;
0x000cfc3a str r7, [r3, 0x44] | *((r3 + 0x44)) = r7;
0x000cfc3c strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000cfc3e strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000cfc40 str r1, [r5, 0x14] | *((r5 + 0x14)) = r1;
0x000cfc42 ldr r4, [r5, 0x14] | r4 = *(0xcfd02);
0x000cfc44 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x000cfc46 cmp r1, 0x28 |
0x000cfc48 movs r0, 0xa | r0 = 0xa;
0x000cfc4a movs r0, 0x20 | r0 = 0x20;
0x000cfc4c str r5, [r5, 0x50] | *((r5 + 0x50)) = r5;
0x000cfc4e ldr r3, [r4, 4] | r3 = *(0xcfd06);
0x000cfc50 movs r0, 0x6f | r0 = 0x6f;
0x000cfc52 movs r0, 0x20 | r0 = 0x20;
0x000cfc54 movs r0, 0x20 | r0 = 0x20;
0x000cfc56 movs r0, 0x20 | r0 = 0x20;
0x000cfc58 movs r0, 0x20 | r0 = 0x20;
0x000cfc5a movs r0, 0x20 | r0 = 0x20;
0x000cfc5c movs r0, 0x20 | r0 = 0x20;
0x000cfc5e movs r0, 0x20 | r0 = 0x20;
0x000cfc60 strb r0, [r4] | *(r4) = r0;
0x000cfc62 ldr r2, [r6, 0x14] | r2 = *(0xcfcd4);
0x000cfc64 strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000cfc66 ldr r0, [r4, 0x10] | r0 = *(0xcfd12);
0x000cfc68 strb r6, [r5, 1] | *((r5 + 1)) = r6;
0x000cfc6a strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfc6c movs r0, 0x73 | r0 = 0x73;
0x000cfc6e str r2, [r4, 0x54] | *((r4 + 0x54)) = r2;
0x000cfc70 ldr r6, [r4, 0x74] | r6 = *(0xcfd76);
0x000cfc72 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000cfc74 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000cfc76 str r0, [r7, 0x54] | *((r7 + 0x54)) = r0;
0x000cfc78 strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x000cfc7a ldr r4, [r6, 0x14] | r4 = *(0xcfd8a);
0x000cfc7c ldr r7, [r5, 0x64] | r7 = *(0xcfd52);
0x000cfc7e movs r0, 0xa | r0 = 0xa;
0x000cfc80 movs r0, 0x20 | r0 = 0x20;
0x000cfc82 ldr r5, [r5, 0x10] | r5 = *(0xcfcfe);
0x000cfc84 ldr r6, [r5, 0x14] | r6 = *(0xcfd12);
0x000cfc86 movs r0, 0x74 | r0 = 0x74;
0x000cfc88 ldr r1, [pc, 0x118] | r1 = *(0xcfda4);
0x000cfc8a cmp r4, sb |
0x000cfc8c adcs r6, r1 | __asm ("adcs r6, r1");
0x000cfc8e cmp r5, sb |
0x000cfc90 movs r0, 0x20 | r0 = 0x20;
0x000cfc92 movs r0, 0x20 | r0 = 0x20;
0x000cfc94 movs r0, 0x20 | r0 = 0x20;
0x000cfc96 strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000cfc98 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000cfc9a cmp r7, 0x64 |
0x000cfc9c strb r0, [r6, 9] | *((r6 + 9)) = r0;
0x000cfc9e str r7, [r5, 0x34] | *((r5 + 0x34)) = r7;
0x000cfca0 strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000cfca2 movs r0, 0x73 | r0 = 0x73;
0x000cfca4 str r6, [r5, 0x14] | *((r5 + 0x14)) = r6;
0x000cfca6 str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000cfca8 movs r0, 0x64 | r0 = 0x64;
0x000cfcaa ldr r6, [r4, 0x14] | r6 = *(0xcfd9e);
0x000cfcac str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000cfcae movs r0, 0xa | r0 = 0xa;
0x000cfcb0 movs r0, 0x20 | r0 = 0x20;
0x000cfcb2 ldrh r5, [r5, r4] | r5 = *((r5 + r4));
0x000cfcb4 ldr r6, [r5, 0x74] | r6 = *(0xcfd72);
0x000cfcb6 ldr r5, [r3, 4] |
0x000cfcb8 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000cfcba str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cfcbc movs r0, 0x72 | r0 = 0x72;
0x000cfcbe movs r0, 0x20 | r0 = 0x20;
0x000cfcc0 movs r0, 0x20 | r0 = 0x20;
0x000cfcc2 movs r0, 0x20 | r0 = 0x20;
0x000cfcc4 movs r0, 0x20 | r0 = 0x20;
0x000cfcc6 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfcc8 strb r5, [r6, 9] | *((r6 + 9)) = r5;
0x000cfcca movs r0, 0x6e | r0 = 0x6e;
0x000cfccc str r0, [r5, 0x54] | *((r5 + 0x54)) = r0;
0x000cfcce str r1, [r4, 0x44] | *((r4 + 0x44)) = r1;
0x000cfcd0 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000cfcd2 movs r0, 0x73 | r0 = 0x73;
0x000cfcd4 ldr r7, [r5, 0x64] | r7 = *(0xcfd6e);
0x000cfcd6 ldr r0, [r4, 0x70] | r0 = *(0xcfdfa);
0x000cfcd8 movs r0, 0x72 | r0 = 0x72;
0x000cfcda str r7, [r5, 0x64] | *((r5 + 0x64)) = r7;
0x000cfcdc lsrs r6, r4, 9 | r6 = r4 >> 9;
0x000cfcde movs r0, 0x20 | r0 = 0x20;
0x000cfce0 cmp r5, 0x20 |
0x000cfce2 str r0, [r5, 0x54] | *((r5 + 0x54)) = r0;
0x000cfce4 strb r4, [r5, 1] | *((r5 + 1)) = r4;
0x000cfce6 movs r0, 0x20 | r0 = 0x20;
0x000cfce8 movs r0, 0x20 | r0 = 0x20;
0x000cfcea movs r0, 0x20 | r0 = 0x20;
0x000cfcec movs r0, 0x20 | r0 = 0x20;
0x000cfcee movs r0, 0x20 | r0 = 0x20;
0x000cfcf0 movs r0, 0x20 | r0 = 0x20;
0x000cfcf2 movs r0, 0x20 | r0 = 0x20;
0x000cfcf4 movs r0, 0x20 | r0 = 0x20;
0x000cfcf6 ldr r3, [r6, 4] | r3 = *(0xcfd76);
0x000cfcf8 strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000cfcfa strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfcfc ldr r0, [r5, 0x14] | r0 = *(0xcfd1e);
0x000cfcfe movs r0, 0x73 | r0 = 0x73;
0x000cfd00 str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000cfd02 strb r3, [r6, 0xd] | *((r6 + 0xd)) = r3;
0x000cfd04 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000cfd06 lsrs r5, r4, 9 | r5 = r4 >> 9;
0x000cfd08 movs r0, 0x20 | r0 = 0x20;
0x000cfd0a cmp r5, 0x20 |
0x000cfd0c strb r0, [r5, 0x11] | *((r5 + 0x11)) = r0;
0x000cfd0e ldr r5, [r5, 0x44] | r5 = *(0xcfd4e);
0x000cfd10 movs r0, 0x20 | r0 = 0x20;
0x000cfd12 movs r0, 0x20 | r0 = 0x20;
0x000cfd14 movs r0, 0x20 | r0 = 0x20;
0x000cfd16 movs r0, 0x20 | r0 = 0x20;
0x000cfd18 movs r0, 0x20 | r0 = 0x20;
0x000cfd1a movs r0, 0x20 | r0 = 0x20;
0x000cfd1c movs r0, 0x20 | r0 = 0x20;
0x000cfd1e movs r0, 0x20 | r0 = 0x20;
0x000cfd20 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfd22 movs r0, 0x74 | r0 = 0x74;
0x000cfd24 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000cfd26 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000cfd28 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfd2a ldr r0, [r4, 0x50] | r0 = *(0xcfdda);
0x000cfd2c str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000cfd2e movs r0, 0x65 | r0 = 0x65;
0x000cfd30 ldr r4, [r6, 0x74] | r4 = *(0xcfde6);
0x000cfd32 ldr r0, [pc, 0x80] | r0 = *(0xcfdb6);
0x000cfd34 ldr r5, [pc, 0x150] | r5 = *(0xcfe88);
0x000cfd36 lsrs r4, r1, 9 | r4 = r1 >> 9;
0x000cfd38 movs r0, 0x20 | r0 = 0x20;
0x000cfd3a cmp r5, 0x20 |
0x000cfd3c ldr r1, [r5, 0x64] | r1 = *(0xcfeec);
0x000cfd3e str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000cfd40 str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000cfd42 strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x000cfd44 strb r1, [r5, 0x19] | *((r5 + 0x19)) = r1;
0x000cfd46 movs r0, 0x65 | r0 = 0x65;
0x000cfd48 movs r0, 0x20 | r0 = 0x20;
0x000cfd4a movs r0, 0x20 | r0 = 0x20;
0x000cfd4c movs r0, 0x20 | r0 = 0x20;
0x000cfd4e movs r0, 0x20 | r0 = 0x20;
0x000cfd50 ldr r6, [r4, 0x74] | r6 = *(0xcfe5a);
0x000cfd52 str r2, [r6, 0x34] | *((r6 + 0x34)) = r2;
0x000cfd54 movs r0, 0x65 | r0 = 0x65;
0x000cfd56 ldr r1, [r5, 0x64] | r1 = *(0xcfeec);
0x000cfd58 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000cfd5a str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000cfd5c strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x000cfd5e strb r1, [r5, 0x19] | *((r5 + 0x19)) = r1;
0x000cfd60 movs r0, 0x65 | r0 = 0x65;
0x000cfd62 cmp r7, 0x49 |
0x000cfd64 lsrs r7, r1, 9 | r7 = r1 >> 9;
0x000cfd66 movs r0, 0x20 | r0 = 0x20;
0x000cfd68 cmp r5, 0x20 |
0x000cfd6a strb r2, [r5, 0xd] | *((r5 + 0xd)) = r2;
0x000cfd6c ldr r7, [r5, 0x64] | r7 = *(0xcfeec);
0x000cfd6e movs r0, 0x20 | r0 = 0x20;
0x000cfd70 movs r0, 0x20 | r0 = 0x20;
0x000cfd72 movs r0, 0x20 | r0 = 0x20;
0x000cfd74 movs r0, 0x20 | r0 = 0x20;
0x000cfd76 movs r0, 0x20 | r0 = 0x20;
0x000cfd78 movs r0, 0x20 | r0 = 0x20;
0x000cfd7a movs r0, 0x20 | r0 = 0x20;
0x000cfd7c movs r0, 0x20 | r0 = 0x20;
0x000cfd7e str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfd80 movs r0, 0x74 | r0 = 0x74;
0x000cfd82 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000cfd84 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000cfd86 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfd88 ldr r0, [r4, 0x50] | r0 = *(0xcfe36);
0x000cfd8a str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000cfd8c movs r0, 0x65 | r0 = 0x65;
0x000cfd8e ldr r4, [r6, 0x74] | r4 = *(0xcfece);
0x000cfd90 movs r7, 0x20 | r7 = 0x20;
0x000cfd92 strb r2, [r5, 0xd] | *((r5 + 0xd)) = r2;
0x000cfd94 ldr r7, [r5, 0x64] | r7 = *(0xcfeec);
0x000cfd96 lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000cfd98 movs r0, 0x20 | r0 = 0x20;
0x000cfd9a cmp r5, 0x20 |
0x000cfd9c ldr r4, [r5, 0x14] | r4 = *(0xcfe9c);
0x000cfd9e str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000cfda0 movs r0, 0x20 | r0 = 0x20;
0x000cfda2 movs r0, 0x20 | r0 = 0x20;
0x000cfda4 movs r0, 0x20 | r0 = 0x20;
0x000cfda6 movs r0, 0x20 | r0 = 0x20;
0x000cfda8 movs r0, 0x20 | r0 = 0x20;
0x000cfdaa movs r0, 0x20 | r0 = 0x20;
0x000cfdac movs r0, 0x20 | r0 = 0x20;
0x000cfdae movs r0, 0x20 | r0 = 0x20;
0x000cfdb0 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfdb2 movs r0, 0x74 | r0 = 0x74;
0x000cfdb4 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000cfdb6 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000cfdb8 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfdba ldr r0, [r4, 0x50] | r0 = *(0xcfeec);
0x000cfdbc str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000cfdbe movs r0, 0x65 | r0 = 0x65;
0x000cfdc0 ldr r4, [r6, 0x74] | r4 = *(0xcfece);
0x000cfdc2 movs r7, 0x20 | r7 = 0x20;
0x000cfdc4 ldr r4, [r5, 0x14] | r4 = *(0xcfe9c);
0x000cfdc6 str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000cfdc8 lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000cfdca movs r0, 0x20 | r0 = 0x20;
0x000cfdcc cmp r5, 0x20 |
0x000cfdce ldr r4, [r5, 0x14] | r4 = *(0xcfe9c);
0x000cfdd0 strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000cfdd2 movs r0, 0x20 | r0 = 0x20;
0x000cfdd4 movs r0, 0x20 | r0 = 0x20;
0x000cfdd6 movs r0, 0x20 | r0 = 0x20;
0x000cfdd8 movs r0, 0x20 | r0 = 0x20;
0x000cfdda movs r0, 0x20 | r0 = 0x20;
0x000cfddc movs r0, 0x20 | r0 = 0x20;
0x000cfdde movs r0, 0x20 | r0 = 0x20;
0x000cfde0 movs r0, 0x20 | r0 = 0x20;
0x000cfde2 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfde4 movs r0, 0x74 | r0 = 0x74;
0x000cfde6 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000cfde8 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000cfdea strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfdec ldr r0, [r4, 0x50] | r0 = *(0xcfeec);
0x000cfdee str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000cfdf0 movs r0, 0x65 | r0 = 0x65;
0x000cfdf2 ldr r4, [r6, 0x74] | r4 = *(0xcfece);
0x000cfdf4 movs r7, 0x20 | r7 = 0x20;
0x000cfdf6 ldr r4, [r5, 0x14] | r4 = *(0xcfe9c);
0x000cfdf8 strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000cfdfa lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000cfdfc movs r0, 0x20 | r0 = 0x20;
0x000cfdfe cmp r5, 0x20 |
0x000cfe00 ldr r4, [r5, 0x74] | r4 = *(0xcfefc);
0x000cfe02 ldr r7, [r5, 0x34] | r7 = *(0xcfebc);
0x000cfe04 strb r1, [r4, 0xd] | *((r4 + 0xd)) = r1;
0x000cfe06 str r1, [r5, 0x44] | *((r5 + 0x44)) = r1;
0x000cfe08 movs r0, 0x65 | r0 = 0x65;
0x000cfe0a ldr r1, [pc, 0x14c] | r1 = *(0xcff5a);
0x000cfe0c cmp r2, fp |
0x000cfe0e ldr r6, [pc, 0x80] | r6 = *(0xcfe92);
0x000cfe10 movs r0, 0x20 | r0 = 0x20;
0x000cfe12 movs r0, 0x20 | r0 = 0x20;
0x000cfe14 strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000cfe16 movs r0, 0x65 | r0 = 0x65;
0x000cfe18 movs r0, 0x4e | r0 = 0x4e;
0x000cfe1a ldr r5, [r4, 0x64] |
0x000cfe1c strb r4, [r6, 9] | *((r6 + 9)) = r4;
0x000cfe1e str r1, [r5, 0x54] | *((r5 + 0x54)) = r1;
0x000cfe20 movs r0, 0x73 | r0 = 0x73;
0x000cfe22 str r7, [r5, 0x64] | *((r5 + 0x64)) = r7;
0x000cfe24 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000cfe26 movs r0, 0x5a | r0 = 0x5a;
0x000cfe28 ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x000cfe2a str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000cfe2c movs r0, 0x73 | r0 = 0x73;
0x000cfe2e ldr r6, [r4, 0x74] | r6 = *(0xcff70);
0x000cfe30 movs r0, 0x72 | r0 = 0x72;
0x000cfe32 ldr r4, [r5, 0x74] | r4 = *(0xcffd4);
0x000cfe34 ldr r7, [r5, 0x34] | r7 = *(0xcff94);
0x000cfe36 strb r1, [r4, 0xd] | *((r4 + 0xd)) = r1;
0x000cfe38 str r1, [r5, 0x44] | *((r5 + 0x44)) = r1;
0x000cfe3a movs r0, 0x65 | r0 = 0x65;
0x000cfe3c str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000cfe3e ldr r5, [r5, 0x74] |
0x000cfe40 ldrb r2, [r6, 5] | r2 = *((r6 + 5));
0x000cfe42 movs r0, 0xa | r0 = 0xa;
0x000cfe44 movs r0, 0x20 | r0 = 0x20;
0x000cfe46 ldr r5, [r5, 0x50] |
0x000cfe48 strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000cfe4a str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x000cfe4c strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000cfe4e movs r0, 0x6e | r0 = 0x6e;
0x000cfe50 movs r0, 0x20 | r0 = 0x20;
0x000cfe52 movs r0, 0x20 | r0 = 0x20;
0x000cfe54 movs r0, 0x20 | r0 = 0x20;
0x000cfe56 movs r0, 0x20 | r0 = 0x20;
0x000cfe58 movs r0, 0x20 | r0 = 0x20;
0x000cfe5a strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cfe5c strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000cfe5e ldr r0, [r4, 0x70] | r0 = *(0xd0044);
0x000cfe60 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cfe62 strb r0, [r6, 0x15] | *((r6 + 0x15)) = r0;
0x000cfe64 movs r0, 0x74 | r0 = 0x74;
0x000cfe66 ldr r5, [r5, 0x74] |
0x000cfe68 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cfe6a strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfe6c movs r0, 0x6f | r0 = 0x6f;
0x000cfe6e ldr r7, [r4, 0x50] | r7 = *(0xd0024);
0x000cfe70 strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000cfe72 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x000cfe74 strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000cfe76 movs r7, 0x6e | r7 = 0x6e;
0x000cfe78 movs r0, 0xa | r0 = 0xa;
0x000cfe7a movs r0, 0x20 | r0 = 0x20;
0x000cfe7c ldr r5, [r5, 0x50] | r5 = *(0xd00e8);
0x000cfe7e ldrb r1, [r4, 1] | r1 = *((r4 + 1));
0x000cfe80 ldr r3, [r6, 0x14] | r3 = *(0xcff84);
0x000cfe82 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x000cfe84 ldr r6, [pc, 0x80] | r6 = *(0xcff08);
0x000cfe86 movs r0, 0x20 | r0 = 0x20;
0x000cfe88 movs r0, 0x20 | r0 = 0x20;
0x000cfe8a movs r0, 0x20 | r0 = 0x20;
0x000cfe8c movs r0, 0x20 | r0 = 0x20;
0x000cfe8e movs r0, 0x20 | r0 = 0x20;
0x000cfe90 ldr r0, [r4, 0x50] | r0 = *(0xd0024);
0x000cfe92 ldrb r1, [r4, 1] | r1 = *((r4 + 1));
0x000cfe94 ldr r1, [r5, 0x54] | r1 = *(0xd013c);
0x000cfe96 ldr r5, [r6, 0x54] |
0x000cfe98 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cfe9a ldrb r1, [r5, 9] | r1 = *((r5 + 9));
0x000cfe9c movs r0, 0x65 | r0 = 0x65;
0x000cfe9e ldr r6, [r4, 0x74] | r6 = *(0xd0048);
0x000cfea0 movs r0, 0x72 | r0 = 0x72;
0x000cfea2 movs r0, 0x61 | r0 = 0x61;
0x000cfea4 cmp r5, 0x2d |
0x000cfea6 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cfea8 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfeaa ldr r2, [r6, 0x14] | r2 = *(0xd005c);
0x000cfeac ldr r1, [r4, 0x44] | r1 = *(0xd0018);
0x000cfeae ldrb r1, [r5, 9] | r1 = *((r5 + 9));
0x000cfeb0 movs r0, 0x65 | r0 = 0x65;
0x000cfeb2 str r4, [r4, 0x14] | *((r4 + 0x14)) = r4;
0x000cfeb4 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000cfeb6 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000cfeb8 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cfeba movs r0, 0xa | r0 = 0xa;
0x000cfebc movs r0, 0x20 | r0 = 0x20;
0x000cfebe ldr r5, [r5, 0x50] | r5 = *(0xcffac);
0x000cfec0 ldr r5, [r4, 0x54] | r5 = *(0xd0028);
0x000cfec2 strb r4, [r6, 9] | *((r6 + 9)) = r4;
0x000cfec4 str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x000cfec6 movs r0, 0x65 | r0 = 0x65;
0x000cfec8 movs r0, 0x20 | r0 = 0x20;
0x000cfeca movs r0, 0x20 | r0 = 0x20;
0x000cfecc movs r0, 0x20 | r0 = 0x20;
0x000cfece movs r0, 0x20 | r0 = 0x20;
0x000cfed0 movs r0, 0x20 | r0 = 0x20;
0x000cfed2 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfed4 str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000cfed6 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
0x000cfed8 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cfeda ldr r4, [r5, 0x44] | r4 = imp.atan;
0x000cfedc ldr r0, [r4, 0x50] | r0 = *(0xd00bc);
0x000cfede ldr r5, [r4, 0x54] |
0x000cfee0 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000cfee2 movs r0, 0x79 | r0 = 0x79;
0x000cfee4 ldr r1, [r4, 0x44] | r1 = *(0xd00b0);
0x000cfee6 ldr r4, [r5, 0x74] | r4 = *(0xd0134);
0x000cfee8 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000cfeea ldr r4, [r6, 0x14] | r4 = *(0xd005c);
0x000cfeec ldr r7, [r5, 0x64] | r7 = *(0xd0124);
0x000cfeee movs r0, 0x73 | r0 = 0x73;
0x000cfef0 ldr r1, [r4, 0x64] | r1 = *(0xd00c0);
0x000cfef2 movs r0, 0x64 | r0 = 0x64;
0x000cfef4 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cfef6 ldr r1, [r4, 0x44] | r1 = *(0xd00a0);
0x000cfef8 ldr r4, [r5, 0x74] | r4 = *(0xd0134);
0x000cfefa str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000cfefc ldr r4, [r6, 0x14] | r4 = *(0xd005c);
0x000cfefe ldr r7, [r5, 0x64] | r7 = *(0xd0124);
0x000cff00 lsrs r3, r6, 9 | r3 = r6 >> 9;
0x000cff02 movs r0, 0x20 | r0 = 0x20;
0x000cff04 cmp r5, 0x20 |
0x000cff06 ldr r5, [r5, 0x54] | r5 = *(0xd0114);
0x000cff08 strb r1, [r4, 1] | *((r4 + 1)) = r1;
0x000cff0a ldr r6, [pc, 0x80] | r6 = *(0xcff8e);
0x000cff0c movs r0, 0x20 | r0 = 0x20;
0x000cff0e movs r0, 0x20 | r0 = 0x20;
0x000cff10 movs r0, 0x20 | r0 = 0x20;
0x000cff12 movs r0, 0x20 | r0 = 0x20;
0x000cff14 movs r0, 0x20 | r0 = 0x20;
0x000cff16 movs r0, 0x20 | r0 = 0x20;
0x000cff18 movs r0, 0x20 | r0 = 0x20;
0x000cff1a str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cff1c str r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
0x000cff1e ldr r5, [r6, 0x44] |
0x000cff20 movs r0, 0x74 | r0 = 0x74;
0x000cff22 ldr r5, [r5, 0x54] |
0x000cff24 strb r1, [r4, 1] | *((r4 + 1)) = r1;
0x000cff26 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cff28 ldrb r1, [r5, 9] | r1 = *((r5 + 9));
0x000cff2a movs r0, 0x65 | r0 = 0x65;
0x000cff2c str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cff2e movs r0, 0x74 | r0 = 0x74;
0x000cff30 ldr r4, [r6, 0x74] | r4 = *(0xd0002);
0x000cff32 ldr r6, [pc, 0x80] | r6 = *(0xcffb6);
0x000cff34 movs r0, 0xa | r0 = 0xa;
0x000cff36 movs r0, 0x20 | r0 = 0x20;
0x000cff38 ldr r5, [r5, 0x60] |
0x000cff3a strb r5, [r4, 0x1d] | *((r4 + 0x1d)) = r5;
0x000cff3c ldr r4, [r5, 0x14] | r4 = *(0xd009a);
0x000cff3e str r6, [r5, 0x54] | *((r5 + 0x54)) = r6;
0x000cff40 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000cff42 str r5, [r0, r1] | *((r0 + r1)) = r5;
0x000cff44 movs r0, 0x20 | r0 = 0x20;
0x000cff46 movs r0, 0x20 | r0 = 0x20;
0x000cff48 movs r0, 0x20 | r0 = 0x20;
0x000cff4a movs r0, 0x20 | r0 = 0x20;
0x000cff4c strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cff4e strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000cff50 ldr r0, [r4, 0x70] | r0 = *(0xd010a);
0x000cff52 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000cff54 strb r0, [r6, 0x15] | *((r6 + 0x15)) = r0;
0x000cff56 movs r0, 0x74 | r0 = 0x74;
0x000cff58 ldr r2, [r6, 0x74] | r2 = *(0xd002a);
0x000cff5a movs r0, 0x77 | r0 = 0x77;
0x000cff5c str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cff5e str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x000cff60 str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000cff62 ldr r4, [r6, 0x74] | r4 = *(0xd002a);
0x000cff64 cmp r6, 0x72 |
0x000cff66 add r0, r4 | r0 += r4;
0x000cff68 str r5, [r4, 0x64] | *((r4 + 0x64)) = r5;
0x000cff6a strb r1, [r4, 0x15] | *((r4 + 0x15)) = r1;
0x000cff6c strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000cff6e movs r0, 0x3a | r0 = 0x3a;
0x000cff70 ldrb r7, [r4, r0] | r7 = *((r4 + r0));
0x000cff72 movs r7, 0x6e | r7 = 0x6e;
0x000cff74 movs r0, 0xa | r0 = 0xa;
0x000cff76 movs r0, 0x20 | r0 = 0x20;
0x000cff78 ldr r5, [r5, 0x60] |
0x000cff7a str r7, [r5, 0x64] | *((r5 + 0x64)) = r7;
0x000cff7c ldr r7, [r5, 0x44] | r7 = *(0xd012a);
0x000cff7e ldr r4, [r5, 0x74] | r4 = *(0xd015a);
0x000cff80 movs r0, 0x77 | r0 = 0x77;
0x000cff82 movs r0, 0x20 | r0 = 0x20;
0x000cff84 movs r0, 0x20 | r0 = 0x20;
0x000cff86 movs r0, 0x20 | r0 = 0x20;
0x000cff88 movs r0, 0x20 | r0 = 0x20;
0x000cff8a movs r0, 0x20 | r0 = 0x20;
0x000cff8c strb r0, [r4, 8] | *((r4 + 8)) = r0;
0x000cff8e str r5, [r4, 0x64] | *((r4 + 0x64)) = r5;
0x000cff90 strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000cff92 movs r0, 0x65 | r0 = 0x65;
0x000cff94 ldr r4, [r6, 0x74] | r4 = *(0xd002a);
0x000cff96 ldr r0, [r4, 0x70] | r0 = *(0xd009a);
0x000cff98 str r0, [r6, 0x54] | *((r6 + 0x54)) = r0;
0x000cff9a movs r0, 0x6e | r0 = 0x6e;
0x000cff9c ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000cff9e str r5, [r5, 0x24] | *((r5 + 0x24)) = r5;
0x000cffa0 ldr r7, [r5, 0x44] | r7 = *(0xd012a);
0x000cffa2 str r1, [r5, 0x34] | *((r5 + 0x34)) = r1;
0x000cffa4 ldr r0, [r4, 0x40] | r0 = imp.atan;
0x000cffa6 ldr r1, [r5, 0x64] | r1 = *(0xd014a);
0x000cffa8 strb r3, [r5, 0xd] | *((r5 + 0xd)) = r3;
0x000cffaa strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cffac movs r0, 0x6f | r0 = 0x6f;
0x000cffae str r4, [r4, 0x14] | *((r4 + 0x14)) = r4;
0x000cffb0 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000cffb2 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000cffb4 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000cffb6 str r0, [r4, 0x60] | *((r4 + 0x60)) = r0;
0x000cffb8 ldr r1, [r5, 0x44] | r1 = *(0xd012a);
0x000cffba strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000cffbc movs r0, 0xa | r0 = 0xa;
0x000cffbe movs r0, 0x20 | r0 = 0x20;
0x000cffc0 ldr r5, [r5, 0x60] |
0x000cffc2 ldr r7, [r5, 0x64] | r7 = *(0xd01aa);
0x000cffc4 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
0x000cffc6 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000cffc8 strh r4, [r2, r1] | *((r2 + r1)) = r4;
0x000cffca ldr r6, [pc, 0x124] | r6 = *(0xd00f2);
0x000cffcc movs r0, 0x47 | r0 = 0x47;
0x000cffce movs r0, 0x20 | r0 = 0x20;
0x000cffd0 movs r0, 0x20 | r0 = 0x20;
0x000cffd2 movs r0, 0x20 | r0 = 0x20;
0x000cffd4 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cffd6 strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000cffd8 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000cffda str r0, [r5, 0x54] | *((r5 + 0x54)) = r0;
0x000cffdc strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000cffde str r1, [r4, 0x64] | *((r4 + 0x64)) = r1;
0x000cffe0 cmp r5, 0x65 |
0x000cffe2 ldr r5, [r5, 0x74] |
0x000cffe4 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000cffe6 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000cffe8 lsls r7, r0, 1 | r7 = r0 << 1;
0x000cffea movs r0, r0 |
0x000cffec movs r0, r0 |
0x000cffee movs r0, r0 |
0x000cfff0 movs r0, r0 |
0x000cfff2 movs r0, r0 |
0x000cfff4 movs r0, r0 |
0x000cfff6 movs r0, r0 |
0x000cfff8 strb r6, [r5, 0x15] | *((r5 + 0x15)) = r6;
0x000cfffa ldr r4, [r5, 0x44] | r4 = *(0xd01fe);
0x000cfffc str r6, [r6, 0x14] | *((r6 + 0x14)) = r6;
0x000cfffe strb r4, [r5, 0x15] | *((r5 + 0x15)) = r4;
0x000d0000 movs r0, 0x65 | r0 = 0x65;
0x000d0002 cmp r4, sl |
0x000d0004 strb r0, [r3, r1] | *((r3 + r1)) = r0;
0x000d0006 movs r0, 0x20 | r0 = 0x20;
0x000d0008 movs r0, 0x20 | r0 = 0x20;
0x000d000a movs r0, 0x20 | r0 = 0x20;
0x000d000c str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d000e movs r0, 0x74 | r0 = 0x74;
0x000d0010 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d0012 strb r0, [r7, 0x11] | *((r7 + 0x11)) = r0;
0x000d0014 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d0016 strb r4, [r6, 9] | *((r6 + 9)) = r4;
0x000d0018 ldr r1, [r5, 0x64] | r1 = *(0xd021e);
0x000d001a movs r0, 0x67 | r0 = 0x67;
0x000d001c ldr r6, [r4, 0x74] | r6 = *(0xd0272);
0x000d001e movs r0, 0x72 | r0 = 0x72;
0x000d0020 strb r6, [r1, r5] | *((r1 + r5)) = r6;
0x000d0022 ldr r4, [pc, 0x130] | r4 = *(0xd0156);
0x000d0024 strb r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x000d0026 ldr r1, [r4, 0x44] | r1 = *(0xd019a);
0x000d0028 str r5, [r6, 0x54] | *((r6 + 0x54)) = r5;
0x000d002a cmp r6, 0x73 |
0x000d002c add r0, r4 | r0 += r4;
0x000d002e str r5, [r4, 0x64] | *((r4 + 0x64)) = r5;
0x000d0030 strb r1, [r4, 0x15] | *((r4 + 0x15)) = r1;
0x000d0032 strb r4, [r5, 0x11] | *((r5 + 0x11)) = r4;
0x000d0034 movs r7, 0x20 | r7 = 0x20;
0x000d0036 lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000d0038 movs r0, 0x20 | r0 = 0x20;
0x000d003a cmp r5, 0x20 |
0x000d003c str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
0x000d003e str r7, [r4, 0x54] | *((r4 + 0x54)) = r7;
0x000d0040 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d0042 ldr r3, [r4, 4] | r3 = *(0xd015a);
0x000d0044 movs r0, 0x65 | r0 = 0x65;
0x000d0046 ldr r1, [pc, 0x14c] | r1 = *(0xd0196);
0x000d0048 cmp r2, fp |
0x000d004a ldr r6, [pc, 0x80] | r6 = *(0xd00ce);
0x000d004c movs r0, 0x20 | r0 = 0x20;
0x000d004e movs r0, 0x20 | r0 = 0x20;
0x000d0050 strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000d0052 movs r0, 0x65 | r0 = 0x65;
0x000d0054 movs r0, 0x4e | r0 = 0x4e;
0x000d0056 ldr r3, [r6, 0x44] | r3 = *(0xd0112);
0x000d0058 strb r7, [r5, 0x11] | *((r5 + 0x11)) = r7;
0x000d005a movs r0, 0x73 | r0 = 0x73;
0x000d005c str r7, [r5, 0x64] | *((r5 + 0x64)) = r7;
0x000d005e strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000d0060 movs r0, 0x5a | r0 = 0x5a;
0x000d0062 ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x000d0064 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d0066 movs r0, 0x73 | r0 = 0x73;
0x000d0068 movs r0, r0 |
0x000d006a movs r0, r0 |
0x000d006c movs r0, r0 |
0x000d006e movs r0, r0 |
0x000d0070 strb r0, [r4] | *(r4) = r0;
0x000d0072 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d0074 movs r0, 0x65 | r0 = 0x65;
0x000d0076 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d0078 ldr r3, [r4, 4] | r3 = *(0xd015a);
0x000d007a movs r0, 0x65 | r0 = 0x65;
0x000d007c str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000d007e ldr r5, [r5, 0x74] | r5 = *(0xd022e);
0x000d0080 ldrb r2, [r6, 5] | r2 = *((r6 + 5));
0x000d0082 movs r0, 0xa | r0 = 0xa;
0x000d0084 movs r0, 0x20 | r0 = 0x20;
0x000d0086 strb r5, [r5, 4] | *((r5 + 4)) = r5;
0x000d0088 ldr r5, [r6, 0x74] |
0x000d008a str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d008c movs r0, 0x20 | r0 = 0x20;
0x000d008e movs r0, 0x20 | r0 = 0x20;
0x000d0090 movs r0, 0x20 | r0 = 0x20;
0x000d0092 movs r0, 0x20 | r0 = 0x20;
0x000d0094 movs r0, 0x20 | r0 = 0x20;
0x000d0096 movs r0, 0x20 | r0 = 0x20;
0x000d0098 movs r0, 0x20 | r0 = 0x20;
0x000d009a strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d009c strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000d009e ldr r0, [r4, 0x70] | r0 = *(0xd01c6);
0x000d00a0 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d00a2 strb r0, [r6, 0x15] | *((r6 + 0x15)) = r0;
0x000d00a4 movs r0, 0x74 | r0 = 0x74;
0x000d00a6 ldr r5, [r5, 0x74] | r5 = *(0xd01b6);
0x000d00a8 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d00aa strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d00ac movs r0, 0x6f | r0 = 0x6f;
0x000d00ae strb r7, [r4, 4] | *((r4 + 4)) = r7;
0x000d00b0 ldr r5, [r6, 0x74] | r5 = *(0xd0142);
0x000d00b2 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d00b4 lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000d00b6 movs r0, 0x20 | r0 = 0x20;
0x000d00b8 cmp r5, 0x20 |
0x000d00ba str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d00bc str r1, [r4, 0x44] | *((r4 + 0x44)) = r1;
0x000d00be ldr r7, [r5, 0x64] | r7 = *(0xd01a6);
0x000d00c0 ldrb r4, [r5, 5] | r4 = *((r5 + 5));
0x000d00c2 movs r0, 0x20 | r0 = 0x20;
0x000d00c4 movs r0, 0x20 | r0 = 0x20;
0x000d00c6 movs r0, 0x20 | r0 = 0x20;
0x000d00c8 movs r0, 0x20 | r0 = 0x20;
0x000d00ca movs r0, 0x20 | r0 = 0x20;
0x000d00cc movs r0, 0x20 | r0 = 0x20;
0x000d00ce strb r7, [r5, 1] | *((r5 + 1)) = r7;
0x000d00d0 ldr r5, [r4, 0x64] |
0x000d00d2 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d00d4 str r0, [r5, 0x54] | *((r5 + 0x54)) = r0;
0x000d00d6 str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000d00d8 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d00da str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d00dc strb r1, [r4, 0xd] | *((r4 + 0xd)) = r1;
0x000d00de movs r0, 0x65 | r0 = 0x65;
0x000d00e0 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d00e2 str r1, [r4, 0x44] | *((r4 + 0x44)) = r1;
0x000d00e4 ldr r5, [r5, 0x70] | r5 = *(0xd022a);
0x000d00e6 ldr r6, [r5, 0x44] | r6 = *(0xd026e);
0x000d00e8 lsrs r1, r7, 9 | r1 = r7 >> 9;
0x000d00ea movs r0, 0x20 | r0 = 0x20;
0x000d00ec cmp r5, 0x20 |
0x000d00ee str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000d00f0 str r6, [r4, 0x54] | *((r4 + 0x54)) = r6;
0x000d00f2 movs r0, 0x20 | r0 = 0x20;
0x000d00f4 movs r0, 0x20 | r0 = 0x20;
0x000d00f6 movs r0, 0x20 | r0 = 0x20;
0x000d00f8 movs r0, 0x20 | r0 = 0x20;
0x000d00fa movs r0, 0x20 | r0 = 0x20;
0x000d00fc movs r0, 0x20 | r0 = 0x20;
0x000d00fe movs r0, 0x20 | r0 = 0x20;
0x000d0100 movs r0, 0x20 | r0 = 0x20;
0x000d0102 ldr r5, [r4, 0x64] |
0x000d0104 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d0106 str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d0108 strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d010a str r1, [r4, 0x64] | *((r4 + 0x64)) = r1;
0x000d010c cmp r5, 0x65 |
0x000d010e ldr r5, [r5, 0x74] |
0x000d0110 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d0112 movs r0, 0xa | r0 = 0xa;
0x000d0114 movs r0, 0x20 | r0 = 0x20;
0x000d0116 strb r5, [r5, 0xc] | *((r5 + 0xc)) = r5;
0x000d0118 strb r5, [r4, 1] | *((r4 + 1)) = r5;
0x000d011a strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d011c strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d011e strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d0120 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000d0122 str r5, [r0, r1] | *((r0 + r1)) = r5;
0x000d0124 movs r0, 0x20 | r0 = 0x20;
0x000d0126 movs r0, 0x20 | r0 = 0x20;
0x000d0128 movs r0, 0x20 | r0 = 0x20;
0x000d012a strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d012c strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000d012e ldr r0, [r4, 0x70] | r0 = *(0xd01c6);
0x000d0130 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d0132 strb r0, [r6, 0x15] | *((r6 + 0x15)) = r0;
0x000d0134 movs r0, 0x74 | r0 = 0x74;
0x000d0136 ldr r3, [r4, 0x74] | r3 = *(0xd01ca);
0x000d0138 strb r4, [r5, 0x15] | *((r5 + 0x15)) = r4;
0x000d013a ldr r5, [r5, 0x64] | r5 = *(0xd0292);
0x000d013c strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d013e strb r5, [r4, 1] | *((r4 + 1)) = r5;
0x000d0140 strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d0142 strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d0144 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d0146 movs r0, 0x2e | r0 = 0x2e;
0x000d0148 str r4, [r0, 0x54] | *((r0 + 0x54)) = r4;
0x000d014a str r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
0x000d014c ldr r5, [r6, 0x44] | r5 = *(0xd02b2);
0x000d014e subs r2, 0x74 | r2 -= 0x74;
0x000d0150 movs r7, 0x20 | r7 = 0x20;
0x000d0152 movs r7, 0x7c | r7 = 0x7c;
0x000d0154 movs r0, 0xa | r0 = 0xa;
0x000d0156 movs r0, 0x20 | r0 = 0x20;
0x000d0158 strb r5, [r5, 0xc] | *((r5 + 0xc)) = r5;
0x000d015a str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000d015c strb r4, [r6, 0xd] | *((r6 + 0xd)) = r4;
0x000d015e movs r0, 0x20 | r0 = 0x20;
0x000d0160 movs r0, 0x20 | r0 = 0x20;
0x000d0162 movs r0, 0x20 | r0 = 0x20;
0x000d0164 movs r0, 0x20 | r0 = 0x20;
0x000d0166 movs r0, 0x20 | r0 = 0x20;
0x000d0168 movs r0, 0x20 | r0 = 0x20;
0x000d016a movs r0, 0x20 | r0 = 0x20;
0x000d016c strb r0, [r4] | *(r4) = r0;
0x000d016e ldr r2, [r6, 0x14] | r2 = *(0xd0282);
0x000d0170 strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d0172 ldr r0, [r4, 0x50] | r0 = *(0xd01a6);
0x000d0174 ldr r5, [r4, 0x54] |
0x000d0176 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d0178 movs r0, 0x79 | r0 = 0x79;
0x000d017a strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000d017c strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d017e movs r0, 0x73 | r0 = 0x73;
0x000d0180 str r2, [r4, 0x54] | *((r4 + 0x54)) = r2;
0x000d0182 ldr r6, [r4, 0x74] | r6 = *(0xd01ca);
0x000d0184 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d0186 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000d0188 str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x000d018a movs r0, 0x68 | r0 = 0x68;
0x000d018c ldr r6, [r4, 0x14] | r6 = *(0xd016a);
0x000d018e str r6, [r5, 0x14] | *((r5 + 0x14)) = r6;
0x000d0190 ldr r4, [r5, 0x14] | r4 = *(0xd01be);
0x000d0192 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x000d0194 movs r0, 0xa | r0 = 0xa;
0x000d0196 movs r0, 0x20 | r0 = 0x20;
0x000d0198 strb r5, [r5, 0x10] | *((r5 + 0x10)) = r5;
0x000d019a str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d019c str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d019e movs r0, 0x20 | r0 = 0x20;
0x000d01a0 movs r0, 0x20 | r0 = 0x20;
0x000d01a2 movs r0, 0x20 | r0 = 0x20;
0x000d01a4 movs r0, 0x20 | r0 = 0x20;
0x000d01a6 movs r0, 0x20 | r0 = 0x20;
0x000d01a8 movs r0, 0x20 | r0 = 0x20;
0x000d01aa movs r0, 0x20 | r0 = 0x20;
0x000d01ac strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000d01ae strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000d01b0 ldr r0, [r4, 0x70] | r0 = *(0xd022e);
0x000d01b2 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d01b4 strb r0, [r6, 0x15] | *((r6 + 0x15)) = r0;
0x000d01b6 movs r0, 0x74 | r0 = 0x74;
0x000d01b8 ldr r5, [r5, 0x74] | r5 = *(0xd021e);
0x000d01ba str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d01bc strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d01be movs r0, 0x6f | r0 = 0x6f;
0x000d01c0 strb r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
0x000d01c2 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d01c4 str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d01c6 lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000d01c8 movs r0, 0x20 | r0 = 0x20;
0x000d01ca cmp r5, 0x20 |
0x000d01cc str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000d01ce strb r2, [r4, 0xd] | *((r4 + 0xd)) = r2;
0x000d01d0 movs r0, 0x20 | r0 = 0x20;
0x000d01d2 movs r0, 0x20 | r0 = 0x20;
0x000d01d4 movs r0, 0x20 | r0 = 0x20;
0x000d01d6 movs r0, 0x20 | r0 = 0x20;
0x000d01d8 movs r0, 0x20 | r0 = 0x20;
0x000d01da movs r0, 0x20 | r0 = 0x20;
0x000d01dc movs r0, 0x20 | r0 = 0x20;
0x000d01de movs r0, 0x20 | r0 = 0x20;
0x000d01e0 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d01e2 movs r0, 0x74 | r0 = 0x74;
0x000d01e4 strb r7, [r5, 0x15] | *((r5 + 0x15)) = r7;
0x000d01e6 strb r4, [r6, 1] | *((r6 + 1)) = r4;
0x000d01e8 strb r5, [r6, 0x11] | *((r6 + 0x11)) = r5;
0x000d01ea ldr r0, [r4, 0x50] | r0 = *(0xd020e);
0x000d01ec str r7, [r5, 0x44] | *((r5 + 0x44)) = r7;
0x000d01ee movs r0, 0x65 | r0 = 0x65;
0x000d01f0 ldr r4, [r6, 0x74] | r4 = *(0xd01de);
0x000d01f2 movs r7, 0x20 | r7 = 0x20;
0x000d01f4 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000d01f6 strb r2, [r4, 0xd] | *((r4 + 0xd)) = r2;
0x000d01f8 lsrs r7, r4, 8 | r7 = r4 >> 8;
0x000d01fa movs r0, 0x20 | r0 = 0x20;
0x000d01fc cmp r5, 0x20 |
0x000d01fe str r6, [r6, 0x54] | *((r6 + 0x54)) = r6;
0x000d0200 strb r2, [r6, 0xd] | *((r6 + 0xd)) = r2;
0x000d0202 ldr r1, [r5, 0x74] | r1 = *(0xd0292);
0x000d0204 movs r0, 0x6e | r0 = 0x6e;
0x000d0206 movs r0, 0x20 | r0 = 0x20;
0x000d0208 movs r0, 0x20 | r0 = 0x20;
0x000d020a movs r0, 0x20 | r0 = 0x20;
0x000d020c movs r0, 0x20 | r0 = 0x20;
0x000d020e movs r0, 0x20 | r0 = 0x20;
0x000d0210 movs r0, 0x20 | r0 = 0x20;
0x000d0212 ldr r3, [r6, 4] | r3 = *(0xd016e);
0x000d0214 strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d0216 strh r0, [r4, r4] | *((r4 + r4)) = r0;
0x000d0218 ldr r4, [pc, 0x144] | r4 = *(0xd0360);
0x000d021a strb r1, [r5, 0x11] | *((r5 + 0x11)) = r1;
0x000d021c movs r0, 0x65 | r0 = 0x65;
0x000d021e str r6, [r6, 0x54] | *((r6 + 0x54)) = r6;
0x000d0220 strb r2, [r6, 0xd] | *((r6 + 0xd)) = r2;
0x000d0222 ldr r1, [r5, 0x74] | r1 = *(0xd0292);
0x000d0224 lsrs r6, r5, 9 | r6 = r5 >> 9;
0x000d0226 movs r0, 0x20 | r0 = 0x20;
0x000d0228 cmp r5, 0x20 |
0x000d022a str r6, [r6, 0x64] | *((r6 + 0x64)) = r6;
0x000d022c movs r0, 0x73 | r0 = 0x73;
0x000d022e adcs r6, r1 | __asm ("adcs r6, r1");
0x000d0230 cmp r5, sb |
0x000d0232 movs r0, 0x20 | r0 = 0x20;
0x000d0234 movs r0, 0x20 | r0 = 0x20;
0x000d0236 movs r0, 0x20 | r0 = 0x20;
0x000d0238 movs r0, 0x20 | r0 = 0x20;
0x000d023a movs r0, 0x20 | r0 = 0x20;
0x000d023c movs r0, 0x20 | r0 = 0x20;
0x000d023e strb r5, [r6, 0xd] | *((r6 + 0xd)) = r5;
0x000d0240 movs r0, 0x65 | r0 = 0x65;
0x000d0242 adcs r6, r1 | __asm ("adcs r6, r1");
0x000d0244 cmp r5, sb |
0x000d0246 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d0248 movs r0, 0x73 | r0 = 0x73;
0x000d024a ldr r4, [r6, 4] | r4 = *(0xd016e);
0x000d024c movs r0, 0x65 | r0 = 0x65;
0x000d024e str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d0250 str r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
0x000d0252 ldr r5, [r6, 0x44] | r5 = *(0xd01ae);
0x000d0254 movs r0, 0x74 | r0 = 0x74;
0x000d0256 mov r6, sl | r6 = sl;
0x000d0258 lsrs r3, r2, 9 | r3 = r2 >> 9;
0x000d025a movs r0, r0 |
0x000d025c adds r2, 0x39 | r2 += 0x39;
0x000d025e adds r3, 0x32 | r3 += 0x32;
0x000d0260 adds r7, 0x33 | r7 += 0x33;
0x000d0262 adds r0, 0x32 | r0 += 0x32;
0x000d0264 adds r6, 0x33 | r6 += 0x33;
0x000d0266 adds r5, 0x38 | r5 += 0x38;
0x000d0268 adds r7, 0x34 | r7 += 0x34;
0x000d026a adds r5, 0x37 | r5 += 0x37;
0x000d026c adds r0, 0x38 | r0 += 0x38;
0x000d026e movs r0, r0 |
0x000d0270 strb r7, [r5, 1] | *((r5 + 1)) = r7;
0x000d0272 ldr r5, [r4, 0x64] | r5 = *(0xd01d2);
0x000d0274 strb r3, [r6, 0xd] | *((r6 + 0xd)) = r3;
0x000d0276 lsls r4, r5, 1 | r4 = r5 << 1;
0x000d0278 strb r7, [r1, 1] | *((r1 + 1)) = r7;
0x000d027a ldr r5, [r4, 0x64] | r5 = *(0xd01d2);
0x000d027c strh r3, [r2, r5] | *((r2 + r5)) = r3;
0x000d027e movs r0, 0x4c | r0 = 0x4c;
0x000d0280 cmp r6, 0x31 |
0x000d0282 cmp r6, 0x31 |
0x000d0284 strb r1, [r6, 0x14] | *((r6 + 0x14)) = r1;
0x000d0286 movs r0, 0x20 | r0 = 0x20;
0x000d0288 adds r0, 0x33 | r0 += 0x33;
0x000d028a ldr r5, [pc, 0x80] | r5 = *(0xd030e);
0x000d028c ldrb r1, [r4, 5] | r1 = *((r4 + 5));
0x000d028e adds r2, 0x20 | r2 += 0x20;
0x000d0290 adds r2, 0x30 | r2 += 0x30;
0x000d0292 movs r3, r6 | r3 = r6;
0x000d0294 ldr r5, [r0, 0x44] | r5 = *(0xd0252);
0x000d0296 strb r1, [r4, 1] | *((r4 + 1)) = r1;
0x000d0298 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d029a movs r0, 0x64 | r0 = 0x64;
0x000d029c ldr r4, [r6, 0x14] | r4 = *((r6 + 0x14));
0x000d029e str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000d02a0 movs r5, 0x3a | r5 = 0x3a;
0x000d02a2 adds r3, 0x2e | r3 += 0x2e;
0x000d02a4 movs r0, 0x66 | r0 = 0x66;
0x000d02a6 strb r5, [r5, 0xd] | *((r5 + 0xd)) = r5;
0x000d02a8 cmp r5, 0x20 |
0x000d02aa movs r5, 0x20 | r5 = 0x20;
0x000d02ac lsrs r3, r6, 9 | r3 = r6 >> 9;
0x000d02ae movs r0, r0 |
0x000d02b0 adds r0, 0x32 | r0 += 0x32;
0x000d02b2 subs r2, 0x63 | r2 -= 0x63;
0x000d02b4 adds r0, 0x32 | r0 += 0x32;
0x000d02b6 lsls r5, r4, 1 | r5 = r4 << 1;
0x000d02b8 adds r0, 0x32 | r0 += 0x32;
0x000d02ba subs r2, 0x62 | r2 -= 0x62;
0x000d02bc adds r0, 0x32 | r0 += 0x32;
0x000d02be lsls r5, r4, 1 | r5 = r4 << 1;
0x000d02c0 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d02c2 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d02c4 movs r0, 0x74 | r0 = 0x74;
0x000d02c6 strb r4, [r4, 0x15] | *((r4 + 0x15)) = r4;
0x000d02c8 movs r0, 0x65 | r0 = 0x65;
0x000d02ca ldr r4, [r6, 0x74] | r4 = *((r6 + 0x74));
0x000d02cc strh r0, [r4, r0] | *((r4 + r0)) = r0;
0x000d02ce ldr r4, [pc, 0x13c] | r4 = *(0xd040e);
0x000d02d0 rsbs r4, r1, 0 | r4 = r1 - ;
0x000d02d2 muls r1, r0, r1 | r1 = r0 * r1;
0x000d02d4 lsls r3, r1, 1 | r3 = r1 << 1;
0x000d02d6 movs r0, r0 |
0x000d02d8 ldr r1, [r4, 0x64] | r1 = *(0xd0472);
0x000d02da strb r7, [r5, 0x11] | *((r5 + 0x11)) = r7;
0x000d02dc str r0, [r5, 0x54] | *((r5 + 0x54)) = r0;
0x000d02de movs r0, 0x72 | r0 = 0x72;
0x000d02e0 ldm r7!, {r3, r4} | r3 = *(r7!);
| r4 = *((r7! + 4));
0x000d02e2 movs r5, r1 | r5 = r1;
0x000d02e4 strb r1, [r4, 0x19] | *((r4 + 0x19)) = r1;
0x000d02e6 ldr r1, [r4, 0x14] | r1 = *(0xd0422);
0x000d02e8 str r4, [r5, 0x14] | *((r5 + 0x14)) = r4;
0x000d02ea ldr r2, [r4, 0x44] | r2 = *(0xd0452);
0x000d02ec lsls r5, r4, 1 | r5 = r4 << 1;
0x000d02ee movs r0, r0 |
0x000d02f0 ldr r6, [r5, 0x74] | r6 = *(0xd02c6);
0x000d02f2 ldr r0, [r4, 0x50] | r0 = *(0xd045e);
0x000d02f4 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d02f6 movs r0, 0x65 | r0 = 0x65;
0x000d02f8 ldr r2, [r6, 0x74] | r2 = *(0xd033a);
0x000d02fa strb r7, [r6, 0xd] | *((r6 + 0xd)) = r7;
0x000d02fc str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d02fe str r6, [r6, 0x14] | *((r6 + 0x14)) = r6;
0x000d0300 ldr r1, [r5, 0x44] | r1 = *(0xd0296);
0x000d0302 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d0304 str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d0306 movs r0, r0 |
0x000d0308 ldr r5, [r6, 0x64] |
0x000d030a ldr r3, [r5, 0x64] | r3 = *(0xd038e);
0x000d030c strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d030e movs r0, 0x6e | r0 = 0x6e;
0x000d0310 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d0312 ldr r2, [r6, 0x74] | r2 = *(0xd033a);
0x000d0314 lsls r2, r6, 1 | r2 = r6 << 1;
0x000d0316 movs r0, r0 |
0x000d0318 ldr r2, [r5, 0x74] | r2 = *(0xd039e);
0x000d031a strb r5, [r6, 9] | *((r6 + 9)) = r5;
0x000d031c str r6, [r5, 0x14] | *((r5 + 0x14)) = r6;
0x000d031e ldrsh r4, [r5, r5] | r4 = *((r5 + r5));
0x000d0320 ldr r5, [r5, 0x74] | r5 = *(0xd039e);
0x000d0322 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d0324 movs r0, r0 |
0x000d0326 movs r0, r0 |
0x000d0328 strb r3, [r6, 5] | *((r6 + 5)) = r3;
0x000d032a ldr r4, [r5, 0x14] | r4 = *(0xd03b2);
0x000d032c str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d032e strb r7, [r3, 9] | *((r3 + 9)) = r7;
0x000d0330 strb r5, [r4, 0x11] | *((r4 + 0x11)) = r5;
0x000d0332 strb r5, [r6, 9] | *((r6 + 9)) = r5;
0x000d0334 ldr r6, [r5, 0x14] | r6 = *(0xd03b2);
0x000d0336 str r6, [r5, 0x74] | *((r5 + 0x74)) = r6;
0x000d0338 movs r0, r0 |
0x000d033a movs r0, r0 |
0x000d033c str r3, [r2, r5] | *((r2 + r5)) = r3;
0x000d033e ldr r1, [pc, 0x130] | r1 = *(0xd0472);
0x000d0340 cmp r4, sl |
0x000d0342 lsls r7, r3, 1 | r7 = r3 << 1;
0x000d0344 ldr r5, [r6, 0x64] | r5 = *(0xd0416);
0x000d0346 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d0348 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d034a str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d034c cmp r2, 0x64 |
0x000d034e movs r0, r0 |
0x000d0350 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x000d0352 ldrh r5, [r7, r4] | r5 = *((r7 + r4));
0x000d0354 cmp r5, 0x30 |
0x000d0356 ldrb r1, [r7, r4] | r1 = *((r7 + r4));
0x000d0358 movs r2, r5 | r2 = r5;
0x000d035a movs r0, r0 |
0x000d035c ldr r6, [r5, 0x74] | r6 = *(0xd048a);
0x000d035e ldr r3, [r6, 0x34] | r3 = *(0xd04be);
0x000d0360 strb r1, [r5, 1] | *((r5 + 1)) = r1;
0x000d0362 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000d0364 ldr r1, [r4, 0x64] | r1 = *(0xd0416);
0x000d0366 movs r2, r5 | r2 = r5;
0x000d0368 str r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
0x000d036a strb r4, [r5, 0xd] | *((r5 + 0xd)) = r4;
0x000d036c lsls r5, r4, 1 | r5 = r4 << 1;
0x000d036e movs r0, r0 |
0x000d0370 ldr r1, [pc, 0x13c] | r1 = "Invalid argument to rtreedepth()";
0x000d0372 lsls r4, r0, 1 | r4 = r0 << 1;
0x000d0374 ldr r7, [pc, 0x148] | r7 = *(0xd04c0);
0x000d0376 ldr r1, [pc, 0x15c] |
0x000d0378 lsls r4, r0, 1 | r4 = r0 << 1;
0x000d037a movs r0, r0 |
0x000d037c strb r3, [r4, 9] | *((r4 + 9)) = r3;
0x000d037e str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000d0380 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d0382 movs r0, r0 |
0x000d0384 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d0386 strb r5, [r5, 1] | *((r5 + 1)) = r5;
0x000d0388 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d038a strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d038c lsls r1, r7, 1 | r1 = r7 << 1;
0x000d038e movs r0, r0 |
0x000d0390 ldr r6, [pc, 0xa0] | r6 = imp.atan;
0x000d0392 ldr r4, [pc, 0x154] | r4 = *(0xd04ea);
0x000d0394 cmp r1, 0x4c |
0x000d0396 movs r0, r0 |
0x000d0398 str r6, [r1, 0x14] | *((r1 + 0x14)) = r6;
0x000d039a lsls r6, r1, 1 | r6 = r1 << 1;
0x000d039c ldr r1, [r1, 0x64] | r1 = *(0xd053a);
0x000d039e lsls r6, r4, 1 | r6 = r4 << 1;
0x000d03a0 ldr r0, [r5, 0x20] | r0 = *(0xd0436);
0x000d03a2 ldr r7, [r5, 0x14] | r7 = *(0xd042a);
0x000d03a4 cmp r5, 0x6e |
0x000d03a6 strb r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000d03a8 movs r1, r5 | r1 = r5;
0x000d03aa movs r0, r0 |
0x000d03ac strb r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x000d03ae str r5, [r6, 0x24] | *((r6 + 0x24)) = r5;
0x000d03b0 strb r1, [r6, 0x15] | *((r6 + 0x15)) = r1;
0x000d03b2 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d03b4 cmp r5, 0x79 |
0x000d03b6 strb r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000d03b8 movs r1, r5 | r1 = r5;
0x000d03ba movs r0, r0 |
0x000d03bc ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x000d03be str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d03c0 ldr r3, [r4, 0x74] | r3 = *(0xd055e);
0x000d03c2 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d03c4 movs r0, r0 |
0x000d03c6 movs r0, r0 |
0x000d03c8 str r4, [r6, 0x14] | *((r6 + 0x14)) = r4;
0x000d03ca ldr r2, [r4, 0x44] |
0x000d03cc strb r5, [r4, 0xd] | *((r4 + 0xd)) = r5;
0x000d03ce strb r7, [r3, 0x15] | *((r3 + 0x15)) = r7;
0x000d03d0 str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x000d03d2 lsls r4, r4, 1 | r4 <<= 1;
0x000d03d4 strb r3, [r6, 5] | *((r6 + 5)) = r3;
0x000d03d6 ldr r4, [r5, 0x14] | r4 = *(0xd042a);
0x000d03d8 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d03da strb r7, [r3, 0xd] | *((r3 + 0xd)) = r7;
0x000d03dc ldr r4, [r6, 0x54] | r4 = *(0xd0488);
0x000d03de lsls r4, r6, 1 | r4 = r6 << 1;
0x000d03e0 strb r2, [r5, 0xd] | *((r5 + 0xd)) = r2;
0x000d03e2 ldr r7, [r5, 0x64] | r7 = *(0xd047a);
0x000d03e4 str r7, [r3, 0x54] | *((r3 + 0x54)) = r7;
0x000d03e6 str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x000d03e8 lsls r0, r5, 1 | r0 = r5 << 1;
0x000d03ea movs r0, r0 |
0x000d03ec strb r2, [r5, 0xd] | *((r5 + 0xd)) = r2;
0x000d03ee ldr r7, [r5, 0x64] | r7 = *(0xd047a);
0x000d03f0 strb r7, [r3, 0x11] | *((r3 + 0x11)) = r7;
0x000d03f2 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d03f4 lsls r5, r4, 1 | r5 = r4 << 1;
0x000d03f6 movs r0, r0 |
0x000d03f8 str r4, [r4, 0x24] | *((r4 + 0x24)) = r4;
0x000d03fa strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000d03fc strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d03fe movs r0, r0 |
0x000d0400 strb r3, [r6, 5] | *((r6 + 5)) = r3;
0x000d0402 ldr r4, [r5, 0x14] | r4 = *(0xd042a);
0x000d0404 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d0406 str r7, [r3, 0x44] | *((r3 + 0x44)) = r7;
0x000d0408 strb r2, [r4, 1] | *((r4 + 1)) = r2;
0x000d040a str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000d040c lsls r5, r4, 1 | r5 = r4 << 1;
0x000d040e movs r0, r0 |
0x000d0410 str r4, [r7, 0x50] | *((r7 + 0x50)) = r4;
0x000d0412 strb r0, [r7, 1] | *((r7 + 1)) = r0;
0x000d0414 subs r6, 0x72 | r6 -= 0x72;
0x000d0416 movs r0, r0 |
0x000d0418 lsls r2, r0, 1 | r2 = r0 << 1;
0x000d041a movs r0, r0 |
0x000d041c cmp r6, 0x4e |
0x000d041e movs r0, r0 |
0x000d0420 str r0, [r5, 0x20] | *((r5 + 0x20)) = r0;
0x000d0422 ldr r4, [r5, 0x74] | r4 = *(0xd048a);
0x000d0424 cmp r1, 0x62 |
0x000d0426 movs r0, r0 |
0x000d0428 strb r0, [r6, 9] | *((r6 + 9)) = r0;
0x000d042a str r7, [r5, 0x74] | *((r5 + 0x74)) = r7;
0x000d042c str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000d042e lsls r5, r5, 1 | r5 <<= 1;
0x000d0430 cmp r0, 0x6b |
0x000d0432 str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000d0434 movs r0, r0 |
0x000d0436 movs r0, r0 |
0x000d0438 ldr r1, [pc, 0x108] |
0x000d043a adcs r6, r1 | __asm ("adcs r6, r1");
0x000d043c ldr r2, [r2, r5] | r2 = *(0xd052e);
0x000d043e movs r0, r0 |
0x000d0440 movs r5, 0x2c | r5 = 0x2c;
0x000d0442 movs r5, 0x73 | r5 = 0x73;
0x000d0444 movs r5, 0x73 | r5 = 0x73;
0x000d0446 lsls r3, r6, 1 | r3 = r6 << 1;
0x000d0448 cmp r6, 0x25 |
0x000d044a subs r0, 0x31 | r0 -= 0x31;
0x000d044c cmp r5, 0x73 |
0x000d044e strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d0450 movs r0, r0 |
0x000d0452 movs r0, r0 |
0x000d0454 strb r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x000d0456 movs r5, 0x28 | r5 = 0x28;
0x000d0458 cmp r1, 0x64 |
0x000d045a movs r0, r0 |
0x000d045c cmp r6, 0x25 |
0x000d045e adds r6, 0x31 | r6 += 0x31;
0x000d0460 lsls r7, r4, 1 | r7 = r4 << 1;
0x000d0462 movs r0, r0 |
0x000d0464 strb r6, [r6, 0x11] | *((r6 + 0x11)) = r6;
0x000d0466 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d0468 movs r5, 0x3a | r5 = 0x3a;
0x000d046a lsls r0, r6, 1 | r0 = r6 << 1;
0x000d046c str r5, [r4, 0x30] | *((r4 + 0x30)) = r5;
0x000d046e strb r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x000d0470 movs r0, r0 |
0x000d0472 movs r0, r0 |
0x000d0474 movs r1, 0x25 | r1 = 0x25;
0x000d0476 adds r1, 0x2e | r1 += 0x2e;
0x000d0478 str r5, [r6, 0x70] | *((r6 + 0x70)) = r5;
0x000d047a movs r0, r0 |
0x000d047c strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000d047e ldr r2, [r6, 0x14] | r2 = "%.18s-%s";
0x000d0480 str r6, [r5, 0x74] | *((r5 + 0x74)) = r6;
0x000d0482 ldr r0, [r4, 0x70] | r0 = *(0xd04fa);
0x000d0484 movs r0, 0x72 | r0 = 0x72;
0x000d0486 ldr r2, [r4, 0x44] | r2 = *(0xd04ce);
0x000d0488 str r7, [r5, 0x24] | *((r5 + 0x24)) = r7;
0x000d048a strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d048c ldr r7, [r5, 0x74] | r7 = *(0xd048a);
0x000d048e str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000d0490 str r1, [r5, 0x74] | *((r5 + 0x74)) = r1;
0x000d0492 movs r0, r0 |
0x000d0494 cmp r5, 0x2d |
0x000d0496 movs r0, r4 | r0 = r4;
0x000d0498 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x000d049a ldr r2, [r6, 0x74] | r2 = '%.*q';
0x000d049c ldr r2, [r4, 0x44] | r2 = *(0xd04ce);
0x000d049e str r7, [r5, 0x24] | *((r5 + 0x24)) = r7;
0x000d04a0 movs r5, 0x28 | r5 = 0x28;
0x000d04a2 cmp r1, 0x64 |
0x000d04a4 movs r0, r0 |
0x000d04a6 movs r0, r0 |
0x000d04a8 movs r5, 0x27 | r5 = 0x27;
0x000d04aa cmp r2, 0x2e |
0x000d04ac movs r7, 0x71 | r7 = 0x71;
0x000d04ae movs r0, r0 |
0x000d04b0 ldr r1, [r1, 0x64] | r1 = *(0xd05a8);
0x000d04b2 str r6, [r6, 0x14] | *((r6 + 0x14)) = r6;
0x000d04b4 ldr r4, [r5, 0x14] | r4 = *(0xd042a);
0x000d04b6 movs r0, 0x64 | r0 = 0x64;
0x000d04b8 strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d04ba strb r7, [r4, 0x15] | *((r4 + 0x15)) = r7;
0x000d04bc str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000d04be strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d04c0 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d04c2 movs r0, 0x6f | r0 = 0x6f;
0x000d04c4 strb r2, [r6, 0x11] | *((r6 + 0x11)) = r2;
0x000d04c6 str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d04c8 str r5, [r4, 0x44] | *((r4 + 0x44)) = r5;
0x000d04ca strb r5, [r4, 1] | *((r4 + 1)) = r5;
0x000d04cc ldr r4, [r6, 4] | r4 = "BINARY";
0x000d04ce cmp r1, 0x28 |
0x000d04d0 movs r0, r0 |
0x000d04d2 movs r0, r0 |
0x000d04d4 strb r1, [r0, r1] | *((r0 + r1)) = r1;
0x000d04d6 ldr r5, [pc, 0x13c] | r5 = *(0xd0616);
0x000d04d8 muls r1, r1, r1 | r1 *= r1;
0x000d04da ldr r1, [pc, 0x17c] | r1 = *(0xd065a);
0x000d04dc strb r6, [r1, r1] | *((r1 + r1)) = r6;
0x000d04de ldr r1, [pc, 0x148] | r1 = *(0xd062a);
0x000d04e0 strh r6, [r1, r5] | *((r1 + r5)) = r6;
0x000d04e2 muls r1, r1, r1 | r1 *= r1;
0x000d04e4 subs r5, 0x53 | r5 -= 0x53;
0x000d04e6 movs r1, r6 | r1 = r6;
0x000d04e8 ldr r6, [r5, 0x74] | r6 = *(0xd068a);
0x000d04ea movs r0, 0x74 | r0 = 0x74;
0x000d04ec ldr r1, [r4, 0x64] | r1 = *(0xd049c);
0x000d04ee str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000d04f0 strb r2, [r6, 9] | *((r6 + 9)) = r2;
0x000d04f2 strb r7, [r5, 9] | *((r5 + 9)) = r7;
0x000d04f4 movs r0, r0 |
0x000d04f6 movs r0, r0 |
0x000d04f8 movs r1, 0x25 | r1 = 0x25;
0x000d04fa adds r2, 0x2e | r2 += 0x2e;
0x000d04fc str r0, [r6, 0x50] | *((r6 + 0x50)) = r0;
0x000d04fe movs r0, r0 |
0x000d0500 ldr r5, [r4, 0x40] | r5 = *(0xd0478);
0x000d0502 strb r4, [r5, 0x15] | *((r5 + 0x15)) = r4;
0x000d0504 movs r0, r0 |
0x000d0506 movs r0, r0 |
0x000d0508 movs r5, 0x20 | r5 = 0x20;
0x000d050a ldr r4, [r5, 0x44] | r4 = *(0xd04bc);
0x000d050c lsls r5, r6, 1 | r5 = r6 << 1;
0x000d050e movs r0, r0 |
0x000d0510 ldr r1, [r5, 0x64] | r1 = *(0xd04dc);
0x000d0512 str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d0514 str r7, [r4, 0x54] | *((r4 + 0x54)) = r7;
0x000d0516 movs r0, 0x72 | r0 = 0x72;
0x000d0518 strb r7, [r5, 0x19] | *((r5 + 0x19)) = r7;
0x000d051a strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d051c ldr r6, [r4, 0x44] | r6 = "%llu";
0x000d051e strb r7, [r5, 0x1d] | *((r5 + 0x1d)) = r7;
0x000d0520 movs r0, r0 |
0x000d0522 movs r0, r0 |
0x000d0524 ldr r4, [r5, 0x74] | r4 = *(0xd04ec);
0x000d0526 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000d0528 movs r0, 0x6c | r0 = 0x6c;
0x000d052a ldr r4, [r6, 0x14] | r4 = *(0xd0514);
0x000d052c str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000d052e strb r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x000d0530 str r6, [r5, 0x14] | *((r5 + 0x14)) = r6;
0x000d0532 str r6, [r6, 0x14] | *((r6 + 0x14)) = r6;
0x000d0534 ldr r1, [r5, 0x44] | r1 = *(0xd04bc);
0x000d0536 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000d0538 str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d053a movs r0, r0 |
0x000d053c strb r1, [r4, 9] | *((r4 + 9)) = r1;
0x000d053e strb r7, [r4, 0x15] | *((r4 + 0x15)) = r7;
0x000d0540 str r5, [r5, 0x54] | *((r5 + 0x54)) = r5;
0x000d0542 strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d0544 ldr r0, [r4, 0x70] | r0 = *(0xd0584);
0x000d0546 movs r0, 0x66 | r0 = 0x66;
0x000d0548 strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d054a ldr r1, [r5, 0x44] | r1 = *(0xd04bc);
0x000d054c movs r0, 0x65 | r0 = 0x65;
0x000d054e strb r5, [r5, 0x15] | *((r5 + 0x15)) = r5;
0x000d0550 strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000d0552 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000d0554 movs r0, 0x65 | r0 = 0x65;
0x000d0556 movs r0, 0x61 | r0 = 0x61;
0x000d0558 ldr r0, [r6, 0x74] | r0 = *(0xd0574);
0x000d055a ldr r3, [r6, 0x14] | r3 = *(0xd0514);
0x000d055c ldr r4, [r6, 0x14] | r4 = *(0xd0514);
0x000d055e str r6, [r6, 0x54] | *((r6 + 0x54)) = r6;
0x000d0560 ldr r0, [r4, 0x10] | r0 = "local time unavailable";
0x000d0562 strb r6, [r5, 0x11] | *((r5 + 0x11)) = r6;
0x000d0564 str r5, [r4, 0x74] | *((r4 + 0x74)) = r5;
0x000d0566 strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d0568 movs r0, r0 |
0x000d056a movs r0, r0 |
0x000d056c ldr r1, [pc, 0x130] | r1 = imp.atan;
0x000d056e cmp r3, sb |
0x000d0570 ldr r0, [r4, 0x70] | r0 = *(0xd0584);
0x000d0572 movs r0, 0x72 | r0 = 0x72;
0x000d0574 ldr r4, [pc, 0x11c] | r4 = *(0xd0694);
0x000d0576 rsbs r7, r1, 0 | r7 = r1 - ;
0x000d0578 strb r0, [r4] | *(r4) = r0;
0x000d057a strb r1, [r4, 0x11] | *((r4 + 0x11)) = r1;
0x000d057c str r4, [r6, 0x54] | *((r6 + 0x54)) = r4;
0x000d057e ldr r2, [r6, 0x64] | r2 = *(0xd0564);
0x000d0580 strb r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x000d0582 ldr r7, [r5, 0x74] | r7 = *(0xd04ec);
0x000d0584 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x000d0586 ldr r7, [r5, 0x54] | r7 = *(0xd04cc);
0x000d0588 ldr r0, [r6, 0x44] | r0 = *(0xd0544);
0x000d058a ldrb r5, [r4, 1] | r5 = *((r4 + 1));
0x000d058c movs r0, r0 |
0x000d058e movs r0, r0 |
0x000d0590 strh r5, [r0, r5] | *((r0 + r5)) = r5;
0x000d0592 adcs r3, r0 | __asm ("adcs r3, r0");
0x000d0594 cmp r0, sl |
0x000d0596 str r0, [r4, 0x50] | *((r4 + 0x50)) = r0;
0x000d0598 strb r0, [r7, 1] | *((r7 + 1)) = r0;
0x000d059a str r2, [r6, 0x54] | *((r6 + 0x54)) = r2;
0x000d059c strb r3, [r6, 0xd] | *((r6 + 0xd)) = r3;
0x000d059e ldr r1, [r5, 0x74] | r1 = *(0xd04ec);
0x000d05a0 movs r0, 0x6e | r0 = 0x6e;
0x000d05a2 strb r5, [r5, 0x15] | *((r5 + 0x15)) = r5;
0x000d05a4 strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000d05a6 str r0, [r4, 0x20] | *((r4 + 0x20)) = r0;
0x000d05a8 movs r0, 0x65 | r0 = 0x65;
0x000d05aa movs r0, 0x61 | r0 = 0x61;
0x000d05ac ldr r3, [r6, 0x14] | r3 = *(0xd0514);
0x000d05ae str r6, [r5, 0x74] | *((r5 + 0x74)) = r6;
0x000d05b0 str r4, [r5, 0x54] | *((r5 + 0x54)) = r4;
0x000d05b2 str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
0x000d05b4 str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x000d05b6 str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000d05b8 strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x000d05ba strb r5, [r4, 9] | *((r4 + 9)) = r5;
0x000d05bc movs r0, r0 |
0x000d05be movs r0, r0 |
0x000d05c0 ldr r1, [r5, 0x64] | r1 = *(0xd04dc);
0x000d05c2 str r4, [r4, 0x54] | *((r4 + 0x54)) = r4;
0x000d05c4 movs r0, 0x78 | r0 = 0x78;
0x000d05c6 movs r5, 0x27 | r5 = 0x27;
0x000d05c8 movs r7, 0x71 | r7 = 0x71;
0x000d05ca movs r0, r0 |
0x000d05cc ldr r3, [r6, 0x14] | r3 = *(0xd0514);
0x000d05ce strb r3, [r6, 0xd] | *((r6 + 0xd)) = r3;
0x000d05d0 ldr r1, [r5, 0x14] | r1 = *(0xd048c);
0x000d05d2 movs r0, r0 |
0x000d05d4 cmp r3, sl |
0x000d05d6 strh r1, [r0, r1] | *((r0 + r1)) = r1;
0x000d05d8 ldr r0, [pc, 0x10c] | r0 = "not authorized";
0x000d05da movs r0, r0 |
0x000d05dc muls r3, r2, r3 | r3 = r2 * r3;
0x000d05de ldr r6, [pc, 0x104] | r6 = *(0xd06e6);
0x000d05e0 movs r0, r0 |
0x000d05e2 movs r0, r0 |
0x000d05e4 strb r1, [r0, r5] | *((r0 + r5)) = r1;
0x000d05e6 ldr r7, [pc, 0x150] | r7 = *(0xd073a);
0x000d05e8 adcs r5, r1 | __asm ("adcs r5, r1");
0x000d05ea ldr r1, [pc, 0x150] | r1 = *(0xd073e);
0x000d05ec movs r0, 0x43 | r0 = 0x43;
0x000d05ee adcs r0, r2 | __asm ("adcs r0, r2");
0x000d05f0 strb r2, [r2, r1] | *((r2 + r1)) = r2;
0x000d05f2 adcs r1, r1 | __asm ("adcs r1, r1");
0x000d05f4 movs r0, 0x4c | r0 = 0x4c;
0x000d05f6 ldr r7, [pc, 0x10c] | r7 = *(0xd0706);
0x000d05f8 cmp r6, sl |
0x000d05fa ldr r1, [pc, 0x148] | r1 = *(0xd0746);
0x000d05fc bx sb | return uint32_t (*sb)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc3478 */
| #include <stdint.h>
|
; (fcn) fcn.000c3478 () | void fcn_000c3478 (int16_t arg1, uint32_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000c3478 invalid | goto label_0;
0x000c347a push {r3, r4, r5, r6, r7, lr} |
0x000c347c mov r5, r2 | r5 = r2;
0x000c347e ldr r3, [r2] | r3 = *(r2);
| if (r3 != 0) {
0x000c3480 cbnz r3, 0xc34be | goto label_1;
| }
0x000c3482 mov r4, r1 | r4 = r1;
0x000c3484 ldr r1, [r1] | r1 = *(r1);
0x000c3486 mov r6, r0 | r6 = r0;
0x000c3488 cmp r1, 5 |
| if (r1 != 5) {
0x000c348a bne 0xc34c2 | goto label_2;
| }
0x000c348c ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000c348e ldr r7, [r2, 0x40] | r7 = *((r2 + 0x40));
0x000c3490 cmp r7, 0 |
| if (r7 == 0) {
0x000c3492 beq 0xc34b4 | goto label_3;
| }
| if (r7 <= 0) {
0x000c3494 ble 0xc34a8 | goto label_4;
| }
0x000c3496 mov r1, r2 | r1 = r2;
0x000c3498 b 0xc34a0 |
| while (r0 != 0) {
0x000c349a adds r3, 1 | r3++;
0x000c349c cmp r7, r3 |
| if (r7 == r3) {
0x000c349e beq 0xc34a8 | goto label_4;
| }
0x000c34a0 ldr r0, [r1, 0x58] | r0 = *((r1 + 0x58));
0x000c34a2 adds r1, 0x18 | r1 += 0x18;
0x000c34a4 cmp r0, 0 |
0x000c34a6 bne 0xc349a |
| }
| label_4:
0x000c34a8 subs r7, r7, r3 | r7 -= r3;
0x000c34aa clz r7, r7 | r7 &= r7;
0x000c34ae lsrs r7, r7, 5 | r7 >>= 5;
0x000c34b0 strb.w r7, [r4, 0x22] | *((r4 + 0x22)) = r7;
| label_3:
0x000c34b4 movs r1, 1 | r1 = 1;
0x000c34b6 mov r0, r6 | r0 = r6;
0x000c34b8 bl 0xc0ad8 | fcn_000c0ad8 (r0, r1, r2, r3);
0x000c34bc str r0, [r5] | *(r5) = r0;
| label_1:
0x000c34be pop {r3, r4, r5, r6, r7, pc} |
| label_0:
0x000c34c0 bx lr | return;
| label_2:
0x000c34c2 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x000c34c4 bl 0xc3478 | fcn_000c3478 (r0, r1, r2);
0x000c34c8 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x000c34ca mov r2, r5 | r2 = r5;
0x000c34cc mov r0, r6 | r0 = r6;
0x000c34ce bl 0xc3478 | fcn_000c3478 (r0, r1, r2);
0x000c34d2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000c34d4 ldrb.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
| if (r3 != 0) {
0x000c34d8 cbz r3, 0xc34e6 |
0x000c34da ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000c34dc ldrb.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
0x000c34e0 subs r3, 0 |
0x000c34e2 it ne |
| if (r3 != 0) {
0x000c34e4 movne r3, 1 | r3 = 1;
| goto label_5;
| }
| }
| label_5:
0x000c34e6 strb.w r3, [r4, 0x22] | *((r4 + 0x22)) = r3;
0x000c34ea pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc34ec */
| #include <stdint.h>
|
; (fcn) fcn.000c34ec () | uint32_t fcn_000c34ec (int16_t arg_258h_2, int16_t arg_258h, int16_t arg_70h, int16_t arg_74h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h_2;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| char * s1;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| arithmetic var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| arithmetic x;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int32_t var_c0h_2;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_f8h;
| int32_t var_4h_2;
| int32_t var_4h_3;
| int16_t var_10h;
| int16_t var_14h_2;
| int32_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int32_t var_2ch_3;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_3ch_2;
| int16_t var_40h_2;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000c34ec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c34f0 mov r5, r2 | r5 = r2;
0x000c34f2 ldr r2, [pc, 0x18c] |
0x000c34f4 mov lr, r3 | lr = r3;
0x000c34f6 sub sp, 0x4c |
0x000c34f8 ldr r3, [pc, 0x188] | r3 = *(0xc3684);
0x000c34fa add r2, pc | r2 = 0x186b80;
0x000c34fc ldr r7, [sp, 0x74] | r7 = *(arg_74h);
0x000c34fe str r0, [sp, 0x10] | var_10h = r0;
0x000c3500 ldr r3, [r2, r3] |
0x000c3502 ldr r6, [sp, 0x70] | r6 = *(arg_70h);
0x000c3504 ldr r3, [r3] | r3 = imp.atan;
0x000c3506 str r3, [sp, 0x44] | var_44h = r3;
0x000c3508 mov.w r3, 0 | r3 = 0;
0x000c350c ldr r3, [r7] | r3 = *(r7);
0x000c350e str r7, [sp, 0x20] | var_20h = r7;
| if (r3 != 0) {
0x000c3510 cbnz r3, 0xc3558 | goto label_1;
| }
0x000c3512 mov r4, r1 | r4 = r1;
0x000c3514 mov r8, lr | r8 = lr;
| do {
0x000c3516 ldr r2, [r5] | r2 = *(r5);
0x000c3518 cmp r2, 5 |
| if (r2 == 5) {
0x000c351a beq 0xc3574 | goto label_64;
| }
0x000c351c cmp r2, 2 |
| if (r2 == 2) {
0x000c351e beq 0xc3558 | goto label_1;
| }
0x000c3520 cmp r2, 4 |
0x000c3522 mov r3, r8 | r3 = r8;
0x000c3524 itt eq |
| if (r2 != 4) {
0x000c3526 ldreq r4, [r5, 0xc] | r4 = *((r5 + 0xc));
| }
| if (r2 != 4) {
0x000c3528 ldreq r2, [r6] | r2 = *(r6);
| }
0x000c352a ldr r0, [sp, 0x10] | r0 = var_10h;
0x000c352c mov r1, r4 | r1 = r4;
0x000c352e itt eq |
| if (r2 != 4) {
0x000c3530 streq r4, [r2], 4 | *(r2) = r4;
| r2 += 4;
| }
| if (r2 == 4) {
0x000c3534 str r2, [r6] | *(r6) = r2;
| }
0x000c3536 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000c3538 strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x000c353c bl 0xc34ec | fcn_000c34ec (r0, r1, r2, r3, r4, r5, r6);
0x000c3540 ldr r3, [r5] | r3 = *(r5);
0x000c3542 cmp r3, 4 |
0x000c3544 itttt eq |
| if (r3 != 4) {
0x000c3546 ldreq r4, [r5, 0x10] | r4 = *((r5 + 0x10));
| }
| if (r3 != 4) {
0x000c3548 ldreq r2, [r6] | r2 = *(r6);
| }
| if (r3 != 4) {
0x000c354a streq r4, [r2], 4 | *(r2) = r4;
| r2 += 4;
| }
| if (r3 == 4) {
0x000c354e str r2, [r6] | *(r6) = r2;
| }
0x000c3550 ldr r2, [r7] | r2 = *(r7);
0x000c3552 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000c3554 cmp r2, 0 |
0x000c3556 beq 0xc3516 |
| } while (r2 == 0);
| do {
| label_1:
0x000c3558 ldr r2, [pc, 0x12c] |
0x000c355a ldr r3, [pc, 0x128] | r3 = *(0xc3686);
0x000c355c add r2, pc | r2 = 0x186be8;
0x000c355e ldr r3, [r2, r3] | r3 = imp.atan;
0x000c3560 ldr r2, [r3] | r2 = imp.atan;
0x000c3562 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000c3564 eors r2, r3 | r2 ^= r3;
0x000c3566 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c356a bne.w 0xc367a | goto label_65;
| }
0x000c356e add sp, 0x4c |
0x000c3570 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_64:
0x000c3574 ldr r7, [r5, 0x14] | r7 = *((r5 + 0x14));
0x000c3576 mov lr, r8 | lr = r8;
0x000c3578 movs r2, 0 | r2 = 0;
0x000c357a str r4, [sp, 0x28] | var_28h_2 = r4;
0x000c357c mov r8, r2 | r8 = r2;
0x000c357e mov r4, lr | r4 = lr;
0x000c3580 add.w ip, r7, 0x48 |
0x000c3584 add r3, sp, 0x40 | r3 += var_40h_2;
0x000c3586 str r3, [sp, 0x3c] | var_3ch_2 = r3;
| label_2:
0x000c3588 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x000c358a cmp r3, r2 |
0x000c358c ble 0xc3558 |
| } while (r3 <= r2);
0x000c358e ldr r6, [r4] | r6 = *(r4);
0x000c3590 mov.w fp, 0 |
0x000c3594 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x000c3596 mov r5, fp | r5 = fp;
0x000c3598 ldr.w sb, [ip, 0x14] | sb = *((ip + 0x14));
0x000c359c mov lr, r4 | lr = r4;
0x000c359e add.w r3, r6, 0x18 | r3 = r6 + 0x18;
0x000c35a2 str r2, [sp, 0x14] | var_14h_2 = r2;
0x000c35a4 str r3, [r4] | *(r4) = r3;
0x000c35a6 ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x000c35a8 strd ip, r1, [r6, 8] | __asm ("strd ip, r1, [r6, 8]");
0x000c35ac strd r7, r2, [r6] | __asm ("strd r7, r2, [r6]");
0x000c35b0 mov r2, r7 | r2 = r7;
0x000c35b2 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000c35b4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000c35b6 ldr.w r0, [sb, 4] | r0 = *((sb + 4));
0x000c35b8 movs r4, r0 | r4 = r0;
0x000c35ba ldr r1, [r3] | r1 = *(r3);
0x000c35bc strd ip, r1, [sp, 0x18] | __asm ("strd ip, r1, [var_1ch_2]");
0x000c35c0 mov ip, r6 |
0x000c35c2 ldr.w sl, [r1, 0xf4] | sl = *((r1 + 0xf4));
0x000c35c6 b 0xc35ca |
| while (r3 != 0) {
| label_0:
0x000c35c8 adds r5, 1 | r5++;
0x000c35ca cmp r0, r5 |
| if (r0 <= r5) {
0x000c35cc ble 0xc364c | goto label_66;
| }
0x000c35ce ldr.w r3, [sb] | r3 = *(sb);
0x000c35d2 ldr.w r6, [r3, r5, lsl 2] | offset_0 = r5 << 2;
| r6 = *((r3 + offset_0));
0x000c35d6 ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x000c35d8 cmp r3, 0 |
0x000c35da bne 0xc35c8 |
| }
0x000c35dc ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000c35de cmp r3, 0 |
| if (r3 != 0) {
0x000c35e0 bne 0xc35c8 | goto label_0;
| }
0x000c35e2 ldrd r7, r1, [r6, 0xc] | __asm ("ldrd r7, r1, [r6, 0xc]");
0x000c35e6 ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x000c35e8 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000c35ea cmp r1, r4 |
0x000c35ec sbcs r3, r7 | __asm ("sbcs r3, r7");
| if (r1 < r4) {
0x000c35ee blt 0xc35c8 | goto label_0;
| }
0x000c35f0 strd sb, r2, [sp, 0x2c] | __asm ("strd sb, r2, [var_2ch_2]");
0x000c35f4 mov sb, r7 | sb = r7;
0x000c35f6 str r5, [sp, 0x34] | var_34h_2 = r5;
0x000c35f8 ldr r7, [sp, 0x3c] | r7 = var_3ch_2;
0x000c35fa ldr r5, [sp, 0x1c] | r5 = var_1ch_2;
0x000c35fc str.w ip, [sp, 0x24] | __asm ("str.w ip, [var_24h_2]");
0x000c3600 str.w lr, [sp, 0x38] | __asm ("str.w lr, [var_38h_2]");
0x000c3604 b 0xc362a |
| while (r0 == 0) {
0x000c3606 ldr r0, [sp, 0x40] | r0 = var_40h_2;
0x000c3608 adds r0, 0x22 | r0 += 0x22;
0x000c360a cmp sl, r0 |
| if (sl <= r0) {
0x000c360c bgt 0xc3616 |
0x000c360e mov r1, sl | r1 = sl;
0x000c3610 bl 0xc4780 | r0 = fcn_000c4780 (r0, r1);
0x000c3614 add fp, r0 |
| }
0x000c3616 ldrd r0, r1, [r6, 0x10] | __asm ("ldrd r0, r1, [r6, 0x10]");
0x000c361a adds r2, r4, 1 | r2 = r4 + 1;
0x000c361c adc sb, sb, 0 | __asm ("adc sb, sb, 0");
0x000c3620 mov r4, r2 | r4 = r2;
0x000c3622 cmp r0, r2 |
0x000c3624 sbcs.w r1, r1, sb | __asm ("sbcs.w r1, r1, sb");
| if (r0 < r2) {
0x000c3628 blt 0xc3668 | goto label_67;
| }
0x000c362a mov r2, r4 | r2 = r4;
0x000c362c mov r3, sb | r3 = sb;
0x000c362e mov r0, r5 | r0 = r5;
0x000c3630 strd r7, r8, [sp, 4] | __asm ("strd r7, r8, [var_4h_2]");
0x000c3634 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000c3636 strh r0, [r0] | *(r0) = r0;
0x000c3638 bl 0xbabb0 | r0 = fcn_000babb0 (r0, r1, r2, r3, r4, r5, r6);
0x000c363c cmp r0, 0 |
0x000c363e beq 0xc3606 |
| }
0x000c3640 ldr r6, [sp, 0x24] | r6 = var_24h_2;
0x000c3642 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000c3644 str.w fp, [r6, 0x10] | __asm ("str.w fp, [r6, 0x10]");
0x000c3648 str r0, [r3] | *(r3) = r0;
0x000c364a b 0xc3558 | goto label_1;
| label_66:
0x000c364c mov r6, ip | r6 = ip;
0x000c364e ldr r3, [sp, 0x20] | r3 = var_20h;
0x000c3650 mov r7, r2 | r7 = r2;
0x000c3652 ldrd r2, ip, [sp, 0x14] | __asm ("ldrd r2, ip, [var_14h_2]");
0x000c3656 str.w fp, [r6, 0x10] | __asm ("str.w fp, [r6, 0x10]");
0x000c365a mov r4, lr | r4 = lr;
0x000c365c str.w r8, [r3] | __asm ("str.w r8, [r3]");
0x000c3660 adds r2, 1 | r2++;
0x000c3662 add.w ip, ip, 0x18 |
0x000c3666 b 0xc3588 | goto label_2;
| label_67:
0x000c3668 ldrd sb, r2, [sp, 0x2c] | __asm ("ldrd sb, r2, [var_2ch_2]");
0x000c366c ldr.w ip, [sp, 0x24] | ip = var_24h_2;
0x000c3670 ldrd r5, lr, [sp, 0x34] | __asm ("ldrd r5, lr, [var_34h_2]");
0x000c3674 ldr.w r0, [sb, 4] | r0 = *((sb + 4));
0x000c3678 b 0xc35c8 | goto label_0;
| label_65:
0x000c367a blx 0x6430 | fcn_00006430 ();
0x000c367e nop |
0x000c3680 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000c3682 movs r2, r0 | r2 = r0;
0x000c3684 lsls r4, r6, 8 | r4 = r6 << 8;
0x000c3686 movs r0, r0 |
0x000c3688 ldr r4, [r7] | r4 = *(r7);
0x000c368a movs r2, r0 | r2 = r0;
0x000c368c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c3690 mov sl, r2 | sl = r2;
0x000c3692 ldr.w r2, [pc, 0xb70] |
0x000c3696 sub sp, 0xd4 |
0x000c3698 mov r7, r0 | r7 = r0;
0x000c369a ldr.w r3, [pc, 0xb6c] | r3 = *(0xc420a);
0x000c369e add r2, pc | r2 = 0x1878a8;
0x000c36a0 ldr r4, [r0] | r4 = *(r0);
0x000c36a2 ldr r0, [sp, 0xf8] | r0 = var_f8h;
0x000c36a4 ldr r3, [r2, r3] |
0x000c36a6 ldr r3, [r3] | r3 = imp.atan;
0x000c36a8 str r3, [sp, 0xcc] | var_cch = r3;
0x000c36aa mov.w r3, 0 | r3 = 0;
0x000c36ae ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
| if (r3 != 0) {
0x000c36b0 cbnz r3, 0xc3710 | goto label_7;
| }
0x000c36b2 uxth r5, r1 | r5 = (int16_t) r1;
0x000c36b4 mov r8, r1 | r8 = r1;
| if (r5 != 0) {
0x000c36b6 cbnz r5, 0xc36fa | goto label_68;
| }
0x000c36b8 mov r3, r5 | r3 = r5;
0x000c36ba str r5, [sp, 0x74] | var_74h = r5;
| do {
0x000c36bc ands r6, r8, 0x10000 | r6 = r8 & 0x10000;
0x000c36c0 and sb, r8, 0x40000 | sb = r8 & 0x40000;
0x000c36c4 itt ne |
| if (r6 == r8) {
0x000c36c6 ldrne r6, [r0, r3, lsl 2] | offset_1 = r3 << 2;
| r6 = *((r0 + offset_1));
| }
| if (r6 != r8) {
0x000c36ca adds r3, 1 | r3++;
| }
0x000c36cc ands r2, r8, 0x20000 | r2 = r8 & 0x20000;
| if (r2 != r8) {
0x000c36d0 bne 0xc3736 | goto label_69;
| }
0x000c36d2 cmp.w sb, 0 |
| if (sb != 0) {
0x000c36d6 bne.w 0xc3a7a | goto label_70;
| }
0x000c36da mov r0, r7 | r0 = r7;
0x000c36dc bl 0x7b8fc | fcn_0007b8fc (r0);
| label_3:
0x000c36e0 movs r3, 0 | r3 = 0;
0x000c36e2 movs r0, 0 | r0 = 0;
0x000c36e4 mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000c36e8 str r3, [sp, 0x78] | var_78h = r3;
0x000c36ea str r3, [sp, 0x70] | var_70h = r3;
0x000c36ec mov.w r2, -1 | r2 = -1;
0x000c36f0 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000c36f4 strd r0, r1, [r7, 0x48] | __asm ("strd r0, r1, [r7, 0x48]");
0x000c36f8 b 0xc37aa | goto label_56;
| label_68:
0x000c36fa ldr r3, [r0] | r3 = *(r0);
0x000c36fc str r3, [sp, 0x74] | var_74h = r3;
0x000c36fe movs r3, 1 | r3 = 1;
0x000c3700 b 0xc36bc |
| } while (1);
| label_17:
0x000c3702 ldr.w r1, [pc, 0xb08] |
0x000c3706 movs r2, 0xc | r2 = 0xc;
0x000c3708 ldr r0, [sp, 0x8c] | r0 = var_8ch;
0x000c370a add r1, pc | r1 = 0x18791c;
0x000c370c bl 0x5b58c | fcn_0005b58c (r0);
| label_7:
0x000c3710 mov.w sl, 1 | sl = 1;
| label_4:
0x000c3714 ldr.w r2, [pc, 0xaf8] |
0x000c3718 ldr.w r3, [pc, 0xaec] | r3 = *(0xc4208);
0x000c371c add r2, pc | r2 = 0x187930;
0x000c371e ldr r3, [r2, r3] | r3 = imp.atan;
0x000c3720 ldr r2, [r3] | r2 = imp.atan;
0x000c3722 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000c3724 eors r2, r3 | r2 ^= r3;
0x000c3726 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c372a bne.w 0xc43f2 | goto label_71;
| }
0x000c372e mov r0, sl | r0 = sl;
0x000c3730 add sp, 0xd4 |
0x000c3732 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_69:
0x000c3736 ldr.w r2, [r0, r3, lsl 2] | offset_2 = r3 << 2;
| r2 = *((r0 + offset_2));
0x000c373a lsls r3, r3, 2 | r3 <<= 2;
0x000c373c str r2, [sp, 0x70] | var_70h = r2;
0x000c373e cmp.w sb, 0 |
| if (sb != 0) {
0x000c3742 bne.w 0xc3a64 | goto label_72;
| }
0x000c3746 mov r0, r7 | r0 = r7;
0x000c3748 bl 0x7b8fc | fcn_0007b8fc (r0);
0x000c374c ldr r2, [sp, 0x70] | r2 = var_70h;
0x000c374e cmp r2, 0 |
| if (r2 == 0) {
0x000c3750 beq 0xc36e0 | goto label_3;
| }
0x000c3752 str.w sb, [sp, 0x78] | __asm ("str.w sb, [var_78h]");
| label_8:
0x000c3756 ldr r3, [sp, 0x70] | r3 = var_70h;
0x000c3758 ldr.w fp, [pc, 0xab8] |
0x000c375c ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c375e add fp, pc | fp = 0x187976;
0x000c3760 and r3, r3, 0x3f | r3 &= 0x3f;
0x000c3764 add r3, fp | r3 += fp;
0x000c3766 ldrb.w r3, [r3, 0x258] | r3 = *((r3 + 0x258));
0x000c376a cmp r3, 3 |
| if (r3 == 3) {
0x000c376c beq.w 0xc417a | goto label_73;
| }
| label_47:
0x000c3770 cmp r3, 1 |
| if (r3 == 1) {
0x000c3772 beq.w 0xc42e6 | goto label_74;
| }
| label_9:
0x000c3776 movs r0, 0 | r0 = 0;
0x000c3778 mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000c377a asrs r0, r0 | r0 >>= r0;
| label_10:
0x000c377c ldr r3, [sp, 0x78] | r3 = var_78h;
0x000c377e strd r0, r1, [r7, 0x48] | __asm ("strd r0, r1, [r7, 0x48]");
| if (r3 != 0) {
0x000c3782 cbz r3, 0xc37a2 |
0x000c3784 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c3786 ldr.w fp, [pc, 0xa90] |
0x000c378a and r3, r3, 0x3f | r3 &= 0x3f;
0x000c378e add fp, pc | fp = 0x1879ac;
0x000c3790 add r3, fp | r3 += fp;
0x000c3792 ldrb.w r3, [r3, 0x258] | r3 = *((r3 + 0x258));
0x000c3794 adds r2, 0x58 | r2 += 0x58;
0x000c3796 cmp r3, 3 |
| if (r3 == 3) {
0x000c3798 beq.w 0xc4198 | goto label_75;
| }
| label_48:
0x000c379c cmp r3, 1 |
| if (r3 == 1) {
0x000c379e beq.w 0xc42d8 | goto label_76;
| }
| }
0x000c37a2 mov.w r2, -1 | r2 = -1;
0x000c37a6 mvn r3, 0x80000000 | r3 = ~0x80000000;
| label_56:
0x000c37aa strd r2, r3, [r7, 0x50] | __asm ("strd r2, r3, [r7, 0x50]");
0x000c37ae cmp.w sl, 0 |
| if (sl == 0) {
0x000c37b2 beq.w 0xc4114 | goto label_77;
| }
0x000c37b6 ldrb.w r3, [sl] | r3 = *(sl);
0x000c37ba sub.w r3, r3, 0x44 | r3 -= 0x44;
0x000c37be clz r3, r3 | r3 &= r3;
0x000c37c2 lsrs r3, r3, 5 | r3 >>= 5;
| label_39:
0x000c37c4 strb.w r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x000c37c8 movw r3, 0xfffe | r3 = 0xfffe;
0x000c37cc tst.w r8, r3 |
0x000c37d0 strh.w r8, [r7, 4] | *((r7 + 4)) = r8;
| if ((r8 & r3) != 0) {
0x000c37d4 bne 0xc387a | goto label_78;
| }
| label_54:
0x000c37d6 cmp r5, 0 |
| if (r5 != 0) {
0x000c37d8 bne.w 0xc40d4 | goto label_79;
| }
0x000c37dc ldr r2, [sp, 0x70] | r2 = var_70h;
0x000c37de ldr r0, [sp, 0x78] | r0 = var_78h;
0x000c37e0 ldr.w r1, [r4, 0xe0] | r1 = *((r4 + 0xe0));
0x000c37e4 ldrb.w r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x000c37e8 orrs r2, r0 | r2 |= r0;
| if (r2 == r0) {
0x000c37ea beq.w 0xc4120 | goto label_80;
| }
0x000c37ee ldrd r8, sb, [r7, 0x48] | __asm ("ldrd r8, sb, [r7, 0x48]");
0x000c37f2 ldrd sl, fp, [r7, 0x50] | __asm ("ldrd sl, fp, [r7, 0x50]");
0x000c37f6 cmp r3, 0 |
| if (r3 == 0) {
0x000c37f8 beq.w 0xc41c6 | goto label_81;
| }
0x000c37fc ldr.w r3, [pc, 0xa1c] |
0x000c3800 add r3, pc | r3 = 0x187a20;
| label_50:
0x000c3802 ldr.w r0, [pc, 0xa1c] |
0x000c3806 mov r2, r8 | r2 = r8;
0x000c3808 str r3, [sp, 8] | var_8h = r3;
0x000c380a mov r3, sb | r3 = sb;
0x000c380c strd sl, fp, [sp] | __asm ("strd sl, fp, [sp]");
0x000c3810 add r0, pc | r0 = 0x187a36;
0x000c3812 bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000c3816 mov r5, r0 | r5 = r0;
| label_41:
0x000c3818 cmp r5, 0 |
| if (r5 == 0) {
0x000c381a beq.w 0xc4154 | goto label_82;
| }
0x000c381e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000c3820 add.w r2, r7, 0xc | r2 = r7 + 0xc;
0x000c3824 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000c3826 mov r1, r5 | r1 = r5;
0x000c3828 adds r3, 1 | r3++;
0x000c382a str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x000c382c movs r3, 0 | r3 = 0;
0x000c382e str r3, [sp, 8] | var_8h = r3;
0x000c3830 str r3, [sp] | *(sp) = r3;
0x000c3832 movs r3, 0x81 | r3 = 0x81;
0x000c3834 str r2, [sp, 4] | var_4h = r2;
0x000c3836 mov.w r2, -1 | r2 = -1;
0x000c383a bl 0xa4188 | fcn_000a4188 (r0, r1, r2, r3, r4, r5, r6);
0x000c383e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000c3840 mov sl, r0 | sl = r0;
0x000c3842 mov r0, r5 | r0 = r5;
0x000c3844 subs r3, 1 | r3--;
0x000c3846 str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x000c3848 bl 0x26dbc | fcn_00026dbc (r0);
0x000c384c cmp.w sl, 0 |
| if (sl != 0) {
0x000c3850 bne.w 0xc3714 | goto label_4;
| }
| label_37:
0x000c3854 ldr.w r2, [pc, 0x9cc] |
0x000c3858 ldr.w r3, [pc, 0x9ac] | r3 = *(0xc4208);
0x000c385c add r2, pc | r2 = 0x187a84;
0x000c385e ldr r3, [r2, r3] | r3 = imp.atan;
0x000c3860 ldr r2, [r3] | r2 = imp.atan;
0x000c3862 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000c3864 eors r2, r3 | r2 ^= r3;
0x000c3866 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000c386a bne.w 0xc43f2 | goto label_71;
| }
0x000c386e mov r0, r7 | r0 = r7;
0x000c3870 add sp, 0xd4 |
0x000c3872 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000c3876 b.w 0xb6234 | void (*0xb6234)() ();
| label_78:
0x000c387a ldr r3, [sp, 0x74] | r3 = var_74h;
0x000c387c movw r2, 0x202 | r2 = 0x202;
0x000c3880 sub.w r8, r5, 2 | r8 = r5 - 2;
0x000c3884 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000c3886 bics r2, r3 | __asm ("bics r2, r3");
| if (r2 == r3) {
0x000c3888 beq.w 0xc415c | goto label_83;
| }
| label_43:
0x000c388c lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 < r3) {
0x000c388e bmi.w 0xc413a | goto label_84;
| }
0x000c3892 ldr r0, [sp, 0x74] | r0 = var_74h;
0x000c3894 movs r1, 1 | r1 = 1;
0x000c3896 bl 0x3da00 | fcn_0003da00 (r0, r1);
0x000c389a str r0, [sp, 0x80] | s1 = r0;
| label_44:
0x000c389c ldr r3, [sp, 0x80] | r3 = s1;
0x000c389e cmp r3, 0 |
| if (r3 == 0) {
0x000c38a0 beq.w 0xc4136 | goto label_85;
| }
| label_42:
0x000c38a4 movs r3, 0 | r3 = 0;
0x000c38a6 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
| if (r6 != 0) {
0x000c38a8 cbz r6, 0xc38b4 |
0x000c38aa mov r0, r6 | r0 = r6;
0x000c38ac bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000c38b0 mov r6, r0 | r6 = r0;
0x000c38b2 str r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
| }
0x000c38b4 ldrb.w r3, [r4, 0xec] | r3 = *((r4 + 0xec));
0x000c38b8 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000c38ba ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x000c38bc ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x000c38be strd r3, r2, [sp, 0xb4] | __asm ("strd r3, r2, [var_b8h]");
0x000c38c2 add.w r2, r4, 8 | r2 = r4 + 8;
0x000c38c6 str r2, [sp, 0x8c] | var_8ch = r2;
0x000c38c8 movs r3, 0 | r3 = 0;
0x000c38ca ldr r2, [sp, 0x80] | r2 = s1;
0x000c38cc str r6, [sp, 0xac] | var_ach = r6;
0x000c38ce str.w r8, [sp, 0xbc] | __asm ("str.w r8, [var_bch]");
0x000c38d2 str r0, [sp, 0xa8] | x = r0;
0x000c38d4 str r1, [sp, 0xb0] | var_b0h = r1;
0x000c38d6 strd r3, r3, [sp, 0xc0] | __asm ("strd r3, r3, [var_c0h]");
0x000c38da str r3, [sp, 0xc8] | var_c8h = r3;
0x000c38dc cmp r2, 0 |
| if (r2 == 0) {
0x000c38de beq.w 0xc4258 | goto label_86;
| }
0x000c38e2 ldr.w sb, [sp, 0x80] | sb = s1;
0x000c38e6 mov r8, r3 | r8 = r3;
0x000c38e8 ldr.w r6, [pc, 0x93c] |
0x000c38ec str r3, [sp, 0x4c] | var_4ch = r3;
0x000c38ee mov r0, sb | r0 = sb;
0x000c38f0 add r6, pc | r6 = 0x187b1c;
0x000c38f2 str r6, [sp, 0x44] | var_44h_2 = r6;
0x000c38f4 blx 0x65dc | strcmp (r0, r1);
0x000c38f8 ldr.w r2, [pc, 0x930] |
0x000c38fc add.w r3, r6, 0x3a8 | r3 = r6 + 0x3a8;
0x000c3900 str r0, [sp, 0x10] | var_10h_2 = r0;
0x000c3902 strd r4, r5, [sp, 0x3c] | __asm ("strd r4, r5, [var_3ch]");
0x000c3906 add r2, pc | r2 = 0x187b36;
0x000c3908 ldr r5, [sp, 0x10] | r5 = var_10h_2;
0x000c390a str r2, [sp, 0x84] | var_84h = r2;
0x000c390c ldr.w r2, [pc, 0x920] |
0x000c3910 str r3, [sp, 0x48] | var_48h = r3;
0x000c3912 movs r3, 0 | r3 = 0;
0x000c3914 cmp r5, r3 |
0x000c3916 str.w sb, [sp, 0x14] | __asm ("str.w sb, [var_14h]");
0x000c391a add r2, pc | r2 = 0x187b4e;
0x000c391c str.w r8, [sp, 0x7c] | __asm ("str.w r8, [var_7ch]");
0x000c3920 str r2, [sp, 0x88] | var_88h = r2;
0x000c3922 ldr.w r2, [pc, 0x910] |
0x000c3926 str r7, [sp, 0x18] | var_18h = r7;
0x000c3928 str r3, [sp, 0xc0] | var_c0h = r3;
0x000c392a add r2, pc | r2 = 0x187b64;
0x000c392c str r2, [sp, 0x68] | var_68h = r2;
0x000c392e mov.w r2, 1 | r2 = 1;
0x000c3932 str r2, [sp, 0x5c] | var_5ch = r2;
| if (r5 <= r3) {
0x000c3934 ble 0xc3a06 | goto label_87;
| }
| do {
0x000c3936 ldr r3, [sp, 0x14] | r3 = var_14h;
| label_6:
0x000c3938 mov r4, r3 | r4 = r3;
0x000c393a ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x000c393e sub.w r1, r2, 9 | r1 = r2 - 9;
0x000c3942 cmp r2, 0x20 |
0x000c3944 it ne |
| if (r2 != 0x20) {
0x000c3946 cmpne r1, 4 | __asm ("cmpne r1, 4");
| }
| if (r2 < 0x20) {
0x000c3948 bls 0xc3a0c | goto label_88;
| }
| label_5:
0x000c394a cmp r5, 0 |
| if (r5 == 0) {
0x000c394c beq 0xc3a10 | goto label_89;
| }
0x000c394e ldr r3, [sp, 0x44] | r3 = var_44h_2;
0x000c3950 ldr.w sl, [sp, 0x48] | sl = var_48h;
0x000c3954 add.w r6, r3, 0x388 | r6 = r3 + 0x388;
| label_12:
0x000c3958 ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000c395a cmp r3, 0 |
| if (r3 != 0) {
0x000c395c bne.w 0xc3a9c | goto label_25;
| }
0x000c3960 ldrb r7, [r6, 4] | r7 = *((r6 + 4));
0x000c3962 cmp r7, r5 |
| if (r7 > r5) {
0x000c3964 bgt.w 0xc3a9c | goto label_25;
| }
0x000c3968 ldr r1, [r6] | r1 = *(r6);
0x000c396a mov r2, r7 | r2 = r7;
0x000c396c mov r0, r4 | r0 = r4;
0x000c396e blx 0x66a8 | r0 = loc_imp_gmon_start_ ();
0x000c3972 mov r3, r0 | r3 = r0;
0x000c3974 cmp r0, 0 |
| if (r0 != 0) {
0x000c3976 bne.w 0xc3a9c | goto label_25;
| }
0x000c397a ldrb.w sb, [r6, 6] | sb = *((r6 + 6));
0x000c397e cmp.w sb, 1 |
| if (sb == 1) {
0x000c3982 beq.w 0xc3d86 | goto label_90;
| }
| label_21:
0x000c3986 movs r3, 0xa | r3 = 0xa;
| label_23:
0x000c3988 ldrb r2, [r4, r7] | r2 = *((r4 + r7));
0x000c398a sub.w r0, r2, 9 | r0 = r2 - 9;
0x000c398e and r1, r2, 0xfd | r1 = r2 & 0xfd;
0x000c3992 cmp r1, 0x20 |
0x000c3994 it ne |
| if (r1 != 0x20) {
0x000c3996 cmpne r0, 4 | __asm ("cmpne r0, 4");
| }
| if (r1 > 0x20) {
0x000c3998 bhi 0xc3a90 | goto label_91;
| }
| label_11:
0x000c399a movs r0, 0x30 | r0 = 0x30;
0x000c399c movs r1, 0 | r1 = 0;
0x000c399e str r3, [sp, 0x1c] | var_1ch = r3;
0x000c39a0 bl 0x5ac48 | r0 = fcn_0005ac48 (r0, r1);
0x000c39a4 mov r5, r0 | r5 = r0;
0x000c39a6 cmp r0, 0 |
| if (r0 == 0) {
0x000c39a8 beq.w 0xc41be | goto label_92;
| }
0x000c39ac ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c39ae mov r6, sb | r6 = sb;
0x000c39b0 cmp r6, 5 |
0x000c39b2 str.w sb, [r0] | __asm ("str.w sb, [r0]");
0x000c39b6 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000c39b8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c39ba sub.w r4, r4, r3 | r4 -= r3;
0x000c39be add r4, r7 | r4 += r7;
| if (r6 != 5) {
0x000c39c0 beq 0xc39ca |
| label_30:
0x000c39c2 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000c39c4 cmp r3, 0 |
| if (r3 == 0) {
0x000c39c6 beq.w 0xc4072 | goto label_93;
| }
| }
| label_31:
0x000c39ca ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000c39cc cmp r3, 0 |
| if (r3 == 0) {
0x000c39ce beq.w 0xc3e12 | goto label_94;
| }
0x000c39d2 cmp.w r8, 0 |
| if (r8 != 0) {
0x000c39d6 bne.w 0xc411c | goto label_95;
| }
0x000c39da ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c39dc str.w r8, [sp, 0x5c] | __asm ("str.w r8, [var_5ch]");
0x000c39e0 cmp r3, 0 |
| if (r3 == 0) {
0x000c39e2 beq.w 0xc3e7a | goto label_96;
| }
| label_28:
0x000c39e6 str.w r5, [r8, 0x10] | __asm ("str.w r5, [r8, 0x10]");
0x000c39ea str.w r8, [r5, 8] | __asm ("str.w r8, [r5, 8]");
0x000c39ee mov r8, r5 | r8 = r5;
| label_29:
0x000c39f0 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000c39f2 subs r3, r3, r4 | r3 -= r4;
0x000c39f4 str r3, [sp, 0x10] | var_10h_2 = r3;
0x000c39f6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c39f8 ldr r5, [sp, 0x10] | r5 = var_10h_2;
0x000c39fa add r3, r4 | r3 += r4;
0x000c39fc str r3, [sp, 0x14] | var_14h = r3;
0x000c39fe movs r3, 0 | r3 = 0;
0x000c3a00 cmp r5, r3 |
0x000c3a02 str r3, [sp, 0xc0] | var_c0h = r3;
0x000c3a04 bgt 0xc3936 |
| } while (r5 > r3);
| label_87:
0x000c3a06 ldrd r5, r4, [sp, 0x10] | __asm ("ldrd r5, r4, [var_10h_2]");
0x000c3a0a b 0xc394a | goto label_5;
| label_88:
0x000c3a0c subs r5, 1 | r5--;
| if (r5 != 1) {
0x000c3a0e bne 0xc3938 | goto label_6;
| }
| label_89:
0x000c3a10 ldrd r4, r5, [sp, 0x3c] | __asm ("ldrd r4, r5, [var_3ch]");
0x000c3a14 ldr r7, [sp, 0x18] | r7 = var_18h;
| label_14:
0x000c3a16 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c3a18 cmp r3, 0 |
| if (r3 == 0) {
0x000c3a1a beq.w 0xc4318 | goto label_97;
| }
0x000c3a1e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000c3a20 cmp r3, 0 |
| if (r3 != 0) {
0x000c3a22 bne.w 0xc41d4 | goto label_98;
| }
0x000c3a26 ldr r3, [sp, 0x7c] | r3 = var_7ch;
| if (r3 == 0) {
0x000c3a28 cbz r3, 0xc3a3e | goto label_99;
| }
0x000c3a2a ldr r3, [sp, 0x7c] | r3 = var_7ch;
| do {
0x000c3a2c mov r2, r3 | r2 = r3;
0x000c3a2e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000c3a30 cmp r3, 0 |
0x000c3a32 bne 0xc3a2c |
| } while (r3 != 0);
0x000c3a34 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c3a36 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x000c3a38 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000c3a3a ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000c3a3c str r3, [sp, 0x4c] | var_4ch = r3;
| label_99:
0x000c3a3e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c3a40 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x000c3a42 ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x000c3a44 cmp r3, 0 |
| if (r3 == 0) {
0x000c3a46 beq.w 0xc41ec | goto label_100;
| }
| label_60:
0x000c3a4a ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000c3a4c bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c3a50 movs r3, 0 | r3 = 0;
0x000c3a52 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| label_18:
0x000c3a54 ldr.w r1, [pc, 0x7e0] |
0x000c3a58 ldr r2, [sp, 0x80] | r2 = s1;
0x000c3a5a ldr r0, [sp, 0x8c] | r0 = var_8ch;
0x000c3a5c add r1, pc | r1 = 0x187c98;
0x000c3a5e bl 0x5b58c | fcn_0005b58c (r0);
0x000c3a62 b 0xc3710 | goto label_7;
| label_72:
0x000c3a64 add r0, r3 | r0 += r3;
0x000c3a66 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000c3a68 mov r0, r7 | r0 = r7;
0x000c3a6a str r3, [sp, 0x78] | var_78h = r3;
0x000c3a6c bl 0x7b8fc | fcn_0007b8fc (r0);
0x000c3a70 ldr r3, [sp, 0x70] | r3 = var_70h;
0x000c3a72 cmp r3, 0 |
| if (r3 != 0) {
0x000c3a74 bne.w 0xc3756 | goto label_8;
| }
0x000c3a78 b 0xc3776 | goto label_9;
| label_70:
0x000c3a7a ldr.w r3, [r0, r3, lsl 2] | offset_3 = r3 << 2;
| r3 = *((r0 + offset_3));
0x000c3a7e mov r0, r7 | r0 = r7;
0x000c3a80 str r2, [sp, 0x70] | var_70h = r2;
0x000c3a82 str r3, [sp, 0x78] | var_78h = r3;
0x000c3a84 bl 0x7b8fc | fcn_0007b8fc (r0);
0x000c3a88 movs r0, 0 | r0 = 0;
0x000c3a8a mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000c3a8e b 0xc377c | goto label_10;
| label_91:
0x000c3a90 cmp r2, 0x22 |
| if (r2 > 0x22) {
0x000c3a92 bhi.w 0xc3dfc | goto label_101;
| }
0x000c3a96 cmp r2, 0 |
| if (r2 == 0) {
0x000c3a98 beq.w 0xc399a | goto label_11;
| }
| label_25:
0x000c3a9c adds r6, 8 | r6 += 8;
0x000c3a9e cmp sl, r6 |
| if (sl != r6) {
0x000c3aa0 bne.w 0xc3958 | goto label_12;
| }
0x000c3aa4 ldrb r3, [r4] | r3 = *(r4);
0x000c3aa6 cmp r3, 0x22 |
| if (r3 == 0x22) {
0x000c3aa8 beq 0xc3ba0 | goto label_102;
| }
0x000c3aaa ldrd sl, r3, [sp, 0xb8] | __asm ("ldrd sl, r3, [var_bch]");
0x000c3aae cmp.w sl, 0 |
0x000c3ab2 str r3, [sp, 0x1c] | var_1ch = r3;
| if (sl <= 0) {
0x000c3ab4 ble 0xc3b8c | goto label_103;
| }
0x000c3ab6 ldr r6, [sp, 0xb0] | r6 = var_b0h;
0x000c3ab8 mov.w sb, 0 | sb = 0;
0x000c3abc subs r6, 4 | r6 -= 4;
0x000c3abe b 0xc3ac8 |
| while (r0 >= r5) {
| label_13:
0x000c3ac0 add.w sb, sb, 1 | sb++;
0x000c3ac4 cmp sb, sl |
| if (sb == sl) {
0x000c3ac6 beq 0xc3b8c | goto label_103;
| }
0x000c3ac8 ldr r7, [r6, 4]! | r7 = *((r6 += 4));
0x000c3acc mov r0, r7 | r0 = r7;
0x000c3ace blx 0x65dc | r0 = strcmp (r0, r1);
0x000c3ad2 cmp r0, r5 |
0x000c3ad4 mov fp, r0 |
0x000c3ad6 bge 0xc3ac0 |
| }
0x000c3ad8 ldrb r3, [r4, r0] | r3 = *((r4 + r0));
0x000c3ada cmp r3, 0x3a |
| if (r3 != 0x3a) {
0x000c3adc bne 0xc3ac0 | goto label_13;
| }
0x000c3ade mov r0, r7 | r0 = r7;
0x000c3ae0 mov r2, fp | r2 = fp;
0x000c3ae2 mov r1, r4 | r1 = r4;
0x000c3ae4 bl 0x27334 | r0 = fcn_00027334 (r0, r1, r2);
0x000c3ae8 cmp r0, 0 |
| if (r0 != 0) {
0x000c3aea bne 0xc3ac0 | goto label_13;
| }
0x000c3aec ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c3aee str.w sb, [sp, 0x1c] | __asm ("str.w sb, [var_1ch]");
0x000c3af2 ldr r0, [sp, 0xa8] | r0 = x;
0x000c3af4 subs r4, r4, r3 | r4 -= r3;
0x000c3af6 add r4, fp | r4 += fp;
0x000c3af8 add.w fp, r4, 1 |
0x000c3afc ldr r6, [r0] | r6 = *(r0);
0x000c3afe add.w sb, r3, fp | sb = r3 + fp;
0x000c3b02 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000c3b04 sub.w r7, r3, fp | r7 = r3 - fp;
0x000c3b08 cmp r7, 0 |
| if (r7 <= 0) {
0x000c3b0a ble 0xc3b9c | goto label_104;
| }
| label_15:
0x000c3b0c add.w r3, sb, -1 | r3 = sb + -1;
0x000c3b10 movs r4, 0 | r4 = 0;
0x000c3b12 b 0xc3b1a |
| while (r2 != 0x22) {
0x000c3b14 adds r4, 1 | r4++;
0x000c3b16 cmp r4, r7 |
| if (r4 == r7) {
0x000c3b18 beq 0xc3b22 | goto label_16;
| }
0x000c3b1a ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000c3b1e cmp r2, 0x22 |
0x000c3b20 bne 0xc3b14 |
| }
| label_16:
0x000c3b22 add r3, sp, 0x90 | r3 += var_90h;
0x000c3b24 ldr r1, [sp, 0xac] | r1 = var_ach;
0x000c3b26 str r3, [sp] | *(sp) = r3;
0x000c3b28 mov r2, sb | r2 = sb;
0x000c3b2a mov r3, r4 | r3 = r4;
0x000c3b2c bl 0x245f0 | r0 = fcn_000245f0 (r0, r1, r2, r3, r4);
0x000c3b30 cmp r0, 0 |
| if (r0 != 0) {
0x000c3b32 bne.w 0xc3d7c | goto label_105;
| }
0x000c3b36 ldr.w sl, [sp, 0x90] | sl = var_90h;
0x000c3b3a add r1, sp, 0xa0 | r1 += var_a0h;
0x000c3b3c add.w ip, sp, 0xa4 |
0x000c3b40 str r1, [sp] | *(sp) = r1;
0x000c3b42 strd r0, r0, [sp, 0x98] | __asm ("strd r0, r0, [var_9ch]");
0x000c3b46 add r3, sp, 0x9c | r3 += var_9ch;
0x000c3b48 strd r0, r0, [sp, 0xa0] | __asm ("strd r0, r0, [var_a0h]");
0x000c3b4c add r2, sp, 0x98 | r2 += var_98h;
0x000c3b4e str.w ip, [sp, 4] | __asm ("str.w ip, [var_4h]");
0x000c3b52 add r1, sp, 0x94 | r1 += var_94h;
0x000c3b54 ldr r5, [r6, 0x14] | r5 = *((r6 + 0x14));
0x000c3b56 mov r0, sl | r0 = sl;
0x000c3b58 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000c3b5a cmp r0, 0 |
| if (r0 == 0) {
0x000c3b5c beq.w 0xc3eca | goto label_106;
| }
0x000c3b60 subs r3, r4, 0 | r3 = r4 - 0;
0x000c3b62 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000c3b64 it ne |
| if (r3 == r4) {
0x000c3b66 movne r3, 1 | r3 = 1;
| }
0x000c3b68 cmp r0, 0x65 |
0x000c3b6a it ne |
| if (r0 == 0x65) {
0x000c3b6c movne r3, 0 | r3 = 0;
| }
0x000c3b6e cmp r3, 0 |
| if (r3 != 0) {
0x000c3b70 bne.w 0xc3ec2 | goto label_107;
| }
0x000c3b74 mov fp, sl |
0x000c3b76 mov sl, r0 | sl = r0;
0x000c3b78 mov r0, fp | r0 = fp;
0x000c3b7a ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c3b7c ldr r5, [sp, 0x40] | r5 = var_40h;
0x000c3b7e ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c3b80 blx r2 | uint32_t (*r2)(uint32_t) (r0);
| label_20:
0x000c3b82 cmp.w sl, 0x65 |
| if (sl == 0x65) {
0x000c3b86 beq.w 0xc3a16 | goto label_14;
| }
0x000c3b8a b 0xc3c58 | goto label_24;
| label_103:
0x000c3b8c ldrd r7, sb, [sp, 0x10] | __asm ("ldrd r7, sb, [var_10h_2]");
0x000c3b90 mov.w fp, 0 |
0x000c3b94 ldr r0, [sp, 0xa8] | r0 = x;
0x000c3b96 cmp r7, 0 |
0x000c3b98 ldr r6, [r0] | r6 = *(r0);
| if (r7 > 0) {
0x000c3b9a bgt 0xc3b0c | goto label_15;
| }
| label_104:
0x000c3b9c movs r4, 0 | r4 = 0;
0x000c3b9e b 0xc3b22 | goto label_16;
| label_102:
0x000c3ba0 cmp r5, 1 |
| if (r5 <= 1) {
0x000c3ba2 ble.w 0xc4170 | goto label_108;
| }
0x000c3ba6 mov r3, r4 | r3 = r4;
0x000c3ba8 movs r6, 1 | r6 = 1;
0x000c3baa b 0xc3bb4 |
| while (r2 != 0x22) {
0x000c3bac adds r6, 1 | r6++;
0x000c3bae cmp r6, r5 |
| if (r6 == r5) {
0x000c3bb0 beq.w 0xc3df4 | goto label_109;
| }
0x000c3bb4 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000c3bb8 cmp r2, 0x22 |
0x000c3bba bne 0xc3bac |
| }
| label_45:
0x000c3bbc cmp r6, r5 |
| if (r6 == r5) {
0x000c3bbe beq.w 0xc3df4 | goto label_109;
| }
0x000c3bc2 ldr r0, [sp, 0xa8] | r0 = x;
0x000c3bc4 subs r3, r6, 1 | r3 = r6 - 1;
0x000c3bc6 mov r7, r3 | r7 = r3;
0x000c3bc8 str r3, [sp, 0x60] | var_60h = r3;
0x000c3bca add r3, sp, 0x90 | r3 += var_90h;
0x000c3bcc adds r2, r4, 1 | r2 = r4 + 1;
0x000c3bce ldr.w sb, [r0] | sb = *(r0);
0x000c3bd2 movs r5, 0 | r5 = 0;
0x000c3bd4 str r3, [sp] | *(sp) = r3;
0x000c3bd6 mov r3, r7 | r3 = r7;
0x000c3bd8 ldr r1, [sp, 0xac] | r1 = var_ach;
0x000c3bda str r2, [sp, 0x6c] | var_6ch = r2;
0x000c3bdc str r5, [sp, 0x90] | var_90h = r5;
0x000c3bde bl 0x245f0 | r0 = fcn_000245f0 (r0, r1, r2, r3, r4);
0x000c3be2 mov r7, r0 | r7 = r0;
0x000c3be4 str r0, [sp, 0x1c] | var_1ch = r0;
0x000c3be6 cmp r0, 0 |
| if (r0 != 0) {
0x000c3be8 bne.w 0xc3fc0 | goto label_110;
| }
0x000c3bec ldr.w r2, [pc, 0x64c] |
0x000c3bf0 add r3, sp, 0x9c | r3 += var_9ch;
0x000c3bf2 str r3, [sp, 0x24] | var_24h = r3;
0x000c3bf4 mov sl, r0 | sl = r0;
0x000c3bf6 add r3, sp, 0x98 | r3 += var_98h;
0x000c3bf8 add.w ip, sp, 0xa4 |
0x000c3bfc add r2, pc | r2 = 0x187e3c;
0x000c3bfe add r1, sp, 0xa0 | r1 += var_a0h;
0x000c3c00 str r3, [sp, 0x28] | var_28h = r3;
0x000c3c02 add r3, sp, 0x94 | r3 += var_94h;
0x000c3c04 str r2, [sp, 0x64] | var_64h = r2;
0x000c3c06 str r0, [sp, 0x38] | var_38h = r0;
0x000c3c08 str r0, [sp, 0x58] | var_58h = r0;
0x000c3c0a str r3, [sp, 0x20] | var_20h_2 = r3;
0x000c3c0c strd r8, r6, [sp, 0x50] | __asm ("strd r8, r6, [var_50h]");
0x000c3c10 str r4, [sp, 0x34] | var_34h = r4;
0x000c3c12 strd r1, ip, [sp, 0x2c] | __asm ("strd r1, ip, [var_30h]");
| label_19:
0x000c3c16 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000c3c18 ldr r6, [sp, 0x90] | r6 = var_90h;
0x000c3c1a ldr r1, [sp, 0x20] | r1 = var_20h_2;
0x000c3c1c str r3, [sp, 4] | var_4h = r3;
0x000c3c1e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000c3c20 mov r0, r6 | r0 = r6;
0x000c3c22 strd r7, r7, [sp, 0x98] | __asm ("strd r7, r7, [var_9ch]");
0x000c3c26 strd r7, r7, [sp, 0xa0] | __asm ("strd r7, r7, [var_a0h]");
0x000c3c2a str r3, [sp] | *(sp) = r3;
0x000c3c2c ldrd r3, r2, [sp, 0x24] | __asm ("ldrd r3, r2, [var_24h]");
0x000c3c30 ldr.w r4, [sb, 0x14] | r4 = *((sb + 0x14));
0x000c3c34 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000c3c36 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000c3c38 cbz r0, 0xc3c86 | goto label_111;
| }
0x000c3c3a mov fp, r6 |
0x000c3c3c ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000c3c40 mov r0, fp | r0 = fp;
0x000c3c42 ldr.w r8, [sp, 0x50] | r8 = var_50h;
0x000c3c46 ldr r4, [sp, 0x34] | r4 = var_34h;
0x000c3c48 ldr r6, [sp, 0x54] | r6 = var_54h;
0x000c3c4a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000c3c4c cmp r5, 0x65 |
0x000c3c4e str r7, [sp, 0x90] | var_90h = r7;
| if (r5 == 0x65) {
0x000c3c50 beq.w 0xc3fd6 | goto label_112;
| }
| label_32:
0x000c3c54 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c3c56 mov sl, r5 | sl = r5;
| label_24:
0x000c3c58 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000c3c5a movs r6, 0 | r6 = 0;
0x000c3c5c bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c3c60 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x000c3c62 bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c3c66 str r6, [r7, 0x10] | *((r7 + 0x10)) = r6;
| label_53:
0x000c3c68 mov r0, r6 | r0 = r6;
0x000c3c6a bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c3c6e cmp.w sl, 0x12 |
0x000c3c70 lsrs r2, r2, 0x1c | r2 >>= 0x1c;
0x000c3c72 mov.w r3, 0 | r3 = 0;
0x000c3c76 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| if (r2 == r2) {
0x000c3c78 beq.w 0xc3702 | goto label_17;
| }
0x000c3c7c cmp.w sl, 1 |
| if (sl != 1) {
0x000c3c80 bne.w 0xc3714 | goto label_4;
| }
0x000c3c84 b 0xc3a54 | goto label_18;
| label_111:
0x000c3c86 ldr r3, [sp, 0x68] | r3 = var_68h;
0x000c3c88 ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000c3c8c cmp r3, 0 |
| if (r3 != 0) {
0x000c3c8e bne.w 0xc3e06 | goto label_113;
| }
0x000c3c92 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c3c96 cmp r0, 0 |
| if (r0 != 0) {
0x000c3c98 bne.w 0xc3eb2 | goto label_114;
| }
0x000c3c9c bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c3ca0 cmp r0, 0 |
| if (r0 != 0) {
0x000c3ca2 bne.w 0xc3eb2 | goto label_114;
| }
| label_26:
0x000c3ca6 lsl.w r6, sl, 1 | r6 = sl << 1;
0x000c3caa ldr r0, [sp, 0x58] | r0 = var_58h;
0x000c3cac movs r3, 0 | r3 = 0;
0x000c3cae add.w r4, r6, sl | r4 = r6 + sl;
0x000c3cb2 lsls r4, r4, 3 | r4 <<= 3;
0x000c3cb4 add.w r2, r4, 0x90 | r2 = r4 + 0x90;
0x000c3cb8 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000c3cbc mov fp, r0 |
0x000c3cbe cmp r0, 0 |
| if (r0 == 0) {
0x000c3cc0 beq.w 0xc41b6 | goto label_115;
| }
0x000c3cc4 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000c3cc6 ldr.w r8, [sp, 0x98] | r8 = var_98h;
0x000c3cca ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000c3cce cmp r3, 0 |
| if (r3 != 0) {
0x000c3cd0 bne.w 0xc3e0c | goto label_116;
| }
0x000c3cd4 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c3cd8 cmp r0, 0 |
| if (r0 != 0) {
0x000c3cda bne.w 0xc3e80 | goto label_117;
| }
0x000c3cde bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c3ce2 cmp r0, 0 |
| if (r0 != 0) {
0x000c3ce4 bne.w 0xc3e80 | goto label_117;
| }
| label_27:
0x000c3ce8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c3cea ldr r0, [sp, 0x38] | r0 = var_38h;
0x000c3cec add.w r2, r8, r3 | r2 = r8 + r3;
0x000c3cf0 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000c3cf2 bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000c3cf6 mov r8, r0 | r8 = r0;
0x000c3cf8 cmp r0, 0 |
| if (r0 == 0) {
0x000c3cfa beq.w 0xc3e80 | goto label_117;
| }
0x000c3cfe adds r4, 0x78 | r4 += 0x78;
0x000c3d00 str.w r7, [fp, r4] | __asm ("str.w r7, [fp, r4]");
0x000c3d04 add r4, fp | r4 += fp;
0x000c3d06 str r7, [r4, 4] | *((r4 + 4)) = r7;
0x000c3d08 str r7, [r4, 8] | *((r4 + 8)) = r7;
0x000c3d0a str r7, [r4, 0xc] | *((r4 + 0xc)) = r7;
0x000c3d0c str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
0x000c3d0e str r7, [r4, 0x14] | *((r4 + 0x14)) = r7;
0x000c3d10 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000c3d12 ldrd r1, r2, [sp, 0x94] | __asm ("ldrd r1, r2, [var_98h]");
0x000c3d16 add r0, r4 | r0 += r4;
0x000c3d18 blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c3d1c ldr r2, [sp, 0x98] | r2 = var_98h;
0x000c3d1e adds r3, r4, r2 | r3 = r4 + r2;
0x000c3d20 str r3, [sp, 0x1c] | var_1ch = r3;
0x000c3d22 add.w r3, r6, sl | r3 = r6 + sl;
0x000c3d26 add.w r3, fp, r3, lsl 3 | r3 = fp + (r3 << 3);
0x000c3d2a str r2, [r3, 0x7c] | *((r3 + 0x7c)) = r2;
0x000c3d2c ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x000c3d2e ldr r2, [sp, 0x60] | r2 = var_60h;
0x000c3d30 cmp r2, r3 |
0x000c3d32 itet gt |
| if (r2 <= r3) {
0x000c3d34 ldrgt r2, [sp, 0x6c] | r2 = var_6ch;
| }
| if (r2 > r3) {
0x000c3d36 movle r2, 0 | r2 = 0;
| }
| if (r2 <= r3) {
0x000c3d38 ldrbgt r2, [r2, r3] | r2 = *((r2 + r3));
| }
0x000c3d3a add.w r3, r6, sl | r3 = r6 + sl;
0x000c3d3e add.w r3, fp, r3, lsl 3 | r3 = fp + (r3 << 3);
0x000c3d42 ittt gt |
| if (r2 <= r3) {
0x000c3d44 subgt r2, 0x2a | r2 -= 0x2a;
| }
| if (r2 > r3) {
0x000c3d46 clzgt r2, r2 | __asm ("clzgt r2, r2");
| }
| if (r2 > r3) {
0x000c3d4a lsrs r2, r2, 5 | r2 >>= 5;
| }
0x000c3d4c str.w r2, [r3, 0x80] | __asm ("str.w r2, [r3, 0x80]");
0x000c3d50 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000c3d52 cmp r3, 0 |
| if (r3 > 0) {
0x000c3d54 ble 0xc3d64 |
0x000c3d56 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000c3d58 ldrb r5, [r2, r3] | r5 = *((r2 + r3));
0x000c3d5a sub.w r5, r5, 0x5e | r5 -= 0x5e;
0x000c3d5e clz r5, r5 | r5 &= r5;
0x000c3d62 lsrs r5, r5, 5 | r5 >>= 5;
| }
0x000c3d64 add r6, sl | r6 += sl;
0x000c3d66 str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h]");
0x000c3d6a add.w r6, fp, r6, lsl 3 | r6 = fp + (r6 << 3);
0x000c3d6e add.w sl, sl, 1 | sl++;
0x000c3d72 str.w fp, [sp, 0x58] | __asm ("str.w fp, [var_58h]");
0x000c3d76 str.w r5, [r6, 0x84] | __asm ("str.w r5, [r6, 0x84]");
0x000c3d7a b 0xc3c16 | goto label_19;
| label_105:
0x000c3d7c ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x000c3d7e mov sl, r0 | sl = r0;
0x000c3d80 ldr r5, [sp, 0x40] | r5 = var_40h;
0x000c3d82 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c3d84 b 0xc3b82 | goto label_20;
| label_90:
0x000c3d86 ldrb r2, [r4, 4] | r2 = *((r4 + 4));
0x000c3d88 cmp r2, 0x2f |
| if (r2 != 0x2f) {
0x000c3d8a bne.w 0xc3986 | goto label_21;
| }
0x000c3d8e ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x000c3d90 subs r2, 0x30 | r2 -= 0x30;
0x000c3d92 cmp r2, 9 |
| if (r2 > 9) {
0x000c3d94 bhi.w 0xc3986 | goto label_21;
| }
0x000c3d98 adds r1, r7, 1 | r1 = r7 + 1;
0x000c3d9a ldrb r2, [r4, r1] | r2 = *((r4 + r1));
0x000c3d9c add r1, r4 | r1 += r4;
0x000c3d9e subs r2, 0x30 | r2 -= 0x30;
0x000c3da0 uxtb r0, r2 | r0 = (int8_t) r2;
0x000c3da2 cmp r0, 9 |
| if (r0 > 9) {
0x000c3da4 bhi.w 0xc43aa | goto label_118;
| }
0x000c3da8 mov lr, r1 | lr = r1;
0x000c3daa asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x000c3dac mov fp, r1 |
0x000c3dae mov r1, r3 | r1 = r3;
0x000c3db0 b 0xc3dda | goto label_119;
| label_22:
0x000c3db2 lsl.w ip, fp, 2 |
0x000c3db6 lsls r0, r2, 2 | r0 = r2 << 2;
0x000c3db8 orr.w ip, ip, r2, lsr 30 |
0x000c3dbc adds r2, r0, r2 | r2 = r0 + r2;
0x000c3dbe adc.w ip, fp, ip | __asm ("adc.w ip, fp, ip");
0x000c3dc2 adds r2, r2, r2 | r2 += r2;
0x000c3dc4 adc.w ip, ip, ip | __asm ("adc.w ip, ip, ip");
0x000c3dc8 adds r2, r3, r2 | r2 = r3 + r2;
0x000c3dca adc.w fp, ip, r3, asr 31 | __asm ("adc.w fp, ip, r3, asr 31");
0x000c3dce cmp.w r2, -0x80000000 |
0x000c3dd2 sbcs r3, fp, 0 | __asm ("sbcs r3, var_98h");
| if (r2 >= -0x80000000) {
0x000c3dd6 bhs.w 0xc3986 | goto label_21;
| }
| label_119:
0x000c3dda ldrb r3, [lr, 1]! | r3 = *((lr += 1));
0x000c3dde mov ip, r1 |
0x000c3de0 adds r1, 1 | r1++;
0x000c3de2 subs r3, 0x30 | r3 -= 0x30;
0x000c3de4 uxtb r0, r3 | r0 = (int8_t) r3;
0x000c3de6 cmp r0, 9 |
| if (r0 < 9) {
0x000c3de8 bls 0xc3db2 | goto label_22;
| }
0x000c3dea add.w fp, ip, 2 |
0x000c3dee mov r3, r2 | r3 = r2;
0x000c3df0 add r7, fp | r7 += fp;
0x000c3df2 b 0xc3988 | goto label_23;
| label_109:
0x000c3df4 ldr r7, [sp, 0x18] | r7 = var_18h;
| label_58:
0x000c3df6 mov.w sl, 1 | sl = 1;
0x000c3dfa b 0xc3c58 | goto label_24;
| label_101:
0x000c3dfc subs r2, 0x28 | r2 -= 0x28;
0x000c3dfe cmp r2, 1 |
| if (r2 > 1) {
0x000c3e00 bhi.w 0xc3a9c | goto label_25;
| }
0x000c3e04 b 0xc399a | goto label_11;
| label_113:
0x000c3e06 dmb ish | __asm ("dmb ish");
0x000c3e0a b 0xc3ca6 | goto label_26;
| label_116:
0x000c3e0c dmb ish | __asm ("dmb ish");
0x000c3e10 b 0xc3ce8 | goto label_27;
| label_94:
0x000c3e12 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000c3e14 ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000c3e18 cmp r3, 0 |
| if (r3 != 0) {
0x000c3e1a bne.w 0xc410e | goto label_120;
| }
0x000c3e1c strh r0, [r7, 0xa] | *((r7 + 0xa)) = r0;
0x000c3e1e bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c3e22 cmp r0, 0 |
| if (r0 != 0) {
0x000c3e24 bne.w 0xc3fb2 | goto label_121;
| }
0x000c3e28 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c3e2c cmp r0, 0 |
| if (r0 != 0) {
0x000c3e2e bne.w 0xc3fb2 | goto label_121;
| }
| label_38:
0x000c3e32 movs r0, 0x30 | r0 = 0x30;
0x000c3e34 movs r1, 0 | r1 = 0;
0x000c3e36 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000c3e3a mov r7, r0 | r7 = r0;
0x000c3e3c cmp r0, 0 |
| if (r0 == 0) {
0x000c3e3e beq.w 0xc3fb2 | goto label_121;
| }
0x000c3e42 movs r2, 0x2c | r2 = 0x2c;
0x000c3e44 movs r1, 0 | r1 = 0;
0x000c3e46 adds r0, 4 | r0 += 4;
0x000c3e48 blx 0x62ec | fcn_000062ec ();
0x000c3e4c mov r2, r8 | r2 = r8;
0x000c3e4e movs r3, 3 | r3 = 3;
0x000c3e50 str r3, [r7] | *(r7) = r3;
| do {
0x000c3e52 mov r3, r2 | r3 = r2;
0x000c3e54 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000c3e56 cmp r2, 0 |
0x000c3e58 bne 0xc3e52 |
| } while (r2 != 0);
0x000c3e5a str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x000c3e5c str r7, [sp, 0x4c] | var_4ch = r7;
0x000c3e5e str r7, [r3, 8] | *((r3 + 8)) = r7;
| label_40:
0x000c3e60 cmp r6, 5 |
| if (r6 != 5) {
0x000c3e62 beq 0xc3e6c |
0x000c3e64 ldr r3, [r7] | r3 = *(r7);
0x000c3e66 cmp r3, 1 |
| if (r3 == 1) {
0x000c3e68 beq.w 0xc42f6 | goto label_122;
| }
| }
0x000c3e6c movs r3, 0 | r3 = 0;
0x000c3e6e mov r8, r7 | r8 = r7;
0x000c3e70 str r3, [sp, 0x5c] | var_5ch = r3;
0x000c3e72 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c3e74 cmp r3, 0 |
| if (r3 != 0) {
0x000c3e76 bne.w 0xc39e6 | goto label_28;
| }
| label_96:
0x000c3e7a mov r8, r5 | r8 = r5;
0x000c3e7c str r5, [sp, 0x4c] | var_4ch = r5;
0x000c3e7e b 0xc39f0 | goto label_29;
| label_117:
0x000c3e80 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000c3e82 mov r4, fp | r4 = fp;
0x000c3e84 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c3e86 bl 0x26dbc | fcn_00026dbc (r0);
0x000c3e8a ldr.w fp, [sp, 0x90] | fp = var_90h;
0x000c3e8e movs r3, 0 | r3 = 0;
0x000c3e90 str r3, [sp, 0x38] | var_38h = r3;
| do {
| label_52:
0x000c3e92 cmp.w fp, 0 |
| if (fp != 0) {
0x000c3e96 beq 0xc3ea0 |
0x000c3e98 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000c3e9c mov r0, fp | r0 = fp;
0x000c3e9e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x000c3ea0 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000c3ea2 mov.w sl, 7 | sl = 7;
0x000c3ea6 bl 0x26dbc | fcn_00026dbc (r0);
0x000c3eaa mov r0, r4 | r0 = r4;
0x000c3eac bl 0x26dbc | fcn_00026dbc (r0);
0x000c3eb0 b 0xc3c58 | goto label_24;
| label_114:
0x000c3eb2 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c3eb4 mov fp, r6 |
| label_49:
0x000c3eb6 ldr r0, [sp, 0x58] | r0 = var_58h;
0x000c3eb8 bl 0x26dbc | fcn_00026dbc (r0);
0x000c3ebc movs r3, 0 | r3 = 0;
0x000c3ebe mov r4, r3 | r4 = r3;
0x000c3ec0 b 0xc3e92 |
| } while (1);
| label_107:
0x000c3ec2 mov r0, sl | r0 = sl;
0x000c3ec4 add r4, fp | r4 += fp;
0x000c3ec6 blx r2 | uint32_t (*r2)(uint32_t) (r0);
0x000c3ec8 b 0xc39f0 | goto label_29;
| label_106:
0x000c3eca mov r1, r0 | r1 = r0;
0x000c3ecc ldr r0, [sp, 0x98] | r0 = var_98h;
0x000c3ece adds r0, 0x90 | r0 += 0x90;
0x000c3ed0 bl 0x5ac48 | r0 = fcn_0005ac48 (r0, r1);
0x000c3ed4 mov r5, r0 | r5 = r0;
0x000c3ed6 cmp r0, 0 |
| if (r0 == 0) {
0x000c3ed8 beq.w 0xc4100 | goto label_123;
| }
0x000c3edc mov r3, r0 | r3 = r0;
0x000c3ede movs r2, 5 | r2 = 5;
0x000c3ee0 str r2, [r3], 0x30 | *(r3) = r2;
| r3 += 0x30;
0x000c3ee4 movs r4, 1 | r4 = 1;
0x000c3ee6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000c3ee8 adds r0, 0x90 | r0 += 0x90;
0x000c3eea str r4, [r0, -0x20] | *((r0 - 0x20)) = r4;
0x000c3eee str r3, [r0, -0x7c] | *((r0 - 0x7c)) = r3;
0x000c3ef2 str r2, [r0, -0x1c] | *((r0 - 0x1c)) = r2;
0x000c3ef6 ldr r2, [sp, 0x98] | r2 = var_98h;
0x000c3ef8 strd r0, r2, [r5, 0x78] | __asm ("strd r0, r2, [r5, 0x78]");
0x000c3efc ldr r1, [sp, 0x94] | r1 = var_94h;
0x000c3efe blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c3f02 ldr.w ip, [sp, 0xa0] | ip = var_a0h;
0x000c3f06 cmp ip, r7 |
| if (ip < r7) {
0x000c3f08 bge 0xc3f1c |
0x000c3f0a ldrb.w r3, [sb, ip] | r3 = *((sb + ip));
0x000c3f0e cmp r3, 0x2a |
0x000c3f10 ittt eq |
| if (r3 != 0x2a) {
0x000c3f12 addeq ip, r4 |
| }
| if (r3 != 0x2a) {
0x000c3f14 streq r4, [r5, 0x80] | *((r5 + 0x80)) = r4;
| }
| if (r3 != 0x2a) {
0x000c3f18 str.w ip, [sp, 0xa0] | __asm ("str.w ip, [var_a0h]");
| goto label_124;
| }
| }
| label_124:
0x000c3f1c ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000c3f1e cmp r3, 0 |
| if (r3 <= 0) {
0x000c3f20 ble 0xc3f54 | goto label_125;
| }
0x000c3f22 ldr r4, [sp, 0xb4] | r4 = var_b4h;
0x000c3f24 add sb, r3 | sb += r3;
0x000c3f26 movs r0, 0 | r0 = 0;
0x000c3f28 subs r3, 1 | r3--;
0x000c3f2a movs r1, 1 | r1 = 1;
| do {
0x000c3f2c ldrb r2, [sb, -0x1]! | r2 = *((sb -= 0x1));
0x000c3f30 cmp r2, 0x2d |
0x000c3f32 itt eq |
| if (r2 != 0x2d) {
0x000c3f34 moveq r2, r3 | r2 = r3;
| }
| if (r2 != 0x2d) {
0x000c3f36 moveq r0, 1 | r0 = 1;
| }
| if (r2 != 0x2d) {
0x000c3f38 beq 0xc3f46 |
| if (r4 == 0) {
0x000c3f3a cbz r4, 0xc3f4e | goto label_126;
| }
0x000c3f3c cmp r2, 0x5e |
| if (r2 != 0x5e) {
0x000c3f3e bne 0xc3f4e | goto label_126;
| }
0x000c3f40 mov r2, r3 | r2 = r3;
0x000c3f42 str.w r1, [r5, 0x84] | __asm ("str.w r1, [r5, 0x84]");
| }
0x000c3f46 str r3, [sp, 0x9c] | var_9ch = r3;
0x000c3f48 subs r3, 1 | r3--;
0x000c3f4a cmp r2, 0 |
0x000c3f4c bne 0xc3f2c |
| } while (r2 != 0);
| if (r0 != 0) {
| label_126:
0x000c3f4e cbz r0, 0xc3f54 |
0x000c3f50 movs r3, 1 | r3 = 1;
0x000c3f52 str r3, [sp, 0xc0] | var_c0h = r3;
| }
| label_125:
0x000c3f54 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000c3f56 mov r0, sl | r0 = sl;
0x000c3f58 add.w r4, fp, ip | r4 = fp + ip;
0x000c3f5c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| label_33:
0x000c3f5e ldr r6, [r5] | r6 = *(r5);
0x000c3f60 cmp r6, 5 |
| if (r6 != 5) {
0x000c3f62 bne.w 0xc39c2 | goto label_30;
| }
0x000c3f66 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x000c3f68 cmp r3, 0 |
| if (r3 == 0) {
0x000c3f6a beq.w 0xc39ca | goto label_31;
| }
0x000c3f6e ldr r3, [sp, 0x88] | r3 = var_88h;
0x000c3f70 ldr.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x000c3f74 cmp r3, 0 |
| if (r3 != 0) {
0x000c3f76 bne.w 0xc4174 | goto label_127;
| }
0x000c3f7a bl 0x25da0 | r0 = fcn_00025da0 ();
| if (r0 == 0) {
0x000c3f7e cbnz r0, 0xc3fb2 |
0x000c3f80 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
| if (r0 != 0) {
0x000c3f84 cbnz r0, 0xc3fb2 | goto label_121;
| }
| label_46:
0x000c3f86 movs r0, 0x30 | r0 = 0x30;
0x000c3f88 movs r1, 0 | r1 = 0;
0x000c3f8a bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000c3f8e mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000c3f90 cbz r0, 0xc3fb2 | goto label_121;
| }
0x000c3f92 movs r2, 0x2c | r2 = 0x2c;
0x000c3f94 movs r1, 0 | r1 = 0;
0x000c3f96 adds r0, 4 | r0 += 4;
0x000c3f98 blx 0x62ec | fcn_000062ec ();
0x000c3f9c movs r3, 2 | r3 = 2;
0x000c3f9e str r5, [r6, 0x10] | *((r6 + 0x10)) = r5;
0x000c3fa0 str r3, [r6] | *(r6) = r3;
0x000c3fa2 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000c3fa4 str r6, [r5, 8] | *((r5 + 8)) = r6;
| if (r3 != 0) {
0x000c3fa6 cbz r3, 0xc3fae |
0x000c3fa8 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000c3faa str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000c3fac str r6, [r3, 8] | *((r3 + 8)) = r6;
| }
0x000c3fae str r6, [sp, 0x7c] | var_7ch = r6;
0x000c3fb0 b 0xc39f0 | goto label_29;
| }
| label_121:
0x000c3fb2 mov r0, r5 | r0 = r5;
0x000c3fb4 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c3fb6 mov.w sl, 7 | sl = 7;
0x000c3fba bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c3fbe b 0xc3c58 | goto label_24;
| label_110:
0x000c3fc0 mov sl, r5 | sl = r5;
0x000c3fc2 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x000c3fc4 str.w sl, [sp, 0x38] | __asm ("str.w sl, [var_38h]");
0x000c3fc8 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
0x000c3fcc cmp r5, 0x65 |
0x000c3fce str.w sl, [sp, 0x58] | __asm ("str.w sl, [var_58h]");
| if (r5 != 0x65) {
0x000c3fd2 bne.w 0xc3c54 | goto label_32;
| }
| label_112:
0x000c3fd6 ldr r3, [pc, 0x268] |
0x000c3fd8 add r3, pc |
0x000c3fda ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000c3fde cmp r3, 0 |
| if (r3 != 0) {
0x000c3fe0 bne.w 0xc42c4 | goto label_128;
| }
0x000c3fe4 bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c3fe8 cmp r0, 0 |
| if (r0 != 0) {
0x000c3fea bne.w 0xc41da | goto label_129;
| }
0x000c3fee bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c3ff2 cmp r0, 0 |
| if (r0 != 0) {
0x000c3ff4 bne.w 0xc41da | goto label_129;
| }
| label_55:
0x000c3ff8 add.w r3, sl, sl, lsl 1 | r3 = sl + (sl << 1);
0x000c3ffc ldr r0, [sp, 0x58] | r0 = var_58h;
0x000c3ffe lsls r7, r3, 3 | r7 = r3 << 3;
0x000c4000 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000c4002 add.w r2, r3, 0x90 | r2 = r3 + 0x90;
0x000c4006 movs r3, 0 | r3 = 0;
0x000c4008 add r2, r7 | r2 += r7;
0x000c400a bl 0x28d94 | r0 = fcn_00028d94 (r0, r1, r2);
0x000c400e mov r5, r0 | r5 = r0;
0x000c4010 cmp r0, 0 |
| if (r0 == 0) {
0x000c4012 beq.w 0xc41da | goto label_129;
| }
0x000c4016 movs r2, 0x78 | r2 = 0x78;
0x000c4018 movs r1, 0 | r1 = 0;
0x000c401a blx 0x62ec | fcn_000062ec ();
0x000c401e mov r3, r5 | r3 = r5;
0x000c4020 movs r1, 5 | r1 = 5;
0x000c4022 ldr r2, [sp, 0xbc] | r2 = var_bch;
0x000c4024 adds r7, 0x48 | r7 += 0x48;
0x000c4026 str r1, [r3], 0x30 | *(r3) = r1;
| r3 += 0x30;
0x000c402a add r7, r3 | r7 += r3;
0x000c402c ldr r1, [sp, 0x38] | r1 = var_38h;
0x000c402e str r2, [r5, 0x74] | *((r5 + 0x74)) = r2;
0x000c4030 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000c4032 str.w sl, [r5, 0x70] | __asm ("str.w sl, [r5, 0x70]");
| if (r1 != 0) {
0x000c4036 cbz r1, 0xc404e |
0x000c4038 mov sb, r1 | sb = r1;
0x000c403a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000c403c mov r0, r7 | r0 = r7;
0x000c403e blx 0x65ac | EVP_CIPHER_CTX_free ();
0x000c4042 mov r0, sb | r0 = sb;
0x000c4044 bl 0x26dbc | fcn_00026dbc (r0);
0x000c4048 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000c404a ldr.w sl, [r3, 0x40] | sl = *((r3 + 0x40));
| }
0x000c404e cmp.w sl, 0 |
0x000c4052 it gt |
| if (sl <= 0) {
0x000c4054 movgt r2, 0 | r2 = 0;
| }
| if (sl <= 0) {
0x000c4056 ble 0xc4068 | goto label_130;
| }
| do {
0x000c4058 ldr r1, [r3, 0x4c] | r1 = *((r3 + 0x4c));
0x000c405a adds r2, 1 | r2++;
0x000c405c cmp r2, sl |
0x000c405e str r7, [r3, 0x48] | *((r3 + 0x48)) = r7;
0x000c4060 add.w r3, r3, 0x18 | r3 += 0x18;
0x000c4064 add r7, r1 | r7 += r1;
0x000c4066 bne 0xc4058 |
| } while (r2 != sl);
| label_130:
0x000c4068 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000c406a subs r4, r4, r3 | r4 -= r3;
0x000c406c add r4, r6 | r4 += r6;
0x000c406e adds r4, 1 | r4++;
0x000c4070 b 0xc3f5e | goto label_33;
| label_93:
0x000c4072 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000c4074 cmp r3, 0 |
| if (r3 != 0) {
0x000c4076 bne.w 0xc42ca | goto label_131;
| }
0x000c407a cmp.w r8, 0 |
| if (r8 != 0) {
0x000c407e beq 0xc408e |
0x000c4080 cmp r6, 1 |
| if (r6 != 1) {
0x000c4082 bne 0xc408e | goto label_132;
| }
0x000c4084 ldr.w r3, [r8] | r3 = *(r8);
0x000c4088 cmp r3, 5 |
| if (r3 != 5) {
0x000c408a bne.w 0xc42f6 | goto label_122;
| }
| }
| label_132:
0x000c408e ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
| if (r3 != 0) {
0x000c4092 cbnz r3, 0xc409e | goto label_133;
| }
0x000c4094 b 0xc42f0 | goto label_134;
| do {
| label_34:
0x000c4096 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000c4098 mov r8, r3 | r8 = r3;
| if (r2 == 0) {
0x000c409a cbz r2, 0xc40d0 | goto label_135;
| }
| label_35:
0x000c409c mov r3, r2 | r3 = r2;
| label_133:
0x000c409e ldr r2, [r3] | r2 = *(r3);
0x000c40a0 cmp r2, 1 |
0x000c40a2 beq 0xc4096 |
| } while (r2 == 1);
0x000c40a4 cmp r2, 4 |
0x000c40a6 ldr r1, [r5] | r1 = *(r5);
| if (r2 == 4) {
0x000c40a8 beq 0xc40c4 | goto label_136;
| }
0x000c40aa cmp r1, 4 |
0x000c40ac it ne |
| if (r1 == 4) {
0x000c40ae cmpne r1, 1 | __asm ("cmpne r1, 1");
| goto label_137;
| }
| if (r1 != 4) {
| label_137:
0x000c40b0 bne 0xc4096 | goto label_34;
| }
| do {
0x000c40b2 str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x000c40b4 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x000c40b6 mov r3, r8 | r3 = r8;
| label_36:
0x000c40b8 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000c40ba mov r8, r5 | r8 = r5;
0x000c40bc str r5, [r3, 8] | *((r3 + 8)) = r5;
0x000c40be movs r3, 1 | r3 = 1;
0x000c40c0 str r3, [sp, 0x5c] | var_5ch = r3;
0x000c40c2 b 0xc39f0 | goto label_29;
| label_136:
0x000c40c4 cmp r1, 1 |
0x000c40c6 beq 0xc40b2 |
| } while (r1 == 1);
0x000c40c8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000c40ca mov r8, r3 | r8 = r3;
0x000c40cc cmp r2, 0 |
| if (r2 != 0) {
0x000c40ce bne 0xc409c | goto label_35;
| }
| label_135:
0x000c40d0 str r5, [sp, 0x4c] | var_4ch = r5;
0x000c40d2 b 0xc40b8 | goto label_36;
| label_79:
0x000c40d4 cmp r5, 1 |
| if (r5 != 1) {
0x000c40d6 bne.w 0xc3854 | goto label_37;
| }
0x000c40da mov r0, r7 | r0 = r7;
0x000c40dc bl 0xa47a4 | r0 = fcn_000a47a4 (r0);
0x000c40e0 mov sl, r0 | sl = r0;
0x000c40e2 cmp r0, 0 |
| if (r0 != 0) {
0x000c40e4 bne.w 0xc3714 | goto label_4;
| }
0x000c40e8 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000c40ea mov r1, r5 | r1 = r5;
0x000c40ec ldr r2, [sp, 0x74] | r2 = var_74h;
0x000c40ee bl 0x53ffc | r0 = fcn_00053ffc (r0, r1, r2, r3, r4, r5, r6);
0x000c40f2 mov sl, r0 | sl = r0;
0x000c40f4 cmp.w sl, 0 |
| if (sl != 0) {
0x000c40f8 bne.w 0xc3714 | goto label_4;
| }
0x000c40fc b.w 0xc3854 | goto label_37;
| label_123:
0x000c4100 mov r0, sl | r0 = sl;
0x000c4102 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000c4104 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c4106 mov.w sl, 7 | sl = 7;
0x000c410a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000c410c b 0xc3c58 | goto label_24;
| label_120:
0x000c410e dmb ish | __asm ("dmb ish");
0x000c4112 b 0xc3e32 | goto label_38;
| label_77:
0x000c4114 ldrb.w r3, [r4, 0xef] | r3 = *((r4 + 0xef));
0x000c4118 b.w 0xc37c4 | goto label_39;
| label_95:
0x000c411c mov r7, r8 | r7 = r8;
0x000c411e b 0xc3e60 | goto label_40;
| label_80:
0x000c4120 cmp r3, 0 |
| if (r3 == 0) {
0x000c4122 beq 0xc41ce | goto label_138;
| }
0x000c4124 ldr r2, [pc, 0x11c] |
0x000c4126 add r2, pc | r2 = 0x18836e;
| label_51:
0x000c4128 ldr r0, [pc, 0x11c] |
0x000c412a add r0, pc | r0 = 0x188376;
0x000c412c bl 0x5cb60 | r0 = fcn_0005cb60 ();
0x000c4130 mov r5, r0 | r5 = r0;
0x000c4132 b.w 0xc3818 | goto label_41;
| label_85:
0x000c4136 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000c4138 ldrh r3, [r3, 0x10] | r3 = *((r3 + 0x10));
| label_84:
0x000c413a ldr r2, [pc, 0x110] |
0x000c413c and r3, r3, 0x3f | r3 &= 0x3f;
0x000c4140 add r2, pc | r2 = 0x188392;
0x000c4142 add r3, r2 | r3 += r2;
0x000c4144 ldrb.w r3, [r3, 0x258] | r3 = *((r3 + 0x258));
0x000c4148 cmp r3, 5 |
0x000c414a itt eq |
| if (r3 != 5) {
0x000c414c moveq r3, 0 | r3 = 0;
| }
| if (r3 == 5) {
0x000c414e streq r3, [sp, 0x80] | s1 = r3;
| goto label_139;
| }
| if (r3 == 5) {
| label_139:
0x000c4150 beq.w 0xc38a4 | goto label_42;
| }
| label_82:
0x000c4154 mov.w sl, 7 | sl = 7;
0x000c4158 b.w 0xc3714 | goto label_4;
| label_83:
0x000c415c ldr r2, [sp, 0x74] | r2 = var_74h;
0x000c415e ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x000c4160 cmp r2, 1 |
| if (r2 != 1) {
0x000c4162 bne.w 0xc388c | goto label_43;
| }
0x000c4166 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000c4168 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000c416a str r3, [sp, 0x80] | s1 = r3;
0x000c416c b.w 0xc389c | goto label_44;
| label_108:
0x000c4170 movs r6, 1 | r6 = 1;
0x000c4172 b 0xc3bbc | goto label_45;
| label_127:
0x000c4174 dmb ish | __asm ("dmb ish");
0x000c4178 b 0xc3f86 | goto label_46;
| label_73:
0x000c417a ldr.w sb, [sp, 0x70] | sb = var_70h;
0x000c417e movs r1, 0 | r1 = 0;
0x000c4180 mov r0, sb | r0 = sb;
0x000c4182 bl 0x2bc9c | fcn_0002bc9c (r0, r1, r2, r3);
0x000c4186 ldrh.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000c418a and r3, r3, 0x3f | r3 &= 0x3f;
0x000c418e add fp, r3 |
0x000c4190 ldrb.w r3, [fp, 0x258] | r3 = *(arg_258h);
0x000c4194 b.w 0xc3770 | goto label_47;
| label_75:
0x000c4198 ldr.w sb, [sp, 0x78] | sb = var_78h;
0x000c419c movs r1, 0 | r1 = 0;
0x000c419e mov r0, sb | r0 = sb;
0x000c41a0 bl 0x2bc9c | fcn_0002bc9c (r0, r1, r2, r3);
0x000c41a4 ldrh.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000c41a8 and r3, r3, 0x3f | r3 &= 0x3f;
0x000c41ac add fp, r3 |
0x000c41ae ldrb.w r3, [fp, 0x258] | r3 = *(arg_258h_2);
0x000c41b2 b.w 0xc379c | goto label_48;
| label_115:
0x000c41b6 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c41b8 ldr.w fp, [sp, 0x90] | fp = var_90h;
0x000c41bc b 0xc3eb6 | goto label_49;
| label_92:
0x000c41be ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c41c0 mov.w sl, 7 | sl = 7;
0x000c41c4 b 0xc3c58 | goto label_24;
| label_81:
0x000c41c6 ldr r3, [pc, 0x88] |
0x000c41c8 add r3, pc | r3 = 0x18841e;
0x000c41ca b.w 0xc3802 | goto label_50;
| label_138:
0x000c41ce ldr r2, [pc, 0x84] |
0x000c41d0 add r2, pc | r2 = 0x18842a;
0x000c41d2 b 0xc4128 | goto label_51;
| label_98:
0x000c41d4 ldr.w sl, [sp, 0x5c] | sl = var_5ch;
0x000c41d8 b 0xc3c58 | goto label_24;
| label_129:
0x000c41da ldr r0, [sp, 0x58] | r0 = var_58h;
0x000c41dc ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c41de bl 0x26dbc | fcn_00026dbc (r0);
0x000c41e2 movs r3, 0 | r3 = 0;
0x000c41e4 ldr.w fp, [sp, 0x90] | fp = var_90h;
0x000c41e8 mov r4, r3 | r4 = r3;
0x000c41ea b 0xc3e92 | goto label_52;
| label_100:
0x000c41ec movs r1, 0xc | r1 = 0xc;
0x000c41ee add.w r0, r7, 0x10 | r0 = r7 + 0x10;
0x000c41f2 bl 0x7a8a0 | r0 = fcn_0007a8a0 (r0, r1);
0x000c41f6 mov sl, r0 | sl = r0;
0x000c41f8 cmp r0, 0 |
| if (r0 == 0) {
0x000c41fa beq.w 0xc4304 | goto label_140;
| }
0x000c41fe ldr r6, [r7, 0x10] | r6 = *((r7 + 0x10));
0x000c4200 b 0xc3c68 | goto label_53;
| label_86:
0x000c4258 str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
| label_59:
0x000c425a movs r6, 0 | r6 = 0;
| label_57:
0x000c425c movs r3, 0 | r3 = 0;
0x000c425e add.w fp, sp, 0x98 |
0x000c4262 mov r1, r6 | r1 = r6;
0x000c4264 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000c4268 strd r3, r3, [sp, 0x98] | __asm ("strd r3, r3, [var_9ch]");
0x000c426c add r2, sp, 0x9c | r2 += var_9ch;
0x000c426e str r3, [sp, 0xa0] | var_a0h = r3;
0x000c4270 mov r0, r7 | r0 = r7;
0x000c4272 add r3, sp, 0xa0 | r3 += var_a0h;
0x000c4274 ldr r6, [r7] | r6 = *(r7);
0x000c4276 bl 0xbb4b0 | fcn_000bb4b0 (r0, r1, r2, r3, r4);
0x000c4278 ldrsb sb, [fp], 0x26 | sb = *(fp);
| fp += 0x26;
| if (r3 == 0) {
0x000c427c cbnz r3, 0xc4290 |
0x000c427e ldr.w r8, [sp, 0x9c] | r8 = var_9ch;
0x000c4282 cmp.w r8, 1 |
| if (r8 <= 1) {
0x000c4286 ble 0xc4290 | goto label_61;
| }
0x000c4288 ldrb.w r3, [r6, 0xec] | r3 = *((r6 + 0xec));
0x000c428c cmp r3, 0 |
| if (r3 != 0) {
0x000c428e bne 0xc432e | goto label_141;
| }
| }
| label_61:
0x000c4290 ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x000c4292 mov r2, fp | r2 = fp;
0x000c4294 mov r0, r7 | r0 = r7;
0x000c4296 bl 0xc3478 | fcn_000c3478 (r0, r1, r2);
0x000c429a ldr.w sl, [sp, 0x98] | sl = var_98h;
0x000c429e ldr.w r0, [r4, 0xfc] | r0 = *((r4 + 0xfc));
0x000c42a2 bl 0x7a69c | fcn_0007a69c (r0);
0x000c42a6 movs r3, 0 | r3 = 0;
0x000c42a8 str.w r3, [r4, 0xfc] | __asm ("str.w r3, [r4, 0xfc]");
0x000c42ac cmp.w sl, 0 |
| if (sl != 0) {
0x000c42b0 bne.w 0xc3714 | goto label_4;
| }
0x000c42b4 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x000c42b6 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000c42ba str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x000c42bc vstr d16, [r7, 0x20] | __asm ("vstr d16, [r7, 0x20]");
0x000c42c0 b.w 0xc37d6 | goto label_54;
| label_128:
0x000c42c4 dmb ish | __asm ("dmb ish");
0x000c42c8 b 0xc3ff8 | goto label_55;
| label_131:
0x000c42ca mov r0, r5 | r0 = r5;
0x000c42cc ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c42ce bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c42d2 ldr.w sl, [sp, 0x5c] | sl = var_5ch;
0x000c42d6 b 0xc3c58 | goto label_24;
| label_76:
0x000c42d8 ldr r0, [sp, 0x78] | r0 = var_78h;
0x000c42da bl 0x298e8 | r0 = fcn_000298e8 (r0);
0x000c42de mov r2, r0 | r2 = r0;
0x000c42e0 mov r3, r1 | r3 = r1;
0x000c42e2 b.w 0xc37aa | goto label_56;
| label_74:
0x000c42e6 ldr r0, [sp, 0x70] | r0 = var_70h;
0x000c42e8 bl 0x298e8 | fcn_000298e8 (r0);
0x000c42ec b.w 0xc377c | goto label_10;
| label_134:
0x000c42f0 mov r3, r8 | r3 = r8;
0x000c42f2 str r5, [sp, 0x4c] | var_4ch = r5;
0x000c42f4 b 0xc40b8 | goto label_36;
| label_122:
0x000c42f6 mov r0, r5 | r0 = r5;
0x000c42f8 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000c42fa mov.w sl, 1 | sl = 1;
0x000c42fe bl 0x7a7e8 | fcn_0007a7e8 (r0);
0x000c4302 b 0xc3c58 | goto label_24;
| label_140:
0x000c4304 ldr r6, [r7, 0x10] | r6 = *((r7 + 0x10));
0x000c4306 movs r1, 0xc | r1 = 0xc;
0x000c4308 mov r0, r6 | r0 = r6;
0x000c430a bl 0x2ca54 | r0 = fcn_0002ca54 (r0, r1, r2, r3, r4, r5, r6);
0x000c430e mov sl, r0 | sl = r0;
0x000c4310 cmp r0, 0 |
| if (r0 != 0) {
0x000c4312 bne.w 0xc3c68 | goto label_53;
| }
0x000c4316 b 0xc425c | goto label_57;
| label_97:
0x000c4318 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x000c431a cmp r3, 0 |
| if (r3 != 0) {
0x000c431c bne.w 0xc3df6 | goto label_58;
| }
0x000c4320 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000c4322 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x000c4324 ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x000c4326 cmp r3, 0 |
| if (r3 == 0) {
0x000c4328 beq 0xc425a | goto label_59;
| }
0x000c432a b.w 0xc3a4a | goto label_60;
| label_141:
0x000c432e ldr r3, [pc, 0xc8] |
0x000c4330 ldr r6, [sp, 0xa0] | r6 = var_a0h;
0x000c4332 add r3, pc |
0x000c4334 ldr.w r3, [r3, 0xd0] | r3 = imp.atan;
0x000c4338 cmp r3, 0 |
| if (r3 != 0) {
0x000c433a bne 0xc43b8 | goto label_142;
| }
0x000c433c bl 0x25da0 | r0 = fcn_00025da0 ();
0x000c4340 cmp r0, 0 |
| if (r0 != 0) {
0x000c4342 bne 0xc43b2 | goto label_143;
| }
0x000c4344 bl 0x5a4b8 | r0 = fcn_0005a4b8 ();
0x000c4348 cbnz r0, 0xc43b2 |
| while (1) {
0x000c434a add.w r8, r8, r8, lsl 1 | r8 += (r8 << 1);
0x000c434e movs r1, 0 | r1 = 0;
0x000c4350 add.w r0, r8, r6 | r0 = r8 + r6;
0x000c4354 lsls r0, r0, 3 | r0 <<= 3;
0x000c4356 bl 0x28c3c | r0 = fcn_00028c3c (r0);
0x000c435a mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x000c435c cbz r0, 0xc43b2 |
0x000c435e ldr r6, [sp, 0x9c] | r6 = var_9ch;
0x000c4360 add r3, sp, 0xa8 | r3 += x;
0x000c4362 str r3, [sp] | *(sp) = r3;
0x000c4364 movs r1, 0 | r1 = 0;
0x000c4366 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x000c436a add r3, sp, 0xa4 | r3 += var_a4h;
0x000c436c ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000c436e add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x000c4372 str r0, [sp, 0xa4] | var_a4h = r0;
0x000c4374 add.w r6, r0, r6, lsl 3 | r6 = r0 + (r6 << 3);
0x000c4378 mov r0, r7 | r0 = r7;
0x000c437a str r6, [sp, 0xa8] | x = r6;
0x000c437c bl 0xc34ec | fcn_000c34ec (r0, r1, r2, r3, r4, r5, r6);
0x000c4380 ldr r2, [sp, 0xa8] | r2 = x;
0x000c4382 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x000c4384 ldr r1, [sp, 0x98] | r1 = var_98h;
0x000c4386 subs r2, r2, r6 | r2 -= r6;
0x000c4388 asrs r2, r2, 2 | r2 >>= 2;
0x000c438a sub.w r3, r3, r8 | r3 -= r8;
0x000c438e asrs r3, r3, 3 | r3 >>= 3;
0x000c4390 str r2, [sp, 0xa0] | var_a0h = r2;
0x000c4392 movw r2, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000c4396 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x000c439a mul r3, r2, r3 | r3 = r2 * r3;
0x000c439e str r3, [sp, 0x9c] | var_9ch = r3;
| if (r1 == 0) {
0x000c43a0 cbz r1, 0xc43be | goto label_144;
| }
| label_62:
0x000c43a2 mov r0, r8 | r0 = r8;
0x000c43a4 bl 0x26dbc | fcn_00026dbc (r0);
0x000c43a8 b 0xc4290 | goto label_61;
| label_118:
0x000c43aa mov fp, sb |
0x000c43ac add r7, fp | r7 += fp;
0x000c43ae b.w 0xc3988 | goto label_23;
| }
| label_143:
0x000c43b2 movs r3, 7 | r3 = 7;
0x000c43b4 str r3, [sp, 0x98] | var_98h = r3;
0x000c43b6 b 0xc4290 | goto label_61;
| label_142:
0x000c43b8 dmb ish | __asm ("dmb ish");
0x000c43bc b 0xc434a |
| }
| label_144:
0x000c43be mov r2, r8 | r2 = r8;
0x000c43c0 mov r0, r7 | r0 = r7;
0x000c43c2 bl 0xc073c | r0 = fcn_000c073c (r0, r1, r2, r3, r4);
0x000c43c6 mov sl, r0 | sl = r0;
0x000c43c8 str r0, [sp, 0x98] | var_98h = r0;
0x000c43ca cmp r0, 0 |
| if (r0 != 0) {
0x000c43cc bne 0xc43a2 | goto label_62;
| }
0x000c43ce subs r6, 4 | r6 -= 4;
0x000c43d0 b 0xc43ea | goto label_145;
| label_63:
0x000c43d2 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000c43d4 mov r2, r8 | r2 = r8;
0x000c43d6 ldr r1, [r6, 4]! | r1 = *((r6 += 4));
0x000c43da mov r0, r7 | r0 = r7;
0x000c43dc bl 0xc073c | fcn_000c073c (r0, r1, r2, r3, r4);
0x000c43de vld2.8 {d15[0], d16[0]}, [lr], sl | __asm ("vld2.8 {d15[0], d16[0]}, [lr], sl");
0x000c43e2 lsrs r1, r0, 8 | r1 = r0 >> 8;
0x000c43e4 str r0, [sp, 0x98] | var_98h = r0;
0x000c43e6 cmp r0, 0 |
| if (r0 != 0) {
0x000c43e8 bne 0xc43a2 | goto label_62;
| }
| label_145:
0x000c43ea ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x000c43ec cmp sl, r3 |
| if (sl < r3) {
0x000c43ee blt 0xc43d2 | goto label_63;
| }
0x000c43f0 b 0xc43a2 | goto label_62;
| label_71:
0x000c43f2 blx 0x6430 | fcn_00006430 ();
0x000c43f6 nop |
0x000c43f8 ldrsh r2, [r4, r5] | r2 = *((r4 + r5));
0x000c43fa movs r2, r0 | r2 = r0;
0x000c43fc movs r0, 0 | r0 = 0;
0x000c43fe bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xc4786 */
| #include <stdint.h>
|
; (fcn) fcn.000c4786 () | uint32_t fcn_000c4786 (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000c4788 svclt 0x480c01 | __asm ("svclt 0x480c01");
0x000c478c rsbs r1, r1, 0 | r1 -= ;
0x000c478e subs r2, r1, 1 | r2 = r1 - 1;
| if (r2 != r1) {
0x000c4790 beq.w 0xc49d2 |
0x000c4794 movs r3, r0 | r3 = r0;
0x000c4796 it mi |
| if (r3 < r0) {
0x000c4798 rsbmi r3, r0, 0 | __asm ("rsbmi r3, r0, 0");
| }
0x000c479a cmp r3, r1 |
| if (r3 < r1) {
0x000c479c bls.w 0xc49dc | goto label_0;
| }
0x000c47a0 tst r1, r2 |
| if ((r1 & r2) == 0) {
0x000c47a2 beq.w 0xc49ec | goto label_1;
| }
0x000c47a6 clz r2, r3 | r2 &= r3;
0x000c47aa clz r0, r1 | r0 &= r1;
0x000c47ae sub.w r2, r0, r2 | r2 = r0 - r2;
0x000c47b2 rsb.w r2, r2, 0x1f | r2 = 0x1f - r2;
0x000c47b6 adr r0, 0x10 | r0 = 0x10;
0x000c47b8 add.w r2, r0, r2, lsl 4 | r2 = r0 + (r2 << 4);
0x000c47bc mov.w r0, 0 | r0 = 0;
0x000c47c0 mov pc, r2 | pc = r2;
0x000c47c2 nop |
0x000c47c4 nop.w |
0x000c47c8 cmp.w r3, r1, lsl 31 |
0x000c47cc nop |
0x000c47ce adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c47d2 it hs |
| if (r3 < r1) {
0x000c47d4 subhs r3, r3, r1, lsl 31 | r3 -= (r1 << 31);
| }
0x000c47d8 cmp.w r3, r1, lsl 30 |
0x000c47dc nop |
0x000c47de adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c47e2 it hs |
| if (r3 < r1) {
0x000c47e4 subhs r3, r3, r1, lsl 30 | r3 -= (r1 << 30);
| }
0x000c47e8 cmp.w r3, r1, lsl 29 |
0x000c47ec nop |
0x000c47ee adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c47f2 it hs |
| if (r3 < r1) {
0x000c47f4 subhs r3, r3, r1, lsl 29 | r3 -= (r1 << 29);
| }
0x000c47f8 cmp.w r3, r1, lsl 28 |
0x000c47fc nop |
0x000c47fe adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4802 it hs |
| if (r3 < r1) {
0x000c4804 subhs r3, r3, r1, lsl 28 | r3 -= (r1 << 28);
| }
0x000c4808 cmp.w r3, r1, lsl 27 |
0x000c480c nop |
0x000c480e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4812 it hs |
| if (r3 < r1) {
0x000c4814 subhs r3, r3, r1, lsl 27 | r3 -= (r1 << 27);
| }
0x000c4818 cmp.w r3, r1, lsl 26 |
0x000c481c nop |
0x000c481e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4822 it hs |
| if (r3 < r1) {
0x000c4824 subhs r3, r3, r1, lsl 26 | r3 -= (r1 << 26);
| }
0x000c4828 cmp.w r3, r1, lsl 25 |
0x000c482c nop |
0x000c482e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4832 it hs |
| if (r3 < r1) {
0x000c4834 subhs r3, r3, r1, lsl 25 | r3 -= (r1 << 25);
| }
0x000c4838 cmp.w r3, r1, lsl 24 |
0x000c483c nop |
0x000c483e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4842 it hs |
| if (r3 < r1) {
0x000c4844 subhs r3, r3, r1, lsl 24 | r3 -= (r1 << 24);
| }
0x000c4848 cmp.w r3, r1, lsl 23 |
0x000c484c nop |
0x000c484e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4852 it hs |
| if (r3 < r1) {
0x000c4854 subhs r3, r3, r1, lsl 23 | r3 -= (r1 << 23);
| }
0x000c4858 cmp.w r3, r1, lsl 22 |
0x000c485c nop |
0x000c485e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4862 it hs |
| if (r3 < r1) {
0x000c4864 subhs r3, r3, r1, lsl 22 | r3 -= (r1 << 22);
| }
0x000c4868 cmp.w r3, r1, lsl 21 |
0x000c486c nop |
0x000c486e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4872 it hs |
| if (r3 < r1) {
0x000c4874 subhs r3, r3, r1, lsl 21 | r3 -= (r1 << 21);
| }
0x000c4878 cmp.w r3, r1, lsl 20 |
0x000c487c nop |
0x000c487e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4882 it hs |
| if (r3 < r1) {
0x000c4884 subhs r3, r3, r1, lsl 20 | r3 -= (r1 << 20);
| }
0x000c4888 cmp.w r3, r1, lsl 19 |
0x000c488c nop |
0x000c488e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4892 it hs |
| if (r3 < r1) {
0x000c4894 subhs r3, r3, r1, lsl 19 | r3 -= (r1 << 19);
| }
0x000c4898 cmp.w r3, r1, lsl 18 |
0x000c489c nop |
0x000c489e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c48a2 it hs |
| if (r3 < r1) {
0x000c48a4 subhs r3, r3, r1, lsl 18 | r3 -= (r1 << 18);
| }
0x000c48a8 cmp.w r3, r1, lsl 17 |
0x000c48ac nop |
0x000c48ae adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c48b2 it hs |
| if (r3 < r1) {
0x000c48b4 subhs r3, r3, r1, lsl 17 | r3 -= (r1 << 17);
| }
0x000c48b8 cmp.w r3, r1, lsl 16 |
0x000c48bc nop |
0x000c48be adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c48c2 it hs |
| if (r3 < r1) {
0x000c48c4 subhs r3, r3, r1, lsl 16 | r3 -= (r1 << 16);
| }
0x000c48c8 cmp.w r3, r1, lsl 15 |
0x000c48cc nop |
0x000c48ce adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c48d2 it hs |
| if (r3 < r1) {
0x000c48d4 subhs r3, r3, r1, lsl 15 | r3 -= (r1 << 15);
| }
0x000c48d8 cmp.w r3, r1, lsl 14 |
0x000c48dc nop |
0x000c48de adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c48e2 it hs |
| if (r3 < r1) {
0x000c48e4 subhs r3, r3, r1, lsl 14 | r3 -= (r1 << 14);
| }
0x000c48e8 cmp.w r3, r1, lsl 13 |
0x000c48ec nop |
0x000c48ee adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c48f2 it hs |
| if (r3 < r1) {
0x000c48f4 subhs r3, r3, r1, lsl 13 | r3 -= (r1 << 13);
| }
0x000c48f8 cmp.w r3, r1, lsl 12 |
0x000c48fc nop |
0x000c48fe adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4900 movs r0, r0 |
0x000c4902 it hs |
| if (r0 < r0) {
0x000c4904 subhs r3, r3, r1, lsl 12 | r3 -= (r1 << 12);
| }
0x000c4908 cmp.w r3, r1, lsl 11 |
0x000c490c nop |
0x000c490e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4912 it hs |
| if (r3 < r1) {
0x000c4914 subhs r3, r3, r1, lsl 11 | r3 -= (r1 << 11);
| }
0x000c4918 cmp.w r3, r1, lsl 10 |
0x000c491c nop |
0x000c491e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4922 it hs |
| if (r3 < r1) {
0x000c4924 subhs r3, r3, r1, lsl 10 | r3 -= (r1 << 10);
| }
0x000c4928 cmp.w r3, r1, lsl 9 |
0x000c492a cmp r7, 0x41 |
0x000c492c nop |
0x000c492e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4932 it hs |
| if (r7 < 0x41) {
0x000c4934 subhs r3, r3, r1, lsl 9 | r3 -= (r1 << 9);
| }
0x000c4938 cmp.w r3, r1, lsl 8 |
0x000c493a cmp r7, 1 |
0x000c493c nop |
0x000c493e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4942 it hs |
| if (r7 < 1) {
0x000c4944 subhs r3, r3, r1, lsl 8 | r3 -= (r1 << 8);
| }
0x000c4948 cmp.w r3, r1, lsl 7 |
0x000c494c nop |
0x000c494e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4952 it hs |
| if (r3 < r1) {
0x000c4954 subhs r3, r3, r1, lsl 7 | r3 -= (r1 << 7);
| }
0x000c4958 cmp.w r3, r1, lsl 6 |
0x000c495c nop |
0x000c495e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4962 it hs |
| if (r3 < r1) {
0x000c4964 subhs r3, r3, r1, lsl 6 | r3 -= (r1 << 6);
| }
0x000c4968 cmp.w r3, r1, lsl 5 |
0x000c496c nop |
0x000c496e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4972 it hs |
| if (r3 < r1) {
0x000c4974 subhs r3, r3, r1, lsl 5 | r3 -= (r1 << 5);
| }
0x000c4978 cmp.w r3, r1, lsl 4 |
0x000c497c nop |
0x000c497e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4982 it hs |
| if (r3 < r1) {
0x000c4984 subhs r3, r3, r1, lsl 4 | r3 -= (r1 << 4);
| }
0x000c4988 cmp.w r3, r1, lsl 3 |
0x000c498c nop |
0x000c498e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c4990 movs r0, r0 |
0x000c4992 it hs |
| if (r0 < r0) {
0x000c4994 subhs r3, r3, r1, lsl 3 | r3 -= (r1 << 3);
| }
0x000c4998 cmp.w r3, r1, lsl 2 |
0x000c499c nop |
0x000c499e adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c49a2 it hs |
| if (r3 < r1) {
0x000c49a4 subhs r3, r3, r1, lsl 2 | r3 -= (r1 << 2);
| }
0x000c49a8 cmp.w r3, r1, lsl 1 |
0x000c49aa lsrs r1, r0, 0x1d | r1 = r0 >> 0x1d;
0x000c49ac nop |
0x000c49ae adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c49b2 it hs |
| if (r1 < r0) {
0x000c49b4 subhs r3, r3, r1, lsl 1 | r3 -= (r1 << 1);
| }
0x000c49b8 cmp.w r3, r1 |
0x000c49bc nop |
0x000c49be adc.w r0, r0, r0 | __asm ("adc.w r0, r0, r0");
0x000c49c2 it hs |
| if (r3 < r1) {
0x000c49c4 subhs r3, r3, r1 | r3 -= r1;
| }
0x000c49c8 cmp.w ip, 0 |
0x000c49cc it mi |
| if (ip < 0) {
0x000c49ce rsbmi r0, r0, 0 | __asm ("rsbmi r0, r0, 0");
| }
0x000c49d0 bx lr | return r0;
| }
0x000c49d2 teq.w ip, r0 | __asm ("teq.w ip, r0");
0x000c49d6 it mi |
| if (ip < 0) {
0x000c49d8 rsbmi r0, r0, 0 | __asm ("rsbmi r0, r0, 0");
| }
0x000c49da bx lr | return r0;
| label_0:
0x000c49dc it lo |
| if (ip >= 0) {
0x000c49de movlo r0, 0 | r0 = 0;
| }
0x000c49e0 itt eq |
| if (ip == 0) {
0x000c49e2 asreq r0, ip, 0x1f | __asm ("asreq r0, ip, 0x1f");
| }
| if (ip == 0) {
0x000c49e6 orr r0, r0, 1 | r0 |= 1;
| }
0x000c49ea bx lr | return r0;
| label_1:
0x000c49ec clz r2, r1 | r2 &= r1;
0x000c49f0 rsb.w r2, r2, 0x1f | r2 = 0x1f - r2;
0x000c49f4 cmp.w ip, 0 |
0x000c49f8 lsr.w r0, r3, r2 | r0 = r3 >> r2;
0x000c49fc it mi |
| if (ip < 0) {
0x000c49fe rsbmi r0, r0, 0 | __asm ("rsbmi r0, r0, 0");
| }
0x000c4a00 bx lr | return r0;
| }
[*] Function mmap used 1 times sqlcipher